Greger,
 
Since fix_nated_register does not exist with 0.8.14, will fix_nated_contact do instead? Also if I am leaving out the has_totag() at the start of the script, will this greatly effect its functionality?
 
Thank you,
Vivienne

"Greger V. Teigre" <greger@teigre.com> wrote:
Vivienne,
 
This is the first INVITE going from SER to your public phone.  I have prefixed my comments with *==>
 
U 84.203.148.146:5060 -> 157.190.74.151:5060
 INVITE sip:2092@157.190.74.151 SIP/2.0..Via: SIP/2.0/UDP 84.203.148.146;branch=z9hG4bK77bc.b54ca216.0..
Via: SIP/2.0/UDP 172.16.3.31;rport=5060;received=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..
From: "2093" <sip:2093@84.203.148.146>;tag=2dc376dcd4655094..
To: <sip:2092@84.203.148.146>..
Contact: <sip:2093@84.203.148.14:5060>..
*==> Correctly changed to the public address and port of 2093
Supported: replaces..Call-ID: 44e1ae63c476fbff@172.16.3.31..CSeq: 10327 INVITE..
User-Agent: Grandstream BT100 1.0.5.18..
Max-Forwards: 69..Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..
Content-Type: application/sdp..
Content-Length: 443....v=0..
o=2093 8000 0 IN IP4 172.16.3.31..
s=SIP Call..
c=IN IP4 84.203.148.1484.203.148.146..
*==> Here it seems that first fix_nated_sdp("3") is called (replace private IP with public IP), then force_rtp_proxy() (replace with proxy IP).  You must only call one of them (fix_nated_sdp("1") is ok)
t=0 0..
m=audio 35006 RTP/AVP 0 8 4 18 2 15 99 9..
a=sendrecv..
a=rtpmap:0 PCMU/8000/3..
a=rtpmap:8 PCMA/8000/3..
a=rtpmap:4 G723/8000/3..a=rtpmap:18 G729/8000/3..
a=rtpmap:2 G726-32/8000/3..
a=rtpmap:15 G728/8000/3..
a=rtpmap:99 iLBC/8000/3..
a=fmtp:99 mode=20..
a=rtpmap:9 G722/8000/3..
a=ptime:20..
a=direction:active..
*==> Added by fix_nated_sdp("1") (and "3")
a=oldmediaip:172.16.3.31..
*==> Added by fix_nated_sdp("3")
a=nortpproxy:yes..
*==> Added by force_rtp_proxy()
 
So, your call is proxied. Try using fix_nated_sdp("1"). It should make the INVITE correct.  You have not posted the OK, so I don't know what is happening there.  If you have followed the rtpproxy ONsip.org example in your onreply_route, you should be fine.
 
Good luck!
g-)
 
---- Original Message ----
From: Vivienne Curran
To: serusers@lists.iptel.org
Sent: Tuesday, April 05, 2005 01:23 PM
Subject: [Serusers] Contact Header and SDP not rewritten

> Hello,
>
> I have a problem whereby when a private client rings a public client
> only the public user can hear voice and when the public user rings
> the private user, no audio is transmitted. After looking at the
> messages I have have determined that the contact header and sdp part
> of the invite contains the private address of the natted client. This
> would lead me to believe that the registration process is incorrect.
> My problem is that I believe my script should handle the registration
> process correctly and I suspect that the following code is being
> skipped: I tried changing it to nat_uac_test("19") and
> fix_nated_sdp("3") but that didnt help.        
>
> if (nat_uac_test("3")){
>   if (method == "REGISTER" || ! search("^Record-Route:")){
>    log("Log: Someone trying to register from private IP,rewriting\n");
>    fix_nated_contact(); #Rewrite contact with source IP
>    if (method == "INVITE"){
>     fix_nated_sdp("1"); #Add direction=active to SDP
>     force_rtp_proxy();
>    };
>    force_rport(); # Add rport parameter to topmost Via
>    setflag(6); # Mark as Nated
>   };
>  };
>
> I have included the log message below and my ser.cfg as an
> attachment. Please let me know where I could be going wrong.
>
> Thank you,
> Vivienne.
>
> 2093 (private) ringing 2092 (public)
>
> U 84.203.148.14:5060 -> 84.203.148.146:5060
>   INVITE sip:2092@84.203.148.146 SIP/2.0..Via: SIP/2.0/UDP
> 172.16.3.31;branch
>   =z9hG4bK1a48edc121f5bc1f..From: "2093"
> <sip:2093@84.203.148.146>;tag=2dc376
>   dcd4655094..To: <sip:2092@84.203.148.146>..Contact:
> <sip:2093@172.16.3.31>.
>   .Supported: replaces..Call-ID: 44e1ae63c476fbff@172.16.3.31..CSeq:
> 10327 IN
>   VITE..User-Agent: Grandstream BT100 1.0.5.18..Max-Forwards:
> 70..Allow: INVI

> TE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE..Content-Type:
> applic 
>   ation/sdp..Content-Length: 362....v=0..o=2093 8000 0 IN IP4
> 172.16.3.31..s=
>   SIP Call..c=IN IP4 172.16.3.31..t=0 0..m=audio 5004 RTP/AVP 0 8 4
> 18 2 15 9
>   9 9..a=sendrecv..a=rtpmap:0 PCMU/8000/3..a=rtpmap:8
> PCMA/8000/3..a=rtpmap:4
>    G723/8000/3..a=rtpmap:18 G729/8000/3..a=rtpmap:2
> G726-32/8000/3..a=rtpmap:
>   15 G728/8000/3..a=rtpmap:99 iLBC/8000/3..a=fmtp:99
> mode=20..a=rtpmap:9 G722
>   /8000/3..a=ptime:20..
>
> U 84.203.148.146:5060 -> 84.203.148.14:5060
>   SIP/2.0 100 trying -- your call is important to us..Via:
> SIP/2.0/UDP 172.16

> .3.31;branch=z9hG4bK1a48edc121f5bc1f;rport=5060;received=84.203.148.14..Fro
>   m: "2093" <sip:2093@84.203.148.146>;tag=2dc376dcd4655094..To:
> <sip:2092@84.
>   203.148.146>..Call-ID: 44e1ae63c476fbff@172.16.3.31..CSeq: 10327
> INVITE..Se
>   rver: Sip EXpress router (0.8.14 (i386/linux))..Content-Length:
> 0..Warning:
>    392 84.203.148.146:5060 "Noisy feedback tells:  pid=4732
> req_src_ip=84.203
>   .148.14 req_src_port=5060 in_uri=sip:2092@84.203.148.146
> out_uri=sip:2092@1
>   57.190.74.151 via_cnt==1"....
>
> U 84.203.148.146:5060 -> 157.190.74.151:5060
>   INVITE sip:2092@157.190.74.151 SIP/2.0..Via: SIP/2.0/UDP
> 84.203.148.146;bra
>   nch=z9hG4bK77bc.b54ca216.0..Via: SIP/2.0/UDP
> 172.16.3.31;rport=5060;receive
>   d=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..From: "2093"
> <sip:2093@84.2
>   03.148.146>;tag=2dc376dcd4655094..To:
> <sip:2092@84.203.148.146>..Contact: <
>   sip:2093@84.203.148.14:5060>..Supported: replaces..Call-ID:
> 44e1ae63c476fbf
>   f@172.16.3.31..CSeq: 10327 INVITE..User-Agent: Grandstream BT100
> 1.0.5.18..
>   Max-Forwards: 69..Allow:
> INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SU
>   BSCRIBE..Content-Type: application/sdp..Content-Length:
> 443....v=0..o=2093
>   8000 0 IN IP4 172.16.3.31..s=SIP Call..c=IN IP4
> 84.203.148.1484.203.148.146
>   ..t=0 0..m=audio 35006 RTP/AVP 0 8 4 18 2 15 99
> 9..a=sendrecv..a=rtpmap:0 P
>   CMU/8000/3..a=rtpmap:8 PCMA/8000/3..a=rtpmap:4
> G723/8000/3..a=rtpmap:18 G72
>   9/8000/3..a=rtpmap:2 G726-32/8000/3..a=rtpmap:15
> G728/8000/3..a=rtpmap:99 i
>   LBC/8000/3..a=fmtp:99 mode=20..a=rtpmap:9
> G722/8000/3..a=ptime:20..a=direct
>   ion:active..a=oldmediaip:172.16.3.31..a=nortpproxy:yes..
>
> U 84.203.148.146:5060 -> 157.190.74.150:5060
>   INVITE sip:2092@157.190.74.150 SIP/2.0..Via: SIP/2.0/UDP
> 84.203.148.146;bra
>   nch=z9hG4bK77bc.b54ca216.1..Via: SIP/2.0/UDP
> 172.16.3.31;rport=5060;receive
>   d=84.203.148.14;branch=z9hG4bK1a48edc121f5bc1f..From: "2093"
> <sip:2093@84.2
>   03.148.146>;tag=2dc376dcd4655094..To:
> <sip:2092@84.203.148.146>..Contact: <
>   sip:2093@84.203.148.14:5060>..Supported: replaces..Call-ID:
> 44e1ae63c476fbf
>   f@172.16.3.31..CSeq: 10327 INVITE..User-Agent: Grandstream BT100
> 1.0.5.18..
>   Max-Forwards: 69..Allow:
> INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SU
>   BSCRIBE..Content-Type: application/sdp..Content-Length:
> 443....v=0..o=2093
>   8000 0 IN IP4 172.16.3.31..s=SIP Call..c=IN IP4
> 84.203.148.1484.203.148.146
>   ..t=0 0..m=audio 35006 RTP/AVP 0 8 4 18 2 15 99
> 9..a=sendrecv..a=rtpmap:0 P
>   CMU/8000/3..a=rtpmap:8 PCMA/8000/3..a=rtpmap:4
> G723/8000/3..a=rtpmap:18 G72
>   9/8000/3..a=rtpmap:2 G726-32/8000/3..a=rtpmap:15
> G728/8000/3..a=rtpmap:99 i
>   LBC/8000/3..a=fmtp:99 mode=20..a=rtpmap:9
> G722/8000/3..a=ptime:20..a=direct
>   ion:active..a=oldmediaip:172.16.3.31..a=nortpproxy:yes..
>
> U 157.190.74.151:5060 -> 84.203.148.146:5060
>   SIP/2.0 100 Trying..Via: SIP/2.0/UDP
> 84.203.148.146;branch=z9hG4bK77bc.b54c
>   a216.0..Via: SIP/2.0/UDP
> 172.16.3.31;rport=5060;received=84.203.148.14;bran
>   ch=z9hG4bK1a48edc121f5bc1f..From: "2093"
> <sip:2093@84.203.148.146>;tag=2dc3
>   76dcd4655094..To: <sip:2092@84.203.148.146>..Call-ID:
> 44e1ae63c476fbff@172.
>   16.3.31..CSeq: 10327 INVITE..User-Agent: Grandstream BT100
> 1.0.5.18..Conten
>   t-Length: 0....
>
> U 157.190.74.151:5060 -> 84.203.148.146:5060
>   SIP/2.0 180 Ringing..Via: SIP/2.0/UDP
> 84.203.148.146;branch=z9hG4bK77bc.b54
>   ca216.0..Via: SIP/2.0/UDP
> 172.16.3.31;rport=5060;received=84.203.148.14;bra
>   nch=z9hG4bK1a48edc121f5bc1f..From: "2093"
> <sip:2093@84.203.148.146>;tag=2dc
>   376dcd4655094..To:
> <sip:2092@84.203.148.146>;tag=10bdf2044401a257..Call-ID:
>    44e1ae63c476fbff@172.16.3.31..CSeq: 10327 INVITE..User-Agent:
> Grandstream
>   BT100 1.0.5.18..Content-Length: 0....
>
> Send instant messages to your online friends
> http://uk.messenger.yahoo.com
>
>
>
> #
> # $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"
>
> alias="157.190.74.152:5060"
>
> # ------------------ 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"
> loadmodule "/usr/lib/ser/modules/textops.so"
> loadmodule "/usr/lib/ser/modules/nathelper.so"
> #loadmodule "/usr/lib/ser/modules/pa.so"
> loadmodule "/usr/lib/ser/modules/cpl-c.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
> #NB Had to up this value from 1 to 11 because reinvites were
> bombarding called phone
> modparam("rr", "enable_full_lr", 11)
>
> #!! Nathelper
> modparam("registrar", "nat_flag", 60)
> modparam("nathelper", "natping_interval", 30) #Ping interval 30 s
> modparam("nathelper", "ping_nated_only", 1)   #Ping only clients
> behind NAT
> modparam("nathelper", "rtpproxy_sock", "/var/run/rtpproxy.sock")
>
> modparam("tm", "fr_inv_timer", 20)
>
> #modparam("pa", "default_expires", 3600)
>
> modparam("usrloc", "db_url", "sql://root:1alfa156@localhost/ser")
>
> #modparam("cpl-c", "cpl_db", "mysql://root:1alfa156@localhost/ser")
> #modparam("cpl-c", "cpl_table", "cpl")
> #modparam("cpl-c", "cpl_dtd_file",
> "/work/sip_router/modules/cpl-ccpl-06.dtd")
>
> # -------------------------  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", "Message too big");
> break;
> };
>
> #######################################################################################
> if (nat_uac_test("3")){
> if (method == "REGISTER" || ! search("^Record-Route:")){
> log("Log: Someone trying to register from private IP,rewriting\n");
> fix_nated_contact(); #Rewrite contact with source IP
> if (method == "INVITE"){
> fix_nated_sdp("1"); #Add direction=active to SDP
> force_rtp_proxy();
> };
> force_rport(); # Add rport parameter to topmost Via
> setflag(6); # Mark as Nated
> };
> };
> ########################################################################################
>
> # 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
>
> if (method =="REGISTER") record_route();
>
> # loose-route processing
> if (loose_route()) {
> #commented 11/02/05
> #t_relay();
> route(1);
> break;
> };
>
> # 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==myself) {
>
> log(1,"into loop");
> if (method=="REGISTER") {
>
> # Uncomment this if you want to use digest authentication
> # if (!www_authorize("157.190.74.152", "subscriber")) {
> # www_challenge("157.190.74.152", "0");
> # break;
> # };
>
> #cpl_process_register();
>
> save("location");
> break;
> };
>
> # if (method=="SUBSCRIBE")
> # {
> # log(1, "Subscribe\n");
> # if(t_newtran())
> # {
> # log(1, "Registrar\n");
> # handle_subscription("registrar");
> # };
> # break;
> # };
>
> lookup("aliases");
> if (!uri==myself) {
> append_hf("P-hint: outbound alias\r\n");
> route(1);
> break;
> };
>
> if (method=="INVITE"){
>
> log(1,"in invite loop");
> #break; #no 100 trying
> #if (!cpl_run_script("incoming","is_stateless"))
> #{
> # #script execution failed
> # t_reply("500", "CPL script execution failed");
> #};
>
> t_on_failure("1");
> };
>
> # native SIP destinations are handled using our USRLOC DB
> if (!lookup("location")) {
> #sl_send_reply("404", "Not Found");
> route(2);
> break;
> };
> };
>
> # forward to current uri now; use stateful forwarding; that
> # works reliably even if we forward from TCP to UDP
> #commented 11/02/05#######################
> if (!t_relay()) {
> sl_reply_error();
> };
>
> #route(1);
> }
>
> ######################################entered
> 11/02/05############################################################
> route[1]
> {
> #!!Nathelper
> if(uri=~"[@:](192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)" &&
> !search("^Route:")){
> sl_send_reply("479", "We don't forward to private IP addresses");
> break;
> };
>
> if (isflagset(6)){
> force_rtp_proxy();
> }
>
> t_on_reply("1");
>
> if(!t_relay()){
> sl_reply_error();
> break;
> };
>
> }
>
> ######################################entered
> 11/02/05############################################################
> #!! Nathelper
> onreply_route[1] {
> if(isflagset(6) && status =~ "(183)|2[0-9][0-9]"){
> fix_nated_contact();
> force_rtp_proxy();
> }else if (nat_uac_test("1")){
> fix_nated_contact();
> };
> }
> #################################################################################################################
>
> # ------------- handling of unavailable user ------------------
> route[2] {
>
>         # non-Voip -- just send "off-line"
>         if (!(method == "INVITE" || method == "ACK" || method ==
> "CANCEL")) {
>                 sl_send_reply("404", "Not Found");
>                 break;
>         };
>
>         # forward to voicemail now
>         rewritehostport("157.190.74.152:5062");
>         t_relay_to_udp("157.190.74.152", "5062");
> }
>
> # if forwarding downstream did not succeed, try voicemail running
> # at 172.16.2.120:5062
>
> failure_route[1] {
>         revert_uri();
>         rewritehostport("157.190.74.152:5062");
>         append_branch();
>         t_relay_to_udp("157.190.74.152", "5062");
> }
>
>
>
>
>
> _______________________________________________
> Serusers mailing list
> serusers@lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serusers

Send instant messages to your online friends http://uk.messenger.yahoo.com