Hi Bakko,

But do you get some error on startup or what is the exact problem ?

Regards,

Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com


On 12/12/2012 04:42 PM, Bakko wrote:
Hello,

maybe I resolved this configuration. My escenario:

- load balancing environment
- some clients register to opensips with a softphone and IP change.
- some clients sending only INVITE to Opensips and Asterisk Servers authenticate the INVITE.

Configuration:

I created a new table on Opensips database with this fields:
IP
Max calls permitted
company name

On both Opensips configuration I created a shared profile dialog:

Opensips 1
#### DIALOG module
loadmodule "dialog.so"
modparam("dialog","cachedb_url","redis://localhost:6379/")
modparam("dialog", "default_timeout", 21600)
modparam("dialog", "profiles_with_value", "calls/s")

Opensips2
loadmodule "dialog.so"
modparam("dialog","cachedb_url","redis://localhost:6380/")
modparam("dialog", "default_timeout", 21600)
modparam("dialog", "profiles_with_value", "calls/s")

On both record route:

record_route();

        setflag(1); # do accounting

                if (load_balance("1","voip/s")) {
                set_dlg_profile("calls/s","$si");
                get_profile_size("calls/s","$si","$avp(size)");
avp_db_query("select canales from canales where IP='$si'","$avp(calls)");
                if($retcode == 1){
xlog("L_INFO", "Canales activos = $avp(size) Canales disponibles = $avp(calls) $si\n");
                        if($avp(size) <= $avp(calls)){
xlog("L_INFO", "Llamada de $fu a $tu para $du \n");
                        route(RELAY);
                        exit;
                        }
                        else {
xlog("L_INFO", "Se ha superado el numero de canales disponibles [$avp(size)/$avp(calls)]\n");
                        route(2);
                        exit;
                        }
                }
                xlog("L_INFO", "Llamada de $fu a $tu para $du \n");
                route(RELAY);
                exit;
                }


route[RELAY] {
        if (!t_relay()) {
                xlog("L_ERR", "route [RELAY]\n");
                sl_reply_error();

        };
        exit;
}

route[2] {
xlog("desviando la llamada a contexto Opensip - extension canales\n");
        rewriteuri("sip:[email protected]");
        forward();
        exit;
}

The logic:

when Opensips receive a INVITE set the profile size for the originating IP and get the profile size saving the value on the $avp(size) variable, then check the database to looking for for the IP on the INVITE. If IP exist, the function return 1 and save the max channels value on the $avp(calls) variable. If $avp(size) is <= $avp(calls) opensips route the call to one of Asterisk servers else process route(2). In process route[2] rewrite the URI and send the calls to one of Asterisk Servers where on context opensip, extension canales, a prompt announce to caller "no more channels availables" and hangup the call.

With this configuration I can share between the two opensips servers the MAX calls over IP permitted.

Maybe there is some syntax error on the script. Any suggestion?

Regards

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


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

Reply via email to