<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2900.2604" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV>Yes, you can use fix_nated_contact instead. It is not entirely 
RFC-compliant, but that's what you have in 0.8.14.</DIV>
<DIV>The has_totag() only tests to see if the INVITE has a To header, which 
means that it is in-dialog and thus is a re-INVITE.&nbsp; An INVITE will 
normally not have loose routing unless you have another SIP proxy forwarding an 
INVITE to you (in which case you should assume that the other proxy handles NAT 
and thus not trigger NAT-related code).&nbsp; You can safely remove the 
has_totag() if you use force_rtp_proxy("l") </DIV>
<DIV>g-)</DIV>
<DIV>&nbsp;</DIV>
<DIV>---- Original Message ----<BR>From: Vivienne Curran<BR>To: Greger V. Teigre 
; serusers@lists.iptel.org<BR>Sent: Tuesday, April 05, 2005 02:25 PM<BR>Subject: Re: 
[Serusers] Contact Header and SDP not rewritten<BR><BR>&gt; Greger,<BR>&gt; 
<BR>&gt; Since fix_nated_register does not exist with 0.8.14, will<BR>&gt; 
fix_nated_contact do instead? Also if I am leaving out the<BR>&gt; has_totag() 
at the start of the script, will this greatly effect its<BR>&gt; 
functionality?&nbsp;&nbsp; <BR>&gt; <BR>&gt; Thank you,<BR>&gt; Vivienne<BR>&gt; 
<BR>&gt; "Greger V. Teigre" &lt;greger@teigre.com&gt; wrote:<BR>&gt; 
Vivienne,<BR>&gt; <BR>&gt; This is the first INVITE going from SER to your 
public phone.&nbsp; I have<BR>&gt; prefixed my comments with *==&gt; <BR>&gt; 
<BR>&gt; U 84.203.148.146:5060 -&gt; 157.190.74.151:5060<BR>&gt;&nbsp; INVITE 
sip:2092@157.190.74.151 SIP/2.0..Via: SIP/2.0/UDP<BR>&gt; 
84.203.148.146;branch=z9hG4bK77bc.b54ca216.0.. <BR>&gt; Via: SIP/2.0/UDP<BR>&gt; 
172.16.3.31;rport=5060;received=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..<BR>&gt; 
From: "2093" &lt;sip:2093@84.203.148.146&gt;;tag=2dc376dcd4655094..<BR>&gt; To: 
&lt;sip:2092@84.203.148.146&gt;..<BR>&gt; Contact: 
&lt;sip:2093@84.203.148.14:5060&gt;..<BR>&gt; *==&gt; Correctly changed to the 
public address and port of 2093<BR>&gt; Supported: replaces..Call-ID: 
44e1ae63c476fbff@172.16.3.31..CSeq:<BR>&gt; 10327 INVITE.. <BR>&gt; User-Agent: 
Grandstream BT100 1.0.5.18..<BR>&gt; Max-Forwards: 69..Allow:<BR>&gt; 
INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE.. <BR>&gt; 
Content-Type: application/sdp..<BR>&gt; Content-Length: 443....v=0..<BR>&gt; 
o=2093 8000 0 IN IP4 172.16.3.31..<BR>&gt; s=SIP Call..<BR>&gt; c=IN IP4 
84.203.148.1484.203.148.146..<BR>&gt; *==&gt; Here it seems that first 
fix_nated_sdp("3") is called (replace<BR>&gt; private IP with public IP), then 
force_rtp_proxy() (replace with<BR>&gt; proxy IP).&nbsp; You must only call one 
of them (fix_nated_sdp("1") is ok)<BR>&gt; t=0 0..<BR>&gt; m=audio 35006 RTP/AVP 
0 8 4 18 2 15 99 9..<BR>&gt; a=sendrecv..<BR>&gt; a=rtpmap:0 
PCMU/8000/3..<BR>&gt; a=rtpmap:8 PCMA/8000/3..<BR>&gt; a=rtpmap:4 
G723/8000/3..a=rtpmap:18 G729/8000/3..<BR>&gt; a=rtpmap:2 
G726-32/8000/3..<BR>&gt; a=rtpmap:15 G728/8000/3..<BR>&gt; a=rtpmap:99 
iLBC/8000/3..<BR>&gt; a=fmtp:99 mode=20..<BR>&gt; a=rtpmap:9 
G722/8000/3..<BR>&gt; a=ptime:20..<BR>&gt; a=direction:active..<BR>&gt; *==&gt; 
Added by fix_nated_sdp("1") (and "3")<BR>&gt; a=oldmediaip:172.16.3.31..<BR>&gt; 
*==&gt; Added by fix_nated_sdp("3")<BR>&gt; a=nortpproxy:yes..<BR>&gt; *==&gt; 
Added by force_rtp_proxy()<BR>&gt; <BR>&gt; So, your call is proxied. Try using 
fix_nated_sdp("1"). It should<BR>&gt; make the INVITE correct.&nbsp; You have 
not posted the OK, so I don't know<BR>&gt; what is happening there.&nbsp; If you 
have followed the rtpproxy ONsip.org<BR>&gt; example in your onreply_route, you 
should be fine.&nbsp;&nbsp; <BR>&gt; <BR>&gt; Good luck!<BR>&gt; g-)<BR>&gt; 
<BR>&gt; ---- Original Message ----<BR>&gt; From: Vivienne Curran<BR>&gt; To: 
serusers@lists.iptel.org<BR>&gt; Sent: Tuesday, April 05, 2005 01:23 PM<BR>&gt; 
Subject: [Serusers] Contact Header and SDP not rewritten<BR>&gt; <BR>&gt;&gt; 
Hello,<BR>&gt;&gt; <BR>&gt;&gt; I have a problem whereby when a private client 
rings a public client<BR>&gt;&gt; only the public user can hear voice and when 
the public user rings<BR>&gt;&gt; the private user, no audio is transmitted. 
After looking at the<BR>&gt;&gt; messages I have have determined that the 
contact header and sdp part<BR>&gt;&gt; of the invite contains the private 
address of the natted client. This<BR>&gt;&gt; would lead me to believe that the 
registration process is incorrect.<BR>&gt;&gt; My problem is that I believe my 
script should handle the registration<BR>&gt;&gt; process correctly and I 
suspect that the following code is being<BR>&gt;&gt; skipped: I tried changing 
it to nat_uac_test("19") and<BR>&gt;&gt; fix_nated_sdp("3") but that didnt 
help.<BR>&gt;&gt;&gt; if (nat_uac_test("3")){<BR>&gt;&gt;&nbsp;&nbsp; if (method 
== "REGISTER" || ! search("^Record-Route:")){<BR>&gt;&gt;&nbsp;&nbsp;&nbsp; 
log("Log: Someone trying to register from private<BR>&gt;&gt;&nbsp;&nbsp;&nbsp; 
IP,rewriting\n"); fix_nated_contact(); #Rewrite contact 
with<BR>&gt;&gt;&nbsp;&nbsp;&nbsp; source IP if (method == 
"INVITE"){<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp; fix_nated_sdp("1"); #Add 
direction=active to SDP<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp; 
force_rtp_proxy();<BR>&gt;&gt;&nbsp;&nbsp;&nbsp; 
};<BR>&gt;&gt;&nbsp;&nbsp;&nbsp; force_rport(); # Add rport parameter to topmost 
Via<BR>&gt;&gt;&nbsp;&nbsp;&nbsp; setflag(6); # Mark as 
Nated<BR>&gt;&gt;&nbsp;&nbsp; };<BR>&gt;&gt;&nbsp; };<BR>&gt;&gt; <BR>&gt;&gt; I 
have included the log message below and my ser.cfg as an<BR>&gt;&gt; attachment. 
Please let me know where I could be going wrong.<BR>&gt;&gt; <BR>&gt;&gt; Thank 
you,<BR>&gt;&gt; Vivienne.<BR>&gt;&gt; <BR>&gt;&gt; 2093 (private) ringing 2092 
(public)<BR>&gt;&gt; <BR>&gt;&gt; U 84.203.148.14:5060 -&gt; 
84.203.148.146:5060<BR>&gt;&gt;&nbsp;&nbsp; ! INVITE sip:2092@84.203.148.146 
SIP/2.0..Via: SIP/2.0/UDP<BR>&gt;&gt; 172.16.3.31;branch<BR>&gt;&gt;&nbsp;&nbsp; 
=z9hG4bK1a48edc121f5bc1f..From: "2093"<BR>&gt;&gt; 
&lt;sip:2093@84.203.148.146&gt;;tag=2dc376<BR>&gt;&gt;&nbsp;&nbsp; 
dcd4655094..To: &lt;sip:2092@84.203.148.146&gt;..Contact:<BR>&gt;&gt; 
&lt;sip:2093@172.16.3.31&gt;.<BR>&gt;&gt;&nbsp;&nbsp; .Supported: 
replaces..Call-ID: 44e1ae63c476fbff@172.16.3.31..CSeq:<BR>&gt;&gt; 10327 
IN<BR>&gt;&gt;&nbsp;&nbsp; VITE..User-Agent: Grandstream BT100 
1.0.5.18..Max-Forwards:<BR>&gt;&gt; 70..Allow: INVI<BR>&gt;&gt; <BR>&gt;&gt; 
TE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..Content-Type:<BR>&gt;&gt; 
applic<BR>&gt;&gt;&nbsp;&nbsp; ation/sdp..Content-Length: 362....v=0..o=2093 
8000 0 IN IP4<BR>&gt;&gt; 172.16.3.31..s=<BR>&gt;&gt;&nbsp;&nbsp; SIP Call..c=IN 
IP4 172.16.3.31..t=0 0..m=audio 5004 RTP/AVP 0 8 4<BR>&gt;&gt; 18 2 15 
9<BR>&gt;&gt;&nbsp;&nbsp; 9 9..a=sendrecv..a=rtpmap:0 
PCMU/8000/3..a=rtpmap:8<BR>&gt;&gt; 
PCMA/8000/3..a=rtpmap:4<BR>&gt;&gt;&nbsp;&nbsp;&nbsp; G723/8000/3..a=rt! pmap:18 
G729/8000/3..a=rtpmap:2<BR>&gt;&gt; 
G726-32/8000/3..a=rtpmap:<BR>&gt;&gt;&nbsp;&nbsp; 15 G728/8000/3..a=rtpmap:99 
iLBC/8000/3..a=fmtp:99<BR>&gt;&gt; mode=20..a=rtpmap:9 
G722<BR>&gt;&gt;&nbsp;&nbsp; /8000/3..a=ptime:20..<BR>&gt;&gt; <BR>&gt;&gt; U 
84.203.148.146:5060 -&gt; 84.203.148.14:5060<BR>&gt;&gt;&nbsp;&nbsp; SIP/2.0 100 
trying -- your call is important to us..Via:<BR>&gt;&gt; SIP/2.0/UDP 
172.16<BR>&gt;&gt; <BR>&gt;&gt; 
.3.31;branch=z9hG4bK1a48edc121f5bc1f;rport=5060;received=84.203.148.14..Fro<BR>&gt;&gt;&nbsp;&nbsp; 
m: "2093" &lt;sip:2093@84.203.148.146&gt;;tag=2dc376dcd4655094..To:<BR>&gt;&gt; 
&lt;sip:2092@84.<BR>&gt;&gt;&nbsp;&nbsp; 203.148.146&gt;..Call-ID: 
44e1ae63c476fbff@172.16.3.31..CSeq: 10327<BR>&gt;&gt; 
INVITE..Se<BR>&gt;&gt;&nbsp;&nbsp; rver: Sip EXpress router (0.8.14 
(i386/linux))..Content-Length:<BR>&gt;&gt; 
0..Warning:<BR>&gt;&gt;&nbsp;&nbsp;&nbsp; 392 84.203.148.146:5060 "Noisy 
feedback tells:&nbsp; pid=4732<BR>&gt;&gt; 
req_src_ip=84.203<BR>&gt;&gt;&nbsp;&nbsp; .148.14 req_src_port=5060 
in_uri=sip:2092@84.203.148.146<BR>&gt;&gt; 
out_uri=sip:2092@1<BR>&gt;&gt;&nbsp;&nbsp; 57.190.74.151 
via_cnt==1"....<BR>&gt;&gt; <BR>&gt;&gt; U 84.203.148.146:5060 -&gt; 
157.190.74.151:5060<BR>&gt;&gt;&nbsp;&nbsp; INVITE sip:2092@157.190.74.151 
SIP/2.0..Via: SIP/2.0/UDP<BR>&gt;&gt; 84.203.148.146;bra<BR>&gt;&gt;&nbsp;&nbsp; 
nch=z9hG4bK77bc.b54ca216.0..Via: SIP/2.0/UDP<BR>&gt;&gt; 
172.16.3.31;rport=5060;receive<BR>&gt;&gt;&nbsp;&nbsp; 
d=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..From: "2093"<BR>&gt;&gt; 
&lt;sip:2093@84.2<BR>&gt;&gt;&nbsp;&nbsp; 
03.148.146&gt;;tag=2dc376dcd4655094..To:<BR>&gt;&gt; 
&lt;sip:2092@84.203.148.146&gt;..Contact: &lt;<BR>&gt;&gt;&nbsp;&nbsp; 
sip:2093@84.203.148.14:5060&gt;..Supported: replaces..Call-ID:<BR>&gt;&gt; 
44e1ae63c476fbf<BR>&gt;&gt;&nbsp;&nbsp; f@172.16.3.31..CSeq: 10327 
INVITE..User-Agent: Grandstream BT100<BR>&gt;&gt; 
1.0.5.18..<BR>&gt;&gt;&nbsp;&nbsp; Max-Forwards: 69..Allow:<BR>&gt;&gt; 
INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SU<BR>&gt;&gt;&nbsp;&nbsp; 
BSCRIBE..Content-Type: application/sdp..Content-Length:<BR>&gt;&gt; 
443....v=0..o=2093<BR>&gt;&gt;&nbsp;&nbsp; 8000 0 IN IP4 172.16.3.31..s=SIP 
Call..c=IN IP4<BR>&gt;&gt; 84.203.148.1484.203.148.146<BR>&gt;&gt;&nbsp;&nbsp; 
..t=0 0..m=audio 35006 RTP/AVP 0 8 4 18 2 15 99<BR>&gt;&gt; 
9..a=sendrecv..a=rtpmap:0 P<BR>&gt;&gt;&nbsp;&nbsp; CMU/8000/3..a=rtpmap:8 
PCMA/8000/3..a=rtpmap:4<BR>&gt;&gt; G723/8000/3..a=rtpmap:18 
G72<BR>&gt;&gt;&nbsp;&nbsp; 9/8000/3..a=rtpmap:2 
G726-32/8000/3..a=rtpmap:15<BR>&gt;&gt; G728/8000/3..a=rtpmap:99 
i<BR>&gt;&gt;&nbsp;&nbsp; LBC/8000/3..a=fmtp:99 mode=20..a=rtpmap:9<BR>&gt;&gt; 
G722/8000/3..a=ptime:20..a=direct<BR>&gt;&gt;&nbsp;&nbsp; 
ion:active..a=oldmediaip:172.16.3.31..a=nortpproxy:yes..<BR>&gt;&gt; 
<BR>&gt;&gt; U 84.203.148.146:5060 -&gt; 
157.190.74.150:5060<BR>&gt;&gt;&nbsp;&nbsp; INVITE sip:2092@157.190.74.150 
SIP/2.0..Via: SIP/2.0/UDP<BR>&gt;&gt; 84.203.148.146;bra<BR>&gt;&gt;&nbsp;&nbsp; 
nch=z9hG4bK77bc.b54ca216.1..Via: SIP/2.0/UDP<BR>&gt;&gt; 
172.16.3.31;rport=5060;receive<BR>&gt;&gt;&nbsp;&nbsp; 
d=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..From: "2093"<BR>&gt;&gt; 
&lt;sip:2093@84.2<BR>&gt;&gt;&nbsp;&nbsp; 
03.148.146&gt;;tag=2dc376dcd4655094..To:<BR>&gt;&gt; 
&lt;sip:2092@84.203.148.146&gt;..Contact: &lt;<BR>&gt;&gt;&nbsp;&nbsp; 
sip:2093@84.203.148.14:5060&gt;..Supported: replaces..Call-ID:<BR>&gt;&gt; 
44e1ae63c476fbf<BR>&gt;&gt;&nbsp;&nbsp; f@172.16.3.31..CSeq: 10327 
INVITE..User-Agent: Grandstream BT100<BR>&gt;&gt; 
1.0.5.18..<BR>&gt;&gt;&nbsp;&nbsp; Max-Forwards: 69..Allow:<BR>&gt;&gt; 
INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SU<BR>&gt;&gt;&nbsp;&nbsp; 
BSCRIBE..Content-Type: application/sdp..Content-Length:<BR>&gt;&gt; 
443....v=0..o=2093<BR>&gt;&gt;&nbsp;&nbsp; 8000 0 IN IP4 172.16.3.31..s=SIP 
Call..c=IN IP4<BR>&gt;&gt; 84.203.148.1484.203.148.146<BR>&gt;&gt;&nbsp;&nbsp; 
..t=0 0..m=audio 35006 RTP/AVP 0 8 4 18 2 15 99<BR>&gt;&gt; 
9..a=sendrecv..a=rtpmap:0 P<BR>&gt;&gt;&nbsp;&nbsp; CMU/8000/3..a=rtpmap:8 
PCMA/8000/3..a=rtpmap:4<BR>&gt;&gt; G723/8000/3..a=rtpmap:18 
G72<BR>&gt;&gt;&nbsp;&nbsp; 9/8000/3..a=rtpmap:2 
G726-32/8000/3..a=rtpmap:15<BR>&gt;&gt; G728/8000/3..a=rtpmap:99 
i<BR>&gt;&gt;&nbsp;&nbsp; LBC/8000/3..a=fmtp:99 mode=20..a=rtpmap:9<BR>&gt;&gt; 
G722/8000/3..a=ptime:20..a=direct<BR>&gt;&gt;&nbsp;&nbsp; 
ion:active..a=oldmediaip:172.16.3.31..a=nortpproxy:yes..<BR>&gt;&gt; 
<BR>&gt;&gt; U 157.190.74.151:5060 -&gt; 
84.203.148.146:5060<BR>&gt;&gt;&nbsp;&nbsp; SIP/2.0 100 Trying..Via: 
SIP/2.0/UDP<BR>&gt;&gt; 
84.203.148.146;branch=z9hG4bK77bc.b54c<BR>&gt;&gt;&nbsp;&nbsp; a216.0..Via: 
SIP/2.0/UDP<BR>&gt;&gt; 
172.16.3.31;rport=5060;received=84.203.148.14;bran<BR>&gt;&gt;&nbsp;&nbsp; 
ch=z9hG4bK1a48edc121f5bc1f..From: "2093"<BR>&gt;&gt; 
&lt;sip:2093@84.203.148.146&gt;;tag=2dc3<BR>&gt;&gt;&nbsp;&nbsp; 
76dcd4655094..To: &lt;sip:2092@84.203.148.146&gt;..Call-ID:<BR>&gt;&gt; 
44e1ae63c476fbff@172.<BR>&gt;&gt;&nbsp;&nbsp; 16.3.31..CSeq: 10327 
INVITE..User-Agent: Grandstream BT100<BR>&gt;&gt; 
1.0.5.18..Conten<BR>&gt;&gt;&nbsp;&nbsp; t-Length: 0....<BR>&gt;&gt; 
<BR>&gt;&gt; U 157.190.74.151:5060 -&gt; 
84.203.148.146:5060<BR>&gt;&gt;&nbsp;&nbsp; SIP/2.0 180 Ringing! ..Via: 
SIP/2.0/UDP<BR>&gt;&gt; 
84.203.148.146;branch=z9hG4bK77bc.b54<BR>&gt;&gt;&nbsp;&nbsp; ca216.0..Via: 
SIP/2.0/UDP<BR>&gt;&gt; 
172.16.3.31;rport=5060;received=84.203.148.14;bra<BR>&gt;&gt;&nbsp;&nbsp; 
nch=z9hG4bK1a48edc121f5bc1f..From: "2093"<BR>&gt;&gt; 
&lt;sip:2093@84.203.148.146&gt;;tag=2dc<BR>&gt;&gt;&nbsp;&nbsp; 
376dcd4655094..To:<BR>&gt;&gt; 
&lt;sip:2092@84.203.148.146&gt;;tag=10bdf2044401a257..Call-ID:<BR>&gt;&gt;&nbsp;&nbsp;&nbsp; 
44e1ae63c476fbff@172.16.3.31..CSeq: 10327 INVITE..User-Agent:<BR>&gt;&gt; 
Grandstream<BR>&gt;&gt;&nbsp;&nbsp; BT100 1.0.5.18..Content-Length: 
0....<BR>&gt;&gt; <BR>&gt;&gt; Send instant messages to your online 
friends<BR>&gt;&gt; http://uk.messenger.yahoo.com<BR>&gt;&gt; <BR>&gt;&gt; 
<BR>&gt;&gt; <BR>&gt;&gt; #<BR>&gt;&gt; # $Id: ser.cfg,v 1.21.4.1 2003/11/10 
15:35:15 andrei Exp $<BR>&gt;&gt; #<BR>&gt;&gt; # simple quick-start config 
script<BR>&gt;&gt; #<BR>&gt;&gt; <BR>&gt;&gt; # ----------- global configuration 
parameters<BR>&gt;&gt; ------------------------ <BR>&gt;&gt; <BR>&gt;&gt; 
#debug=3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # deb! ug level (cmd 
line: -dddddddddd)<BR>&gt;&gt; #fork=yes<BR>&gt;&gt; #log_stderror=no # (cmd 
line: -E)<BR>&gt;&gt; <BR>&gt;&gt; /* Uncomment these lines to enter debugging 
mode<BR>&gt;&gt; debug=7<BR>&gt;&gt; fork=no<BR>&gt;&gt; 
log_stderror=yes<BR>&gt;&gt; */<BR>&gt;&gt; <BR>&gt;&gt; check_via=no # (cmd. 
line: -v)<BR>&gt;&gt; 
dns=no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # (cmd. line: 
-r)<BR>&gt;&gt; rev_dns=no&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # (cmd. line: 
-R)<BR>&gt;&gt; #port=5060<BR>&gt;&gt; #children=4<BR>&gt;&gt; 
fifo="/tmp/ser_fifo"<BR>&gt;&gt; <BR>&gt;&gt; 
alias="157.190.74.152:5060"<BR>&gt;&gt; <BR>&gt;&gt; # ------------------ module 
loading<BR>&gt;&gt; ---------------------------------- <BR>&gt;&gt; <BR>&gt;&gt; 
# Uncomment this if you want to use SQL database<BR>&gt;&gt; loadmodule 
"/usr/lib/ser/modules/mysql.so"<BR>&gt;&gt; <BR>&gt;&gt; loadmodule 
"/usr/lib/ser/modules/sl.so"<BR>&gt;&gt; loadmodule 
"/usr/lib/ser/modules/tm.so"<BR>&gt;&gt; loadmodule 
"/usr/lib/ser/modules/rr.so"<BR>&gt;&gt; loadmodule 
"/usr/lib/ser/modules/maxfwd.so"<BR>&gt;&gt; loadmodule 
"/usr/lib/ser/modules/usrloc.so"<BR>&gt;&gt; loadmodule 
"/usr/lib/ser/modules/registrar.so"<BR>&gt;&gt; loadmodule 
"/usr/lib/ser/modules/textops.so"<BR>&gt;&gt; loadmodule 
"/usr/lib/ser/modules/nathelper.so"<BR>&gt;&gt; #loadmodule 
"/usr/lib/ser/modules/pa.so"<BR>&gt;&gt; loadmodule 
"/usr/lib/ser/modules/cpl-c.so"<BR>&gt;&gt; <BR>&gt;&gt; # Uncomment this if you 
want digest authentication<BR>&gt;&gt; # mysql.so must be loaded !<BR>&gt;&gt; 
loadmodule "/usr/lib/ser/modules/auth.so"<BR>&gt;&gt; loadmodule 
"/usr/lib/ser/modules/auth_db.so"<BR>&gt;&gt; <BR>&gt;&gt; # ----------------- 
setting module-specific parameters<BR>&gt;&gt; --------------- <BR>&gt;&gt; 
<BR>&gt;&gt; # -- usrloc params --<BR>&gt;&gt; <BR>&gt;&gt; #modparam("usrloc", 
"db_mode",&nbsp;&nbsp; 0)<BR>&gt;&gt; <BR>&gt;&gt; # Uncomment this if you want 
to use SQL database<BR>&gt;&gt; # for persistent storage and comment the 
previous line<BR>&gt;&gt; modparam("usrloc", "db_mode", 2)<BR>&gt;&gt; 
<BR>&gt;&gt; # -- auth params --<BR>&gt;&gt; # Uncomment if you are using auth 
module<BR>&gt;&gt; #<BR>&gt;&gt; modparam("auth_db", "calculate_ha1", 
yes)<BR>&gt;&gt; #<BR>&gt;&gt; # If you set "calculate_ha1" parameter to yes 
(which true in this<BR>&gt;&gt; config),<BR>&gt;&gt; # uncomment also the 
following parameter)<BR>&gt;&gt; #<BR>&gt;&gt; modparam("auth_db", 
"password_column", "password")<BR>&gt;&gt; <BR>&gt;&gt; # -- rr params 
--<BR>&gt;&gt; # add value to ;lr param to make some broken UAs 
happy<BR>&gt;&gt; #NB Had to up this value from 1 to 11 because reinvites 
were<BR>&gt;&gt; bombarding called phone<BR>&gt;&gt; modparam("rr", 
"enable_full_lr", 11)<BR>&gt;&gt; <BR>&gt;&gt; #!! Nathelper<BR>&gt;&gt; 
modparam("registrar", "nat_flag", 60)<BR>&gt;&gt; modparam("nathelper", 
"natping_interval", 30) #Ping interval 30 s<BR>&gt;&gt; modparam("nathelper", 
"ping_nated_only", 1)&nbsp;&nbsp; #Ping only clients<BR>&gt;&gt; behind 
NAT<BR>&gt;&gt; modparam("nathelper", "rtpproxy_sock", 
"/var/run/rtpproxy.sock")<BR>&gt;&gt; <BR>&gt;&gt; modparam("tm", 
"fr_inv_timer", 20)<BR>&gt;&gt; <BR>&gt;&gt; #modparam("pa", "default_expires", 
3600)<BR>&gt;&gt; <BR>&gt;&gt; modparam("usrloc", "db_url", 
"sql://root:1alfa156@localhost/ser")<BR>&gt;&gt; <BR>&gt;&gt; #modparam("cpl-c", 
"cpl_db", "mysql://root:1alfa156@localhost/ser")<BR>&gt;&gt; #modparam("cpl-c", 
"cpl_table", "cpl")<BR>&gt;&gt; #modparam("cpl-c", "cpl_dtd_file",<BR>&gt;&gt; 
"/work/sip_router/modules/cpl-ccpl-06.dtd")<BR>&gt;&gt; <BR>&gt;&gt; # 
-------------------------&nbsp; request routing logic<BR>&gt;&gt; 
------------------- <BR>&gt;&gt; <BR>&gt;&gt; # main routing logic<BR>&gt;&gt; 
<BR>&gt;&gt; route{<BR>&gt;&gt; <BR>&gt;&gt; # initial sanity checks -- messages 
with<BR>&gt;&gt; # max_forwards==0, or excessively long requests<BR>&gt;&gt; if 
(!mf_process_maxfwd_header("10")) {<BR>&gt;&gt; sl_send_reply("483","Too Many 
Hops");<BR>&gt;&gt; break;<BR>&gt;&gt; };<BR>&gt;&gt; if ( msg:len &gt; max_len 
) {<BR>&gt;&gt; sl_send_reply("513", "Message too big");<BR>&gt;&gt; 
break;<BR>&gt;&gt; };<BR>&gt;&gt; <BR>&gt;&gt; 
#######################################################################################<BR>&gt;&gt; 
if (nat_uac_test("3")){<BR>&gt;&gt; if (method == "REGISTER" || ! 
search("^Record-Route:")){<BR>&gt;&gt; log("Log: So! meone trying to register 
from private IP,rewriting\n");<BR>&gt;&gt; fix_nated_contact(); #Rewrite contact 
with source IP<BR>&gt;&gt; if (method == "INVITE"){<BR>&gt;&gt; 
fix_nated_sdp("1"); #Add direction=active to SDP<BR>&gt;&gt; 
force_rtp_proxy();<BR>&gt;&gt; };<BR>&gt;&gt; force_rport(); # Add rport 
parameter to topmost Via<BR>&gt;&gt; setflag(6); # Mark as Nated<BR>&gt;&gt; 
};<BR>&gt;&gt; };<BR>&gt;&gt; 
########################################################################################<BR>&gt;&gt; 
<BR>&gt;&gt; # we record-route all messages -- to make sure that<BR>&gt;&gt; # 
subsequent messages will go through our proxy; that's<BR>&gt;&gt; # particularly 
good if upstream and downstream entities<BR>&gt;&gt; # use different transport 
protocol<BR>&gt;&gt; <BR>&gt;&gt; if (method =="REGISTER") 
record_route();<BR>&gt;&gt; <BR>&gt;&gt; # loose-route processing<BR>&gt;&gt; if 
(loose_route()) {<BR>&gt;&gt; #commented 11/02/05<BR>&gt;&gt; 
#t_relay();<BR>&gt;&gt; route(1);<BR>&gt;&gt; break;<BR>&gt;&gt; };<BR>&gt;&gt; 
<BR>&gt;&gt; # if the request is for other domain use UsrLoc<BR>&gt;&gt; ! # (in 
case, it does not work, use the following command<BR>&gt;&gt; # with proper 
names and addresses in it)<BR>&gt;&gt; if (uri==myself) {<BR>&gt;&gt; 
<BR>&gt;&gt; log(1,"into loop");<BR>&gt;&gt; if (method=="REGISTER") 
{<BR>&gt;&gt; <BR>&gt;&gt; # Uncomment this if you want to use digest 
authentication<BR>&gt;&gt; # if (!www_authorize("157.190.74.152", "subscriber")) 
{<BR>&gt;&gt; # www_challenge("157.190.74.152", "0");<BR>&gt;&gt; # 
break;<BR>&gt;&gt; # };<BR>&gt;&gt; <BR>&gt;&gt; 
#cpl_process_register();<BR>&gt;&gt; <BR>&gt;&gt; save("location");<BR>&gt;&gt; 
break;<BR>&gt;&gt; };<BR>&gt;&gt; <BR>&gt;&gt; # if 
(method=="SUBSCRIBE")<BR>&gt;&gt; # {<BR>&gt;&gt; # log(1, 
"Subscribe\n");<BR>&gt;&gt; # if(t_newtran())<BR>&gt;&gt; # {<BR>&gt;&gt; # 
log(1, "Registrar\n");<BR>&gt;&gt; # 
handle_subscription("registrar");<BR>&gt;&gt; # };<BR>&gt;&gt; # 
break;<BR>&gt;&gt; # };<BR>&gt;&gt; <BR>&gt;&gt; lookup("aliases");<BR>&gt;&gt; 
if (!uri==myself) {<BR>&gt;&gt; append_hf("P-hint: outbound 
alias\r\n");<BR>&gt;&gt; route(1);<BR>&gt;&gt; break;<BR>&gt;&gt; };<BR>&gt;&gt; 
<BR>&gt;&gt; if (method=="INVITE"){<BR>&gt;&gt; <BR>&gt;&gt; log(1,"in ! invite 
loop");<BR>&gt;&gt; #break; #no 100 trying<BR>&gt;&gt; #if 
(!cpl_run_script("incoming","is_stateless"))<BR>&gt;&gt; #{<BR>&gt;&gt; # 
#script execution failed<BR>&gt;&gt; # t_reply("500", "CPL script execution 
failed");<BR>&gt;&gt; #};<BR>&gt;&gt; <BR>&gt;&gt; 
t_on_failure("1");<BR>&gt;&gt; };<BR>&gt;&gt; <BR>&gt;&gt; # native SIP 
destinations are handled using our USRLOC DB<BR>&gt;&gt; if 
(!lookup("location")) {<BR>&gt;&gt; #sl_send_reply("404", "Not 
Found");<BR>&gt;&gt; route(2);<BR>&gt;&gt; break;<BR>&gt;&gt; };<BR>&gt;&gt; 
};<BR>&gt;&gt; <BR>&gt;&gt; # forward to current uri now; use stateful 
forwarding; that<BR>&gt;&gt; # works reliably even if we forward from TCP to 
UDP<BR>&gt;&gt; #commented 11/02/05#######################<BR>&gt;&gt; if 
(!t_relay()) {<BR>&gt;&gt; sl_reply_error();<BR>&gt;&gt; };<BR>&gt;&gt; 
<BR>&gt;&gt; #route(1);<BR>&gt;&gt; }<BR>&gt;&gt; <BR>&gt;&gt; 
######################################entered<BR>&gt;&gt; 
11/02/05############################################################<BR>&gt;&gt; 
route[1]<BR>&gt;&gt; {<BR>&gt;&gt; #!!Nathelper<BR>&gt;&gt; 
if(uri=~"[@:](192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)" 
&amp;&amp;<BR>&gt;&gt; !search("^Route:")){<BR>&gt;&gt; sl_send_reply("479", "We 
don't forward to private IP addresses");<BR>&gt;&gt; break;<BR>&gt;&gt; 
};<BR>&gt;&gt; <BR>&gt;&gt; if (isflagset(6)){<BR>&gt;&gt; 
force_rtp_proxy();<BR>&gt;&gt; }<BR>&gt;&gt; <BR>&gt;&gt; 
t_on_reply("1");<BR>&gt;&gt; <BR>&gt;&gt; if(!t_relay()){<BR>&gt;&gt; 
sl_reply_error();<BR>&gt;&gt; break;<BR>&gt;&gt; };<BR>&gt;&gt; <BR>&gt;&gt; 
}<BR>&gt;&gt; <BR>&gt;&gt; 
######################################entered<BR>&gt;&gt; 
11/02/05############################################################<BR>&gt;&gt; 
#!! Nathelper<BR>&gt;&gt; onreply_route[1] {<BR>&gt;&gt; if(isflagset(6) 
&amp;&amp; status =~ "(183)|2[0-9][0-9]"){<BR>&gt;&gt; 
fix_nated_contact();<BR>&gt;&gt; force_rtp_proxy();<BR>&gt;&gt; }else if 
(nat_uac_test("1")){<BR>&gt;&gt; fix_nated_contact();<BR>&gt;&gt; };<BR>&gt;&gt; 
}<BR>&gt;&gt; 
#################################################################################################################<BR>&gt;&gt; 
<BR>&gt;&gt; # ------------- handling of unavai! lable user 
------------------<BR>&gt;&gt; route[2] {<BR>&gt;&gt; 
<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # non-Voip -- just 
send "off-line"<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
(!(method == "INVITE" || method == "ACK" || method ==<BR>&gt;&gt; "CANCEL")) 
{<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
sl_send_reply("404", "Not 
Found");<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
break;<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
};<BR>&gt;&gt; <BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 
forward to voicemail 
now<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
rewritehostport("157.190.74.152:5062");<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
t_relay_to_udp("157.190.74.152", "5062");<BR>&gt;&gt; }<BR>&gt;&gt; <BR>&gt;&gt; 
# if forwarding downstream did not succeed, try voicemail running<BR>&gt;&gt; # 
at 172.16.2.120:5062<BR>&gt;&gt; <BR>&gt;&gt; failure_route[1] 
{<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
revert_uri();<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
rewritehostport("157.190.74.152:5062");<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
append_branch();<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
t_relay_to_udp("157.190.74.152", "5062");<BR>&gt;&gt; }<BR>&gt;&gt; <BR>&gt;&gt; 
<BR>&gt;&gt; <BR>&gt;&gt; <BR>&gt;&gt; <BR>&gt;&gt; 
_______________________________________________<BR>&gt;&gt; Serusers mailing 
list<BR>&gt;&gt; serusers@lists.iptel.org<BR>&gt;&gt; 
http://lists.iptel.org/mailman/listinfo/serusers<BR>&gt; Send instant messages to 
your online friends<BR>&gt; http://uk.messenger.yahoo.com </DIV></BODY></HTML>