#
# iptel.org real world configuration
#

# ----------- global configuration parameters ------------------------

#debug=8          # debug level (cmd line: -dddddddddd)
debug=3
fork=no
children=2
#log_stderror=no	# (cmd line: -E)
log_stderror=yes	# (cmd line: -E)
check_via=yes     # (cmd. line: -v)
dns=no           # (cmd. line: -r)
rev_dns=no	# (cmd. line: -R)
port=5060
#port=8060

fifo="/tmp/ser_fifo"

# advertise IP address in Via (as opposed to advertising DNS name
# which is annoying for downstream servers and some phones can
# not handle DNS at all)
#listen=195.37.77.100
#listen=127.0.0.1

# ------------------ module loading ----------------------------------

loadmodule "../sip_router/modules/sl/sl.so"
loadmodule "../sip_router/modules/print/print.so"
loadmodule "../sip_router/modules/tm/tm.so"
loadmodule "../sip_router/modules/acc/acc.so"
loadmodule "../sip_router/modules/rr/rr.so"
loadmodule "../sip_router/modules/maxfwd/maxfwd.so"
loadmodule "../sip_router/modules/usrloc/usrloc.so"
loadmodule "../sip_router/modules/registrar/registrar.so"

# ----------------- setting module-specific parameters ---------------

# -- usrloc params --


# -- acc params --
# report ACKs too for sake of completeness -- as we account PSTN
# destinations which are RR, ACKs should show up
modparam("acc", "report_ack", 1)
# don't bother me with early media reports (I don't like 183 
# too much anyway...ever thought of timer C hitting after
# listening to music-on-hold for five minutes?)
modparam("acc", "early_media", 0)
modparam("acc", "log_level", 1)
# that is the flag for which we will account -- don't forget to
# set the same one :-)
modparam("acc", "acc_flag", 3 )
# we are interested only in successful transactions
modparam("acc", "failed_transactions", 0 )
modparam("acc", "missed_flag", 2 )

# -- tm params --
modparam("tm", "fr_timer", 103 )
modparam("tm", "retr_timer1p1", 4 )
modparam("tm", "fr_inv_timer", 4 )
modparam("tm", "wt_timer", 8 )
modparam("tm", "noisy_ctimer", 0 )

# -------------------------  request routing logic -------------------

# main routing logic

route{
	# for testing purposes, simply okay all REGISTERs
	if (method=="REGISTER") {
		log("REGISTER");
		sl_send_reply("200", "ok");
		#t_replicate("localhost", "9");
		break;
	};

	if (!t_relay_to("fox.iptel.org", "12345" )) {
		sl_reply_error();
	};
	/* t_reply("100", "trying"); */
	break;

	#rewritehost("iptel.org");
	if (!t_relay()) {
		sl_reply_error();
	};
	break;

	# print a message if a call was missed
	setflag(2);

	rewriteuri("a@blb.com");
	append_branch("b@blb.com");
	append_branch("c@blb.com");

#	forward( "fox.iptel.org", 9 );
	t_relay_to("bat.iptel.org", "5088");
#	t_relay();
}

route[3] {
	lookup("location");
}

reply_route[1] {
	# revert to original inbound uri -- good if we want
	# to modify it; if we rewrite it completely as in the 
	# line after it, it is actually useless
	revert_uri();
	# this one will return 404 too
	rewriteuri("sip:nonsense@iptel.org");
	append_branch();
	# and if we don't yet get a positive reply (we won't --
	# we will receive 404", try another forking destination
	t_on_negative("2");
}

reply_route[2] {
	revert_uri();
	rewriteuri("sip:foo@iptel.org");
	# give it one more try; if it fails too (it will, there
	# is no foo), a lowest-code message will be relayed
	# upstream
	append_branch();
}
