Quite a few people have a hard time in finding working solutions for SIP in
NAT environments.
I have successfully tried a setup where SER resides in an iptables NAT box. In
this case, the tricky part is the iptables config (since no netfilter SIP ALG
exists yet), so I thought I'd share a working iptables config wrt SER and UAs
behind the NAT.
As far as I have seen both SER and the UAs work fine with this setup.
/Lasse
* SCENARIO:
- You have an iptables NAT box with one public IP address and a privately
addressed LAN inside
- SER resides in the NAT box
- You use UAs where it is possible for you to select what ports to use for SIP
and media (.e.g. KPhone or X-Lite)
- The UAs use STUN or some other means that results in having the public IP
address in SDP
- THE UAs use UDP for SIP and media
- SER is reachable via both UDP and TCP from the Internet and the LAN
* NAT/IPTABLES ASSUMPTIONS
- All chains have a default policy = DENY to start with
- The machines on the internal LAN have unresticted access to the NAT box
through appropriate rules
- You have configured appropriate spoofing filters
- You are not worried about having permanent openings through the NAT to your
LAN machines
* IPTABLES CONFIG
# Variables - may provide rule statements which are more easy to read, but
aren't necessary
EXTERNAL_INTERFACE=<insert the device name of your Internet i/f here>
# example EXTERNAL_INTERFACE="eth0"
IPADDR=<insert your public IP here, or the command you use to dig it out>
# pseudo example: IPADDR="a.b.c.d."
SIP_UA_HOST_1=<insert the private IP of the relevant host on your private LAN>
# example SIP_UA_HOST_1="192.168.0.1"
SIP_PORT_1=<insert the desired SIP port for SIP_UA_HOST_1 here. NOT port 5060
which is used by SER>
# example SIP_PORT_1="5062"
M_PORT_1=<insert the desired media port for SIP_UA_HOST_1 here>
# example M_PORT_1="37000"
# Ports above the well known ports (see www.iana.org/assignments/port-numbers)
UNPRIVPORTS="1024:"
#
------------------------------------------------------------------------------------
# SIP SERVER PART
iptables -A INPUT -i $EXTERNAL_INTERFACE -p udp \
-d $IPADDR --destination-port 5060 -j ACCEPT
iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p udp \
-s $IPADDR --source-port 5060 -j ACCEPT
iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp \
-d $IPADDR --destination-port 5060 -j ACCEPT
iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR --source-port 5060 -j ACCEPT
#
------------------------------------------------------------------------------------
# SIP_UA_HOST_1, repeat with appropriate replacements of hosts and port
numbers for each host on private LAN
# ------------ Part 1: Provides forwarding of media to SIP_UA_HOST_1 from both
Internet and LAN UAs
iptables -A PREROUTING -t nat -p udp --source-port $UNPRIVPORTS \
-d $IPADDR --destination-port $M_PORT_1 -j DNAT --to $SIP_UA_HOST_1
iptables -A FORWARD -p udp -d $SIP_UA_HOST_1 --destination-port $M_PORT_1 \
-j ACCEPT
# ------------ Part 2
# a): Prerequisite for correct forwarding of SIP messages to SIP_UA_HOST_1
from both Internet and LAN UAs
iptables -A PREROUTING -t nat -p udp -d $IPADDR --destination-port \
$SIP_PORT_1 -j DNAT --to $SIP_UA_HOST_1
# b): Prerequisite for correct forwarding of SIP messages to SIP_UA_HOST_1
from SER (e.g. an INVITE)
iptables -A OUTPUT -t nat -p udp -s $IPADDR --source-port 5060 \
-d $IPADDR --destination-port $SIP_PORT_1 -j DNAT --to $SIP_UA_HOST_1
# c): Allows the actual packet forwarding of SIP messages to SIP_UA_HOST_1
iptables -A FORWARD -p udp -d $SIP_UA_HOST_1 --destination-port $SIP_PORT_1 \
-j ACCEPT
#
------------------------------------------------------------------------------------
* REFERENCES
1. The netfilter/iptables project homepage, see http://www.netfilter.org/
2. OpenNA Inc. provides useful books on building and configuring Linux hosts,
including iptables.
see e.g. http://www.openna.com/products/books/sol/solus.php
I have defined radiusclient.conf in ser.cfg as below.
But is still looking for radiusclient.conf in
/usr/local/etc/radiusclient/radiusclient.conf.
modparam("auth_radius",
"radius_config","/etc/radiusclient/radiusclient.conf")
is there any syntax problem.
regards
manu
__________________________________
Do you Yahoo!?
Yahoo! Finance: Get your refund fast by filing online.
http://taxes.yahoo.com/filing.html
Hello,
Does anybody know wht Error: 482 Loop detected means in sems? I see
that in /var/log/messages every time I try to call my alias and leave a
voice message.
thanks
Srbo Cvetkovic | CityNet, Inc.
srbo(a)city-net.com | Pittsburgh, PA
voice: 412.481.5406 | fax: 412.431.1315
I could get auth request on my freeradius.
Could any one tell why i am not getting accounting
packets in my radius.
Find my ser.cfg setting below.
modparam("acc", "radius_log_flag", 1)
modparam("acc", "radius_log_missed_flag", 1)
I am unable to start once i keep these two lines. Can
anyone tell me the problem.
regards,
manu.
__________________________________
Do you Yahoo!?
Yahoo! Finance: Get your refund fast by filing online.
http://taxes.yahoo.com/filing.html
How to get the call log and registration request in a
different file other that /var/log/messages.
Also, can i get some more details on autherisation and
accountingpackets. Rt now, iam getting only details
given below.
ACC: transaction answered: method=BY
E, i-uri=sip:12334@10.10.0.1,
o-uri=sip:12334@10.10.0.1, call_id
=4F6F069B-4BF4-4CC7-B99C-4E24F0E2C667(a)192.168.10.154,
from=Manu Sip <sip:manu@s
ip.test.net>;tag=2654486816, code=200
thank you.
MANU.
__________________________________
Do you Yahoo!?
Yahoo! Finance: Get your refund fast by filing online.
http://taxes.yahoo.com/filing.html
Hello,
I have a question. I have two users 1000 and 1001. I have two
grandstream phones that I registered with those usernames. I have added
aliases for them:
serctl alias add 8000 sip:1000@mydomain.com
serctl alias add 8000 sip:1001@mydomain.com
When i try to call 8000 from a softphone both of the phones ring.
However after the timer is out I get 408: Request Timeout error
instead of going to voicemail. I have a user 8000 with voicemail
configured. my voicemail is running on a different machine though.
Any clues?
I tried adding it to the location table but still the same issue. I
just want my phones to ring together, and if no answer go to voicemail.
If it's picked up, then it will ring all phones again, so someone else
can take the second call.I would like to use aliases so I we can still
call local extensions internaly.
thanks in advance
Srbo Cvetkovic | CityNet, Inc.
srbo(a)city-net.com | Pittsburgh, PA
voice: 412.481.5406 | fax: 412.431.1315
Hi Bogdan,
it works ;) I can upload/remove/download CPL scripts via CPLEd's REGISTER function.
Now I can test my CPL scripts and play around a little bit with CPLEd. Many thanks
for your help. I will follow the further development of CPLEd and cpl-c.
Best Regards
Oliver
Bogdan-Andrei IANCU [mailto:iancu@fokus.fraunhofer.de] wrote
>Hi Oliver,
>
>My mistake - try like :
>
>if (method=="REGISTER") {
> cpl_process_register();
> # here you can do normal processing of a
> # REGISTER request or whatever you want
>};
>
>cpl_process_register function doesn't returns back to script if it's a REGISTER related to CPL.
>Please, let me know if works.
>
>Best regards,
>Bogdan
>
>Brinker, Oliver wrote:
>
>Hi Bogdan,
>
>better late then never ;) The upload of CPL scripts via SIP works fine
>with CPLEd but after changing the SER config file with the if statement
>you mentioned below I cannot REGISTER my client any more. It is a normal
>REGISTER without any payload in the SDP part. I try it with three different
>SIP clients and they all get a 500 error every time. Why do normal REGISTER
>messages run into the if statement, too? Many thanks for your help.
>
>Regards,
>Oliver
>
>
>Bogdan-Andrei IANCU wrote
>
>
>
>>Hi Oliver,
>>
>>Instead of using HTTP for upload/download (which requires more pieces
>>and more complex senttings) I would recommend you to use directly SIP
>>for transporting CPL scripts (via REGISTER). CPLEd supprts also this method.
>>In order to separated normal REGISTERs from CPL transport REGISTERS,
>>From the SER part you must do something like:
>>
>>if (method=="REGISTER") {
>> if ( cpl_process_register() ) {
>> sl_send_reply("500","Error");
>> };
>> # here you can do normal processing of a
>> # REGISTER request or whatever you want
>>};
>>
>>In CPLEd, in the upload/download window you have to fill in the address
>>and port of SER and the user name for which you want to install/fetch
>>the script.
>>
>>Regards,
>>Bogdan
>>
>>
>
>Brinker, Oliver wrote:
>
>
>
>>Hi Daniel,
>>when I try to upload a cpl script via http the status string of CPLEd
>>displays the following error message:
>>
>>Error: Upload via HTTP: HTTP request failed: Invalid CPL script
>>
>>I've set the direct path to the cpl.dtd in the cpl.php and in the CPLEd
>>settings. Although Java SDK 1.4.1 is installed on the machine I load
>>crimson.jar and xalan.jar into the classpath. But what is checker.jar
>>and where can I get it? Is jaxp.jar included in the Java SDK or should
>>I download a separate version?
>>
>>Many thanks,
>>Oliver
>>
>>
>>Daniel-Constantin Mierla wrote
>>
>>
>>
>>
>>
>>>Hello,
>>>if you use the CVS head version then you should change the format of
>>>database url: Now it reflects the type of database used and for mysql
>>>should be like:
>>>
>>>mysql://foo:bar@localhost/ser
>>>
>>>Try with this one when setting the "cpl_db" parameter.
>>>
>>>Daniel
>>>
>>>
>>>
>>>
>>
>>
>>
>>
>>>On 11/26/2003 11:30 AM, Brinker, Oliver wrote:
>>>
>>>
>>>
>>>
>>
>>
>>
>>
>>>Hi Bogdan,
>>>
>>>The mysql module is loaded before the cpl-c one. Please have a look into
>>>my ser.cfg because I cannot find any misconfig. Could it be a problem
>>>with the SQL connection string? MySQL should be running correct.
>>>
>>>I change the module name in the modparam declaration from cpl_c to cpl-c
>>>because cpl_c like in your documentation doesn't work ;) Thanks
>>>
>>>Oliver
>>>
>>>#
>>># $Id: ser.cfg,v 1.24 2003/11/11 15:32:36 andrei Exp $
>>>#
>>># simple quick-start config script
>>>#
>>>
>>># ----------- global configuration parameters ------------------------
>>>
>>>#debug=3 # debug level (cmd line: -dddddddddd)
>>>#fork=yes
>>>#log_stderror=no # (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/cpl-c.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"
>>>
>>># ----------------- 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)
>>>
>>># -- cpl-c module --
>>>modparam("cpl-c","cpl_db","sql://foo:bar@localhost/ser")
>>>modparam("cpl-c","cpl_table","cpl")
>>>modparam("cpl-c","cpl_dtd_file","/usr/local/etc/ser/cpl-06.dtd")
>>>modparam("cpl-c","log_dir","/var/log/ser/cpl")
>>>modparam("cpl-c","proxy_recurse",0)
>>>
>>># ------------------------- 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;
>>> };
>>>
>>> # 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("t-systems.com", "subscriber")) {
>>> www_challenge("t-systems.com", "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]
>>>{
>>> # send it out now; use stateful forwarding as it works reliably
>>> # even for UDP2TCP
>>> if (!t_relay()) {
>>> sl_reply_error();
>>> };
>>>}
>>>
>>>
>>>Bogdan-Andrei IANCU [mailto:iancu@fokus.fraunhofer.de] wrote
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>>Hi Oliver,
>>>>
>>>>The mysql module must be loade before the cpl-c one. Make sure about
>>>>this in your configuration file.
>>>>
>>>>Bogdan
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>Brinker, Oliver wrote:
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>>Hi Bogdan,
>>>>now I fetch the whole cvs tree and compile SER and the needed modules.
>>>>Everything works fine until I put the cpl-c modparam values into ser.cfg.
>>>>I get an error message on my xconsole that the cpl-c module cannot bind
>>>>to the database. The mysql module is loaded because digest authentications
>>>>works since a few days. Is there anything to mind regarding the order of
>>>>loading modules or setting params in the ser.cfg? Many thanks.
>>>>
>>>>Regards,
>>>>Oliver
>>>>
>>>>
>>>>Bogdan-Andrei IANCU [mailto:iancu@fokus.fraunhofer.de] wrote
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>>Hi Oliver,
>>>>>
>>>>>what branch of cvs do you use? or you use the head of cvs?
>>>>>on CVS head everything is fixed - but you have to get the whole tree,
>>>>>not only the TM.
>>>>>
>>>>>Regards,
>>>>>Bogdan
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>Brinker, Oliver wrote:
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>>Hi Bogdan,
>>>>>
>>>>>I try to patch the TM module and get an error during patching t_reply.c:
>>>>>
>>>>>Hunk #2 FAILED at 375
>>>>>Hunk #3 FAILED at 400
>>>>>
>>>>>I'm not sure but could the faked_env function be the problem (expect four params,
>>>>>but receiving only two)? Should I use a new version of the TM module from the CVS?
>>>>>Many thanks.
>>>>>
>>>>>Regards,
>>>>>Olli
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>Hello,
>>>>>>
>>>>>>In order to compile the cpl-c module, you need to apply a patch to the
>>>>>>tm_modulel you can finf this patch in modules/cpl-c/tm.patch.
>>>>>>Please, use the patch from the same version of ser as the tm modules. Try to do
>>>>>>so and let my know if it worked.
>>>>>>
>>>>>>Regards,
>>>>>>Bogdan
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>_______________________________________________
>>>Serusers mailing list
>>>serusers(a)lists.iptel.org
>>>http://lists.iptel.org/mailman/listinfo/serusers
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>>
>
>
>
>
I have configured SER to work with freeradius and
restarted SER. Log file shows "Feb 6 02:01:24 TEST
ser: ser startup succeeded" but SER is not running.
And i am not receving any request in radius server
also.
Find below my ser.cfg below.
#
# $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei
Exp $
#
# simple quick-start config script
#
# ----------- global configuration parameters
------------------------
#debug=3 # debug level (cmd line: -dddddddddd)
#fork=yes
#log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode
debug=7
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/lib/ser/modules/sl.so"
loadmodule "/usr/lib/ser/modules/pa.so"
loadmodule "/usr/lib/ser/modules/tm.so"
loadmodule "/usr/lib/ser/modules/acc.so"
loadmodule "/usr/lib/ser/modules/rr.so"
loadmodule "/usr/lib/ser/modules/maxfwd.so"
loadmodule "/usr/lib/ser/modules/usrloc.so"
loadmodule "/usr/lib/ser/modules/registrar.so"
#loadmodule "/usr/lib/ser/modules/group.so"
loadmodule "/usr/lib/ser/modules/uri.so"
loadmodule "/usr/lib/ser/modules/group_radius.so"
loadmodule "/usr/lib/ser/modules/mysql.so"
loadmodule "/usr/lib/ser/modules/auth.so"
#loadmodule "/usr/lib/ser/modules/auth_db.so"
# ----------------- setting module-specific parameters
---------------
# -- usrloc params --
# Uncomment this if you want to use SQL database
# for persistent storage and comment the previous line
modparam("usrloc", "db_mode", 0)
#modparam("auth_db",
"db_url","sql://ser:heslo@localhost/ser")
modparam("auth_radius",
"radius_config","/etc/radiusclient/radiusclient.conf")
# -- 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)
modparam("acc", "log_level", 1)
#modparam("acc", "log_flag", 1 )
#modparam("acc", "radius_log_flag", 1 )
#modparam("acc", "radius_log_missed_flag", 1)
# ------------------------- 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;
};
# 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
record_route();
# loose-route processing
if (loose_route()) {
t_relay();
break;
};
if (uri=~"sip:3[0-9]*@sip.test.net") { ## This
assumes that the caller is
log("Forwarding to PSTN\n"); ## registered
in our realm
strip(3);
forward(192.168.10.15,5060); ## Our Cisco router
break;
};
setflag(1);
# 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=~"sip.test.net") {
if (method=="REGISTER") {
# Uncomment this if you want to use digest
authentication
#if
(!radius_www_authorize("sip.test.net", "subscriber"))
{
if
(radius_www_authorize("sip.test.net")) {
www_challenge("sip.test.net", "0");
break;
};
save("location");
break;
};
# native SIP destinations are handled
using our USRLOC DB
if (!lookup("location")) {
sl_send_reply("404", "Not
Found");
break;
};
};
# 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();
};
}
Any clue ??? if pls reply me.....
thanks in advance.
regards
manu
__________________________________
Do you Yahoo!?
Yahoo! Finance: Get your refund fast by filing online.
http://taxes.yahoo.com/filing.html
Hi,
http://www.iptel.org/ser/admin.html - here is the admin guide.
also try the previous email from this emailing list.
Regards,
Bogdan
Nair wrote:
>thank u...it worked welll !!!
> where can i get more docs on call routing and dialing
>pattern.
>
>--- Bogdan-Andrei IANCU <iancu(a)fokus.fraunhofer.de>
>wrote:
>
>
>>Hi,
>>just use strip(n) - n is number of digits you want
>>to strip
>>and
>>prefix("123")
>>
>>Regards,
>>Bogdan
>>
>>Nair wrote:
>>
>>
>>
>>>hi,
>>>
>>>can anyone guide me in techprefixing.
>>>
>>>for eg: how can i prefix 911 to 16509647244 and
>>>
>>>
>>send
>>
>>
>>>91116509647244 to PSTN gw.
>>>
>>>
>>>
>>Ex: prefix("911")
>>
>>
>>
>>>and when some one dials in 811146509647245, how can
>>>
>>>
>>i
>>
>>
>>>strip "811" and send 146509647245 to PSTN gw.
>>>
>>>
>>>
>>Ex: strip(3)
>>
>>
>>
>>>how can i have dialing plan for the both senarios.
>>>
>>>thanks in advance.
>>>
>>>regards,
>>>
>>>
>>>__________________________________
>>>Do you Yahoo!?
>>>Yahoo! Finance: Get your refund fast by filing
>>>
>>>
>>online.
>>
>>
>>>http://taxes.yahoo.com/filing.html
>>>
>>>_______________________________________________
>>>Serusers mailing list
>>>serusers(a)lists.iptel.org
>>>http://lists.iptel.org/mailman/listinfo/serusers
>>>
>>>
>>>
>>>
>>>
>>
>>
>
>
>__________________________________
>Do you Yahoo!?
>Yahoo! Finance: Get your refund fast by filing online.
>http://taxes.yahoo.com/filing.html
>
>
hi,
can anyone guide me in techprefixing.
for eg: how can i prefix 911 to 16509647244 and send
91116509647244 to PSTN gw.
and when some one dials in 811146509647245, how can i
strip "811" and send 146509647245 to PSTN gw.
how can i have dialing plan for the both senarios.
thanks in advance.
regards,
__________________________________
Do you Yahoo!?
Yahoo! Finance: Get your refund fast by filing online.
http://taxes.yahoo.com/filing.html