From 0e7b91a22b4bf382c40aef95f472151c66eb093f Mon Sep 17 00:00:00 2001 From: Alexei Gradinari Date: Wed, 26 Sep 2018 16:05:59 -0400 Subject: [PATCH] app_dial/queue/followme: 'I' options to block initial updates in both directions The 'I' option currently blocks initial CONNECTEDLINE or REDIRECTING updates from the called parties to the caller. This patch also blocks updates in the other direction before call is answered. ASTERISK-27980 Change-Id: I6ce9e151a2220ce9e95aa66666933cfb9e2a4a01 --- apps/app_dial.c | 8 ++++++++ apps/app_followme.c | 10 +++++----- apps/app_queue.c | 8 ++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/apps/app_dial.c b/apps/app_dial.c index 855945b244..65c44c5b5a 100644 --- a/apps/app_dial.c +++ b/apps/app_dial.c @@ -1754,12 +1754,20 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, ast_indicate(o->chan, f->subclass.integer); break; case AST_CONTROL_CONNECTED_LINE: + if (ast_test_flag64(o, OPT_IGNORE_CONNECTEDLINE)) { + ast_verb(3, "Connected line update to %s prevented.\n", ast_channel_name(o->chan)); + break; + } if (ast_channel_connected_line_sub(in, o->chan, f, 1) && ast_channel_connected_line_macro(in, o->chan, f, 0, 1)) { ast_indicate_data(o->chan, f->subclass.integer, f->data.ptr, f->datalen); } break; case AST_CONTROL_REDIRECTING: + if (ast_test_flag64(o, OPT_IGNORE_CONNECTEDLINE)) { + ast_verb(3, "Redirecting update to %s prevented.\n", ast_channel_name(o->chan)); + break; + } if (ast_channel_redirecting_sub(in, o->chan, f, 1) && ast_channel_redirecting_macro(in, o->chan, f, 0, 1)) { ast_indicate_data(o->chan, f->subclass.integer, f->data.ptr, f->datalen); diff --git a/apps/app_followme.c b/apps/app_followme.c index 43b95e7430..3e0c2c0819 100644 --- a/apps/app_followme.c +++ b/apps/app_followme.c @@ -890,6 +890,11 @@ static struct ast_channel *wait_for_winner(struct findme_user_listptr *findme_us /* Ignore going off hook and flash */ break; case AST_CONTROL_CONNECTED_LINE: + if (ast_test_flag(&tpargs->followmeflags, FOLLOWMEFLAG_IGNORE_CONNECTEDLINE)) { + ast_verb(3, "Connected line update from %s prevented.\n", + ast_channel_name(winner)); + break; + } if (!tmpuser) { /* * Hold connected line update from caller until we have a @@ -905,11 +910,6 @@ static struct ast_channel *wait_for_winner(struct findme_user_listptr *findme_us tpargs->pending_in_connected_update = 1; } ast_party_connected_line_free(&connected); - break; - } - if (ast_test_flag(&tpargs->followmeflags, FOLLOWMEFLAG_IGNORE_CONNECTEDLINE)) { - ast_verb(3, "Connected line update from %s prevented.\n", - ast_channel_name(winner)); } else { ast_verb(3, "%s connected line has changed. Saving it until answer.\n", diff --git a/apps/app_queue.c b/apps/app_queue.c index eb85c51b0e..7f9261ad88 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -5232,12 +5232,20 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte case AST_FRAME_CONTROL: switch (f->subclass.integer) { case AST_CONTROL_CONNECTED_LINE: + if (o->block_connected_update) { + ast_verb(3, "Connected line update to %s prevented.\n", ast_channel_name(o->chan)); + break; + } if (ast_channel_connected_line_sub(in, o->chan, f, 1) && ast_channel_connected_line_macro(in, o->chan, f, 0, 1)) { ast_indicate_data(o->chan, f->subclass.integer, f->data.ptr, f->datalen); } break; case AST_CONTROL_REDIRECTING: + if (o->block_connected_update) { + ast_verb(3, "Redirecting update to %s prevented.\n", ast_channel_name(o->chan)); + break; + } if (ast_channel_redirecting_sub(in, o->chan, f, 1) && ast_channel_redirecting_macro(in, o->chan, f, 0, 1)) { ast_indicate_data(o->chan, f->subclass.integer, f->data.ptr, f->datalen);