[Home]

Summary:ASTERISK-03995: ResponseTimeout called from macro using Dial Application crashes Asterisk
Reporter:Kevin P. Fleming (kpfleming)Labels:
Date Opened:2005-04-26 21:59:44Date Closed:2011-06-07 14:10:40
Priority:MinorRegression?No
Status:Closed/CompleteComponents:Core/General
Versions:Frequency of
Occurrence
Related
Issues:
Environment:Attachments:
Description:Hello,<br />
<br />
Asterisk will crash when setting a ResponseTimeout from a macro that is called using the Dial application.  This problem may occur when using other macros and/or using the other timeout applications as well.  Though I have not tested that.<br />
<br />
Below is the part of my dialplan which will cause the problem.<br />
<br />
If someone would like to add this part of my dialplan to the sample extensions.conf for CVS HEAD they may.  It works pretty well for call screening.<br />
<br />
START<br />
<br />
[fromiaxfwd]<br />
exten => ${FWDNUMBER},1,SetGlobalVar(BYPASSVM=0)<br />
exten => ${FWDNUMBER},n,Setvar(INVALIDTRIES=0)<br />
exten => ${FWDNUMBER},n,ResponseTimeout(30)<br />
exten => ${FWDNUMBER},n,SetMusicOnHold(random)<br />
exten => ${FWDNUMBER},n,Answer<br />
exten => ${FWDNUMBER},n,NoOp(${CALLERID})<br />
exten => ${FWDNUMBER},n(recordagain),Wait(2)<br />
exten => ${FWDNUMBER},n,Playback(pls-rcrd-name-at-tone)<br />
exten => ${FWDNUMBER},n,Playback(and-prs-pound-whn-finished)<br />
exten => ${FWDNUMBER},n,SetVar(SCREEN_FILE=/tmp/${TIMESTAMP}-${CALLERIDNUM})<br />
exten => ${FWDNUMBER},n,Record(${SCREEN_FILE}.gsm|6|25)<br />
exten => ${FWDNUMBER},n,Wait(1)<br />
exten => ${FWDNUMBER},n,Playback(${SCREEN_FILE})<br />
exten => ${FWDNUMBER},n(returnfrominvalid),Wait(1)<br />
exten => ${FWDNUMBER},n,Playback(press-1)<br />
exten => ${FWDNUMBER},n,Playback(to-accept-recording)<br />
exten => ${FWDNUMBER},n,Playback(or)<br />
exten => ${FWDNUMBER},n,Playback(press-2)<br />
exten => ${FWDNUMBER},n,Read(ACCEPTRECORD|to-rerecord-yr-message|1)<br />
exten => ${FWDNUMBER},n,GotoIf($["${ACCEPTRECORD}" = ""] ?t,1)<br />
exten => ${FWDNUMBER},n,GotoIf($[${ACCEPTRECORD} = 1] ?${FWDNUMBER},recordaccepted)<br />
exten => ${FWDNUMBER},n,GotoIf($[${ACCEPTRECORD} = 2] ?${FWDNUMBER},recordagain:i,1)<br />
exten => ${FWDNUMBER},n(recordaccepted),Wait(1)<br />
exten => ${FWDNUMBER},n,Playback(this-call-may-be-monitored-or-recorded)<br />
exten => ${FWDNUMBER},n,Wait(1)<br />
exten => ${FWDNUMBER},n,Playback(pls-hold-while-try)<br />
exten => ${FWDNUMBER},n,Dial(${FWDRINGS},60,gmM(screen^${SCREEN_FILE}))<br />
exten => ${FWDNUMBER},n,GotoIf($[${BYPASSVM} = 1] ?${FWDNUMBER},hangup)<br />
exten => ${FWDNUMBER},n,Voicemail(u${FWDVMBOX})<br />
exten => ${FWDNUMBER},n(hangup),Hangup<br />
exten => i,1,GotoIf($[${INVALIDTRIES} = 4] ?t,1)<br />
exten => i,n,Playback(invalid)<br />
exten => i,n,Setvar(INVALIDTRIES=$[${INVALIDTRIES} + 1])<br />
exten => i,n,Goto(${FWDNUMBER},returnfrominvalid)<br />
exten => t,1,System(/bin/rm ${SCREEN_FILE}.gsm)<br />
exten => t,n,Playback(call-terminated)<br />
exten => t,n,Playback(goodbye)<br />
exten => t,n,Hangup<br />
exten => h,1,System(/bin/rm ${SCREEN_FILE}.gsm)<br />
<br />
[macro-screen]<br />
exten => s,1,Wait(1)<br />
<br />
exten => s,n,ResponseTimeout(15) ; this is the point in which Asterisk will crash.<br />
<br />
exten => s,n,Playback(call)<br />
exten => s,n,Playback(from)<br />
exten => s,n,Playback(${ARG1})<br />
exten => s,n(repeatoptions),Wait(1)<br />
exten => s,n,Playback(press-1)<br />
exten => s,n,Playback(for)<br />
exten => s,n,Playback(pbx-transfer)<br />
exten => s,n,Playback(or)<br />
exten => s,n,Playback(press-9)<br />
exten => s,n,Read(ACCEPTCALL|to-hang-up|1)<br />
exten => s,n,GotoIf($["${ACCEPTCALL}" = ""] ?t,1)<br />
exten => s,n,GotoIf($[${ACCEPTCALL} = 1] ?s,callaccepted)<br />
exten => s,n,GotoIf($[${ACCEPTCALL} = 9] ?s,calldenied:s,repeatoptions)<br />
exten => s,n(calldenied),SetVar(MACRO_RESULT=CONTINUE)<br />
exten => s,n,GotoIf($[${MACRO_RESULT} = CONTINUE] ?s,skipmonitor)<br />
exten => s,n(callaccepted),SetGlobalVar(BYPASSVM=1)<br />
exten => s,n,Monitor(wav49|${TIMESTAMP}-${CALLERID}|mb)<br />
exten => s,n(skipmonitor),System(/bin/rm ${ARG1}.gsm)<br />
exten => t,1,Playback(connection-timed-out)<br />
exten => t,n,Goto(s,calldenied)<br />
<br />
END<br />
<br />
Regards,<br />
Chris Hozian (aka dsfr)<br />
Comments:By: Russell Bryant (russell) 2005-05-15 19:21:05

fixed in 1.0

By: Digium Subversion (svnbot) 2008-01-15 15:34:51.000-0600

Repository: asterisk
Revision: 5685

U   branches/v1-0/pbx.c

------------------------------------------------------------------------
r5685 | russell | 2008-01-15 15:34:50 -0600 (Tue, 15 Jan 2008) | 2 lines

protect ResponseTimeout and DigitTimeout apps from crashing when called in non-PBX channels (bug ASTERISK-3995)

------------------------------------------------------------------------

http://svn.digium.com/view/asterisk?view=rev&revision=5685