[OpenSER-Users] Problem with Mediaproxy

Daniel d.grotti at gmail.com
Fri Dec 7 13:59:16 CET 2007


Hi,
this is my call flow (from client side making the call: 192.168.10.224):

The INVITE received by 192.168.0.167 (sent by 192.168.10.224 and processed
by proxy) has SDP body with PRIVATE IP and PORT.

-----------------------------------------------------------------------------------

# 192.162.10.224 ----> PROXY

Request-Line: INVITE sip:franco.callegati at PROXY_IP SIP/2.0
    Message Header
        Via: SIP/2.0/UDP 192.168.10.224:64244
;branch=z9hG4bK-d87543-9947ff15e2520b54-1--d87543-
        Max-Forwards: 70
        Contact: <sip:daniel.grotti at 192.168.10.224:64244>
        To: "franco.callegati"<sip:franco.callegati at PROXY_IP>
        From: "casa"<sip:daniel.grotti at PROXY_IP>;tag=4554424c
        Call-ID: YjRmZjU3ODAwMjIxMDU0MDUwNDllYzUwNmZiYTJjMmE.
        CSeq: 2 INVITE
        Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE,
SUBSCRIBE, INFO
        Content-Type: application/sdp
        Proxy-Authorization: Digest
username="1000",realm="PROXY_IP",nonce="47593c9fa32034a66fdb7493ff499c7215d4d8db",uri="sip:
franco.callegati at PROXY
_IP",response="82d21af18029aa02388869088c3619d2",algorithm=MD5
        User-Agent: X-Lite release 1011s stamp 41150
        Content-Length: 374
    Message body
        Session Description Protocol
            Session Description Protocol Version (v): 0
            Owner/Creator, Session Id (o): - 8 2 IN IP4 192.168.10.224
            Session Name (s): CounterPath X-Lite 3.0
            Connection Information (c): IN IP4 192.168.10.224
            Time Description, active time (t): 0 0
            Media Description, name and address (m): audio 53624 RTP/AVP 107
119 100 106 0 105 98 8 101
            Media Attribute (a): fmtp:101 0-15
            Media Attribute (a): rtpmap:107 BV32/16000
            Media Attribute (a): rtpmap:119 BV32-FEC/16000
            Media Attribute (a): rtpmap:100 SPEEX/16000
            Media Attribute (a): rtpmap:106 SPEEX-FEC/16000
            Media Attribute (a): rtpmap:105 SPEEX-FEC/8000
            Media Attribute (a): rtpmap:98 iLBC/8000
            Media Attribute (a): rtpmap:101 telephone-event/8000
            Media Attribute (a): sendrecv

# PROXY -----> 192.162.10.224

Status-Line: SIP/2.0 100 Trying
    Message Header
        Via: SIP/2.0/UDP 192.168.10.224:64244
;branch=z9hG4bK-d87543-9947ff15e2520b54-1--d87543-;rport=28943;received=
85.18.14.25
        To: "franco.callegati"<sip:franco.callegati at PROXY_IP>
        From: "casa"<sip:daniel.grotti at PROXY_IP>;tag=4554424c
        Call-ID: YjRmZjU3ODAwMjIxMDU0MDUwNDllYzUwNmZiYTJjMmE.
        CSeq: 2 INVITE
        Server: OpenSER (1.3.0-pre1-notls (i386/linux))
        Content-Length: 0

# PROXY -----> 192.162.10.224

Status-Line: SIP/2.0 180 Ringing
    Message Header
        Via: SIP/2.0/UDP 192.168.10.224:64244;received=85.18.14.25
;branch=z9hG4bK-d87543-9947ff15e2520b54-1--d87543-;rport=28943
        Record-Route: <sip:PROXY_IP:5060;lr;nat=yes;ftag=4554424c>
        Contact: <sip:franco.callegati at 85.18.14.25
:42214;rinstance=96888d44783df4a0>
        To: "franco.callegati"<sip:franco.callegati at PROXY_IP>;tag=d06d8b2d
        From: "casa"<sip:daniel.grotti at PROXY_IP>;tag=4554424c
        Call-ID: YjRmZjU3ODAwMjIxMDU0MDUwNDllYzUwNmZiYTJjMmE.
        CSeq: 2 INVITE
        User-Agent: X-Lite release 1011s stamp 41150
        Content-Length: 0


# PROXY -----> 192.162.10.224

Status-Line: SIP/2.0 200 OK
    Message Header
        Via: SIP/2.0/UDP 192.168.10.224:64244;received=85.18.14.25
;branch=z9hG4bK-d87543-9947ff15e2520b54-1--d87543-;rport=28943
        Record-Route: <sip:PROXY_IP:5060;lr;nat=yes;ftag=4554424c>
        Contact: <sip:franco.callegati at 85.18.14.25
:42214;rinstance=96888d44783df4a0>
        To: "franco.callegati"<sip:franco.callegati at PROXY_IP>;tag=d06d8b2d
        From: "casa"<sip:daniel.grotti at PROXY_IP>;tag=4554424c
        Call-ID: YjRmZjU3ODAwMjIxMDU0MDUwNDllYzUwNmZiYTJjMmE.
        CSeq: 2 INVITE
        Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE,
SUBSCRIBE, INFO
        Content-Type: application/sdp
        User-Agent: X-Lite release 1011s stamp 41150
        Content-Length: 372
    Message body
        Session Description Protocol
            Session Description Protocol Version (v): 0
            Owner/Creator, Session Id (o): - 7 2 IN IP4 192.168.0.167
            Session Name (s): CounterPath X-Lite 3.0
            Connection Information (c): IN IP4 192.168.0.167
            Time Description, active time (t): 0 0
            Media Description, name and address (m): audio 45566 RTP/AVP 107
119 100 106 0 105 98 8 101
            Media Attribute (a): fmtp:101 0-15
            Media Attribute (a): rtpmap:107 BV32/16000
            Media Attribute (a): rtpmap:119 BV32-FEC/16000
            Media Attribute (a): rtpmap:100 SPEEX/16000
            Media Attribute (a): rtpmap:106 SPEEX-FEC/16000
            Media Attribute (a): rtpmap:105 SPEEX-FEC/8000
            Media Attribute (a): rtpmap:98 iLBC/8000
            Media Attribute (a): rtpmap:101 telephone-event/8000
            Media Attribute (a): sendrecv

192.162.10.224 ----> PROXY

Request-Line: ACK
sip:franco.callegati at 85.18.14.25:42214;rinstance=96888d44783df4a0
SIP/2.0
    Message Header
        Via: SIP/2.0/UDP 192.168.10.224:64244
;branch=z9hG4bK-d87543-66641951d8357408-1--d87543-
        Max-Forwards: 70
        Route: <sip:PROXY_IP:5060;lr;nat=yes;ftag=4554424c>
        Contact: <sip:daniel.grotti at 192.168.10.224:64244>
        To: "franco.callegati"<sip:franco.callegati at PROXY_IP>;tag=d06d8b2d
        From: "casa"<sip:daniel.grotti at PROXY_IP>;tag=4554424c
        Call-ID: YjRmZjU3ODAwMjIxMDU0MDUwNDllYzUwNmZiYTJjMmE.
        CSeq: 2 ACK
        Proxy-Authorization: Digest
username="1000",realm="PROXY_IP",nonce="47593c9fa32034a66fdb7493ff499c7215d4d8db",uri="sip:
franco.callegati at PROXY
_IP",response="82d21af18029aa02388869088c3619d2",algorithm=MD5
        User-Agent: X-Lite release 1011s stamp 41150
        Content-Length: 0


RTP STREAM BETWEEN CLIENTS (MEDIAPROXY DOESN'T WORK)

CALL ENDED

----------------------------------------------------------------------------------------------------------------------

this is my config file:

debug=3
fork=yes
log_stderror=yes

listen=PROXY_IP
port=5060
children=4

dns=no
rev_dns=no
disable_dns_blacklist=yes

mpath="/usr/SER_proxy//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 "alias_db.so"


#----------------------------------------------------------
# Parameters
#----------------------------------------------------------

modparam("auth_db|uri_db|usrloc|domain|alias_db", "db_url", "
mysql://topenser:openserrw@localhost/topenser")

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)

modparam("alias_db", "use_domain", 1)

# REGISTRAR MODULE
modparam("registrar", "max_contacts", 2)          # max number of contacts
per URI
modparam("registrar", "append_branches", 0)         # if 0: R-URI will be
overwritten with the highest-q rated contact and the rest will be left
unprocessed.
modparam("registrar", "default_q", 1000)             # default contacts
q-value set as 1
modparam("registrar", "received_avp","$avp(i:42)")

# URI_DB MODULE
modparam("uri_db", "use_uri_table", 1)             # Specify if the "uri"
table should be used for checkings instead of "subscriber" table


# CPL MODULE
modparam("cpl-c", "db_url", "mysql://topenser:openserrw@localhost/topenser")
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")
modparam("cpl-c","lookup_append_branches",1)
modparam("cpl-c","proxy_route", 10)

#NATHELPER MODULE
modparam("nathelper", "rtpproxy_disable_tout", 120)
modparam("nathelper", "rtpproxy_tout", 2)
modparam("nathelper", "natping_interval", 30)
modparam("nathelper", "ping_nated_only", 1)
modparam("nathelper", "received_avp", "$avp(i:42)")
modparam("nathelper", "sipping_method", "OPTIONS")     # Use OPTIONS every
10sec to keep NAT alive
modparam("nathelper", "sipping_bflag", 6)
modparam("nathelper", "sipping_from", "sip:PROXY_IP")

#MEDIAPROXY MODULE
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")

# TM MODULE
modparam("tm", "fr_inv_timer", 120)


#------------------------------------------------------------
#MAIN ROUTE
#-----------------------------------------------------------

route {
    xlog("L_DBG", "INFO: NEW REQUEST - METHOD=$rm R-URI=$ru FROM=$fu TO=$tu
IP=$si ID=$ci\n");
#------------------------------------
# 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 ("PROXY_IP:5060;nat=yes");
                    xlog("L_DBG", "INFO: RECORD-ROUTE WITH NAT");
                  }
        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())
        {
          xlog("L_DBG", "INFO: 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(7);
                  use_media_proxy();
               };
            };

           route(1);
             exit;
        };
#-------------------------------------------------
#CALL TYPE PROCESSING
#-------------------------------------------------
    if (!uri==myself)
        { 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")
            {
                   xlog("L_DBG", "INFO: INVITE Message received");
              route(3);
              exit;
            };
          if (method=="MESSAGE")
            {
              xlog("L_DBG", "INFO: MESSAGE method received");
              route(4);
              exit;
            };


          lookup("aliases");
          if (!uri==myself)
            { route(1);
              exit;
            };

          if (!lookup("location"))
            { sl_send_reply("404", "Destination not found");
              exit;
            };

        };

    route(1);
}

#--------------------------------------------------------
# REGISTER PROCESSING
#--------------------------------------------------------
route[2]
{
# Check credentials

    if(!www_authorize("","subscriber"))
        {    www_challenge("","0");
            exit;
        }
    else if(!check_to())
        {    sl_send_reply("401", "Unauthorized");
            exit;
        };

    consume_credentials();

# Check client natted - if yes, set flag 6
        if (!search("^Contact:[ ]*\*") && client_nat_test("7"))
                {
                  setbflag(6);
          xlog("L_DBG","INFO: Registration behind NAT");
          xlog("L_DBG","INFO: Bflag 6, related to BRANCH=$T_branch_idx, is
setted as $bf");
                  fix_nated_register();
          force_rport();
                };

    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]
{
    sl_send_reply("100", "Trying");
# Check if caller is natted, if yes set flag 7, rewrite Contact HF with
Proxy address
    if(client_nat_test("7"))
        {
           setbflag(7);
           xlog("L_DBG", "INFO: CLIENT INVITE BEHIND NAT");
           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","INFO: rport FORCED");
                };
           if(fix_nated_contact())
                       {
              xlog("L_DBG","INFO: Contact HF is now [$ct]");
            };
          # append_hf("P-hint: INVITE behind NAT \n");
        };
# Check Credentials

    if(!proxy_authorize("","subscriber"))
        { proxy_challenge("","0");
          exit;
        }

    else if (!check_from())
        { sl_send_reply("403", "Unauthorized");
          exit;
        };

    lookup("aliases");
    if(uri!=myself)
        { route(1);
          exit;
        };

    consume_credentials();

# Check if r-URI is an alias. If yes, rewrite RURI with User's URI
    if(!alias_db_lookup("dbaliases"))
                {
                 xlog("L_DBG", "The [$ru] is not an alias");
                };

# Use Caller CPL "Outgoing" Script, if exist

    if(!cpl_run_script("outgoing", "force_stateful"))
                {
                  sl_send_reply("500","Outgoing CPL script execution
failed");
          exit;
                };
# Find destination user and re-write R-URI with its Contact

     if (!lookup("location"))
         { sl_send_reply("404", "Destination not found");
          exit;
        };

    xlog("L_DBG", "INFO: LOCATION HAS BEEN FOUND");
    xlog("L_DBG","INFO: R-URI  is now [$ru]");

    t_on_reply("1");

# Use CPL "Incoming" script of the destination client
        if(!cpl_run_script("incoming","force_stateful"))
                {
                    sl_send_reply("500", "Incoming CPL script execution
failed");
                exit;
                };
    route(11);
    route(1);
}


# --------------------------------
# PROXY ROUTE - CPL SCRIPT LOADED
# --------------------------------
route[10]
{
    xlog("L_DBG", "INFO: ROUTE 10 - PROXY ROUTE \n");
#    append_hf("P-hint: CPL ROUTE 10 - PROXY-ROUTE\n");
    if (isbflagset(6) || isbflagset(7))
        {
           xlog("L_DBG", "INFO: flag 6 or 7 setted \n");
           if(!isbflagset(8))
            {
               setbflag(8);
            };
             if(use_media_proxy())
               {
               xlog("L_DBG","NOTICE: MEDIAPROXY in use for the CALLER!!");
#               append_hf("P-hint: Mediaproxy in USE for the Caller\n");
              };
               };
}
# -----------------------------
# CONTROL FLAG - NO CPL SCRIPT
# -----------------------------
route[11]
{
        xlog("L_DBG", "INFO: ROUTE 11 - NO CPL SCRIPT");
#    append_hf("P-hint: ROUTE 11 \n");
        if(isbflagset(6) || isbflagset(7))
                {
                  xlog("L_DBG", "INFO: flag 6 or 7 setted");
                  if(!isbflagset(8))
                 {
                 setbflag(8);
               };
                if(use_media_proxy())
                      {
                               xlog("L_DBG","NOTICE: mediaproxy in use for
the caller!!");
#                           append_hf("P-hint: MEDIAPROXY in USE for the
CALLER\n");
                  };
                };
}

# --------------------------------------------------
# MESSAGE PROCESSING
# --------------------------------------------------
route[4]
{
     if (uri!=myself)
                { sl_send_reply ("403", "Forbidden");
                  exit;
                };
     if (!lookup("location"))
                { sl_send_reply("404", "Destination not found");
                  exit;
                };
    route(1);
}

#----------------------------------------------------
# RELEY ROUTE
#----------------------------------------------------
route[1]
{
        if (!t_relay("0x01"))                 # don't send 100 trying
                {
          if (method=="INVITE" || method=="ACK")
                        {
                           end_media_session();
                     xlog("L_DBG","INFO: MEDIA SESSION ENDED");
                        };

                  sl_reply_error();
                  xlog("L_DBG", "INFO: SENT ERROR REPLY");
                };
}

#---------------------------------------------------------------------
# On Reply Route
#---------------------------------------------------------------------

onreply_route[1]
{
    xlog("L_DBG","INFO : ONREPLY ROUTE");
#    append_hf("P-hint: ONREPLY ROUTE \n");
    if (status=~"(180)|(183)|2[0-9][0-9]")
        {
          if (isbflagset(8) && !search("^Content-Lenght:[ ]*0"))
            {

                if(use_media_proxy())
                 {
                               xlog("L_DBG","INFO: MEDIAPROXY in use for the
CALLED!");
#                   append_hf("P-hint: Media Proxy in use for the
Callee!\n");
                                };
            };
        };
    if (client_nat_test("7") && status=~"(180)|(183)|(200)")
        {
          fix_nated_contact();

          xlog("L_DBG","INFO: CONTACT HF has been CHANGED");
#          append_hf("P-hint: CALLEE'S CONTACT HF has benn CHANGED\n");

        };
}

----------------------------------------------------------------------------------------------------------------------





Regards,
Daniel
















Hi Daniel,

Can u post your openser configuration as well as a complete ngrep
trace for the calls you have problems with?

DanB



-- 
Daniel Grotti
________________________
e-mail : d.grotti at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kamailio.org/pipermail/users/attachments/20071207/15bb3f97/attachment.htm 


More information about the Users mailing list