The loose route in my config is located before any sl_send_reply, but the ACK is not being processed as loose route. why? Should I include something like:
if (method=="ACK") { t_relay(); break; };
My config file is:
###################################################################### # SER Config File ######################################################################
check_via=no # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) fifo="/tmp/ser_fifo"
###################################################################### # Load Modules ######################################################################
# Uncomment this if you want to use SQL database loadmodule "/usr/lib/ser/modules/sl.so" /*Stateless routing*/ loadmodule "/usr/lib/ser/modules/tm.so" /*Statefull routing*/ loadmodule "/usr/lib/ser/modules/acc.so" /*Accounting*/ loadmodule "/usr/lib/ser/modules/rr.so" /*Record Routing*/ loadmodule "/usr/lib/ser/modules/maxfwd.so" /*Max-fwd header logic*/ loadmodule "/usr/lib/ser/modules/usrloc.so" /*User Location*/ loadmodule "/usr/lib/ser/modules/registrar.so" /*SIP Register functions*/ loadmodule "/usr/lib/ser/modules/exec.so" /*Execute external commands*/ loadmodule "/usr/lib/ser/modules/mysql.so" /*MySQL DB Module*/ # MySQL dependant modules loadmodule "/usr/lib/ser/modules/auth.so" /*User authentication*/ loadmodule "/usr/lib/ser/modules/auth_db.so" /*User auth. using MySQL DB*/ loadmodule "/usr/lib/ser/modules/group.so" /*Group commands*/
###################################################################### # Establecer parametros para los modulos ######################################################################
# -- usrloc params -- modparam("usrloc", "db_mode", 2) modparam("usrloc", "db_url", "sql://user:pass@localhost/db")
# -- auth params -- modparam("auth_db", "db_url", "sql://user:pass@localhost/db") modparam("auth_db", "calculate_ha1", yes) modparam("auth_db", "password_column", "password")
# -- rr params -- modparam("rr", "enable_full_lr", 0)
# -- group params -- modparam("group", "db_url", "sql://user:pass@localhost/db")
# -- accounting params -- modparam("acc", "log_level", 3) modparam("acc", "db_url", "mysql://user:pass@localhost/db") modparam("acc", "db_flag", 2) modparam("acc", "db_missed_flag", 3) modparam("acc", "report_ack", 1) modparam("acc", "report_cancels", 1)
###################################################################### # Server Aliases ###################################################################### alias="mydomain.com"
###################################################################### # Main Routing Logic ######################################################################
route{
################################################## # Initial sanity checks -- messages with # max_forwards==0, or excessively long requests ################################################## if (!mf_process_maxfwd_header("15")) { sl_send_reply("483","Too Many Hops"); break; }; if ( msg:len > max_len ) { sl_send_reply("513", "Message too big"); break; };
################################################## # Loose-route processing ################################################## if (loose_route()) { setflag(2); t_relay(); break; };
################################################## # We record-route all messages ################################################## if (method=="INVITE") { record_route(); };
################################################## # Registering routines start here ################################################## if (method=="REGISTER") { if (!src_ip==server2.mydomain.com) { if (!www_authorize("mydomain.com", "subscriber")) { www_challenge("mydomain.com", "0"); break; }; t_replicate("server2.mydomain.com", "5060"); }; save("location"); break; };
################################################## # Check the source of call and auth. if required ################################################## # If the call comes from the gateways, no authentication is required if (src_ip==gateway.mydomain.com ) { log(1,"Call from pstn. \n"); } else { if (method=="INVITE") { if (!proxy_authorize("mydomain.com", "subscriber")) { proxy_challenge("mydomain.com", "0"); break; }; }; }
################################################## # Route call ################################################## if (uri=~"^sip:59803[0-9][0-9][0-9]@.*") { if (!lookup("location")) { sl_send_reply("404", "Not Found"); break; } else { if (!t_relay()) { sl_reply_error(); }; }; } else if (uri=~"^sip:[0|1|2|3|5|8|9][0-9]*@.*") { rewritehost("gateway.mydomain.com"); t_relay(); }; }
-----Original Message----- From: Greger V. Teigre [mailto:greger@teigre.com] Sent: Viernes, 24 de Diciembre de 2004 01:32 a.m. To: Amozurrutia Jesus; serusers@lists.iptel.org Subject: Re: [Serusers] Problem with ACK
The ACK has a Route header that is supposed to be picked up by the loose route part of your config. If the loose route call is not reached before you do other processing, the ACK may be dropped... Route: sip:5559853979@X.X.84.93;ftag=2413706159;lr g-)
Amozurrutia Jesus wrote:
I double checked and the ACK are ignored by SER.
The log file thows this: Dec 23 13:26:13 sip2 /usr/sbin/ser[21127]: Warning: sl_send_reply: I won't send a reply for ACK!!
Jesus
-----Original Message----- From: Greger V. Teigre [mailto:greger@teigre.com] Sent: Lunes, 20 de Diciembre de 2004 01:43 a.m. To: Amozurrutia Jesus; serusers@lists.iptel.org Subject: Re: [Serusers] Problem with ACK
Are you sure that the ACK stops at ser? The ACKs should just flow through ser. I have seen a similar problem with XLite where Cisco drops the ACK because XLite there is a bug in XLIte's Via parsing. This is a Cisco gateway appending an x-route-tag to via. Turn on debugging (ALL) on Cisco and check if it drops the ACK due to wrong/no branch info in Via. g-)
Amozurrutia Jesus wrote:
I'm implementing the scenario shown below.
/ 0 \ ---/ \ | /_\ | ATA1 |---| ____ _ _ _ _ _____ ______/ | / \ / / / / \ / \ |---| FW |---| IP Net |---| CCM | | ____/ _/_/_/_/ _____/ | | | | | | | | --- --- / \ / \ |NAT| |SER| |-T | | | ___/ ___/
When calling between the CCM (Cisco CallManager) and the ATA, SER simply ignores the call ACK. The ACK looks like:
ACK sip:5559853979*sip1.mcm.net.mx=X.X.71.2+17081@X.X.81.92:5063 SIP/2.0 Via: SIP/2.0/UDP X.X.67.218:5060;branch=z9hG4bK29b2c750 From: "5559852600" sip:5559852600@X.X.67.218;tag=16781758 To: sip:5559853979@mcm.net.mx;tag=2602576443 Date: Tue, 30 Nov 2004 23:53:15 GMT Call-ID: fef8ed00-1da1612d-24d-da4334c8@X.X.67.218 Route: sip:5559853979@X.X.81.94;ftag=16781758;lr Max-Forwards: 70 CSeq: 101 ACK Content-Length: 0
The call flow:
CallManager SIP Server ATA | | | |-- INVITE -------->| | |<-- trying --------| | | |-- INVITE -------->| | |<-- Trying --------| | |<-- Ringing -------| |<-- Ringing -------| | | |<-- OK ------------| |<-- OK ------------| | |-- ACK ----------->| | | |<-- OK ------------| |<-- OK ------------| | |-- ACK ----------->| | | |<-- OK ------------| |<-- OK ------------| | |-- ACK ----------->| | | |<-- OK ------------| |<-- OK ------------| | |-- ACK ----------->| | | |<-- OK ------------| ......
My guess is that SER does not accept the URI "5559853979*sip1.mcm.net.mx=X.X.71.2+17081@X.X.81.92:5063" because it contains "*+=" signs ore something similar. When calling from ATA - ATA there is no preoblem because ATAs construct the ACK message different (URI and Rote flipped).
Any ideas?
Thanks in advance,
Jesus
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
Yes - thats somehow strange. From my experience: strict routers (e.g. Windows Messenger) will be processed by the loose_route whereas loose routers like Xlite will not processed by loose_route.
regards, klaus
Amozurrutia Jesus wrote:
The loose route in my config is located before any sl_send_reply, but the ACK is not being processed as loose route. why? Should I include something like:
if (method=="ACK") { t_relay(); break; };
My config file is:
###################################################################### # SER Config File ######################################################################
check_via=no # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) fifo="/tmp/ser_fifo"
###################################################################### # Load Modules ######################################################################
# Uncomment this if you want to use SQL database loadmodule "/usr/lib/ser/modules/sl.so" /*Stateless routing*/ loadmodule "/usr/lib/ser/modules/tm.so" /*Statefull routing*/ loadmodule "/usr/lib/ser/modules/acc.so" /*Accounting*/ loadmodule "/usr/lib/ser/modules/rr.so" /*Record Routing*/ loadmodule "/usr/lib/ser/modules/maxfwd.so" /*Max-fwd header logic*/ loadmodule "/usr/lib/ser/modules/usrloc.so" /*User Location*/ loadmodule "/usr/lib/ser/modules/registrar.so" /*SIP Register functions*/ loadmodule "/usr/lib/ser/modules/exec.so" /*Execute external commands*/ loadmodule "/usr/lib/ser/modules/mysql.so" /*MySQL DB Module*/ # MySQL dependant modules loadmodule "/usr/lib/ser/modules/auth.so" /*User authentication*/ loadmodule "/usr/lib/ser/modules/auth_db.so" /*User auth. using MySQL DB*/ loadmodule "/usr/lib/ser/modules/group.so" /*Group commands*/
###################################################################### # Establecer parametros para los modulos ######################################################################
# -- usrloc params -- modparam("usrloc", "db_mode", 2) modparam("usrloc", "db_url", "sql://user:pass@localhost/db")
# -- auth params -- modparam("auth_db", "db_url", "sql://user:pass@localhost/db") modparam("auth_db", "calculate_ha1", yes) modparam("auth_db", "password_column", "password")
# -- rr params -- modparam("rr", "enable_full_lr", 0)
# -- group params -- modparam("group", "db_url", "sql://user:pass@localhost/db")
# -- accounting params -- modparam("acc", "log_level", 3) modparam("acc", "db_url", "mysql://user:pass@localhost/db") modparam("acc", "db_flag", 2) modparam("acc", "db_missed_flag", 3) modparam("acc", "report_ack", 1) modparam("acc", "report_cancels", 1)
###################################################################### # Server Aliases ###################################################################### alias="mydomain.com"
###################################################################### # Main Routing Logic ######################################################################
route{
################################################## # Initial sanity checks -- messages with # max_forwards==0, or excessively long requests ################################################## if (!mf_process_maxfwd_header("15")) { sl_send_reply("483","Too Many Hops"); break; }; if ( msg:len > max_len ) { sl_send_reply("513", "Message too big"); break; }; ################################################## # Loose-route processing ################################################## if (loose_route()) { setflag(2); t_relay(); break; }; ################################################## # We record-route all messages ################################################## if (method=="INVITE") { record_route(); }; ################################################## # Registering routines start here ################################################## if (method=="REGISTER") { if (!src_ip==server2.mydomain.com) { if (!www_authorize("mydomain.com", "subscriber")) { www_challenge("mydomain.com", "0"); break; }; t_replicate("server2.mydomain.com", "5060"); }; save("location"); break; }; ################################################## # Check the source of call and auth. if required ################################################## # If the call comes from the gateways, no authentication is required if (src_ip==gateway.mydomain.com ) { log(1,"Call from pstn. \n"); } else { if (method=="INVITE") { if (!proxy_authorize("mydomain.com", "subscriber"))
{ proxy_challenge("mydomain.com", "0"); break; }; }; }
################################################## # Route call ################################################## if (uri=~"^sip:59803[0-9][0-9][0-9]@.*") { if (!lookup("location")) { sl_send_reply("404", "Not Found"); break; } else { if (!t_relay()) { sl_reply_error(); }; }; } else if (uri=~"^sip:[0|1|2|3|5|8|9][0-9]*@.*") { rewritehost("gateway.mydomain.com"); t_relay(); };
}
-----Original Message----- From: Greger V. Teigre [mailto:greger@teigre.com] Sent: Viernes, 24 de Diciembre de 2004 01:32 a.m. To: Amozurrutia Jesus; serusers@lists.iptel.org Subject: Re: [Serusers] Problem with ACK
The ACK has a Route header that is supposed to be picked up by the loose route part of your config. If the loose route call is not reached before you do other processing, the ACK may be dropped... Route: sip:5559853979@X.X.84.93;ftag=2413706159;lr g-)
Amozurrutia Jesus wrote:
I double checked and the ACK are ignored by SER.
The log file thows this: Dec 23 13:26:13 sip2 /usr/sbin/ser[21127]: Warning: sl_send_reply: I won't send a reply for ACK!!
Jesus
-----Original Message----- From: Greger V. Teigre [mailto:greger@teigre.com] Sent: Lunes, 20 de Diciembre de 2004 01:43 a.m. To: Amozurrutia Jesus; serusers@lists.iptel.org Subject: Re: [Serusers] Problem with ACK
Are you sure that the ACK stops at ser? The ACKs should just flow through ser. I have seen a similar problem with XLite where Cisco drops the ACK because XLite there is a bug in XLIte's Via parsing. This is a Cisco gateway appending an x-route-tag to via. Turn on debugging (ALL) on Cisco and check if it drops the ACK due to wrong/no branch info in Via. g-)
Amozurrutia Jesus wrote:
I'm implementing the scenario shown below.
/ 0 \ ---/ \ | /_\ | ATA1 |---| ____ _ _ _ _ _____ ______/ | / \ / / / / \ / \ |---| FW |---| IP Net |---| CCM | | ____/ _/_/_/_/ _____/ | | | | | | | | --- --- / \ / \ |NAT| |SER| |-T | | | ___/ ___/
When calling between the CCM (Cisco CallManager) and the ATA, SER simply ignores the call ACK. The ACK looks like:
ACK sip:5559853979*sip1.mcm.net.mx=X.X.71.2+17081@X.X.81.92:5063 SIP/2.0 Via: SIP/2.0/UDP X.X.67.218:5060;branch=z9hG4bK29b2c750 From: "5559852600" sip:5559852600@X.X.67.218;tag=16781758 To: sip:5559853979@mcm.net.mx;tag=2602576443 Date: Tue, 30 Nov 2004 23:53:15 GMT Call-ID: fef8ed00-1da1612d-24d-da4334c8@X.X.67.218 Route: sip:5559853979@X.X.81.94;ftag=16781758;lr Max-Forwards: 70 CSeq: 101 ACK Content-Length: 0
The call flow:
CallManager SIP Server ATA | | | |-- INVITE -------->| | |<-- trying --------| | | |-- INVITE -------->| | |<-- Trying --------| | |<-- Ringing -------| |<-- Ringing -------| | | |<-- OK ------------| |<-- OK ------------| | |-- ACK ----------->| | | |<-- OK ------------| |<-- OK ------------| | |-- ACK ----------->| | | |<-- OK ------------| |<-- OK ------------| | |-- ACK ----------->| | | |<-- OK ------------| |<-- OK ------------| | |-- ACK ----------->| | | |<-- OK ------------| ......
My guess is that SER does not accept the URI "5559853979*sip1.mcm.net.mx=X.X.71.2+17081@X.X.81.92:5063" because it contains "*+=" signs ore something similar. When calling from ATA - ATA there is no preoblem because ATAs construct the ACK message different (URI and Rote flipped).
Any ideas?
Thanks in advance,
Jesus
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
Hm. I cannot really see any problems with your config. And ser sends OK, but does not forward the ACK? You shouldn't have to add a check on ACK. Maybe running ser in debug=7 could help so you see what is happening? g-)
Amozurrutia Jesus wrote:
The loose route in my config is located before any sl_send_reply, but the ACK is not being processed as loose route. why? Should I include something like:
if (method=="ACK") { t_relay(); break; };
My config file is:
###################################################################### # SER Config File ######################################################################
check_via=no # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) fifo="/tmp/ser_fifo"
###################################################################### # Load Modules ######################################################################
# Uncomment this if you want to use SQL database loadmodule "/usr/lib/ser/modules/sl.so" /*Stateless routing*/ loadmodule "/usr/lib/ser/modules/tm.so" /*Statefull routing*/ loadmodule "/usr/lib/ser/modules/acc.so" /*Accounting*/ loadmodule "/usr/lib/ser/modules/rr.so" /*Record Routing*/ loadmodule "/usr/lib/ser/modules/maxfwd.so" /*Max-fwd header logic*/ loadmodule "/usr/lib/ser/modules/usrloc.so" /*User Location*/ loadmodule "/usr/lib/ser/modules/registrar.so" /*SIP Register functions*/ loadmodule "/usr/lib/ser/modules/exec.so" /*Execute external commands*/ loadmodule "/usr/lib/ser/modules/mysql.so" /*MySQL DB Module*/ # MySQL dependant modules loadmodule "/usr/lib/ser/modules/auth.so" /*User authentication*/ loadmodule "/usr/lib/ser/modules/auth_db.so" /*User auth. using MySQL DB*/ loadmodule "/usr/lib/ser/modules/group.so" /*Group commands*/
###################################################################### # Establecer parametros para los modulos ######################################################################
# -- usrloc params -- modparam("usrloc", "db_mode", 2) modparam("usrloc", "db_url", "sql://user:pass@localhost/db")
# -- auth params -- modparam("auth_db", "db_url", "sql://user:pass@localhost/db") modparam("auth_db", "calculate_ha1", yes) modparam("auth_db", "password_column", "password")
# -- rr params -- modparam("rr", "enable_full_lr", 0)
# -- group params -- modparam("group", "db_url", "sql://user:pass@localhost/db")
# -- accounting params -- modparam("acc", "log_level", 3) modparam("acc", "db_url", "mysql://user:pass@localhost/db") modparam("acc", "db_flag", 2) modparam("acc", "db_missed_flag", 3) modparam("acc", "report_ack", 1) modparam("acc", "report_cancels", 1)
###################################################################### # Server Aliases ###################################################################### alias="mydomain.com"
###################################################################### # Main Routing Logic ######################################################################
route{
################################################## # Initial sanity checks -- messages with # max_forwards==0, or excessively long requests ################################################## if (!mf_process_maxfwd_header("15")) { sl_send_reply("483","Too Many Hops"); break; }; if ( msg:len > max_len ) { sl_send_reply("513", "Message too big"); break; }; ################################################## # Loose-route processing ################################################## if (loose_route()) { setflag(2); t_relay(); break; }; ################################################## # We record-route all messages ################################################## if (method=="INVITE") { record_route(); }; ################################################## # Registering routines start here ################################################## if (method=="REGISTER") { if (!src_ip==server2.mydomain.com) { if (!www_authorize("mydomain.com", "subscriber")) { www_challenge("mydomain.com", "0"); break; }; t_replicate("server2.mydomain.com", "5060"); }; save("location"); break; }; ################################################## # Check the source of call and auth. if required ################################################## # If the call comes from the gateways, no authentication is required if (src_ip==gateway.mydomain.com ) { log(1,"Call from pstn. \n"); } else { if (method=="INVITE") { if (!proxy_authorize("mydomain.com",
"subscriber")) { proxy_challenge("mydomain.com", "0"); break; }; }; }
################################################## # Route call ################################################## if (uri=~"^sip:59803[0-9][0-9][0-9]@.*") { if (!lookup("location")) { sl_send_reply("404", "Not Found"); break; } else { if (!t_relay()) { sl_reply_error(); }; }; } else if (uri=~"^sip:[0|1|2|3|5|8|9][0-9]*@.*") { rewritehost("gateway.mydomain.com"); t_relay(); };
}
-----Original Message----- From: Greger V. Teigre [mailto:greger@teigre.com] Sent: Viernes, 24 de Diciembre de 2004 01:32 a.m. To: Amozurrutia Jesus; serusers@lists.iptel.org Subject: Re: [Serusers] Problem with ACK
The ACK has a Route header that is supposed to be picked up by the loose route part of your config. If the loose route call is not reached before you do other processing, the ACK may be dropped... Route: sip:5559853979@X.X.84.93;ftag=2413706159;lr g-)
Amozurrutia Jesus wrote:
I double checked and the ACK are ignored by SER.
The log file thows this: Dec 23 13:26:13 sip2 /usr/sbin/ser[21127]: Warning: sl_send_reply: I won't send a reply for ACK!!
Jesus
-----Original Message----- From: Greger V. Teigre [mailto:greger@teigre.com] Sent: Lunes, 20 de Diciembre de 2004 01:43 a.m. To: Amozurrutia Jesus; serusers@lists.iptel.org Subject: Re: [Serusers] Problem with ACK
Are you sure that the ACK stops at ser? The ACKs should just flow through ser. I have seen a similar problem with XLite where Cisco drops the ACK because XLite there is a bug in XLIte's Via parsing. This is a Cisco gateway appending an x-route-tag to via. Turn on debugging (ALL) on Cisco and check if it drops the ACK due to wrong/no branch info in Via. g-)
Amozurrutia Jesus wrote:
I'm implementing the scenario shown below.
/ 0 \ ---/ \ | /_\ | ATA1 |---| ____ _ _ _ _ _____ ______/ | / \ / / / / \ / \ |---| FW |---| IP Net |---| CCM | | ____/ _/_/_/_/ _____/ | | | | | | | | --- --- / \ / \ |NAT| |SER| |-T | | | ___/ ___/
When calling between the CCM (Cisco CallManager) and the ATA, SER simply ignores the call ACK. The ACK looks like:
ACK sip:5559853979*sip1.mcm.net.mx=X.X.71.2+17081@X.X.81.92:5063 SIP/2.0 Via: SIP/2.0/UDP X.X.67.218:5060;branch=z9hG4bK29b2c750 From: "5559852600" sip:5559852600@X.X.67.218;tag=16781758 To: sip:5559853979@mcm.net.mx;tag=2602576443 Date: Tue, 30 Nov 2004 23:53:15 GMT Call-ID: fef8ed00-1da1612d-24d-da4334c8@X.X.67.218 Route: sip:5559853979@X.X.81.94;ftag=16781758;lr Max-Forwards: 70 CSeq: 101 ACK Content-Length: 0
The call flow:
CallManager SIP Server ATA | | | |-- INVITE -------->| | |<-- trying --------| | | |-- INVITE -------->| | |<-- Trying --------| | |<-- Ringing -------| |<-- Ringing -------| | | |<-- OK ------------| |<-- OK ------------| | |-- ACK ----------->| | | |<-- OK ------------| |<-- OK ------------| | |-- ACK ----------->| | | |<-- OK ------------| |<-- OK ------------| | |-- ACK ----------->| | | |<-- OK ------------| |<-- OK ------------| | |-- ACK ----------->| | | |<-- OK ------------| ......
My guess is that SER does not accept the URI "5559853979*sip1.mcm.net.mx=X.X.71.2+17081@X.X.81.92:5063" because it contains "*+=" signs ore something similar. When calling from ATA - ATA there is no preoblem because ATAs construct the ACK message different (URI and Rote flipped).
Any ideas?
Thanks in advance,
Jesus
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers