From a0486afb833b715fad3b31833bd7d2348f5fe6e1 Mon Sep 17 00:00:00 2001
From: Mark Spencer <markster@digium.com>
Date: Sat, 22 May 2004 04:11:22 +0000
Subject: [PATCH] Merge fabeman's extensive meetme improvements (bug #1624)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3038 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 apps/app_meetme.c           | 567 +++++++++++++++++++++++++++++++++---
 channel.c                   |  13 +
 include/asterisk/channel.h  |   3 +
 manager.c                   |  15 +-
 sounds.txt                  |  18 ++
 sounds/conf-adminmenu.gsm   | Bin 0 -> 11187 bytes
 sounds/conf-errormenu.gsm   | Bin 0 -> 2376 bytes
 sounds/conf-kicked.gsm      | Bin 0 -> 3861 bytes
 sounds/conf-locked.gsm      | Bin 0 -> 2805 bytes
 sounds/conf-lockednow.gsm   | Bin 0 -> 3597 bytes
 sounds/conf-muted.gsm       | Bin 0 -> 2178 bytes
 sounds/conf-unlockednow.gsm | Bin 0 -> 4290 bytes
 sounds/conf-unmuted.gsm     | Bin 0 -> 2607 bytes
 sounds/conf-usermenu.gsm    | Bin 0 -> 5016 bytes
 14 files changed, 573 insertions(+), 43 deletions(-)
 create mode 100755 sounds/conf-adminmenu.gsm
 create mode 100755 sounds/conf-errormenu.gsm
 create mode 100755 sounds/conf-kicked.gsm
 create mode 100755 sounds/conf-locked.gsm
 create mode 100755 sounds/conf-lockednow.gsm
 create mode 100755 sounds/conf-muted.gsm
 create mode 100755 sounds/conf-unlockednow.gsm
 create mode 100755 sounds/conf-unmuted.gsm
 create mode 100755 sounds/conf-usermenu.gsm

diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index 2b77c0f686..7dacfc57eb 100755
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -38,9 +38,11 @@ static char *tdesc = "Simple MeetMe conference bridge";
 
 static char *app = "MeetMe";
 static char *app2 = "MeetMeCount";
+static char *app3 = "MeetMeAdmin";
 
 static char *synopsis = "Simple MeetMe conference bridge";
 static char *synopsis2 = "MeetMe participant count";
+static char *synopsis3 = "Send Admin Commands to a conference";
 
 static char *descrip =
 "  MeetMe(confno[,[options][,pin]]): Enters the user into a specified MeetMe conference.\n"
@@ -59,11 +61,11 @@ static char *descrip =
 "      'v' -- video mode\n"
 "      'q' -- quiet mode (don't play enter/leave sounds)\n"
 "      'M' -- enable music on hold when the conference has a single caller\n"
+"      'x' -- exit the conference if the last marked user left\n"
 "      'b' -- run AGI script specified in ${MEETME_AGI_BACKGROUND}\n"
 "	      Default: conf-background.agi\n"
 "             (Note: This does not work with non-Zap channels in the same conference)\n"
-"      Not implemented yet:\n"
-"      's' -- send user to admin/user menu if '*' is received\n"
+"      'u' -- send user to admin/user menu if '*' is received\n"
 "      'a' -- set admin mode\n";
 
 static char *descrip2 =
@@ -72,6 +74,8 @@ static char *descrip2 =
 "will be returned in the variable. Returns 0 on success or -1 on a hangup.\n"
 "A ZAPTEL INTERFACE MUST BE INSTALLED FOR CONFERENCING FUNCTIONALITY.\n";
 
+static char *descrip3 = "";
+
 STANDARD_LOCAL_USER;
 
 LOCAL_USER_DECL;
@@ -81,14 +85,35 @@ static struct ast_conference {
 	int fd;				/* Announcements fd */
 	int zapconf;			/* Zaptel Conf # */
 	int users;			/* Number of active users */
+        int markedusers;		  /* Number of marked users */
+        struct ast_conf_user *firstuser;  /* Pointer to the first user struct */
+        struct ast_conf_user *lastuser;   /* Pointer to the last user struct */
 	time_t start;			/* Start time (s) */
 	int isdynamic;			/* Created on the fly? */
+        int locked;			  /* Is the conference locked? */
 	char pin[AST_MAX_EXTENSION];			/* If protected by a PIN */
 	struct ast_conference *next;
 } *confs;
 
+struct ast_conf_user {
+	int user_no;                     /* User Number */
+	struct ast_conf_user *prevuser;  /* Pointer to the previous user */
+	struct ast_conf_user *nextuser;  /* Pointer to the next user */
+	int userflags;			 /* Flags as set in the conference */
+	int adminflags;			 /* Flags set by the Admin */
+	struct ast_channel *chan; 	 /* Connected channel */
+	char usrvalue[50];		 /* Custom User Value */
+	time_t jointime;		 /* Time the user joined the conference */
+};
+
+#define ADMINFLAG_MUTED (1 << 1)	/* User is muted */
+#define ADMINFLAG_KICKME (1 << 2)	/* User is kicked */
+
+
 static ast_mutex_t conflock = AST_MUTEX_INITIALIZER;
 
+static int admin_exec(struct ast_channel *chan, void *data);
+
 #include "enter.h"
 #include "leave.h"
 
@@ -106,6 +131,7 @@ static ast_mutex_t conflock = AST_MUTEX_INITIALIZER;
 #define CONFFLAG_VIDEO (1 << 7)		/* Set to enable video mode */
 #define CONFFLAG_AGI (1 << 8)		/* Set to run AGI Script in Background */
 #define CONFFLAG_MOH (1 << 9)		/* Set to have music on hold when */
+#define CONFFLAG_ADMINEXIT (1 << 10)    /* If set the MeetMe will return if all marked with this flag left */
 
 
 static int careful_write(int fd, unsigned char *data, int len)
@@ -186,9 +212,13 @@ static struct ast_conference *build_conf(char *confno, char *pin, int make, int
 				cnf = NULL;
 				goto cnfout;
 			}
+                        /* Fill the conference struct */
 			cnf->start = time(NULL);
 			cnf->zapconf = ztc.confno;
 			cnf->isdynamic = dynamic;
+                        cnf->firstuser = NULL;
+                        cnf->lastuser = NULL;
+                        cnf->locked = 0;
 			if (option_verbose > 2)
 				ast_verbose(VERBOSE_PREFIX_3 "Created ZapTel conference %d for conference '%s'\n", cnf->zapconf, cnf->confno);
 			cnf->next = confs;
@@ -203,48 +233,209 @@ cnfout:
 
 static int confs_show(int fd, int argc, char **argv)
 {
-	struct ast_conference *conf;
+	ast_cli(fd, "Deprecated! Please use 'meetme' instead.\n");
+        return RESULT_SUCCESS;
+}
+
+static char show_confs_usage[] =
+"Deprecated! Please use 'meetme' instead.\n";
+
+static struct ast_cli_entry cli_show_confs = {
+        { "show", "conferences", NULL }, confs_show,
+        "Show status of conferences", show_confs_usage, NULL };
+        
+static int conf_cmd(int fd, int argc, char **argv) {
+	/* Process the command */
+	struct ast_conference *cnf;
+	struct ast_conf_user *user;
 	int hr, min, sec;
+	int i = 0;
 	time_t now;
 	char *header_format = "%-14s %-14s %-8s  %-8s\n";
 	char *data_format = "%-12.12s   %4.4d           %02d:%02d:%02d  %-8s\n";
-
+	char cmdline[1024] = "";
+	if (argc > 8)
+		ast_cli(fd, "Invalid Arguments.\n");
+	/* Check for length so no buffer will overflow... */
+	for (i = 0; i < argc; i++) {
+		if (strlen(argv[i]) > 100)
+			ast_cli(fd, "Invalid Arguments.\n");
+	}
+	if (argc == 1) {
+		/* List all the conferences */	
 	now = time(NULL);
-	if (argc != 2)
-		return RESULT_SHOWUSAGE;
-	conf = confs;
-	if (!conf) {
+	        cnf = confs;
+	        if (!cnf) {
 		ast_cli(fd, "No active conferences.\n");
 		return RESULT_SUCCESS;
 	}
 	ast_cli(fd, header_format, "Conf Num", "Parties", "Activity", "Creation");
-	while(conf) {
-		hr = (now - conf->start) / 3600;
-		min = ((now - conf->start) % 3600) / 60;
-		sec = (now - conf->start) % 60;
+	        while(cnf) {
+	                hr = (now - cnf->start) / 3600;
+	                min = ((now - cnf->start) % 3600) / 60;
+	                sec = (now - cnf->start) % 60;
 
-		if (conf->isdynamic)
-			ast_cli(fd, data_format, conf->confno, conf->users, hr, min, sec, "Dynamic");
+	                if (cnf->isdynamic)
+	                        ast_cli(fd, data_format, cnf->confno, cnf->users, hr, min, sec, "Dynamic");
 		else
-			ast_cli(fd, data_format, conf->confno, conf->users, hr, min, sec, "Static");
+	                        ast_cli(fd, data_format, cnf->confno, cnf->users, hr, min, sec, "Static");
 
-		conf = conf->next;
+	                cnf = cnf->next;
 	}
 	return RESULT_SUCCESS;
+	}
+	if (argc < 3)
+		return RESULT_SHOWUSAGE;
+	strncpy(cmdline, argv[2], 100);
+	if (strstr(argv[1], "lock")) {
+		if (strcmp(argv[1], "lock") == 0) {
+			/* Lock */
+			strcat(cmdline, "|L");
+		} else {
+			/* Unlock */
+			strcat(cmdline, "|l");
+		}
+	} else if (strstr(argv[1], "mute")) {
+		if (argc < 4)
+			return RESULT_SHOWUSAGE;
+		if (strcmp(argv[1], "mute") == 0) {
+			/* Mute */
+			strcat(cmdline, "|M|");	
+			strcat(cmdline, argv[3]);
+		} else {
+			/* Unmute */
+			strcat(cmdline, "|m|");
+			strcat(cmdline, argv[3]);
+		}
+	} else if (strcmp(argv[1], "kick") == 0) {
+		if (argc < 4)
+			return RESULT_SHOWUSAGE;
+		if (strcmp(argv[3], "all") == 0) {
+			/* Kick all */
+			strcat(cmdline, "|K");
+		} else {
+			/* Kick a single user */
+			strcat(cmdline, "|k|");
+			strcat(cmdline, argv[3]);
+		}	
+	} else if(strcmp(argv[1], "list") == 0) {
+		/* List all the users in a conference */
+		if (!confs) {
+			ast_cli(fd, "No active conferences.\n");
+			return RESULT_SUCCESS;	
+		}
+		cnf = confs;
+		/* Find the right conference */
+		while(cnf) {
+			if (strcmp(cnf->confno, argv[2]) == 0)
+				break;
+			if (cnf->next) {
+				cnf = cnf->next;	
+			} else {
+				ast_cli(fd, "No such conference: %s.\n",argv[2]);
+				return RESULT_SUCCESS;
+			}
+		}
+		/* Show all the users */
+		user = cnf->firstuser;
+		while(user) {
+			ast_cli(fd, "User Number: %i  on Channel: %s\n", user->user_no, user->chan->name);
+			user = user->nextuser;
+		}
+		return RESULT_SUCCESS;
+	} else 
+		return RESULT_SHOWUSAGE;
+	ast_log(LOG_NOTICE, "Cmdline: %s\n", cmdline);
+	admin_exec(NULL, cmdline);
+	return 0;
 }
 
-static char show_confs_usage[] = 
-"Usage: show conferences\n"
-"       Provides summary information on conferences with active\n"
-"       participation.\n";
+static char *complete_confcmd(char *line, char *word, int pos, int state) {
+	#define CONF_COMMANDS 6
+	int which = 0, x = 0;
+	struct ast_conference *cnf = NULL;
+	struct ast_conf_user *usr = NULL;
+	char *confno = NULL;
+	char usrno[50] = "";
+	char cmds[CONF_COMMANDS][20] = {"lock", "unlock", "mute", "unmute", "kick", "list"};
+	char *myline;
+	
+	if (pos == 1) {
+		/* Command */
+		for (x = 0;x < CONF_COMMANDS; x++) {
+			if (!strncasecmp(cmds[x], word, strlen(word))) {
+				if (++which > state) {
+					return strdup(cmds[x]);
+				}
+			}
+		}
+	} else if (pos == 2) {
+		/* Conference Number */
+		ast_mutex_lock(&conflock);
+		cnf = confs;
+		while(cnf) {
+			if (!strncasecmp(word, cnf->confno, strlen(word))) {
+				if (++which > state)
+					break;
+			}
+			cnf = cnf->next;
+		}
+		ast_mutex_unlock(&conflock);
+		return cnf ? strdup(cnf->confno) : NULL;
+	} else if (pos == 3) {
+		/* User Number || Conf Command option*/
+		if (strstr(line, "mute") || strstr(line, "kick")) {
+			if ((state == 0) && (strstr(line, "kick")) && !(strncasecmp(word, "all", strlen(word)))) {
+				return strdup("all");
+			}
+			which++;
+			ast_mutex_lock(&conflock);
+			cnf = confs;
 
-static struct ast_cli_entry cli_show_confs = {
-	{ "show", "conferences", NULL }, confs_show, 
-	"Show status of conferences", show_confs_usage, NULL };
+			/* TODO: Find the conf number from the cmdline (ignore spaces) <- test this and make it fail-safe! */
+			myline = strdupa(line);
+			if (strsep(&myline, " ") && strsep(&myline, " ") && !confno) {
+				while((confno = strsep(&myline, " ")) && (strcmp(confno, " ") == 0))
+					;
+			}
+			
+			while(cnf) {
+				if (strcmp(confno, cnf->confno) == 0) {
+					break;
+				}
+				cnf = cnf->next;
+			}
+			if (cnf) {
+				/* Search for the user */
+				usr = cnf->firstuser;
+				while(usr) {
+					sprintf(usrno, "%i", usr->user_no);
+					if (!strncasecmp(word, usrno, strlen(word))) {
+						if (++which > state)
+							break;
+					}
+					usr = usr->nextuser;
+				}
+			}
+			ast_mutex_unlock(&conflock);
+			return usr ? strdup(usrno) : NULL;
+		}
+	}
+	return NULL;
+}
+        
+static char conf_usage[] =
+"Usage: meetme  (un)lock|(un)mute|kick|list confno usernumber\n"
+"       Executes a command for the conference or on a conferee\n";
+
+static struct ast_cli_entry cli_conf = {
+        { "meetme", NULL, NULL }, conf_cmd,
+        "Execute a command on a conference or conferee", conf_usage, complete_confcmd };
 
 static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int confflags)
 {
 	struct ast_conference *prev=NULL, *cur;
+        struct ast_conf_user *user = malloc(sizeof(struct ast_conf_user));
 	int fd;
 	struct zt_confinfo ztc;
 	struct ast_frame *f;
@@ -261,16 +452,62 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
 	int firstpass = 0;
 	int ret = -1;
 	int x;
+        int menu_active = 0;
 
 	struct ast_app *app;
 	char *agifile;
 	char *agifiledefault = "conf-background.agi";
+        char meetmesecs[30];
 
 	ZT_BUFFERINFO bi;
 	char __buf[CONF_SIZE + AST_FRIENDLY_OFFSET];
 	char *buf = __buf + AST_FRIENDLY_OFFSET;
 	
+        user->user_no = 0; /* User number 0 means starting up user! (dead - not in the list!) */
+	
+	if (conf->locked) {
+		/* Sorry, but this confernce is locked! */	
+		if (!ast_streamfile(chan, "conf-locked", chan->language))
+			ast_waitstream(chan, "");
+		goto outrun;
+	}
+	
 	conf->users++;
+        if (confflags & CONFFLAG_ADMINEXIT) {
+        	if (conf->markedusers == -1) {
+        		conf->markedusers = 1;
+        	} else {
+        		conf->markedusers++;
+        	}
+        }
+      
+      	ast_mutex_lock(&conflock);
+        if (conf->firstuser == NULL) {
+		/* Fill the first new User struct */
+                user->user_no = 1;
+                user->nextuser = NULL;
+                user->prevuser = NULL;
+        	conf->firstuser = user;
+        	conf->lastuser = user;
+        } else {
+        	/* Fill the new user struct */	
+        	user->user_no = conf->lastuser->user_no + 1; 
+                user->prevuser = conf->lastuser;
+                user->nextuser = NULL;
+                if (conf->lastuser->nextuser != NULL) {
+                	ast_log(LOG_WARNING, "Error in User Management!\n");
+                      	goto outrun;
+                } else {
+                	conf->lastuser->nextuser = user;
+                	conf->lastuser = user;
+                }
+        }
+        strncpy(user->usrvalue, "test", sizeof(user->usrvalue));
+	user->chan = chan;
+	user->userflags = confflags;
+	user->adminflags = 0;
+	ast_mutex_unlock(&conflock);
+        
 	if (!(confflags & CONFFLAG_QUIET) && conf->users == 1) {
 		if (!ast_streamfile(chan, "conf-onlyperson", chan->language))
 			ast_waitstream(chan, "");
@@ -388,7 +625,6 @@ zapretry:
 			"Meetme: %s\r\n",
 			chan->name, chan->uniqueid, conf->confno);
 
-
 	if (!firstpass && !(confflags & CONFFLAG_MONITOR) && !(confflags & CONFFLAG_ADMIN)) {
 		firstpass = 1;
 		if (!(confflags & CONFFLAG_QUIET))
@@ -422,10 +658,20 @@ zapretry:
 			x = 0;
                         ast_channel_setoption(chan,AST_OPTION_TONE_VERIFY,&x,sizeof(char),0);
                 }
-	} else for(;;) {
+        } else {
+        	if (!strcasecmp(chan->type,"Zap") && (confflags & CONFFLAG_STARMENU)) {
+                        /*  Set CONFMUTE mode on Zap channel to mute DTMF tones when the menu is enabled */
+                        x = 1;
+                        ast_channel_setoption(chan,AST_OPTION_TONE_VERIFY,&x,sizeof(char),0);
+                }	
+	        for(;;) {
 		outfd = -1;
 		ms = -1;
 		c = ast_waitfor_nandfds(&chan, 1, &fd, nfds, NULL, &outfd, &ms);
+	                
+	                /* Update the struct with the actual confflags */
+	                user->userflags = confflags;
+	                
 		/* trying to add moh for single person conf */
 		if (confflags & CONFFLAG_MOH) {
 			if (conf->users == 1) {
@@ -440,7 +686,47 @@ zapretry:
 				}
 			}
 		}
-		/* end modifications */
+	                
+	                /* Leave if the last marked user left */
+	                if ((confflags & CONFFLAG_ADMINEXIT) && (conf->markedusers == 0)) {
+	                	ret = 0;
+	                	break;
+	                }
+	
+			/* Check if the admin changed my modes */
+			if (user->adminflags) {			
+				/* Set the new modes */
+				if ((user->adminflags & ADMINFLAG_MUTED) && (ztc.confmode & ZT_CONF_TALKER)) {
+					ztc.confmode ^= ZT_CONF_TALKER;
+					if (ioctl(fd, ZT_SETCONF, &ztc)) {
+	                			ast_log(LOG_WARNING, "Error setting conference - Un/Mute \n");
+	                			ret = -1;
+	                			break;
+	        			}
+				}
+				if (!(user->adminflags & ADMINFLAG_MUTED) && !(confflags & CONFFLAG_MONITOR) && !(ztc.confmode & ZT_CONF_TALKER)) {
+					ztc.confmode |= ZT_CONF_TALKER;
+					if (ioctl(fd, ZT_SETCONF, &ztc)) {
+	                			ast_log(LOG_WARNING, "Error setting conference - Un/Mute \n");
+	                			ret = -1;
+	                			break;
+	        			}
+				}
+				if (user->adminflags & ADMINFLAG_KICKME) {
+					//You have been kicked.
+					if (!ast_streamfile(chan, "conf-kicked", chan->language))
+                        			ast_waitstream(chan, "");
+					ret = 0;
+	                		break;
+				}
+			} else if (!(confflags & CONFFLAG_MONITOR) && !(ztc.confmode & ZT_CONF_TALKER)) {
+				ztc.confmode |= ZT_CONF_TALKER;
+				if (ioctl(fd, ZT_SETCONF, &ztc)) {
+	                		ast_log(LOG_WARNING, "Error setting conference - Un/Mute \n");
+					ret = -1;
+					break;
+	        		}
+			}
 
 		if (c) {
 			if (c->fds[0] != origfd) {
@@ -458,13 +744,105 @@ zapretry:
 			if ((f->frametype == AST_FRAME_DTMF) && (f->subclass == '#') && (confflags & CONFFLAG_POUNDEXIT)) {
 				ret = 0;
 				break;
-			} else if ((f->frametype == AST_FRAME_DTMF) && (f->subclass == '*') && (confflags & CONFFLAG_STARMENU)) {
+	                        } else if (((f->frametype == AST_FRAME_DTMF) && (f->subclass == '*') && (confflags & CONFFLAG_STARMENU)) || ((f->frametype == AST_FRAME_DTMF) && menu_active)) {
+	                        		if (musiconhold) {
+				   	        	ast_moh_stop(chan);
+				                }
 					if ((confflags & CONFFLAG_ADMIN)) {
-					/* Do admin stuff here */
+	                                        	/* Admin menu */
+	                                        	if (!menu_active) {
+	                                        		menu_active = 1;
+	                                        		/* Record this sound! */
+		                                        	if (!ast_streamfile(chan, "conf-adminmenu", chan->language))
+                        						ast_waitstream(chan, "");
 					} else {
-					/* Do user menu here */
+		                                        	switch(f->subclass - 48) {
+		                                        		case 1: /* Un/Mute */
+		                                        			menu_active = 0;
+		         							if (ztc.confmode & ZT_CONF_TALKER) {
+		         						       		ztc.confmode = ZT_CONF_CONF | ZT_CONF_LISTENER;
+		         						       		confflags |= CONFFLAG_MONITOR ^ CONFFLAG_TALKER;
+		        							} else {
+		        						        	ztc.confmode = ZT_CONF_CONF | ZT_CONF_TALKER | ZT_CONF_LISTENER;
+		        						        	confflags ^= CONFFLAG_MONITOR | CONFFLAG_TALKER;
+		        						        }
+		        							if (ioctl(fd, ZT_SETCONF, &ztc)) {
+		                							ast_log(LOG_WARNING, "Error setting conference - Un/Mute \n");
+		                							ret = -1;
+		                							break;
+		        							}
+		        							if (ztc.confmode & ZT_CONF_TALKER) {
+		        								if (!ast_streamfile(chan, "conf-unmuted", chan->language))
+			                                        				ast_waitstream(chan, "");
+			                                        		} else {
+			                                        			if (!ast_streamfile(chan, "conf-muted", chan->language))
+		                                        					ast_waitstream(chan, "");
+			                                        		}
+		                                        			break;
+		                                        		case 2: /* Un/Lock the Conference */
+		                                        			menu_active = 0;
+		                                        			if (conf->locked) {
+		                                        				conf->locked = 0;
+		                                        				if (!ast_streamfile(chan, "conf-unlockednow", chan->language))
+		                                        					ast_waitstream(chan, "");
+		                                        			} else {
+		                                        				conf->locked = 1;
+		                                        				if (!ast_streamfile(chan, "conf-lockednow", chan->language))
+		                                        					ast_waitstream(chan, "");
 					}
 
+		                                        			break;
+		                                        		default:
+		                                        			menu_active = 0;
+		                                        			/* Play an error message! */
+		                                        			if (!ast_streamfile(chan, "conf-errormenu", chan->language))
+		                                        				ast_waitstream(chan, "");
+		                                        			break;
+		                                        	}
+		                                        }
+	                                        } else {
+	                                        	/* User menu */
+	                                        	if (!menu_active) {
+	                                        		menu_active = 1;
+	                                        		/* Record this sound! */
+		                                        	if (!ast_streamfile(chan, "conf-usermenu", chan->language))
+                        						ast_waitstream(chan, "");
+		                                        } else {
+		                                        	switch(f->subclass - 48) {
+		                                        		case 1: /* Un/Mute */
+		                                        			menu_active = 0;
+		         							if (ztc.confmode & ZT_CONF_TALKER) {
+		         						       		ztc.confmode = ZT_CONF_CONF | ZT_CONF_LISTENER;
+		         						       		confflags |= CONFFLAG_MONITOR ^ CONFFLAG_TALKER;
+		        							} else if (!(user->adminflags & ADMINFLAG_MUTED)) {
+		        						        	ztc.confmode = ZT_CONF_CONF | ZT_CONF_TALKER | ZT_CONF_LISTENER;
+		        						        	confflags ^= CONFFLAG_MONITOR | CONFFLAG_TALKER;
+		        						        }
+		        							if (ioctl(fd, ZT_SETCONF, &ztc)) {
+		                							ast_log(LOG_WARNING, "Error setting conference - Un/Mute \n");
+		                							ret = -1;
+		                							break;
+		        							}
+		        							if (ztc.confmode & ZT_CONF_TALKER) {
+		        								if (!ast_streamfile(chan, "conf-unmuted", chan->language))
+			                                        				ast_waitstream(chan, "");
+			                                        		} else {
+			                                        			if (!ast_streamfile(chan, "conf-muted", chan->language))
+		                                        					ast_waitstream(chan, "");
+			                                        		}
+		                                        			break;
+		                                        		default:
+		                                        			menu_active = 0;
+		                                        			/* Play an error message! */
+		                                        			if (!ast_streamfile(chan, "errormenu", chan->language))
+		                                        				ast_waitstream(chan, "");
+		                                        			break;
+		                                        	}
+		                                        }
+	                                        }
+						if (musiconhold) {
+				   	        	ast_moh_start(chan, NULL);
+				                }
 			} else if (fd != chan->fds[0]) {
 				if (f->frametype == AST_FRAME_VOICE) {
 					if (f->subclass == AST_FORMAT_ULAW) {
@@ -493,7 +871,7 @@ zapretry:
 				ast_log(LOG_WARNING, "Failed to read frame: %s\n", strerror(errno));
 		}
 	}
-
+	}
 	if (fd != chan->fds[0])
 		close(fd);
 	else {
@@ -510,23 +888,17 @@ zapretry:
 		conf_play(conf, LEAVE);
 
 outrun:
-
-	ast_mutex_lock(&conflock);
-	/* Clean up */
-	conf->users--;
-
-	ast_log(LOG_DEBUG, "Removed channel %s from ZAP conf %d\n", chan->name, conf->zapconf);
-
+        if (user->user_no) { /* Only cleanup users who really joined! */
 	manager_event(EVENT_FLAG_CALL, "MeetmeLeave", 
 			"Channel: %s\r\n"
 			"Uniqueid: %s\r\n"
 			"Meetme: %s\r\n",
 			chan->name, chan->uniqueid, conf->confno);
-
-
+        	ast_mutex_lock(&conflock);
+	        conf->users--;
+	        cur = confs;
 	if (!conf->users) {
 		/* No more users -- close this one out */
-		cur = confs;
 		while(cur) {
 			if (cur == conf) {
 				if (prev)
@@ -542,7 +914,24 @@ outrun:
 			ast_log(LOG_WARNING, "Conference not found\n");
 		close(conf->fd);
 		free(conf);
+	        } else {
+	        	/* Remove the user struct */ 
+	        	if (user == cur->firstuser) {
+	        		cur->firstuser->nextuser->prevuser = NULL;
+	        		cur->firstuser = cur->firstuser->nextuser;
+	        	} else if (user == cur->lastuser){
+	        		cur->lastuser->prevuser->nextuser = NULL;
+	        		cur->lastuser = cur->lastuser->prevuser;
+	        	} else {
+	        		user->nextuser->prevuser = user->prevuser;
+	        		user->prevuser->nextuser = user->nextuser;
+	        	}
+	        	/* Return the number of seconds the user was in the conf */
+	        	sprintf(meetmesecs, "%i", (int) (user->jointime - time(NULL)));
+	        	pbx_builtin_setvar_helper(chan, "MEETMESECS", meetmesecs);
+	        }
 	}
+	free(user);
 	ast_mutex_unlock(&conflock);
 	return ret;
 }
@@ -692,7 +1081,7 @@ static int conf_exec(struct ast_channel *chan, void *data)
 			confflags |= CONFFLAG_MONITOR;
 		if (strchr(inflags, 'p'))
 			confflags |= CONFFLAG_POUNDEXIT;
-		if (strchr(inflags, 's'))
+		if (strchr(inflags, 'u'))
 			confflags |= CONFFLAG_STARMENU;
 		if (strchr(inflags, 't'))
 			confflags |= CONFFLAG_TALKER;
@@ -700,6 +1089,8 @@ static int conf_exec(struct ast_channel *chan, void *data)
 			confflags |= CONFFLAG_QUIET;
 		if (strchr(inflags, 'M'))
 			confflags |= CONFFLAG_MOH;
+                if (strchr(inflags, 'x'))
+                        confflags |= CONFFLAG_ADMINEXIT;
 		if (strchr(inflags, 'b'))
 			confflags |= CONFFLAG_AGI;
 		if (strchr(inflags, 'd'))
@@ -873,10 +1264,102 @@ static int conf_exec(struct ast_channel *chan, void *data)
 	return res;
 }
 
+static struct ast_conf_user* find_user(struct ast_conference *conf, char *callerident) {
+	struct ast_conf_user *user = NULL;
+	char usrno[1024] = "";
+	if (conf && callerident) {
+		user = conf->firstuser;
+		while(user) {
+			sprintf(usrno, "%i", user->user_no);
+			if (strcmp(usrno, callerident) == 0)
+				return user;
+			user = user->nextuser;
+		}
+	}
+	return NULL;
+}
+
+static int admin_exec(struct ast_channel *chan, void *data) {
+	/* MeetMeAdmin(confno, command, caller) */
+	char *params, *command = NULL, *caller = NULL, *conf = NULL;
+	struct ast_conference *cnf;
+	struct ast_conf_user *user = NULL;
+
+	ast_mutex_lock(&conflock);
+	/* The param has the conference number the user and the command to execute */
+	if (data && strlen(data)) {		
+		params = ast_strdupa((char *) data);
+		conf = strsep(&params, "|");
+		command = strsep(&params, "|");
+		caller = strsep(&params, "|");
+		
+		ast_mutex_lock(&conflock);
+                cnf = confs;
+                while (cnf) {
+                        if (strcmp(cnf->confno, conf) == 0) 
+                        	break;
+                	cnf = cnf->next;
+                }
+                ast_mutex_unlock(&conflock);
+                
+                if (caller)
+                	user = find_user(cnf, caller);
+                
+		if (cnf) {
+			switch((int) (*command)) {
+				case 76: /* L: Lock */ 
+					cnf->locked = 1;
+					break;
+				case 108: /* l: Unlock */ 
+					cnf->locked = 0;
+					break;
+				case 75: /* K: kick all users*/
+					user = cnf->firstuser;
+					while(user) {
+						user->adminflags |= ADMINFLAG_KICKME;
+						if (user->nextuser) {
+							user = user->nextuser;
+						} else {
+							break;
+						}
+					}
+					break;
+				case 77: /* M: Mute */ 
+					if (user) {
+						user->adminflags |= ADMINFLAG_MUTED;
+					} else {
+						ast_log(LOG_NOTICE, "Specified User not found!");
+					}
+					break;
+				case 109: /* m: Unmute */ 
+					if (user && (user->adminflags & ADMINFLAG_MUTED)) {
+						user->adminflags ^= ADMINFLAG_MUTED;
+					} else {
+						ast_log(LOG_NOTICE, "Specified User not found or he muted himself!");
+					}
+					break;
+				case 107: /* k: Kick user */ 
+					if (user) {
+						user->adminflags |= ADMINFLAG_KICKME;
+					} else {
+						ast_log(LOG_NOTICE, "Specified User not found!");
+					}
+					break;
+			}
+		} else {
+			ast_log(LOG_NOTICE, "Conference Number not found\n");
+		}
+	}
+	ast_mutex_unlock(&conflock);
+	return 0;
+}
+
 int unload_module(void)
 {
 	STANDARD_HANGUP_LOCALUSERS;
 	ast_cli_unregister(&cli_show_confs);
+        ast_cli_unregister(&cli_conf);
+        ast_unregister_application(app3);
 	ast_unregister_application(app2);
 	return ast_unregister_application(app);
 }
@@ -884,6 +1367,8 @@ int unload_module(void)
 int load_module(void)
 {
 	ast_cli_register(&cli_show_confs);
+        ast_cli_register(&cli_conf);
+        ast_register_application(app3, admin_exec, synopsis3, descrip3);
 	ast_register_application(app2, count_exec, synopsis2, descrip2);
 	return ast_register_application(app, conf_exec, synopsis, descrip);
 }
diff --git a/channel.c b/channel.c
index 896fa89983..cd7aaeba87 100755
--- a/channel.c
+++ b/channel.c
@@ -468,6 +468,19 @@ struct ast_channel *ast_channel_walk_locked(struct ast_channel *prev)
 	
 }
 
+struct ast_channel *ast_get_channel_by_name_locked(char *channame)
+{
+	struct ast_channel *chan;
+	chan = ast_channel_walk_locked(NULL);
+	while(chan) {
+		if (!strcasecmp(chan->name, channame))
+			return chan;
+		ast_mutex_unlock(&chan->lock);
+		chan = ast_channel_walk_locked(NULL);
+	}
+	return NULL;
+}
+
 int ast_safe_sleep_conditional(	struct ast_channel *chan, int ms,
 								int (*cond)(void*), void *data )
 {
diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h
index baae962138..758670f282 100755
--- a/include/asterisk/channel.h
+++ b/include/asterisk/channel.h
@@ -628,6 +628,9 @@ int ast_recvchar(struct ast_channel *chan, int timeout);
  */
 struct ast_channel *ast_channel_walk_locked(struct ast_channel *prev);
 
+//! Get channel by name (locks channel)
+struct ast_channel *ast_get_channel_by_name_locked(char *channame);
+
 //! Waits for a digit
 /*! 
  * \param c channel to wait for a digit on
diff --git a/manager.c b/manager.c
index 53dcf6f094..b619baf044 100755
--- a/manager.c
+++ b/manager.c
@@ -455,6 +455,7 @@ static int action_redirect(struct mansession *s, struct message *m)
 	char *exten = astman_get_header(m, "Exten");
 	char *context = astman_get_header(m, "Context");
 	char *priority = astman_get_header(m, "Priority");
+	struct ast_channel *chan, *chan2 = NULL;
 	int pi = 0;
 	int res;
 	if (!name || !strlen(name)) {
@@ -465,10 +466,16 @@ static int action_redirect(struct mansession *s, struct message *m)
 		astman_send_error(s, m, "Invalid priority\n");
 		return 0;
 	}
-	res = ast_async_goto_by_name(name, context, exten, pi);
+	chan = ast_get_channel_by_name_locked(name);
+	if (strlen(name2))
+		chan2 = ast_get_channel_by_name_locked(name2);
+	res = ast_async_goto(chan, context, exten, pi);
 	if (!res) {
 		if (strlen(name2)) {
-			res = ast_async_goto_by_name(name2, context, exten, pi);
+			if (chan2)
+				res = ast_async_goto(chan2, context, exten, pi);
+			else
+				res = -1;
 			if (!res)
 				astman_send_ack(s, m, "Dual Redirect successful");
 			else
@@ -477,6 +484,10 @@ static int action_redirect(struct mansession *s, struct message *m)
 			astman_send_ack(s, m, "Redirect successful");
 	} else
 		astman_send_error(s, m, "Redirect failed");
+	if (chan)
+		ast_mutex_unlock(&chan->lock);
+	if (chan2)
+		ast_mutex_unlock(&chan2->lock);
 	return 0;
 }
 
diff --git a/sounds.txt b/sounds.txt
index 419497c71a..ce7e5a4a87 100755
--- a/sounds.txt
+++ b/sounds.txt
@@ -612,3 +612,21 @@
 %plus.gsm%plus [+]
 
 %equals.gsm%equals [=]
+
+%conf-locked.gsm%This conference is locked!
+
+%conf-kicked.gsm%You have been kicked from this conference
+
+%conf-adminmenu.gsm%Please press 1 to mute or unmute yourself, or press 2 to lock or unlock the conference
+
+%conf-usermenu.gsm%Please press 1 to mute or unmute yourself
+
+%conf-errormenu.gsm%Invalid Choice
+
+%conf-muted.gsm%You are now muted
+
+%conf-unmuted.gsm%You are now unmuted
+
+%conf-lockednow.gsm%The conference is now locked
+
+%conf-unlockednow.gsm%The conference is now unlocked
diff --git a/sounds/conf-adminmenu.gsm b/sounds/conf-adminmenu.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..ba5301717ecca001edee8ce1a29364af036ddb09
GIT binary patch
literal 11187
zcmW-nXIK;F7xqz6akN!LD<s%J5>`N~vI6QK5J&=|YzQHYFarc7DDEm#R*(b%SsIcM
zNEk9BLu6+FqGUi8Ghu^O>u77+_vL**Jzwr~p6mJWT-UjO=N1L0g$H>$prE(;>R=7q
zyfXs8Lk&2D;-;2@Y?WlbT2hAhoNVZ~Ra0zL(tbNdA_AE5&{{#_0h&RsYLWmlU3K?(
zARlC>ByrR!4%W&fj#^AbKuA1rHYh-!f`UxT(|pl)!r;(E8*pS8QcZMKHBeDNau-;+
zt)rm8GF(KVB7gf<GGEyZvQ;OIZeXhszyjOv81*+M+0sL?^iZaKl}()>ApjZK$$4L6
zmWoi$!&j|l{BwsZkhNc>M|=|@VWR?|qw#eHlQ4~JNo*ImK*E3c-3wWdiOs7LmVJpb
z^jx2zJDfFVuD-!I#p{)<x>rW@XuoF(^bl{nMb9ejKwe0`{5akMZ5o?>CZxL*`AM2G
zf_)5=W(AcRO;w#w_AY90GW-q)%Qmx8N|2Z5ENWGpU(NH};vt3EC#9f+DWbP-wo6Vw
zsB-FlzFQIJn}c^eAsIXT$V6wE;=gkm@WY)anfv!elo;#tj3_my-tI_e?z6aIJ2S)!
z04LRlP93-S&pkD3=f;~iMX6C^2Ec#hePAZyX5hm8OvfQfEl^V8`ua!@)Sgl36LFV5
zch~#k54USR`ZQa?ZffnL5%p@sKi{<Wy?GIaupVxIk#*B;k{6ZivRSMxpd>j@##dQ`
zMd+;mCTf`mkvFU{1eXivh|mDK3&PDEZ8B}l+#(*E7J|9m012{oE-N(xZ~P6`yyr{P
zsvLj~65}BVdjC32Tte?Nd|@^NGq<nu=QAtcb{Z0({nU0`{nXOskG?Tr`Ei`VW^0YC
z*u`pU6>^C3yCo%I@LPD?+L;f-UXOo+?v)?ElZ2h#Szci^IV1v?hZT4HNXX@EM1GII
z<MhouN#;9sq{1}*nZcp5$U^b>j$67x){=hEc)3T{;R#R&7^PDszA}8<l;7`K%$d9X
z!6CGR;z7@!_hq-#1-+ZMPA}xrrk64_$qoJP&~8MKbiQ4IvKDxQYW1L9z^GM0r0@no
zv`R$(;myvbWm(G~GMtLN@X{gt&wd=EM}qpXsD`2$;d1=!ujytH*P<n~G=Z4%K4n9I
zEdQ&j`^lKevytVnGEsEC=UR@*QlnSex3_MXBVm1sq;XqCUfB^+!pPxuKSMFJ7^U~v
zty90G*N_~yyObgqPMhswbL3&<{JbM19!Sh6_BAMuvs05CPL;)vZss0dR+-su<?dK2
zJy52fM6Q&CX6cMp@Cz2lM=n$yG{q!bYOmODuD;|>T!RGwa6F87CR37I5yw{^H~@I=
z=DK#mY<43?;C)UJvgL|K>ECM-12W~>UU<8AE%0A{M|5aY^6&m`!esziex9R<<HQ~#
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
JV>>Pj`M(M)Oyd9m

literal 0
HcmV?d00001

diff --git a/sounds/conf-errormenu.gsm b/sounds/conf-errormenu.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..6388c1c5201dd4ae69ab43b2c5ea594f8818fe48
GIT binary patch
literal 2376
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

literal 0
HcmV?d00001

diff --git a/sounds/conf-kicked.gsm b/sounds/conf-kicked.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..33ef20cd66244d50bc0744648eb3174154e81575
GIT binary patch
literal 3861
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
M>b5u5$izVZ3%C85761SM

literal 0
HcmV?d00001

diff --git a/sounds/conf-locked.gsm b/sounds/conf-locked.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..82b59be5d2805374724ceb741e0cb6e58af2a147
GIT binary patch
literal 2805
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
H+>S>Z6%n$D

literal 0
HcmV?d00001

diff --git a/sounds/conf-lockednow.gsm b/sounds/conf-lockednow.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..0288ff62b3edf048ca6abdbb60eccbb16cb6bcc0
GIT binary patch
literal 3597
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

literal 0
HcmV?d00001

diff --git a/sounds/conf-muted.gsm b/sounds/conf-muted.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..014a58998b3d69cec7a468c26031083c6a64275a
GIT binary patch
literal 2178
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
EBpa1v+5i9m

literal 0
HcmV?d00001

diff --git a/sounds/conf-unlockednow.gsm b/sounds/conf-unlockednow.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..a9cfe0077c107a61f1705cc45c811c7366ae6c6d
GIT binary patch
literal 4290
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

literal 0
HcmV?d00001

diff --git a/sounds/conf-unmuted.gsm b/sounds/conf-unmuted.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..44c26b935adcba7041bf6f9b0378e09a75332538
GIT binary patch
literal 2607
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
RPyk6Jl1U^`07)d0NhCff9e)4-

literal 0
HcmV?d00001

diff --git a/sounds/conf-usermenu.gsm b/sounds/conf-usermenu.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..2ce525cd488371ea4b84932d94a335aa8ceecd6b
GIT binary patch
literal 5016
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
SX_20@Da8Yv^n;#+vi*P8-7abX

literal 0
HcmV?d00001

-- 
GitLab