Daniel,
Can you post also your mediaproxy configuration?
Perhaps as test case you should start mediaproxy in foreground
(mediaproxy.py --no-fork) and check what comes out.
DanB
On Dec 7, 2007 1:59 PM, Daniel <d.grotti(a)gmail.com> wrote:
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@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@192.168.10.224:64244>
To: "franco.callegati"<sip:franco.callegati@PROXY_IP>
From: "casa"<sip:daniel.grotti@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@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@PROXY_IP>
From: "casa"<sip:daniel.grotti@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@85.18.14.25:42214;rinstance=96888d44783df4a0>
To: "franco.callegati"<sip:
franco.callegati@PROXY_IP>;tag=d06d8b2d
From: "casa"<sip:daniel.grotti@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@85.18.14.25:42214;rinstance=96888d44783df4a0>
To:
"franco.callegati"<sip:franco.callegati@PROXY_IP>;tag=d06d8b2d
From: "casa"<sip: daniel.grotti@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@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@192.168.10.224:64244>
To:
"franco.callegati"<sip:franco.callegati@PROXY_IP>;tag=d06d8b2d
From: "casa"<sip:daniel.grotti@PROXY _IP>;tag=4554424c
Call-ID: YjRmZjU3ODAwMjIxMDU0MDUwNDllYzUwNmZiYTJjMmE.
CSeq: 2 ACK
Proxy-Authorization: Digest
username="1000",realm="PROXY_IP",nonce="47593c9fa32034a66fdb7493ff499c7215d4d8db",uri="sip:
franco.callegati@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(a)gmail.com
_______________________________________________
Users mailing list
Users(a)lists.openser.org
http://lists.openser.org/cgi-bin/mailman/listinfo/users