]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
app_dial/queue/followme: 'I' options to block initial updates in both directions
authorAlexei Gradinari <alex2grad@gmail.com>
Wed, 26 Sep 2018 20:05:59 +0000 (16:05 -0400)
committerAlexei Gradinari <alex2grad@gmail.com>
Wed, 24 Oct 2018 19:15:17 +0000 (14:15 -0500)
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
apps/app_followme.c
apps/app_queue.c

index e4689e1108a752a3809173d1370e302693c45b45..21d37ebacc9ba1c915ae30263f2be02a73056fd1 100644 (file)
@@ -1733,12 +1733,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);
index dbb11ee26edf56a0190007f028bac2b4c2035ad4..9aef039b1010e45228892286fd28ded3ea34a373 100644 (file)
@@ -915,6 +915,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
@@ -930,11 +935,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",
index 1ddf79f707cbec4969fd226e0e36d0763172428f..80c253f2247f1475ebcdccd58862df41ab1bbd56 100644 (file)
@@ -5429,12 +5429,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);