mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	Merged revisions 234379 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r234379 | jpeeler | 2009-12-11 16:37:21 -0600 (Fri, 11 Dec 2009) | 11 lines Fix talking detection status after conference user is muted. This patch ensures that when a conference user is muted that the accompanying AMI Meetme talking off event is sent. Also, the meetme list output is updated to show the muted user as unmonitored. (closes issue #16247) Reported by: dimas Patches: v3-16247.patch uploaded by dimas (license 88) ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@234380 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -2051,6 +2051,35 @@ static int can_write(struct ast_channel *chan, struct ast_flags64 *confflags) | ||||
| 	return (chan->_state == AST_STATE_UP); | ||||
| } | ||||
|  | ||||
| static void send_talking_event(struct ast_channel *chan, struct ast_conference *conf, struct ast_conf_user *user, int talking) | ||||
| { | ||||
| 	ast_manager_event(chan, EVENT_FLAG_CALL, "MeetmeTalking", | ||||
| 	      "Channel: %s\r\n" | ||||
| 	      "Uniqueid: %s\r\n" | ||||
| 	      "Meetme: %s\r\n" | ||||
| 	      "Usernum: %d\r\n" | ||||
| 	      "Status: %s\r\n", | ||||
| 	      chan->name, chan->uniqueid, conf->confno, user->user_no, talking ? "on" : "off"); | ||||
| } | ||||
|  | ||||
| static void set_user_talking(struct ast_channel *chan, struct ast_conference *conf, struct ast_conf_user *user, int talking, int monitor) | ||||
| { | ||||
| 	int last_talking = user->talking; | ||||
| 	if (last_talking == talking) | ||||
| 		return; | ||||
|  | ||||
| 	user->talking = talking; | ||||
|  | ||||
| 	if (monitor) { | ||||
| 		/* Check if talking state changed. Take care of -1 which means unmonitored */ | ||||
| 		int was_talking = (last_talking > 0); | ||||
| 		int now_talking = (talking > 0); | ||||
| 		if (was_talking != now_talking) { | ||||
| 			send_talking_event(chan, conf, user, now_talking); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struct ast_flags64 *confflags, char *optargs[]) | ||||
| { | ||||
| 	struct ast_conf_user *user = NULL; | ||||
| @@ -2865,6 +2894,11 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc | ||||
| 					break; | ||||
| 				} | ||||
|  | ||||
| 				/* Indicate user is not talking anymore - change him to unmonitored state */ | ||||
| 				if (ast_test_flag64(confflags,  (CONFFLAG_MONITORTALKER | CONFFLAG_OPTIMIZETALKER))) { | ||||
| 					set_user_talking(chan, conf, user, -1, ast_test_flag64(confflags, CONFFLAG_MONITORTALKER)); | ||||
| 				} | ||||
|  | ||||
| 				ast_manager_event(chan, EVENT_FLAG_CALL, "MeetmeMute", | ||||
| 						"Channel: %s\r\n" | ||||
| 						"Uniqueid: %s\r\n" | ||||
| @@ -2975,28 +3009,11 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc | ||||
|  | ||||
| 						res = ast_dsp_silence(dsp, f, &totalsilence); | ||||
| 						if (!user->talking && totalsilence < MEETME_DELAYDETECTTALK) { | ||||
| 							user->talking = 1; | ||||
| 							if (ast_test_flag64(confflags, CONFFLAG_MONITORTALKER)) { | ||||
| 								ast_manager_event(chan, EVENT_FLAG_CALL, "MeetmeTalking", | ||||
| 								      "Channel: %s\r\n" | ||||
| 								      "Uniqueid: %s\r\n" | ||||
| 								      "Meetme: %s\r\n" | ||||
| 								      "Usernum: %d\r\n" | ||||
| 								      "Status: on\r\n", | ||||
| 								      chan->name, chan->uniqueid, conf->confno, user->user_no); | ||||
| 							} | ||||
| 							set_user_talking(chan, conf, user, 1, ast_test_flag64(confflags, CONFFLAG_MONITORTALKER)); | ||||
| 						} | ||||
|  | ||||
| 						if (user->talking && totalsilence > MEETME_DELAYDETECTENDTALK) { | ||||
| 							user->talking = 0; | ||||
| 							if (ast_test_flag64(confflags, CONFFLAG_MONITORTALKER)) { | ||||
| 								ast_manager_event(chan, EVENT_FLAG_CALL, "MeetmeTalking", | ||||
| 								      "Channel: %s\r\n" | ||||
| 								      "Uniqueid: %s\r\n" | ||||
| 								      "Meetme: %s\r\n" | ||||
| 								      "Usernum: %d\r\n" | ||||
| 								      "Status: off\r\n", | ||||
| 								      chan->name, chan->uniqueid, conf->confno, user->user_no); | ||||
| 							} | ||||
| 							set_user_talking(chan, conf, user, 0, ast_test_flag64(confflags, CONFFLAG_MONITORTALKER)); | ||||
| 						} | ||||
| 					} | ||||
| 					if (using_pseudo) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user