Good time!

Sometimes, the subscriber receives a "503", "Simultaneous calls limit reached".
I guess it's because of the incorrectness of the dialogue.
It helps to restart Opensips
It is necessary to determine the cause of non-completion of dialogue.
I think they need to use for this database, but how to do it?
And how to identify and remove the cause with the help of the database?
Thanks!


part of the CFG below:

#### Dialog Module
loadmodule "dialog.so"
modparam("dialog", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")
modparam("dialog", "table_name", "dialog")
modparam("dialog", "db_mode", 1)
modparam("dialog", "db_update_period", 60)
modparam("dialog", "profiles_with_value", "gwquota;subscriberquota")

modparam("auth_db", "load_credentials", "$avp(subscriber_username)=username")

route[subscriberquota] {

avp_db_query("select quota from subscriber where username='$var(subscriber)'","$avp(subscriberquota)");
    if ($avp(subscriberquota) == 0) {
xlog("Subscriberquota route, NO LIMIT FOR USER <$var(subscriber)>");
        return;
    }
    $var(size) = 0;
    get_profile_size("subscriberquota", "$var(subscriber)", "$var(size)");
    if( $var(size) >= $avp(subscriberquota) ){
        sl_send_reply("503", "Simultaneous calls limit reached");
xlog("Subscriberquota route, Limit of $var(size) active calls has been reached for subscriber $var(subscriber)");
        exit;
    }
    set_dlg_profile("subscriberquota","$var(subscriber)");
    get_profile_size("subscriberquota", "$var(subscriber)", "$var(size)");
xlog("Subscriberquota route, there are now $var(size) active calls for subscriber $var(subscriber)");
    return;

}

route[gwquota] {

#avp_db_query("select quota from quota where username='$avp(gw_id)'","$avp(gwquota)");
    if ($avp(gw_attrs) == 0) {
        xlog("GWquota route, NO LIMIT FOR GW $avp(gw_id)");
        return;
    }
    $avp(gwquota) = $avp(gw_attrs);
    $var(size) = 0;
    get_profile_size("gwquota", "$avp(gw_id)", "$var(size)");
    if( $var(size) >= $avp(gwquota) ){
        sl_send_reply("503", "Simultaneous calls limit reached");
xlog("GWquota route, Limit of $var(size) active calls has been reached for GW $avp(gw_id)");
        exit;
    }
    set_dlg_profile("gwquota","$avp(gw_id)");
    get_profile_size("gwquota", "$avp(gw_id)", "$var(size)");
xlog("GWquota route, there are now $var(size) active calls for GW $avp(gw_id)");
    return;

}

route[dialog] {

if (has_totag()) {
# sequential requests within a dialog should
# take the path determined by record-routing
if (loose_route()) {

if (method=="BYE" || method=="CANCEL") {
setflag(ACC_DO); # do accounting ...
setflag(ACC_FAILED); # ... even if the transaction fails
} else if (is_method("INVITE")) {
                # even if in most of the cases is useless, do RR for
# re-INVITEs alos, as some buggy clients do change route set
                # during the dialog.
                record_route();
            }
# route it out to whatever destination was set by loose_route()
# in $du (destination URI).
route(relay);
} else {
if ( is_method("ACK") ) {
if ( t_check_trans() ) {
t_relay();
exit;
} else {
# ACK without matching transaction ->
# ignore and discard
exit;
}
}
sl_send_reply("404","Not here");
}
exit;
}

}

route[invite] {

# account only INVITEs
if (is_method("INVITE")) {
        create_dialog("B");
xlog("L_INFO", "New invite recived\n");
perl_exec("test");
xlog("L_INFO", "Execution perl function result is $retcode\n");
        if (is_from_gw("0","i","$avp(gw_attrs)")) {
            route(gwquota);
            route(terminate);
        } else {
            route(auth);
            $DLG_timeout=60;
            $var(subscriber) = $avp(subscriber_username);
            route(subscriberquota);
            route(originate);
        }

}

}

_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to