[asterisk-dev] Real-time call control for Dial app

Kaloyan Kovachev kkovachev at varna.net
Tue Apr 8 09:39:27 CDT 2008


On Thu, 3 Apr 2008 10:44:36 +0300, Kaloyan Kovachev wrote
> Hi list,
>  After some testing it proved to be that it is not possible to call CURL() or
> System() from inside RTCC application, because it never returns from the first
> call.
>  By calling a macro as RTCC app the other commands are executed, but the
> execution stops at the line SET(some_var=${CURL(url)})
>  Do I need some special handling for them?
> 

Not sure, but my guess is that it is because of the autoservice started on the
calling channel which is allready bridged, but the workaround is to use AGI

> P.S.
>  The patch (for 1.4, other releases and future versions will be) hosted at
> http://ast.varna.net including the CURL version provided from Gray Man
> 

The new version (V2 uploaded) is now using just a single thread for all calls
and the Readme has an example AGI.

> On Mon, 31 Mar 2008 16:20:10 +0800, Charles Wang wrote 
> > Hi, Kaloyan. 
> >   
> > I tried to use non-curl version and test it as your tips and the
> How2Test.1.5-56340.doc. 
> > But I got error messages on console, it seems never check the URL
> periodically(I can only find one).  In fact, it didn't check the URL during my
> test. What's wrong in my configuration file? 
> > I can make sure the URL is correct ( I test it using IE (InterNet 
Explorer)). 
> >   
> > Can you please give me more tips? 
> >   
> > Thank you. 
> >   
> > Error Messages: 
> >     -- Limit Data for this call: 
> >         > timelimit      = 30000 
> >         > recheck each   = 5000 
> >         > recheck app    =
>
{CURL(http://127.0.0.1/test.php?app=rtcc&accountcode=&dst=&channelid=&seqnum=1)} 
> >        > recheck delay  = 0 
> >         > play_warning   = 10000 
> >         > play_to_caller = yes 
> >         > play_to_callee = no 
> >        > warning_freq   = 0 
> >        > start_sound    = (null) 
> >         > warning_sound  = timeleft 
> >        > end_sound      = (null) 
> >     -- Called AnswerAndWait at default 
> >      -- Executing [AnswerAndWait at default:1]
> Wait("Local/AnswerAndWait at default-70ef,2", "10") in new stack 
> >     -- Executing [AnswerAndWait at ppcall-intercom:2]
> Answer("Local/AnswerAndWait at default-70ef,2", "") in new stack 
> >     -- Executing [AnswerAndWait at ppcall-intercom:3]
> Wait("Local/AnswerAndWait at default-70ef,2", "10") in new stack 
> >     -- Local/AnswerAndWait at default-70ef,1 answered SIP/2922-1 
> > [Mar 31 15:55:43] WARNING[6269]: app_dial.c:864 ast_call_governor: Could not
> find application
>
({CURL(http://127.0.0.1/test.php?app=rtcc&accountcode=&dst=&channelid=&seqnum=1)}).
> Timelimit not checked for call (1206950127.3) 
> > [Mar 31 15:55:48] WARNING[6269]: app_dial.c:864 ast_call_governor: Could not
> find application
>
({CURL(http://127.0.0.1/test.php?app=rtcc&accountcode=&dst=&channelid=&seqnum=1)}).
> Timelimit not checked for call (1206950127.3) 
> >   
> >   
> > My extensions.conf : 
> >   
> > [globals] 
> > LIMIT_RECHECK_INTERVAL=5000 
> > 
> > LIMIT_RECHECK_APP=$ 
> > LIMIT_RECHECK_APP=${LIMIT_RECHECK_APP}{CURL(http://127.0.0.1/test.php? 
> > LIMIT_RECHECK_APP=${LIMIT_RECHECK_APP}app=rtcc&accountcode=$ 
> > LIMIT_RECHECK_APP=${LIMIT_RECHECK_APP}{ACCOUNTCODE}&dst=$ 
> > LIMIT_RECHECK_APP=${LIMIT_RECHECK_APP}{EXTEN}&channelid=$ 
> > LIMIT_RECHECK_APP=${LIMIT_RECHECK_APP}{UNIQUEID}&seqnum=1)} 
> > [default] 
> > exten => AnswerAndWait,1,Wait(10) 
> > exten => AnswerAndWait,2,Answer() 
> > exten => AnswerAndWait,3,Wait(10) 
> > exten => AnswerAndWait,4,Goto(3) 
> > exten => _X.,1,Set(TimeLimit=30000)     ;; 30 sec 
> > exten => _X.,n,Set(RTCC_INTERVAL=10000)    ;; 10 sec 
> > exten =>
> _X.,n,Dial(Local/AnswerAndWait at default,,L(${TimeLimit}:${RTCC_INTERVAL})) 
> > exten => _X.,n,Hangup 
> >   
> >   
> >   
> > [Mar 31 15:43:57] WARNING[6125]: app_dial.c:864 ast_call_governor: Could not
> find application
>
(${CURL(http://127.0.0.1/test.php?app=rtcc&accountcode=${ACCOUNTCODE}&dst=${EXTEN}&channelid=${UNIQUEID}&seqnum=1)}{CURL(http://127.0.0.1/test.php?app=rtcc&accountcode=&dst=&channelid=&seqnum=1)}).
> Timelimit not checked for call (1206949422.10) 
> > [Mar 31 15:44:02] WARNING[6125]: app_dial.c:864 ast_call_governor: Could not
> find application
>
(${CURL(http://127.0.0.1/test.php?app=rtcc&accountcode=${ACCOUNTCODE}&dst=${EXTEN}&channelid=${UNIQUEID}&seqnum=1)}{CURL(http://127.0.0.1/test.php?app=rtcc&accountcode=&dst=&channelid=&seqnum=1)}).
> Timelimit not checked for call (1206949422.10) 
> > 
> >   
> > 2008/3/28, Grey Man <greymanvoip at gmail.com>: On Thu, Mar 27, 2008 at 10:10
> AM, Charles Wang <lazy.charles at gmail.com> wrote: 
> > > Hi all, 
> > > 
> > > I tried to using rtcc-curl-1.4.13.patch in bug id 6335 
> > > http://bugs.digium.com/view.php?id=6335 reported by KNK. I patch it to 
> > > asterisk 1.4.18.1 and it seems work. 
> > > 
> > > My extensions.conf lists below: 
> > > 
> > > exten => 
> > >
>
_X.,1,Set(TimeLimit=${CURL(http://127.0.0.1/test.php?app=rtcc&accountcode=${ACCOUNTCODE}&dst=${EXTEN}&channelid=${UNIQUEID}&seqnum=1)})
> 
> > >  exten => _X.,n,Set(TimeLimit=${MATH(${TimeLimit}+5,int)}) 
> > > exten => _X.,n,Set(TimeLimit=${MATH(${TimeLimit}*1000,int)}) 
> > > exten => _X.,n,Set(dst=${EXTEN}) 
> > > exten => _X.,n,NoOp(Initial time limit for ${ACCOUNTCODE} and ${EXTEN} set 
> > > at ${TimeLimit}) 
> > >  exten => _X.,n,Set(RTCC_START_SEQNUM=2) 
> > > exten => _X.,n,Set(RTCC_INTERVAL=60000) 
> > > exten => _X.,n,Dial(SIP/1025,,L(${TimeLimit}:::http://127.0.0.1/test.php)) 
> > > exten => _X.,n,Hangup 
> > > 
> > > My URL test.php always reponses interger 120. It is pure text format
without 
> > > any symbol before/after it. 
> > > 
> > > My test.php: ( one row only ) 
> > > 120 
> > > 
> > >     -- Accepting AUTHENTICATED call from XXX.XXX.XXX.XXX: 
> > >         > requested format = ilbc, 
> > >         > requested prefs = (), 
> > >         > actual format = ilbc, 
> > >         > host prefs = (ilbc), 
> > >        > priority = mine 
> > >      -- Executing [_X. at default:1] Set("SIP/2922-10", "TimeLimit=120") in
new 
> > > stack 
> > >     -- Executing [_X. at default:2] Set("SIP/2922-10", "TimeLimit=125") in new 
> > > stack 
> > >     -- Executing [_X. at default:3] Set("SIP/2922-10", "TimeLimit=125000") in 
> > > new stack 
> > >      -- Executing [_X. at default:4] Set("SIP/2922-10", "dst=295") in new
stack 
> > >     -- Executing [_X. at default:5] NoOp("SIP/2922-10", "Initial time limit
for 
> > > and 295 set at 45000") in new stack 
> > >       -- Executing [_X. at default:6] Set("SIP/2922-10",
"RTCC_START_SEQNUM=2") 
> > > in new stack 
> > >     -- Executing [_X. at default:7] Set("SIP/2922-10", "RTCC_INTERVAL=60000") 
> > > in new stack 
> > >       -- Executing [_X. at default:8] Dial("SIP/2922-10", 
> > > "SIP/1025||L(125000::http://127.0.0.1/test.php)") in new stack 
> > >     -- Limit Data for this call: 
> > >         > timelimit       = 125000 
> > >         > play_warning   = 0 
> > >         > play_to_caller = yes 
> > >         > play_to_callee = no 
> > >         > warning_freq   = 0 
> > >        > rtcc url        = //127.0.0.1/test.php 
> > >         > rtcc interval  = 60000 
> > >          > rtcc exp intvl = 0 
> > >         > rtcc seqnum     = 2 
> > >        > start_sound     = (null) 
> > >        > warning_sound   = timeleft 
> > >        > end_sound      = (null) 
> > > 
> > > During the period, I trace the /var/log/httpd/access_log. I can't find any 
> > > request to test.php. Should it be visited each 6 sec ? 
> > 
> > You've got the interval set at 60s. If you want the rtcc call to be 
> > made every 6s change to: 
> > 
> > exten => _X.,n,Set(RTCC_INTERVAL=6000) 
> > 
> > > (Only this line) 
> > > 127.0.0.1 - - [27/Mar/2008:17:51:54 +0800] "GET 
> > > /test.php?app=rtcc&accountcode=&dst=295&channelid=1206611514.2&seqnum=1 
> > > HTTP/1.1" 200 3 "-" "asterisk-libcurl-agent/1.0" 
> > > 
> > > Then, I tried to reduce the integer number 120 to 80. I wish it can be
hunup 
> > > when 80 seconds reached. But the answer was NO. It made my asterisk
crashed. 
> > > I got this message in debug mode. 
> > > 
> > > [Mar 27 17:52:58] DEBUG[32053]: app_dial.c:877 rtcccallback: call control 
> > > accountcode=2922, dst=295. 
> > > asterisk: symbol lookup error: /usr/lib/asterisk/modules/app_dial.so: 
> > > undefined symbol: curl_easy_init 
> > > 
> > > Can anyone kindly give me any idea? 
> > 
> > It's bad if the patch crashed Asterisk. The latest patch I did was for 
> > 1.14.17 and it should have a better chance of working properly. I've 
> > attached the 1.4.17 patch since I can't upload files to the bug 
> > tracker anymore since it was decided by someone somewhere that rtcc is 
> > of no interest to Asterisk users even though it's regularly requested 
> > and there are two patch options available. 
> > 
> > Regards, 
> > 
> > Greyman. 
> > 
> > _______________________________________________ 
> > --Bandwidth and Colocation Provided by http://www.api-digital.com-- 
> > 
> > asterisk-dev mailing list 
> > To UNSUBSCRIBE or update options visit: 
> >   http://lists.digium.com/mailman/listinfo/asterisk-dev 
> > 
> >  
> >  
> > -- 
> > 
> > Best Regards 
> > Charles
> 
> _______________________________________________
> --Bandwidth and Colocation Provided by http://www.api-digital.com--
> 
> asterisk-dev mailing list
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-dev




More information about the asterisk-dev mailing list