[Serusers] Help with SER messages

CURRO_DOMINGUEZ CURRO_DOMINGUEZ at terra.es
Fri Jan 16 14:00:16 CET 2004


Hello

We need some help. We are trying to make a call.

The scenario is the following:
2 User Agents and SER acting as a SIP Proxy. (they are on the same LAN)

When the caller sends a SIP INVITE to the callee, the SIP INVITE goes 
first to SER. Then, SER sends a 100 Trying to caller and reroutes the 
SIP INVITE to the callee.
Now,  the strange thing starts:
SER SENDS a SIP response 200 OK to the caller when he should do 
nothing!!!

According to the specification (RFC 3261). SER should do nothing except 
for routing the SIP messages 180 Ringing and 200 OK from the callee!!

Here, there is a explain diagram:

ACCORDING WITH THE RFC 3261
==============================

      Alice's  . . . . .ProxY. . .  . .  Bob's
     softphone                         SIP Phone
        |                |                |
        |    INVITE F1   |                |
        |--------------->|    INVITE F2   |
        |  100 Trying F3 |--------------->|
        |<---------------|                |
        |                | 180 Ringing F4 |
        | 180 Ringing F5 |<---------------|
        |<---------------|    200 OK F6   |
        |    200 OK F7   |<---------------|
        |<---------------|                |
        |                                 |
        |             ACK F8              |
        |-------------------------------->|
        |           Media Session         |
        |<===============================>|
        |            BYE F9               |
        |<------------- ------------------|
        |           200 OK F10            |
        |-------------------------------->|
        |                                 |



WHAT SER MAKES
=======================


      Alice's  . . . . .SER . . .  . .  Bob's
     softphone                         SIP Phone
        |                |                |
        |    INVITE F1   |                |
        |--------------->|    INVITE F3   |
        |  100 Trying F2 |--------------->|
        |<---------------|                |
        |    200 OK F4   |                |
        |<---------------|                |
        |                |    200 OK F5   |
        |                |--------------->|
        |                | 180 Ringing F6 |
        | 180 Ringing F7 |<---------------|
        |<---------------|    200 OK F8   |
        |    200 OK F9   |<---------------|
        |<---------------|                |
        |                                 |
        |             ACK F10             |
        |-------------------------------->|
        |           Media Session         |
        |<===============================>|
        |            BYE F11              |
        |<------------- ------------------|
        |           200 OK F12            |
        |-------------------------------->|
        |                                 |


Maybe, it is a problem of our SER configuration. 

Thank you very much for your time. 

Attached ser config:

#
# $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $
#
# simple quick-start config script
#

# ----------- global configuration parameters ------------------------

#debug=3         # debug level (cmd line: -dddddddddd)
#fork=yes
#log_stderror=no # (cmd line: -E)

# Uncomment these lines to enter debugging mode 
#debug=7
#fork=no
#log_stderror=yes



check_via=no # (cmd. line: -v)
dns=no           # (cmd. line: -r)
rev_dns=no      # (cmd. line: -R)
#port=5060       
#children=4      
#listen=212.166.192.132     
fifo="/tmp/ser_fifo"
alias=cdshuesca.es         

# ------------------ module loading ----------------------------------

# Uncomment this if you want to use SQL database
loadmodule "/usr/local/lib/ser/modules/mysql.so"

loadmodule "/usr/local/lib/ser/modules/sl.so"
loadmodule "/usr/local/lib/ser/modules/tm.so"
loadmodule "/usr/local/lib/ser/modules/rr.so"
loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
loadmodule "/usr/local/lib/ser/modules/usrloc.so"
loadmodule "/usr/local/lib/ser/modules/registrar.so"

# Uncomment this if you want digest authentication
# mysql.so must be loaded !
loadmodule "/usr/local/lib/ser/modules/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"

loadmodule "/usr/local/lib/ser/modules/acc.so"

# ----------------- setting module-specific parameters ---------------

# -- usrloc params --

#modparam("usrloc", "db_mode",   0)

# Uncomment this if you want to use SQL database 
# for persistent storage and comment the previous line
modparam("usrloc", "db_mode", 2)

# -- auth params --
# Uncomment if you are using auth module
#
modparam("auth_db", "calculate_ha1", yes)
#
# If you set "calculate_ha1" parameter to yes (which true in this 
config), 
# uncomment also the following parameter)
#
modparam("auth_db", "password_column", "password")

# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)

modparam("acc","log_level",1)
modparam("acc","log_flag",1)

# -------------------------  request routing logic -------------------

# 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");
        break;
};
if ( msg:len > max_len ) {
        sl_send_reply("513", "Message too big");
        break;
};

# 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
record_route(); 
# loose-route processing
if (loose_route()) {
        t_relay();
        break;
};

# if the request is for other domain use UsrLoc
# (in case, it does not work, use the following command
# with proper names and addresses in it)

if (uri==myself) {

        if (method=="REGISTER") {

# Uncomment this if you want to use digest authentication
                if (!www_authorize
("cdshuesca.es", "subscriber")) {
                        www_challenge("cdshuesca.es", "0");
                        break;
                };
#                 setflag(1);       # Anadido por mi para log
#                 t_relay();       # Anadido por mi  
                save("location");
                break;
        };

        # native SIP destinations are handled using our USRLOC 
DB
        if (!lookup("location")) {
                sl_send_reply("404", "Not Found");
                break;
        };
        
};
# forward to current uri now; use stateful forwarding; that
# works reliably even if we forward from TCP to UDP
if (!t_relay()) {
        sl_reply_error();
};
lookup("aliases");
save("aliases");

}






More information about the sr-users mailing list