[Serusers] PSTN

Nicky nicky at caliber.com.sg
Tue Nov 30 15:22:06 CET 2004


Hi Geger,

I have tried your method on the rtpproxy is saying that -i command is not
found.
I am running rtpproxy in the same system as ser. I have attached my ser.cfg
file....
Please help....

Regards,
Nicky
----- Original Message ----- 
From: "Greger V. Teigre" <greger at teigre.com>
To: "Nicky" <nicky at caliber.com.sg>
Cc: <serusers at lists.iptel.org>
Sent: Tuesday, November 30, 2004 9:56 PM
Subject: Re: [Serusers] PSTN


> 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
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ser.cfg
Type: application/octet-stream
Size: 4976 bytes
Desc: not available
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20041130/7427cc3f/attachment.obj>


More information about the sr-users mailing list