Below is a call flow for a situation that fails -
I have attached the ser.cfg file, and two ethereal sniffs - these are
for fax call attempts - one with record_route commented out (which
succeeds) , and one with record_route(), which fails.
Note that in the failure case, with record_route(), the re-invite from
208.226.140.40 gets to the proxy at 208.226.140.141, but the proxy never
sends that to the origination UA, 208.226.140.142.
The fax case looks nearly identical to the call flow below, which was
taken from a call attempt with a SIP phone placed on hold.
From TRT --
We are having a problem with a Re-Invite between and endpoint and the
SER proxy. The call flow is:
Assumptions: Record route turned on in Proxy
UA-Orig
Proxy
UA-Term
192.168.1.10
192.168.1.20 192.168.1.30
------------------Invite sip:1@192.168.1.20------->
<--------------- 100 Trying ----------------------------
--------
Invite sip:1@192.168.1.30 --------->
<-------------- 100 Trying --------------------
<------------------180 Ringing ----------------
<---------------- 180 Ringing -------------------------
<------------------ 200 OK ---------------------
<---------------- 200 OK-------------------------------
--------------------- ACK sip:1@192.168.1.20 à
---------
Ack sip:1@192.168.1.30 ------>
******** Call is connected and voice path is established
*************************
******** Termination puts call on hold and sends NULL SDP via Re-Invite
******
<--------
Invite sip:1@192.168.1.20-------
** Note: to and from tags are set correctly, call id is same as original
Invite, Sequence incremented
---------- 100 Trying ------------------------->
---------- Invite
sip:1@192.168.1.30 -------->
** Invite is being sent back to termination. It is not identifying this
call as an existing call in the proxy.
TRT
--
Bert Berlin
Director, System Test
Quintum Technologies, Inc.
71 James Way
Eatontown,NJ 07724
ph 732-460-9000 ext 247
#
# $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $
#
# simple quick-start config script
# Uses proxy registrar to route call, so won't work unless UA is registered.
#
# ----------- global configuration parameters ------------------------
debug=8 # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=yes # (cmd line: -E)
/* Uncomment these lines to enter debugging mode */
fifo="/tmp/ser_fifo"
sip_warning=yes
check_via=yes # (cmd. line: -v)
dns=yes # (cmd. line: -r)
rev_dns=yes # (cmd. line: -R)
listen=208.226.140.141
port=5060
listen=208.226.140.141
port=5000
listen=208.226.140.141
port=5061
listen=208.226.140.141
port=6000
children=4
fifo="/tmp/ser_fifo"
# ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database
loadmodule "/usr/lib/ser/modules/mysql.so"
loadmodule "/usr/lib/ser/modules/sl.so"
loadmodule "/usr/lib/ser/modules/tm.so"
loadmodule "/usr/lib/ser/modules/rr.so"
loadmodule "/usr/lib/ser/modules/maxfwd.so"
loadmodule "/usr/lib/ser/modules/usrloc.so"
loadmodule "/usr/lib/ser/modules/registrar.so"
# Uncomment this if you want digest authentication
# mysql.so must be loaded !
loadmodule "/usr/lib/ser/modules/auth.so"
loadmodule "/usr/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)
modparam("registrar", "default_expires", 120) #sets default for expiry
if registrant doesn't specify
modparam("registrar", "default_q", 1000)# sets default q value in
registration
# ------------------------- request routing logic -------------------
alias=quintum.com
alias=208.226.140.141
alias=208.226.140.41
alias=engweb(a)quintum.com
alias=208.226.140.141(a)quintum.com
alias=208.226.140.41(a)quintum.com
# 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;
};
############################################
# store user location if a REGISTER appears
if (method=="REGISTER") {
save("location");
break;
};
if (uri==myself) #where myself is defined by the aliases above
{
#look for the registered contact in the location table of database
#and if find it, rewrite the uri and forward statefully to the destination
if (lookup ("location"))##Lookup finds the contact info and rewrites the
header
{
record_route();#send everything back through the proxy
t_relay();
break;
}
else
{
sl_send_reply("404","user not found");#and if you really don't
know what to do, send this back
break;
}
};
}