Index: channels/chan_zap.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_zap.c,v retrieving revision 1.490 diff -u -r1.490 chan_zap.c --- channels/chan_zap.c 19 Aug 2005 04:23:23 -0000 1.490 +++ channels/chan_zap.c 21 Aug 2005 18:06:20 -0000 @@ -166,8 +166,6 @@ #define DCHAN_AVAILABLE (DCHAN_PROVISIONED | DCHAN_NOTINALARM | DCHAN_UP) -static int cur_emdigitwait = 250; /* Wait time in ms for digits on EM channel */ - static char context[AST_MAX_CONTEXT] = "default"; static char cid_num[256] = ""; static char cid_name[256] = ""; @@ -634,7 +632,6 @@ int cidrings; /* Which ring to deliver CID on */ int dtmfrelax; /* whether to run in relaxed DTMF mode */ int fake_event; - int emdigitwait; int polarityonanswerdelay; struct timeval polaritydelaytv; int sendcalleridafter; @@ -5146,8 +5143,25 @@ if ((res < 1) && (p->dsp)) ast_dsp_digitreset(p->dsp); break; default: - /* If we got it, get the rest */ - res = my_getsigstr(chan,dtmfbuf + 1,' ', p->emdigitwait); + /* If we got the first digit, get the rest */ + len = 1; + while((len < AST_MAX_EXTENSION-1) && ast_matchmore_extension(chan, chan->context, dtmfbuf, 1, p->cid_num)) { + if (ast_exists_extension(chan, chan->context, dtmfbuf, 1, p->cid_num)) { + timeout = matchdigittimeout; + } else { + timeout = gendigittimeout; + } + res = ast_waitfordigit(chan, timeout); + if (res < 0) { + ast_log(LOG_DEBUG, "waitfordigit returned < 0...\n"); + ast_hangup(chan); + return NULL; + } else if (res) { + dtmfbuf[len++] = res; + } else { + break; + } + } break; } } @@ -6925,7 +6939,6 @@ tmp->restrictcid = restrictcid; tmp->use_callingpres = use_callingpres; tmp->priindication_oob = priindication_oob; - tmp->emdigitwait = cur_emdigitwait; if (tmp->usedistinctiveringdetection) { if (!tmp->use_callerid) { ast_log(LOG_NOTICE, "Distinctive Ring detect requires 'usecallerid' be on\n"); @@ -10552,8 +10565,6 @@ cur_rxflash = atoi(v->value); } else if (!strcasecmp(v->name, "debounce")) { cur_debounce = atoi(v->value); - } else if (!strcasecmp(v->name, "emdigitwait")) { - cur_emdigitwait = atoi(v->value); } else if (!strcasecmp(v->name, "toneduration")) { int toneduration; int ctlfd;