Browse Source

Merge pull request #19 from 2600hz/KAZOO-2870

KAZOO-2870 - adapt the configuration and script
3.17
bitbashing 11 years ago
parent
commit
92e5ab2b1e
5 changed files with 143 additions and 33 deletions
  1. +28
    -0
      kamailio/default.cfg
  2. +17
    -0
      kamailio/dispatcher-role.cfg
  3. +27
    -11
      kamailio/presence-role.cfg
  4. +54
    -22
      kamailio/registrar-role.cfg
  5. +17
    -0
      system/security/limits.d/kamailio.limits.conf

+ 28
- 0
kamailio/default.cfg View File

@ -150,6 +150,21 @@ modparam("db_text", "db_mode", 1)
####### Kazoo Integration module ########## ####### Kazoo Integration module ##########
loadmodule "db_kazoo.so" loadmodule "db_kazoo.so"
modparam("db_kazoo", "node_hostname", "MY_HOSTNAME") modparam("db_kazoo", "node_hostname", "MY_HOSTNAME")
modparam("db_kazoo", "register_fs_path", "MY_IP_ADDRESS")
modparam("db_kazoo", "amqp_connection", "MY_AMQP_URL")
#!ifdef MY_AMQP_URL_SECONDARY
modparam("db_kazoo", "amqp_connection", "MY_AMQP_URL_SECONDARY")
#!endif
#!ifdef MY_AMQP_URL_TERTIARY
#modparam("db_kazoo", "amqp_connection", "MY_AMQP_URL_TERTIARY")
#!endif
#!ifdef MY_AMQP_MAX_CHANNELS
modparam("db_kazoo", "amqp_max_channels", MY_AMQP_MAX_CHANNELS)
#!else
modparam("db_kazoo", "amqp_max_channels", 100)
#!endif
modparam("db_kazoo", "amqp_internal_loop_count", 1);
modparam("db_kazoo", "amqp_consumer_loop_count", 3);
####### Role Configurations ########## ####### Role Configurations ##########
#!ifdef DISPATCHER-ROLE #!ifdef DISPATCHER-ROLE
@ -583,4 +598,17 @@ onsend_route {
xlog("L_INFO", "$ci|pass|$sndfrom(ip):$sndfrom(port) -> $sndto(ip):$sndto(port)"); xlog("L_INFO", "$ci|pass|$sndfrom(ip):$sndfrom(port) -> $sndto(ip):$sndto(port)");
} }
event_route[kazoo:mod-init]
{
#!ifdef PRESENCE-ROLE
kazoo_subscribe("dialoginfo", "direct", "BLF-QUEUE-MY_HOSTNAME", "BLF-MY_HOSTNAME");
#!endif
}
event_route[kazoo:consumer-event]
{
xlog("L_INFO","unhandled AMQP event, payload: $kzE");
}
# vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab

+ 17
- 0
kamailio/dispatcher-role.cfg View File

@ -68,6 +68,23 @@ route[DISPATCHER_FIND_ROUTES]
} }
#!endif #!endif
if (is_method("INVITE")) {
if($hdr(Replaces)!= $null) {
$var(replaced_call_id) = $(hdr(Replaces){s.select,0,;});
xlog("L_INFO", "$ci|log|replaces call-id $var(replaced_call_id)");
$var(amqp_payload_request) = "{'Event-Category' : 'call_event' , 'Event-Name' : 'channel_status_req', 'Call-ID' : '$var(replaced_call_id)', 'Active-Only' : false }";
$var(amqp_routing_key) = "call.status_req." + $var(replaced_call_id);
if(kazoo_query("callevt", $var(amqp_routing_key), $var(amqp_payload_request), "$var(amqp_result)")) {
xlog("L_INFO", "$ci|log|amqp_result = $var(amqp_result)");
kazoo_json("$var(amqp_result)", "Switch-URL", "$du");
if($du != $null) {
xlog("L_INFO", "$ci|log|call-id $var(replaced_call_id) found redirecting call to $du, courtesy of kazoo");
return;
}
}
}
}
if (!ds_select_dst("$var(ds_group)", "0") || $(avp(ds_dst)[0]) == $null) { if (!ds_select_dst("$var(ds_group)", "0") || $(avp(ds_dst)[0]) == $null) {
# if we selected from group 1, try again in group 2 # if we selected from group 1, try again in group 2
if ($var(ds_group) == 1) { if ($var(ds_group) == 1) {


+ 27
- 11
kamailio/presence-role.cfg View File

@ -1,34 +1,29 @@
######## Generic Hash Table container in shared memory ########
modparam("htable", "htable", "dbkp=>size=16;autoexpire=7200")
######## Presence server module ######## ######## Presence server module ########
loadmodule "presence.so" loadmodule "presence.so"
loadmodule "presence_dialoginfo.so" loadmodule "presence_dialoginfo.so"
loadmodule "presence_mwi.so" loadmodule "presence_mwi.so"
loadmodule "presence_xml.so" loadmodule "presence_xml.so"
modparam("presence", "subs_db_mode", 1)
modparam("presence", "subs_db_mode", 0)
modparam("presence", "expires_offset", 60) modparam("presence", "expires_offset", 60)
modparam("presence", "publ_cache", 0) modparam("presence", "publ_cache", 0)
modparam("presence", "min_expires", 0) modparam("presence", "min_expires", 0)
modparam("presence", "max_expires", 3600) modparam("presence", "max_expires", 3600)
modparam("presence", "db_url", "MY_AMQP_URL/dialoginfo") modparam("presence", "db_url", "MY_AMQP_URL/dialoginfo")
modparam("presence", "send_fast_notify", 0) modparam("presence", "send_fast_notify", 0)
modparam("presence", "clean_period", 10)
modparam("presence", "clean_period", 30)
modparam("presence_xml", "integrated_xcap_server", 1)
modparam("presence_xml", "db_url", "MY_AMQP_URL/dialoginfo")
modparam("presence_xml", "force_active", 1) modparam("presence_xml", "force_active", 1)
######## Presence User Agent module ######## ######## Presence User Agent module ########
loadmodule "pua.so" loadmodule "pua.so"
modparam("pua", "db_mode", 0) modparam("pua", "db_mode", 0)
modparam("pua", "db_url", "MY_AMQP_URL/dialoginfo")
modparam("pua", "db_url", "text:///etc/kazoo/kamailio/dbtext")
modparam("pua", "update_period", 6)
modparam("pua", "min_expires", 300) modparam("pua", "min_expires", 300)
modparam("pua", "outbound_proxy", "sip:MY_IP_ADDRESS") modparam("pua", "outbound_proxy", "sip:MY_IP_ADDRESS")
loadmodule "pua_dialoginfo.so"
modparam("pua_dialoginfo", "library_mode", 1)
####### Presence Logic ######## ####### Presence Logic ########
route[HANDLE_SUBSCRIBE] route[HANDLE_SUBSCRIBE]
@ -42,7 +37,20 @@ route[HANDLE_SUBSCRIBE]
sl_reply_error(); sl_reply_error();
exit; exit;
} }
handle_subscribe(); handle_subscribe();
##RabbitMQ
$var(fs_path) = "%3C" + $rz + "%3A" + $Ri + "%3A" + $Rp + "%3Btransport=" + $proto + "%3Blr%3Breceived=" + $si+":"+$sp+"%3E";
$var(fs_contact) = "<" + $(ct{tobody.uri}) + ";fs_path=" + $var(fs_path) + ">";
if($(ct{tobody.params}) != $null) {
$var(fs_contact) = $var(fs_contact) + ";" + $(ct{tobody.params});
}
$var(amqp_payload_request) = "{'Event-Category' : 'presence', 'Event-Name' : 'subscription', 'Event-Package' : '" + $hdr(event) + "', 'Expires' : " + $hdr(Expires) + ", 'Queue' : 'BLF-MY_HOSTNAME', 'Server-ID' : 'BLF-MY_HOSTNAME' ,'Contact' : '" + $var(fs_contact) + "', 'Call-ID' : '" + $ci + "', 'From' : '" + $fu +"', 'User' : '" + $tu + "', 'User-Agent' : '" + $ua + "' }";
kazoo_publish("dialoginfo_subs", "dialoginfo_subs", $var(amqp_payload_request));
t_release(); t_release();
exit; exit;
} }
@ -55,10 +63,18 @@ route[HANDLE_PUBLISH]
sl_reply_error(); sl_reply_error();
exit; exit;
} }
handle_publish();
if($hdr(Sender)!= $null)
handle_publish("$hdr(Sender)");
else
handle_publish();
t_release(); t_release();
exit; exit;
} }
} }
event_route[kazoo:consumer-event-presence-update]
{
kazoo_pua_publish($kzE);
}
# vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab

+ 54
- 22
kamailio/registrar-role.cfg View File

@ -4,16 +4,10 @@ modparam("htable", "htable", "failed_auth_hash=>size=14;autoexpire=180;")
####### Authentication Interface module ########## ####### Authentication Interface module ##########
loadmodule "auth.so" loadmodule "auth.so"
loadmodule "auth_db.so"
modparam("auth_db", "use_domain", 1)
modparam("auth_db", "version_table", 0)
modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")
modparam("auth_db", "load_credentials", "$avp(password)=password")
####### User Location Implementation module ########## ####### User Location Implementation module ##########
loadmodule "usrloc.so" loadmodule "usrloc.so"
modparam("usrloc", "db_mode", 1)
modparam("usrloc", "db_mode", 0)
modparam("usrloc", "db_update_as_insert", 1) modparam("usrloc", "db_update_as_insert", 1)
modparam("usrloc", "use_domain", 1) modparam("usrloc", "use_domain", 1)
modparam("usrloc", "nat_bflag", FLB_NATB) modparam("usrloc", "nat_bflag", FLB_NATB)
@ -34,8 +28,6 @@ modparam("registrar", "received_avp", "$avp(AVP_RECV_PARAM)")
modparam("registrar", "min_expires", 300) modparam("registrar", "min_expires", 300)
modparam("registrar", "max_expires", 3600) modparam("registrar", "max_expires", 3600)
####### Common Module Parameters ##########
modparam("auth_db|usrloc", "db_url", "MY_AMQP_URL/callmgr")
####### Registrar Logic ######## ####### Registrar Logic ########
route[HANDLE_REGISTER] route[HANDLE_REGISTER]
@ -69,26 +61,41 @@ route[HANDLE_REGISTER]
#!endif #!endif
if ($sht(auth_cache=>$Au) != $null && pv_auth_check("$fd", "$sht(auth_cache=>$Au)", "0", "0")) { if ($sht(auth_cache=>$Au) != $null && pv_auth_check("$fd", "$sht(auth_cache=>$Au)", "0", "0")) {
xlog("L_DBG", "$ci|log|authenticated $Au via cached SIP creds");
xlog("L_INFO", "$ci|log|authenticated $Au via cached SIP creds");
} else { } else {
## RABBITMQ - Credentials fetch ## RABBITMQ - Credentials fetch
if (!auth_check("$fd", "subscriber", "1")) {
#!ifdef TRAFFIC-FILTER-ROLE
route(FAILED_AUTH_COUNT);
#!endif
$var(amqp_payload_request) = "{'Event-Category' : 'directory' , 'Event-Name' : 'authn_req', 'Method' : 'REGISTER', 'Auth-Realm' : '" + $fd + "', 'Auth-User' : '" + $fU + "', 'From' : '" + $fu + "', 'To' : '" + $tu +"' }";
$var(amqp_routing_key) = "authn.req." + $(fd{kz.encode});
if(kazoo_query("callmgr", $var(amqp_routing_key), $var(amqp_payload_request))) {
$var(password) = $(kzR{kz.json,Auth-Password});
if($var(password) != $null) {
if (!pv_auth_check("$fd", "$var(password)", "0", "0")) {
#!ifdef TRAFFIC-FILTER-ROLE
route(FAILED_AUTH_COUNT);
#!endif
auth_challenge("$fd", "0");
xlog("L_INFO", "$ci|end|failed registration attempt from $si:$sp for $Au");
exit;
} else {
xlog("L_DBG", "$ci|log|caching SIP credentials for $Au");
$sht(auth_cache=>$Au) = $var(password);
}
} else {
auth_challenge("$fd", "0");
xlog("L_INFO", "$ci|log|error getting password from kazoo response");
exit;
}
} else {
auth_challenge("$fd", "0"); auth_challenge("$fd", "0");
xlog("L_INFO", "$ci|end|failed registration attempt from $si:$sp for $Au");
xlog("L_INFO", "$ci|log|error query kazoo for credentials");
exit; exit;
} else {
xlog("L_DBG", "$ci|log|caching SIP credentials for $Au");
$sht(auth_cache=>$Au) = $avp(password);
} }
} }
} else { } else {
auth_challenge("$fd", "0"); auth_challenge("$fd", "0");
xlog("L_INFO", "$ci|end|issued new auth challenge to new registration attempt");
xlog("L_INFO", "$ci|end|issued new auth challenge to registration attempt from $Au $si:$sp");
exit; exit;
} }
@ -96,7 +103,32 @@ route[HANDLE_REGISTER]
consume_credentials(); consume_credentials();
save("location"); save("location");
xlog("L_INFO", "$ci|end|successful registration with contact $ct");
$var(expires) = @contact.expires;
if($var(expires) == $null) {
$var(expires) = $hdr(Expires);
}
if($var(expires) == $null) {
$var(expires) = 190;
}
$var(fs_path) = "%3C" + $rz + "%3A" + $Ri + "%3A" + $Rp + "%3Btransport=" + $proto + "%3Blr%3Breceived=" + $si+":"+$sp+"%3E";
$var(fs_contact) = "<" + $(ct{tobody.uri}) + ";fs_path=" + $var(fs_path) + ">";
if($(ct{tobody.params}) != $null) {
$var(fs_contact) = $var(fs_contact) + ";" + $(ct{tobody.params});
}
xlog("L_INFO", "$ci|end|successful registration with contact $var(fs_contact)");
$var(register_contants) = " 'Presence-Hosts' : 'n/a', 'Profile-Name' : 'sipinterface_1', 'Status' : 'Registered', 'Event-Timestamp' : '" + $TS + "'";
if($var(expires) != $null) {
$var(register_contants) = $var(register_contants) + ", 'Expires' : " + $var(expires);
}
$var(amqp_payload_request) = "{'Event-Category' : 'directory', 'Event-Name' : 'reg_success', 'Contact' : '" + $var(fs_contact) + "', 'Call-ID' : '" + $ci + "', 'Realm' : '" + $fd +"', 'Username' : '" + $fU + "', 'From-User' : '" + $fU + "', 'From-Host' : '" + $fd + "', 'To-User' : '" + $tU +"', 'To-Host' : '" + $td + "', 'User-Agent' : '" + $ua +"' ," + $var(register_contants)+ " }";
$var(amqp_routing_key) = "registration.success." + $(fd{kz.encode}) + "." + $fU;
kazoo_publish("callmgr", $var(amqp_routing_key), $var(amqp_payload_request));
exit; exit;
} }
} }


+ 17
- 0
system/security/limits.d/kamailio.limits.conf View File

@ -0,0 +1,17 @@
kamailio soft core unlimited
kamailio soft data unlimited
kamailio soft fsize unlimited
kamailio soft memlock unlimited
kamailio soft nofile 999999
kamailio soft rss unlimited
kamailio hard stack 240
kamailio soft cpu unlimited
kamailio soft nproc unlimited
kamailio soft as unlimited
kamailio soft priority -11
kamailio soft locks unlimited
kamailio soft sigpending unlimited
kamailio soft msgqueue unlimited
kamailio soft nice -11
kamailio soft nofile 65536
kamailio hard nofile 65536

Loading…
Cancel
Save