The simple way to put it is that in the example in this email that is from the wiki, using an empty condition with break=never is a noOP. The typical usage of break=never would be if you wanted to execute some extra options when a condition was true and skip it but keep going when its not true. <extension> <!-- because break=never even when the destionation does not begin with 1 we just don't execute these actions and keep going --> <condition field="destination_number" expression="^1(\d+)$" break="never"> <action application="set" data="begins_with_one=true"/> </condition> <condition field="destination_number" expression="^(\d+)$"> <action application="bridge" data="sofia/internal/$1@foobar.com"/> </condition> </extension> So stacking conditions with no actions in them and putting break=never on them is the same as if they do not exist. On Mon, Mar 21, 2011 at 3:10 PM, Michael Collins <msc@freeswitch.org> wrote:
I can't/didn't contribute much to this discussion, but I do follow it. My idea and (little) testing experience supports the explanation of Dimitry. Either way, it 'proofs' there is confusion about the working of the 'break' in condition tags. 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.
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't have the book, SHAME! :) The break flag determines what happens on processing conditions within a single extension. Let's say that chan var ${freeswitch} has the value "rocks" and ${foo} has the value "bar". <extension name="break_flag_is_not_confusing"> <condition "${freeswitch}" expression="^lame$"> <!-- this does not get executed --> </condition> <!-- the following condition is not even evaluated --> <condition "${foo}" expression="bar"> ... </condition> </extension> Look at the above snipped. The first condition evaluates to false, which means all processing for this particular extension stops. The parse "breaks" out of this extension and moves on to the next one. Now look at this extension with the the break-flag set to "never"... <extension name="break_flag_is_not_confusing"> <condition "${freeswitch}" expression="^lame$" break="never"> <!-- this does not get executed --> </condition> <!-- the following condition *is* evaluated --> <condition "${foo}" expression="bar"> ... </condition> </extension> See the difference? With the break flag set to "never" then it does not matter whether the condition is evaluated as true or false - the extension's next condition gets evaluated. Why do you need the break="never"? Simple: when no "break" is specified there is an implied break="on-false" 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 "stack" conditions to create a logical AND. 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="never" on a condition then it does not matter if that particular condition is true or false - extension processing will continue. Hope this helps. If it doesn'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. -MC
_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Anthony Minessale II FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire AIM: anthm MSN:anthony_minessale@hotmail.com GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com IRC: irc.freenode.net #freeswitch FreeSWITCH Developer Conference sip:888@conference.freeswitch.org googletalk:conf+888@conference.freeswitch.org pstn:+19193869900