<div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><div class="h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

</blockquote></div></div>
I can&#39;t/didn&#39;t contribute much to this discussion, but I do follow it. My idea and (little) testing experience supports the explanation of Dimitry.<br>
Either way, it &#39;proofs&#39; there is confusion about the working of the &#39;break&#39; in condition tags.<br>
If I can find the time, I will try to do some tests / build an example myself. Thank you both for the answers and insights so far.<br><br></blockquote><div><br></div><div>Okay, for those of you who have the bridge book, please go to page 167-168. Darren did a really good job of explaining this. For those of you who don&#39;t have the book, SHAME! :)</div>
<div><br></div><div>The break flag determines what happens on processing conditions within a single extension. Let&#39;s say that chan var ${freeswitch} has the value &quot;rocks&quot; and ${foo} has the value &quot;bar&quot;. </div>
<div><br></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">&lt;extension name=&quot;break_flag_is_not_confusing&quot;&gt;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  &lt;condition &quot;${freeswitch}&quot; expression=&quot;^lame$&quot;&gt;</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">    &lt;!-- this does not get executed --&gt;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  &lt;/condition&gt;</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  &lt;!-- the following condition is not even evaluated --&gt;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  &lt;condition &quot;${foo}&quot; expression=&quot;bar&quot;&gt;</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  ...</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  &lt;/condition&gt;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">&lt;/extension&gt; </font></div>
<div><br></div><div>Look at the above snipped. The first condition evaluates to false, which means all processing for this particular extension stops. The parse &quot;breaks&quot; out of this extension and moves on to the next one. Now look at this extension with the the break-flag set to &quot;never&quot;...</div>
<div><br></div><div><meta charset="utf-8"><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">&lt;extension name=&quot;break_flag_is_not_confusing&quot;&gt;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  &lt;condition &quot;${freeswitch}&quot; expression=&quot;^lame$&quot; break=&quot;never&quot;&gt;</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">    &lt;!-- this does not get executed --&gt;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  &lt;/condition&gt;</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  &lt;!-- the following condition *is* evaluated --&gt;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  &lt;condition &quot;${foo}&quot; expression=&quot;bar&quot;&gt;</font></div>
<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  ...</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  &lt;/condition&gt;</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">&lt;/extension&gt; </font></div>
</div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><br></font></div><div>See the difference? With the break flag set to &quot;never&quot; then it does not matter whether the condition is evaluated as true or false - the extension&#39;s next condition gets evaluated. Why do you need the break=&quot;never&quot;? Simple: when no &quot;break&quot; is specified there is an implied break=&quot;on-false&quot; for the condition. In other words, by default, if one condition inside of an extension evaluates to false then all processing for that extension stops. This has the effect of allowing you to &quot;stack&quot; conditions to create a logical AND. </div>
<div><br></div><div>So, in summary, the break flag will control how the parser behaves when evaluating conditions. Normally when a single condition fails, the whole extension is skipped, however when you do break=&quot;never&quot; on a condition then it does not matter if that particular condition is true or false - extension processing will continue.</div>
<div><br></div><div>Hope this helps. If it doesn&#39;t then read chapters 5 and 8 of the book. Chapter 5 (me) is a gentle intro into the dialplan. Chapter 8 (Darren) talks more extensively about the advanced concepts of dialplan processing. </div>
<div><br></div><div>-MC</div><div><br></div></div>