[asterisk-dev] new priority of pattern matching in 1.4. Does it makes sense?

Jared Smith jsmith at digium.com
Mon Feb 25 15:40:54 CST 2008


On Mon, 2008-02-25 at 14:51 -0600, John Lange wrote: 
> My example was contrived (to protect the innocent) so working through
> the way I have it in the real world I'm slowly coming to the realization
> that the order of inclusion is what was throwing it off.

I was afraid this was the case, which is why I tried to explain it as
clearly as I could.

> So I think I finally have a handle on how Asterisk does matching. It's
> kind of embarrassing that I've been doing Asterisk so long and not had a
> complete understanding of how it works.
> 
> Anyhow, does this description do it justice?

Pretty good -- I'll add a few minor details in here, just for those who
are following along and trying to learn it for themselves.

> Asterisk pattern matching works like this:
> 
> 1) Asterisk searches for *ANY* matching pattern in the starting context
> giving priority to the best match.

Yes. 

> 2) Only if no pattern could possibly match in the starting context,
> Asterisk will search the first specified included context, again giving
> priority to the best match.

Yes (assuming there are no "switch =>" statements)

> 3) Only if no pattern could possibly match in the first included
> context, then Asterisk will search the second, then third included
> context, and so on until a match is found or all patterns have been
> tested.

I'd rewrite this as "Only if no patter could possibly matchin in the
first included context *or any contexts included in the first included
context*, then Asterisk will search the second, then third included
context, and so on until a match is found or all patterns have been
tested."

> 4) if no pattern matches, the "i" extension will be matched.

The 'i' only matches if an extension is entered at a Background() or
WaitExten() application.  An arbitrary extension being dialed in a
context will not trigger the 'i' extension.

> 5) if no "i" extension exists, the "t" extension will match after the
> specified timeout.

The 't' extension will be matched after a response timeout from either
the Background() or WaitExten() applications (whether or not an 'i'
extension exists).

-- 
Jared Smith
Community Relations Manager
Digium, Inc.




More information about the asterisk-dev mailing list