-
-
Save benlangfeld/1b61f41c31129e8f2db3 to your computer and use it in GitHub Desktop.
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 | |
# | |
#!define WITH_DEBUG | |
#!substdef "!REGISTRAR_IP!registrar.example.com!g" | |
#!substdef "!FLOW_TIMER!20!g" | |
####### Include Local Config If Exists ######### | |
import_file "kamailio-local.cfg" | |
####### Global Parameters ######### | |
### LOG Levels: 3=DBG, 2=INFO, 1=NOTICE, 0=WARN, -1=ERR | |
#!ifdef WITH_DEBUG | |
debug=4 | |
#!else | |
debug=2 | |
#!endif | |
log_stderror=no | |
memdbg=5 | |
memlog=5 | |
log_facility=LOG_LOCAL0 | |
fork=yes | |
children=4 | |
/* uncomment the next line to disable TCP (default on) */ | |
disable_tcp=no | |
tcp_accept_no_cl=yes | |
/* uncomment the next line to disable the auto discovery of local aliases | |
based on reverse DNS on IPs (default on) */ | |
#auto_aliases=no | |
/* add local domain aliases */ | |
#alias="sip.mydomain.com" | |
/* 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:cnpserver1:5060 | |
/* port to listen to | |
* - can be specified more than once if needed to listen on many ports */ | |
port=5060 | |
#!ifdef WITH_TLS | |
enable_tls=yes | |
#!endif | |
# life time of TCP connection when there is no traffic | |
# - a bit higher than registration expires to cope with UA behind NAT | |
tcp_connection_lifetime=3605 | |
listen=eth0 | |
tcp_connection_lifetime=30 # FLOW_TIMER + 10 | |
tcp_accept_no_cl=yes | |
tcp_rd_buf_size=16384 | |
force_rport=yes | |
####### Modules Section ######## | |
# set paths to location of modules (to sources or installation folders) | |
#!ifdef WITH_SRCPATH | |
mpath="modules_k:modules" | |
#!else | |
mpath="/usr/local/lib/kamailio/modules_k/:/usr/lib64/kamailio/modules/:/usr/lib/x86_64-linux-gnu/kamailio/modules/" | |
#!endif | |
loadmodule "mi_fifo.so" | |
loadmodule "kex.so" | |
loadmodule "corex.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 "cfg_rpc.so" | |
loadmodule "mi_rpc.so" | |
loadmodule "rtpproxy-ng.so" | |
loadmodule "stun.so" | |
loadmodule "outbound.so" | |
loadmodule "path.so" | |
#!ifdef WITH_TLS | |
loadmodule "tls.so" | |
#!endif | |
#!ifdef WITH_DEBUG | |
loadmodule "debugger.so" | |
#!endif | |
# ----------------- setting module-specific parameters --------------- | |
# ----- mi_fifo params ----- | |
modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo") | |
# ----- tm params ----- | |
# auto-discard branches from previous serial forking leg | |
modparam("tm", "failure_reply_mode", 3) | |
# default retransmission timeout: 30sec | |
modparam("tm", "fr_timer", 30000) | |
# default invite retransmission timeout after 1xx: 120sec | |
modparam("tm", "fr_inv_timer", 120000) | |
# ----- 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) | |
# ----- rtpproxy params ----- | |
modparam("rtpproxy-ng", "rtpproxy_sock", "udp:127.0.0.1:12221") | |
#!ifdef WITH_TLS | |
# ----- tls params ----- | |
modparam("tls", "config", "/home/kamailio-4.0/etc/kamailio/tls.cfg") | |
#!endif | |
#!ifdef WITH_DEBUG | |
# ----- debugger params ----- | |
modparam("debugger", "cfgtrace", 1) | |
#!endif | |
####### Routing Logic ######## | |
request_route { | |
route(REQINIT); | |
if (is_method("CANCEL")) { | |
if (t_check_trans()) { | |
route(RELAY); | |
} | |
exit; | |
} | |
route(WITHINDLG); | |
t_check_trans(); | |
if (is_method("REGISTER")) { | |
remove_hf("Route"); | |
add_path(); | |
$du = "sip:REGISTRAR_IP"; | |
} else { | |
if (is_method("INVITE|SUBSCRIBE")) | |
record_route(); | |
if (@via[2] == "") { | |
# From client so route to registrar... | |
rtpproxy_manage("coSP+"); | |
if ($rU == $null) { | |
sl_send_reply("484", "Address Incomplete"); | |
exit; | |
} | |
remove_hf("Route"); | |
$du = "sip:REGISTRAR_IP"; | |
} else { | |
# From registrar so route using "Route:" headers... | |
rtpproxy_manage("cosp+"); | |
t_on_failure("FAIL_OUTBOUND"); | |
} | |
} | |
route(RELAY); | |
} | |
route[RELAY] { | |
if (!t_relay()) { | |
sl_reply_error(); | |
} | |
exit; | |
} | |
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; | |
} | |
} | |
route[WITHINDLG] { | |
if (has_totag()) { | |
if (!loose_route()) { | |
switch($rc) { | |
case -2: | |
sl_send_reply("403", "Forbidden"); | |
exit; | |
default: | |
if (is_method("ACK")) { | |
if ( t_check_trans() ) { | |
route(RELAY); | |
exit; | |
} else { | |
exit; | |
} | |
} | |
sl_send_reply("404","Not Found"); | |
} | |
} else { | |
if (is_method("NOTIFY")) { | |
record_route(); | |
} | |
route(RELAY); | |
} | |
exit; | |
} | |
} | |
onreply_route { | |
if (!t_check_trans()) { | |
drop; | |
} | |
rtpproxy_manage("coSP+"); | |
if ($rm == "REGISTER" && $rs >= 200 && $rs <= 299) { | |
remove_hf("Flow-Timer"); | |
if ($(hdr(Require)[*])=~"outbound") | |
insert_hf("Flow-Timer: FLOW_TIMER\r\n", "Call-ID"); | |
} | |
} | |
failure_route[FAIL_OUTBOUND] { | |
if (t_branch_timeout() || !t_branch_replied()) { | |
send_reply("430", "Flow Failed"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment