[asterisk-commits] russell: trunk r73513 - in /trunk: ./ res/res_features.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Jul 5 15:51:08 CDT 2007


Author: russell
Date: Thu Jul  5 15:51:08 2007
New Revision: 73513

URL: http://svn.digium.com/view/asterisk?view=rev&rev=73513
Log:
Merged revisions 73512 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r73512 | russell | 2007-07-05 15:50:08 -0500 (Thu, 05 Jul 2007) | 5 lines

Pass HOLD and UNHOLD frames to the other channel when they are returned from a
native bridge function.  This fixes a problem where when two zap channels are
natively bridged and one does a flash hook, the other channel did not receive
music on hold.  (Reported to me directly by Doug Bailey at Digium)

........

Modified:
    trunk/   (props changed)
    trunk/res/res_features.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Modified: trunk/res/res_features.c
URL: http://svn.digium.com/view/asterisk/trunk/res/res_features.c?view=diff&rev=73513&r1=73512&r2=73513
==============================================================================
--- trunk/res/res_features.c (original)
+++ trunk/res/res_features.c Thu Jul  5 15:51:08 2007
@@ -1749,17 +1749,24 @@
 		/* many things should be sent to the 'other' channel */
 		other = (who == chan) ? peer : chan;
 		if (f->frametype == AST_FRAME_CONTROL) {
-			if (f->subclass == AST_CONTROL_RINGING)
-				ast_indicate(other, AST_CONTROL_RINGING);
-			else if (f->subclass == -1)
-				ast_indicate(other, -1);
-			else if (f->subclass == AST_CONTROL_FLASH)
-				ast_indicate(other, AST_CONTROL_FLASH);
-			else if (f->subclass == AST_CONTROL_OPTION) {
+			switch (f->subclass) {
+			case AST_CONTROL_RINGING:
+			case AST_CONTROL_FLASH:
+			case -1:
+				ast_indicate(other, f->subclass);
+				break;
+			case AST_CONTROL_HOLD:
+			case AST_CONTROL_UNHOLD:
+				ast_indicate_data(other, f->subclass, f->data, f->datalen);
+				break;
+			case AST_CONTROL_OPTION:
 				aoh = f->data;
 				/* Forward option Requests */
-				if (aoh && aoh->flag == AST_OPTION_FLAG_REQUEST)
-					ast_channel_setoption(other, ntohs(aoh->option), aoh->data, f->datalen - sizeof(struct ast_option_header), 0);
+				if (aoh && aoh->flag == AST_OPTION_FLAG_REQUEST) {
+					ast_channel_setoption(other, ntohs(aoh->option), aoh->data, 
+						f->datalen - sizeof(struct ast_option_header), 0);
+				}
+				break;
 			}
 		} else if (f->frametype == AST_FRAME_DTMF_BEGIN) {
 			/* eat it */




More information about the asterisk-commits mailing list