Thanks Jan, I Have probed the record_route_preset("200.24.99.131") The server answers with a 200(OK) to the INVITE Method, but it doesn't to the BYE method, it responds a 408(Request Timeout). Let me ilustrate this with a couple of messages sent by the Sip Server and Received by the UA:
ACK Method:*****************************
SEND TIME: 1323437 SEND >> 200.24.99.131:5060 ACK sip:3306478@200.21.183.8:5064 SIP/2.0 Via: SIP/2.0/UDP 200.71.97.238:5060;rport;branch=z9hG4bK4CF97589DE6D419A8256E490D84C5B82 From: Andres Parra sip:3304076@ipsofactum.com;tag=2282884754 To: sip:3306478@ipsofactum.com;tag=1746857641 Contact: sip:3304076@200.71.97.238:5060 Route: sip:3306478@200.24.99.131:5060;ftag=2282884754;lr=on *is this wright!! Call-ID: F6FF9150-1BC0-43B1-A864-F4071E00F9F7@200.71.97.238 CSeq: 19778 ACK Max-Forwards: 70 Content-Length: 0
INVITE Method:*****************************
SEND TIME: 1313281 SEND >> 200.24.99.131:5060 INVITE sip:3306478@ipsofactum.com SIP/2.0 Via: SIP/2.0/UDP 200.71.97.238:5060;rport;branch=z9hG4bK0EF6D4BBBB9746898A187FDDD5153F3D From: Andres Parra sip:3304076@ipsofactum.com;tag=2282884754 To: sip:3306478@ipsofactum.com Contact: sip:3304076@200.71.97.238:5060 Call-ID: F6FF9150-1BC0-43B1-A864-F4071E00F9F7@200.71.97.238 CSeq: 19778 INVITE Max-Forwards: 70 Content-Type: application/sdp User-Agent: X-Lite release 1103a Content-Length: 221 (SDP not Shown)
RECEIVE TIME: 1314343 RECEIVE << 200.24.99.131:5060 SIP/2.0 180 Ringing Via: SIP/2.0/UDP 200.71.97.238:5060;rport=5060;branch=z9hG4bK0EF6D4BBBB9746898A187FDDD5153F3D From: Andres Parra sip:3304076@ipsofactum.com;tag=2282884754 To: sip:3306478@ipsofactum.com;tag=1746857641 Contact: sip:3306478@200.21.183.8:5064 Record-Route: sip:3306478@200.24.99.131:5060;ftag=2282884754;lr=on Call-ID: F6FF9150-1BC0-43B1-A864-F4071E00F9F7@200.71.97.238 CSeq: 19778 INVITE Server: X-Lite release 1103m Content-Length: 0
RECEIVE TIME: 1318750 RECEIVE << 200.24.99.131:5060 SIP/2.0 200 Ok Via: SIP/2.0/UDP 200.71.97.238:5060;rport=5060;branch=z9hG4bK0EF6D4BBBB9746898A187FDDD5153F3D From: Andres Parra sip:3304076@ipsofactum.com;tag=2282884754 To: sip:3306478@ipsofactum.com;tag=1746857641 Contact: sip:3306478@200.21.183.8:5064 Record-Route: sip:3306478@200.24.99.131:5060;ftag=2282884754;lr=on Call-ID: F6FF9150-1BC0-43B1-A864-F4071E00F9F7@200.71.97.238 CSeq: 19778 INVITE Content-Type: application/sdp Server: X-Lite release 1103m Content-Length: 244 (SDP not Shown)
BYE Method:*****************************
SEND TIME: 1445500 SEND >> 200.24.99.131:5060 BYE sip:3306478@200.21.183.8:5064 SIP/2.0 Via: SIP/2.0/UDP 200.71.97.238:5060;rport;branch=z9hG4bKE6009A2AA4484F558657D94C3E7C7CF7 From: Andres Parra sip:3304076@ipsofactum.com;tag=2282884754 To: sip:3306478@ipsofactum.com;tag=1746857641 Contact: sip:3304076@200.71.97.238:5060 Route: sip:3306478@200.24.99.131:5060;ftag=2282884754;lr=on Call-ID: F6FF9150-1BC0-43B1-A864-F4071E00F9F7@200.71.97.238 CSeq: 19779 BYE Max-Forwards: 70 User-Agent: X-Lite release 1103a Content-Length: 0
RECEIVE TIME: 1471343 RECEIVE << 200.24.99.131:5060 SIP/2.0 408 Request Timeout Via: SIP/2.0/UDP 200.71.97.238:5060;rport=5060;branch=z9hG4bKE6009A2AA4484F558657D94C3E7C7CF7 From: Andres Parra sip:3304076@ipsofactum.com;tag=2282884754 To: sip:3306478@ipsofactum.com;tag=1746857641 Call-ID: F6FF9150-1BC0-43B1-A864-F4071E00F9F7@200.71.97.238 CSeq: 19779 BYE Server: Servidor SIP IPSOFACTUM ( Version 0.1 (i386/linux)) Content-Length: 0 Warning: 392 192.168.0.2:5060 "Noisy feedback tells: pid=12978 req_src_ip=200.71.97.238 req_src_port=5060 in_uri=sip:3306478@200.21.183.8:5064 out_uri=sip:3306478@200.21.183.8:5064 via_cnt==0" * What is this? i have always wondered
*********************
Ok, sorry about all those messages but i'm about to finish my query: The thing is, all the above shows me that the SIP Proxy is recieving the BYE but it doesn't process it because a 200(OK) isn't replayed, why is that? I thinking that i'd maybe make the server to listen to the public_IP_Add with "listen=200.24.99.131", (this could work???), or adding "advertised_address = 200.24.99.131" to the ser.cfg. Maybe you could help me to decide, I'm realy confused.
Thanx
Andres Parra
--- Jan Janak jan@iptel.org wrote:
Date: Sun, 12 Sep 2004 20:59:00 +0200 From: Jan Janak jan@iptel.org To: Andr�s_Parra_L. apl_1980b@yahoo.com CC: serusers@lists.iptel.org Subject: Re: [Serusers] Record-Route behind NAT
If the SIP server listens on the private IP address only then you have to force it to use the public IP explicitely because it does not know it.
You can use record_route_preset("200.24.99.131;lr");
Jan.
On 11-09 11:29, Andr�s Parra L. wrote:
I have a little problem, i need to force the UA (outside NAT with public IP address) to send the
BYE
messages to my Sip Server so I can account them in the acc table. I use record_route() to acomplish that but the
thing
is the Record-Route field in the message that an UA
recieve,
the IP address is the SIP SERVER LOCAL IP ADDRESS BEHIND NAT (Record-Route: sip:5000022@192.168.0.2;ftag=192550680;lr=on) which means, of course, that the message will not
pass
trough the SIP Server. How Could i force the server to write in the Record-Route field the valid IP address of my Sip Server (200.24.99.131)????
Example message sent by the Sip Proxy: RECEIVE TIME: 1420109 RECEIVE << 200.24.99.131:5060 SIP/2.0 180 Ringing Via: SIP/2.0/UDP
200.71.103.253:5060;rport=5060;branch=z9hG4bK725C92055C654839934F043974F39E1F
From: Andres Parra sip:3304076@ipsofactum.com;tag=192550680 To: sip:5000022@ipsofactum.com;tag=2391513217 Contact: sip:5000022@68.38.237.35:32805 Record-Route: sip:5000022@192.168.0.2;ftag=192550680;lr=on Call-ID:
31517648-DF5F-4A12-BE74-5B1026B4C39D@200.71.103.253
CSeq: 29855 INVITE Server: X-Lite release 1103m Content-Length: 0
Ser.cfg:
# # $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15
andrei
Exp $ # # simple quick-start config script #
# ----------- global configuration parameters
#debug=3 # debug level (cmd line:
-dddddddddd)
#fork=yes #log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode debug=7 fork=no log_stderror=yes */
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"
# ------------------ 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/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" loadmodule "/usr/local/lib/ser/modules/acc.so" loadmodule "/usr/local/lib/ser/modules/textops.so"
# Uncomment this if you want to use SQL database
# ----------------- 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)
# -- acc params - modparam("acc", "log_missed_flag", 3) modparam("acc", "log_level", 1) modparam("acc", "log_flag", 1) modparam("acc", "db_flag", 1) modparam("acc", "db_missed_flag", 3)
# ------------------------- 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", "Mensaje demasiado
grande");
break;
}; # prevents private ip space from being used if (search("^(Contact|m): .*@(192.168.|10.|172.16)")) { if (method=="REGISTER") { log(1, "LOG: Someone trying to register
from
private IP\n"); sl_send_reply("479", "Por favor no utilice direcciones IP privadas" ); break; }; }; # loose-route processing if (loose_route()) { t_relay(); break; }; # labeled all transaction for accounting setflag(1);
# 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 INVITES to make sure BYEs will
visit
our server too if (method=="INVITE") record_route();
# 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=~"ipsofactum.com" ){#|| !(uri=~"^sip:(192.168.|10.|172.16)")) {
if (method=="REGISTER") { # Uncomment this if you want to use digest
authentication if (!www_authorize("ipsofactum.com",
"subscriber"))
{ www_challenge("ipsofactum.com", "0"); break; }; setflag(3); save("location"); break; }; # native SIP destinations are handled using our USRLOC DB if (!lookup("location")){ #&& !lookup("subscribers")) { # call invitations to off-line users are
reported
using the # acc_request action; to avoid duplicate reports on request # retransmissions, request is processed statefuly (t_newtran, # t_reply) if ((method=="INVITE" || method=="ACK") && t_newtran() ) { t_reply("404", "Usuario no
registrado!,
contacte el directorio de usuarios registrados"); acc_db_request("404 Not Found","missed_calls"); break; }; # all other requests to off-line users are simply replied # statelesslyeth0 and no reports are
issued
#sl_send_reply("404", "Usuario no
existente!,
contacte el directorio de usuarios suscritos"); #break; } else { # user on-line; report on failed
transactions;
mark the # transaction for reporting using the same number as # configured above; if the call is really missed, a report # will be issued setflag(3); # forward to user's current destination t_relay(); break; }; };
# 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(); };
}
_______________________________ Do you Yahoo!? Shop for Back-to-School deals on Yahoo! Shopping. http://shopping.yahoo.com/backtoschool
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
__________________________________ Do you Yahoo!? Yahoo! Mail - 50x more storage than other providers! http://promotions.yahoo.com/new_mail