summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchannels/chan_zap.c29
-rwxr-xr-xconfigs/zapata.conf.sample2
-rwxr-xr-xdoc/README.variables1
3 files changed, 31 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")) {
diff --git a/configs/zapata.conf.sample b/configs/zapata.conf.sample
index c046dedc0..e65ff7c0a 100755
--- a/configs/zapata.conf.sample
+++ b/configs/zapata.conf.sample
@@ -145,6 +145,8 @@ signalling=fxo_ls
; rxwink: Receiver wink time (default 300ms)
; rxflash: Receiver flashtime (default 1250ms)
; debounce: Debounce timing (default 600ms)
+; emdigitwait: Time to wait for DID digits on E&M links (default 250ms) (Increase to 500
+; or so if you are not getting all DID digits on your E&M link)
;
rxwink=300 ; Atlas seems to use long (250ms) winks
;
diff --git a/doc/README.variables b/doc/README.variables
index dfb6de3d1..409ce341f 100755
--- a/doc/README.variables
+++ b/doc/README.variables
@@ -74,6 +74,7 @@ ${SIPUSERAGENT} SIP user agent
${TIMESTAMP} Current date time in the format: YYYYMMDD-HHMMSS
${TXTCIDNAME} Result of application TXTCIDName
${UNIQUEID} Current call unique identifier
+${PRIREDIRECTREASON} Reason for redirect, if a call was directed
The dial() application sets the following variables: