[Users] Many crashes on Openser system

Antonio Higuera ahiguerat at gmail.com
Tue Jun 19 20:52:31 CEST 2007


Hello list,
I am trying to put up and ready a system based on openser. I am using
Openser 1.2.1 from the SVN.
The problem is that the system crashes continously without an aparent reason
when is managing an INVITE request from X-Lite. Openser is able to manage a
couple of calls and after that it crashes.
I dont really know if the configuration script has something to do with this
behaviour (I put the script attached).

The problem seems to be located in the avp.c function as per the following
backtrace generated from a coredump. I put also below the logs. If you need
more information, please let me know.

Thanks very much for your help.





GNU gdb 6.4.90-debian

Copyright (C) 2006 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are


welcome to change it and/or distribute copies of it under certain
conditions.

Type "show copying" to see the conditions.

There is absolutely no warranty for GDB.   Type "show warranty" for details.

This GDB was configured as "i486-linux-gnu"...Using host libthread_db
library "/lib/tls/i686/cmov/libthread_db.so.1".





warning: Can't read pathname for load map: Error de entrada/salida.

Reading symbols from /lib/tls/i686/cmov/libdl.so.2...done.

Loaded symbols for /lib/tls/i686/cmov/libdl.so.2

Reading symbols from /lib/tls/i686/cmov/libresolv.so.2...done.

Loaded symbols for /lib/tls/i686/cmov/libresolv.so.2

Reading symbols from /lib/tls/i686/cmov/libc.so.6...done.

Loaded symbols for /lib/tls/i686/cmov/libc.so.6

Reading symbols from /lib/ld-linux.so.2...done.

Loaded symbols for /lib/ld-linux.so.2

Reading symbols from /lib/openser/modules/mysql.so...done.

Loaded symbols for //lib/openser/modules/mysql.so

Reading symbols from /lib/tls/i686/cmov/libm.so.6...done.

Loaded symbols for /lib/tls/i686/cmov/libm.so.6

Reading symbols from /usr/lib/libmysqlclient.so.15...done.

Loaded symbols for /usr/lib/libmysqlclient.so.15

Reading symbols from /usr/lib/libz.so.1...done.

Loaded symbols for /usr/lib/libz.so.1

Reading symbols from /lib/tls/i686/cmov/libpthread.so.0...done.

Loaded symbols for /lib/tls/i686/cmov/libpthread.so.0

Reading symbols from /lib/tls/i686/cmov/libcrypt.so.1...done.

Loaded symbols for /lib/tls/i686/cmov/libcrypt.so.1

Reading symbols from /lib/tls/i686/cmov/libnsl.so.1...done.

Loaded symbols for /lib/tls/i686/cmov/libnsl.so.1

Reading symbols from /lib/openser/modules/sl.so...done.

Loaded symbols for //lib/openser/modules/sl.so

Reading symbols from /lib/openser/modules/tm.so...done.

Loaded symbols for //lib/openser/modules/tm.so

Reading symbols from /lib/openser/modules/rr.so...done.

Loaded symbols for //lib/openser/modules/rr.so

Reading symbols from /lib/openser/modules/maxfwd.so...done.

Loaded symbols for //lib/openser/modules/maxfwd.so

Reading symbols from /lib/openser/modules/usrloc.so...done.

Loaded symbols for //lib/openser/modules/usrloc.so

Reading symbols from /lib/openser/modules/registrar.so...done.

Loaded symbols for //lib/openser/modules/registrar.so

Reading symbols from /lib/openser/modules/auth.so...done.

Loaded symbols for //lib/openser/modules/auth.so

Reading symbols from /lib/openser/modules/auth_db.so...done.

Loaded symbols for //lib/openser/modules/auth_db.so

Reading symbols from /lib/openser/modules/uri.so...done.

Loaded symbols for //lib/openser/modules/uri.so

Reading symbols from /lib/openser/modules/uri_db.so...done.

Loaded symbols for //lib/openser/modules/uri_db.so

Reading symbols from /lib/openser/modules/domain.so...done.

Loaded symbols for //lib/openser/modules/domain.so

Reading symbols from /lib/openser/modules/textops.so...done.

Loaded symbols for //lib/openser/modules/textops.so

Reading symbols from /lib/openser/modules/avpops.so...done.

Loaded symbols for //lib/openser/modules/avpops.so

Reading symbols from /lib/openser/modules/permissions.so...done.

Loaded symbols for //lib/openser/modules/permissions.so

Reading symbols from /lib/openser/modules/enum.so...done.

Loaded symbols for //lib/openser/modules/enum.so

Reading symbols from /lib/openser/modules/acc.so...done.

Loaded symbols for //lib/openser/modules/acc.so

Reading symbols from /lib/openser/modules/dialog.so...done.

Loaded symbols for //lib/openser/modules/dialog.so

Reading symbols from /lib/openser/modules/mi_fifo.so...done.

Loaded symbols for //lib/openser/modules/mi_fifo.so

Reading symbols from /lib/openser/modules/snmpstats.so...done.

Loaded symbols for //lib/openser/modules/snmpstats.so

Reading symbols from /usr/local/lib/libnetsnmpmibs.so.15...done.

Loaded symbols for /usr/local/lib/libnetsnmpmibs.so.15

Reading symbols from /usr/local/lib/libnetsnmpagent.so.15...done.

Loaded symbols for /usr/local/lib/libnetsnmpagent.so.15

Reading symbols from /usr/local/lib/libnetsnmphelpers.so.15...done.

Loaded symbols for /usr/local/lib/libnetsnmphelpers.so.15

Reading symbols from /usr/local/lib/libnetsnmp.so.15...done.

Loaded symbols for /usr/local/lib/libnetsnmp.so.15

Reading symbols from /usr/lib/i686/cmov/libcrypto.so.0.9.8...done.

Loaded symbols for /usr/lib/i686/cmov/libcrypto.so.0.9.8

Reading symbols from /usr/lib/libsensors.so.3...done.

Loaded symbols for /usr/lib/libsensors.so.3

Reading symbols from /lib/libsysfs.so.2...done.

Loaded symbols for /lib/libsysfs.so.2

Reading symbols from /lib/openser/modules/xlog.so...done.

Loaded symbols for //lib/openser/modules/xlog.so

Reading symbols from /lib/openser/modules/lcr.so...done.

Loaded symbols for //lib/openser/modules/lcr.so

Reading symbols from /lib/openser/modules/pdt.so...done.

Loaded symbols for //lib/openser/modules/pdt.so

Reading symbols from /lib/tls/i686/cmov/libnss_files.so.2...done.

Loaded symbols for /lib/tls/i686/cmov/libnss_files.so.2

Reading symbols from /lib/tls/i686/cmov/libnss_dns.so.2...done.

Loaded symbols for /lib/tls/i686/cmov/libnss_dns.so.2

Core was generated by `openser -f 4.cfg'.

Program terminated with signal 11, Segmentation fault.

#0  search_next_avp (avp=0x82, val=0xbfef3ca8) at usr_avp.c:235

235                     if ( id==avp->id && (avp->flags&AVP_NAME_STR)==0

(gdb) backtrace

#0  search_next_avp (avp=0x82, val=0xbfef3ca8) at usr_avp.c:235

#1  0xb7b00866 in legs2strar (legs=0x81932c8, rq=0xb58d4e48,

    val_arr=0xb7b134b8) at acc_extra.c:313

#2  0xb7aff696 in acc_db_request (rq=0xb58d4e48) at acc.c:383

#3  0xb7b015d7 in tmcb_func (t=0xb58ca420, type=128, ps=0xb7bdfe14)

    at acc_logic.c:376

#4  0xb7bba513 in run_trans_callbacks (type=128, trans=0xb58ca420,

    req=0xb58d4e48, rpl=0x819bc90, code=200) at t_hooks.c:205

#5  0xb7bcffa5 in relay_reply (t=0xb58ca420, p_msg=0x819bc90,

    branch=<value optimized out>, msg_status=200, cancel_bitmap=0xbfef3f00)

    at t_reply.c:1150

#6  0xb7bd1a8c in reply_received (p_msg=0x819bc90) at t_reply.c:1383

#7  0x0805fd3f in forward_reply (msg=0x819bc90) at forward.c:489

#8  0x08083486 in receive_msg (

    buf=0x813daa0 "SIP/2.0 200 OK\r\nVia: SIP/2.0/UDP 192.168.1.129;branch=
z9hG4bK6f62.874d7d27.0;received=192.168.1.129\r\nVia: SIP/2.0/UDP
192.168.222.86:27880;branch=z9hG4bK-d87543-714c824f3363f248-1--d87543-\r\nRecord-Rou"...,


    len=850, rcv_info=0xbfef3ff8) at receive.c:195

#9  0x080b409a in udp_rcv_loop () at udp_server.c:451

#10 0x0806f587 in main_loop () at main.c:834

#11 0x08070d55 in main (argc=3, argv=0xbfef41b4) at main.c:1393



The following lines are the log generated:

Jun 7 10:42:04 marge openser[1545]: receive_msg: cleaning up

Jun 7 10:42:04 marge openser[1565]: ERROR: receive_fd: EOF on 8

Jun 7 10:42:04 marge openser[1565]: DBG: handle_ser_child: dead child 2, pid
1546 (shutting down?)

Jun 7 10:42:04 marge openser[1565]: DBG: io_watch_del (0x812d720, 8, -1,
0x0) fd_no=23 called

Jun 7 10:42:04 marge openser[1544]: child process 1546 exited by a signal 11

Jun 7 10:42:04 marge openser[1544]: core was generated

Jun 7 10:42:04 marge openser[1544]: INFO: terminating due to SIGCHLD

Jun 7 10:42:04 marge openser[1552]: INFO: signal 15 received

Jun 7 10:42:04 marge openser[1552]: Memory status (pkg):

Jun 7 10:42:04 marge openser[1552]: fm_status (0x816e3e0):

Jun 7 10:42:04 marge openser[1552]: heap size= 1048576

Jun 7 10:42:04 marge openser[1552]: used= 155064, used+overhead=186160,
free=862416

Jun 7 10:42:04 marge openser[1552]: max used (+overhead)= 186376

Jun 7 10:42:04 marge openser[1552]: dumping free list:

Jun 7 10:42:04 marge openser[1552]: hash = 3 fragments no.: 1, unused: 0
bucket size: 24 - 24 (first 24)

Jun 7 10:42:04 marge openser[1552]: hash = 5 fragments no.: 1, unused: 0
bucket size: 40 - 40 (first 40)

Jun 7 10:42:04 marge openser[1552]: hash = 19 fragments no.: 1, unused: 0
bucket size: 152 - 152 (first 152)

Jun 7 10:42:04 marge openser[1552]: hash = 2054 fragments no.: 1, unused: 0
bucket size: 524288 - 1048576 (first 862336)

Jun 7 10:42:04 marge openser[1552]: TOTAL: 4 free fragments = 862552 free
bytes

Jun 7 10:42:04 marge openser[1552]: -----------------------------

Jun 7 10:42:04 marge openser[1565]: INFO: signal 15 received

Jun 7 10:42:04 marge openser[1565]: Memory status (pkg):

Jun 7 10:42:04 marge openser[1565]: fm_status (0x816e3e0):
.......
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kamailio.org/pipermail/users/attachments/20070619/300fa0cf/attachment.htm 
-------------- next part --------------
#
# Script. Support for: 
# -SNMP through SNMPStats module
# -ACCOUNTING through acc module
# -LEST COST ROUTING through LCR module
# -MULTIDOMINIO through domain and pdt module
# -LOGs though xlog module
# -ENUM through ENUM module
# -PERMISSIONS
# -XLOG
# -USER PREFERENCES with Serweb  (Call transfer, call, ....)
#
#
#
#
#
# -USERLOC REPLICATION
# FLAGS:
# - 1: Accounting
# - 2: Missed calls
# - 13: Log flag



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

debug=5
fork=yes
log_stderror=no
listen=192.168.1.129 # INSERT YOUR IP ADDRESS HERE
port=5060
children=7
dns=no
rev_dns=no
alias=xxxx.com

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

loadmodule "mysql.so"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "auth.so"
loadmodule "auth_db.so"
loadmodule "uri.so"
loadmodule "uri_db.so"
loadmodule "domain.so"
loadmodule "textops.so"
loadmodule "avpops.so"
loadmodule "permissions.so"
loadmodule "enum.so"
loadmodule "acc.so"
loadmodule "dialog.so"
loadmodule "mi_fifo.so"
loadmodule "snmpstats.so"
loadmodule "xlog.so"
loadmodule "lcr.so"
loadmodule "pdt.so"


modparam("auth_db|permissions|uri_db|usrloc|avpops|acc|lcr|avpops|pdt|domain", "db_url", "mysql://openser:openserrw@192.168.1.130/openser")

# permissions module parameters

modparam("permissions", "address_table", "address")
modparam("permissions", "grp_col", "grp")
modparam("permissions", "ip_addr_col", "ip_addr")
modparam("permissions", "mask_col", "mask")
modparam("permissions", "port_col", "port")
modparam("permissions", "db_mode", 1)

# enum module parameters

modparam("enum", "domain_suffix", "pstn.com.")

# domain module parameters

modparam("domain", "db_mode", 1)

# pdt modules pdt

modparam("pdt", "db_table", "pdt")
modparam("pdt", "sdomain_column", "sdomain")
modparam("pdt", "prefix_column", "prefix")
modparam("pdt", "domain_column", "domain")

# uri_db module parameters

modparam("uri_db", "use_domain", 1)


# usrloc module parameters

modparam("usrloc", "use_domain", 1)

# xlog module parameters

modparam("xlog", "buf_size", 8192)

# auth_db module parameters

modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")

# usrloc module parameters
modparam("usrloc", "db_mode", 2)

# rr module parameters
modparam("rr", "enable_full_lr", 1)

# tm module parameters
modparam("tm", "fr_inv_timer", 27)
# modparam("tm", "fr_inv_timer_avp", "inv_timeout")
modparam("tm", "fr_timer", 10)
# modparam("tm", "fr_timer_avp", "gen_timeout")

# permissions module parameters
modparam("permissions", "db_mode", 1)
modparam("permissions", "trusted_table", "trusted")

# avpops module parameters
modparam("avpops", "avp_table", "usr_preferences")
modparam("avpops", "use_domain", 1)
modparam("avpops", "uuid_column", "uuid")
modparam("avpops", "username_column", "username")
modparam("avpops", "domain_column", "domain")
modparam("avpops", "attribute_column", "attribute")
modparam("avpops", "value_column", "value")
modparam("avpops", "type_column", "type")

# modparam("avpops", "avp_table", "usr_preferences")
# modparam("avpops","avp_aliases","serial_fork=i:665")
# modparam("avpops","db_scheme","scheme1:username_column=username;value_col=contact;value_type=string;table=location")

# acc module parameters
modparam("acc", "db_flag", 1)
modparam("acc", "db_missed_flag", 2)
modparam("acc", "report_ack", 0)
modparam("acc", "detect_direction", 1)
modparam("acc", "multi_leg_info", "src_leg=$avp(i:901);dst_leg=$avp(i:902);src_dom=$avp(i:903);dst_dom=$avp(i:904)")
#modparam("acc", "log_fmt", "cdfimorstup")
#modparam("acc", "log_level", 1)
#modparam("acc", "failed_transactions", 1)
#modparam("acc", "report_cancels", 1)


# snmpstats module parameters
modparam("snmpstats", "sipEntityType", "registrarServer")
modparam("snmpstats", "sipEntityType", "proxyServer")
modparam("snmpstats", "MsgQueueMinorThreshold", 2)
modparam("snmpstats", "MsgQueueMajorThreshold", 5)
modparam("snmpstats", "dlg_minor_threshold", 1)
modparam("snmpstats", "dlg_major_threshold", 3)
modparam("snmpstats", "snmpgetPath", "/usr/local/bin/")
modparam("snmpstats", "snmpCommunity", "public")

# dialog module parameters
modparam("dialog", "dlg_flag", 4)

# mi_fifo module parameters

modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")


route {

# -----------------------------------------------------------------
# Debug flag
# -----------------------------------------------------------------

setflag(13); 
if (isflagset(13) && !is_method("ACK") && !is_method("REGISTER")) { #debug route
	route(13);		
	};

# -----------------------------------------------------------------
# Sanity Check Section
# -----------------------------------------------------------------

if (!mf_process_maxfwd_header("10")) {
	sl_send_reply("483", "Too Many Hops");
	exit;
	};
if (msg:len > max_len) {
	sl_send_reply("513", "Message Overflow");
	exit;
	};

# -----------------------------------------------------------------
# Record Route Section
# -----------------------------------------------------------------

if (method!="REGISTER") {
	record_route();
};

# -----------------------------------------------------------------
# Loose Route Section
# -----------------------------------------------------------------
if (loose_route()) {
	if ((method=="INVITE" || method=="REFER") && !has_totag()) {
		sl_send_reply("403", "Forbidden");
		return;
		};
	if (method=="INVITE") {
		if (!allow_trusted()) {
			if (!proxy_authorize("","subscriber")) {
				proxy_challenge("","0");
				exit;
			} else if (!check_from()) {
				sl_send_reply("403", "Use From=ID");
				exit;
				};
		};
		consume_credentials();
	};
	if (is_method("BYE")) {
		setflag(1);  # Empieza el accounting
		setflag(2);  # Tambien para llamadas perdidas
		avp_printf("$avp(i:901)", "$fU");
		avp_printf("$avp(i:902)", "$rU");
		avp_printf("$avp(i:903)", "$fd");
		avp_printf("$avp(i:904)", "$rd");

		};
	route(1);
	exit;
};

# ------------------------------------------------------------------------
# Accounting Section
#
# NOTE: We test for flag 14 because we do not want to record Click2Dial
#       entries
# ------------------------------------------------------------------------

if ((method=="INVITE" || method=="BYE") && !isflagset(14)) {
	setflag(1);
	setflag(2);
	avp_printf("$avp(i:901)", "$fU");
	avp_printf("$avp(i:902)", "$rU");
	avp_printf("$avp(i:903)", "$fd");
	avp_printf("$avp(i:904)", "$rd");

};



# -----------------------------------------------------------------
# Call Type Processing Section
# -----------------------------------------------------------------

# Mensajes hacia fuera, aplica a todos los mensajes que recibe el proxy
if (!is_uri_host_local()) {  # Cheque si el dominio del RURI esta en la tablas domain
	if (is_from_local() || allow_source_address("0")) {# || allow_trusted()) # Cheuqea si el dominio del FROM esta en las tablas de domain esta permitido
		route(1); # lo enruto hacia fuera
	} else {
		sl_send_reply("403", "Forbidden");
	};
	return; # sale
};

# Mensajes hacia dominios controlados por el proxy, aplica a todos los mensajes que recibe el proxy.

if (method=="ACK") {
	route(1);
	return;
} if (method=="CANCEL") {
	route(1);
	return;
} else if (method=="INVITE") {
	log("### ROUTE 3 ENTRA\n");
	route(3);
	log("### ROUTE 3 SALE\n");
	return;
} else if (method=="REGISTER") {
	route(2);
	return;
};
lookup("aliases");
if (!is_uri_host_local()) { 
	log("### URI NO LOCAL\n");
	route(1);
	return;
};
if (!lookup("location")) {
	sl_send_reply("404", "User Not Found");
	return;
};
route(1);
}




route[1] {
# -----------------------------------------------------------------
# Default Message Handler
# -----------------------------------------------------------------

if (!t_relay()) {
	sl_reply_error();
	};
}


route[2] {
# -----------------------------------------------------------------
# REGISTER Message Handler
# ----------------------------------------------------------------


sl_send_reply("100", "Trying");

if (!allow_source_address("0")) {
if (!www_authorize("","subscriber")) {
	if (isflagset(13)) {
      	xlog("L_NOTICE", "OPENSER_NAME: $mi route[$rm][2] \
        	$fu Authorization for $fu ($si) requested\n");
        	};
	www_challenge("","0");
	return;
	} else {
		if (isflagset(13)){
      		xlog("L_NOTICE","OPENSER_NAME: $mi route[$rm][2] \
      		$fu Authorization OK\n");
      		};
  		};


if (!check_to()) { 
	if (isflagset(13)){
		xlog("L_NOTICE", "OPENSER_NAME: $mi route[$rm][2] \
		$fu -> $ru REPLY 401 - Unauthorized check_to() failed\n");
     		};
	sl_send_reply("401", "Unauthorized");
	return;
	};

consume_credentials();
};

if (!save("location")) { 
	if (isflagset(13)) {
		xlog("L_NOTICE", "OPENSER_NAME: $mi route[$rm][2] \
        	$fu save(location) Failed\n");
        	};
	sl_reply_error();
	return(0);
	} else {	
		if (isflagset(13)) {
	      	xlog("L_NOTICE", "OPENSER_NAME: $mi route[$rm][2] \
        		$fu save(location)OK\n");
			};
	};

# Quitar la siguiente linea en el proxy de backup
t_replicate("sip:192.168.1.130");
}


route[3] {
# -----------------------------------------------------------------
# INVITE Message Handler
# -----------------------------------------------------------------



log("#### ENTRA EN ALIASES\n");
lookup("aliases");
log("#### SALE DE ALIASES\n");


# Primero se cheque si la peticion va dirigida a un dominio controlado por el proxy, si no es asi la llamada no deberia progresar (hay que hacerlo)


if (!is_uri_host_local()) {
	log("####### NO ES MYSELF\n");
	route(1);
	return;
};

# Si el RURI tiene el dominio pstn.com significa que la peticion viene de un GW y por tanto hay que aplicar ENUM

/*if ($rd == "pstn.com") {    #*/ if (uri=~"^sip:[0-9].*@pstn.com:5060") {
	xlog("L_INFO","Enum lookup");
	prefix("+");
	enum_query("pstn.com","");
}


if (uri=~"^sip:[0-9][0-9][0-9][0-9]@.*") {
        log("####### MENSAJE DE BUZ?N 81XX\n");
	route(7);
        return;
}
				

if (uri=~"^sip:8[0-9][0-9]@.*") {
	log("####### MENSAJE DE BUZ?N 8XX\n");
	route(7);
	return;
	}


if (uri=~"^sip:7[0-9][0-9][0-9]@.*") {
        log("####### MENSAJE DE BUZ?N 7XX\n");
	route(7);
	return;
	}

# PLAN NACIONAL DE NUMERACI? TELEFONICA

if ((uri=~"^sip:[0-9]{9}@") || (uri=~"^sip:0[0-9].*@") || (uri=~"^sip:000[1-9].*@")) { # PSTN 
	log("####### GATEWAY\n");
	if route(9) {
		route(5);
		};
	return;
};

# PLAN DE NUMERACION PRIVADO:
# USER: XYZ + DOMAIN
# DIAL PLAN: AB+XYZ|XYZ (AB Prefix company ID, XYZ Extension ID) 
# Openser is in charge of striping in case of dialing AB+XYZ

if (uri=~"^sip:[0-9]{5}@") {
	prefix2domain("0", "0");
	};

# Mensajes hacia fuera
if (!is_uri_host_local()) {  # Cheque si el dominio del RURI esta en la tablas domain
	if (is_from_local() || allow_source_address("0")) {     #allow_trusted()) {# Cheuqea si el dominio del FROM esta en las tablas de domain esta permitido
	route(1); # lo enruto hacia fuera
	} else {
	sl_send_reply("403", "Forbidden");
	};
return; # sale
};


#### AQUI VEMOS SI HAY ALGUN CONTACTO REGISTRADO

if (!lookup("location")) {
         sl_send_reply("404", "Not Found");
	 exit;
	 };


#### VEMOS SI TIENE ACTIVADO EL BUZON PARA OCUPADO

#### CAPTURAMOS LOS ERRORES

t_on_failure("1");

route(1);

}


route[5] {

# -----------------------------------------------------------------
# PSTN Handler
# -----------------------------------------------------------------



if (!load_gws()){
	sl_send_reply("500", "Internal server error, unable to load phone gateways");
	return;
	};
			
if (!next_gw()) {
	sl_send_reply("503", "Service not available - No gateways");
	return;
	};
t_on_failure("2");
route(1);

}


route[6] {
# ----------------------------------------------------------
# Call Forwarding Handler
#
# This must be done as a route block because sl_send_reply() cannot be
# called from the failure_route block
# ----------------------------------------------------------
log("### ENTRA EN CALL FORWARDING\n");
lookup("aliases");
if (!is_uri_host_local()) {
	if (!isflagset(22)) {
		append_branch();
		};
	route(1);
	return;
	};
if (uri=~"^sip:0[0-9]*@") {
	route(5);
	return;
	};
if (!lookup("location")) {
	sl_send_reply("404", "User Not Found");
	return;
	};
route(1);
}



# -----------------------------------------------------------------
# VoiceMail hadler
# -----------------------------------------------------------------

route[7] {
	log("### ENTRA EN CALL VOICEMAIL\n");
	if (uri=~"^sip:81[0-9][1-9]@.*") {
		strip(1);		
	};
	#if (uri=~"^sip:71[0-9][1-9]@.*") {
        #        strip(1);
        #};
	rewritehost("192.168.222.203"); # INSERT YOUR PSTN GATEWAY IP ADDRESS
	route(1);
	}
	


route[8] {

# -----------------------------------------------------------------
# User verify
# -----------------------------------------------------------------
# Check for known domain(s)
if (!is_from_local()) {
	if (isflagset(13)){
		xlog("L_NOTICE", "OPENSER_NAME: $mi route[$rm][2] \
		$fu Unknown domain\n");
		sl_send_reply("403", "Unknown domain");
		};
	return(0);
	};
# Check to see that the user has not been disabled
/*if (is_user_in("From", "disabled")) {
   	if (isflagset(13)){
	       	xlog("L_NOTICE", "OPENSER_NAME: $mi route[$rm][2] \
	       	$fu Your account has been disabled\n");
	        };	
	sl_send_reply("403", "Your account has been disabled");
	return(0);
	};*/
/*if (is_user_in("To", "disabled")) {
    	if (isflagset(13)) {
      		xlog("L_NOTICE", "OPENSER_NAME: $mi route[$rm][2] \
       		$tu That account has been disabled\n");
        	};
	sl_send_reply("403", "That account has been disabled");
	return(0);
	};*/
}				        

route[9] {

# -----------------------------------------------------------------
# Default Message Handler with  Proxy Authentication
# -----------------------------------------------------------------

if(method=="ACK") {   #these you never proxy authenticate
	route(1);
	return;
	};
if(method=="BYE" || method=="CANCEL") {   #these you never proxy authenticate
        route(1);
        return;
        };
xlog("L_INFO", "Proxy auth $fd $dP destination:$du $dd $ds");
if (!route(8)) { #verify the user
	return(0);
	};
# if (!is_user_in("From", "noauth")) { #no authentication required
	if (!proxy_authorize("","subscriber")) {   
       		proxy_challenge("","0");          
       	        return;
       	} else if (!check_from()) {
      	        sl_send_reply("403", "Use From=ID");
       	        return;
      	};
       	consume_credentials();
#        };
#	if (is_user_in("Credentials", "local")) { 	# Uncomment to use the group options
# route(1);		
#	}else{
#		sl_send_reply("403", "Denied, you are not allowed this route");
#	};
return;
}

########################################################################
# Request route 'normalize-e164'
########################################################################
route[10]
{
# European numbering plans look like this:
#   CC  = country code (i.e. 43 for Austria)
#   NDC = national destination code (i.e. 1 for Vienna)
#   SN  = subscriber number (i.e. 4001234)
#  
#       CC + NDC + SN, i.e. 4314001234
#
# Within the same CC+NDC, it can be omitted, so if
# +4314001234 wants to call +4315002345, one can dial
# just 5002345.
#
# Within the same CC, CC can be ommitted and a "0" is prefixed
# to NDC, so if +4314001234 wants to call +4326003456, 
# one can dial 026003456.
#
# For international calls, either "00" or + is prefixed, like
# +49123456780 or 0049123456789.
#
#avp_delete("$avp(s:orig_callee_user)/g");
#avp(s:orig_callee_user) = $rU;
if(uri =~ "^sip:(\+[1-9])?[0-9]+@")
	{
	# looks like a PSTN number
	if(uri =~ "^sip:0[1-9][0-9]+@")
		{
		# we have format 0+NDC+SN
		strip(1);
		#prefix("+34");
		}
		else if(uri =~ "^sip:00[1-9]+@") {
			# we have format 00 + CC + NDC + SN
			strip(2);
			prefix("+");
			}
		else if(!uri =~ "^sip:\+[1-9][0-9]+@") {
			# unknown format, maybe NDC wasn't added before?
			xlog("L_INFO", "Not normalized callee '$avp(s:orig_callee_user)' to E.164 format - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
			return(-1);
			}

		# else we have "+" + CC + NDC + SN
		xlog("L_INFO", "Normalized callee '$avp(s:orig_callee_user)' to E.164 format '$rU' - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
		return(1);
		}
		else {
			xlog("L_INFO", "Not normalized callee '$avp(s:orig_callee_user)' to E.164 format - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
			return(-1);
			}
		}


## vemos en que estado est? cuando hay FMC especialmente chequeamos si recibe RINGING


onreply_route[2] {


log("##### Entra en ONREPLY\n");


}



failure_route[1] {


log("### ENTRA EN FAUIURE\n");

if (t_check_status("487")) {
	return;
	};

}


failure_route[2]
{

xlog("L_INFO", "Failure route for PSTN entered - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
if(!t_check_status("408|500|503")) {
	xlog("L_INFO", "No failover routing needed for this response code - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
	exit;
	}
if(!next_gw())	{
	xlog("L_ERR", "Failed to select next PSTN gateway - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
	exit;
	}
t_on_failure("1");
route(1);
}

route[13] {

        # -----------------------------------------------------------------
        # Debuging info
        # -----------------------------------------------------------------
        
        if (status=="100") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 100 Trying\n");
	} else if (status=="180") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 180 Ringing\n");
	} else if (status=="181") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 181 Call Is Being Forwarded\n");
	} else if (status=="182") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 182 Queued\n");
	} else if (status=="183") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 183 Session Progress\n");
	} else if (status=="200") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 200 OK\n");
	} else if (status=="202") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 202 Accepted\n");
	} else if (status=="300") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 300 Multiple Choices $ct\n");
	} else if (status=="301") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 301 Moved Permanently $ct\n");
	} else if (status=="302") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 302 Moved Temporarily $ct\n");
	} else if (status=="305") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 305 Use Proxy\n");
	} else if (status=="380") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 380 Alternative Service\n");
	} else if (status=="400") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 400 Bad Request\n");
	} else if (status=="401") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 401 Unauthorized\n");
	} else if (status=="402") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 402 Payment Required\n");
	} else if (status=="403") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 403 Forbidden\n");
	} else if (status=="404") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 404 Not Found\n");
	} else if (status=="405") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 405 Method Not Allowed\n");
	} else if (status=="406") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 406 Not Acceptable\n");
	} else if (status=="407") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 407 Proxy Authentication Required\n");
	} else if (status=="408") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 408 Request Timeout\n");
	} else if (status=="409") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 409 Conflict\n");
	} else if (status=="410") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 410 Gone\n");
	} else if (status=="411") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 411 Length Required\n");
	} else if (status=="412") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 412 Conditional Request Failed\n");
	} else if (status=="413") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 413 Request Entity Too Large\n");
	} else if (status=="414") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 414 Request-URI Too Long\n");
	} else if (status=="415") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 415 Unsupported Media Type\n");
	} else if (status=="416") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 416 Unsupported URI Scheme\n");
	} else if (status=="420") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 420 Bad Extension\n");
	} else if (status=="421") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 421 Extension Required\n");
	} else if (status=="422") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 422 Session Interval Too Small\n");
	} else if (status=="423") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 423 Interval Too Brief\n");
	} else if (status=="429") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 429 Provide Referrer Identity\n");
	} else if (status=="480") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 480 Temporarily Unavailable\n");
	} else if (status=="481") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 481 Call Leg/Transaction Does Not Exist\n");
	} else if (status=="482") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 482 Loop Detected\n");
	} else if (status=="483") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 483 Too Many Hops\n");
	} else if (status=="484") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 484 Address Incomplete\n");
	} else if (status=="485") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 485 Ambiguous\n");
	} else if (status=="486") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 486 Busy Here\n");
	} else if (status=="487") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 487 Busy Here; Request Terminated\n");
	} else if (status=="488") {
	   xlog("L_NOTICE", "OPENSER_NAME: $mi $rm $fu -> $ru status 488 Not Acceptable Here\n");
	} else if (status=="489") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 489 Bad Event\n");
	} else if (status=="491") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 491 Request Pending\n");
	} else if (status=="493") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 493 Undecipherable\n");
	} else if (status=="494") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 494 Security Agreement Required\n");
	} else if (status=="500") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 500 Server Internal Error\n");
	} else if (status=="501") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 501 Not Implemented\n");
	} else if (status=="502") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 502 Bad Gateway\n");
	} else if (status=="503") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 503 Service Unavailable\n");
	} else if (status=="504") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 504 Server Timeout\n");
	} else if (status=="505") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 505 Version Not Supported\n");
	} else if (status=="513") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 513 Message Too Large\n");
	} else if (status=="580") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 580 Precondition Failure\n");
	} else if (status=="600") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 600 Busy Everywhere\n");
	} else if (status=="603") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 603 Decline\n");
	} else if (status=="604") {
	   xlog("L_NOTICE",
	   "OPENSER_NAME: $mi $rm $fu -> $ru status 604 Does Not Exist Anywhere\n");
	} else if (status=="606") {
	   xlog("L_NOTICE",
	  "OPENSER_NAME: $mi $rm $fu -> $ru status 606 Not Acceptable\n");
	} else {
		xlog("L_NOTICE", "OPENSER_NAME: $mi $rm $fu -> $ru status not listed\n");
		};
     	xlog("L_NOTICE", "OPENSER_NAME: $mi $mb\n");
return;        
}       



More information about the Users mailing list