[Serusers] PSTN

Greger V. Teigre greger at teigre.com
Tue Nov 30 16:05:51 CET 2004


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