Created
March 14, 2013 21:16
-
-
Save iwanbk/5165361 to your computer and use it in GitHub Desktop.
Simple kamailio dispatcher config, taken from http://kamailio.org/docs/modules/4.0.x/modules/dispatcher.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!KAMAILIO | |
# | |
# sample config file for dispatcher module | |
# - load balancing of VoIP calls with round robin | |
# - no TPC listening | |
# - don't dispatch REGISTER and presence requests | |
# | |
# Kamailio (OpenSER) SIP Server v3.2 | |
# - web: http://www.kamailio.org | |
# - git: http://sip-router.org | |
# | |
# Direct your questions about this file to: [email protected] | |
# | |
# Refer to the Core CookBook at http://www.kamailio.org/dokuwiki/doku.php | |
# for an explanation of possible statements, functions and parameters. | |
# | |
# Several features can be enabled using '#!define WITH_FEATURE' directives: | |
# | |
# *** To run in debug mode: | |
# - define WITH_DEBUG | |
# | |
####### Global Parameters ######### | |
#!ifdef WITH_DEBUG | |
debug=4 | |
log_stderror=yes | |
#!else | |
debug=2 | |
log_stderror=no | |
#!endif | |
memdbg=5 | |
memlog=5 | |
log_facility=LOG_LOCAL0 | |
fork=yes | |
children=4 | |
/* comment the next line to enable TCP */ | |
disable_tcp=yes | |
/* uncomment the next line to disable the auto discovery of local aliases | |
based on revers DNS on IPs (default on) */ | |
auto_aliases=no | |
/* add local domain aliases */ | |
# alias="mysipserver.com" | |
port=5060 | |
/* uncomment and configure the following line if you want Kamailio to | |
bind on a specific interface/port/proto (default bind on all available) */ | |
# listen=udp:127.0.0.1:5060 | |
sip_warning=no | |
####### Modules Section ######## | |
#set module path | |
mpath="/usr/local/lib/kamailio/modules_k/:/usr/local/lib/kamailio/modules/" | |
loadmodule "db_mysql.so" | |
loadmodule "mi_fifo.so" | |
loadmodule "kex.so" | |
loadmodule "tm.so" | |
loadmodule "tmx.so" | |
loadmodule "sl.so" | |
loadmodule "rr.so" | |
loadmodule "pv.so" | |
loadmodule "maxfwd.so" | |
loadmodule "textops.so" | |
loadmodule "siputils.so" | |
loadmodule "xlog.so" | |
loadmodule "sanity.so" | |
loadmodule "ctl.so" | |
loadmodule "mi_rpc.so" | |
loadmodule "acc.so" | |
loadmodule "dispatcher.so" | |
# ----------------- setting module-specific parameters --------------- | |
# ----- mi_fifo params ----- | |
modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo") | |
# ----- rr params ----- | |
# add value to ;lr param to cope with most of the UAs | |
modparam("rr", "enable_full_lr", 1) | |
# do not append from tag to the RR (no need for this script) | |
modparam("rr", "append_fromtag", 0) | |
# ----- acc params ----- | |
modparam("acc", "log_flag", 1) | |
modparam("acc", "failed_transaction_flag", 3) | |
modparam("acc", "log_extra", | |
"src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd;src_ip=$si") | |
# ----- tm params ----- | |
modparam("tm", "fr_timer", 2000) | |
modparam("tm", "fr_inv_timer", 40000) | |
# ----- dispatcher params ----- | |
modparam("dispatcher", "db_url", | |
"mysql://openser:openserro@localhost/openser") | |
modparam("dispatcher", "table_name", "dispatcher") | |
modparam("dispatcher", "flags", 2) | |
modparam("dispatcher", "dst_avp", "$avp(AVP_DST)") | |
modparam("dispatcher", "grp_avp", "$avp(AVP_GRP)") | |
modparam("dispatcher", "cnt_avp", "$avp(AVP_CNT)") | |
####### Routing Logic ######## | |
# main request routing logic | |
route { | |
# per request initial checks | |
route(REQINIT); | |
# handle requests within SIP dialogs | |
route(WITHINDLG); | |
### only initial requests (no To tag) | |
# CANCEL processing | |
if (is_method("CANCEL")) | |
{ | |
if (t_check_trans()) | |
t_relay(); | |
exit; | |
} | |
t_check_trans(); | |
# record routing for dialog forming requests (in case they are routed) | |
# - remove preloaded route headers | |
remove_hf("Route"); | |
if (is_method("INVITE|SUBSCRIBE")) | |
record_route(); | |
# account only INVITEs | |
if (is_method("INVITE")) | |
{ | |
setflag(1); # do accounting | |
} | |
# handle presence related requests | |
route(PRESENCE); | |
# handle registrations | |
route(REGISTRAR); | |
if ($rU==$null) | |
{ | |
# request with no Username in RURI | |
sl_send_reply("484","Address Incomplete"); | |
exit; | |
} | |
# dispatch destinations | |
route(DISPATCH); | |
route(RELAY); | |
} | |
route[RELAY] { | |
if (!t_relay()) { | |
sl_reply_error(); | |
} | |
exit; | |
} | |
# Per SIP request initial checks | |
route[REQINIT] { | |
if (!mf_process_maxfwd_header("10")) { | |
sl_send_reply("483","Too Many Hops"); | |
exit; | |
} | |
if(!sanity_check("1511", "7")) | |
{ | |
xlog("Malformed SIP message from $si:$sp\n"); | |
exit; | |
} | |
} | |
# Handle requests within SIP dialogs | |
route[WITHINDLG] { | |
if (has_totag()) { | |
# sequential request withing a dialog should | |
# take the path determined by record-routing | |
if (loose_route()) { | |
if (is_method("BYE")) { | |
setflag(1); # do accounting ... | |
setflag(3); # ... even if the transaction fails | |
} | |
route(RELAY); | |
} else { | |
if (is_method("SUBSCRIBE") && uri == myself) { | |
# in-dialog subscribe requests | |
route(PRESENCE); | |
exit; | |
} | |
if ( is_method("ACK") ) { | |
if ( t_check_trans() ) { | |
# non loose-route, but stateful ACK; | |
# must be ACK after a 487 or e.g. 404 from upstream server | |
t_relay(); | |
exit; | |
} else { | |
# ACK without matching transaction ... ignore and discard. | |
exit; | |
} | |
} | |
sl_send_reply("404","Not here"); | |
} | |
exit; | |
} | |
} | |
# Handle SIP registrations | |
route[REGISTRAR] { | |
if(!is_method("REGISTER")) | |
return; | |
sl_send_reply("404", "No registrar"); | |
exit; | |
} | |
# Presence server route | |
route[PRESENCE] { | |
if(!is_method("PUBLISH|SUBSCRIBE")) | |
return; | |
sl_send_reply("404", "Not here"); | |
exit; | |
} | |
# Dispatch requests | |
route[DISPATCH] { | |
# round robin dispatching on gateways group '1' | |
if(!ds_select_dst("1", "4")) | |
{ | |
send_reply("404", "No destination"); | |
exit; | |
} | |
xlog("L_DBG", "--- SCRIPT: going to <$ru> via <$du>\n"); | |
t_on_failure("RTF_DISPATCH"); | |
return; | |
} | |
# Sample failure route | |
failure_route[RTF_DISPATCH] { | |
if (t_is_canceled()) { | |
exit; | |
} | |
# next DST - only for 500 or local timeout | |
if (t_check_status("500") | |
or (t_branch_timeout() and !t_branch_replied())) | |
{ | |
if(ds_next_dst()) | |
{ | |
t_on_failure("RTF_DISPATCH"); | |
route(RELAY); | |
exit; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment