Hi Greger,
Thank you for your help, i will go through again....thanks.
Regards,
Nicky
----- Original Message -----
From: "Greger V. Teigre" <greger(a)teigre.com>
To: "Nicky" <nicky(a)caliber.com.sg>
Cc: <serusers(a)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(a)teigre.com>
> To: "Nicky" <nicky(a)caliber.com.sg>
> Cc: <serusers(a)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]+@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(a)teigre.com>
>>> To: "Nicky" <nicky(a)caliber.com.sg>
>>> Cc: <serusers(a)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(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
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>