Accidently replied directly to clause. So here is a summary:<br>Sent core dump and system spec info like openser ver.<br>Klaus suggested upgrading to the latest openser 1.2 svn code, trying again, include pert part of openser.cfg
, sip packet capture, and making a bug report.<br><br>So I'm now using latest svn of openser 1.2 as of 11/12/07 on a different server (the backup server)<br>Problem still persists.<br><br>gdb of one of the core dumps is included below.
<br>Below that is a nuterized (my personal server and gateway info cleaned out) openser.cfg<br><br>Thanks<br>
Dave<br>
<br>Below is the gdb of one of the cores:<br><br>Using host libthread_db library "/lib/libthread_db.so.1".<br>warning: Can't read pathname for load map: Input/output error.<br>Core was generated by `/usr/local/sbin/openser'.
<br>Program terminated with signal 11, Segmentation fault.<br>#0 0x0808f152 in comp_scriptvar (msg=<value optimized out>,<br> op=<value optimized out>, left=<value optimized out>, right=0x817ab9c)<br>
at route.c:748<br>748 backup = s1->s[s1->len]; s1->s[s1->len] = '\0';<br><br><br>openser.cfg:<br><br>#<br># $Id: openser.cfg,v 1.6 2006/02/15 18:23:46 bogdan_iancu Exp $
<br>#<br># simple quick-start config script<br>#<br><br># ----------- global configuration parameters ------------------------<br><br>debug=3 # debug level (cmd line: -dddddddddd)<br>fork=yes<br>log_stderror=no # (cmd line: -E)
<br>log_facility=LOG_LOCAL7<br>log_name="openser"<br><br># Uncomment these lines to enter debugging mode <br>#fork=no<br>#log_stderror=yes<br>#listen=eth0<br>#<br>check_via=no # (cmd. line: -v)<br>dns=yes # (cmd. line: -r)
<br>rev_dns=no # (cmd. line: -R)<br>port=5060<br>children=4<br>disable_dns_blacklist=yes<br><br>#listen=udp:eth0<br>#fifo="/tmp/openser_fifo"<br>#fifo_db_url="postgres://seronstar:garney@208.76.152.52/seronstar"
<br><br>#<br># uncomment the following lines for TLS support<br>#disable_tls = 0<br>#listen = tls:your_IP:5061<br>#tls_verify = 1<br>#tls_require_certificate = 0<br>#tls_method = TLSv1<br>#tls_certificate = "/var/tmp/portage/net-misc/openser-
1.1.0/image///etc/openser/tls/user/user-cert.pem"<br>#tls_private_key = "/var/tmp/portage/net-misc/openser-1.1.0/image///etc/openser/tls/user/user-privkey.pem"<br>#tls_ca_list = "/var/tmp/portage/net-misc/openser-
1.1.0/image///etc/openser/tls/user/user-calist.pem"<br><br>#<br># ------------------ module loading ----------------------------------<br><br>mpath="/usr/local/lib/openser/modules/"<br># Uncomment this if you want to use MySQL database
<br>#loadmodule "mysql.so"<br><br>loadmodule "postgres.so"<br>loadmodule "mysql.so"<br>loadmodule "mi_fifo.so"<br>loadmodule "xlog.so"<br>loadmodule "sl.so"<br>loadmodule "
tm.so"<br>loadmodule "rr.so"<br>loadmodule "maxfwd.so"<br>loadmodule "usrloc.so"<br>loadmodule "registrar.so"<br>loadmodule "textops.so"<br>loadmodule "avpops.so
"<br>loadmodule "group.so"<br>loadmodule "uri.so"<br>loadmodule "uri_db.so"<br>loadmodule "alias_db.so"<br># Uncomment this if you want digest authentication<br># postgres.so must be loaded !
<br>loadmodule "auth.so"<br>loadmodule "auth_db.so"<br>loadmodule "acc.so"<br>loadmodule "uac.so"<br>loadmodule "diversion.so"<br>loadmodule "mediaproxy.so"<br>loadmodule "
domain.so"<br>loadmodule "lcr.so"<br><br><br># ----------------- setting module-specific parameters ---------------<br><br># -- usrloc params --<br>#modparam("usrloc", "db_mode", 0)<br>
# Uncomment this if you want to use SQL database <br># for persistent storage and comment the previous line<br>modparam("usrloc", "db_mode", 2)<br>modparam("usrloc", "nat_bflag", 6)
<br><br>#modparam("usrloc|avpops|auth_db|group|acc|uri_db|alias_db",<br>#modparam("usrloc|auth_db|group|acc|uri_db|alias_db|avpops",<br>modparam("usrloc|auth_db|group|acc|uri_db|alias_db|avpops|domain|lcr",
<br> "db_url","<a href="http://mysql://openser:openser@dbserver.myserver.net/openser">mysql://openser:openser@dbserver.myserver.net/openser</a>")<br><br># "db_url","<a href="http://postgres://openser:openser@dbserver.myserver.net/openser">
postgres://openser:openser@dbserver.myserver.net/openser</a>")<br><br>#modparam("avpops", "avp_table", "avp_table")<br>modparam("avpops", "avp_table", "usr_preferences")
<br><br># UAC (User Agent Client) module provides some basic UAC functionalities like FROM header manipulation (anonymization) or client authentication.<br>modparam("uac", "rr_store_param", "vsf")
<br>modparam("uac", "from_restore_mode", "auto")<br><br># -- auth params --<br># Uncomment if you are using auth module<br>modparam("auth_db", "calculate_ha1", yes)<br>modparam("auth_db", "load_credentials", "$avp(s:rpid)=rpid;email_address")
<br>modparam("auth", "rpid_avp", "$avp(s:rpid)")<br>#<br># If you set "calculate_ha1" parameter to yes (which true in this config), <br># uncomment also the following parameter)<br>
#<br>modparam("auth_db", "password_column", "password")<br><br>modparam("tm", "fr_inv_timer_avp", "$avp(i:25)")<br>modparam("tm", "fr_timer", 2)
<br><br># -- rr params --<br># add value to ;lr param to make some broken UAs happy<br>#modparam("rr", "enable_full_lr", 1)<br>#modparam("rr", "append_fromtag", 1)<br><br><br># -- FIFO options starting with openser
1.2<br>modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")<br>modparam("mi_fifo", "fifo_mode", 0600)<br>#modparam("mi_fifo", "fifo_group", 0)<br>#modparam("mi_fifo", "fifo_group", "root")
<br>#modparam("mi_fifo", "fifo_user", 0)<br>#modparam("mi_fifo", "fifo_user", "root")<br>modparam("mi_fifo", "reply_dir", "/tmp/")<br><br><br>
modparam("mediaproxy", "mediaproxy_socket", "/var/run/proxydispatcher.sock")<br>modparam("domain", "db_mode", 1)<br><br>modparam("acc", "early_media", 0)
<br>modparam("acc", "failed_transaction_flag", 24)<br>modparam("acc", "report_ack", 0)<br>modparam("acc", "report_cancels", 0)<br>modparam("acc", "log_flag", 0)
<br>modparam("acc", "log_missed_flag", 0)<br>modparam("acc", "log_level", 2)<br>modparam("acc", "db_flag", 25)<br>modparam("acc", "db_missed_flag", 0)
<br>modparam("acc", "db_table_acc", "acc")<br>modparam("acc", "db_table_missed_calls", "missed_calls")<br>modparam("acc", "detect_direction", 1)
<br>modparam("acc", "db_extra", "src_user=$fU;src_domain=$fd;dst_user=$rU;dst_domain=$rd")<br>#modparam("acc", "multi_leg_info", "diversion_user=$di{url.user};diversion_domain=$di{
uri.domain}")<br>modparam("acc", "multi_leg_info", "diversion_user=$avp(s:diversion_user);diversion_domain=$avp(s:diversion_domain)")<br><br>modparam("lcr","gw_uri_avp","gw_uri_avp")
<br><br>modparam("lcr", "gw_table", "gw")<br>modparam("lcr", "gw_name_column", "gw_name")<br>modparam("lcr", "ip_addr_column", "ip_addr")
<br>modparam("lcr", "port_column", "port")<br>modparam("lcr", "uri_scheme_column", "uri_scheme")<br>modparam("lcr", "transport_column", "transport")
<br>modparam("lcr", "grp_id_column", "grp_id")<br>modparam("lcr", "lcr_table", "lcr")<br>modparam("lcr", "strip_column", "strip")<br>
modparam("lcr", "prefix_column", "prefix")<br>modparam("lcr", "from_uri_column", "from_uri")<br>modparam("lcr", "priority_column", "priority")
<br>#modparam("lcr", "gw_uri_avp", "1400")<br>modparam("lcr", "ruri_user_avp", "1402")<br>modparam("lcr", "contact_avp", "1401")<br>
modparam("lcr", "fr_inv_timer_avp", "s:fr_inv_timer_avp")<br>modparam("lcr", "fr_inv_timer", 90)<br>modparam("lcr", "fr_inv_timer_next", 30)<br>modparam("lcr", "rpid_avp", "s:rpid")
<br><br># ------------------------- what set?flags mean --------------------<br><br>## General Flags ##<br><br># setflag(1); # from PSTN gateway<br># setflag(2); # from local user<br># setflag(3); # user NOT allowed to make pstn calls
<br># setflag(4); # user account IS disabled<br># setflag(24); # account failed transactions<br># setflag(25); # account successful transactions<br><br>## Branch Flags<br># setbflag(22); # mark media proxy as started<br><br>
# ------------------------- request routing logic -------------------<br><br># main routing logic<br><br><br>route{<br><br> # initial sanity checks -- messages with<br> # max_forwards==0, or excessively long requests
<br> if (!mf_process_maxfwd_header("10")) {<br> sl_send_reply("483","Too Many Hops");<br> xlog("L_INFO", "Sanity Check: Too Many Hops\n");<br> exit;
<br> xlog("L_INFO", "ignored break\n");<br> };<br><br> if (msg:len >= 2048 ) {<br> sl_send_reply("513", "Message too big");<br> xlog("L_INFO", "Sanity Check: Message too big\n");
<br> exit;<br> };<br><br> # we record-route all messages -- to make sure that<br> # subsequent messages will go through our proxy; that's<br> # particularly good if upstream and downstream entities<br>
# use different transport protocol<br> if (is_method("OPTIONS") || is_method("NOTIFY"))<br> {<br> exit;<br> }<br> if (method!="REGISTER" && method!="ACK") {
<br> record_route();<br> xlog("L_INFO", "start route logic: r-uri <$ru> f-uri <$fu> f-Usr <$fU> FromDisplay $fn\n");<br> xlog("L_INFO", "Recording Route: r-uri <$ru>\n");
<br> setflag(24); # account failed transactions<br> setflag(25); # account successful transactions<br> };<br><br> # subsequent messages withing a dialog should take the<br> # path determined by record-routing
<br> if (loose_route()) {<br> # mark routing logic in request<br> append_hf("P-hint: rr-enforced\r\n"); <br> xlog("L_INFO", "following previous route: r-uri <$ru>\n");
<br> if(is_method("BYE"))<br> {<br> setflag(24); # account failed transactions<br> setflag(25); # account successful transactions<br> }<br> route(1);<br> exit;
<br> };<br><br> if (uri==myself) <br> {<br> xlog("L_INFO", "message to me, Req Meth $rm\n");<br> if (method=="REGISTER") {<br> route(5);<br> };<br> setflag(24); # account failed transactions
<br> setflag(25); # account successful transactions<br> if(is_method("CANCEL") || is_method("ACK"))<br> {<br> if(t_check_trans())<br> {<br> route(1);
<br> }<br> else<br> {<br> <br> xlog("L_INFO", "Dropping mis-routed request - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");<br> }
<br> exit;<br> }<br># if(from_uri==myself)<br># {<br># # need to make this detect an infinite loop, sometimes simulring may send to loop to call other phone numbers<br># xlog("L_INFO", "Dropping local loop-back oops - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
<br># drop();<br># }<br><br> # guilty until proven innocent... don't let call go to PSTN unless the server or user is authorized for that through later checks.<br> setflag(3) ; # user not allowed to make pstn calls
<br><br> #if ( from_gw("1") )<br> if ( uri =~ "<a href="http://sip.myserver.net">sip.myserver.net</a>" && is_present_hf("Remote-Party-ID") )<br> {<br> xlog("L_INFO", "Looks like it came from a verizon gateway server, aka PSTN\n");
<br> setflag(1); # from PSTN Gateway<br> }<br> else<br> {<br> xlog("L_INFO", "Its NOT from a verizon gateway server, aka PSTN\n");<br> }<br> if ( ! isflagset(1) ) # if not from PSTN
<br> {<br> route(9) ; # load settings for calling user.<br> if ( ! isflagset(2) ) # if NOT local user<br> {<br> route(10) ; # check for and load settings for calling domain.
<br> } <br> } <br> if ($rP=~"tcp") <br> {<br> avp_printf("$avp(s:DestURI)", "sip:$rU@$rd;transport=UDP" );<br> avp_pushto("$ru", "$avp(s:DestURI)" );
<br> }<br> route(3); # Clean it up and send it our user if appropriate.<br> route(4); # Send our little one to the world and hope it survives :'( <br><br> }<br>}<br><br>error_route {<br> xlog("L_INFO", "--- error route class=$(
err.class) level=$(err.level) info=$(<a href="http://err.info">err.info</a>) rcode=$(err.rcode) rreason=$(err.rreason) ---\n");<br> xlog("L_INFO", "--- error from [$si:$sp]\n+++++\n$mb\n++++\n");
<br> #sl_send_reply("$err.rcode", "$err.rreason");<br> route(7); # stop media proxy<br> exit;<br>}<br><br>route[1] {<br> xlog("L_INFO", "Request leaving server - M=$rm RURI=$ru Proto=$dP F=$fu T=$tu IP=$si ID=$ci\n");
<br> # for TC51 ( when device unreachable proper 403 is not returned )<br> #sl_send_reply("100", "Giving a try");<br> #sl_send_reply("403", "Not Reachable");<br> #drop() ;
<br> #t_on_failure("1");<br> if ( ! uri==myself )<br> {<br> if ( is_method("INVITE"))<br> route(6); # start media proxy<br> if ( is_method("CANCEL")) <br> route(7); # stop media proxy
<br> }<br> t_on_reply("1");<br> if(isflagset(24) || isflagset(25))<br> route(8); # populate accounting info<br> $avp(i:25)=5000 ;<br> if (!t_relay()) {<br> # This section doesn't seem to be reached even on failures.
<br> xlog("L_INFO", "Failed sending to: $ru\n"); <br> xlog("L_INFO", "--- error route class=$(err.class) level=$(err.level) info=$(<a href="http://err.info">err.info</a>
) rcode=$(err.rcode) rreason=$(err.rreason) ---\n");<br> xlog("L_INFO", "--- error from [$si:$sp] \n +++++\n$mb\n++++\n");<br> sl_send_reply("$err.rcode", "$err.rreason");
<br> route(7); # stop media proxy<br> }<br> exit;<br>}<br><br>route[2] {<br> xlog("Now in route_2\n");<br> xlog("L_INFO", "Checking if $rU is one of our numbers\n");<br> $avp(s:Original_User) = $rU ;
<br> # ok to load avps for potential TO user,<br> # If the user doesn't exist the avp's for the from user won't be over writen<br> # and we are not pulling the from specific user preferences.<br>
if ( avp_db_load("$ru/username","*/usr_preferences_to") )<br> {<br> xlog("L_INFO", "avp_db_load was successfull\n");<br> }<br> else<br> {<br> xlog("L_INFO", "avp_db_load failed with return code: $rc\n");
<br> }<br> if (is_avp_set("$avp(s:call_forward)"))<br> {<br> # hard forward to new user/number<br> xlog("L_INFO", "$rU is hard forwarded to $avp(s:call_forward) \n");<br>
add_diversion("user-unavailable");<br> # set user that we will load new from user preferences for.<br> $avp(s:from_usr_tmp) = $ru;<br> route(9); # load from user preferences<br> avp_pushto("$ru/username", "$avp(s:call_forward)");
<br> rewritehost("<a href="http://127.0.0.1">127.0.0.1</a>");<br> avp_delete("$avp(s:via)/g");<br> # look up for if new number is one of ours and has settings<br> avp_db_load("$ru{
uri.user}/username","*/usr_preferences_to");<br> route(8); # set vars for accounting diversion info.<br> #avp_db_load("$avp(s:call_forward)/username","*/usr_preferences_to");
<br> # TODO: should do a loop to check for new num forwarding and make sure not infinite loop.<br> }<br> if (alias_db_lookup("dbaliases"))<br> {<br> if (!uri==myself) {<br> avp_pushto("$ru/username", "$avp(s:Original_User)");
<br> xlog("L_INFO", "routing for gateway_dbaliases: r-uri <$ru>\n");<br> route(1);<br> }<br> else<br> {<br> xlog("L_INFO", "dbaliases changed user to $rU>\n");
<br> }<br> }<br> else<br> {<br> xlog("L_INFO", "dbaliases lookup failed w/ return code=$rc for r-uri <$ru>\n");<br> }<br> if ( is_avp_set("$avp(s:num_alias)"))
<br> { <br> avp_pushto("$ru/username", "$avp(s:num_alias)");<br> xlog("L_INFO", "redirecting to another number: $avp(s:num_alias)\n");<br> }<br> if ( is_avp_set("$avp(s:via)")) {
<br> avp_pushto("$ru/domain", "$avp(s:via)");<br> xlog("L_INFO", "$rU is reached through server: $avp(s:via)\n");<br> }<br> if (!uri==myself)<br> {<br> xlog("L_INFO", "routing to default server: $rd\n");
<br> route(1);<br> }<br> xlog("L_INFO", "checking devices registered here in location table: r-uri <$ru>\n");<br> #lookup("location");<br> if (!uri==myself) {<br> xlog("L_INFO", "routing from info in location table\n");
<br> avp_pushto("$ru/username", "$avp(s:Original_User)");<br> route(1);<br> }<br>}<br><br>route[3] {<br> xlog("Now in route_3\n");<br> # Check if it belongs to us first
<br> if ( uri=~"sip:[0-9]{7}@" ) {<br> # Handle 7 digit numbers<br> # by temp adding areacode from calling num <br> # and run it against databases with our nums.<br> xlog("L_INFO", "Caller dialed 7 digits. Checking if callers area code + $rU is one of our numbers\n");
<br> $avp(s:FromUser)=$fU;<br> $avp(s:OriginalDestinationNumber)=$rU;<br> xlog("L_INFO", "avp-cid $avp(s:FromUser) avp-ariacode $avp(s:AreaCode) f-uri <$fu>\n");<br> avp_subst("$avp(s:FromUser)/$avp(s:AreaCode)","/^([0-9]{3}).*/\1/");
<br> xlog("L_INFO", "avp-fU $avp(s:FromUser) avp-ariacode $avp(s:AreaCode) f-uri <$fu>\n");<br> avp_printf("$avp(s:NewTenDigDest)","$avp(s:AreaCode)$rU");<br> xlog("about to push avp NewTenDigDest: $avp(s:NewTenDigDest)");
<br> avp_pushto("$ru/username","$avp(s:NewTenDigDest)");<br> } else if ( uri=~"sip:\+" || uri=~"sip:\+{0,1}1[0-9]{10}@" ) <br> { # clean num to 10 digit<br> # Remove "+" from front of incoming number.
<br> # it must have come in from verizon<br> $avp(s:OriginalDestinationNumber)=$rU;<br> xlog("L_INFO", "Requested number starts with +1, clean it off: $rU\n");<br> $avp(s:OriginalDestinationNumber)=$rU;
<br> #xlog("L_INFO", "avp-cid $avp(s:OriginalDestinationNumber) avp-ariacode $avp(s:NewTenDigDest) f-uri <$fu>\n");<br> avp_subst("$avp(s:OriginalDestinationNumber)/$avp(s:NewTenDigDest)","/.*([0-9]{10})$/\1/");
<br> avp_pushto("$ru/username","$avp(s:NewTenDigDest)");<br> xlog("L_INFO", "avp-NewTenDigDest $avp(s:NewTenDigDest) avp-cleaned $avp(s:OriginalDestinationNumber) r-uri <$ru>\n");
<br> }<br> route(2); # Check db if Dest num is for us.<br> xlog("Back from route_2\n");<br> if (is_avp_set("$avp(s:call_forward)") )<br> {<br> xlog("Forwarding call and new num is not ours.. out to the world you go! Ha Ha Ha!\n");
<br> route(4);<br> }<br> if ( is_avp_set("$avp(s:OriginalDestinationNumber)") && ! is_avp_set("$avp(s:call_forward)") )<br> {<br> # restore original num incase there is more processing needed by calling process.
<br> avp_pushto("$ru/username","$avp(s:OriginalDestinationNumber)");<br> xlog("Restored original num: ru -> $ru");<br> }<br> route(4); # Send our little one to the world and hope it survives :'(
<br> <br>}<br><br>route[4] {<br> xlog("L_INFO", "In route-4: r-uri <$ru>\n");<br> # routing to world.<br> xlog("L_INFO", "no location defined for uri: r-uri <$ru>\n");
<br> #Call destination is PSTN, so send it to the gateway<br> xlog("L_INFO", "CALL: PSTN gateway\n");<br> xlog("Before set: avp-rpid is $avp(s:rpid)");<br> if ( ! from_uri=~"sip:\+" )
<br> {<br> avp_printf("$avp(s:rpid)","<a href="mailto:sip:+1$fU@sip.myserver.net">sip:+1$fU@sip.myserver.net</a>");<br> xlog("NOT from ser test phone. setting avp-rpid to $avp(s:rpid)");
<br> }<br> else<br> {<br> avp_printf("$avp(s:rpid)","<a href="mailto:sip:$fU@sip.myserver.net">sip:$fU@sip.myserver.net</a>");<br> xlog("NOT from ser test phone. setting avp-i13 to $avp(s:rpid)");
<br> }<br> if(is_present_hf("P-Asserted-Identity")) {<br> remove_hf("P-Asserted-Identity");<br> }<br># if( ! (is_present_hf("Remote-Party-ID") && $re =~ "sip:\+[1-9]+" ) )
<br># { <br> if ( is_present_hf("Remote-Party-ID") )<br> {<br> remove_hf("Remote-Party-ID"); <br> }<br> append_hf("Remote-Party-ID: <$avp(s:rpid)>;privacy=$avp(s:privacy)\r\n") ; # Append Remote-Party-ID header field
<br># }<br> <br> xlog("L_INFO", ": f-uri before with +1: f-uri <$fu>\n");<br> uac_replace_from("$avp(s:rpid)") ;<br># if (!load_gws("1"))<br># {<br># #sl_send_reply("500", "Server Internal Error - Cannot load gateways from group 1");
<br># #exit;<br># xlog("L_INFO", ": Gateways failed to load from group 1\n");<br># }<br> avp_printf("$avp(s:first_gw)","sip:$rU@<first-gw-addr>");<br> avp_printf("$avp(s:first_gw)","sip:$rU@<second-gw-addr>");
<br># xlog("L_INFO", ": Gateways loaded -- gw_uri_avp = $avp(s:gw_uri_avp)\n");<br># xlog("L_INFO", ": Added entry to Gateways avp gw_uri_avp = $avp(s:gw_uri_avp)\n");<br># if ( next_gw() )
<br># {<br># xlog("L_INFO", ": Gateways loaded, gw_uri_avp = $avp(s:gw_uri_avp)\n");<br># }<br># else<br># {<br># xlog("L_INFO", ": Gateway query returned nothing, gw_uri_avp = $avp(s:gw_uri_avp)\n");
<br># }<br> #t_on_branch("1");<br> t_on_failure("1");<br> avp_pushto("$ru","$avp(s:first_gw)"); # new branch for this uri<br> xlog("L_INFO", ": first_gw branching -- $avp(s:first_gw)\n");
<br> avp_delete("$avp(s:first_gw)");<br> xlog("L_INFO", ": first_gw 'next-time' branch to -- $avp(s:first_gw)\n");<br> route(1) ;<br>}<br><br>route[5] {<br> # useing digest authentication
<br> if (!www_authorize("", "subscriber")) {<br> xlog("L_INFO", "user didn't send credentials: f-uri <$fu> r-uri <$ru>\n");<br> www_challenge("", "0");
<br> exit;<br> };<br> xlog("L_INFO", "user registered: f-uri <$fu>\n");<br> if (!src_ip==<other-loadballance-host-ip>) {<br> t_replicate("sip:<other-loadballance-host-ip>:5060");
<br> };<br><br> save("location");<br> exit;<br>}<br><br>route[6] {<br> # force media proxy start<br> xlog("L_INFO", "in route 6: Start Media Proxy\n");<br> setbflag(22); # mark media proxy as started
<br> if(! isbflagset(22))<br> {<br> xlog("L_INFO", "Starting Media Proxy\n");<br> if(use_media_proxy())<br> {<br> xlog("L_INFO", "Started Media Proxy\n");
<br> }<br> else<br> {<br> xlog("L_INFO", "FAILED to start Media Proxy\n");<br> }<br> }<br><br># setbflag(22); # mark media proxy as started.<br># use_media_proxy();
<br>}<br><br>route[7] {<br> # force media proxy stop<br> if (isbflagset(22))<br> end_media_session();<br>}<br><br>route[8] <br>{<br>#modparam("acc", "multi_leg_info", "diversion_user=$avp(s:diversion_user);diversion_domain=$avp(s:diversion_domain)")
<br> if ( is_present_hf("Diversion"))<br> {<br> $avp(s:diversion_user)=$di{url.user};<br> $avp(s:diversion_domain)=$di{uri.domain};<br> }<br>}<br><br>route[9]<br>{<br> xlog("L_INFO", "In Route 9.\n");
<br> if ( ! is_avp_set("$avp(s:from_usr_tmp)" ) )<br> #if ( $var(from_usr_tmp){s.len} == 0 )<br> {<br> $avp(s:from_usr_tmp) = $fu;<br> } <br> xlog("L_INFO", "Loading AVPs for from user $avp(s:from_usr_tmp) if they exist\n");
<br> <br> #if(avp_db_load("$fu{uri.user}/username","*/usr_preferences_from"))<br> if(avp_db_load("$avp(s:from_usr_tmp)/username","*/usr_preferences_from"))<br> {<br>
xlog("L_INFO", "Loaded AVPs for from user $fU\n");<br> setflag(2) ; # from local user<br> # is user account set to disabled or not allowed to make calls to pstn?<br> if ( ! is_avp_set("$avp(s:allow_call_pstn)") || avp_check("$avp(s:allow_call_pstn)", "re/yes/i") )
<br> {<br> resetflag(3) ; # user IS allowed to make pstn calls<br> }<br> else<br> {<br> setflag(3) ; # user IS NOT allowed to make pstn calls<br> }<br> if ( ! is_avp_set("$avp(s:acct_status)") || ! avp_check("$avp(s:acct_status)", "re/disabled/i") )
<br> {<br> resetflag(4) ; # user account IS NOT disabled<br> }<br> else<br> {<br> setflag(4) ; # user account IS disabled<br> setflag(3) ; # user IS NOT allowed to make pstn calls
<br> }<br> <br> }<br> avp_delete("$avp(s:from_usr_tmp)");<br>}<br><br>route[10] # check for and load settings for calling domain.<br>{<br> xlog("L_INFO", "In Route 10.\n");
<br><br>}<br>onreply_route[1]<br>{<br> xlog("L_INFO", "Reply - S=$rs D=$rr F=$fu T=$tu IP=$si ID=$ci\n");<br> if(! isbflagset(22) && status=~"(180)|(183)|2[0-9][0-9]")<br> if ( is_method("CANCEL"))
<br> route(7); # stop media proxy<br># if ( is_method("INVITE")) <br># route(6);<br># {<br># xlog("L_INFO", "Starting Media Proxy\n");<br># if(use_media_proxy())
<br># {<br># setbflag(22); # mark media proxy as started<br># xlog("L_INFO", "Started Media Proxy\n");<br># }<br># else<br># {<br># xlog("L_INFO", "FAILED to start Media Proxy\n");
<br># }<br># }<br> exit;<br> <br>}<br> <br> <br>failure_route[1] {<br> xlog("L_INFO", "Failure route for PSTN entered - S=$T_reply_code M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
<br><br># avp_pushto("$br","$avp(s:first_gw)"); # new branch for this uri<br># xlog("L_INFO", ": first_gw branching -- $avp(s:first_gw)\n");<br># avp_delete("$avp(s:first_gw)");
<br># xlog("L_INFO", ": first_gw 'next-time' branch to -- $avp(s:first_gw)\n");<br> if (t_check_status("(403)|(Forbiden)"))<br> {<br> xlog("L_INFO", "Status $T_reply_code\n");
<br> xlog("L_INFO", "Rejected by this gateway group, skip to next group if it exists.\n");<br> avp_delete("$avp(s:first_gw)/g");<br> }<br> if ( ! is_avp_set("$avp(s:first_gw)") )
<br> {<br> if ( is_avp_set("$avp(s:second_gw)"))<br> {<br> <br> avp_copy("$avp(s:second_gw)", "$avp(s:first_gw)/gd");<br> if ( is_avp_set("$avp(s:third_gw)"))
<br> {<br> avp_copy("$avp(s:third_gw)", "$avp(s:second_gw)/gd");<br> }<br> }<br> else<br> {<br> xlog("L_INFO", "Out of gateways to try, dropping call.\n");
<br> drop();<br> }<br> }<br> t_on_failure("1");<br> t_on_branch("1");<br> avp_pushto("$br","$avp(s:first_gw)"); # new branch for this uri<br> avp_delete("$avp(s:first_gw)");
<br># t_on_failure("2");<br># t_on_branch("2");<br># rewritehost("<a href="http://65.217.40.219">65.217.40.219</a>"); <br> xlog("L_INFO", "Now R-URI=$ru\n");<br>
# append_branch();<br> route(1);<br>}<br><br>branch_route[1]<br>{<br> xlog("L_INFO", "In Branch_Route 1\n");<br> if(uri==myself)<br> {<br> <br> xlog("L_INFO", "Dropping local branch - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
<br> drop();<br> } else {<br> xlog("L_INFO", "In Branch_Route 1, Sending to=$ru\n");<br> if ( is_method("INVITE"))<br> route(6); # start media proxy<br> if ( is_method("CANCEL"))
<br> route(7); # stop media proxy<br> }<br>}<br><br>branch_route[2]<br>{<br> xlog("L_INFO", "In Br_Rt2, Failed Domain=$avp(s:FailedAddr)\n");<br> if(uri==myself )<br> {<br>
<br> xlog("L_INFO", "Dropping local branch - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");<br> drop();<br> } else {<br> xlog("L_INFO", "In Br_Rt2, Sending to=$ru Proto=$dP\n");
<br> if ( is_method("INVITE"))<br> route(6); # start media proxy<br> if ( is_method("CANCEL")) <br> route(7); # stop media proxy<br> }<br>}<br><br><br><br>