[asterisk-commits] file: branch file/bridging r107286 - in /team/file/bridging: apps/ include/as...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Mar 10 18:18:04 CDT 2008


Author: file
Date: Mon Mar 10 18:18:03 2008
New Revision: 107286

URL: http://svn.digium.com/view/asterisk?view=rev&rev=107286
Log:
Move muting to the features structure.

Modified:
    team/file/bridging/apps/app_confbridge.c
    team/file/bridging/include/asterisk/bridging.h
    team/file/bridging/main/bridging.c

Modified: team/file/bridging/apps/app_confbridge.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/apps/app_confbridge.c?view=diff&rev=107286&r1=107285&r2=107286
==============================================================================
--- team/file/bridging/apps/app_confbridge.c (original)
+++ team/file/bridging/apps/app_confbridge.c Mon Mar 10 18:18:03 2008
@@ -86,7 +86,7 @@
 	struct conference_bridge *conference_bridge; /*!< Conference bridge they are participating in */
 	struct ast_channel *chan;                    /*!< Asterisk channel participating */
 	struct ast_flags flags;                      /*!< Flags passed in when the application was called */
-	unsigned int muted:1;                        /*!< Is this user muted or not */
+	struct ast_bridge_features features;         /*!< Bridge features structure */
 	unsigned int kicked:1;                       /*!< User has been kicked from the conference */
 	AST_LIST_ENTRY(conference_bridge_user) list; /*!< Linked list information */
 };
@@ -253,8 +253,8 @@
 
 	if (digit == '1') {
 		/* 1 - Mute or unmute yourself */
-		conference_bridge_user->muted = bridge_channel->muted = (!bridge_channel->muted ? 1 : 0);
-		if (!(res = ast_streamfile(bridge_channel->chan, (bridge_channel->muted ? "conf-muted" : "conf-unmuted"), bridge_channel->chan->language))) {
+		conference_bridge_user->features.mute = (!conference_bridge_user->features.mute ? 1 : 0);
+		if (!(res = ast_streamfile(bridge_channel->chan, (conference_bridge_user->features.mute ? "conf-muted" : "conf-unmuted"), bridge_channel->chan->language))) {
 			ast_waitstream(bridge_channel->chan, "");
 		}
 	} else if (isadmin && digit == '2') {
@@ -304,7 +304,6 @@
 	int res = 0;
 	char *parse;
 	struct conference_bridge *conference_bridge = NULL;
-	struct ast_bridge_features features;
 	struct conference_bridge_user conference_bridge_user = {
 		.chan = chan,
 	};
@@ -333,21 +332,21 @@
 	}
 
 	/* Always initialize the features structure, we are in most cases always going to need it. */
-	ast_bridge_features_init(&features);
+	ast_bridge_features_init(&conference_bridge_user.features);
 
 	/* If the menu option is enabled provide a user or admin menu as a custom feature hook */
 	if (ast_test_flag(&conference_bridge_user.flags, OPTION_MENU)) {
-		ast_bridge_features_hook(&features, "#", menu_callback, &conference_bridge_user);
+		ast_bridge_features_hook(&conference_bridge_user.features, "#", menu_callback, &conference_bridge_user);
 	}
 
 	/* Join our conference bridge for real */
-	ast_bridge_join(conference_bridge->bridge, chan, NULL, &features);
+	ast_bridge_join(conference_bridge->bridge, chan, NULL, &conference_bridge_user.features);
 
 	/* Easy as pie, depart this channel from the conference bridge */
 	leave_conference_bridge(conference_bridge, &conference_bridge_user);
 
 	/* Can't forget to clean up the features structure, or else we risk a memory leak */
-	ast_bridge_features_cleanup(&features);
+	ast_bridge_features_cleanup(&conference_bridge_user.features);
 
 	/* If the user was kicked from the conference play back the audio prompt for it */
 	if (conference_bridge_user.kicked) {

Modified: team/file/bridging/include/asterisk/bridging.h
URL: http://svn.digium.com/view/asterisk/team/file/bridging/include/asterisk/bridging.h?view=diff&rev=107286&r1=107285&r2=107286
==============================================================================
--- team/file/bridging/include/asterisk/bridging.h (original)
+++ team/file/bridging/include/asterisk/bridging.h Mon Mar 10 18:18:03 2008
@@ -113,7 +113,8 @@
 struct ast_bridge_features {
 	AST_LIST_HEAD_NOLOCK(, ast_bridge_features_hook) hooks;                   /*! Attached hooks */
 	struct ast_flags feature_flags;                                           /*! Feature flags */
-	unsigned int usable:1;                                                             /*! Whether this should be considered usable or not */
+	unsigned int usable:1;                                                    /*! Whether this should be considered usable or not */
+	unsigned int mute:1;                                                      /*! Whether to mute audio or not */
 };
 
 struct ast_bridge_channel {
@@ -125,7 +126,6 @@
 	pthread_t thread;                        /*! Thread handling the bridged channel */
 	int fds[4];                              /*! Additional file descriptors to look at */
 	unsigned int suspended:1;                /*! Is this bridged channel suspended from the bridge or not? */
-	unsigned int muted:1;                    /*! Is this bridged channel muted or not? */
 	struct ast_bridge_features *features;    /*! Enabled features information */
 	char dtmf_stream_q[8];                   /*! DTMF stream queue */
 	AST_LIST_ENTRY(ast_bridge_channel) list; /*! Linked list information */

Modified: team/file/bridging/main/bridging.c
URL: http://svn.digium.com/view/asterisk/team/file/bridging/main/bridging.c?view=diff&rev=107286&r1=107285&r2=107286
==============================================================================
--- team/file/bridging/main/bridging.c (original)
+++ team/file/bridging/main/bridging.c Mon Mar 10 18:18:03 2008
@@ -180,7 +180,7 @@
 
 	/* If a bridge channel with actual channel is present read a frame and handle it */
 	if (chan && bridge_channel) {
-		struct ast_frame *frame = (bridge_channel->muted ? ast_read_noaudio(chan) : ast_read(chan));
+		struct ast_frame *frame = (((bridge->features.mute) || (bridge_channel->features && bridge_channel->features->mute)) ? ast_read_noaudio(chan) : ast_read(chan));
 
 		/* This is pretty simple... see if they hung up */
 		if (!frame || (frame->frametype == AST_FRAME_CONTROL && frame->subclass == AST_CONTROL_HANGUP)) {




More information about the asterisk-commits mailing list