summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorAlec L Davis <sivad.a@paradise.net.nz>2011-04-07 10:30:26 +0000
committerAlec L Davis <sivad.a@paradise.net.nz>2011-04-07 10:30:26 +0000
commit1e33d71b792fd58b6bf9ad9a25b505be9bc983c3 (patch)
treea89cd421cf8438af7fd382facc37a99999a15609 /channels
parent1166d8dfa10d1e3233e13dd68fadd3186b773ab4 (diff)
Merged revisions 313001 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r313001 | alecdavis | 2011-04-07 22:19:31 +1200 (Thu, 07 Apr 2011) | 13 lines Fix ISDN calling subaddr User Specified Odd/Even Flag Calculation of the Odd/Even flag was wrong. Implement correct algo, and set odd/even=0 if data would be truncated. Only allow automatic calculation of the O/E flag, don't let dialplan influence. (closes issue #19062) Reported by: festr Patches: bug19062.diff2.txt uploaded by alecdavis (license 585) Tested by: festr, alecdavis, rmudgett ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@313005 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r--channels/sig_pri.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/channels/sig_pri.c b/channels/sig_pri.c
index 197caec97..e76db86ac 100644
--- a/channels/sig_pri.c
+++ b/channels/sig_pri.c
@@ -758,8 +758,14 @@ static void sig_pri_party_subaddress_from_ast(struct pri_party_subaddress *pri_s
int length = ast_pri_pack_hex_string(pri_subaddress->data,
ast_subaddress->str, sizeof(pri_subaddress->data));
- pri_subaddress->length = length;
- pri_subaddress->odd_even_indicator = (length & 1);
+ pri_subaddress->length = length; /* packed data length */
+
+ length = strlen(ast_subaddress->str);
+ if (length > 2 * sizeof(pri_subaddress->data)) {
+ pri_subaddress->odd_even_indicator = 0;
+ } else {
+ pri_subaddress->odd_even_indicator = (length & 1);
+ }
pri_subaddress->valid = 1;
}
}
@@ -7278,12 +7284,10 @@ int sig_pri_call(struct sig_pri_chan *p, struct ast_channel *ast, char *rdest, i
s++;
/* prefix */
/* 'n' = NSAP */
- /* 'U' = odd, 'u'= even */
+ /* 'u' = User Specified */
/* Default = NSAP */
switch (*s) {
case 'U':
- dialed_subaddress.odd_even_indicator = 1;
- /* fall through */
case 'u':
s++;
dialed_subaddress.type = 2;