]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
channel: Remove ignore of answer on non-outgoing channels. 25/725/1
authorJoshua Colp <jcolp@digium.com>
Thu, 25 Jun 2015 11:42:46 +0000 (08:42 -0300)
committerJoshua Colp <jcolp@digium.com>
Thu, 25 Jun 2015 18:16:24 +0000 (15:16 -0300)
Due to the way that channels can now be moved around inside of
Asterisk it is possible for the outgoing flag of a channel to get
cleared before it has been answered. This results in the bridge
not receiving notification that the outgoing leg has been answered.

This most easily exhibits itself with DTMF based blond transfers.
Since the answer of the outgoing leg is ignored the other party
continues to receive both a locally generated ringing and the
media stream of the outgoing leg upon its answer. This results
in no media being heard.

This change removes the ignore of the answer and allows it
to pass through.

ASTERISK-25171 #close

Change-Id: I82aedcec4f89f34a2e5472086dfc9a6c775bca8e

main/channel.c

index fa03f65e6fc2b0db92b88bdce2e73ce8373d6a4c..57523d71a454e9134465a890fe245a50f1680ddc 100644 (file)
@@ -3905,11 +3905,7 @@ static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio)
                switch (f->frametype) {
                case AST_FRAME_CONTROL:
                        if (f->subclass.integer == AST_CONTROL_ANSWER) {
-                               if (!ast_test_flag(ast_channel_flags(chan), AST_FLAG_OUTGOING)) {
-                                       ast_debug(1, "Ignoring answer on an inbound call!\n");
-                                       ast_frfree(f);
-                                       f = &ast_null_frame;
-                               } else if (prestate == AST_STATE_UP && ast_channel_is_bridged(chan)) {
+                               if (prestate == AST_STATE_UP && ast_channel_is_bridged(chan)) {
                                        ast_debug(1, "Dropping duplicate answer!\n");
                                        ast_frfree(f);
                                        f = &ast_null_frame;