[Serusers] PSTN

Greger V. Teigre greger at teigre.com
Tue Nov 30 14:56:03 CET 2004


Nicky,
I'm not sure I understand your setup and problem, but I assume you run 
rtpproxy in bridge mode?   Could you please describe your setup and post 
your config file?
A blind shot based on the ser.cfg in this thread:  t_on_reply("1"); should 
be called before any t_relay.
g-)

Nicky wrote:
> Hi Geger,
>
> Thank you for your reply. My rtpproxy is not behind NAT. how can I
> make the c=IP4 not to be rewritten by the nathelper?
> I do my rtpproxy commands like this :~ rtpproxy -2fv -l public_ip
> public_ip....is this correct?
>
> Regards,
> Nicky
> ----- Original Message -----
> From: "Greger V. Teigre" <greger at teigre.com>
> To: "Nicky" <nicky at caliber.com.sg>; "Kapil Dhawan"
> <sersavvy at hotmail.com>; <zeus.ng at isquare.com.au>
> Cc: <serusers at lists.iptel.org>
> Sent: Tuesday, November 30, 2004 8:40 PM
> Subject: Re: [Serusers] PSTN
>
>
>> Nicky,
>> You have your rtp proxy behind a NAT?  If so, no wonders you have
>> problems making the RTP streams flow.
>>     The IP address in the c=IP4 is rewritten by nathelper, but it is
>> received from the rtpproxy.  I attach a small patch that adds -i
>> parameter to rtpproxy where you can define your public IP address of
>> rtpproxy: rtpproxy -l internal_address -i public_ip.
>>     It is against the cvs version at
>> http://cvs.berlios.de/cgi-bin/viewcvs.cgi/ser/rtpproxy/
>>
>> Hope it helps,
>> Greger
>>
>> Nicky wrote:
>>> Hi ,
>>>
>>> i am facing the same problem, can advice where you add the
>>> t_on_reply("1") to make the PSTN have audio.
>>> I have another problem I want to send public address instead of NAT
>>> address in the c=IP4 function in the SDP message, anyone done this
>>> before, i am a newbie I am problem in trying to code it. Please
>>> help. Thanks in advance.....
>>>
>>> Regards,
>>> nicky
>>> ----- Original Message -----
>>> From: "Kapil Dhawan" <sersavvy at hotmail.com>
>>> To: <zeus.ng at isquare.com.au>
>>> Cc: <serusers at lists.iptel.org>
>>> Sent: Wednesday, June 02, 2004 12:19 PM
>>> Subject: RE: [Serusers] PSTN
>>>
>>>
>>> exactly...you are right...i was skipping it somehow and now working
>>> ok....
>>>
>>>
>>>> From: "Zeus Ng" <zeus.ng at isquare.com.au>
>>>> To: "Kapil Dhawan" <sersavvy at hotmail.com>
>>>> CC: serusers at lists.iptel.org
>>>> Subject: RE: [Serusers] PSTN
>>>> Date: Wed, 2 Jun 2004 11:42:07 +1000 (EST)
>>>>
>>>> You should do the t_on_reply("1") for PSTN call as well. I hope the
>>>> other thread you mentioned about solving the problem is what I said
>>>> here.
>>>>
>>>> Zeus
>>>>
>>>>> Hi List
>>>>>
>>>>> I am still unable to solve this issue why the my NAT user is
>>>>> unable to hear
>>>>> when he makes a PSTn call..
>>>>>
>>>>> # ----------- global configuration parameters
>>>>> ------------------------
>>>>>
>>>>> debug=8         # debug level (cmd line: -dddddddddd)
>>>>> fork=yes
>>>>> log_stderror=yes # (cmd line: -E)
>>>>>
>>>>> 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"
>>>>> loadmodule "/usr/local/lib/ser/modules/textops.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"
>>>>>
>>>>> # !! Nathelper
>>>>> loadmodule "/usr/local/lib/ser/modules/nathelper.so"
>>>>>
>>>>> # !! Accounting
>>>>> loadmodule "/usr/local/lib/ser/modules/acc.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
>>>>> modparam("rr", "enable_full_lr", 1)
>>>>>
>>>>> # !! Nathelper
>>>>> # -- nathelper params --
>>>>> modparam("registrar", "nat_flag", 6)
>>>>> modparam("nathelper", "natping_interval", 30) # Ping interval 30 s
>>>>> modparam("nathelper", "ping_nated_only", 1)   # Ping only clients
>>>>> behind NAT
>>>>>
>>>>> # !! Accounting
>>>>> # -- acc params --
>>>>> # set the reporting log level
>>>>> modparam("acc", "log_level", 2)   # Set log_level to 2
>>>>> # number of flag, which will be used for accounting; if a message
>>>>> is # labeled with this flag, its completion status will be
>>>>> reported modparam("acc", "log_flag", 1 )
>>>>> modparam("acc", "log_missed_flag", 2)
>>>>> modparam("acc", "failed_transactions", 1)
>>>>> modparam("acc", "report_cancels", 1)
>>>>> modparam("acc", "db_url", "mysql://ser:heslo@localhost/ser")
>>>>> modparam("acc", "db_flag", 1)
>>>>> modparam("acc", "db_missed_flag", 2)
>>>>>
>>>>> # -------------------------  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;
>>>>> };
>>>>>
>>>>>         # !! Nathelper
>>>>> # Special handling for NATed clients; first, NAT test is
>>>>> # executed: it looks for via!=received and RFC1918 addresses
>>>>> # in Contact (may fail if line-folding is used); also,
>>>>> # the received test should, if completed, should check all
>>>>> # vias for rpesence of received
>>>>> if (nat_uac_test("3")) {
>>>>> # Allow RR-ed requests, as these may indicate that
>>>>> # a NAT-enabled proxy takes care of it; unless it is
>>>>> # a REGISTER
>>>>>
>>>>> if (method == "REGISTER" || ! search("^Record-Route:")) {
>>>>>     log("LOG: Someone trying to register from private IP,
>>>>> rewriting\n");
>>>>>
>>>>>     # This will work only for user agents that support symmetric
>>>>>     # communication. We tested quite many of them and majority is
>>>>>     # smart enough to be symmetric. In some phones it takes a
>>>>> configuration
>>>>>     # option. With Cisco 7960, it is called NAT_Enable=Yes, with
>>>>> kphone it
>>>>> is
>>>>>     # called "symmetric media" and "symmetric signalling".
>>>>>
>>>>>     fix_nated_contact(); # Rewrite contact with source IP of
>>>>>     signalling if (method == "INVITE") {
>>>>>         fix_nated_sdp("1"); # Add direction=active to SDP
>>>>>     };
>>>>>     force_rport(); # Add rport parameter to topmost Via
>>>>>     setflag(6);    # Mark as NATed
>>>>> };
>>>>> };
>>>>>
>>>>>         # labeled all transaction for accounting
>>>>>         setflag(1);
>>>>>         setflag(2);
>>>>>
>>>>> # 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();
>>>>>
>>>>> # subsequent messages withing a dialog should take the
>>>>> # path determined by record-routing
>>>>> if (loose_route()) {
>>>>> # mark routing logic in request
>>>>> append_hf("P-hint: rr-enforced\r\n");
>>>>> route(1);
>>>>> break;
>>>>> };
>>>>>
>>>>> if (!uri==myself) {
>>>>> # mark routing logic in request
>>>>> append_hf("P-hint: outbound\r\n");
>>>>> 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) {
>>>>>
>>>>> if (method=="REGISTER") {
>>>>>
>>>>> # Uncomment this if you want to use digest authentication
>>>>> if (!www_authorize("1.1.1.1","subscriber")) {
>>>>> www_challenge("1.1.1.1", "0");
>>>>> break;
>>>>> };
>>>>>
>>>>> save("location");
>>>>> break;
>>>>> };
>>>>>
>>>>> if(uri=~"^sip:00*"){
>>>>>                         append_hf("P-hint: PSTN call\r\n");
>>>>> route(1);
>>>>> break;
>>>>> };
>>>>>
>>>>> lookup("aliases");
>>>>> if (!uri==myself) {
>>>>> append_hf("P-hint: outbound alias\r\n");
>>>>> route(1);
>>>>> break;
>>>>> };
>>>>>
>>>>> # native SIP destinations are handled using our USRLOC DB
>>>>> if (!lookup("location")) {
>>>>> sl_send_reply("404", "Not Found");
>>>>> break;
>>>>> };
>>>>> };
>>>>> append_hf("P-hint: usrloc applied\r\n");
>>>>> route(1);
>>>>> }
>>>>>
>>>>> 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 client or server know to be behind a NAT, enable relay
>>>>> if (isflagset(6)) {
>>>>>     force_rtp_proxy();
>>>>> };
>>>>>
>>>>> if(uri=~"^sip:00*"){
>>>>>                 rewritehost("2.2.2.2");
>>>>>                 t_relay_to_udp("2.2.2.2","5060");
>>>>>                 break;
>>>>> };
>>>>>
>>>>> # NAT processing of replies; apply to all transactions (for
>>>>> example, # re-INVITEs from public to private UA are hard to
>>>>> identify as # NATed at the moment of request processing); look at
>>>>> replies t_on_reply("1");
>>>>>
>>>>> # send it out now; use stateful forwarding as it works reliably
>>>>> # even for UDP2TCP
>>>>> if (!t_relay()) {
>>>>> sl_reply_error();
>>>>> };
>>>>> }
>>>>>
>>>>> # !! Nathelper
>>>>> onreply_route[1] {
>>>>>     # NATed transaction ?
>>>>>     if (isflagset(6) && status =~ "(183)|2[0-9][0-9]") {
>>>>>         fix_nated_contact();
>>>>> force_rtp_proxy();
>>>>>     # otherwise, is it a transaction behind a NAT and we did not
>>>>>     # know at time of request processing ? (RFC1918 contacts)
>>>>>     } else if (nat_uac_test("1")) {
>>>>>         fix_nated_contact();
>>>>>     };
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> From: "Kapil Dhawan" <sersavvy at hotmail.com>
>>>>>> To: sersavvy at hotmail.com
>>>>>> CC: serusers at lists.iptel.org
>>>>>> Subject: RE: [Serusers] PSTN
>>>>>> Date: Tue, 01 Jun 2004 05:02:54 +0000
>>>>>>
>>>>>> Hi my second part is done...i have used t_relay_to_udp rather
>>>>>> than forward
>>>>>> for pstn calls and now logs are coming....for pstn as well
>>>>>>
>>>>>> but first is till not done.
>>>>>>
>>>>>>> From: "Kapil Dhawan" <sersavvy at hotmail.com>
>>>>>>> To: serusers at lists.iptel.org
>>>>>>> Subject: [Serusers] PSTN
>>>>>>> Date: Tue, 01 Jun 2004 00:59:07 +0000
>>>>>>>
>>>>>>> Hi List
>>>>>>>
>>>>>>> I am running rtpproxy and nathelper which is fine for me...but
>>>>>>> when i
>>>>>> transfer all calls starting with 00 to my SIP gateway...then
>>>>>> person calling
>>>>>> from public IP is able to hear properly the pstn call and person
>>>>>> calling behind NAT can not hear but the pstn callee can hear that
>>>>>> behind NAT guy...
>>>>>>>
>>>>>>> and second is i am storing logs in acc table...there is i make a
>>>>>> SIP-SIP
>>>>>> call, i get proper logs but if i make PSTN call whether from
>>>>>> public or private IP, i only get BYE record..
>>>>>>>
>>>>>>> below is my ser.cfg
>>>>>>>
>>>>>>>
>>>>>>> #
>>>>>>> # $Id: nathelper.cfg,v 1.1.2.1 2003/11/24 14:47:18 janakj Exp $
>>>>>>> #
>>>>>>> # simple quick-start config script including nathelper support
>>>>>>>
>>>>>>> # This default script includes nathelper support. To make it
>>>>>>> work # you will also have to install Maxim's RTP proxy. The
>>>>>>> proxy is enforced # if one of the parties is behind a NAT.
>>>>>>> #
>>>>>>> # If you have an endpoing in the public internet which is known
>>>>>>> to # support symmetric RTP (Cisco PSTN gateway or voicemail, for
>>>>>>> example), # then you don't have to force RTP proxy. If you don't
>>>>>>> want to enforce # RTP proxy for some destinations than simply
>>>>>>> use t_relay() instead of # route(1)
>>>>>>> #
>>>>>>> # Sections marked with !! Nathelper contain modifications for
>>>>>>> nathelper #
>>>>>>> # NOTE !! This config is EXPERIMENTAL !
>>>>>>> #
>>>>>>> # ----------- global configuration parameters
>>>>>>> ------------------------
>>>>>>>
>>>>>>> debug=8         # debug level (cmd line: -dddddddddd)
>>>>>>> fork=yes
>>>>>>> log_stderror=yes # (cmd line: -E)
>>>>>>>
>>>>>>> /* Uncomment these lines to enter debugging mode
>>>>>>> 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"
>>>>>>> loadmodule "/usr/local/lib/ser/modules/textops.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"
>>>>>>>
>>>>>>> # !! Nathelper
>>>>>>> loadmodule "/usr/local/lib/ser/modules/nathelper.so"
>>>>>>>
>>>>>>> # !! Accounting
>>>>>>> loadmodule "/usr/local/lib/ser/modules/acc.so"
>>>>>>>
>>>>>>> # !! Voicemail And Conference
>>>>>>> loadmodule "/usr/local/lib/ser/modules/vm.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
>>>>>>> modparam("rr", "enable_full_lr", 1)
>>>>>>>
>>>>>>> # !! Nathelper
>>>>>>> # -- nathelper params --
>>>>>>> modparam("registrar", "nat_flag", 6)
>>>>>>> modparam("nathelper", "natping_interval", 30) # Ping interval
>>>>>>> 30 s modparam("nathelper", "ping_nated_only", 1)   # Ping only
>>>>>>> clients
>>>>>> behind
>>>>>> NAT
>>>>>>>
>>>>>>> # !! Accounting
>>>>>>> # -- acc params --
>>>>>>> # set the reporting log level
>>>>>>> modparam("acc", "log_level", 2)   # Set log_level to 2
>>>>>>> # number of flag, which will be used for accounting; if a
>>>>>>> message is # labeled with this flag, its completion status will
>>>>>>> be reported modparam("acc", "log_flag", 1 )
>>>>>>> modparam("acc", "log_missed_flag", 2)
>>>>>>> modparam("acc", "failed_transactions", 1)
>>>>>>> modparam("acc", "report_cancels", 1)
>>>>>>> modparam("acc", "db_url", "mysql://ser:heslo@localhost/ser")
>>>>>>> modparam("acc", "db_flag", 1)
>>>>>>> modparam("acc", "db_missed_flag", 2)
>>>>>>>
>>>>>>> # !! Transaction
>>>>>>> # -- tm params --
>>>>>>> modparam("tm", "fr_inv_timer", 200)
>>>>>>>
>>>>>>> # -------------------------  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;
>>>>>>> };
>>>>>>>
>>>>>>>        # !! Nathelper
>>>>>>> # Special handling for NATed clients; first, NAT test is
>>>>>>> # executed: it looks for via!=received and RFC1918 addresses
>>>>>>> # in Contact (may fail if line-folding is used); also,
>>>>>>> # the received test should, if completed, should check all
>>>>>>> # vias for rpesence of received
>>>>>>> if (nat_uac_test("3")) {
>>>>>>> # Allow RR-ed requests, as these may indicate that
>>>>>>> # a NAT-enabled proxy takes care of it; unless it is
>>>>>>> # a REGISTER
>>>>>>>
>>>>>>> if (method == "REGISTER" || ! search("^Record-Route:")) {
>>>>>>>     log("LOG: Someone trying to register from private IP,
>>>>>>> rewriting\n");
>>>>>>>
>>>>>>>     # This will work only for user agents that support symmetric
>>>>>>>     # communication. We tested quite many of them and majority
>>>>>>>     is # smart enough to be symmetric. In some phones it takes a
>>>>>>>     configuration # option. With Cisco 7960, it is called
>>>>>>> NAT_Enable=Yes, with
>>>>>> kphone
>>>>>> it is
>>>>>>>     # called "symmetric media" and "symmetric signalling".
>>>>>>>
>>>>>>>     fix_nated_contact(); # Rewrite contact with source IP of
>>>>>>>     signalling if (method == "INVITE") {
>>>>>>>         fix_nated_sdp("1"); # Add direction=active to SDP
>>>>>>>     };
>>>>>>>     force_rport(); # Add rport parameter to topmost Via
>>>>>>>     setflag(6);    # Mark as NATed
>>>>>>> };
>>>>>>> };
>>>>>>>
>>>>>>>        # labeled all transaction for accounting
>>>>>>>        setflag(1);
>>>>>>>        setflag(2);
>>>>>>>
>>>>>>> # 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();
>>>>>>>
>>>>>>> # subsequent messages withing a dialog should take the
>>>>>>> # path determined by record-routing
>>>>>>> if (loose_route()) {
>>>>>>> # mark routing logic in request
>>>>>>> append_hf("P-hint: rr-enforced\r\n");
>>>>>>> route(1);
>>>>>>> break;
>>>>>>> };
>>>>>>>
>>>>>>> if (!uri==myself) {
>>>>>>> # mark routing logic in request
>>>>>>> append_hf("P-hint: outbound\r\n");
>>>>>>> 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) {
>>>>>>>
>>>>>>> if (method=="REGISTER") {
>>>>>>>
>>>>>>> # Uncomment this if you want to use digest authentication
>>>>>>> if (!www_authorize("220.226.42.185","subscriber")) {
>>>>>>> www_challenge("220.226.42.185", "0");
>>>>>>> break;
>>>>>>> };
>>>>>>>
>>>>>>> save("location");
>>>>>>> break;
>>>>>>> };
>>>>>>>
>>>>>>> lookup("aliases");
>>>>>>> if (!uri==myself) {
>>>>>>> append_hf("P-hint: outbound alias\r\n");
>>>>>>> route(1);
>>>>>>> break;
>>>>>>> };
>>>>>>>
>>>>>>> # native SIP destinations are handled using our USRLOC DB
>>>>>>> if (!lookup("location")) {
>>>>>>> sl_send_reply("404", "Not Found");
>>>>>>> break;
>>>>>>> };
>>>>>>> };
>>>>>>> append_hf("P-hint: usrloc applied\r\n");
>>>>>>> route(1);
>>>>>>> }
>>>>>>>
>>>>>>> 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 client or server know to be behind a NAT, enable relay
>>>>>>> if (isflagset(6)) {
>>>>>>>     force_rtp_proxy();
>>>>>>> };
>>>>>>>
>>>>>>> # NAT processing of replies; apply to all transactions (for
>>>>>>> example, # re-INVITEs from public to private UA are hard to
>>>>>>> identify as # NATed at the moment of request processing); look
>>>>>>> at replies t_on_reply("1");
>>>>>>>
>>>>>>> if(uri=~"^sip:00*")
>>>>>>> {
>>>>>>> rewritehost();
>>>>>>> forward()
>>>>>>> break;
>>>>>>> };
>>>>>>>
>>>>>>> # send it out now; use stateful forwarding as it works reliably
>>>>>>> # even for UDP2TCP
>>>>>>> if (!t_relay()) {
>>>>>>> sl_reply_error();
>>>>>>> };
>>>>>>> }
>>>>>>>
>>>>>>> # !! Nathelper
>>>>>>> onreply_route[1] {
>>>>>>>    # NATed transaction ?
>>>>>>>    if (isflagset(6) && status =~ "(183)|2[0-9][0-9]") {
>>>>>>>        fix_nated_contact();
>>>>>>> force_rtp_proxy();
>>>>>>>    # otherwise, is it a transaction behind a NAT and we did not
>>>>>>>    # know at time of request processing ? (RFC1918 contacts)
>>>>>>>    } else if (nat_uac_test("1")) {
>>>>>>>        fix_nated_contact();
>>>>>>>    };
>>>>>>> }
>>>>>>>
>>>>>>> _________________________________________________________________
>>>>>>> Post Classifieds on MSN classifieds.
>>>>>> http://go.msnserver.com/IN/44045.asp
>>>>>> Buy and Sell on MSN Classifieds.
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Serusers mailing list
>>>>>>> serusers at lists.iptel.org
>>>>>>> http://lists.iptel.org/mailman/listinfo/serusers
>>>>>>
>>>>>
>>>>> _________________________________________________________________
>>>>> Marriage?  http://www.bharatmatrimony.com/cgi-bin/bmclicks1.cgi?74
>>>>> Join BharatMatrimony.com for free.
>>>>>
>>>>> _______________________________________________
>>>>> Serusers mailing list
>>>>> serusers at lists.iptel.org
>>>>> http://lists.iptel.org/mailman/listinfo/serusers
>>>>>
>>>>
>>>
>>> _________________________________________________________________
>>> Get ready to dream with Citibank Ready Cash.
>>> http://go.msnserver.com/IN/49355.asp The Next Generation Personal
>>> Loan!
>>>
>>> _______________________________________________
>>> Serusers mailing list
>>> serusers at lists.iptel.org
>>> http://lists.iptel.org/mailman/listinfo/serusers
>>>
>>> _______________________________________________
>>> Serusers mailing list
>>> serusers at lists.iptel.org
>>> http://lists.iptel.org/mailman/listinfo/serusers 




More information about the sr-users mailing list