Hi Bogdan,

I was able to implement the channel limiting on one DID by using a variable
instead of AVP and replacing all instances of $tU to $rU. Now, I want to
limit the channels to a set of DIDs and I'm thinking of implementing a
"while loop" and "counter" in order to achieve it. Is this an efficient way
of doing the limiting on a set of DIDs? One problem I can think with the
"while loop" and "counter" will be how to deduct those calls that were
already hung up by the caller. Again, inputs will be greatly appreciated.

Thank you very much.

--conpaj--

On Fri, Jan 8, 2010 at 4:53 PM, Bogdan-Andrei Iancu
<[email protected]>wrote:

> 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:1234567...@.*") {
> >                         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
> > [email protected]
> > <mailto:[email protected]> From=si
> > p:[email protected] <p%[email protected]> <mailto:
> p%[email protected] <p%[email protected]>>
> > Gateway=124.123.234.229 To=sip:[email protected]:5060
> ;user=phone
> > Jan  6 05:53:22 opensips cdrtool[20998]: MaxSessionTime=unlimited
> > Type=postpaid [email protected]
> > <mailto:[email protected]>
> > [email protected]
> > <mailto:[email protected]>
> > Jan  6 05:53:22 opensips call-control[21263]: Call id
> > [email protected]
> > <mailto:[email protected]> of
> > [email protected] <mailto:[email protected]> to
> >  sip:[email protected]:5060;user=phone is postpaid not limited
> > Jan  6 05:53:22 opensips /usr/local/sbin/opensips[1636]: new branch at
> > sip:[email protected]: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=
> [email protected]
> > <mailto:[email protected]>;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
> > <[email protected] <mailto:[email protected]>> 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
>
>
> _______________________________________________
> 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