All pastes #491925 Raw Edit

variable

public text v1 · immutable
·published 2007-05-16 22:39 UTC
rendered paste body
#
# v4 - adds accounting, voicemail
#
# ----------- global configuration parameters ------------------------

debug=3
#fork=yes
log_stderror=no
children=4

# Uncomment these lines to enter debugging mode 
#debug=10
fork=no
#log_stderror=yes
listen=xxx
#

port=5060

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

#set module path
mpath="/usr/local/lib/openser/modules/"

loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "textops.so"

loadmodule "auth.so"
loadmodule "auth_db.so"
loadmodule "postgres.so"
loadmodule "enum.so"
loadmodule "acc.so"

#for diagnostic purposes
loadmodule "mi_fifo.so"
loadmodule "xlog.so"

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

#for diagnostic purposes
modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")

modparam("usrloc", "db_mode",   0)
modparam("auth_db", "db_url", "postgres://xxx")
modparam("auth_db", "user_column", "username")
modparam("auth_db", "password_column", "password")
modparam("auth_db", "calculate_ha1", yes)
modparam("rr", "enable_full_lr", 1)
modparam("enum", "domain_suffix", "xxx")
modparam("acc", "db_flag", 10)
modparam("acc", "db_table_acc", "acc")
modparam("acc", "db_url", "postgres://xxx")
modparam("acc", "db_extra", "source=$fU; dest=$rU")
modparam("tm", "fr_timer", 3)
modparam("tm", "fr_inv_timer", 15)
modparam("tm", "noisy_ctimer", 1)


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

# main routing logic
# ------------------
route{

	# initial checks
	if (!mf_process_maxfwd_header("10")) {
		sl_send_reply("483","Too Many Hops");
		exit;
	};
	if (msg:len >=  2048 ) {
		sl_send_reply("513", "Message too big");
		exit;
	};
	
	# record-route;subsequent messages will go through our proxy
	if (!method=="REGISTER") {
		record_route();
	}

	# subsequent messages within a dialog should take the
	# path determined by record-routing
	if (loose_route()) {
		route(1);
	};
	
	# send the call out
	if (!uri==myself) {
		route(1);
	};

	# if message is to myself
	if(uri==myself){
		if(method == "REGISTER"){
			route(2);
			exit;
		} else if(method == "INVITE"){
			route(3);
			exit;
		} else if(method == "BYE" || method == "CANCEL"){
			route(4);
			exit;
		};
	};

	route(1);
}

# Default Message Handling
# route call out
# ------------------------
route[1] {
	setflag(10);
	xlog("--> entered route[1] -->");
	xlog("routed: $rm to: $ruri");
	if(method == "INVITE" && isflagset(11)){
		xlog("ENTERED GATE TO FAILURE");
		t_on_failure("1");
	}
	if(!t_relay()) {
		xlog("RELAY FAILED");
		sl_reply_error();
	};
	xlog("<-- exited route[1] <--");
	exit;
}

# Register Message Handling
# -------------------------
route[2] {
	if (!www_authorize("", "subscriber")) {
		www_challenge("", "0");
		exit;
	};
	consume_credentials();
	save("location");
}

# Invite Message Handling
# -----------------------
route[3] {
	# run a check to see if ruri has voicemail
	setflag(11);
	# if proxy_authorize & challenge

	# Looks up local SIP users via USRLOC DB
	if(lookup("location")){
		route(1);
		exit;
	};
	# makes uri E164 style
	$ruri.user = "+" + $ruri.user;
	if(enum_query()){
		route(1);
		exit;
	}
	# forwards to GATEWAY
	$ruri.domain = "xxx";
	route(1);
}

# CANCEL and BYE Message Handling
# -------------------------------
route[4] {
	route(1);
}

# For voicemail
# -------------
failure_route[1] {
	xlog("MESSAGE FAILURE -> TO VOICEMAIL");
	$ruri = "sip:500@xxx";
	append_branch();
	resetflag(11);
	route(1);
}