[OpenSER-Users] ERROR: receive_fd: EOF on 15

Dave Singer dave.singer at wideideas.com
Tue Nov 13 04:05:31 CET 2007


Accidently replied directly to clause. So here is a summary:
Sent core dump and system spec info like openser ver.
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.

So I'm now using latest svn of openser 1.2 as of 11/12/07 on a different
server (the backup server)
Problem still persists.

gdb of one of the core dumps is included below.
Below that is a nuterized (my personal server and gateway info cleaned out)
openser.cfg

Thanks
Dave

Below is the gdb of one of the cores:

Using host libthread_db library "/lib/libthread_db.so.1".
warning: Can't read pathname for load map: Input/output error.
Core was generated by `/usr/local/sbin/openser'.
Program terminated with signal 11, Segmentation fault.
#0  0x0808f152 in comp_scriptvar (msg=<value optimized out>,
    op=<value optimized out>, left=<value optimized out>, right=0x817ab9c)
    at route.c:748
748                             backup  = s1->s[s1->len]; s1->s[s1->len] =
'\0';


openser.cfg:

#
# $Id: openser.cfg,v 1.6 2006/02/15 18:23:46 bogdan_iancu Exp $
#
# simple quick-start config script
#

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

debug=3             # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=no    # (cmd line: -E)
log_facility=LOG_LOCAL7
log_name="openser"

# Uncomment these lines to enter debugging mode
#fork=no
#log_stderror=yes
#listen=eth0
#
check_via=no    # (cmd. line: -v)
dns=yes         # (cmd. line: -r)
rev_dns=no      # (cmd. line: -R)
port=5060
children=4
disable_dns_blacklist=yes

#listen=udp:eth0
#fifo="/tmp/openser_fifo"
#fifo_db_url="postgres://seronstar:garney@208.76.152.52/seronstar"

#
# uncomment the following lines for TLS support
#disable_tls = 0
#listen = tls:your_IP:5061
#tls_verify = 1
#tls_require_certificate = 0
#tls_method = TLSv1
#tls_certificate = "/var/tmp/portage/net-misc/openser-1.1.0
/image///etc/openser/tls/user/user-cert.pem"
#tls_private_key = "/var/tmp/portage/net-misc/openser-1.1.0
/image///etc/openser/tls/user/user-privkey.pem"
#tls_ca_list = "/var/tmp/portage/net-misc/openser-1.1.0
/image///etc/openser/tls/user/user-calist.pem"

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

mpath="/usr/local/lib/openser/modules/"
# Uncomment this if you want to use MySQL database
#loadmodule "mysql.so"

loadmodule "postgres.so"
loadmodule "mysql.so"
loadmodule "mi_fifo.so"
loadmodule "xlog.so"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "textops.so"
loadmodule "avpops.so"
loadmodule "group.so"
loadmodule "uri.so"
loadmodule "uri_db.so"
loadmodule "alias_db.so"
# Uncomment this if you want digest authentication
# postgres.so must be loaded !
loadmodule "auth.so"
loadmodule "auth_db.so"
loadmodule "acc.so"
loadmodule "uac.so"
loadmodule "diversion.so"
loadmodule "mediaproxy.so"
loadmodule "domain.so"
loadmodule "lcr.so"


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

# -- usrloc params --
#modparam("usrloc", "db_mode",   0)
# Uncomment this if you want to use SQL database
# for persistent storage and comment the previous line
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "nat_bflag", 6)

#modparam("usrloc|avpops|auth_db|group|acc|uri_db|alias_db",
#modparam("usrloc|auth_db|group|acc|uri_db|alias_db|avpops",
modparam("usrloc|auth_db|group|acc|uri_db|alias_db|avpops|domain|lcr",
    "db_url","mysql://openser:openser@dbserver.myserver.net/openser")

#    "db_url","postgres://openser:openser@dbserver.myserver.net/openser")

#modparam("avpops", "avp_table", "avp_table")
modparam("avpops", "avp_table", "usr_preferences")

# UAC (User Agent Client) module provides some basic UAC functionalities
like FROM header manipulation (anonymization) or client authentication.
modparam("uac", "rr_store_param", "vsf")
modparam("uac", "from_restore_mode", "auto")

# -- auth params --
# Uncomment if you are using auth module
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "load_credentials", "$avp(s:rpid)=rpid;email_address")
modparam("auth", "rpid_avp", "$avp(s:rpid)")
#
# If you set "calculate_ha1" parameter to yes (which true in this config),
# uncomment also the following parameter)
#
modparam("auth_db", "password_column", "password")

modparam("tm", "fr_inv_timer_avp", "$avp(i:25)")
modparam("tm", "fr_timer", 2)

# -- rr params --
# add value to ;lr param to make some broken UAs happy
#modparam("rr", "enable_full_lr", 1)
#modparam("rr", "append_fromtag", 1)


# -- FIFO options starting with openser 1.2
modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")
modparam("mi_fifo", "fifo_mode", 0600)
#modparam("mi_fifo", "fifo_group", 0)
#modparam("mi_fifo", "fifo_group", "root")
#modparam("mi_fifo", "fifo_user", 0)
#modparam("mi_fifo", "fifo_user", "root")
modparam("mi_fifo", "reply_dir", "/tmp/")


modparam("mediaproxy", "mediaproxy_socket", "/var/run/proxydispatcher.sock")
modparam("domain", "db_mode", 1)

modparam("acc", "early_media", 0)
modparam("acc", "failed_transaction_flag", 24)
modparam("acc", "report_ack", 0)
modparam("acc", "report_cancels", 0)
modparam("acc", "log_flag", 0)
modparam("acc", "log_missed_flag", 0)
modparam("acc", "log_level", 2)
modparam("acc", "db_flag", 25)
modparam("acc", "db_missed_flag", 0)
modparam("acc", "db_table_acc", "acc")
modparam("acc", "db_table_missed_calls", "missed_calls")
modparam("acc", "detect_direction", 1)
modparam("acc", "db_extra",
"src_user=$fU;src_domain=$fd;dst_user=$rU;dst_domain=$rd")
#modparam("acc", "multi_leg_info", "diversion_user=$di{url.user
};diversion_domain=$di{uri.domain}")
modparam("acc", "multi_leg_info",
"diversion_user=$avp(s:diversion_user);diversion_domain=$avp(s:diversion_domain)")

modparam("lcr","gw_uri_avp","gw_uri_avp")

modparam("lcr", "gw_table", "gw")
modparam("lcr", "gw_name_column", "gw_name")
modparam("lcr", "ip_addr_column", "ip_addr")
modparam("lcr", "port_column", "port")
modparam("lcr", "uri_scheme_column", "uri_scheme")
modparam("lcr", "transport_column", "transport")
modparam("lcr", "grp_id_column", "grp_id")
modparam("lcr", "lcr_table", "lcr")
modparam("lcr", "strip_column", "strip")
modparam("lcr", "prefix_column", "prefix")
modparam("lcr", "from_uri_column", "from_uri")
modparam("lcr", "priority_column", "priority")
#modparam("lcr", "gw_uri_avp", "1400")
modparam("lcr", "ruri_user_avp", "1402")
modparam("lcr", "contact_avp", "1401")
modparam("lcr", "fr_inv_timer_avp", "s:fr_inv_timer_avp")
modparam("lcr", "fr_inv_timer", 90)
modparam("lcr", "fr_inv_timer_next", 30)
modparam("lcr", "rpid_avp", "s:rpid")

# -------------------------  what set?flags mean --------------------

## General Flags ##

# setflag(1); # from PSTN gateway
# setflag(2); # from local user
# setflag(3); # user NOT allowed to make pstn calls
# setflag(4); # user account IS disabled
# setflag(24); # account failed transactions
# setflag(25); # account successful transactions

## Branch Flags
# setbflag(22); # mark media proxy as started

# -------------------------  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");
        xlog("L_INFO", "Sanity Check: Too Many Hops\n");
        exit;
        xlog("L_INFO", "ignored break\n");
    };

    if (msg:len >=  2048 ) {
        sl_send_reply("513", "Message too big");
        xlog("L_INFO", "Sanity Check: Message too big\n");
        exit;
    };

    # we record-route all messages -- to make sure that
    # subsequent messages will go through our proxy; that's
    # particularly good if upstream and downstream entities
    # use different transport protocol
    if (is_method("OPTIONS") || is_method("NOTIFY"))
    {
        exit;
    }
    if (method!="REGISTER" && method!="ACK") {
        record_route();
        xlog("L_INFO", "start route logic: r-uri <$ru> f-uri <$fu> f-Usr
<$fU> FromDisplay $fn\n");
        xlog("L_INFO", "Recording Route: r-uri <$ru>\n");
        setflag(24); # account failed transactions
        setflag(25); # account successful transactions
    };

    # subsequent messages withing a dialog should take the
    # path determined by record-routing
    if (loose_route()) {
        # mark routing logic in request
        append_hf("P-hint: rr-enforced\r\n");
        xlog("L_INFO", "following previous route: r-uri <$ru>\n");
        if(is_method("BYE"))
        {
            setflag(24); # account failed transactions
            setflag(25); # account successful transactions
        }
        route(1);
        exit;
    };

    if (uri==myself)
    {
        xlog("L_INFO", "message to me, Req Meth $rm\n");
        if (method=="REGISTER") {
            route(5);
        };
        setflag(24); # account failed transactions
        setflag(25); # account successful transactions
        if(is_method("CANCEL")  || is_method("ACK"))
        {
            if(t_check_trans())
            {
                route(1);
            }
            else
            {

                xlog("L_INFO", "Dropping mis-routed request - M=$rm RURI=$ru
F=$fu T=$tu IP=$si ID=$ci\n");
            }
            exit;
        }
#        if(from_uri==myself)
#        {
#            # need to make this detect an infinite loop, sometimes
simulring may send to loop to call other phone numbers
#            xlog("L_INFO", "Dropping local loop-back oops - M=$rm RURI=$ru
F=$fu T=$tu IP=$si ID=$ci\n");
#            drop();
#        }

        # guilty until proven innocent... don't let call go to PSTN unless
the server or user is authorized for that through later checks.
        setflag(3) ; # user not allowed to make pstn calls

        #if ( from_gw("1") )
        if ( uri =~ "sip.myserver.net" && is_present_hf("Remote-Party-ID") )
        {
            xlog("L_INFO", "Looks like it came from a verizon gateway
server, aka PSTN\n");
            setflag(1); # from PSTN Gateway
        }
        else
        {
            xlog("L_INFO", "Its NOT from a verizon gateway server, aka
PSTN\n");
        }
        if ( ! isflagset(1) ) # if not from PSTN
        {
            route(9) ; # load settings for calling user.
            if ( ! isflagset(2) ) # if NOT local user
            {
                route(10) ; # check for and load settings for calling
domain.
            }
        }
        if ($rP=~"tcp")
        {
            avp_printf("$avp(s:DestURI)", "sip:$rU@$rd;transport=UDP" );
            avp_pushto("$ru", "$avp(s:DestURI)" );
        }
        route(3); # Clean it up and send it our user if appropriate.
        route(4); # Send our little one to the world and hope it survives
:'(

    }
}

error_route {
    xlog("L_INFO", "--- error route class=$(err.class) level=$(err.level)
info=$(err.info) rcode=$(err.rcode) rreason=$(err.rreason) ---\n");
    xlog("L_INFO", "--- error from [$si:$sp]\n+++++\n$mb\n++++\n");
    #sl_send_reply("$err.rcode", "$err.rreason");
    route(7); # stop media proxy
    exit;
}

route[1] {
    xlog("L_INFO", "Request leaving server - M=$rm RURI=$ru Proto=$dP F=$fu
T=$tu IP=$si ID=$ci\n");
    # for TC51 ( when device unreachable proper 403 is not returned )
    #sl_send_reply("100", "Giving a try");
    #sl_send_reply("403", "Not Reachable");
    #drop() ;
    #t_on_failure("1");
    if ( ! uri==myself )
    {
        if ( is_method("INVITE"))
            route(6); # start media proxy
        if ( is_method("CANCEL"))
            route(7); # stop media proxy
    }
    t_on_reply("1");
    if(isflagset(24) || isflagset(25))
        route(8); # populate accounting info
    $avp(i:25)=5000 ;
    if (!t_relay()) {
        # This section doesn't seem to be reached even on failures.
        xlog("L_INFO", "Failed sending to: $ru\n");
        xlog("L_INFO", "--- error route class=$(err.class) level=$(err.level)
info=$(err.info) rcode=$(err.rcode) rreason=$(err.rreason) ---\n");
        xlog("L_INFO", "--- error from [$si:$sp] \n +++++\n$mb\n++++\n");
        sl_send_reply("$err.rcode", "$err.rreason");
        route(7); # stop media proxy
    }
    exit;
}

route[2] {
    xlog("Now in route_2\n");
    xlog("L_INFO", "Checking if $rU is one of our numbers\n");
    $avp(s:Original_User) = $rU ;
     # ok to load avps for potential TO user,
     #  If the user doesn't exist the avp's for the from user won't be over
writen
     #  and we are not pulling the from specific user preferences.
    if ( avp_db_load("$ru/username","*/usr_preferences_to") )
    {
        xlog("L_INFO", "avp_db_load was successfull\n");
    }
    else
    {
        xlog("L_INFO", "avp_db_load failed with return code: $rc\n");
    }
    if (is_avp_set("$avp(s:call_forward)"))
    {
        # hard forward to new user/number
        xlog("L_INFO", "$rU is hard forwarded to $avp(s:call_forward) \n");
        add_diversion("user-unavailable");
        # set user that we will load new from user preferences for.
        $avp(s:from_usr_tmp) = $ru;
        route(9); # load from user preferences
        avp_pushto("$ru/username", "$avp(s:call_forward)");
        rewritehost("127.0.0.1");
        avp_delete("$avp(s:via)/g");
        # look up for if new number is one of ours and has settings
        avp_db_load("$ru{uri.user}/username","*/usr_preferences_to");
        route(8); # set vars for accounting diversion info.

#avp_db_load("$avp(s:call_forward)/username","*/usr_preferences_to");
        # TODO: should do a loop to check for new num forwarding and make
sure not infinite loop.
    }
    if (alias_db_lookup("dbaliases"))
    {
        if (!uri==myself) {
            avp_pushto("$ru/username", "$avp(s:Original_User)");
            xlog("L_INFO", "routing for gateway_dbaliases: r-uri <$ru>\n");
            route(1);
        }
        else
        {
            xlog("L_INFO", "dbaliases changed user to $rU>\n");
        }
    }
    else
    {
        xlog("L_INFO", "dbaliases lookup failed w/ return code=$rc  for
r-uri <$ru>\n");
    }
    if ( is_avp_set("$avp(s:num_alias)"))
    {
        avp_pushto("$ru/username", "$avp(s:num_alias)");
        xlog("L_INFO", "redirecting to another number:
$avp(s:num_alias)\n");
    }
    if ( is_avp_set("$avp(s:via)")) {
        avp_pushto("$ru/domain", "$avp(s:via)");
        xlog("L_INFO", "$rU is reached through server: $avp(s:via)\n");
    }
    if (!uri==myself)
    {
        xlog("L_INFO", "routing to default server: $rd\n");
        route(1);
    }
    xlog("L_INFO", "checking devices registered here in location table:
r-uri <$ru>\n");
    #lookup("location");
    if (!uri==myself) {
        xlog("L_INFO", "routing from info in location table\n");
        avp_pushto("$ru/username", "$avp(s:Original_User)");
        route(1);
    }
}

route[3] {
    xlog("Now in route_3\n");
    # Check if it belongs to us first
    if ( uri=~"sip:[0-9]{7}@" ) {
        # Handle 7 digit numbers
        # by temp adding areacode from calling num
        # and run it against databases with our nums.
        xlog("L_INFO", "Caller dialed 7 digits. Checking if callers area
code + $rU is one of our numbers\n");
        $avp(s:FromUser)=$fU;
        $avp(s:OriginalDestinationNumber)=$rU;
        xlog("L_INFO", "avp-cid $avp(s:FromUser) avp-ariacode
$avp(s:AreaCode) f-uri <$fu>\n");
        avp_subst("$avp(s:FromUser)/$avp(s:AreaCode)","/^([0-9]{3}).*/\1/");
        xlog("L_INFO", "avp-fU $avp(s:FromUser) avp-ariacode
$avp(s:AreaCode) f-uri <$fu>\n");
        avp_printf("$avp(s:NewTenDigDest)","$avp(s:AreaCode)$rU");
        xlog("about to push avp NewTenDigDest: $avp(s:NewTenDigDest)");
        avp_pushto("$ru/username","$avp(s:NewTenDigDest)");
    } else if ( uri=~"sip:\+" || uri=~"sip:\+{0,1}1[0-9]{10}@" )
    {  # clean num to 10 digit
        # Remove "+" from front of incoming number.
        # it must have come in from verizon
        $avp(s:OriginalDestinationNumber)=$rU;
        xlog("L_INFO", "Requested number starts with +1, clean it off:
$rU\n");
        $avp(s:OriginalDestinationNumber)=$rU;
        #xlog("L_INFO", "avp-cid $avp(s:OriginalDestinationNumber)
avp-ariacode $avp(s:NewTenDigDest) f-uri <$fu>\n");

avp_subst("$avp(s:OriginalDestinationNumber)/$avp(s:NewTenDigDest)","/.*([0-9]{10})$/\1/");
        avp_pushto("$ru/username","$avp(s:NewTenDigDest)");
        xlog("L_INFO", "avp-NewTenDigDest $avp(s:NewTenDigDest) avp-cleaned
$avp(s:OriginalDestinationNumber) r-uri <$ru>\n");
    }
    route(2); # Check db if Dest num is for us.
    xlog("Back from route_2\n");
    if (is_avp_set("$avp(s:call_forward)") )
    {
        xlog("Forwarding call and new num is not ours.. out to the world you
go! Ha Ha Ha!\n");
        route(4);
    }
    if ( is_avp_set("$avp(s:OriginalDestinationNumber)") && !
is_avp_set("$avp(s:call_forward)") )
    {
        # restore original num incase there is more processing needed by
calling process.
        avp_pushto("$ru/username","$avp(s:OriginalDestinationNumber)");
        xlog("Restored original num: ru -> $ru");
    }
    route(4); # Send our little one to the world and hope it survives :'(

}

route[4] {
    xlog("L_INFO", "In route-4: r-uri <$ru>\n");
    # routing to world.
    xlog("L_INFO", "no location defined for uri: r-uri <$ru>\n");
    #Call destination is PSTN, so send it to the gateway
    xlog("L_INFO", "CALL: PSTN gateway\n");
    xlog("Before set: avp-rpid is $avp(s:rpid)");
    if ( ! from_uri=~"sip:\+" )
    {
        avp_printf("$avp(s:rpid)","sip:+1$fU at sip.myserver.net");
        xlog("NOT from ser test phone. setting avp-rpid to $avp(s:rpid)");
    }
    else
    {
        avp_printf("$avp(s:rpid)","sip:$fU at sip.myserver.net");
        xlog("NOT from ser test phone. setting avp-i13 to $avp(s:rpid)");
    }
    if(is_present_hf("P-Asserted-Identity")) {
        remove_hf("P-Asserted-Identity");
    }
#    if( ! (is_present_hf("Remote-Party-ID") && $re =~ "sip:\+[1-9]+" ) )
#    {
        if ( is_present_hf("Remote-Party-ID") )
        {
            remove_hf("Remote-Party-ID");
        }
        append_hf("Remote-Party-ID:
<$avp(s:rpid)>;privacy=$avp(s:privacy)\r\n") ; # Append Remote-Party-ID
header field
#    }

    xlog("L_INFO", ": f-uri before with +1: f-uri <$fu>\n");
    uac_replace_from("$avp(s:rpid)") ;
#    if (!load_gws("1"))
#    {
#        #sl_send_reply("500", "Server Internal Error - Cannot load gateways
from group 1");
#        #exit;
#        xlog("L_INFO", ": Gateways failed to load from group 1\n");
#    }
    avp_printf("$avp(s:first_gw)","sip:$rU@<first-gw-addr>");
    avp_printf("$avp(s:first_gw)","sip:$rU@<second-gw-addr>");
#    xlog("L_INFO", ": Gateways loaded -- gw_uri_avp =
$avp(s:gw_uri_avp)\n");
#    xlog("L_INFO", ": Added entry to Gateways avp gw_uri_avp =
$avp(s:gw_uri_avp)\n");
#    if ( next_gw() )
#    {
#        xlog("L_INFO", ": Gateways loaded, gw_uri_avp =
$avp(s:gw_uri_avp)\n");
#    }
#    else
#    {
#        xlog("L_INFO", ": Gateway query returned nothing, gw_uri_avp =
$avp(s:gw_uri_avp)\n");
#    }
    #t_on_branch("1");
    t_on_failure("1");
    avp_pushto("$ru","$avp(s:first_gw)"); # new branch for this uri
    xlog("L_INFO", ": first_gw branching --  $avp(s:first_gw)\n");
    avp_delete("$avp(s:first_gw)");
    xlog("L_INFO", ": first_gw 'next-time' branch to --
$avp(s:first_gw)\n");
    route(1) ;
}

route[5] {
    # useing digest authentication
    if (!www_authorize("", "subscriber")) {
        xlog("L_INFO", "user didn't send credentials: f-uri <$fu> r-uri
<$ru>\n");
        www_challenge("", "0");
        exit;
    };
    xlog("L_INFO", "user registered: f-uri <$fu>\n");
    if (!src_ip==<other-loadballance-host-ip>) {
        t_replicate("sip:<other-loadballance-host-ip>:5060");
    };

    save("location");
    exit;
}

route[6] {
    # force media proxy start
    xlog("L_INFO", "in route 6: Start Media Proxy\n");
    setbflag(22); # mark media proxy as started
    if(! isbflagset(22))
    {
        xlog("L_INFO", "Starting Media Proxy\n");
        if(use_media_proxy())
        {
            xlog("L_INFO", "Started Media Proxy\n");
        }
        else
        {
            xlog("L_INFO", "FAILED to start Media Proxy\n");
        }
    }

#    setbflag(22); # mark media proxy as started.
#    use_media_proxy();
}

route[7] {
    # force media proxy stop
    if (isbflagset(22))
        end_media_session();
}

route[8]
{
#modparam("acc", "multi_leg_info",
"diversion_user=$avp(s:diversion_user);diversion_domain=$avp(s:diversion_domain)")
    if ( is_present_hf("Diversion"))
    {
        $avp(s:diversion_user)=$di{url.user};
        $avp(s:diversion_domain)=$di{uri.domain};
    }
}

route[9]
{
    xlog("L_INFO", "In Route 9.\n");
    if ( ! is_avp_set("$avp(s:from_usr_tmp)" ) )
    #if ( $var(from_usr_tmp){s.len} == 0 )
    {
        $avp(s:from_usr_tmp) = $fu;
    }
    xlog("L_INFO", "Loading AVPs for from user $avp(s:from_usr_tmp) if they
exist\n");

    #if(avp_db_load("$fu{uri.user}/username","*/usr_preferences_from"))

if(avp_db_load("$avp(s:from_usr_tmp)/username","*/usr_preferences_from"))
    {
        xlog("L_INFO", "Loaded AVPs for from user $fU\n");
        setflag(2) ; # from local user
        # is user account set to disabled or not allowed to make calls to
pstn?
        if ( ! is_avp_set("$avp(s:allow_call_pstn)") ||
avp_check("$avp(s:allow_call_pstn)", "re/yes/i") )
        {
            resetflag(3) ; # user IS allowed to make pstn calls
        }
        else
        {
            setflag(3) ; # user IS NOT allowed to make pstn calls
        }
        if ( ! is_avp_set("$avp(s:acct_status)") || !
avp_check("$avp(s:acct_status)", "re/disabled/i") )
        {
            resetflag(4) ; # user account IS NOT disabled
        }
        else
        {
            setflag(4) ; # user account IS disabled
            setflag(3) ; # user IS NOT allowed to make pstn calls
        }

    }
    avp_delete("$avp(s:from_usr_tmp)");
}

route[10] # check for and load settings for calling domain.
{
    xlog("L_INFO", "In Route 10.\n");

}
onreply_route[1]
{
    xlog("L_INFO", "Reply - S=$rs D=$rr F=$fu T=$tu IP=$si ID=$ci\n");
    if(! isbflagset(22) && status=~"(180)|(183)|2[0-9][0-9]")
        if ( is_method("CANCEL"))
            route(7); # stop media proxy
#        if ( is_method("INVITE"))
#            route(6);
#    {
#        xlog("L_INFO", "Starting Media Proxy\n");
#        if(use_media_proxy())
#        {
#            setbflag(22); # mark media proxy as started
#            xlog("L_INFO", "Started Media Proxy\n");
#        }
#        else
#        {
#            xlog("L_INFO", "FAILED to start Media Proxy\n");
#        }
#    }
    exit;

}


failure_route[1] {
    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");

#    avp_pushto("$br","$avp(s:first_gw)"); # new branch for this uri
#    xlog("L_INFO", ": first_gw branching --  $avp(s:first_gw)\n");
#    avp_delete("$avp(s:first_gw)");
#    xlog("L_INFO", ": first_gw 'next-time' branch to --
$avp(s:first_gw)\n");
    if (t_check_status("(403)|(Forbiden)"))
    {
        xlog("L_INFO", "Status $T_reply_code\n");
        xlog("L_INFO", "Rejected by this gateway group, skip to next group
if it exists.\n");
        avp_delete("$avp(s:first_gw)/g");
    }
    if ( ! is_avp_set("$avp(s:first_gw)") )
    {
        if ( is_avp_set("$avp(s:second_gw)"))
        {

            avp_copy("$avp(s:second_gw)", "$avp(s:first_gw)/gd");
            if ( is_avp_set("$avp(s:third_gw)"))
            {
                avp_copy("$avp(s:third_gw)", "$avp(s:second_gw)/gd");
            }
        }
        else
        {
            xlog("L_INFO", "Out of gateways to try, dropping call.\n");
            drop();
        }
    }
    t_on_failure("1");
    t_on_branch("1");
    avp_pushto("$br","$avp(s:first_gw)"); # new branch for this uri
    avp_delete("$avp(s:first_gw)");
#    t_on_failure("2");
#    t_on_branch("2");
#    rewritehost("65.217.40.219");
    xlog("L_INFO", "Now R-URI=$ru\n");
#    append_branch();
    route(1);
}

branch_route[1]
{
    xlog("L_INFO", "In Branch_Route 1\n");
    if(uri==myself)
    {

        xlog("L_INFO", "Dropping local branch - M=$rm RURI=$ru F=$fu T=$tu
IP=$si ID=$ci\n");
        drop();
    } else {
        xlog("L_INFO", "In Branch_Route 1, Sending to=$ru\n");
        if ( is_method("INVITE"))
            route(6); # start media proxy
        if ( is_method("CANCEL"))
            route(7); # stop media proxy
    }
}

branch_route[2]
{
    xlog("L_INFO", "In Br_Rt2, Failed Domain=$avp(s:FailedAddr)\n");
    if(uri==myself )
    {

        xlog("L_INFO", "Dropping local branch - M=$rm RURI=$ru F=$fu T=$tu
IP=$si ID=$ci\n");
        drop();
    } else {
        xlog("L_INFO", "In Br_Rt2, Sending to=$ru Proto=$dP\n");
        if ( is_method("INVITE"))
            route(6); # start media proxy
        if ( is_method("CANCEL"))
            route(7); # stop media proxy
    }
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kamailio.org/pipermail/users/attachments/20071112/7b1a17ca/attachment.htm 


More information about the Users mailing list