#
# $Id$
#
# this script is configured for use as voicemail UAS; it processes
# INVITEs and BYEs and asks SEMS to record media via "vm"; in this
# script, all record-routing and other constructs known from proxy
# scripts are not present  -- it is a simple UAS 
#

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

#debug=		        # debug level (cmd line: -dddddddddd)
#fork=no
#log_stderror=yes 	# (cmd line: -E)


check_via=no		# (cmd. line: -v)
dns=no			# (cmd. line: -r)
rev_dns=no		# (cmd. line: -R)
port=5090
children=4
fifo="/tmp/vm_ser_fifo"

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

loadmodule "/home/srouter/sip_router/modules/sl/sl.so"
loadmodule "/home/srouter/sip_router/modules/tm/tm.so"
loadmodule "/home/srouter/sip_router/modules/maxfwd/maxfwd.so"
loadmodule "/home/srouter/sip_router/modules/mysql/mysql.so"
loadmodule "/home/srouter/sip_router/modules/vm/vm.so"
	    
# ----------------- setting module-specific parameters ---------------

modparam("vm", "db_url", "mysql://ser:heslo@dbhost/ser")

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

# main routing logic

route{


	# initial sanity checks -- messages with
	# max_forwards==0, or excessively long requests
	if (!mf_process_maxfwd_header("10")) {
		sl_send_reply("483", "Too Many Hops");
		break;
	};
	if (len_gt( max_len )) {
		sl_send_reply("513", "Message too big");
		break;
	};

	if (!uri==myself) {
		sl_send_reply("404", "not reponsible for host in r-uri");
		break;
	};


	# Voicemail specific configuration - begin

	if(method=="ACK" || method=="INVITE" || method=="BYE"){

		if (!t_newtran()) {
			log("could not create new transaction\n");
			sl_send_reply("500", "could not create new transaction");
			break;
		};

		t_reply("100", "Trying -- just wait a minute !");
		if(method=="INVITE"){
			log("**************** vm start - begin ******************\n");
			if(!vm("/tmp/am_fifo", "voicemail")){
				log("could not contact the answer machine\n");
				t_reply("500", "could not contact the answer machine");
			};
			log("**************** vm start - end ******************\n");
		} else if(method=="BYE"){
			log("**************** vm end - begin ******************\n");
			if(!vm("/tmp/am_fifo", "bye")){
				log("could not contact the answer machine\n");
				t_reply("500", "could not contact the answer machine");
			};
			log("**************** vm end - end ******************\n");
		};
		break;
	};
	if (method=="CANCEL") {
		sl_send_reply("200", "cancels are junked here");
		break;
	};
	sl_send_reply("501", "method not understood here");
}
