Browse Source

move work on redirect tracking to dev env

3.17
karl anderson 12 years ago
parent
commit
8f877e65d3
3 changed files with 32 additions and 21 deletions
  1. +25
    -15
      kamailio/default.cfg
  2. +6
    -5
      kamailio/dispatcher-role.cfg
  3. +1
    -1
      kamailio/roles.cfg

+ 25
- 15
kamailio/default.cfg View File

@ -16,6 +16,7 @@
#!define AVP_ROUTE_CNT "route_cnt" #!define AVP_ROUTE_CNT "route_cnt"
#!define AVP_ASSOCIATED_SERVER "associated_server" #!define AVP_ASSOCIATED_SERVER "associated_server"
#!define AVP_ASSOCIATE_CONTACT "associate_contact" #!define AVP_ASSOCIATE_CONTACT "associate_contact"
#!define AVP_REDIRECT_KEY "redirect_key"
####### Flags ####### ####### Flags #######
flags flags
@ -475,9 +476,14 @@ onreply_route[INTERNAL_REPLY]
xlog("L_INFO", "$ci|start|recieved internal reply $T_reply_code $rr"); xlog("L_INFO", "$ci|start|recieved internal reply $T_reply_code $rr");
xlog("L_INFO", "$ci|log|source $si:$sp"); xlog("L_INFO", "$ci|log|source $si:$sp");
if (t_check_status("(180)|(183)")) {
xlog("L_INFO", "$ci|log|session progress, only listening for redirects");
if (t_check_status("(180)|(183)|(200)")) {
xlog("L_INFO", "$ci|log|call setup, only listening for redirects");
setflag(FLAG_SESSION_PROGRESS); setflag(FLAG_SESSION_PROGRESS);
if ($avp(AVP_REDIRECT_KEY) != $null) {
xlog("L_INFO", "$ci|log|removing redirect mapping for $avp(AVP_REDIRECT_KEY)");
$sht(associations=>$avp(AVP_REDIRECT_KEY)) = $null;
}
} }
if ($rs < 300) { if ($rs < 300) {
@ -501,28 +507,32 @@ failure_route[INTERNAL_FAULT]
exit; exit;
} }
# if the failure case was something that we should recover
# from then try to find a new media server
# Handle redirects
$var(redirect) = @from.uri.user + "@" + @from.uri.host + "->"
+ @contact.uri.user + "@" + @contact.uri.host;
if (t_check_status("302")) { if (t_check_status("302")) {
## TODO - test this
## get_redirects("*");
if($T_rpl($hdr(X-Redirect-Server)) != $null) { if($T_rpl($hdr(X-Redirect-Server)) != $null) {
$var(from_uri) = @from.uri.user + "@" + @from.uri.host;
$sht(associations=>$var(redirect)) = $T_rpl($hdr(X-Redirect-Server));
xlog("L_INFO", "$ci|log|stored redirect mapping for $var(redirect) to $T_rpl($hdr(X-Redirect-Server))");
}
add_rcv_param("1");
$sht(associations=>$var(from_uri)) = $T_rpl($hdr(X-Redirect-Server));
} else if (!t_check_status("407")) {
xlog("L_INFO", "$ci|log|removing redirect mapping for $var(redirect)");
$sht(associations=>$var(redirect)) = $null;
}
xlog("L_INFO", "$ci|log|stored redirect mapping for $var(contact_uri) to $T_rpl($hdr(X-Redirect-Server))");
remove_hf_re("X-.*");
remove_hf("X-Redirect-Server");
}
}
# change 6xx to 4xx # change 6xx to 4xx
if (t_check_status("6[0-9][0-9]")) { if (t_check_status("6[0-9][0-9]")) {
$var(new_code) = "4" + $(T_reply_code{s.substr,1,0}); $var(new_code) = "4" + $(T_reply_code{s.substr,1,0});
xlog("L_INFO", "$ci|log|sending 6XX reply as $var(new_code) $var(reply_reason)"); xlog("L_INFO", "$ci|log|sending 6XX reply as $var(new_code) $var(reply_reason)");
t_reply("$(var(new_code){s.int})", "$var(reply_reason)");
t_reply("$(var(new_code){s.int})", "$var(reply_reason)");
# if the failure case was something that we should recover
# from then try to find a new media server
} else if ("$var(reply_reason)" =~ "call barred") { } else if ("$var(reply_reason)" =~ "call barred") {
xlog("L_INFO", "$ci|log|failure route ignoring call barred"); xlog("L_INFO", "$ci|log|failure route ignoring call barred");
} else if (isflagset(FLAG_SESSION_PROGRESS)) { } else if (isflagset(FLAG_SESSION_PROGRESS)) {


+ 6
- 5
kamailio/dispatcher-role.cfg View File

@ -81,13 +81,14 @@ route[DISPATCHER_FIND_ROUTES]
} }
$var(contact_uri) = $(ct{tobody.user}) + "@" + $(ct{tobody.host}); $var(contact_uri) = $(ct{tobody.user}) + "@" + $(ct{tobody.host});
$var(from_uri) = @from.uri.user + "@" + @from.uri.host;
if ($sht(associations=>$var(from_uri)) != $null) {
$var(association) = $var(from_uri);
$var(redirect) = @from.uri.user + "@" + @from.uri.host + "->"
+ @ruri.user + "@" + @ruri.host;
if ($sht(associations=>$var(redirect)) != $null) {
$var(association) = $var(redirect);
$var(prefered_route) = $sht(associations=>$var(association)); $var(prefered_route) = $sht(associations=>$var(association));
xlog("L_INFO", "$ci|log|from uri $var(from_uri) associated with media server $var(prefered_route)");
xlog("L_INFO", "$ci|log|found redirect mapping for $var(redirect) and associated with media server $var(prefered_route)");
route(DISPATCHER_REORDER_ROUTES); route(DISPATCHER_REORDER_ROUTES);
$sht(associations=>$var(from_uri)) = $null;
$avp(AVP_REDIRECT_KEY) = $var(redirect);
} else if ($sht(associations=>$var(contact_uri)) != $null) { } else if ($sht(associations=>$var(contact_uri)) != $null) {
$var(association) = $var(contact_uri); $var(association) = $var(contact_uri);
$var(prefered_route) = $sht(associations=>$var(association)); $var(prefered_route) = $sht(associations=>$var(association));


+ 1
- 1
kamailio/roles.cfg View File

@ -3,6 +3,6 @@
#!trydef NAT-TRAVERSAL-ROLE #!trydef NAT-TRAVERSAL-ROLE
#!trydef REGISTRAR-ROLE #!trydef REGISTRAR-ROLE
#!trydef PRESENCE-ROLE #!trydef PRESENCE-ROLE
#!trydef TRAFFIC-FILTER-ROLE
# # #!trydef TRAFFIC-FILTER-ROLE
## vim:set tabstop=4 softtabstop=4 shiftwidth=4 expandtab ## vim:set tabstop=4 softtabstop=4 shiftwidth=4 expandtab

Loading…
Cancel
Save