From 4d8feab7fa95a62d83fdc9fc84a91da0571d5b1a Mon Sep 17 00:00:00 2001
From: Richard Mudgett <rmudgett@digium.com>
Date: Fri, 4 Feb 2011 18:57:39 +0000
Subject: [PATCH] Merged revisions 306324 via svnmerge from
 https://origsvn.digium.com/svn/asterisk/branches/1.8

........
  r306324 | rmudgett | 2011-02-04 12:53:06 -0600 (Fri, 04 Feb 2011) | 9 lines

  Don't send redirecting updates to the caller if the dialplan forked the call.

  Each fork in the dial could be redirected and confuse the caller.  For
  ISDN the DivLeg1 and DivLeg3 messages would get confused because ISDN
  redirects calls in sequence not in parallel.

  * Also fixed a formatting inconsistency in app_dial.c and make a warning
  message more useful about what frame type could not be written.
........


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@306325 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 apps/app_dial.c  | 32 +++++++++++++++++---------------
 apps/app_queue.c |  2 +-
 2 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/apps/app_dial.c b/apps/app_dial.c
index 581a881701..408a8739f7 100644
--- a/apps/app_dial.c
+++ b/apps/app_dial.c
@@ -1276,7 +1276,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
 				case AST_CONTROL_REDIRECTING:
 					if (ast_test_flag64(peerflags, OPT_IGNORE_CONNECTEDLINE)) {
 						ast_verb(3, "Redirecting update to %s prevented.\n", in->name);
-					} else {
+					} else if (single) {
 						ast_verb(3, "%s redirecting info has changed, passing it to %s\n", c->name, in->name);
 						if (ast_channel_redirecting_macro(c, in, f, 1, 1)) {
 							ast_indicate_data(in, AST_CONTROL_REDIRECTING, f->data.ptr, f->datalen);
@@ -1321,20 +1321,22 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
 				}
 			} else if (single) {
 				switch (f->frametype) {
-					case AST_FRAME_VOICE:
-					case AST_FRAME_IMAGE:
-					case AST_FRAME_TEXT:
-						if (ast_write(in, f)) {
-							ast_log(LOG_WARNING, "Unable to write frame\n");
-						}
-						break;
-					case AST_FRAME_HTML:
-						if (!ast_test_flag64(outgoing, DIAL_NOFORWARDHTML) && ast_channel_sendhtml(in, f->subclass.integer, f->data.ptr, f->datalen) == -1) {
-							ast_log(LOG_WARNING, "Unable to send URL\n");
-						}
-						break;
-					default:
-						break;
+				case AST_FRAME_VOICE:
+				case AST_FRAME_IMAGE:
+				case AST_FRAME_TEXT:
+					if (ast_write(in, f)) {
+						ast_log(LOG_WARNING, "Unable to write frametype: %d\n",
+							f->frametype);
+					}
+					break;
+				case AST_FRAME_HTML:
+					if (!ast_test_flag64(outgoing, DIAL_NOFORWARDHTML)
+						&& ast_channel_sendhtml(in, f->subclass.integer, f->data.ptr, f->datalen) == -1) {
+						ast_log(LOG_WARNING, "Unable to send URL\n");
+					}
+					break;
+				default:
+					break;
 				}
 			}
 			ast_frfree(f);
diff --git a/apps/app_queue.c b/apps/app_queue.c
index 2c0833360c..553d57aa7d 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -3754,7 +3754,7 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte
 						case AST_CONTROL_REDIRECTING:
 							if (!update_connectedline) {
 								ast_verb(3, "Redirecting update to %s prevented\n", inchan_name);
-							} else {
+							} else if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
 								ast_verb(3, "%s redirecting info has changed, passing it to %s\n", ochan_name, inchan_name);
 								if (ast_channel_redirecting_macro(o->chan, in, f, 1, 1)) {
 									ast_indicate_data(in, AST_CONTROL_REDIRECTING, f->data.ptr, f->datalen);
-- 
GitLab