I am seeing 2 problems with nathelper and rtpproxy. One I have seen mentioned on the list but no solution or explainations that I can find.
1. I am seeing the following in my messages file Oct 29 11:01:34 serv1 ser[9229]: ERROR: extract_mediaip: no `c=' in SDP Oct 29 11:01:35 serv1 ser[9229]: ERROR: extract_mediaip: no `c=' in SDP Oct 29 11:01:36 serv1 ser[9227]: ERROR: extract_mediaip: no `c=' in SDP
2. In some situations the BYE messages don't hangup the call
I am using yesterday unstable CVS tree. Client I am using in the test lab are Budgetone and x-lite softphones
and hear is my ser.cfg
Thanks
# # $Id: ser.cfg,v 1.21 2003/06/04 13:47:36 jiri Exp $ # # simple quick-start config script #
# ----------- global configuration parameters ------------------------
/* Uncomment these lines to enter debugging mode debug=3 # debug level (cmd line: -dddddddddd) fork=yes log_stderror=no # (cmd line: -E) */
# /* Uncomment these lines to enter debugging mode debug=10 fork=yes log_stderror=no # */
check_via=no # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) port=5060 children=4 fifo="/tmp/ser_fifo"
alias=mydomain.dyndns.org
# ------------------ 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/nathelper.so" loadmodule "/usr/local/lib/ser/modules/textops.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"
# ----------------- 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)
# ------------------------- 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") { force_rport(); fix_nated_contact(); save("location"); # Uncomment this if you want to use digest authentication # if (!www_authorize("iptel.org", "subscriber")) { # www_challenge("iptel.org", "0"); # break; # };
save("location"); break; };
# native SIP destinations are handled using our USRLOC DB if (!lookup("location")) { sl_send_reply("404", "Not Found"); break; }; };
#inserted by klaus if (method=="INVITE") { record_route(); force_rtp_proxy(); /* set up reply processing */ t_on_reply("1"); };
# 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(); };
}
#inserted by klaus # all incoming replies for t_onrepli-ed transactions enter here onreply_route[1] { if (status=~"2[0-9][0-9]") force_rtp_proxy(); }
On Wednesday 29 October 2003 12:44, Glenn Dalgliesh wrote:
I am seeing 2 problems with nathelper and rtpproxy. One I have seen mentioned on the list but no solution or explainations that I can find.
- I am seeing the following in my messages file
Oct 29 11:01:34 serv1 ser[9229]: ERROR: extract_mediaip: no `c=' in SDP Oct 29 11:01:35 serv1 ser[9229]: ERROR: extract_mediaip: no `c=' in SDP Oct 29 11:01:36 serv1 ser[9227]: ERROR: extract_mediaip: no `c=' in SDP
We also see those messages every time a call is made. However it does not interfere with the actual call though. The problem is that the nathelper modules looks at all SIP Messages and tries to parse the SDP in them. There are some SIP messages that don't have an SDP at all so it does not find the "c=". I would guess these could be SIP "100 Trying" or "180 Ringing" messages but can't tell for sure. We have not tried to fiddle with the default config since it works perfectly for us (with the exception of tons and tons of the above message and some others too like: { Oct 29 13:04:10 wailea /usr/local/sbin/ser[24801]: ERROR: on_reply processing failed Oct 29 13:04:12 wailea /usr/local/sbin/ser[24802]: WARNING: get_body_len: Content-TYPE header absent!let's assume the content is text/plain ;-) }
If anybody else knows how to fine tune the default config to correct the above issue then let us know please.
and by the way, the 2 key parts of our config are:
if (method=="INVITE") { if (isflagset(1)) { # ATA ? force_rtp_proxy(); }; # /* set up reply processing */ t_on_reply("1"); }; . . . onreply_route[1] { if ((status=~"[12][0-9][0-9]")) fix_nated_contact(); force_rtp_proxy(); }
Thanks. Andres http://www.telesip.net
- In some situations the BYE messages don't hangup the call
I am using yesterday unstable CVS tree. Client I am using in the test lab are Budgetone and x-lite softphones
and hear is my ser.cfg
Thanks
# # $Id: ser.cfg,v 1.21 2003/06/04 13:47:36 jiri Exp $ # # simple quick-start config script #
# ----------- global configuration parameters ------------------------
/* Uncomment these lines to enter debugging mode debug=3 # debug level (cmd line: -dddddddddd) fork=yes log_stderror=no # (cmd line: -E) */
# /* Uncomment these lines to enter debugging mode debug=10 fork=yes log_stderror=no # */
check_via=no # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) port=5060 children=4 fifo="/tmp/ser_fifo"
alias=mydomain.dyndns.org
# ------------------ 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/nathelper.so" loadmodule "/usr/local/lib/ser/modules/textops.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"
# ----------------- 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)
# ------------------------- 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") { force_rport(); fix_nated_contact(); save("location");
# Uncomment this if you want to use digest authentication # if (!www_authorize("iptel.org", "subscriber")) { # www_challenge("iptel.org", "0"); # break; # };
save("location"); break; }; # native SIP destinations are handled using our USRLOC DB if (!lookup("location")) { sl_send_reply("404", "Not Found"); break; }; };
#inserted by klaus if (method=="INVITE") { record_route(); force_rtp_proxy(); /* set up reply processing */ t_on_reply("1"); };
# 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(); };
}
#inserted by klaus # all incoming replies for t_onrepli-ed transactions enter here onreply_route[1] { if (status=~"2[0-9][0-9]") force_rtp_proxy(); }