[Serusers] One failure_route problem remaining

Corey S. McFadden csm-lists at csma.biz
Tue Sep 6 03:49:03 CEST 2005


Guys,

First, thanks again to those who have offered advice.  I have re-started 
building from the ONsip.org rtpproxy example config and have everything 
working properly except one thing.

In the interest of being thorough, I kept a log of what I changed and why:

 - Tested REGISTER, works OK.

 - Calls between UAs initially failed when proxy_authorize in route[3] was 
   called.  Disabled proxy_authorize checks.  Works OK. (Need to revisit 
   this one for security.  Can anyone point out the problem?)

 - Implemented failure_route for voicemail on timeout.  Timeout calls from 
   UAs work fine to VM via Asterisk.

 - Implemented 7 digit dial perl script and added second lookup.  No 
   problems.  Added NPANXX route lookup script in route[3].  No problems.

 - Implemented "Your call cannot be completed as dialed" via Asterisk 
   server by replacing sl_send_reply 404 in route[3] with route(7).  No 
   problems.

 - Initially was unable to dial voicemail access number from UA.  It would  
   connect to Asterisk server but not have audio.  Call would drop.  Fixed 
   by adding this to route[1]:

        # NAT Fix
        if (method=="INVITE" && nat_uac_test("19")) {
                force_rport();
                fix_nated_contact();
                force_rtp_proxy();
        };

 - Voicemail access is now OK.

 - UA timeout calls to voicemail now fail.  Debug on Asterisk looks like  
   the contact is being fixed twice.  Added flag(9) to make sure NAT fix 
   only happens once.  UA timeout calls now go to voicemail properly.

 - I notice a lot of "Warning: sl_send_reply: I won't send a reply for 
   ACK!!" but don't know if this is significant or not.  From what I've 
   read it sounds like ACKs are getting an sl_reply rather than being 
   t_relayed but I didn't really modify anything related ... ?


Now, the biggest problem seems to be calls coming from the inbound SIP 
gateway aren't being handled properly on timeout.  (Calls from the inbound 
SIP gateway work fine to UAs.)  This very well may be the fault of the 
other equipment, but it's nothing we can debug directly so I want to make 
sure there's nothing else wrong.

Keep in mind, the inbound SIP gateway CAN communicate with the Asterisk 
server by dialing a DID that is directed to voicemail.  I thought it might 
be some kind of routing problem between those boxes, but this would seem 
to disprove that.

I'm going to include the abbreviated ngrep dump from the SER machine and 
then the ser.cfg file.

Thanks again for the help thus far and in advance for any assistance on 
this.

-Corey



Here is an IP legend:
 xxx.xxx.xxx.7 - Inbound SIP Gateway
 xxx.xxx.xxx.36 - SER Server
 xxx.xxx.xxx.80 - Asterisk Server
 216.xxx.ua.207 - NATed UA public IP


** NGREP DUMP FROM SER SERVER
#
U xxx.xxx.xxx.7:5060 -> xxx.xxx.xxx.36:5060
  INVITE sip:5414362504 at xxx.xxx.xxx.36:5060 SIP/2.0..Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;branch=z9hG4bK-00101-Xvn755Ml3U1j41B
#
U xxx.xxx.xxx.36:5060 -> xxx.xxx.xxx.7:5060
  SIP/2.0 100 trying -- your call is important to us..Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;branch=z9hG4bK-00101-Xvn755Ml3U1j41
#
U xxx.xxx.xxx.36:5060 -> 216.xxx.ua.207:7565
  INVITE sip:5414362504 at 216.xxx.ua.207:5060 SIP/2.0..Record-Route: <sip:xxx.xxx.xxx.36;ftag=Xvn755Ml3U1j41B-IPTrunk-67-17-23at
#
U 216.xxx.ua.207:7565 -> xxx.xxx.xxx.36:5060
  SIP/2.0 100 Trying..Via: SIP/2.0/UDP xxx.xxx.xxx.36;branch=z9hG4bKe432.bd7822d3.0,SIP/2.0/UDP xxx.xxx.xxx.7:5060;rport=5060
#
U 216.xxx.ua.207:7565 -> xxx.xxx.xxx.36:5060
  SIP/2.0 180 Ringing..Via: SIP/2.0/UDP xxx.xxx.xxx.36;branch=z9hG4bKe432.bd7822d3.0,SIP/2.0/UDP xxx.xxx.xxx.7:5060;rport=506
#
U xxx.xxx.xxx.36:5060 -> xxx.xxx.xxx.7:5060
  SIP/2.0 180 Ringing..Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;rport=5060;branch=z9hG4bK-00101-Xvn755Ml3U1j41B-0..From: sip:61087
#
# *** Call is diverted to Asterisk server here.
#
U xxx.xxx.xxx.36:5060 -> xxx.xxx.xxx.80:5060
  INVITE sip:5414362504 at xxx.xxx.xxx.80:5060 SIP/2.0..Record-Route: <sip:xxx.xxx.xxx.36;ftag=Xvn755Ml3U1j41B-IPTrunk-67-17-23a
#
U xxx.xxx.xxx.36:5060 -> 216.xxx.ua.207:7565
  CANCEL sip:5414362504 at 216.xxx.ua.207:5060 SIP/2.0..Via: SIP/2.0/UDP xxx.xxx.xxx.36;branch=z9hG4bKe432.bd7822d3.0..From: sip:
#
U xxx.xxx.xxx.80:5060 -> xxx.xxx.xxx.36:5060
  SIP/2.0 100 Trying..Via: SIP/2.0/UDP xxx.xxx.xxx.36;branch=z9hG4bKe432.bd7822d3.1..Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;bran
#
U 216.xxx.ua.207:7565 -> xxx.xxx.xxx.36:5060
  SIP/2.0 200 OK..Via: SIP/2.0/UDP xxx.xxx.xxx.36;branch=z9hG4bKe432.bd7822d3.0..From: sip:6108712381 at xxx.xxx.xxx.7:5060;tag=
#
U 216.xxx.ua.207:7565 -> xxx.xxx.xxx.36:5060
  SIP/2.0 487 Request Cancelled..Via: SIP/2.0/UDP xxx.xxx.xxx.36;branch=z9hG4bKe432.bd7822d3.0,SIP/2.0/UDP xxx.xxx.xxx.7:5060
#
U xxx.xxx.xxx.36:5060 -> 216.xxx.ua.207:7565
  ACK sip:5414362504 at 216.xxx.ua.207:5060 SIP/2.0..Via: SIP/2.0/UDP xxx.xxx.xxx.36;branch=z9hG4bKe432.bd7822d3.0..From: sip:610
#
U xxx.xxx.xxx.36:5060 -> 216.xxx.ua.207:5060
  ....                                                                                                                       
#
U xxx.xxx.xxx.36:5060 -> 216.xxx.ua.207:7565
  ....                                                                                                                       
#
U xxx.xxx.xxx.80:5060 -> xxx.xxx.xxx.36:5060
  SIP/2.0 200 OK..Via: SIP/2.0/UDP xxx.xxx.xxx.36;branch=z9hG4bKe432.bd7822d3.1..Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;branch=z
#
U xxx.xxx.xxx.36:5060 -> xxx.xxx.xxx.7:5060
  SIP/2.0 200 OK..Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;branch=z9hG4bK-00101-Xvn755Ml3U1j41B-0..Record-Route: <sip:209.216.160.
#
U xxx.xxx.xxx.80:5060 -> xxx.xxx.xxx.36:5060
  SIP/2.0 200 OK..Via: SIP/2.0/UDP xxx.xxx.xxx.36;branch=z9hG4bKe432.bd7822d3.1..Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;branch=z
#
U xxx.xxx.xxx.36:5060 -> xxx.xxx.xxx.7:5060
  SIP/2.0 200 OK..Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;branch=z9hG4bK-00101-Xvn755Ml3U1j41B-0..Record-Route: <sip:209.216.160.
#
# Several OKs seem to be going through here...
U xxx.xxx.xxx.80:5060 -> xxx.xxx.xxx.36:5060
  SIP/2.0 200 OK..Via: SIP/2.0/UDP xxx.xxx.xxx.36;branch=z9hG4bKe432.bd7822d3.1..Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;branch=z
#
U xxx.xxx.xxx.36:5060 -> xxx.xxx.xxx.7:5060
  SIP/2.0 200 OK..Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;branch=z9hG4bK-00101-Xvn755Ml3U1j41B-0..Record-Route: <sip:209.216.160.
#
U xxx.xxx.xxx.80:5060 -> xxx.xxx.xxx.36:5060
  SIP/2.0 200 OK..Via: SIP/2.0/UDP xxx.xxx.xxx.36;branch=z9hG4bKe432.bd7822d3.1..Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;branch=z
#
U xxx.xxx.xxx.36:5060 -> xxx.xxx.xxx.7:5060
  SIP/2.0 200 OK..Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;branch=z9hG4bK-00101-Xvn755Ml3U1j41B-0..Record-Route: <sip:209.216.160.
#
# Call is dropped by now.




** Asterisk console sip debug

<-- SIP read from xxx.xxx.xxx.36:5060:
INVITE sip:5414362504 at xxx.xxx.xxx.80:5060 SIP/2.0
Record-Route: <sip:xxx.xxx.xxx.36;ftag=AJn351hl3U1H58O-IPTrunk-70-17-23atxxx.xxx.xxx.7;lr=on>
Via: SIP/2.0/UDP xxx.xxx.xxx.36;branch=z9hG4bKef17.c97ef7d2.1
Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;rport=5060;branch=z9hG4bK-00101-AJn351hl3U1H58O-0
Max-Forwards: 5
From: sip:6108712381 at xxx.xxx.xxx.7:5060;tag=AJn351hl3U1H58O-IPTrunk-70-17-23atxxx.xxx.xxx.7
To: sip:5414362504 at xxx.xxx.xxx.36:5060
Call-ID: AJn351hl3U1H58O at xxx.xxx.xxx.7
CSeq: 101 INVITE
Remote-Party-Id: <sip:6108712381 at xxx.xxx.xxx.7:5060>;party=calling;privacy=off;id-type=subscriber
Expires: 180
Allow: INVITE,CANCEL,BYE,ACK
Contact: sip:xxx.xxx.xxx.7:5060
User-Agent: Tekelec-7000/r4.0
Content-Type: application/sdp
Content-Length: 149
P-hint: OFFLINE VOICEMAIL

v=0
o=- 1 1 IN IP4 xxx.xxx.xxx.7
s=
c=IN IP4 xxx.xxx.xxx.36
t=0 0
m=audio 35842 RTP/AVP 0
a=ptime:20
a=rtpmap:0 PCMU/8000
a=nortpproxy:yes


--- (17 headers 9 lines)---
Using INVITE request as basis request - AJn351hl3U1H58O at xxx.xxx.xxx.7
Sending to xxx.xxx.xxx.36 : 5060 (non-NAT)
Found no matching peer or user for 'xxx.xxx.xxx.36:5060'
Found RTP audio format 0
Peer audio RTP is at port xxx.xxx.xxx.36:35842
Found description format PCMU
Capabilities: us - 0x40e (gsm|ulaw|alaw|ilbc), peer - audio=0x4 (ulaw)/video=0x0 (nothing), combined - 0x4 (ulaw)
Non-codec capabilities: us - 0x1 (telephone-event), peer - 0x0 (nothing), combined - 0x0 (nothing)
Looking for 5414362504 in sip
list_route: hop: <sip:xxx.xxx.xxx.36;ftag=AJn351hl3U1H58O-IPTrunk-70-17-23atxxx.xxx.xxx.7;lr=on>
list_route: hop: <sip:xxx.xxx.xxx.7:5060>
Transmitting (no NAT) to xxx.xxx.xxx.36:5060:
SIP/2.0 100 Trying
Via: SIP/2.0/UDP xxx.xxx.xxx.36;branch=z9hG4bKef17.c97ef7d2.1
Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;branch=z9hG4bK-00101-AJn351hl3U1H58O-0
From: sip:6108712381 at xxx.xxx.xxx.7:5060;tag=AJn351hl3U1H58O-IPTrunk-70-17-23atxxx.xxx.xxx.7
To: sip:5414362504 at xxx.xxx.xxx.36:5060
all-ID: AJn351hl3U1H58O at xxx.xxx.xxx.7
CSeq: 101 INVITE
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY
Contact: <sip:5414362504 at xxx.xxx.xxx.80>
Content-Length: 0


---
    -- Executing Wait("SIP/5060-b7d05f68", "1") in new stack
    -- Executing VoiceMail("SIP/5060-b7d05f68", "5414362504 at sip") in new stack
We're at xxx.xxx.xxx.80 port 14018
Answering with preferred capability 0x4 (ulaw)
Answering with preferred capability 0x2 (gsm)
Answering with preferred capability 0x8 (alaw)
Answering with preferred capability 0x400 (ilbc)
Reliably Transmitting (no NAT) to xxx.xxx.xxx.36:5060:
SIP/2.0 200 OK
Via: SIP/2.0/UDP xxx.xxx.xxx.36;branch=z9hG4bKef17.c97ef7d2.1
Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;branch=z9hG4bK-00101-AJn351hl3U1H58O-0
Record-Route: <sip:xxx.xxx.xxx.36;ftag=AJn351hl3U1H58O-IPTrunk-70-17-23atxxx.xxx.xxx.7;lr=on>
From: sip:6108712381 at xxx.xxx.xxx.7:5060;tag=AJn351hl3U1H58O-IPTrunk-70-17-23atxxx.xxx.xxx.7
To: sip:5414362504 at xxx.xxx.xxx.36:5060;tag=as4c6bfaee
Call-ID: AJn351hl3U1H58O at xxx.xxx.xxx.7
CSeq: 101 INVITE
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY
Contact: <sip:5414362504 at xxx.xxx.xxx.80>
Content-Type: application/sdp
Content-Length: 237

v=0
o=root 29275 29275 IN IP4 xxx.xxx.xxx.80
s=session
c=IN IP4 xxx.xxx.xxx.80
t=0 0
m=audio 14018 RTP/AVP 0 3 8 97
a=rtpmap:0 PCMU/8000
a=rtpmap:3 GSM/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:97 iLBC/8000
a=silenceSupp:off - - - -

---
    -- Playing 'vm-intro' (language 'en')
Retransmitting #1 (no NAT) to xxx.xxx.xxx.36:5060:
SIP/2.0 200 OK
Via: SIP/2.0/UDP xxx.xxx.xxx.36;branch=z9hG4bKef17.c97ef7d2.1
Via: SIP/2.0/UDP xxx.xxx.xxx.7:5060;branch=z9hG4bK-00101-AJn351hl3U1H58O-0
Record-Route: <sip:xxx.xxx.xxx.36;ftag=AJn351hl3U1H58O-IPTrunk-70-17-23atxxx.xxx.xxx.7;lr=on>
From: sip:6108712381 at xxx.xxx.xxx.7:5060;tag=AJn351hl3U1H58O-IPTrunk-70-17-23atxxx.xxx.xxx.7
To: sip:5414362504 at xxx.xxx.xxx.36:5060;tag=as4c6bfaee
Call-ID: AJn351hl3U1H58O at xxx.xxx.xxx.7
CSeq: 101 INVITE
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY
Contact: <sip:5414362504 at xxx.xxx.xxx.80>
Content-Type: application/sdp
Content-Length: 237

v=0
o=root 29275 29275 IN IP4 xxx.xxx.xxx.80
s=session
c=IN IP4 xxx.xxx.xxx.80
t=0 0
m=audio 14018 RTP/AVP 0 3 8 97
a=rtpmap:0 PCMU/8000
a=rtpmap:3 GSM/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:97 iLBC/8000
a=silenceSupp:off - - - -

---





** ser.cfg

#  whatever.net - SER Configuration File
#

debug=3
fork=yes
log_stderror=yes


listen=xxx.xxx.xxx.36
port=5060
children=4
alias=whatever.net
alias=hostname.whatever.net

dns=no
rev_dns=no

fifo="/tmp/ser_fifo"
fifo_db_url="mysql://ser:serpass@localhost/ser"

# Modules

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"
loadmodule "/usr/local/lib/ser/modules/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/uri_db.so"
loadmodule "/usr/local/lib/ser/modules/uri.so"
loadmodule "/usr/local/lib/ser/modules/xlog.so"
loadmodule "/usr/local/lib/ser/modules/options.so"
loadmodule "/usr/local/lib/ser/modules/exec.so"


modparam("auth_db|uri_db|usrloc|permissions", "db_url", "mysql://ser:serpass@localhost/ser")

modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")

modparam("nathelper", "natping_interval", 30) 
modparam("nathelper", "ping_nated_only", 1)   
modparam("nathelper", "rtpproxy_sock", "unix:/var/run/rtpproxy.sock")

modparam("usrloc", "db_mode", 2)

modparam("registrar", "nat_flag", 6)

modparam("rr", "enable_full_lr", 1)

modparam("tm", "fr_inv_timer", 20)
modparam("tm", "fr_timer", 20)



#
# Route Section
#

route {

        # Basic Checks
        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483", "Too Many Hops");
                break;
        };

        if (msg:len > max_len) {
                sl_send_reply("513", "Message Overflow");
                break;
        };

	##
        # Record Route Section
	##

        if (method!="REGISTER") {
                record_route();
        };

        if (method=="BYE" || method=="CANCEL") {
                unforce_rtp_proxy();
        } 

	##
        # Loose Route Section
	##

        if (loose_route()) {
                if (has_totag() && (method=="INVITE" || method=="ACK")) {
                        if (nat_uac_test("19")) {
                                setflag(6);
                                force_rport();
                                fix_nated_contact();
			};
                    force_rtp_proxy("l");
                };
                route(1);
                break;
        };

	##
        # Message Processing Section
        ##

        if (uri!=myself) {
                route(1);
                break;
        };

        if (uri==myself) {

                if (method=="CANCEL") {
                        route(3);
                        break;
                } else if (method=="INVITE") {
                        route(3);
                        break;
                } else  if (method=="REGISTER") {
                        route(2);
                        break;
                } else if (method=="NOTIFY") {
                        sl_send_reply("200", "Shut up.");
                        break;
                } else if (method=="OPTIONS" && (! uri=~"sip:.*[@]+.*")) {
                        options_reply();
                        break;
		};

                lookup("aliases");
                if (uri!=myself) {
                        route(1);
                        break;
                };

                if (!lookup("location") && method!="ACK") {
                        sl_send_reply("404", "User Not Found");
                        break;
                };
        };

        route(1);
}

route[1] {

        # -----------------------------------------------------------------
        # Default Message Handler
        # -----------------------------------------------------------------

        # NAT Fix
        if (method=="INVITE" && nat_uac_test("19") && !isflagset(9)) {
                xlog("L_ERR", "Fixing NAT on INVITE for %ct.\n");
                force_rport();
                fix_nated_contact();
                force_rtp_proxy();
		setflag(9);
        };

        t_on_reply("1");

        if (!t_relay()) {
                if (method=="INVITE" && isflagset(6)) {
                  unforce_rtp_proxy();
                };
	        sl_reply_error();
        };
}

route[2] {

        # -----------------------------------------------------------------
        # REGISTER Message Handler
        # ----------------------------------------------------------------

        if (!search("^Contact:\ +\*") && nat_uac_test("19")) {
                setflag(6);
                fix_nated_register();
                force_rport();
        };

        sl_send_reply("100", "Trying");

        if (!www_authorize("whatever.net","subscriber")) {
                www_challenge("whatever.net","0");
                break;
        };

        if (!check_to()) {
                sl_send_reply("401", "Unauthorized");
                break;
        };

        consume_credentials();

        if (!save("location")) {
                sl_reply_error();
        };
}

route[3] {

        # -----------------------------------------------------------------
        # CANCEL and INVITE Message Handler
        # -----------------------------------------------------------------

        if (nat_uac_test("19")) {
                setflag(6);
        }

        lookup("aliases");
        if (uri!=myself) {
                route(1);
                break;
        };

        if (!lookup("location")) {

                if (uri=~"^sip:911@") { # Pass 911 calls first
                        route(5);
                        break;
                };
                if (uri=~"^sip:[0-9]{7}@") { # EXPAND 7-DIGIT CALL
                        exec_dset("/root/7digit.pl");
                };

                # Try location lookup again

                if (!lookup("location")) {

                        if (uri=~"^sip:[0-9]{10}@") {
                                # DB Lookup of NPANXX route
                                exec_dset("/root/npa_nxx.pl");
                                route(1);
                                break;
                        };
                        if (uri=~"^sip:[0-9]{11}@") {
                                # DB Lookup of NPANXX route
				strip(1);
                                exec_dset("/root/npa_nxx.pl");
                                route(1);
                                break;
                        };
                        if (uri=~"^sip:555@") {   # Voicemail Access
                                route(6);
                                break;
                        };
                        if (uri=~"^sip:556@") {   # Voicemail Access
                                route(6);
                                break;
                        };

                        # Call error message
                        route(7);
#                	sl_send_reply("404", "User Not Found");
                	break;
		};
        };

#        if (!proxy_authorize("whatever.net","subscriber")) {
#                proxy_challenge("whatever.net","0");
#                break;
#        } else if (!check_from()) {
#                sl_send_reply("403", "Use From=ID");
#                break;
#        };
#        consume_credentials();

        if (isflagset(6) && !isflagset(9)) {
                force_rport();
                fix_nated_contact();
                force_rtp_proxy();
		setflag(9);
        };

        t_on_reply("1");
	t_on_failure("1");

        if (!t_relay()) {
                if(isflagset(6)) {
                        unforce_rtp_proxy();
                };
                sl_reply_error();
        };
}

route[5] {

        ###
        # Local PSTN Gateway
        ###
        rewritehost("xxx.xxx.xxx.7");
        route(1);
}


route[6] {

        ###
        # Calls to VM
        ###
        rewritehost("xxx.xxx.xxx.80");
        route(1);
}

route[7] {

        ###
        # Call Failure
        ###
        rewriteuri("sip:7110000001 at xxx.xxx.xxx.80");
        route(1);
}



failure_route[1] {

        ###
        # Voicemail
        ###
        xlog("L_ERR", " Failure Route 1 hit.\n");

        if (t_check_status("487")) {
		xlog("L_ERR", " Failure Route 1 - 487 detected, breaking.\n");
                break;
        };

        rewritehost("xxx.xxx.xxx.80");
        append_hf("P-hint: OFFLINE VOICEMAIL\r\n");
        append_branch();
        route(1);
}



onreply_route[1] {

	if (isflagset(6) && status=~"(180)|(183)|2[0-9][0-9]") {
		if (!search("^Content-Length:\ +0")) {
			force_rtp_proxy();
		};
	};

	if (nat_uac_test("1")) {
		fix_nated_contact();
	};
}


*********************************************
This message has been scanned for viruses and
dangerous content, and is believed to be clean.




More information about the sr-users mailing list