#
# $Id$
#
# example script showing use of nathelper module 
# (incomplete for sake of brevity)
#

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

# debugging mode
debug=3          
fork=no
log_stderror=yes

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

loadmodule "modules/nathelper/nathelper.so"
loadmodule "modules/textops/textops.so"
loadmodule "modules/tm/tm.so"
loadmodule "modules/rr/rr.so"
loadmodule "modules/registrar/registrar.so"
loadmodule "modules/usrloc/usrloc.so"
loadmodule "modules/sl/sl.so"


# ------------------ request-routing script --------------------------

# main routing logic

route{

	# compulsory processing of Route header fields and adding RR
	loose_route();

	# ATA's are symmetric but don't advertise it -- force use of rport 
	if (search("User-Agent: Cisco ATA.*")) {
		setflag(1); # remember this is ATA
		force_rport();
		fix_nated_contact();
	};

	/* registration (uses rewritten contacts) */
	if (method=="REGISTER") {
		save("foo.bar.com");
		break;
	};

	if (method=="INVITE") {
		record_route();
		if (isflagset(1)) { # ATA ?
			fix_nated_sdp("3");
		};
		/* set up reply processing */
		t_on_reply("1");
	};

	if (method == "INVITE" || method == "CANCEL") {
		if (!lookup("foo.bar.com")) {
			sl_send_reply("404", "Not Found");
			break;
		};
	};

	/* set up reply processing and forward statefuly */
	t_relay();
}

# all incoming replies for t_onrepli-ed transactions enter here
onreply_route[1] {
	if (status=~"2[0-9][0-9]" && search("Server: Cisco ATA.*"))
		fix_nated_contact();
		fix_nated_sdp("3");
}