<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    Figured it out... <br>
    <br>
    1) Incoming SIP immediately routed out a Dahdi PRI trunk is answered
    just before it dials the trunk<br>
    2) CNG detected after call is bridged<br>
    3) Call redirected to fax extension AFTER the bridge is torn down
    and the hangup extension is run in the original "Dial" context<br>
    4) Fax extension executes and ReceiveFax detects T.38 hangup when
    fax is completed<br>
    5) pbx WON'T run hangup extension (again) in fax ext. context so no
    more dialplan execution after the ReceiveFax (so no fax delivery
    capabilities)<br>
    <br>
    Not sure about impact but I modified chan_sip.c after CNG is
    detected and just before the redirect (to the fax extension) and
    told it not to run the hangup extension in the original "Dial"
    context by setting&nbsp; AST_FLAG_BRIDGE_HANGUP_DONT.&nbsp; This appears to
    have fixed the issue.<br>
    <br>
    -- Jay<br>
    <br>
    On 2/21/2011 10:47 AM, Jay Reeder wrote:
    <blockquote cite="mid:4D62892E.7020903@voicenation.com" type="cite">
      <meta http-equiv="content-type" content="text/html;
        charset=ISO-8859-1">
      We're having an issue where we call ReceiveFax in a context that
      includes a hangup extension and half the time dialplan execution
      doesn't continue after the fax is received successfully.&nbsp; Am I
      missing something simple here?&nbsp; Below is a sample call where this
      happened:<br>
      <br>
      <pre>The last log line for this channel/call is:

[Feb 21 09:10:53] VERBOSE[13730] res_fax_digium.c:     -- Channel 'SIP/Level3_sip_peer_mcqueen-00002c3d' FAX session '228' is complete, result: 'SUCCESS' (FAX_SUCCESS), error: 'NO_ERROR', pages: 8, resolution: '204x196', transfer rate: '9600', remoteSID: 'TIME'

The context it's executing in is:

[ext-fax-voicenation]
exten =&gt; s,1,Noop(Receiving Fax for: ${FROM_DID} From: ${CALLERID(all)})
exten =&gt; s,n(receivefax),StopPlaytones
exten =&gt; s,n,Set(FAX_FILE_NAME=<i class="moz-txt-slash"><span class="moz-txt-tag">/</span>var/www/html/vncake/fax_temp<span class="moz-txt-tag">/</span></i>${FROM_DID}-${CALLERID(number)}-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${UNIQUEID}.tif)
; Gafachi is known to have a broken ecm implementation - disable on receive - also send with 'z' option
exten =&gt; s,n,Set(trunk_name=${CUT(CHANNEL,-,1)})
exten =&gt; s,n,Noop(trunk name is ${trunk_name:4})
exten =&gt; s,n,ExecIf($[ "${trunk_name:4:7}" = "gafachi"]?Set(FAXOPT(ecm)=no))
;------------------------------
; Level3 V17/V34 modems were unreliable and V17 (14400) wasn't working so we downgrade to slower fax-modems
exten =&gt; s,n,Set(FAXOPT(modem)="V27,V29")
;------------------------------
exten =&gt; s,n,Set(FAXDELIVERED=no)
exten =&gt; s,n,TryExec(ReceiveFAX(${FAX_FILE_NAME},f))
exten =&gt; s,n,System(/var/www/html/vncake/cake/console/cake -app /var/www/html/vncake/app email_fax ${FAX_FILE_NAME} ${FAXPAGES} err:${FAXOPT(error)})
exten =&gt; s,n,Set(FAXDELIVERED=yes)
exten =&gt; s,n,ExecIf($["${FAXOPT(error)}"=""]?Set(FAXSTATUS=FAILED LICENSE EXCEEDED))
exten =&gt; s,n,ExecIf($["${FAXOPT(error)}"!="" &amp;&amp; "${FAXOPT(error)}"!="NO_ERROR"]?Set(FAXSTATUS="FAILED FAXOPT: error: ${FAXOPT(error)} status: ${FAXOPT(status)} statusstr: ${FAXOPT(statusstr)}"))
exten =&gt; s,n,Hangup
exten =&gt; h,1,Noop(*** process fax now ***)
exten =&gt; h,n,GotoIf($["${FAXDELIVERED}" = "yes"]?end)
; if hangup while processing script above(before flag set =yes) then will jump to hangup and double process - need to pause here so script can make adjustments
exten =&gt; h,n,System(/bin/sleep 5)
exten =&gt; h,n,System(/var/www/html/vncake/cake/console/cake -app /var/www/html/vncake/app email_fax ${FAX_FILE_NAME} ${FAXPAGES} err:${FAXOPT(error)})
exten =&gt; h,n,Set(FAXDELIVERED=yes)
exten =&gt; h,n(end),Macro(hangupcall,)
exten =&gt; h,process+101(failed),Noop(FAX ${FAXSTATUS} for:${FAX_RX_EMAIL} , From: ${CALLERID(all)})
; email to notify instability in the fax module
exten =&gt; h,n,ExecIf($["${FAXOPT(error)}" = "FILE_IO_FAIL"]?System("echo \"** Asterisk Fax FILE_IO_FAIL - will reload. Thank you. Asterisk :)\" | mail -s \"** Asterisk Fax FILE_IO_FAIL\"<a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:itinternal@voicenation.com"> **email address was here**</a>"))
; Restart Asterisk if FILE IO FAILURE on fax - indicates instability in fax module
; accomplished by cron job that will restart asterisk as root when this file is found
exten =&gt; h,n,ExecIf($["${FAXOPT(error)}" = "FILE_IO_FAIL"]?System("echo \"FAX_IO_FAILURE\" &gt;&gt; /tmp/FAX_IO_FAILURE"))
exten =&gt; h,n,Macro(hangupcall,)

; end of [ext-fax]
</pre>
      <br>
      <br>
      <br>
      What am I missing here?&nbsp; Half the time we don't get back into the
      dialplan from the ReceiveFax even though wrapped in TryExec.&nbsp;
      Before wrapping the call in TryExec, I would get a log entry about
      ReceiveFax exiting non-zero (after successful fax receipt) and no
      other log entry for the call.<br>
      <br>
      This is running on 1.6.2.17 rc3 ... we upgraded because the same
      thing was happening with 1.6.2.6.<br>
      <br>
      Any help would be appreciated.<br>
      <br>
      Thanks,<br>
      <br>
      Jay<br>
    </blockquote>
  </body>
</html>