hello friends,
atlast i got success with the cpl scripts
but one small problem is coming i.e
we have three numbers 214103,215104,216105
i have written script for the 214103 like this where if any body call s to 214103 it
should
redirect the call to the 215104
so when 216105 calls to 214103 the call has to goto the 215104 with out disturbing the
214103 but here
the call is going to the twol numbers 214103,215104 who ever picks up first the second
call is being hanged up.
cpl script is
---+
| user | cpl_xml
|
cpl_bin |
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------+
| 214103(a)xxx.xxx.xxx.in | <?xml version="1.0"
encoding="UTF-8"?>
<!DOCTYPE cpl PUBLIC '-//IETF//DTD RFCxxxx CPL 1.0//EN' 'cpl.dtd'>
<cpl>
<incoming>
<location url="sip:215104@xxx.xxx.xxx.in">
<redirect />
</location>
</incoming>
</cpl>
my ser.cfg is
**********************************************************************************************************
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"
fifo_mode=438
# ------------------ 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/exec.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"
loadmodule "/usr/local/lib/ser/modules/domain.so"
loadmodule "/usr/local/lib/ser/modules/cpl-c.so"
loadmodule "/usr/local/lib/ser/modules/xlog.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"
loadmodule "/usr/local/lib/ser/modules/acc.so"
# !! Nathelper
loadmodule "/usr/local/lib/ser/modules/nathelper.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 (whichtrue in this config),
# uncomment also the following parameter)
#
modparam("auth_db", "password_column", "password")
modparam("usrloc","db_url","mysql://ser:heslo@localhost:3306/ser")
modparam("acc", "log_level", 1)
modparam("acc", "log_flag", 1)
modparam("acc", "db_flag", 1)
modparam("acc", "db_missed_flag", 2)
modparam("acc", "log_fmt", "miocfst")
modparam("acc", "failed_transactions" ,1)
#modparam("acc", "radius_flag", 1)
# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)
# !! Nathelper
modparam("registrar", "nat_flag", 6)
modparam("nathelper", "natping_interval", 30) # Pinginterval 30 s
modparam("nathelper", "ping_nated_only", 1) # Pingonly clients behind
NAT
# -- cpl-c module --
modparam("cpl-c","cpl_db","mysql://ser:heslo@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/")
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 toobig");
break;
};
# !! Nathelper
# Special handling for NATed clients; first,NAT test is
# executed: it looks for via!=received andRFC1918 addresses
# in Contact (may fail if line-folding isused); 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 mayindicate that
# a NAT-enabled proxy takes care ofit; unless it is
# a REGISTER
if (method == "REGISTER" || !search("^Record-Route:")) {
log("LOG: Someone trying toregister from private IP, rewriting\n");
# This will work only for useragents that support symmetric
# communication. We tested quitemany of them and majority is
# smart enough to be symmetric. Insome phones it takes a configuration
# option. With Cisco 7960, it iscalled NAT_Enable=Yes, with kphone it is
# called "symmetric media" and"symmetric signalling".
fix_nated_contact(); # Rewritecontact with source IP of signalling
if (method == "INVITE") {
fix_nated_sdp("1"); # Adddirection=active to SDP
};
force_rport(); # Add rportparameter to topmost Via
setflag(6); # Mark as NATed
};
};
setflag(1);
setflag(2);
# we record-route all messages -- to make surethat
# subsequent messages will go through ourproxy; that's
# particularly good if upstream and downstreamentities
# use different transport protocol
if (!method=="REGISTER") record_route();
# subsequent messages withing a dialog shouldtake 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 useUsrLoc
# (in case, it does not work, use thefollowing command
# with proper names and addresses in it)
# Uncomment this if you want to use digestauthentication
if (uri==myself)
{
if(method=="REGISTER")
{
if(!www_authorize("xxx.xxxx.xxx.in", "subscriber")) {
www_challenge("xxx.xxxx.xxx.in", "0");
break;
};
save("location");
break;
};
if (method=="INVITE")
{
log(1, "INVITE\n");
cpl_process_register();
setflag(1); /* set foraccounting (the same valueas in log_flag!) */
};
if (method=="MESSAGE")
{
log(1, "MESSAGE\n");
setflag(1); /* set foraccounting (the same valueas in log_flag!) */
};
if ( method=="BYE" || method=="CANCEL" )
{
log (1, "BYE or CANCEL\n");
setflag(1);
};
lookup("aliases");
if (!uri==myself) {
append_hf("P-hint: outboundalias\r\n");
route(1);
break;
};
# native SIP destinations are handledusing our USRLOC DB
if (!lookup("location")) {
sl_send_reply("404", "NotFound");
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 toprivate 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 alltransactions (for example,
# re-INVITEs from public to private UA arehard to identify as
# NATed at the moment of request processing);look at replies
t_on_reply("1");
# send it out now; use stateful forwarding asit 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 andwe did not
# know at time of request processing ? (RFC1918contacts)
} else if (nat_uac_test("1")) {
fix_nated_contact();
};
}
*****************************************************************************************************
with regards
rama kanth
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com