So, if I understand this example taken one step further would be:<br><br>[long-distance]<br>exten =&gt; _1NXXNXXXXXX,1,Dial(IAX2/${UPSTREAM}/${EXTEN})<br><div style="direction: ltr;">include =&gt; local<br><br>[local]<br>exten =&gt; _NXXXXXX,1,Dial(IAX2/${LOCALPROVIDER}/${EXTEN})
<br>include =&gt; no-priv<br></div><span class="q"><br>[no-priv]<br></span>exten =&gt; _NXXXXXX,1,Dial(no-permissions-to-make-this-type-of-call)<br>exten =&gt; _1NXXNXXXXXX,1,Dial(no-permissions-to-make-this-type-of-call)
<br><br>I started out disliking this method and trying to find a point of failure.&nbsp; I would conclude that its not the &quot;intuitive&quot; method, but it does seem to be functional.&nbsp; I would, if I were *entirely* new, expect the include=&gt; to insert the values in the included context directly at that location.&nbsp; Consider me enlightened.
<br><br><div><span class="gmail_quote">On 4/24/07, <b class="gmail_sendername">Steve Murphy</b> &lt;<a href="mailto:murf@parsetree.com">murf@parsetree.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On Tue, 2007-04-24 at 20:26 -0400, Jared Smith wrote:<br>&gt; On 4/24/07, Steve Murphy &lt;<a href="mailto:murf@parsetree.com">murf@parsetree.com</a>&gt; wrote:<br>&gt; &gt; Trouble is, is this desired behavior? Or is having the contexts checked
<br>&gt; &gt; level by level until a match of any kind is found, the better procedure?<br>&gt;<br>&gt; Well, I for one desire the current behavior.&nbsp;&nbsp;Everyone else can speak<br>&gt; for themselves, but it makes it easy to override an extension included
<br>&gt; in a more-deeply-nested extension by putting its replacement in a<br>&gt; less-deeply-nested context.&nbsp;&nbsp;If they were all pulled together into one<br>&gt; big ball of wax, we&#39;d lose a lot of functionality.<br><br>
I&#39;m glad to have this input! (It&#39;s actually easier to give the same<br>functionality).<br><br>&gt;<br>&gt; &gt; If you think choice (2) would be bad, I&#39;d love to hear how you are<br>&gt; &gt; depending on the recursive behavior of the included patterns.
<br>&gt;<br>&gt; Here&#39;s just one example of the many ways I use the current behavior.<br>&gt;<br>&gt; [long-distance]<br>&gt; exten =&gt; _1NXXNXXXXXX,1,Dial(IAX2/${UPSTREAM}/${EXTEN})<br>&gt; include =&gt; local<br>&gt;
<br>&gt; [local]<br>&gt; exten =&gt; _NXXXXXX,1,Dial(IAX2/${LOCALPROVIDER}/${EXTEN})<br>&gt; exten =&gt; _1NXXNXXXXXX,1,Dial(no-permissions-to-make-this-type-of-call)<br><br>**Murphy gasps in astonishment**&nbsp;&nbsp;This is very clever!!!
<br><br>How would you state this? I thought that this kind of search system<br>would be best taken advantage of by supplying more specific patterns at<br>the top levels, and having more general patterns below; this example is
<br>more like top levels getting<br>higher precedence than lower.<br><br>This example is really good, in that if just include the [local]<br>context, you&#39;ll get the message that you don&#39;t have perms to make<br>long-distance calls. But, including [long-distance] lets you dial
<br>long-distance, but without having to rewrite the [local] definitions.<br>**very** clever. OK. I&#39;m sold.<br><br>&gt;<br>&gt; &gt; Jared&#39;s example is excellently obtuse! The inclusion tree looks<br>&gt; &gt; something like this:
<br>&gt;<br>&gt; I&#39;ll take that as a compliment!&nbsp;&nbsp;It was carefully designed to<br>&gt; stimulate thought and discussion.<br><br>You are taking it rightly, then! It&#39;s a well composed example. You could<br>do this for a living!! ;)
<br><br>&gt;<br>&gt; &gt;<br>&gt; &gt; foo +---+<br>&gt; &gt;&nbsp;&nbsp;(123)&nbsp;&nbsp;|<br>&gt; &gt;&nbsp;&nbsp;(456)&nbsp;&nbsp;|<br>&gt; &gt;&nbsp;&nbsp;(789)&nbsp;&nbsp;|<br>&gt; &gt;&nbsp;&nbsp;(_5XX) |<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +-- bar ----------+<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;(555)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;(_XXX)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +--- baz-1<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(555)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(333)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +-- baz-2<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(555)<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(333)<br>&gt; &gt;<br>&gt; &gt; Worse yet, if you entered 333, and bar didn&#39;t have the _XXX pattern,<br>&gt; &gt; which would match, the baz-1 version, or the baz-2?<br>&gt;<br>&gt; The one in [baz-1].&nbsp;&nbsp;Again, when Asterisk looks in the bar context and
<br>&gt; doesn&#39;t find a match, it looks in its included contexts, and would<br>&gt; find a match in the [baz-1] context.&nbsp;&nbsp;Asterisk is going to look *all<br>&gt; the way* through the [bar] context before moving on to the [baz-2]
<br>&gt; context.&nbsp;&nbsp;If this doesn&#39;t qualify as depth-first search, I&#39;m not<br>&gt; seeing the reason why.<br><br>You are correct, this is fundamentally depth-first; it&#39;s just the fact<br>that it searches first all the way thru all the extensions defined in
<br>the current context, before recursion into the included context, that<br>gives it a breadth-first sort of taste. But only a taste. Or would it be<br>a nuance? A fragrance?&nbsp;&nbsp;A hint? A whisper? A touch? A dash? An<br>intimation? Oh, you know what I mean! I give up!
<br><br>murf<br><br><br><br>_______________________________________________<br>--Bandwidth and Colocation provided by <a href="http://Easynews.com">Easynews.com</a> --<br><br>asterisk-dev mailing list<br>To UNSUBSCRIBE or update options visit:
<br>&nbsp;&nbsp; <a href="http://lists.digium.com/mailman/listinfo/asterisk-dev">http://lists.digium.com/mailman/listinfo/asterisk-dev</a><br><br><br></blockquote></div><br>