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(a)teigre.com>
To: "Nicky" <nicky(a)caliber.com.sg>sg>; "Kapil Dhawan"
<sersavvy(a)hotmail.com>om>; <zeus.ng(a)isquare.com.au>
Cc: <serusers(a)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(a)hotmail.com>
>> To: <zeus.ng(a)isquare.com.au>
>> Cc: <serusers(a)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(a)isquare.com.au>
>>> To: "Kapil Dhawan" <sersavvy(a)hotmail.com>
>>> CC: serusers(a)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(a)hotmail.com>
>>>>> To: sersavvy(a)hotmail.com
>>>>> CC: serusers(a)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(a)hotmail.com>
>>>>>> To: serusers(a)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(a)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(a)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(a)lists.iptel.org
>>
http://lists.iptel.org/mailman/listinfo/serusers
>>
>> _______________________________________________
>> Serusers mailing list
>> serusers(a)lists.iptel.org
>>
http://lists.iptel.org/mailman/listinfo/serusers