<div>Hi Kaloyan,</div>
<div>&nbsp;</div>
<div>I think I understand what it means.</div>
<div>Thank you for your help. </div>
<div>&nbsp;</div>
<div>Best regards,</div>
<div>Charles<br><br>&nbsp;</div>
<div><span class="gmail_quote">2008/3/27, Kaloyan Kovachev &lt;<a href="mailto:kkovachev@varna.net">kkovachev@varna.net</a>&gt;:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">On Thu, 27 Mar 2008 21:19:01 +0800, Charles Wang wrote<br>&gt; Hi, Kaloyan<br>&gt; Can you please give me the last diff or tell me where to get it?<br>
<br>sure <a href="http://my.varna.net/dwl/rtcc-1.4.diff">http://my.varna.net/dwl/rtcc-1.4.diff</a><br><br>&gt; Please also give me some tips to configure it.<br>&gt; The <a href="http://asterisk-backports.org">asterisk-backports.org</a> seems be closed.<br>
&gt; And can I ask some questions about the non-curl version?<br>&gt; 1. Can I only set the results as channel variable instead of global variable?<br><br>yes, but please not the way variable is set (in multiple lines) in order to<br>
pass the variables for proccesing on execution<br><br>&gt; 2. Is the unit of RTCC_INTERVAL 1/1000 second(ms) not 1 second ?<br><br>it is in milliseconds - preserving the original behavior of L() option<br><br>&gt; 3. Assume that orginal the first parameter TimeLimit of L option is<br>
120000(120 seconds). Then, RTCC_APP should recheck the URL(test.php) after<br>${LIMIT_RECHECK_INTERVAL} milliseconds such as 6000 is 6 sec.<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;Does it mean the TimeLimit will be added 10 sec if the result of<br>URL(test.php) is 10? And the TimeLimit is 130 sec.<br>
<br>yes and this will happen each 6 sec, so after 1 minute you will end with<br>220sec limit.<br>On each execution the number of seconds returned from test.php will be added<br>to the TimeLimit and the negative numbers will result in reducing the TimeLimit<br>
<br>&gt; Best regards,<br>&gt; Charles<br>&gt;<br>&gt;<br>&gt; 2008/3/27, Kaloyan Kovachev &lt;<a href="mailto:kkovachev@varna.net">kkovachev@varna.net</a>&gt;: Hi,<br>&gt; the curl version was provided from greyvoip, so probably he will be able to<br>
&gt; tell you more about it.<br>&gt; If you use some of the non curl versions (i may send you the latest diff if<br>&gt; you wish), you may achieve the same results by setting in advance (as global<br>&gt; variable):<br>&gt;<br>
&gt; LIMIT_RECHECK_APP=$<br>&gt; LIMIT_RECHECK_APP=${LIMIT_RECHECK_APP}{CURL(<a href="http://127.0.0.1/test.php">http://127.0.0.1/test.php</a>?<br>&gt; LIMIT_RECHECK_APP=${LIMIT_RECHECK_APP}app=rtcc&amp;accountcode=$<br>&gt; LIMIT_RECHECK_APP=${LIMIT_RECHECK_APP}{ACCOUNTCODE}&amp;dst=$<br>
&gt; LIMIT_RECHECK_APP=${LIMIT_RECHECK_APP}{EXTEN}&amp;channelid=$<br>&gt; LIMIT_RECHECK_APP=${LIMIT_RECHECK_APP}{UNIQUEID}&amp;seqnum=1)}<br>&gt;<br>&gt; and you change your dial command to:<br>&gt;<br>&gt; exten =&gt; _X.,n,Dial(SIP/1025,,L(${TimeLimit}:${RTCC_INTERVAL}))<br>
&gt;<br>&gt; it should work, but keep in mind that it requires at least parameters to L()<br>&gt; and that 60000 is 60sec not 6sec.<br>&gt; As your script is returning fixed number (120 or 80 which for the curl<br>&gt; version is in milliseconds, but in seconds for the non curl version) this will<br>
&gt; cause your call duration to be increased with that amount of<br>&gt; milliseconds/seconds each time. I would suggest for the tests to start with<br>&gt; ${TimeLimit} set to 120000, ${RTCC_INTERVAL} being 10000 and your script<br>
&gt; returning &#39;-10&#39;.<br>&gt;<br>&gt; On Thu, 27 Mar 2008 18:10:40 +0800, Charles Wang wrote<br>&gt; &gt; Hi all,<br>&gt; &gt;<br>&gt; &gt; I tried to using rtcc-curl-1.4.13.patch in bug id 6335<br>&gt; <a href="http://bugs.digium.com/view.php?id=6335">http://bugs.digium.com/view.php?id=6335</a>&nbsp;&nbsp; reported by KNK. I patch it to<br>
&gt; asterisk <a href="http://1.4.18.1">1.4.18.1</a> and it seems work.<br>&gt; &gt;<br>&gt; &gt; My extensions.conf lists below:<br>&gt; &gt;<br>&gt; &gt; exten =&gt;<br>&gt;<br>_X.,1,Set(TimeLimit=${CURL(<a href="http://127.0.0.1/test.php?app=rtcc&amp;accountcode=${ACCOUNTCODE}&amp;dst=${EXTEN}&amp;channelid=${UNIQUEID}&amp;seqnum=1)}">http://127.0.0.1/test.php?app=rtcc&amp;accountcode=${ACCOUNTCODE}&amp;dst=${EXTEN}&amp;channelid=${UNIQUEID}&amp;seqnum=1)}</a>)<br>
<br>&gt;<br>&gt; &gt; exten =&gt; _X.,n,Set(TimeLimit=${MATH(${TimeLimit}+5,int)})<br>&gt; &gt; exten =&gt; _X.,n,Set(TimeLimit=${MATH(${TimeLimit}*1000,int)})<br>&gt; &gt; exten =&gt; _X.,n,Set(dst=${EXTEN})<br>&gt; &gt; exten =&gt; _X.,n,NoOp(Initial time limit for ${ACCOUNTCODE} and ${EXTEN} set<br>
&gt; at ${TimeLimit})<br>&gt; &gt; exten =&gt; _X.,n,Set(RTCC_START_SEQNUM=2)<br>&gt; &gt; exten =&gt; _X.,n,Set(RTCC_INTERVAL=60000)<br>&gt; &gt; exten =&gt; _X.,n,Dial(SIP/1025,,L(${TimeLimit}:::<a href="http://127.0.0.1/test.php)">http://127.0.0.1/test.php)</a>)<br>
&gt; &gt; exten =&gt; _X.,n,Hangup<br>&gt; &gt;<br>&gt; &gt; My URL test.php always reponses interger 120. It is pure text format without<br>&gt; any symbol before/after it.<br>&gt; &gt;<br>&gt; &gt; My test.php: ( one row only )<br>
&gt; &gt; 120<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; -- Accepting AUTHENTICATED call from XXX.XXX.XXX.XXX:<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; requested format = ilbc,<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; requested prefs = (),<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; actual format = ilbc,<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; host prefs = (ilbc),<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt; priority = mine<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; -- Executing [_X.@default:1] Set(&quot;SIP/2922-10&quot;, &quot;TimeLimit=120&quot;) in new<br>&gt; stack<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; -- Executing [_X.@default:2] Set(&quot;SIP/2922-10&quot;, &quot;TimeLimit=125&quot;) in new<br>
&gt; stack<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; -- Executing [_X.@default:3] Set(&quot;SIP/2922-10&quot;, &quot;TimeLimit=125000&quot;) in<br>&gt; new stack<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; -- Executing [_X.@default:4] Set(&quot;SIP/2922-10&quot;, &quot;dst=295&quot;) in new stack<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; -- Executing [_X.@default:5] NoOp(&quot;SIP/2922-10&quot;, &quot;Initial time limit<br>&gt; for&nbsp;&nbsp; and 295 set at 45000&quot;) in new stack<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; -- Executing [_X.@default:6] Set(&quot;SIP/2922-10&quot;, &quot;RTCC_START_SEQNUM=2&quot;)<br>
&gt; in new stack<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; -- Executing [_X.@default:7] Set(&quot;SIP/2922-10&quot;, &quot;RTCC_INTERVAL=60000&quot;)<br>&gt; in new stack<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; -- Executing [_X.@default:8] Dial(&quot;SIP/2922-10&quot;,<br>
&gt; &quot;SIP/1025||L(125000::<a href="http://127.0.0.1/test.php)">http://127.0.0.1/test.php)</a>&quot;) in new stack<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; -- Limit Data for this call:<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt; timelimit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 125000<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt; play_warning&nbsp;&nbsp; = 0<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt; play_to_caller = yes<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt; play_to_callee = no<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt; warning_freq&nbsp;&nbsp; = 0<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt; rtcc url&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= //127.0.0.1/test.php<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; rtcc interval&nbsp;&nbsp;= 60000<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; rtcc exp intvl = 0<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt; rtcc seqnum&nbsp;&nbsp;&nbsp;&nbsp; = 2<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; start_sound&nbsp;&nbsp;&nbsp;&nbsp; = (null)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt; warning_sound&nbsp;&nbsp; = timeleft<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt; end_sound&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = (null)<br>
&gt; &gt;<br>&gt; &gt; During the period, I trace the /var/log/httpd/access_log. I can&#39;t find any<br>&gt; request to test.php. Should it be visited each 6 sec ?<br>&gt; &gt;<br>&gt; &gt; (Only this line)<br>&gt; &gt; <a href="http://127.0.0.1">127.0.0.1</a> - - [27/Mar/2008:17:51:54 +0800] &quot;GET<br>
&gt; /test.php?app=rtcc&amp;accountcode=&amp;dst=295&amp;channelid=1206611514.2&amp;seqnum=1<br>&gt; HTTP/1.1&quot; 200 3 &quot;-&quot; &quot;asterisk-libcurl-agent/1.0&quot;<br>&gt; &gt;<br>&gt; &gt; Then, I tried to reduce the integer number 120 to 80. I wish it can be<br>
&gt; hunup when 80 seconds reached. But the answer was NO. It made my asterisk<br>&gt; crashed. I got this message in debug mode.<br>&gt; &gt;<br>&gt; &gt; [Mar 27 17:52:58] DEBUG[32053]: app_dial.c:877 rtcccallback: call control<br>
&gt; accountcode=2922, dst=295.<br>&gt; &gt; asterisk: symbol lookup error: /usr/lib/asterisk/modules/app_dial.so:<br>&gt; undefined symbol: curl_easy_init<br>&gt; &gt;<br>&gt; &gt; Can anyone kindly give me any idea?<br>
&gt; &gt;<br>&gt; &gt; Best regards,<br>&gt; &gt; Charles<br>&gt; &gt;<br>&gt; &gt; 2007/7/15, Grey Man &lt;<a href="mailto:greyvoip@yahoo.com.au">greyvoip@yahoo.com.au</a>&gt;:<br>&gt; &gt;<br>&gt; &gt; ----- Original Message ----<br>
&gt; &gt; From: Kaloyan Kovachev &lt;<a href="mailto:kkovachev@varna.net">kkovachev@varna.net</a>&gt;<br>&gt; &gt; To: Asterisk Developers Mailing List &lt;<a href="mailto:asterisk-dev@lists.digium.com">asterisk-dev@lists.digium.com</a>&gt;<br>
&gt; &gt; Sent: Sunday, 15 July, 2007 10:50:29 AM<br>&gt; &gt; Subject: Re: [asterisk-dev] Real-time call control for Dial app<br>&gt; &gt;<br>&gt; &gt; On Sat, 14 Jul 2007 14:36:27 -0700 (PDT), Grey Man wrote<br>&gt; &gt; &gt; ----- Original Message ----<br>
&gt; &gt; &gt; &gt;From: Kaloyan Kovachev &lt;<a href="mailto:kkovachev@varna.net">kkovachev@varna.net</a>&gt;<br>&gt; &gt; &gt; &gt;To: Asterisk Developers Mailing List &lt;<a href="mailto:asterisk-dev@lists.digium.com">asterisk-dev@lists.digium.com</a>&gt;<br>
&gt; &gt; &gt; &gt;Sent: Saturday, 14 July, 2007 3:00:54 PM<br>&gt; &gt; &gt; &gt;Subject: Re: [asterisk-dev] Real-time call control for Dial app<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt;Hi again,<br>&gt; &gt; &gt;&nbsp;&nbsp; &gt;i guess Asterisk is not used for prepaid applications too much, or more<br>
&gt; &gt; &gt; &gt;likely the risk of overused account is just ignored (there are providers<br>&gt; with<br>&gt; &gt; &gt; &gt;&#39;pay as go&#39; services with which i had negative balance for a while).<br>&gt; &gt; &gt; &gt;Even separate thread for each call bridge is not the best way and adding<br>
&gt; &gt; &gt; &gt;another one is not a good idea - agree, but the call control thread is<br>&gt; &gt; &gt; &gt;sleeping most of the time, so it shouldn&#39;t cause too much problems.<br>&gt; &gt; &gt; &gt;Unfortunately my C skills (and available time) are not enough to make (my<br>
&gt; &gt; &gt; &gt;long term idea) a single call control thread for which each call will just<br>&gt; &gt; &gt; &gt;register and which will also be responsible for the warning messages on<br>that<br>&gt; &gt; &gt; &gt;call instead of the bridging thread itself. I think this is the way to<br>
&gt; go, but<br>&gt; &gt; &gt; &gt;for now this is at least some way to control the call duration after it<br>has<br>&gt; &gt; &gt; &gt;started.<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; Hi Kaloyan,<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; My idea is to put the real-time call control onto the the thread in<br>
&gt; &gt; channel.c that is already monitoring the bridge. You already nicely<br>slotted in<br>&gt; &gt; the &quot;recheck&quot; thread into this main bridge thread with your patch by using<br>the<br>&gt; &gt; nexteventts property and I think I might be able to do call control I need on<br>
&gt; &gt; the bridge thread and remove the need for the &quot;recheck&quot; thread.<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; The problem with doing things on channel.c is it rightly doesn&#39;t know<br>&gt; &gt; anything about applications, dialplans or specific channel properties.<br>
However<br>&gt; &gt; the more I&#39;ve played around with real-time call control the more I&#39;m thinking<br>&gt; &gt; the main requirement is to have a clean scalable way to update the call time<br>&gt; &gt; and not so much about being able to periodically call more involved<br>
&gt; &gt; applications on an in progress calls. For example my requirement would be<br>&gt; &gt; satisifed by having the bridge thread on channel.c send the accountcode, call<br>&gt; &gt; destination and call time to an external IP socket and get back a single<br>
&gt; &gt; integer that specifies any adjustment that should be made to the call time.<br>&gt; &gt;<br>&gt; &gt; &gt; Can&#39;t you do this via Manager? By leaving blank the LIMIT_RECHECK_APP, but<br>&gt; &gt; &gt; setting LIMIT_RECHECK_INTERVAL and LIMIT_RECHECK_DELAY you will get Manager<br>
&gt; &gt; &gt; event and then you may have enough time (LIMIT_RECHECK_DELAY) to proces it<br>&gt; and<br>&gt; &gt; &gt; to set CALL_LIMIT variable to that channel back from Manager. As you<br>need the<br>&gt; &gt; &gt; acount code you will need to add it to the event field.<br>
&gt; &gt;<br>&gt; &gt; MAPI is an option but it would result in another moving part to be able to<br>&gt; control calls and would still need the extra thread per bridged call to fire<br>&gt; the events. If the real-time call control mechanism was a request approach<br>
&gt; from channel.c then there is need to use MAPI or any additional threads. The<br>&gt; bridge thread in channel.c doesn&#39;t seem to be doing much at all, just waiting<br>&gt; for the call time limit to expire, so giving it an extra task would give<br>
&gt; better utilisation of that thread.<br>&gt; &gt;<br>&gt; &gt; Regards,<br>&gt; &gt;<br>&gt; &gt; Greyman.<br>&gt; &gt;<br>&gt; &gt;<br>&gt;<br>____________________________________________________________________________________<br>
<br>&gt; Yahoo!7 Mail has just got even bigger and better with unlimited storage on all<br>&gt; webmail accounts.<br>&gt; &gt; <a href="http://au.docs.yahoo.com/mail/unlimitedstorage.html">http://au.docs.yahoo.com/mail/unlimitedstorage.html</a><br>
&gt; &gt;<br>&gt; &gt; _______________________________________________<br>&gt; &gt; --Bandwidth and Colocation Provided by <a href="http://www.api-digital.com--">http://www.api-digital.com--</a><br>&gt; &gt;<br>&gt; &gt; asterisk-dev mailing list<br>
&gt; &gt; To UNSUBSCRIBE or update options visit:<br>&gt; &gt;&nbsp;&nbsp; <a href="http://lists.digium.com/mailman/listinfo/asterisk-dev">http://lists.digium.com/mailman/listinfo/asterisk-dev</a><br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; --<br>
&gt; &gt;<br>&gt; &gt; Best Regards<br>&gt; &gt; Charles<br>&gt;<br>&gt; _______________________________________________<br>&gt; --Bandwidth and Colocation Provided by <a href="http://www.api-digital.com--">http://www.api-digital.com--</a><br>
&gt;<br>&gt; asterisk-dev mailing list<br>&gt; To UNSUBSCRIBE or update options visit:<br>&gt;&nbsp;&nbsp; <a href="http://lists.digium.com/mailman/listinfo/asterisk-dev">http://lists.digium.com/mailman/listinfo/asterisk-dev</a><br>
&gt;<br>&gt;<br>&gt; --<br>&gt;<br>&gt; Best Regards<br>&gt; Charles<br><br><br>_______________________________________________<br>--Bandwidth and Colocation Provided by <a href="http://www.api-digital.com--">http://www.api-digital.com--</a><br>
<br>asterisk-dev mailing list<br>To UNSUBSCRIBE or update options visit:<br>&nbsp;&nbsp;<a href="http://lists.digium.com/mailman/listinfo/asterisk-dev">http://lists.digium.com/mailman/listinfo/asterisk-dev</a><br></blockquote></div>
<br><br clear="all"><br>-- <br><br>Best Regards<br>Charles