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