mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-18 18:58:22 +00:00
Provide the ability to directly manipulate the TON/NPI bits in the dialstring.
Reported by: thetatag Patch by: thetatag/stevens/tilghman Closes issue #5331 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@89078 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -2353,7 +2353,6 @@ static int zt_call(struct ast_channel *ast, char *rdest, int timeout)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (strlen(c) < p->stripmsd) {
|
||||
ast_log(LOG_WARNING, "Number '%s' is shorter than stripmsd (%d)\n", c, p->stripmsd);
|
||||
ast_mutex_unlock(&p->lock);
|
||||
@@ -2434,6 +2433,56 @@ static int zt_call(struct ast_channel *ast, char *rdest, int timeout)
|
||||
pridialplan = PRI_LOCAL_ISDN;
|
||||
}
|
||||
}
|
||||
while (c[p->stripmsd] > '9' && c[p->stripmsd] != '*' && c[p->stripmsd] != '#') {
|
||||
switch (c[p->stripmsd]) {
|
||||
case 'U':
|
||||
pridialplan = (PRI_TON_UNKNOWN << 4) | (pridialplan & 0xf);
|
||||
break;
|
||||
case 'I':
|
||||
pridialplan = (PRI_TON_INTERNATIONAL << 4) | (pridialplan & 0xf);
|
||||
break;
|
||||
case 'N':
|
||||
pridialplan = (PRI_TON_NATIONAL << 4) | (pridialplan & 0xf);
|
||||
break;
|
||||
case 'L':
|
||||
pridialplan = (PRI_TON_NET_SPECIFIC << 4) | (pridialplan & 0xf);
|
||||
break;
|
||||
case 'S':
|
||||
pridialplan = (PRI_TON_SUBSCRIBER << 4) | (pridialplan & 0xf);
|
||||
break;
|
||||
case 'A':
|
||||
pridialplan = (PRI_TON_ABBREVIATED << 4) | (pridialplan & 0xf);
|
||||
break;
|
||||
case 'R':
|
||||
pridialplan = (PRI_TON_RESERVED << 4) | (pridialplan & 0xf);
|
||||
break;
|
||||
case 'u':
|
||||
pridialplan = PRI_NPI_UNKNOWN | (pridialplan & 0xf0);
|
||||
break;
|
||||
case 'e':
|
||||
pridialplan = PRI_NPI_E163_E164 | (pridialplan & 0xf0);
|
||||
break;
|
||||
case 'x':
|
||||
pridialplan = PRI_NPI_X121 | (pridialplan & 0xf0);
|
||||
break;
|
||||
case 'f':
|
||||
pridialplan = PRI_NPI_F69 | (pridialplan & 0xf0);
|
||||
break;
|
||||
case 'n':
|
||||
pridialplan = PRI_NPI_NATIONAL | (pridialplan & 0xf0);
|
||||
break;
|
||||
case 'p':
|
||||
pridialplan = PRI_NPI_PRIVATE | (pridialplan & 0xf0);
|
||||
break;
|
||||
case 'r':
|
||||
pridialplan = PRI_NPI_RESERVED | (pridialplan & 0xf0);
|
||||
break;
|
||||
default:
|
||||
if (isalpha(*c))
|
||||
ast_log(LOG_WARNING, "Unrecognized pridialplan %s modifier: %c\n", *c > 'Z' ? "NPI" : "TON", *c);
|
||||
}
|
||||
c++;
|
||||
}
|
||||
pri_sr_set_called(sr, c + p->stripmsd + dp_strip, pridialplan, s ? 1 : 0);
|
||||
|
||||
ldp_strip = 0;
|
||||
@@ -2453,6 +2502,58 @@ static int zt_call(struct ast_channel *ast, char *rdest, int timeout)
|
||||
prilocaldialplan = PRI_LOCAL_ISDN;
|
||||
}
|
||||
}
|
||||
if (l != NULL) {
|
||||
while (*l > '9' && *l != '*' && *l != '#') {
|
||||
switch (*l) {
|
||||
case 'U':
|
||||
prilocaldialplan = (PRI_TON_UNKNOWN << 4) | (prilocaldialplan & 0xf);
|
||||
break;
|
||||
case 'I':
|
||||
prilocaldialplan = (PRI_TON_INTERNATIONAL << 4) | (prilocaldialplan & 0xf);
|
||||
break;
|
||||
case 'N':
|
||||
prilocaldialplan = (PRI_TON_NATIONAL << 4) | (prilocaldialplan & 0xf);
|
||||
break;
|
||||
case 'L':
|
||||
prilocaldialplan = (PRI_TON_NET_SPECIFIC << 4) | (prilocaldialplan & 0xf);
|
||||
break;
|
||||
case 'S':
|
||||
prilocaldialplan = (PRI_TON_SUBSCRIBER << 4) | (prilocaldialplan & 0xf);
|
||||
break;
|
||||
case 'A':
|
||||
prilocaldialplan = (PRI_TON_ABBREVIATED << 4) | (prilocaldialplan & 0xf);
|
||||
break;
|
||||
case 'R':
|
||||
prilocaldialplan = (PRI_TON_RESERVED << 4) | (prilocaldialplan & 0xf);
|
||||
break;
|
||||
case 'u':
|
||||
prilocaldialplan = PRI_NPI_UNKNOWN | (prilocaldialplan & 0xf0);
|
||||
break;
|
||||
case 'e':
|
||||
prilocaldialplan = PRI_NPI_E163_E164 | (prilocaldialplan & 0xf0);
|
||||
break;
|
||||
case 'x':
|
||||
prilocaldialplan = PRI_NPI_X121 | (prilocaldialplan & 0xf0);
|
||||
break;
|
||||
case 'f':
|
||||
prilocaldialplan = PRI_NPI_F69 | (prilocaldialplan & 0xf0);
|
||||
break;
|
||||
case 'n':
|
||||
prilocaldialplan = PRI_NPI_NATIONAL | (prilocaldialplan & 0xf0);
|
||||
break;
|
||||
case 'p':
|
||||
prilocaldialplan = PRI_NPI_PRIVATE | (prilocaldialplan & 0xf0);
|
||||
break;
|
||||
case 'r':
|
||||
prilocaldialplan = PRI_NPI_RESERVED | (prilocaldialplan & 0xf0);
|
||||
break;
|
||||
default:
|
||||
if (isalpha(*l))
|
||||
ast_log(LOG_WARNING, "Unrecognized prilocaldialplan %s modifier: %c\n", *c > 'Z' ? "NPI" : "TON", *c);
|
||||
}
|
||||
l++;
|
||||
}
|
||||
}
|
||||
pri_sr_set_caller(sr, l ? (l + ldp_strip) : NULL, n, prilocaldialplan,
|
||||
p->use_callingpres ? ast->cid.cid_pres : (l ? PRES_ALLOWED_USER_NUMBER_PASSED_SCREEN : PRES_NUMBER_NOT_AVAILABLE));
|
||||
if ((rr_str = pbx_builtin_getvar_helper(ast, "PRIREDIRECTREASON"))) {
|
||||
|
@@ -87,14 +87,41 @@
|
||||
; unknown: Unknown
|
||||
; private: Private ISDN
|
||||
; local: Local ISDN
|
||||
; national: National ISDN
|
||||
; national: National ISDN
|
||||
; international: International ISDN
|
||||
; dynamic: Dynamically selects the appropriate dialplan
|
||||
; dynamic: Dynamically selects the appropriate dialplan
|
||||
; redundant: Same as dynamic, except that the underlying number is not
|
||||
; changed (not common)
|
||||
;
|
||||
;pridialplan=national
|
||||
;prilocaldialplan=national
|
||||
;
|
||||
; pridialplan may be also set at dialtime, by prefixing the dialled number with
|
||||
; one of the following letters:
|
||||
; U - Unknown
|
||||
; P - Private
|
||||
; L - Local
|
||||
; N - National
|
||||
; I - International
|
||||
; D - Dynamic
|
||||
; R - Redundant
|
||||
;
|
||||
; Additionally, you may also set the following NPI bits (also by prefixing the
|
||||
; dialled string with one of the following letters):
|
||||
; u - Unknown
|
||||
; e - E.163/E.164
|
||||
; x - X.121
|
||||
; f - F.69
|
||||
; n - National
|
||||
; p - Private
|
||||
; r - Reserved
|
||||
;
|
||||
; You may also set the prilocaldialplan in the same way, but by prefixing the
|
||||
; Caller*ID Number, rather than the dialled number. Please note that telcos
|
||||
; which require this kind of additional manipulation of the TON/NPI are *rare*.
|
||||
; Most telco PRIs will work fine simply by setting pridialplan to unknown or
|
||||
; dynamic.
|
||||
;
|
||||
;
|
||||
; PRI caller ID prefixes based on the given TON/NPI (dialplan)
|
||||
; This is especially needed for EuroISDN E1-PRIs
|
||||
|
Reference in New Issue
Block a user