diff options
author | mattf <mattf@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-08-30 15:39:43 +0000 |
---|---|---|
committer | mattf <mattf@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-08-30 15:39:43 +0000 |
commit | 5864d4b249de2096e48ce911d6988675d133e07b (patch) | |
tree | 80d7edfe23d4b55c46a03045124d0ef3c4cc04e6 /channels/chan_zap.c | |
parent | 6ef6450301f932d73bf32fa1f3f4582256cabed6 (diff) |
Add support for override of the default pri exclusive/preferred channel
selection behavior
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6451 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_zap.c')
-rwxr-xr-x | channels/chan_zap.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/channels/chan_zap.c b/channels/chan_zap.c index 52ce9090b..eac5f8be5 100755 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -257,6 +257,7 @@ static int cur_start = -1; static int cur_rxwink = -1; static int cur_rxflash = -1; static int cur_debounce = -1; +static int cur_priexclusive = 0; static int priindication_oob = 0; @@ -545,6 +546,7 @@ static struct zt_pvt { unsigned int permcallwaiting:1; unsigned int permhidecallerid:1; /* Whether to hide our outgoing caller ID or not */ unsigned int priindication_oob:1; + unsigned int priexclusive:1; unsigned int pulse:1; unsigned int pulsedial:1; /* whether a pulse dial phone is detected */ unsigned int restrictcid:1; /* Whether restrict the callerid -> only send ANI */ @@ -1877,6 +1879,8 @@ static int zt_call(struct ast_channel *ast, char *rdest, int timeout) int dp_strip; int prilocaldialplan; int ldp_strip; + int exclusive; + c = strchr(dest, '/'); if (c) c++; @@ -1933,8 +1937,18 @@ static int zt_call(struct ast_channel *ast, char *rdest, int timeout) pri_set_crv(p->pri->pri, p->call, p->channel, 0); } p->digital = IS_DIGITAL(ast->transfercapability); - pri_sr_set_channel(sr, p->bearer ? PVT_TO_CHANNEL(p->bearer) : PVT_TO_CHANNEL(p), - p->pri->nodetype == PRI_NETWORK ? 0 : 1, 1); + /* Add support for exclusive override */ + if (p->priexclusive) + exclusive = 1; + else { + /* otherwise, traditional behavior */ + if (p->pri->nodetype == PRI_NETWORK) + exclusive = 0; + else + exclusive = 1; + } + + pri_sr_set_channel(sr, p->bearer ? PVT_TO_CHANNEL(p->bearer) : PVT_TO_CHANNEL(p), exclusive, 1); pri_sr_set_bearer(sr, p->digital ? PRI_TRANS_CAP_DIGITAL : ast->transfercapability, (p->digital ? -1 : ((p->law == ZT_LAW_ALAW) ? PRI_LAYER_1_ALAW : PRI_LAYER_1_ULAW))); @@ -4670,7 +4684,7 @@ static int zt_indicate(struct ast_channel *chan, int condition) ast_log(LOG_DEBUG,"Received AST_CONTROL_PROGRESS on %s\n",chan->name); #ifdef ZAPATA_PRI p->digital = 0; /* Digital-only calls isn't allows any inband progress messages */ - if (!p->proceeding && p->sig==SIG_PRI && p->pri && !p->outgoing) { + if ((p->proceeding < 2) && p->sig==SIG_PRI && p->pri && !p->outgoing) { if (p->pri->pri) { if (!pri_grab(p, p->pri)) { pri_progress(p->pri->pri,p->call, PVT_TO_CHANNEL(p), 1); @@ -6927,6 +6941,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->priexclusive = cur_priexclusive; tmp->emdigitwait = cur_emdigitwait; if (tmp->usedistinctiveringdetection) { if (!tmp->use_callerid) { @@ -10408,6 +10423,8 @@ static int setup_zap(int reload) else ast_log(LOG_WARNING, "'%s' is not a valid pri indication value, should be 'inband' or 'outofband' at line %d\n", v->value, v->lineno); + } else if (!strcasecmp(v->name, "priexclusive")) { + cur_priexclusive = ast_true(v->value); } else if (!strcasecmp(v->name, "internationalprefix")) { ast_copy_string(internationalprefix, v->value, sizeof(internationalprefix)); } else if (!strcasecmp(v->name, "nationalprefix")) { |