[Asterisk-Dev] DIALSTATUS, Goto,
extension matching and loop detection
Andrew Lindh
asterisk at ntplx.net
Tue Dec 21 09:39:51 MST 2004
This seems like a user-list question, but it's not...at least not all of it.
Issue #1:
I was working with the DIALSTATUS variable in the extension plan
using the line after a dial:
exten => s,n,Goto(s-${DIALSTATUS},1)
I then have a normal line that works like:
exten => s-BUSY,1,Busy()
Then a match for all other dialstaus:
exten => s-.,1,Congestion()
But it does not work! No supprise I look at and agree that it should
not work because it should be:
exten => _s-.,1,Congestion()
Without the underline it should only do exact matches. I looked at all
the documentation and it all lists it WITHOUT the underline and says
that "s-." would be a catchall for the dialstatus goto, but it does not work.
Am I missing something here? The docs say that's what to use, but it does
not work and should not work with out the underline.
Issue #2:
I also made a small config mistake and saw that there does not seem to be
any loop detection with the goto. This could be a problem for a misconfigured
system (not that certified experts should ever have that problem). A
goal of a well programmed application is to protect users from their own
mistakes.
Simple example:
[oops]
exten => s,1,Goto(s,1)
Not a good example (what fool would do that!), but you get the idea.
There should be something in place to catch endless loops. May be
something as simple as a count of how many commands (exten matches) or
goto's a call can have before it is disconnected (or sent to the T extension).
Sendmail programs do this now, it allows 30 hops before failing a message.
A fixed number is not good because we can't know what everyone will do
but a high default (100 or so) as a hard limit would break loops without
doing true loop detection. It could just be "maxmatchcount=100"
in the [general] section.
-- Andrew
More information about the asterisk-dev
mailing list