@ -139,30 +139,34 @@ loadmodule "xlog.so"
loadmodule "mi_fifo.so"
modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
######## UAC ########
loadmodule "uac.so"
######## UAC Redirection module ########
loadmodule "uac_redirect.so"
####### DB Text module ##########
loadmodule "db_text.so"
modparam("db_text", "db_mode", 1)
modparam("db_text", "emptystring", 1)
####### Kazoo Integration module ##########
loadmodule "db_ kazoo.so"
modparam("db_ kazoo", "node_hostname", "MY_HOSTNAME")
modparam("db_ kazoo", "amqp_connection", "MY_AMQP_URL")
loadmodule "kazoo.so"
modparam("kazoo", "node_hostname", "MY_HOSTNAME")
modparam("kazoo", "amqp_connection", "MY_AMQP_URL")
#!ifdef MY_AMQP_URL_SECONDARY
modparam("db_ kazoo", "amqp_connection", "MY_AMQP_URL_SECONDARY")
modparam("kazoo", "amqp_connection", "MY_AMQP_URL_SECONDARY")
#!endif
#!ifdef MY_AMQP_URL_TERTIARY
modparam("db_ kazoo", "amqp_connection", "MY_AMQP_URL_TERTIARY")
modparam("kazoo", "amqp_connection", "MY_AMQP_URL_TERTIARY")
#!endif
#!ifdef MY_AMQP_MAX_CHANNELS
modparam("db_ kazoo", "amqp_max_channels", MY_AMQP_MAX_CHANNELS)
modparam("kazoo", "amqp_max_channels", MY_AMQP_MAX_CHANNELS)
#!else
modparam("db_ kazoo", "amqp_max_channels", 100)
modparam("kazoo", "amqp_max_channels", 100)
#!endif
modparam("db_ kazoo", "amqp_internal_loop_count", 1);
modparam("db_ kazoo", "amqp_consumer_loop_count", 4);
modparam("kazoo", "amqp_internal_loop_count", 1);
modparam("kazoo", "amqp_consumer_loop_count", 4);
####### Role Configurations ##########
#!ifdef DISPATCHER-ROLE
@ -201,14 +205,14 @@ modparam("permissions", "db_mode", 1)
####### Routing Logic ########
route
{
route(SANITY_CHECK);
# log the basic info regarding this call
xlog("L_INFO", "$ci|start|recieved $oP request $rm $ou");
xlog("L_INFO", "$ci|start|recieved $pr request $rm $ou");
xlog("L_INFO", "$ci|log|source $si:$sp");
xlog("L_INFO", "$ci|log|from $fu");
xlog("L_INFO", "$ci|log|to $tu");
route(SANITY_CHECK);
route(CLASSIFY_SOURCE);
#!ifdef ANTIFLOOD-ROLE
@ -257,21 +261,21 @@ route
route[SANITY_CHECK]
{
if (!mf_process_maxfwd_header("10")) {
xlog("L_WARN", "$ci|end|too much hops, not enough barley");
send_reply("483", "Too Many Hops");
if (!sanity_check()) {
xlog("L_WARN", "$ci|end|message from $si:$sp is insane");
exit;
}
if (!sanity_check()) {
xlog("L_WARN", "$ci|end|message is insane");
if (!mf_process_maxfwd_header("10")) {
xlog("L_WARN", "$ci|end|too much hops, not enough barley from $si:$sp");
send_reply("483", "Too Many Hops");
exit;
}
if ($ua = = "friendly-scanner" ||
$ua = = "sundayddr" ||
$ua = ~ "sipcli" ) {
xlog("L_WARN", "$ci|end|dropping message with user-agent $ua");
xlog("L_WARN", "$ci|end|dropping message with user-agent $ua from $si:$sp ");
exit;
}
}
@ -298,6 +302,10 @@ route[HANDLE_OPTIONS]
route(FILTER_REQUEST_DOMAIN);
#!endif
#!ifdef NAT-TRAVERSAL-ROLE
route(NAT_TEST_AND_CORRECT);
#!endif
sl_send_reply("200", "Rawr!!");
}
exit;
@ -308,13 +316,31 @@ route[HANDLE_NOTIFY]
{
if (is_method("NOTIFY")) {
if (isflagset(FLAG_INTERNALLY_SOURCED)) {
if (registered("location")) {
lookup("location");
xlog("L_INFO", "$ci|log|routing to $ruid");
}
route(INTERNAL_TO_EXTERNAL_RELAY);
} else {
#!ifdef TRAFFIC-FILTER-ROLE
route(FILTER_REQUEST_DOMAIN);
#!endif
sl_send_reply("200", "Rawr!!");
#!ifdef WEBSOCKETS-ROLE
route(NAT_WEBSOCKETS_CORRECT);
#!endif
#!ifdef NAT-TRAVERSAL-ROLE
route(NAT_TEST_AND_CORRECT);
#!endif
if($hdr(Event) = = "keep-alive") {
xlog("L_INFO", "$ci|stop|replying to keep alive");
sl_send_reply("405", "Stay Alive / Method Not Allowed");
} else {
xlog("L_INFO", "$ci|stop|consuming event $hdr(Event)");
sl_send_reply("200", "Rawr!!");
}
}
exit;
}
@ -322,20 +348,52 @@ route[HANDLE_NOTIFY]
route[HANDLE_MESSAGE]
{
#!ifdef MESSAGE-ROLE
if (is_method("MESSAGE")) {
if (isflagset(FLAG_INTERNALLY_SOURCED)) {
xlog("L_INFO", "$ci|MESSAGE from $fu to $tu");
t_on_reply("MESSAGE_REPLY");
if (isflagset(FLAG_INTERNALLY_SOURCED) || src_ip = = myself) {
xlog("L_INFO", "$ci| routing MESSAGE to external from $fu to $tu");
if (registered("location")) {
lookup("location");
xlog("L_INFO", "$ci|log|routing to $ruid");
}
route(INTERNAL_TO_EXTERNAL_RELAY);
#!ifdef TRAFFIC-FILTER-ROLE
} else if (!isflagset(FLAG_TRUSTED_SOURCE)
&& $rd = ~ "[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}\.[0-9]{1,3}") {
xlog("L_WARN", "$ci|end|dropping MESSAGE request with IP domain");
#!endif
} else {
xlog("L_WARN", "$ci|end|MESSAGE $(hdr(Content-Type))");
if( $hdr(Content-Type) = = "application/im-iscomposing+xml" ) {
xlog("L_WARN", "$ci|end|dropping MESSAGE application/im-iscomposing+xml");
sl_send_reply("200", "OK");
} else {
route(DISPATCHER_FIND_ROUTES);
route(EXTERNAL_TO_INTERNAL_RELAY);
}
}
exit();
}
#!else
if (is_method("MESSAGE")) {
if (isflagset(FLAG_INTERNALLY_SOURCED)) {
route(INTERNAL_TO_EXTERNAL_RELAY);
} else {
sl_send_reply("202", "delivered to /dev/null");
exit;
exit() ;
}
}
#!endif
}
route[HANDLE_IN_DIALOG_REQUESTS]
{
if (has_totag()) {
if (is_method("INVITE")) {
setflag(FLAG_SESSION_PROGRESS);
record_route();
}
if (loose_route()) {
@ -522,6 +580,12 @@ onreply_route[INTERNAL_REPLY]
setflag(FLAG_SESSION_PROGRESS);
}
##### CALL-PARK ####
if (is_method("REFER") && t_check_status("(200)|(202)") ) {
$sht(park = >$(avp(refer_to_uri){uri.user})@$(avp(refer_to_uri){uri.domain})) = "sip:" + $(ct{tobody.uri}{uri.host}) + ":" + $(ct{tobody.uri}{uri.port});
xlog("L_INFO", "caching park info $(avp(refer_to_uri){uri.user})@$(avp(refer_to_uri){uri.domain}) = sip:$(ct{tobody.uri}{uri.host}):$(ct{tobody.uri}{uri.port})");
}
if ($rs < 300) {
xlog("L_INFO", "$ci|pass|$T_req($si):$T_req($sp)");
}
@ -625,7 +689,21 @@ event_route[kazoo:mod-init]
kazoo_subscribe("$var(payload)");
#!endif
#!ifdef MESSAGE-ROLE
$var(key) = "kamailio@MY_HOSTNAME";
$var(payload) = '{ "exchange" : "sms" , "type" : "topic", "queue" : "MSG-QUEUE-MY_HOSTNAME", "routing" : "message.route.' + $(var(key){kz.encode}) + '.*", "auto_delete" : 1, "durable" : 0, "no_ack" : 0, "wait_for_consumer_ack" : 1 }';
kazoo_subscribe("$var(payload)");
#!endif
#!ifdef REGISTRAR-ROLE
$var(payload) = "{ 'exchange' : 'callmgr' , 'type' : 'topic', 'queue' : 'MSG-FLUSH-MY_HOSTNAME', 'routing' : 'registration.flush.*', 'auto_delete' : 1, 'durable' : 0, 'no_ack' : 1, 'wait_for_consumer_ack' : 0 }";
kazoo_subscribe("$var(payload)");
#!endif
}
event_route[kazoo:consumer-event]