[asterisk-commits] oej: branch oej/pinemeetings-manager-1.4 r250963 - /team/oej/pinemeetings-man...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Mar 5 08:40:35 CST 2010


Author: oej
Date: Fri Mar  5 08:40:31 2010
New Revision: 250963

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=250963
Log:
Add manager actions and dialplan function

Modified:
    team/oej/pinemeetings-manager-1.4/apps/app_meetme.c

Modified: team/oej/pinemeetings-manager-1.4/apps/app_meetme.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/pinemeetings-manager-1.4/apps/app_meetme.c?view=diff&rev=250963&r1=250962&r2=250963
==============================================================================
--- team/oej/pinemeetings-manager-1.4/apps/app_meetme.c (original)
+++ team/oej/pinemeetings-manager-1.4/apps/app_meetme.c Fri Mar  5 08:40:31 2010
@@ -3123,6 +3123,119 @@
 	return 0;
 }
 
+/*! \brief List one meetme conference */
+static int manager_meetmelist(struct mansession *s, const struct message *m, int mute)
+{
+	struct ast_conference *conf;
+	const char *confid = astman_get_header(m, "Meetme");
+	const char *actionid = astman_get_header(m, "Actionid");
+	time_t now = time(NULL);
+	int confcount = 0;
+	char idtext[256] = "";
+
+	if (!ast_strlen_zero(actionid)) {
+		snprintf(idtext, sizeof(idtext), "ActionID: %s\r\n", actionid);
+	}
+
+	astman_send_ack(s, m, "Meetme list will follow");
+
+	/* Look in the conference list */
+	AST_LIST_LOCK(&confs);
+	AST_LIST_TRAVERSE(&confs, conf, list) {
+		/* If there's a conference ID given, filter out the others */
+		if (!ast_strlen_zero(confid) && strcmp(confid, conf->confno))
+			break;
+		confcount++;
+
+		astman_append(s, "Event: MeetmeListItem\r\n"
+			"Meetme: %s\r\n"
+			"ConfUsers: %d\r\n"
+			"MarkedUsers: %d\r\n"
+			"Duration: %ld\r\n"
+			"%s"
+			"\r\n", conf->confno, conf->users, conf->markedusers, now - conf->start,
+			idtext);
+	}
+	AST_LIST_UNLOCK(&confs);
+
+	/* Send final confirmation */
+	astman_append(s,
+	"Event: MeetmeListComplete\r\n"
+	"ListItems: %d\r\n"
+	"%s"
+	"\r\n", confcount, idtext);
+	return 0;
+}
+
+
+
+/*! \brief List one meetme conference */
+static int manager_meetmelistconference(struct mansession *s, const struct message *m, int mute)
+{
+	struct ast_conference *conf;
+	struct ast_conf_user *user;
+	const char *confid = astman_get_header(m, "Meetme");
+	const char *actionid = astman_get_header(m, "Actionid");
+	time_t now = time(NULL);
+	int usercount = 0;
+	char idtext[256] = "";
+
+	if (ast_strlen_zero(confid)) {
+		astman_send_error(s, m, "Meetme conference not specified");
+		return 0;
+	}
+
+	if (!ast_strlen_zero(actionid))
+		snprintf(idtext, sizeof(idtext), "ActionID: %s\r\n", actionid);
+
+	/* Look in the conference list */
+	AST_LIST_LOCK(&confs);
+	AST_LIST_TRAVERSE(&confs, conf, list) {
+		if (!strcmp(confid, conf->confno))
+			break;
+	}
+
+	if (!conf) {
+		AST_LIST_UNLOCK(&confs);
+		astman_send_error(s, m, "Meetme conference does not exist");
+		return 0;
+	}
+	astman_send_ack(s, m, "Meetme participant list will follow");
+
+	AST_LIST_TRAVERSE(&conf->userlist, user, list) {
+		usercount++;
+		astman_append(s, "Event: MeetmeListMemberItem\r\n"
+			"Meetme: %s\r\n"
+			"Usernum: %d\r\n"
+			"Channel: %s\r\n"
+			"Uniqueid: %s\r\n"
+  	     		"CallerIDnum: %s\r\n"
+			"CallerIDname: %s\r\n"
+			"Duration: %ld\r\n"
+			"Admin: %s\r\n"
+			"Muted: %s\r\n"
+			"%s"
+			"\r\n", confid, user->user_no, user->chan->name, user->chan->uniqueid, 
+			S_OR(user->chan->cid.cid_num, "<unknown>"),
+			S_OR(user->chan->cid.cid_name, "<unknown>"),
+			(long) (now - user->jointime), 
+			user->userflags & CONFFLAG_ADMIN ? "Yes" : "No",
+			user->adminflags & ADMINFLAG_MUTED ? "Yes" : user->adminflags & ADMINFLAG_SELFMUTED ? "Yes" : "No",
+			idtext);
+	}
+	AST_LIST_UNLOCK(&confs);
+
+
+	/* Send final confirmation */
+	astman_append(s,
+	"Event: MeetmeListMemberComplete\r\n"
+	"ListItems: %d\r\n"
+	"%s"
+	"\r\n", usercount, idtext);
+	return 0;
+}
+
+
 static int meetmemute(struct mansession *s, const struct message *m, int mute)
 {
 	struct ast_conference *conf;
@@ -3280,6 +3393,63 @@
 
 	return AST_DEVICE_INUSE;
 }
+
+static int func_meetme(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
+{
+	struct ast_conference *conf;
+	char *colname;
+
+	if ((colname = strchr(data, '|'))) {
+		*colname++ = '\0';
+	} else {
+		colname = "users";
+	}
+
+	/* Find conference */
+	AST_LIST_LOCK(&confs);
+	AST_LIST_TRAVERSE(&confs, conf, list) {
+		if (!strcmp(data, conf->confno)) {
+			break;
+		}
+	}
+	AST_LIST_UNLOCK(&confs);
+	if (!conf) {
+		return -1;
+	}
+
+	if (!strcasecmp(colname, "users")) {
+		snprintf(buf, len, "%d", conf->users);
+	} else if (!strcasecmp(colname, "markedusers")) {
+		snprintf(buf, len, "%d", conf->markedusers);
+	} else if (!strcasecmp(colname, "duration")) {	/* Start time */
+		time_t now = time(NULL);
+		snprintf(buf, len, "%ld", (long) (now - conf->start));
+	} else if (!strcasecmp(colname, "pin")) {	/* Pin code */
+		snprintf(buf, len, "%s", conf->pin);
+	} else if (!strcasecmp(colname, "adminpin")) {	/* Pin code */
+		snprintf(buf, len, "%s", conf->pinadmin);
+	} else if (!strcasecmp(colname, "isdynamic")) {	/* dynamic? */
+		snprintf(buf, len, "%d", conf->isdynamic ? 1 : 0);
+	} else {
+		buf[0] = '\0';
+	}
+
+	return 0;
+}
+
+static struct ast_custom_function meetme_function = {
+        .name = "MEETME",
+        .synopsis = "Get Meetme status in the dialplan",
+        .desc = "Returns information about a meetme conference room\n"
+		"users          Return number of users in conference room\n"
+		"markedusers    Return number of marked users in conference room\n"
+		"duration       Return duration of conference in seconds\n"
+		"pin            Return pin code for conference\n"
+		"adminpin       Return admin pin code for conference\n"
+		"isdynamic      Return 1 if conference is dynamic, otherwise 0\n",
+        .syntax = "MEETME(<room #>, parameter)",
+        .read = func_meetme,
+};
 
 static void load_config_meetme(void)
 {
@@ -5021,11 +5191,14 @@
 	ast_cli_unregister_multiple(cli_meetme, ARRAY_LEN(cli_meetme));
 	res = ast_manager_unregister("MeetmeMute");
 	res |= ast_manager_unregister("MeetmeUnmute");
+	res |= ast_manager_unregister("MeetmeListMembers");
+	res |= ast_manager_unregister("MeetmeList");
 	res |= ast_unregister_application(app3);
 	res |= ast_unregister_application(app2);
 	res |= ast_unregister_application(app);
 	res |= ast_unregister_application(slastation_app);
 	res |= ast_unregister_application(slatrunk_app);
+	res |= ast_custom_function_unregister(&meetme_function);
 
 	ast_devstate_prov_del("Meetme");
 	ast_devstate_prov_del("SLA");
@@ -5048,6 +5221,10 @@
 				    action_meetmemute, "Mute a Meetme user");
 	res |= ast_manager_register("MeetmeUnmute", EVENT_FLAG_CALL, 
 				    action_meetmeunmute, "Unmute a Meetme user");
+	res |= ast_manager_register("MeetmeListMembers", EVENT_FLAG_CALL, 
+				    manager_meetmelistconference, "List participants in a Meetme");
+	res |= ast_manager_register("MeetmeList", EVENT_FLAG_CALL, 
+				    manager_meetmelist, "List active Meetme rooms");
 	res |= ast_register_application(app3, admin_exec, synopsis3, descrip3);
 	res |= ast_register_application(app2, count_exec, synopsis2, descrip2);
 	res |= ast_register_application(app, conf_exec, synopsis, descrip);
@@ -5058,6 +5235,7 @@
 
 	res |= ast_devstate_prov_add("Meetme", meetmestate);
 	res |= ast_devstate_prov_add("SLA", sla_state);
+	res |= ast_custom_function_register(&meetme_function);
 
 	return res;
 }




More information about the asterisk-commits mailing list