# Wrapper for relaying requests
route[RELAY] {
# the base event routes
t_on_branch("MANAGE_BRANCH");
t_on_reply("MANAGE_REPLY");
t_on_failure("MANAGE_FAILURE");
if (!t_relay()) {
sl_reply_error();
}
exit;
}
# Manage incoming replies
onreply_route[MANAGE_REPLY] {
xlog("L_NOTICE", "$rr ($rs) [$cs] ($ci) $si:$sp - $ua\n");
if ( t_check_status("(503)|(408)|(480)") ) {
xlog("L_WARN", "Server will be blacklisted: $si:$sp ($rs)\n");
}
}
# Manage failure routing cases
failure_route[MANAGE_FAILURE] {
if ( !t_check_status("(503)|(408)|(480)") ) {
exit;
}
ds_mark_dst("IP"); # blacklist
if (t_is_canceled()) exit;
if (!ds_next_domain()) {
send_reply("503", "Service Unavailable");
exit;
}
route(RELAY);
}