[asterisk-commits] rmudgett: branch 1.8 r313369 - /branches/1.8/apps/app_dial.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Apr 11 18:08:05 CDT 2011


Author: rmudgett
Date: Mon Apr 11 18:08:02 2011
New Revision: 313369

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=313369
Log:
Frames from the inbound channel should go to all outbound channels in app_dial.c.

In app_dial.c:wait_for_answer() frames from the inbound channel should be
sent to all outbound channels instead of only if there is just one
outbound channel.

Control frames like AST_CONTROL_CONNECTED_LINE need to be passed to all of
the the outbound channels.  This can happen if a blond transfer is done by
a remote switch on the inbound channel.

JIRA AST-443
JIRA SWP-2730

Modified:
    branches/1.8/apps/app_dial.c

Modified: branches/1.8/apps/app_dial.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/apps/app_dial.c?view=diff&rev=313369&r1=313368&r2=313369
==============================================================================
--- branches/1.8/apps/app_dial.c (original)
+++ branches/1.8/apps/app_dial.c Mon Apr 11 18:08:02 2011
@@ -1418,19 +1418,26 @@
 				}
 			}
 
-			if (single) {
+			/* Send the frame from the in channel to all outgoing channels. */
+			for (o = outgoing; o; o = o->next) {
+				if (!o->chan || !ast_test_flag64(o, DIAL_STILLGOING)) {
+					/* This outgoing channel has died so don't send the frame to it. */
+					continue;
+				}
 				switch (f->frametype) {
 				case AST_FRAME_HTML:
 					/* Forward HTML stuff */
-					if (!ast_test_flag64(outgoing, DIAL_NOFORWARDHTML)
-						&& ast_channel_sendhtml(outgoing->chan, f->subclass.integer, f->data.ptr, f->datalen) == -1) {
+					if (!ast_test_flag64(o, DIAL_NOFORWARDHTML)
+						&& ast_channel_sendhtml(o->chan, f->subclass.integer, f->data.ptr, f->datalen) == -1) {
 						ast_log(LOG_WARNING, "Unable to send URL\n");
 					}
 					break;
 				case AST_FRAME_VOICE:
+				case AST_FRAME_IMAGE:
+				case AST_FRAME_TEXT:
 				case AST_FRAME_DTMF_BEGIN:
 				case AST_FRAME_DTMF_END:
-					if (ast_write(outgoing->chan, f)) {
+					if (ast_write(o->chan, f)) {
 						ast_log(LOG_WARNING, "Unable to forward frametype: %d\n",
 							f->frametype);
 					}
@@ -1441,17 +1448,18 @@
 					case AST_CONTROL_UNHOLD:
 					case AST_CONTROL_VIDUPDATE:
 					case AST_CONTROL_SRCUPDATE:
-						ast_verb(3, "%s requested special control %d, passing it to %s\n", in->name, f->subclass.integer, outgoing->chan->name);
-						ast_indicate_data(outgoing->chan, f->subclass.integer, f->data.ptr, f->datalen);
+						ast_verb(3, "%s requested special control %d, passing it to %s\n",
+							in->name, f->subclass.integer, o->chan->name);
+						ast_indicate_data(o->chan, f->subclass.integer, f->data.ptr, f->datalen);
 						break;
 					case AST_CONTROL_CONNECTED_LINE:
-						if (ast_channel_connected_line_macro(in, outgoing->chan, f, 0, 1)) {
-							ast_indicate_data(outgoing->chan, f->subclass.integer, f->data.ptr, f->datalen);
+						if (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_channel_redirecting_macro(in, outgoing->chan, f, 0, 1)) {
-							ast_indicate_data(outgoing->chan, f->subclass.integer, f->data.ptr, f->datalen);
+						if (ast_channel_redirecting_macro(in, o->chan, f, 0, 1)) {
+							ast_indicate_data(o->chan, f->subclass.integer, f->data.ptr, f->datalen);
 						}
 						break;
 					default:




More information about the asterisk-commits mailing list