<div dir="ltr"><div><div>What an excellent response Richard!!! Thank you very much for that!!<br></div><br>Best regards!<br></div>Patrick<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Feb 15, 2017 at 5:23 AM, Richard Mudgett <span dir="ltr"><<a href="mailto:rmudgett@digium.com" target="_blank">rmudgett@digium.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Tue, Feb 14, 2017 at 6:24 AM, Patrick Wakano <span dir="ltr"><<a href="mailto:pwakano@gmail.com" target="_blank">pwakano@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><div><div><div><font face="arial, helvetica, sans-serif" color="#000000">Hello Asterisk Users,<br><br></font></div><div><font face="arial, helvetica, sans-serif" color="#000000">Hope you all doing fine!</font></div><font face="arial, helvetica, sans-serif" color="#000000">I am working with a quite complex dialplan, and I've come to some situations where it makes some nasty use of pre-bridge handlers.<br></font></div><font face="arial, helvetica, sans-serif" color="#000000">The pre-bridge handlers wiki (<a href="https://wiki.asterisk.org/wiki/display/AST/Pre-Bridge+Handlers" target="_blank">https://wiki.asterisk.org/wik<wbr>i/display/AST/Pre-Bridge+Handl<wbr>ers</a>) doesn't have the big warning the pre-dial one has  indicating it must return and must not put the caller/callee in other applications (<a href="https://wiki.asterisk.org/wiki/display/AST/Pre-Dial+Handlers" target="_blank">https://wiki.asterisk.org/wik<wbr>i/display/AST/Pre-Dial+Handler<wbr>s</a>). So apparently, looks like they wouldn't have this restriction... However I had the feeling this was not true, so after some research I found this issue <a href="https://issues.asterisk.org/jira/browse/ASTERISK-25690" target="_blank">https://issues.asterisk.org/ji<wbr>ra/browse/ASTERISK-25690</a>, that says <span style="font-variant-ligatures:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);display:inline;float:none">"<i>Connected line subroutines are meant</i></span><span style="font-variant-ligatures:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);display:inline;float:none"><i><span class="m_4043768909064000583gmail-m_-2584975759139764723m_7840497829895240789gmail-Apple-converted-space"></span> to be fast and as a result there is an expectation that applications invoked will not consume frames</i>". </span><span style="font-variant-ligatures:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);display:inline;float:none">I am assuming that connected lines subroutines are just different words for pre-bridge handlers, right?<br></span></font></div><span style="font-variant-ligatures:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);display:inline;float:none"><font face="arial, helvetica, sans-serif" color="#000000">Anyway my question is, what happens if I do not return straight away from the pre-bridge handler? Or even worst, if I execute a Dial application for example? Will I fall in some "undefined behaviour"?<br><br></font></span></div><div><span style="font-variant-ligatures:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);display:inline;float:none"><font face="arial, helvetica, sans-serif" color="#000000">Anyone has experienced something like this?</font></span></div></div></div></blockquote><div><br></div></span><div>There are several handler routines available and each handles situations for the<br>different states of a call.  It makes no sense to use the Hangup() application in<br>any of them and you must return from all of them.  Most of the handlers operate<br></div><div>from within the Dial application.<br></div><div><br>Pre-dial handlers<br></div><div>  The purpose of these routines is to setup a channel to place a call.  The pre-dial<br></div><div>  routines can be run on the calling and called channels.  See the Dial application<br></div><div>  documentation.<br><br></div><div>  For the calling channel, you can do most anything to the calling channel except<br></div><div>  hangup because you are still within the Dial application's control.  The reason<br></div><div>  for the ability to execute a pre-dial routine on the calling channel instead of doing<br></div><div>  all the setup before executing Dial is to eliminate a window of opportunity when using<br>  the Lock/Unlock applications with Dial.<br><br></div><div>  For the called channel, you can only setup the channel.  At this point, the channel<br>  exists but is not connected to anything nor has the call been placed.  Do your<br>  channel setup and return.<br><br></div><div>Redirecting interception handlers<br></div><div>  This routine normally executes on the calling channel because the called channel<br></div><div>  has indicated that the call is being diverted/forwarded/redirected to somewhere<br>  else.  The purpose of this routine is to get the REDIRECTING party information<br></div><div>  setup as you want and then return.  You do not have control of the media nor should<br>  you hangup.  You also should be quick about it.<br></div><br><div>Pre-bridge handlers<br></div><div>  At this point the called channel has answered and all other called channels that were<br></div><div>  dialed have been hung up.  The called channel is about to be bridged with the calling<br></div><div>  channel.<br><br></div><div>  The purpose of this routine is to give the called person an opportunity to decide if<br></div><div>  he even wants to talk to the caller.  You have control of the media stream to the called<br></div><div>  party.  You cannot hangup the channel in the routine because you must return.  If you<br></div><div>  want to abort bridging the call with the channel you must set a return value as<br>  documented by the Dial application.  You need to remember that the caller is<br></div><div>  waiting to be connected the entire time you are in this routine.<br><br></div><div>Connected-line interception handlers<br></div><div>  At this point the channels are bridged together and may have been talking for awhile.<br><br></div><div>  The purpose of this routine is to get the CONNECTEDLINE party information setup<br></div><div>  as you want and then return.  The bridged peer has changed identity likely because<br>  of a transfer.  You do not have control of the media nor should you hangup.  You also<br>  need be quick about it or you risk causing a noticeable interruption to the media.<br><br></div><div>Hangup handlers<br></div><div>  At this point the channel is hungup and you should be gathering information about<br></div><div>  the call for further processing later.  You should not be doing extensive post call<br>  analysis at this time because you are delaying the channel technology hangup<br></div><div>  sequence.  You have the same restrictions with the h extension.<br></div><br><div>Given what I have stated about pre-bridge handlers you should be able to see that<br></div><div>doing a Dial in a pre-bridge handler (or any handler for that matter) is a bad thing to<br>do and definitely falls into the "undefined behavior" category.<span class="HOEnZb"><font color="#888888"><br></font></span></div><span class="HOEnZb"><font color="#888888"><div><br></div></font></span></div><span class="HOEnZb"><font color="#888888">Richard<br></font></span></div></div>
<br>--<br>
______________________________<wbr>______________________________<wbr>_________<br>
-- Bandwidth and Colocation Provided by <a href="http://www.api-digital.com" rel="noreferrer" target="_blank">http://www.api-digital.com</a> --<br>
<br>
Check out the new Asterisk community forum at: <a href="https://community.asterisk.org/" rel="noreferrer" target="_blank">https://community.asterisk.<wbr>org/</a><br>
<br>
New to Asterisk? Start here:<br>
      <a href="https://wiki.asterisk.org/wiki/display/AST/Getting+Started" rel="noreferrer" target="_blank">https://wiki.asterisk.org/<wbr>wiki/display/AST/Getting+<wbr>Started</a><br>
<br>
asterisk-users mailing list<br>
To UNSUBSCRIBE or update options visit:<br>
   <a href="http://lists.digium.com/mailman/listinfo/asterisk-users" rel="noreferrer" target="_blank">http://lists.digium.com/<wbr>mailman/listinfo/asterisk-<wbr>users</a><br></blockquote></div><br></div>