#
# $Id$
#
# simple quick-start config script
#

# WARNING: replace PUBLIC_IP with the public ip of the nat box
#          (e.g.: 213.34.65.56 )

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

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

check_via=no	# (cmd. line: -v)
dns=no		   # (cmd. line: -r)
rev_dns=no	  # (cmd. line: -R)
#port=5060
#children=4
fifo="/tmp/ser_fifo"
mhomed=yes
disable_tls=yes


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


loadmodule "modules/sl/sl.so"
#loadmodule "modules/tm/tm.so"
loadmodule "modules/rr/rr.so"
loadmodule "modules/maxfwd/maxfwd.so"
#loadmodule "modules/usrloc/usrloc.so"
#loadmodule "modules/registrar/registrar.so"
/* for the search()  export */
loadmodule "modules/textops/textops.so"
loadmodule "modules/mangler/mangler.so"


# Uncomment this if you want digest authentication
# mysql.so must be loaded !
#loadmodule "/usr/lib/ser/modules/auth.so"

# ----------------- setting module-specific parameters ---------------
# seting separator for encoded contact
modparam("mangler","contact_flds_separator","*")


# -- usrloc params --
#modparam("usrloc", "db_mode",   0)


# -------------------------  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 ( msg:len > max_len ) {
		sl_send_reply("513", "Message too big");
		break;
	};

	record_route();	

	/* replace PUBLIC_IP with the public ip of the nat box
	  (e.g.: 213.34.65.56 )*/

	/* outgoing connection */
	if (src_ip == 10.0.0.0/8 || src_ip == 192.168.0.0/16 ){
		/* we mangle the contact address and ports in SDP part of the
		 * message */
		if (method == "INVITE"){
			sdp_mangle_ip("0.0.0.0/0","PUBLIC_IP");
			/* diferent mangling based on what phone we use */
			if (src_ip==10.0.0.1) sdp_mangle_port("+1000");
			if (src_ip==10.0.0.2) sdp_mangle_port("-1000");
		};
		if (search("Contact: .*@(10\.|111\.)")){
			/* we seem to have a private address on a Contact which is not
			 * valid */
			encode_contact("enc_prefix","PUBLIC_IP");
		};
	/*
		#if ser is behind a NAT and NAT box has port forwarding
		#on port 5060 set to our ser private address ...
		record_route(PUBLIC_IP);
	*/
	}; 
	/* we received something for a local phone */
	if (uri=~"enc_prefix*"){
		decode_contact();
	};

	
	# forward to current uri now
	forward(uri:host, uri:port);
	break;
}