[Home]

Summary:ASTERISK-03981: ResponseTimeout called from macro using Dial Application crashes Asterisk
Reporter:Chris Hozian (chozian)Labels:
Date Opened:2005-04-25 09:53:50Date Closed:2008-01-15 15:32:17.000-0600
Priority:MinorRegression?No
Status:Closed/CompleteComponents:Core/General
Versions:Frequency of
Occurrence
Related
Issues:
Environment:Attachments:
Description:Hello,

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.

Below is the part of my dialplan which will cause the problem.

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.

START

[fromiaxfwd]
exten => ${FWDNUMBER},1,SetGlobalVar(BYPASSVM=0)
exten => ${FWDNUMBER},n,Setvar(INVALIDTRIES=0)
exten => ${FWDNUMBER},n,ResponseTimeout(30)
exten => ${FWDNUMBER},n,SetMusicOnHold(random)
exten => ${FWDNUMBER},n,Answer
exten => ${FWDNUMBER},n,NoOp(${CALLERID})
exten => ${FWDNUMBER},n(recordagain),Wait(2)
exten => ${FWDNUMBER},n,Playback(pls-rcrd-name-at-tone)
exten => ${FWDNUMBER},n,Playback(and-prs-pound-whn-finished)
exten => ${FWDNUMBER},n,SetVar(SCREEN_FILE=/tmp/${TIMESTAMP}-${CALLERIDNUM})
exten => ${FWDNUMBER},n,Record(${SCREEN_FILE}.gsm|6|25)
exten => ${FWDNUMBER},n,Wait(1)
exten => ${FWDNUMBER},n,Playback(${SCREEN_FILE})
exten => ${FWDNUMBER},n(returnfrominvalid),Wait(1)
exten => ${FWDNUMBER},n,Playback(press-1)
exten => ${FWDNUMBER},n,Playback(to-accept-recording)
exten => ${FWDNUMBER},n,Playback(or)
exten => ${FWDNUMBER},n,Playback(press-2)
exten => ${FWDNUMBER},n,Read(ACCEPTRECORD|to-rerecord-yr-message|1)
exten => ${FWDNUMBER},n,GotoIf($["${ACCEPTRECORD}" = ""] ?t,1)
exten => ${FWDNUMBER},n,GotoIf($[${ACCEPTRECORD} = 1] ?${FWDNUMBER},recordaccepted)
exten => ${FWDNUMBER},n,GotoIf($[${ACCEPTRECORD} = 2] ?${FWDNUMBER},recordagain:i,1)
exten => ${FWDNUMBER},n(recordaccepted),Wait(1)
exten => ${FWDNUMBER},n,Playback(this-call-may-be-monitored-or-recorded)
exten => ${FWDNUMBER},n,Wait(1)
exten => ${FWDNUMBER},n,Playback(pls-hold-while-try)
exten => ${FWDNUMBER},n,Dial(${FWDRINGS},60,gmM(screen^${SCREEN_FILE}))
exten => ${FWDNUMBER},n,GotoIf($[${BYPASSVM} = 1] ?${FWDNUMBER},hangup)
exten => ${FWDNUMBER},n,Voicemail(u${FWDVMBOX})
exten => ${FWDNUMBER},n(hangup),Hangup
exten => i,1,GotoIf($[${INVALIDTRIES} = 4] ?t,1)
exten => i,n,Playback(invalid)
exten => i,n,Setvar(INVALIDTRIES=$[${INVALIDTRIES} + 1])
exten => i,n,Goto(${FWDNUMBER},returnfrominvalid)
exten => t,1,System(/bin/rm ${SCREEN_FILE}.gsm)
exten => t,n,Playback(call-terminated)
exten => t,n,Playback(goodbye)
exten => t,n,Hangup
exten => h,1,System(/bin/rm ${SCREEN_FILE}.gsm)

[macro-screen]
exten => s,1,Wait(1)

exten => s,n,ResponseTimeout(15) ; this is the point in which Asterisk will crash.

exten => s,n,Playback(call)
exten => s,n,Playback(from)
exten => s,n,Playback(${ARG1})
exten => s,n(repeatoptions),Wait(1)
exten => s,n,Playback(press-1)
exten => s,n,Playback(for)
exten => s,n,Playback(pbx-transfer)
exten => s,n,Playback(or)
exten => s,n,Playback(press-9)
exten => s,n,Read(ACCEPTCALL|to-hang-up|1)
exten => s,n,GotoIf($["${ACCEPTCALL}" = ""] ?t,1)
exten => s,n,GotoIf($[${ACCEPTCALL} = 1] ?s,callaccepted)
exten => s,n,GotoIf($[${ACCEPTCALL} = 9] ?s,calldenied:s,repeatoptions)
exten => s,n(calldenied),SetVar(MACRO_RESULT=CONTINUE)
exten => s,n,GotoIf($[${MACRO_RESULT} = CONTINUE] ?s,skipmonitor)
exten => s,n(callaccepted),SetGlobalVar(BYPASSVM=1)
exten => s,n,Monitor(wav49|${TIMESTAMP}-${CALLERID}|mb)
exten => s,n(skipmonitor),System(/bin/rm ${ARG1}.gsm)
exten => t,1,Playback(connection-timed-out)
exten => t,n,Goto(s,calldenied)

END

Regards,
Chris Hozian (aka dsfr)
Comments:By: Michael Jerris (mikej) 2005-04-25 13:59:09

Bug guidielines require crash bugs need debug info as well please.

By: Kevin P. Fleming (kpfleming) 2005-04-26 21:59:02

Fixed in CVS HEAD (for DigitTimeout as well), thanks for the report!

By: Digium Subversion (svnbot) 2008-01-15 15:32:17.000-0600

Repository: asterisk
Revision: 5510

U   trunk/pbx.c

------------------------------------------------------------------------
r5510 | kpfleming | 2008-01-15 15:32:17 -0600 (Tue, 15 Jan 2008) | 2 lines

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

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

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