1# 2# $Id$ 3# 4# this example shows how to use forking on failure 5# 6 7log_stderror=1 8fork=no 9listen=192.168.2.16 10debug=3 11# ------------------ module loading ---------------------------------- 12 13#set module path 14mpath="/usr/local/lib/kamailio/modules/" 15 16# Uncomment this if you want to use SQL database 17loadmodule "tm.so" 18loadmodule "sl.so" 19loadmodule "maxfwd.so" 20# ------------------------- request routing logic ------------------- 21 22# main routing logic 23 24route{ 25 26 # initial sanity checks -- messages with 27 # max_forwards==0, or excessively long requests 28 if (!mf_process_maxfwd_header("10")) { 29 sl_send_reply("483","Too Many Hops"); 30 exit; 31 }; 32 if (msg:len >= 2048 ) { 33 sl_send_reply("513", "Message too big"); 34 exit; 35 }; 36 37 /* skip register for testing purposes */ 38 if (method=="REGISTER") { sl_send_reply("200", "ok"); exit; }; 39 40 if (!method=="ACK") 41 log(1, "forwarding now to primary destination\n"); 42 if (method=="INVITE") { 43 rewriteuri("sip:xxx@192.168.2.16:5064"); 44 # if transaction broken, try other an alternative 45 # route 46 t_on_failure("1"); 47 # if a provisional came, stop alternating 48 t_on_reply("1"); 49 }; 50 t_relay(); 51} 52 53failure_route[1] { 54 log(1, "trying at alternate destination\n"); 55 append_branch("sip:yyy@192.168.2.16:5064"); 56 t_relay(); 57} 58 59onreply_route[1] { 60 log(1, "reply came in\n"); 61 if (status=~"18[0-9]") { 62 log(1, "provisional -- resetting negative failure\n"); 63 t_on_failure("0"); 64 }; 65} 66