diff options
author | Matthew Fredrickson <creslin@digium.com> | 2004-12-15 19:59:53 +0000 |
---|---|---|
committer | Matthew Fredrickson <creslin@digium.com> | 2004-12-15 19:59:53 +0000 |
commit | b420a63e737663376bc2614c6126c7b379b616b2 (patch) | |
tree | ef43d06e0b9e653814aab4f6a50711681042fc09 /channels/chan_zap.c | |
parent | 76de8d70a8b320fd43b7bcc4a8e884cf17ee3b6a (diff) |
Add new variable for PRIREDIRECTREASON in dial plan if you a call is redirected
to you. Also some E&M tweaking parameters.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@4458 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/chan_zap.c')
-rwxr-xr-x | channels/chan_zap.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/channels/chan_zap.c b/channels/chan_zap.c index 7b3216b58..68fc5deb1 100755 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -157,6 +157,8 @@ static char *config = "zapata.conf"; #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_EXTENSION] = "default"; static char cid_num[256] = ""; static char cid_name[256] = ""; @@ -563,6 +565,7 @@ static struct zt_pvt { int dtmfrelax; /* whether to run in relaxed DTMF mode */ int fake_event; int zaptrcallerid; /* should we use the callerid from incoming call on zap transfer or not */ + int emdigitwait; int hanguponpolarityswitch; int polarityonanswerdelay; struct timeval polaritydelaytv; @@ -4835,7 +4838,7 @@ static void *ss_thread(void *data) break; default: /* If we got it, get the rest */ - res = my_getsigstr(chan,dtmfbuf + 1,' ',250); + res = my_getsigstr(chan,dtmfbuf + 1,' ', p->emdigitwait); break; } } @@ -6592,6 +6595,7 @@ static struct zt_pvt *mkintf(int channel, int signalling, int radio, struct zt_p 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"); @@ -7778,6 +7782,27 @@ static void *pri_dchannel(void *vpri) snprintf(ani2str, 5, "%.2d", e->ring.ani2); pbx_builtin_setvar_helper(c, "ANI2", ani2str); } + + if(e->ring.redirectingreason >= 0) { + char redirstr[20] = ""; + switch (e->ring.redirectingreason) { + case 0: + snprintf(redirstr, 20, "UNKNOWN"); + break; + case 1: + snprintf(redirstr, 20, "BUSY"); + break; + case 2: + snprintf(redirstr, 20, "NO_REPLY"); + break; + case 0xF: + snprintf(redirstr, 20, "UNCONDITIONAL"); /* Other reason */ + break; + } + + pbx_builtin_setvar_helper(c, "PRIREDIRECTCAUSE", redirstr); + } + ast_mutex_lock(&pri->lock); if (c && !ast_pthread_create(&threadid, &attr, ss_thread, c)) { if (option_verbose > 2) @@ -9778,6 +9803,8 @@ static int setup_zap(int reload) 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, "polarityonanswerdelay")) { polarityonanswerdelay = atoi(v->value); } else if (!strcasecmp(v->name, "hanguponpolarityswitch")) { |