mirror of https://github.com/sipwise/kamailio.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
5.7 KiB
153 lines
5.7 KiB
######################################################################
|
|
# Terminating, Initial requests
|
|
######################################################################
|
|
route[MT] {
|
|
xnotice("PCSCF MT: \n Destination URI: $du\n Request URI: $ru\n");
|
|
xnotice("Source IP and Port: ($si:$sp)\n Route-URI: $route_uri\n");
|
|
xnotice("Received IP and Port: ($Ri:$Rp)\n");
|
|
xnotice("Contact header: $ct\n");
|
|
set_dlg_profile("term");
|
|
#!ifdef WITH_IPSEC
|
|
ipsec_forward("location", IPSEC_FORWARD_FLAGS);
|
|
#!endif
|
|
t_on_reply("MT_reply");
|
|
}
|
|
|
|
######################################################################
|
|
# Replies to Originating Initial Requests
|
|
######################################################################
|
|
onreply_route[MT_reply] {
|
|
xnotice("PCSCF MT_reply: \n Destination URI: $du\n Request URI: $ru\n");
|
|
xnotice("Source IP and Port: ($si:$sp)\n Route-URI: $route_uri\n");
|
|
xnotice("Received IP and Port: ($Ri:$Rp)\n");
|
|
xnotice("Contact header: $ct\n");
|
|
if (!strempty($(ct{tobody.params}))) {
|
|
append_hf("C-Params: $(ct{tobody.params})\r\n");
|
|
}
|
|
|
|
# In case of 1xx and 2xx do NAT
|
|
if(status=~"[12][0-9][0-9]")
|
|
route(NATMANAGE);
|
|
#!ifdef WITH_RX
|
|
if (t_check_status("183|200") && has_body("application/sdp")){
|
|
xnotice("PCSCF MT_reply: \n Destination URI: $du\n Request URI: $ru\n");
|
|
xnotice("Source IP and Port: ($si:$sp)\n Route-URI: $route_uri\n");
|
|
xnotice("Received IP and Port: ($Ri:$Rp)\n");
|
|
xnotice("Contact header: $ct\n");
|
|
xlog("L_DBG", "IMS: Received 183 inside term_initial_reply\n");
|
|
|
|
xlog("L_DBG", "About to test if this is a retransmitted reply which is still currently suspended\n");
|
|
if (t_is_retr_async_reply()) {
|
|
xlog("L_DBG", "Dropping retransmitted reply which is still currently suspended\n");
|
|
drop();
|
|
}
|
|
|
|
xlog("L_DBG","Diameter: Term authorizing media via Rx\n");
|
|
$avp(FTAG_CUSTOM_AVP)=$ft;
|
|
$avp(TTAG_CUSTOM_AVP)=$tt;
|
|
$avp(CALLID_CUSTOM_AVP)=$ci;
|
|
|
|
if (Rx_AAR("MT_aar_reply","term","",-1) == 0) {
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
|
|
route[MT_aar_reply]
|
|
{
|
|
xlog("L_DBG", "IMS: TERM_SESSION_AAR_REPLY\n");
|
|
|
|
#this is async so to know status we have to check the reply avp
|
|
switch ($avp(s:aar_return_code)) {
|
|
case 1:
|
|
xlog("L_DBG", "Diameter: Orig AAR success on media authorization\n");
|
|
break;
|
|
default:
|
|
xlog("L_ERR", "IMS: AAR failed Orig\n");
|
|
xlog("L_ERR", "IMS: ttag: "+ "$avp(TTAG_CUSTOM_AVP)");
|
|
xlog("L_ERR", "IMS: ftag: "+ "$avp(FTAG_CUSTOM_AVP)");
|
|
xlog("L_ERR", "IMS: callid: "+ "$avp(CALLID_CUSTOM_AVP)");
|
|
#comment this if you want to allow even if Rx fails
|
|
if(dlg_get("$avp(CALLID_CUSTOM_AVP)","$avp(FTAG_CUSTOM_AVP)","$avp(TTAG_CUSTOM_AVP)")){
|
|
dlg_terminate("all", "Sorry no QoS available");
|
|
exit;
|
|
}
|
|
}
|
|
#!endif
|
|
}
|
|
|
|
|
|
######################################################################
|
|
# In-Dialog-MT-Requests
|
|
######################################################################
|
|
route[MT_indialog] {
|
|
xnotice("PCSCF MT_indialog: \n Destination URI: $du\n Request URI: $ru\n");
|
|
xnotice("Source IP and Port: ($si:$sp)\n Route-URI: $route_uri\n");
|
|
xnotice("Received IP and Port: ($Ri:$Rp)\n");
|
|
xnotice("Contact header: $ct\n");
|
|
#resetflag(FLT_MOBILE_ORIG);
|
|
t_on_reply("MT_indialog_reply");
|
|
|
|
# Append rport only if its a request coming from UE
|
|
if (is_request() && ($hdrc(Via) == 1)) {
|
|
force_rport();
|
|
}
|
|
|
|
#!ifdef WITH_IPSEC
|
|
if ($dd != "" && $rd != "" && $fs != "") {
|
|
if ($rd =~ ".*" + $dd + ".*") {
|
|
ipsec_forward("location", IPSEC_FORWARD_FLAGS);
|
|
}
|
|
}
|
|
#!endif
|
|
}
|
|
|
|
onreply_route[MT_indialog_reply] {
|
|
xnotice("PCSCF MT_indialog_reply: \n Destination URI: $du\n Request URI: $ru\n");
|
|
xnotice("Source IP and Port: ($si:$sp)\n Route-URI: $route_uri\n");
|
|
xnotice("Received IP and Port: ($Ri:$Rp)\n");
|
|
xnotice("Contact header: $ct\n");
|
|
# In case of 1xx and 2xx do NAT
|
|
if(status=~"[12][0-9][0-9]")
|
|
route(NATMANAGE);
|
|
|
|
#!ifdef WITH_RX
|
|
if (t_check_status("183|200") && has_body("application/sdp") && !is_method("PRACK")) {
|
|
if (t_is_retr_async_reply()) {
|
|
xlog("L_DBG", "Dropping retransmitted reply which is still currently suspended\n");
|
|
drop();
|
|
}
|
|
|
|
xlog("L_DBG", "IMS: TERM_SUBSEQUENT reply. This is a 200 OK to a re-INVITE\n");
|
|
xlog("L_DBG","Diameter: Term authorizing media via Rx\n");
|
|
$avp(FTAG_CUSTOM_AVP)=$ft;
|
|
$avp(TTAG_CUSTOM_AVP)=$tt;
|
|
$avp(CALLID_CUSTOM_AVP)=$ci;
|
|
|
|
if (Rx_AAR("MT_indialog_aar_reply","term","",-1) == 0) {
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
|
|
route[MT_indialog_aar_reply]
|
|
{
|
|
#this is async so to know status we have to check the reply avp
|
|
switch ($avp(s:aar_return_code)) {
|
|
case 1:
|
|
xlog("L_DBG", "Diameter: Orig AAR success on media authorization\n");
|
|
break;
|
|
default:
|
|
xlog("L_ERR", "IMS: AAR failed Orig\n");
|
|
xlog("L_ERR", "IMS: ttag: "+ "$avp(TTAG_CUSTOM_AVP)");
|
|
xlog("L_ERR", "IMS: ftag: "+ "$avp(FTAG_CUSTOM_AVP)");
|
|
xlog("L_ERR", "IMS: callid: "+ "$avp(CALLID_CUSTOM_AVP)");
|
|
#comment this if you want to allow even if Rx fails
|
|
if(dlg_get("$avp(CALLID_CUSTOM_AVP)","$avp(FTAG_CUSTOM_AVP)","$avp(TTAG_CUSTOM_AVP)")){
|
|
dlg_terminate("all", "Sorry no QoS available");
|
|
exit;
|
|
}
|
|
}
|
|
#!endif
|
|
}
|