[Asterisk-cvs] asterisk channel.c,1.168,1.169

markster at lists.digium.com markster at lists.digium.com
Mon Jan 17 06:34:35 CST 2005


Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv27355

Modified Files:
	channel.c 
Log Message:
Merge hold patch (bug #1840)


Index: channel.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channel.c,v
retrieving revision 1.168
retrieving revision 1.169
diff -u -d -r1.168 -r1.169
--- channel.c	15 Jan 2005 23:48:11 -0000	1.168
+++ channel.c	17 Jan 2005 12:37:55 -0000	1.169
@@ -1478,6 +1478,10 @@
 				/* ast_playtones_stop(chan); */
 			} else if (condition == AST_CONTROL_PROCEEDING) {
 				/* Do nothing, really */
+			} else if (condition == AST_CONTROL_HOLD) {
+				/* Do nothing.... */
+			} else if (condition == AST_CONTROL_UNHOLD) {
+				/* Do nothing.... */
 			} else {
 				/* not handled */
 				ast_log(LOG_WARNING, "Unable to handle indication %d for '%s'\n", condition, chan->name);
@@ -2812,11 +2816,15 @@
 		}
 
 		if ((f->frametype == AST_FRAME_CONTROL) && !(config->flags & AST_BRIDGE_IGNORE_SIGS)) {
-			*fo = f;
-			*rc = who;
-			res =  0;
-			ast_log(LOG_DEBUG, "Got a FRAME_CONTROL (%d) frame on channel %s\n", f->subclass, who->name);
-			break;
+			if ((f->subclass == AST_CONTROL_HOLD) || (f->subclass == AST_CONTROL_UNHOLD)) {
+				ast_indicate(who == c0 ? c1 : c0, f->subclass);
+			} else {
+				*fo = f;
+				*rc = who;
+				res =  0;
+				ast_log(LOG_DEBUG, "Got a FRAME_CONTROL (%d) frame on channel %s\n", f->subclass, who->name);
+				break;
+			}
 		}
 		if ((f->frametype == AST_FRAME_VOICE) ||
 			(f->frametype == AST_FRAME_TEXT) ||
@@ -2861,9 +2869,9 @@
 				else 
 					ast_write(c0, f);
 			}
-			ast_frfree(f);
-		} else
-			ast_frfree(f);
+		}
+		ast_frfree(f);
+
 		/* Swap who gets priority */
 		cs[2] = cs[0];
 		cs[0] = cs[1];




More information about the svn-commits mailing list