diff options
author | Richard Mudgett <rmudgett@digium.com> | 2014-01-20 22:23:00 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2014-01-20 22:23:00 +0000 |
commit | eddbe10f916ded237feaa2441e161349669700cc (patch) | |
tree | 605968ea53218ad9cb04a13c266819b03cc2eeca /channels/sig_pri.c | |
parent | 1f401eed45195a320676f86a8982cb30b13f49b0 (diff) |
chan_dahdi/PRI: Suppress CONNECTED_LINE updates when nothing in the udpate is valid.
* Also simplified some subddress handling code.
(closes issue ASTERISK-23008)
Reported by: Michael Cargile
........
Merged revisions 405926 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 405927 from http://svn.asterisk.org/svn/asterisk/branches/11
........
Merged revisions 405928 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@405947 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/sig_pri.c')
-rw-r--r-- | channels/sig_pri.c | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/channels/sig_pri.c b/channels/sig_pri.c index 369a0b952..33751dd16 100644 --- a/channels/sig_pri.c +++ b/channels/sig_pri.c @@ -729,12 +729,7 @@ static int ast_to_pri_char_set(enum AST_PARTY_CHAR_SET ast_char_set) */ static void sig_pri_set_subaddress(struct ast_party_subaddress *ast_subaddress, const struct pri_party_subaddress *pri_subaddress) { - char *cnum, *ptr; - int x, len; - - if (ast_subaddress->str) { - ast_free(ast_subaddress->str); - } + ast_free(ast_subaddress->str); if (pri_subaddress->length <= 0) { ast_party_subaddress_init(ast_subaddress); return; @@ -744,8 +739,14 @@ static void sig_pri_set_subaddress(struct ast_party_subaddress *ast_subaddress, /* NSAP */ ast_subaddress->str = ast_strdup((char *) pri_subaddress->data); } else { + char *cnum; + char *ptr; + int x; + int len; + /* User Specified */ - if (!(cnum = ast_malloc(2 * pri_subaddress->length + 1))) { + cnum = ast_malloc(2 * pri_subaddress->length + 1); + if (!cnum) { ast_party_subaddress_init(ast_subaddress); return; } @@ -4368,14 +4369,11 @@ static void sig_pri_handle_subcmds(struct sig_pri_span *pri, int chanpos, int ev pri->pvts[chanpos]->cid_subaddr[0] = '\0'; #if defined(HAVE_PRI_SUBADDR) - if (ast_connected.id.subaddress.valid) { - ast_party_subaddress_set(&ast_channel_caller(owner)->id.subaddress, - &ast_connected.id.subaddress); - if (ast_connected.id.subaddress.str) { - ast_copy_string(pri->pvts[chanpos]->cid_subaddr, - ast_connected.id.subaddress.str, - sizeof(pri->pvts[chanpos]->cid_subaddr)); - } + if (ast_connected.id.subaddress.str) { + ast_copy_string(pri->pvts[chanpos]->cid_subaddr, + ast_connected.id.subaddress.str, + sizeof(pri->pvts[chanpos]->cid_subaddr)); + caller_id_update = 1; } #endif /* defined(HAVE_PRI_SUBADDR) */ if (caller_id_update) { @@ -4389,12 +4387,13 @@ static void sig_pri_handle_subcmds(struct sig_pri_span *pri, int chanpos, int ev ast_caller.id = ast_connected.id; ast_caller.ani = ast_connected.id; ast_channel_set_caller_event(owner, &ast_caller, NULL); - } - /* Update the connected line information on the other channel */ - if (event_id != PRI_EVENT_RING) { - /* This connected_line update was not from a SETUP message. */ - ast_channel_queue_connected_line_update(owner, &ast_connected, NULL); + /* Update the connected line information on the other channel */ + if (event_id != PRI_EVENT_RING) { + /* This connected_line update was not from a SETUP message. */ + ast_channel_queue_connected_line_update(owner, &ast_connected, + NULL); + } } ast_party_connected_line_free(&ast_connected); |