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
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
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();
}