From: Alec L Davis Date: Thu, 7 Apr 2011 10:30:26 +0000 (+0000) Subject: Merged revisions 313001 via svnmerge from X-Git-Tag: 11.0.0-beta1~1737 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1e33d71b792fd58b6bf9ad9a25b505be9bc983c3;p=thirdparty%2Fasterisk.git 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 --- diff --git a/channels/sig_pri.c b/channels/sig_pri.c index 197caec973..e76db86ace 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;