[Serusers] Problem with ACK

Greger V. Teigre greger at teigre.com
Tue Dec 28 11:05:11 CET 2004


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 at teigre.com]
> Sent: Viernes, 24 de Diciembre de 2004 01:32 a.m.
> To: Amozurrutia Jesus; serusers at 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 at 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 at teigre.com]
>> Sent: Lunes, 20 de Diciembre de 2004 01:43 a.m.
>> To: Amozurrutia Jesus; serusers at 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 at X.X.81.92:5063
>>>  SIP/2.0 Via: SIP/2.0/UDP  X.X.67.218:5060;branch=z9hG4bK29b2c750
>>>  From: "5559852600" <sip:5559852600 at X.X.67.218>;tag=16781758
>>>  To: <sip:5559853979 at mcm.net.mx>;tag=2602576443
>>>  Date: Tue, 30 Nov 2004 23:53:15 GMT
>>>  Call-ID: fef8ed00-1da1612d-24d-da4334c8 at X.X.67.218
>>>  Route: <sip:5559853979 at 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 at 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 at lists.iptel.org
>>> http://lists.iptel.org/mailman/listinfo/serusers 




More information about the sr-users mailing list