Aj,
Here is the complete ser.cfg file that I posted a one November 20th. I've done this
inline text so
the attachment doesn't get deleted -- for the benefit of others of course.
Regards,
Paul
# ------------- Initial global variables
debug=3
fork=yes
log_stderror=no
listen=67.93.12.18 # put your real IP here
port=5060
alias=sip.mycompany.com
children=4
server_signature=yes
dns=no
rev_dns=no
check_via=no
syn_branch=yes
memlog=1000
sip_warning=yes
reply_to_via=no
uid="nobody"
gid="nobody"
mhomed=0
fifo_mode=0666
fifo="/tmp/ser_fifo"
fifo_db_url="mysql://ser:heslo@localhost/ser"
# ------------- external module loading
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/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/lib/ser/modules/acc.so"
loadmodule "/usr/local/lib/ser/modules/exec.so"
loadmodule "/usr/local/lib/ser/modules/group.so"
loadmodule "/usr/local/lib/ser/modules/print.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
loadmodule "/usr/local/lib/ser/modules/uri.so"
loadmodule "/usr/local/lib/ser/modules/uri_db.so"
loadmodule "/usr/local/lib/ser/modules/domain.so"
loadmodule "/usr/local/lib/ser/modules/xlog.so"
loadmodule "/usr/local/lib/ser/modules/speeddial.so"
loadmodule "/usr/local/lib/ser/modules/options.so"
# ------------- db_url setting
modparam("acc|auth_db|domain|group|speeddial|uri_db|usrloc",
"db_url", "mysql://ser:heslo@localhost/ser")
# ------------- use_domain setting
modparam("auth_db|group|speeddial|uri_db|usrloc", "use_domain", 1)
# ------------- accounting parameters
modparam("acc", "db_flag", 1)
modparam("acc", "db_missed_flag", 1)
modparam("acc", "log_fmt", "cdfimorstup")
modparam("acc", "log_level", 1)
modparam("acc", "failed_transactions", 1)
modparam("acc", "report_cancels", 1)
modparam("acc", "report_ack", 0)
# ------------- auth parameters
# allows clear text passwords in the mysql database
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
# ------------- domain parameters
modparam("domain", "db_mode", 1)
# ------------- exec parameters
modparam("exec", "setvars", 1)
modparam("exec", "time_to_kill", 10)
# ------------- registration parameters
modparam("registrar", "nat_flag", 2)
modparam("registrar", "min_expires", 60)
modparam("registrar", "max_expires", 86400)
modparam("registrar", "default_expires", 3600)
modparam("registrar", "desc_time_order", 1)
modparam("registrar", "append_branches", 1)
#-------------- nathelper parameters
modparam("nathelper", "natping_interval", 30)
modparam("nathelper", "ping_nated_only", 1)
# ------------- rr parameters
# set ";lr" tag to lr=true
modparam("rr", "enable_full_lr", 1)
# ------------- tm parameters
modparam("tm", "fr_timer", 20)
modparam("tm", "fr_inv_timer", 40)
modparam("tm", "wt_timer", 5)
# ------------- usrloc parameters
# 0 = disable
# 1 = write-through
# 2 = write-back
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "timer_interval", 60)
modparam("usrloc", "desc_time_order", 1)
# ------------- logging parameters
modparam("xlog", "buf_size", 8192)
route {
# ------------------------------------------------------------------------
# Sanity Check Section
# ------------------------------------------------------------------------
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483", "Too Many Hops");
break;
};
if (msg:len > max_len) {
sl_send_reply("513", "Message Overflow");
break;
};
# ------------------------------------------------------------------------
# OPTIONS Section
#
# This is used by sipsak to monitor the health of our sip proxy
# ------------------------------------------------------------------------
if (search("^From: sip:sipsak@") &&
(method=="OPTIONS") && (!uri=~"sip:.*[@]+.*")) {
options_reply();
break;
};
# ------------------------------------------------------------------------
# NAT Test Section
# ------------------------------------------------------------------------
if (nat_uac_test("3")) {
if (method=="REGISTER" || (!search("^Record-Route:"))) {
fix_nated_contact();
if (method=="REGISTER") {
fix_nated_register();
} else if (method=="INVITE") {
fix_nated_sdp("1");
};
force_rport();
setflag(2);
};
};
# ------------------------------------------------------------------------
# Registration Section
# ------------------------------------------------------------------------
if (method=="REGISTER") {
if (!is_from_local()) {
sl_send_reply("403", "Unknown Domain");
break;
};
if (is_user_in("Request-URI", "disabled")) {
sl_send_reply("403", "Your evaluation period has expired");
break;
};
if (!www_authorize("", "subscriber")) {
www_challenge("", "0");
break;
};
if (!check_to()) {
sl_send_reply("401", "Unauthorized");
break;
};
if (!save("location")) {
sl_reply_error();
};
break;
};
# ------------------------------------------------------------------------
# Open Relay Section
# ------------------------------------------------------------------------
if (method=="INVITE") {
if (!(is_from_local() || is_uri_host_local())) {
sl_send_reply("403", "Please register to use our service");
break;
};
};
# ------------------------------------------------------------------------
# Accounting Section
# ------------------------------------------------------------------------
if (method=="INVITE" || method=="BYE") {
setflag(1);
};
# ------------------------------------------------------------------------
# Record Route Section
#
# 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=="INVITE") record_route();
# ------------------------------------------------------------------------
# Loose Route Section
#
# Grant route routing if route headers present
# ------------------------------------------------------------------------
if (loose_route()) {
route(2);
break;
};
# ------------------------------------------------------------------------
# PSTN Section
#
# this is necessary so that calls coming from the PSTN
# gateway are honored in the
mycompany.com realm
# ------------------------------------------------------------------------
if (src_ip==110.50.60.70) {
rewritehost("sip.mycompany.com");
};
if (!(src_ip==110.50.60.70) && (uri=~"^sip:1[0-9]{10}@")) {
# If the number dialed is 1+ ten digits then we need to
# determine if the ten-digit number is in our location
# database or not. If it is then we strip off the one
# and dial it as a normal extension, otherwise we put
# the 1+ back on the dialed number and let it go out the
# PSTN gateway
strip(1);
if (lookup("location")) {
rewritehost("sip.mycompany.com");
} else {
prefix("1");
route(3);
break;
};
} else if (uri=~"^sip:911@.*") {
route(3);
break;
};
# ------------------------------------------------------------------------
# Alias Routing Section
# ------------------------------------------------------------------------
lookup("aliases");
if (!uri==myself) {
route(2);
break;
};
# ----------------------------------------------------------------
# Speed Dialing Section
# ----------------------------------------------------------------
if ((method=="INVITE") && (uri=~"^sip:[0-9]{2}@.*")) {
sd_lookup("speed_dial");
};
# ----------------------------------------------------------------
# Call Routing Section
# ----------------------------------------------------------------
if (!lookup("location")) {
sl_send_reply("404", "User Not Found");
break;
};
route(2);
}
route [1] {
# this route is used only for debugging
xlog("L_ERR", "%mb");
}
route [2] {
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 (isflagset(2)) {
force_rtp_proxy();
};
t_on_reply("1");
if (!t_relay()) {
sl_reply_error();
};
}
route[3] {
# send out emergency calls to pstn gateway immediately
if (uri=~"^sip:911@.*") {
rewritehost("110.50.60.70");
forward(uri:host, uri:port);
break;
};
if (!(src_ip==67.93.12.18) | (method=="ACK") | (method=="CANCEL") |
(method=="BYE")) {
if (!proxy_authorize("", "subscriber")) {
proxy_challenge("", "0");
break;
} else if ((method=="INVITE") & !check_from()) {
log(1, "Spoofed PSTN call attempt");
sl_send_reply("403", "Use From=ID");
break;
};
};
rewritehost("110.50.60.70");
strip(1);
route(2);
}
onreply_route[1] {
if (isflagset(2) && status =~ "(180)|(183)|2[0-9][0-9]") {
fix_nated_contact();
# Not all 2xx messages have a content body so here we
# make sure our Content-Length > 0 to avoide a parse error
if (!search("^Content-Length:\ 0")) {
force_rtp_proxy();
};
} else if (nat_uac_test("1")) {
fix_nated_contact();
};
}
__________________________________
Do you Yahoo!?
All your favorites on one personal page � Try My Yahoo!
http://my.yahoo.com