[asterisk-dev] chan_dahdi - dnid handling

Klaus Darilion klaus.mailinglists at pernau.at
Wed Jun 30 06:05:40 CDT 2010



Am 30.06.2010 09:10, schrieb Wolfgang Pichler:
> Hi all,
>
> i have a question / bug report about the chan_dahdi dnid handling...
>
> I am setting up a gateway system - for use in austria. In Austria we can
> get the dnid complete on a new call (we call it Blockwahl) - or we do
> get it as dtmf sequence (we call it Einzelwahl).
>
> Setting up chan_dahdi with immediate=no does work for this - but if the
> call is comming - and does not have the complete set - then asterisk
> will wait 8 seconds to send the call to the s extension - which is
> definitly to long.

Are you using analog or ISDN?

Maybe you discovered another bug, but I think there is another problem 
when handling the received digits:

channels/chan_dahdi.c:
if (ast_exists_extension(chan, chan->context, exten, 1, p->cid_num))
     timeout = matchdigittimeout;
else
     timeout = gendigittimeout;
res = ast_waitfordigit(chan, timeout);

If chan_dahdi does not find a matching extension, e.g. if there is no 
dnid provided, it sets the timeout to gendigittimeout=8 seconds, which 
is IMO really much to big. The usual overlap timeout of 
matchdigittimeout=3 seconds is more appropriate.

You could make the gendigittimeout and matchdigittimeout configurable, 
or change the logic for exmaple to check for "s" extension in case of 
missing DNID:

if (ast_exists_extension(chan, chan->context, exten, 1, p->cid_num))
   timeout = matchdigittimeout;
else {
   if (ast_strlen_zero(exten) &&
       ast_exists_extension(chan, chan->context, "s", 1, p->cid_num)) {
     timeout = matchdigittimeout;
   } else {
     timeout = gendigittimeout;
   }
}
res = ast_waitfordigit(chan, timeout);

regards
Klaus



More information about the asterisk-dev mailing list