[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