[OpenSIPS-Users] How to limit channel on bunch of called DIDs?

Bogdan-Andrei Iancu bogdan at voice-system.ro
Fri Jan 8 09:53:51 CET 2010


Hi

It is hard to review scripts to see where the problem is, but I will 
help you with some hints on troubleshooting.

First of all you need to be sure you put in the profiles the calls you 
wants - put some xlog() around the place where you add the call in the 
profile (in the script). Be sure you create the dialog (use 
create_dialog() before adding it into profile). After that, you can 
check with MI function to see the profile content 
(http://www.opensips.org/html/docs/modules/devel/dialog.html#id272772)

Regards,
Bogdan

Johnson Pajayat wrote:
> Hello Bogdan,
>
> I appreciate a lot your response regarding my inquiry. I've been 
> reading that tutorial as well as the AVPops and dialog modules 
> documentation for about a month now. I tried to adapt that route block 
> for inbound calls and here's a portion of what I have on our OpenSIPS 
> 1.5 config file:
>
> -------------------------------------------------------------------------------
> modparam("dialog", "dlg_flag", 4)
> modparam("dialog", "profiles_with_value", "inbound")
>
> ......
>
>                 } else if (uri=~"sip:1234567890 at .*") {
>                         route(3);
>                         rewritehost("111.222.111.222");
>
> .......
>
> route[3]
> {
>         ## have we done our checking on this call?
>         if(!isflagset(31))
>         {
>                 # user has max channel limit set as preference
>                 if(is_avp_set("$avp(s:channels)/n") && 
> avp_check("$avp(s:channels)", "gt/i:0"))
>                 {
>                         # get the current calls for DID
>                         get_profile_size("inbound","$tU","$var(calls)");
>
>                         # check within limit
>                         if($avp(s:channels) > $var(calls))
>                         {
>                                 xlog("L_INFO", "Call control: DID 
> '$tU' currently has
>                                    '$var(calls)' of '$avp(s:channels)' 
> active calls before this one\n");
>                                 $var(setprofile) = 1;
>                         }
>                         else
>                         {
>                                 xlog("L_INFO", "Call control: DID 
> '$tU' channel limit exceeded [$var(calls)/$avp(s:channels)]
> \n");
>                                 send_reply("487", "Request Terminated: 
> Channel limit exceeded\n");
>                                 exit;
>                         }
>                 }
>                 else
>                 {
>                         $var(setprofile) = 0;
>                 }
>
>                 call_control();
>
>                 switch ($retcode)
>                 {
>                         case 2:
>                                 # Call with no limit
>                         case 1:
>                                 # Call with a limit under callcontrol 
> management (either prepaid or postpaid)
>                                 break;
>                         case -1:
>                                 # Not enough credit (prepaid call)
>                                 xlog("L_INFO", "Call control: not 
> enough credit for prepaid call\n");
>                                 acc_rad_request("402");
>                                 sl_send_reply("402", "Not enough credit");
>                                 exit;
>                                 break;
>                         case -2:
>                                 # Locked by call in progress (prepaid 
> call)
>                                 xlog("L_INFO", "Call control: prepaid 
> call locked by another call in progress\n");
>                                 acc_rad_request("403");
>                                 sl_send_reply("403", "Call locked by 
> another call in progress");
>                                 exit;
>                                 break;
>                         default:
>                                 # Internal error (message parsing, 
> communication, ...)
>                                 xlog("L_INFO", "Call control: internal 
> server error\n");
>                                 acc_rad_request("500");
>                                 sl_send_reply("500", "Internal server 
> error");
>                                 exit;
>                 }
>
>                 if($var(setprofile) > 0)
>                 {
>                         create_dialog();
>                         set_dlg_profile("inbound","$tU");
>                 }
>
>                 ## mark checking done
>                 setflag(31);
>         }
> }
>
> ----------------------------------------------------------------
>
> And here are the logs appearing on /var/log/messages:
>
> Jan  6 05:53:22 opensips cdrtool[20998]: MaxSessionTime Duration=36000 
> CallId=28a35ce1-4d7a175-25a58684 at 124.123.234.229 
> <mailto:28a35ce1-4d7a175-25a58684 at 124.123.234.229> From=si
> p:12135551234 at 124.123.234.229 <mailto:p%3A12135551234 at 124.123.234.229> 
> Gateway=124.123.234.229 To=sip:1234567890 at 124.123.234.241:5060;user=phone
> Jan  6 05:53:22 opensips cdrtool[20998]: MaxSessionTime=unlimited 
> Type=postpaid CallId=28a35ce1-4d7a175-25a58684 at 124.123.234.229 
> <mailto:28a35ce1-4d7a175-25a58684 at 124.123.234.229> 
> BillingParty=12135551234 at 124.123.234.229 
> <mailto:12135551234 at 124.123.234.229>
> Jan  6 05:53:22 opensips call-control[21263]: Call id 
> 28a35ce1-4d7a175-25a58684 at 64.77.234.229 
> <mailto:28a35ce1-4d7a175-25a58684 at 64.77.234.229> of 
> 12135551234 at 124.123.234.229 <mailto:12135551234 at 124.123.234.229> to
>  sip:1234567890 at 124.123.234.241:5060;user=phone is postpaid not limited
> Jan  6 05:53:22 opensips /usr/local/sbin/opensips[1636]: new branch at 
> sip:1234567890 at 111.222.111.222:5060;user=phone
> Jan  6 05:53:22 opensips /usr/local/sbin/opensips[1640]: incoming reply
> Jan  6 05:53:22 opensips /usr/local/sbin/opensips[1636]: incoming reply
> Jan  6 05:53:22 opensips /usr/local/sbin/opensips[1636]: ACC: 
> transaction answered: timestamp=1262786002;method=INVITE;from_t
> ag=14fe61da-25a58684-e5ea4d40;to_tag=as6a53f46c;call_id=28a35ce1-4d7a175-25a58684 at 64.77.234.229 
> <mailto:28a35ce1-4d7a175-25a58684 at 64.77.234.229>;code=200;reason=OK
> Jan  6 05:53:22 opensips /usr/local/sbin/opensips[1637]: Recive call 
> variable : <null> <null>
>
> As for the channels limit value, do I have to define it on 
> usr_preferences table? I have these records on the said table:
>
> mysql> select * from usr_preferences;
> +----+------+------------+--------+---------------+------+------------+---------------------+
> | id | uuid | username   | domain | attribute     | type | value      
> | last_modified       |
> +----+------+------------+--------+---------------+------+------------+---------------------+
> |  1 |      | 1234567890 |        | channels      |    0 | 3          
> | 1900-01-01 00:00:01 |
> |  2 |      | 0          |        | called_number |    0 | 12135551234 
> | 1900-01-01 00:00:01 |
> +----+------+------------+--------+---------------+------+------------+---------------------+
> 2 rows in set (0.00 sec)
>
> Unfortunately, I'm not quite sure on what section or portion of 
> opensips.cfg file I will have to put the loading of user preferences 
> to the AVPs. Any inputs or suggestions will be greatly appreciated?
>
> Thank you very much.
>
> --conpaj--
>
>
> On Wed, Jan 6, 2010 at 11:26 PM, Bogdan-Andrei Iancu 
> <bogdan at voice-system.ro <mailto:bogdan at voice-system.ro>> wrote:
>
>     Hi Johnson,
>
>     The idea is to use dialog profiles to keep trace of the ongoing calls
>     (per resource). As a first step take a look at the following tutorial:
>
>            http://www.opensips.org/Resources/DocsTutConcurrentCalls
>
>     Regards,
>     Bogdan
>
>     Johnson Pajayat wrote:
>     > Hi!
>     >
>     > I'm a newbie with OpenSIPS administration and configuration and I
>     > searched on the mail archives regarding limiting the channels
>     but only
>     > found the site regarding "Concurrent calls limitation". I've been
>     > trying to grasp the whole idea about AVPops and dialog module but
>     > unfortunately I'm having a hard time understanding it. If ever, does
>     > anyone here be kind enough to point me to any available documents or
>     > sample configurations file that will help me limit the channels on
>     > inbound calls to a single or group of DIDs? Implementation will be
>     > done static first and hopefully once I got the whole idea, will be
>     > implementing a dynamic one.
>     >
>     > Thank you very much.
>     >
>     > --conpaj--
>


-- 
Bogdan-Andrei Iancu
www.voice-system.ro




More information about the Users mailing list