[Serusers] PSTN

Nicky nicky at caliber.com.sg
Tue Nov 30 16:29:07 CET 2004


Hi Greger,

Thank you for your help, i will go through again....thanks.

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 11:05 PM
Subject: Re: [Serusers] PSTN


> You stated that your proxy is not behind NAT, so forget about the patch,
> just look at my previous email.  If you're not a programmer, you will
> probably have problems with the ser.cfg file as it is more a script than a
> config file. You may want to find a person with programming background to
> help you.
> g-)
>
> Nicky wrote:
> > I have downloaded the patches that you provide the link to me, but
> > still cannot, please advice.
> >
> > 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 10:31 PM
> > Subject: Re: [Serusers] PSTN
> >
> >
> >> That's because you have to patch rtpproxy with the patch I attached
> >> before -i will be available.
> >>
> >> However:
> >>         # forward to current uri now; use stateful forwarding; that
> >>         # works reliably even if we forward from TCP to UDP
> >>         if (!t_relay()) {
> >>                 sl_reply_error();
> >>                 break;
> >>         };
> >>  t_on_reply("1");
> >>
> >> t_on_reply must be BEFORE t_relay, so the above has no effect. Your
> >> handling of INVITEs:
> >>  if (method=="INVITE") {
> >>   log(1,"LOG:INVITE \n");
> >>   #record_route();
> >>   setflag(1);
> >>   setflag(2);
> >>   force_rtp_proxy();
> >>   t_on_reply("1");
> >>  };
> >>
> >> Here you call t_on_reply, but you need to call t_on_reply for all
> >> methods, not only INVITE.
> >>
> >> Finally:
> >>
> >>       if (uri=~"sip:99[0-9]+ at IP_Address") {
> >>          rewritehostport("IP:5060");
> >>          t_relay_to_udp("IP","5060");
> >>          break;
> >>       };
> >>
> >> If you want calls that go to this host to also be handled by the
> >> proxy, you need t_on_reply before the above section.
> >>
> >> You should look at the example configs in nathelper source directory
> >> or berlios cvs.  Make sure that the execution path of your script is
> >> the same as the example.  Better still: Start with the example and
> >> build you config around it...
> >> g-)
> >>
> >> Nicky wrote:
> >>> 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
>




More information about the sr-users mailing list