Hi,
is there any view about ser working with openXCAP server
I set up openXCAP and tried it but unfortunately there are some
incompatibility issues.
I got the following error in openXCAP:
Invalid Document Selector xcap-root/pres-rules/users/pgr(a)voip.touk.pl/index
Hi, pua_usrloc has an issue with SIP device that publish their state, since
the PUBLISH is generated twice:
1) With the REGISTER by pua_usrloc module.
2) With the PUBLISH sent by the device.
If for example the user sets "Online" - "Away" status and after that the
device refreshes the REGISTER, then its state will just be "Online" (the
state pua_usrloc generates).
In order to avoid this issue it could be nice to query a BD table looking for
the "User-Agent" and just exec "pua_set_publish()" if the device doesn't
support presence PUBLISH.
The query could be done by regular expressions in order to allow different
versions of same device, all of them supporting presence.
A doubt I have is:
Would be easier store user-agents of devices supporting presence? or not
supporting presence? which one list will be shorter?
Because it, I'd like to start a page in the wiki containing all the
devices "User-Agent" (with regular expression) supporting (or not) presence
PUBLISH, and a small script to generate the table after copy&paste the whole
list from the web.
What do you think about it?
Regards.
--
Iñaki Baz Castillo
ibc(a)in.ilimit.es
Hi there!
Can anyone tell me how to get the RealTime Online user status other than
using command 'serctl ul show'? Or how can I store the realtime online user
status to the MySQL db?
Thanks.
Cheers,
Roa Yu :-)
I've just tried and in this way (UA1-------> NAT-------->
PROXY---------> UA2), with UA2 in the same net of SIP proxy, Mediaproxy
works.
El Tuesday 09 October 2007 13:26:19 Daniel Grotti escribió:
> I have not configured it explicitely.
> This is my opense.cfg file:
Please, first try what I said:
A call from UA1 (behind your NAT) to other device out of your
LAN. MediaProxy (if it well configured) should work in that case. Does it?
--
Iñaki Baz Castillo
ibc(a)in.ilimit.es
_______________________________________________
Users mailing list
Users(a)openser.org
http://openser.org/cgi-bin/mailman/listinfo/users
<https://mail.unibo.it/exchweb/bin/redir.asp?URL=http://openser.org/cgi-bin/…>
Hello users,
Actually i want to implement prepaid billing solution to my customers
using radius accounting
I have gone through the documentation provided with the sources
of CDRTool and got confused with all dsn details,connections to
mediaproxy ,asterisk,radius,openser.
I want to first understand the call flow if using this CDRTool
so that i can design mysetup.
The present setup i have is
1)openser for authentication
2)Call control using asterisk+asterisk-b2bua in combination with radius
Then u may ask why i am after this CDRTool
because i was unable to deduct the balance and implement different
tariffs using that setup in realtime
so i wish to know from you what are different setups i can
made using the jumbo CDRTool project so that i can select one
and working .
First give me suggestion so that i will start with minimal
setup
--
Srinivas Antarvedi
Hi,
The OpenSER is performing an SRV lookup which returns the following record info:
;; QUESTION SECTION:
;_sip._udp.aimcidfilter.com. IN SRV
;; ANSWER SECTION:
_sip._udp.aimcidfilter.com. 180 IN SRV 1 50 5061 spinner.eng.rr.com.
_sip._udp.aimcidfilter.com. 180 IN SRV 1 50 5061 bart.eng.rr.com.
_sip._udp.aimcidfilter.com. 180 IN SRV 2 50 5061 homer.eng.rr.com.
_sip._udp.aimcidfilter.com. 180 IN SRV 2 50 5061 crunch.eng.rr.com.
As you can see, the weighting for the two priority "1" endpoints is
50/50 which indicates that the load should be distributed evenly
between them. But when I run my test, it consistently sends 75% to
spinner.eng.rr.com and 25% to bart.eng.rr.com.
Any ideas?
----------- some config info.
debug=5 # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=no # (cmd line: -E)
maxbuffer=1048576
check_via=no # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
#reply_to_via=1
children=4
log_facility=LOG_LOCAL4
dns_use_search_list=no
dns_servers_no=2 #
user="sipproxy"
group="sipproxy"
#disable_dns_blacklist=yes # FOR TESTING ONLY
#dns_try_ipv6=no # FOR TESTING ONLY
listen=udp:65.185.232.62:5060
alias=65.185.233.104:5060
# LOAD OpenSER MODULES
mpath="/sw/lib/openser/modules/"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "textops.so"
loadmodule "acc.so"
loadmodule "mi_fifo.so"
loadmodule "xlog.so"
# ----------------- setting module-specific parameters ---------------
# -- usrloc params --
modparam("usrloc", "db_mode", 0)
# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)
# ------------------------- request routing logic -------------------
modparam("acc", "log_level", 2)
modparam("acc", "log_flag", 1)
modparam("acc","report_cancels", 1)
modparam("acc","failed_transaction_flag", 1)
modparam("acc","log_extra", "req_uri=$rU")
modparam("tm", "fr_timer", 5)
modparam("tm","fr_inv_timer",5)
modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")
Hi everyone,
I'm trying to build one asterisk cluster using openser
to route calls to each machine. I followed a few
(many) guides and examples on internet but they simple
didn't work very well...
I'm using the dispatcher module with openser version
1.1.0-9etch1 (running on a debian 4.0).
I have two asterisk (trixbox) machines to do load
balancing and failover. I can register in my openser
machine with my softphone (twinkle). When I place a
call to one extension that exists in both asterisks
the call goes always to the second ip in the list.
Looking in the debug messages I found the following
part:
7(7905) DEBUG:tm:t_should_relay_response: T_code=100,
new_code=407
7(7905) DEBUG:tm:t_pick_branch: picked branch 0, code
407
7(7905) ERROR:tm:t_forward_nonack: no branch for
forwarding
7(7905) ERROR:tm:w_t_relay: t_forward_nonack failed
7(7905) DEBUG:tm:relay_reply: branch=0, save=0,
relay=0
7(7905) old size: 555, new size: 474
7(7905) build_res_from_sip_res: copied size:
orig:124, new: 43, rest: 431 msg=
SIP/2.0 407 Proxy Authentication Required
in my understanding that would mean that I need a
password of some kind to relay this message to the
asterisk box. The funny part is that the call gets
completed and goes always to the same box, the second
one in the list. If I change the order of the IPs
inside my dispatcher.cfg file it starts to go to the
other asterisk, that is the 2nd in the list now. After
a lot reading in the debug messages and writing some
log messages I found out that the invite request is
always going down to the failure route. I think that
this is because of the call to t_on_failure("1");
inside my if ( method=="INVITE" ) in the main route,
that triggers when the code 407 comes from the
password reply... thats just one idea.
If there is better way to do this (load balance and
failover), please tell me, because I'm pretty new to
openser, just trying to make it work for the first
time here.
my openser.cfg has the following lines on it:
loadmodule "/usr/lib/openser/modules/dispatcher.so"
modparam("tm", "fr_timer", 5)
modparam("dispatcher", "flags", 2)
modparam("dispatcher", "list_file",
"/etc/openser/dispatcher.cfg")
if ( method=="INVITE" ) {
#dst_select( "GROUP", "HASH METHOD")
ds_select_domain("1","4");
t_on_failure("1");
sl_send_reply("100","Trying");
t_relay();
exit();
}
failure_route[1] {
if(is_method("INVITE")) {
ds_next_domain();
t_on_failure("1"); #if the next domain fails
too
t_relay();
};
}
the rest of the file I didn't mess around with it, so
its just the default settings.
Thanks for any help,
Thiago
Flickr agora em português. Você clica, todo mundo vê.
http://www.flickr.com.br/
I have not configured it explicitely.
This is my opense.cfg file:
---------------------
debug=4
fork=yes
log_stderror=yes
sip_warning=yes
listen=xxx.xxx.xxx
port=5060
children=4
dns=no
rev_dns=no
disable_dns_blacklist=yes
mpath="/usr/local/lib/openser/modules/"
#------------------------------------------------------
# Load Module
#------------------------------------------------------
loadmodule "mysql.so"
loadmodule "auth.so"
loadmodule "auth_db.so"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "mi_fifo.so"
loadmodule "uri.so"
loadmodule "uri_db.so"
loadmodule "domain.so"
loadmodule "mediaproxy.so"
loadmodule "nathelper.so"
loadmodule "textops.so"
loadmodule "xlog.so"
loadmodule "cpl-c.so"
loadmodule "avpops.so"
#----------------------------------------------------------
# Parameters
#----------------------------------------------------------
modparam("auth_db|uri_db|usrloc|domain", "db_url",
"mysql://openser:openserrw@localhost/openser")
modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "nat_bflag", 6)
modparam("rr", "enable_full_lr", 1)
# CPL MODULE
modparam("cpl-c", "db_url", "mysql://openser:openserrw@localhost/openser")
modparam("cpl-c", "cpl_table", "cpl")
modparam("cpl-c", "cpl_dtd_file",
"/usr/src/openser-1.2.2-notls/modules/cpl-c/cpl-06.dtd")
modparam("cpl-c", "lookup_domain", "location")
#NATHELPER MODULE
modparam("nathelper", "rtpproxy_disable", 1)
modparam("nathelper", "natping_interval", 0)
modparam("nathelper", "received_avp", "$avp(i:42)")
#MEDIAPROXY MODULE
modparam("mediaproxy", "natping_interval", 20)
modparam("mediaproxy", "mediaproxy_socket", "/var/run/mediaproxy.sock")
modparam("mediaproxy", "sip_asymmetrics",
"/usr/local/etc/openser/sip-asymmetric-clients")
modparam("mediaproxy", "rtp_asymmetrics",
"/usr/local/etc/openser/rtp-asymmetric-clients")
#REGISTRAR MODULE
modparam("registrar", "received_avp", "$avp(i:42)")
modparam("registrar", "default_expires", 1800)
#------------------------------------------------------------
#MAIN ROUTE
#-----------------------------------------------------------
route {
#------------------------------------
# Sanity checks
#------------------------------------
if (!mf_process_maxfwd_header("10"))
{ sl_send_reply("483", "Too much Hops");
exit;
};
if (msg:len >= 2048)
{ sl_send_reply("513", "Message too big");
exit;
};
#------------------------------------
# RECORD-ROUTE
#------------------------------------
if(method=="INVITE" && client_nat_test("7"))
{
record_route_preset ("137.204.107.138:5060;nat=yes");
}
else if (!method=="REGISTER")
{ record_route();
};
#----------------------------------------
# CALL TEAR DOWN
#----------------------------------------
if (method=="BYE")
{
end_media_session();
};
if (method=="CANCEL")
{
end_media_session();
};
#--------------------------------------------
# LOOSE ROUTE
#--------------------------------------------
if (loose_route())
{
if (method=="INVITE")
{
if (!proxy_authorize("","subscriber"))
{ proxy_challenge("","0");
exit;
}
else if (!check_from())
{ sl_send_reply("403","Unauthorized");
exit;
};
consume_credentials();
if (client_nat_test("7") || search("^Route:.*;nat=yes"))
{ setbflag(6); # Set the NAT Flag
use_media_proxy();
};
};
route(1);
exit;
};
#-------------------------------------------------
#CALL TYPE PROCESSING
#-------------------------------------------------
if (!uri==myself)
{ route(4);
route(1);
exit;
};
if (uri==myself)
{
if (method=="REGISTER")
{ xlog("L_DBG", "INFO: REGISTER Message received");
route(2);
exit;
};
if (method=="ACK")
{ route(1);
exit;
};
if (method=="INVITE")
{
route(3);
exit;
};
lookup("aliases");
if (!uri==myself)
{ route(4);
route(1);
exit;
};
#Find the Destination - Check the R-URI
if (!lookup("location"))
{ sl_send_reply("404", "Destination not found");
exit;
};
};
route(1);
}
#----------------------------------------------------
# DEFAULT MESSAGE HANDLER
#----------------------------------------------------
route[1]
{
t_on_reply("1"); #Passa il controlla alla route on reply 1
if (!t_relay())
{
if (method=="INVITE" || method=="ACK")
{
end_media_session();
};
sl_reply_error();
};
}
#--------------------------------------------------------
# REGISTER PROCESSING
#--------------------------------------------------------
route[2]
{
if(!www_authorize("","subscriber"))
{ www_challenge("","0");
exit;
}
else if(!check_to())
{ sl_send_reply("401", "Unauthorized");
exit;
};
consume_credentials();
if (!search("^Contact:[ ]*\*") && client_nat_test("7"))
{
setbflag(6); #Set NAT Flag in USRLOC.
xlog("L_DBG","NOTICE: Bflag 6, related to BRANCH=$T_branch_idx, is
setted as $bf");
fix_nated_register();
force_rport();
xlog("L_DBG","INFO: Registration behind nat");
};
sl_send_reply("100", "Trying");
if(!save("location"))
{ sl_reply_error();
xlog("L_DBG", "Registration of [$fU] Failed");
};
xlog("L_DBG", "INFO: Registration of [$fU] Complete.");
xlog("L_DBG", "INFO: 200 OK has been sended");
}
#----------------------------------------------------------
# INVITE PROCESSING
#----------------------------------------------------------
route[3]
{
if(client_nat_test("7"))
{
setbflag(7);
xlog("L_DBG","NOTICE: Bflag 7, related to BRANCH=$T_branch_idx of this
INVITE, is setted as $bf");
if(force_rport())
{
xlog("L_DBG","NOTICE: rport FORCED");
};
#Rewrites Contact HF to contain nated request's source address:port.
if(fix_nated_contact())
{
xlog("L_DBG","NOTICE: Contact HF is now [$ct]");
};
};
if(!proxy_authorize("","subscriber"))
{ proxy_challenge("","0");
exit;
}
else if (!check_from())
{ sl_send_reply("403", "Unauthorized");
exit;
};
consume_credentials();
lookup("aliases");
if(uri!=myself)
{ route(4);
route(1);
exit;
};
if (!lookup("location"))
{ sl_send_reply("404", "Destination not found");
exit;
};
if(!cpl_run_script("incoming", "force_stateful"))
{
t_reply("500", "CPL script execution failed");
};
route(4);
route(1);
}
#--------------------------------------------------------------------
# NAT Traversal
#--------------------------------------------------------------------
route[4]
{
# Se il chiamato (flag 6) o il chiamante (flag 7) è sotto nat
if (isbflagset(6) || isbflagset(7))
{
# if(!isbflagset(8))
# { setbflag(8);
xlog("L_DBG", "NOTICE: flag 6 or 7 setted");
if(!use_media_proxy())
{
xlog("L_DBG","NOTICE: mediaproxy wasn't called!!");
};
# };
};
}
#---------------------------------------------------------------------
# On Reply Route
#---------------------------------------------------------------------
onreply_route[1]
{
if ((isbflagset(6) || isbflagset(7)) && (status=~"(180)|(183)|2[0-9][0-9]"))
{
if (!search("^Content-Lenght:[ ]*0"))
{
if (use_media_proxy())
{
xlog("L_DBG","NOTICE: mediaproxy in ON REPLY");
};
};
};
if (client_nat_test("7"))
{
fix_nated_contact();
};
}
----------------------------------------------------------------------
Inviato: mar 10/9/2007 12:28
A: users(a)openser.org
Oggetto: Re: [OpenSER-Users] Problem with 2 PC behind the same NAT
El Tuesday 09 October 2007 11:51:34 Daniel Grotti escribió:
> I have 2 SJphone behind the same NAT (I know that it's a restricted con
> NAT).
>
>
> UA1 ----> (NAT 1) --------> PROXY
>
>
> UA2 <-----(NAT 1)<-------------
>
> I've configured my openser.cfg to use Mediaproxy (installed in the same
> pc) if 1 or 2 pc are behind NAT (in this case both of my pc).
> But when I call from UA1 to the other and I accept the call with UA2,
> the RTP stream doesn't flow through the Mediaproxy but it's direct from
> UA1 to UA2.
Have you tryied to call from UA1 (behind your NAT) to other device out
of your
LAN? MediaProxy (if it well configured) should work in that case.
In case caller and called behind the same call, you explicitely **need** to
allow direct RP in openser.cfg by matching $si with $dd (if pulbic source
address and destination address is the same don't apply SDP fix).
But if you haven't configured it explicitely then maybe your conf is worng.
--
Iñaki Baz Castillo
ibc(a)in.ilimit.es
_______________________________________________
Users mailing list
Users(a)openser.org
http://openser.org/cgi-bin/mailman/listinfo/users
Hi,
I need some help.
Here's my input in onreply_route:
--- 8< ---
U 2007/10/05 12:26:58.832161 xxx.18.234.14:5060 -> xxx.18.238.2:5060
SIP/2.0 180 Ringing.
From: "aki"<sip:358942419xxx@devel.foo.fi>;tag=as508b1a29.
To: <sip:3584577509xxx@vox.bar.fi>;tag=eea1259-13c4-47060394-b296ee66-575d.
Call-ID: 7b18b07b06335629699f1d5818e07548(a)devel.foo.fi.
CSeq: 102 INVITE.
Via: SIP/2.0/UDP xxx.18.238.2;branch=z9hG4bK570f.7ca86953.0.
Via: SIP/2.0/UDP xxx.18.238.15:5060;branch=z9hG4bK68f201e6.
Contact: <sip:3584577509xxx@xxx.18.234.14>.
Record-Route: <sip:xxx.18.238.2;lr;ftag=as508b1a29>.
Content-Type: multipart/mixed
;boundary="Boundary47060397_b296f9ef_3ecc_bc780ec".
Content-Length: 397.
.
--Boundary47060397_b296f9ef_3ecc_bc780ec.
Content-Type: application/SDP.
.
v=0.
o=xxx.18.234.23 1191575887 1191575887 IN IP4 xxx.18.234.23.
s=Session SDP.
c=IN IP4 xxx.18.234.23.
t=0 0.
m=audio 11130 RTP/AVP 0.
a=rtpmap:0 PCMU/8000.
a=ptime:20.
.
--Boundary47060397_b296f9ef_3ecc_bc780ec.
Content-Type: application/ISUP ;version=itu-t.
.
,.....4)..9.7.7....
--Boundary47060397_b296f9ef_3ecc_bc780ec--
--- >8 ---
These extra Conten-Type (application/ISUP and multipart/mixed) are
messing up some older PBX's of ours, so I need to strip them out.
With perl I could do it like this:
s/^Content-Type: application\/ISUP
;version=itu-t.*--Boundary/--Boundary/sm;
s/--Boundary.*$//mg;
However the subst_body() doesnt seem to support /sm flags.
Discussing this on #openser @ freenode we tried solutions with
transformations (thanks NormB!) like:
$(hdr(Content-Type)) = $(hdr(Content-Type){s.substr,0,0})
.. or like the same with replace* functions.
However I didnt find a suitable solutions.
Anyone maybe got any ideas?
Br,
Aki
Hi,
I'm interested in using DNS blacklisting to stop transmitting SIP
requests towards UAS endpoints that are non-responsive. I am on
version 1.2, but I can't get it to work properly.
Here is what I am trying to do:
1) I get a message from a UAC that needs to be sent towards 1 of 4
destination UAS endpoints.
2) I setup the OpenSER to perform an SRV lookup which returns a record
that has four A records associated with it. It looks as follows:
;; QUESTION SECTION:
;_sip._udp.aimcidfilter.com. IN SRV
;; ANSWER SECTION:
_sip._udp.aimcidfilter.com. 60 IN SRV 1 100 5061 spinner.eng.rr.com.
_sip._udp.aimcidfilter.com. 60 IN SRV 2 100 5061 bart.eng.rr.com.
_sip._udp.aimcidfilter.com. 60 IN SRV 3 50 5061 homer.eng.rr.com.
_sip._udp.aimcidfilter.com. 60 IN SRV 3 50 5061 crunch.eng.rr.com.
3) The OpenSER does a gethostbyname which performs a DNS A record
lookup and gets a response for spinner.eng.rr.com.
4) When the OpenSER sends towards spinner.eng.rr.com, it does not get
a SIP response from it. *It is at this point I was hoping that OpenSER
would blacklist this UAS endpoint*, but for each incoming request that
is received by the OpenSER, it continues to resolve the domain in the
same manner and sends towards spinner.eng.rr.com even though there is
no SIP response.
Is what I am trying to do in accordance with how OpenSER blacklisting
is supposed to work?
I am trying to have OpenSER send towards bart.eng.rr.com when
spinner.eng.rr.com is not responding or is not reachable.
My configuration is as below. Note that I have even tried to disable
sending towards spinner.eng.rr.com by manually adding a dst_blacklist
entry - that doesn't even seem to work for me.. Am I doing something
wrong?
I have also attached a log file.
Here is my output from openserctl
# openserctl fifo list_blacklists
200 OK
List:: net_filter owner=13 flags=1
Rule:: flags=0
IP:: 65.185.233.55
Mask:: 255.255.255.255
Proto:: 0
Port:: 5061
List:: dns owner=17 flags=6
---------------
#
# Openser.cfg
# ----------- global configuration parameters ------------------------
debug=5 # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=no # (cmd line: -E)
maxbuffer=1048576
check_via=no # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
#reply_to_via=1
children=4
log_facility=LOG_LOCAL4
dns_use_search_list=no
dns_servers_no=2
user="sipproxy"
group="sipproxy"
disable_dns_blacklist=no
disable_dns_failover=no
dns_try_ipv6=no
dns_retr_time=2
dns_retr_no=2
dst_blacklist = net_filter:{ ( any , 65.185.233.55, 5061 , "" )} #
block towards spinner
listen=udp:65.185.232.62:5060
alias=65.185.233.104:5060
# LOAD OpenSER MODULES
mpath="/sw/lib/openser/modules/"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "textops.so"
loadmodule "acc.so"
loadmodule "mi_fifo.so"
loadmodule "xlog.so"
# ----------------- setting module-specific parameters ---------------
# -- usrloc params --
modparam("usrloc", "db_mode", 0)
# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)
# ------------------------- request routing logic -------------------
modparam("acc", "log_level", 2)
modparam("acc", "log_flag", 1)
modparam("acc","report_cancels", 1)
modparam("acc","failed_transaction_flag", 1)
modparam("acc","log_extra", "req_uri=$rU")
modparam("tm", "fr_timer", 5)
modparam("tm","fr_inv_timer",5)
modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")
# main routing logic
route{
# initial sanity checks -- messages with
# max_forwards==0, or excessively long requests
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
};
if (msg:len >= 2048 ) {
sl_send_reply("513", "Message too big");
exit;
};
# we record-route all messages -- to make sure that
# subsequent messages will go through our proxy; that's
# particularly good if upstream and downstream entities
# use different transport protocol
if (!method=="REGISTER")
record_route();
# subsequent messages within a dialog should take the
# path determined by record-routing
if (loose_route()) {
# mark routing logic in request
append_hf("P-hint: rr-enforced\r\n");
route(1);
};
if (!uri==myself) {
route(1);
};
if (method=="OPTIONS") {
sl_send_reply("200", "OK");
exit;
}
if (uri =~ "^sip:feature_fs@" || method=="NOTIFY") {
xlog("L_DBG", "TWC: received incoming message:\n <$mb>\n");
seturi("sip:feature_fs@aimcidfilter.com");
setflag(1);
route(1);
} else {
sl_send_reply("404", "Not Found");
};
}
#####################################################
# Default Message Handler
#####################################################
route[1] {
# Send it out now; use stateful forwarding as it works reliably
# even for UDP2TCP
if (!t_relay()) {
sl_reply_error();
};
exit;
}