diff --git a/kamailio/default.cfg b/kamailio/default.cfg index 0a35470..11bbbaa 100644 --- a/kamailio/default.cfg +++ b/kamailio/default.cfg @@ -530,6 +530,13 @@ route[EXTERNAL_TO_INTERNAL_RELAY] } #!endif + ##### CALL-PARK #### + if(is_method("REFER")) { + $avp(refer_to) = $hdr(Refer-To); + $avp(refer_to_uri) = $rt; + $avp(referred_by) = $hdr(Referred-By); + } + remove_hf_re("^X-.*"); append_hf("X-AUTH-IP: $si\r\n"); @@ -578,6 +585,12 @@ onreply_route[INTERNAL_REPLY] setflag(FLAG_SESSION_PROGRESS); } + ##### CALL-PARK #### + if (is_method("REFER") && $T_reply_code == "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", "PARK $(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)"); } diff --git a/kamailio/dispatcher-role.cfg b/kamailio/dispatcher-role.cfg index d5e99b2..9cee94e 100644 --- a/kamailio/dispatcher-role.cfg +++ b/kamailio/dispatcher-role.cfg @@ -1,5 +1,6 @@ ######## Generic Hash Table container in shared memory ######## modparam("htable", "htable", "failover=>size=16;autoexpire=120") +modparam("htable", "htable", "park=>size=4;autoexpire=600") ####### Dispatcher module ######## loadmodule "dispatcher.so" @@ -69,6 +70,7 @@ route[DISPATCHER_FIND_ROUTES] #!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)"); @@ -82,6 +84,15 @@ route[DISPATCHER_FIND_ROUTES] } } } + + ##### CALL-PARK #### + if($(ru{uri.user}) =~ "\*3" && $sht(park=>$(ru{uri.user})@$(ru{uri.domain})) != $null) { + $du = $sht(park=>$(ru{uri.user})@$(ruri{uri.domain})); + $sht(park=>$(ru{uri.user})@$(ruri{uri.domain})) = $null; + xlog("L_INFO", "$ci|log|redirecting park request to $du"); + return; + } + } if (!ds_select_dst("$var(ds_group)", "0") || $(avp(ds_dst)[0]) == $null) {