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