[svn-commits] mjordan: branch oej/oolong-path-support-trunk r381913 - in /team/oej/oolong-p...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Fri Feb 22 21:47:26 CST 2013


Author: mjordan
Date: Fri Feb 22 21:47:21 2013
New Revision: 381913

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=381913
Log:
Re-enable automerge

Modified:
    team/oej/oolong-path-support-trunk/   (props changed)
    team/oej/oolong-path-support-trunk/CHANGES
    team/oej/oolong-path-support-trunk/Makefile
    team/oej/oolong-path-support-trunk/apps/app_confbridge.c
    team/oej/oolong-path-support-trunk/apps/app_dial.c
    team/oej/oolong-path-support-trunk/apps/app_skel.c
    team/oej/oolong-path-support-trunk/apps/confbridge/conf_config_parser.c
    team/oej/oolong-path-support-trunk/apps/confbridge/include/confbridge.h
    team/oej/oolong-path-support-trunk/channels/chan_motif.c
    team/oej/oolong-path-support-trunk/channels/chan_sip.c
    team/oej/oolong-path-support-trunk/channels/chan_skinny.c
    team/oej/oolong-path-support-trunk/configs/motif.conf.sample
    team/oej/oolong-path-support-trunk/configs/sip.conf.sample
    team/oej/oolong-path-support-trunk/configs/skinny.conf.sample
    team/oej/oolong-path-support-trunk/configs/xmpp.conf.sample
    team/oej/oolong-path-support-trunk/configure
    team/oej/oolong-path-support-trunk/configure.ac
    team/oej/oolong-path-support-trunk/doc/appdocsxml.dtd
    team/oej/oolong-path-support-trunk/funcs/func_presencestate.c
    team/oej/oolong-path-support-trunk/include/asterisk/_private.h
    team/oej/oolong-path-support-trunk/include/asterisk/config_options.h
    team/oej/oolong-path-support-trunk/include/asterisk/logger.h
    team/oej/oolong-path-support-trunk/include/asterisk/module.h
    team/oej/oolong-path-support-trunk/include/asterisk/sorcery.h
    team/oej/oolong-path-support-trunk/include/asterisk/xml.h
    team/oej/oolong-path-support-trunk/include/asterisk/xmldoc.h
    team/oej/oolong-path-support-trunk/main/asterisk.c
    team/oej/oolong-path-support-trunk/main/autoservice.c
    team/oej/oolong-path-support-trunk/main/cli.c
    team/oej/oolong-path-support-trunk/main/config_options.c
    team/oej/oolong-path-support-trunk/main/features.c
    team/oej/oolong-path-support-trunk/main/loader.c
    team/oej/oolong-path-support-trunk/main/logger.c
    team/oej/oolong-path-support-trunk/main/manager.c
    team/oej/oolong-path-support-trunk/main/named_acl.c
    team/oej/oolong-path-support-trunk/main/presencestate.c
    team/oej/oolong-path-support-trunk/main/sorcery.c
    team/oej/oolong-path-support-trunk/main/udptl.c
    team/oej/oolong-path-support-trunk/main/xml.c
    team/oej/oolong-path-support-trunk/main/xmldoc.c
    team/oej/oolong-path-support-trunk/res/res_agi.c
    team/oej/oolong-path-support-trunk/res/res_sorcery_config.c
    team/oej/oolong-path-support-trunk/res/res_sorcery_memory.c
    team/oej/oolong-path-support-trunk/res/res_xmpp.c
    team/oej/oolong-path-support-trunk/res/snmp/agent.c
    team/oej/oolong-path-support-trunk/tests/test_sorcery.c

Propchange: team/oej/oolong-path-support-trunk/
------------------------------------------------------------------------------
    automerge = *

Propchange: team/oej/oolong-path-support-trunk/
------------------------------------------------------------------------------
Binary property 'branch-11-merged' - no diff available.

Propchange: team/oej/oolong-path-support-trunk/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Fri Feb 22 21:47:21 2013
@@ -1,1 +1,1 @@
-/trunk:1-381492
+/trunk:1-381912

Modified: team/oej/oolong-path-support-trunk/CHANGES
URL: http://svnview.digium.com/svn/asterisk/team/oej/oolong-path-support-trunk/CHANGES?view=diff&rev=381913&r1=381912&r2=381913
==============================================================================
--- team/oej/oolong-path-support-trunk/CHANGES (original)
+++ team/oej/oolong-path-support-trunk/CHANGES Fri Feb 22 21:47:21 2013
@@ -161,6 +161,9 @@
  * Added announcement configuration option to user profile. If set the sound
    file will be played to the user, and only the user, upon joining the
    conference bridge.
+
+ * Added record_file_append option that defaults to "yes", but if set to no
+   will create a new file between each start/stop recording.
 
 
 Dial

Modified: team/oej/oolong-path-support-trunk/Makefile
URL: http://svnview.digium.com/svn/asterisk/team/oej/oolong-path-support-trunk/Makefile?view=diff&rev=381913&r1=381912&r2=381913
==============================================================================
--- team/oej/oolong-path-support-trunk/Makefile (original)
+++ team/oej/oolong-path-support-trunk/Makefile Fri Feb 22 21:47:21 2013
@@ -456,7 +456,7 @@
 	@echo "<docs xmlns:xi=\"http://www.w3.org/2001/XInclude\">" >> $@
 	@for x in $(MOD_SUBDIRS); do \
 		printf "$$x " ; \
-		for i in $$x/*.c; do \
+		for i in `find $$x -name *.c`; do \
 			$(AWK) -f build_tools/get_documentation $$i >> $@ ; \
 		done ; \
 	done

Modified: team/oej/oolong-path-support-trunk/apps/app_confbridge.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/oolong-path-support-trunk/apps/app_confbridge.c?view=diff&rev=381913&r1=381912&r2=381913
==============================================================================
--- team/oej/oolong-path-support-trunk/apps/app_confbridge.c (original)
+++ team/oej/oolong-path-support-trunk/apps/app_confbridge.c Fri Feb 22 21:47:21 2013
@@ -596,6 +596,37 @@
 	return tmp;
 }
 
+static void set_rec_filename(struct conference_bridge *bridge, struct ast_str **filename)
+{
+	char *rec_file = bridge->b_profile.rec_file;
+	time_t now;
+	char *ext;
+
+	if (ast_str_strlen(*filename) && ast_test_flag(&bridge->b_profile, BRIDGE_OPT_RECORD_FILE_APPEND)) {
+		    return;
+	}
+
+	time(&now);
+
+	ast_str_reset(*filename);
+	if (ast_strlen_zero(rec_file)) {
+		ast_str_set(filename, 0, "confbridge-%s-%u.wav", bridge->name, (unsigned int)now);
+	} else {
+		/* insert time before file extension */
+		ext = strrchr(rec_file, '.');
+		if (ext) {
+			ast_str_set_substr(filename, 0, rec_file, ext - rec_file);
+			ast_str_append(filename, 0, "-%u%s", (unsigned int)now, ext);
+		} else {
+			ast_str_set(filename, 0, "%s-%u", rec_file, (unsigned int)now);
+		}
+	}
+
+	if (ast_test_flag(&bridge->b_profile, BRIDGE_OPT_RECORD_FILE_APPEND)) {
+		ast_str_append(filename, 0, ",a");
+	}
+}
+
 static void *record_thread(void *obj)
 {
 	struct conference_bridge *conference_bridge = obj;
@@ -614,16 +645,7 @@
 
 	/* XXX If we get an EXIT right here, START will essentially be a no-op */
 	while (conference_bridge->record_state != CONF_RECORD_EXIT) {
-		if (!(ast_strlen_zero(conference_bridge->b_profile.rec_file))) {
-			ast_str_append(&filename, 0, "%s", conference_bridge->b_profile.rec_file);
-		} else {
-			time_t now;
-			time(&now);
-			ast_str_append(&filename, 0, "confbridge-%s-%u.wav",
-				conference_bridge->name,
-				(unsigned int) now);
-		}
-
+		set_rec_filename(conference_bridge, &filename);
 		chan = ast_channel_ref(conference_bridge->record_chan);
 		ast_answer(chan);
 		pbx_exec(chan, mixmonapp, ast_str_buffer(filename));
@@ -753,9 +775,16 @@
  */
 static int start_conf_record_thread(struct conference_bridge *conference_bridge)
 {
+	conf_start_record(conference_bridge);
+
+	/*
+	 * if the thread has already been started, don't start another
+	 */
+	if (conference_bridge->record_thread != AST_PTHREADT_NULL) {
+		return 0;
+	}
+
 	ao2_ref(conference_bridge, +1); /* give the record thread a ref */
-
-	conf_start_record(conference_bridge);
 
 	if (ast_pthread_create_background(&conference_bridge->record_thread, NULL, record_thread, conference_bridge)) {
 		ast_log(LOG_WARNING, "Failed to create recording channel for conference %s\n", conference_bridge->name);
@@ -2157,10 +2186,10 @@
 	struct conference_bridge *bridge = NULL;
 	char *res = NULL;
 	int wordlen = strlen(word);
-	struct ao2_iterator i;
-
-	i = ao2_iterator_init(conference_bridges, 0);
-	while ((bridge = ao2_iterator_next(&i))) {
+	struct ao2_iterator iter;
+
+	iter = ao2_iterator_init(conference_bridges, 0);
+	while ((bridge = ao2_iterator_next(&iter))) {
 		if (!strncasecmp(bridge->name, word, wordlen) && ++which > state) {
 			res = ast_strdup(bridge->name);
 			ao2_ref(bridge, -1);
@@ -2168,7 +2197,7 @@
 		}
 		ao2_ref(bridge, -1);
 	}
-	ao2_iterator_destroy(&i);
+	ao2_iterator_destroy(&iter);
 
 	return res;
 }
@@ -2224,9 +2253,31 @@
 	return CLI_SUCCESS;
 }
 
-static void handle_cli_confbridge_list_item(struct ast_cli_args *a, struct conference_bridge_user *participant)
-{
+static void handle_cli_confbridge_list_item(struct ast_cli_args *a, struct conference_bridge_user *participant, int waiting)
+{
+	char flag_str[5 + 1];/* Max flags + terminator */
+	int pos = 0;
+
+	/* Build flags column string. */
+	if (ast_test_flag(&participant->u_profile, USER_OPT_ADMIN)) {
+		flag_str[pos++] = 'A';
+	}
+	if (ast_test_flag(&participant->u_profile, USER_OPT_MARKEDUSER)) {
+		flag_str[pos++] = 'M';
+	}
+	if (ast_test_flag(&participant->u_profile, USER_OPT_WAITMARKED)) {
+		flag_str[pos++] = 'W';
+	}
+	if (ast_test_flag(&participant->u_profile, USER_OPT_ENDMARKED)) {
+		flag_str[pos++] = 'E';
+	}
+	if (waiting) {
+		flag_str[pos++] = 'w';
+	}
+	flag_str[pos] = '\0';
+
 	ast_cli(a->fd, "%-29s ", ast_channel_name(participant->chan));
+	ast_cli(a->fd, "%-5s ", flag_str);
 	ast_cli(a->fd, "%-17s", participant->u_profile.name);
 	ast_cli(a->fd, "%-17s", participant->b_profile.name);
 	ast_cli(a->fd, "%-17s", participant->menu_name);
@@ -2236,17 +2287,24 @@
 
 static char *handle_cli_confbridge_list(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
 {
-	struct ao2_iterator i;
-	struct conference_bridge *bridge = NULL;
-	struct conference_bridge tmp;
-	struct conference_bridge_user *participant = NULL;
+	struct conference_bridge *bridge;
 
 	switch (cmd) {
 	case CLI_INIT:
 		e->command = "confbridge list";
 		e->usage =
 			"Usage: confbridge list [<name>]\n"
-			"       Lists all currently active conference bridges.\n";
+			"       Lists all currently active conference bridges or a specific conference bridge.\n"
+			"\n"
+			"       When a conference bridge name is provided, flags may be shown for users. Below\n"
+			"       are the flags and what they represent.\n" 
+			"\n"
+			"       Flags:\n"
+			"         A - The user is an admin\n"
+			"         M - The user is a marked user\n"
+			"         W - The user must wait for a marked user to join\n"
+			"         E - The user will be kicked after the last marked user leaves the conference\n"
+			"         w - The user is waiting for a marked user to join\n";
 		return NULL;
 	case CLI_GENERATE:
 		if (a->pos == 2) {
@@ -2256,32 +2314,37 @@
 	}
 
 	if (a->argc == 2) {
+		struct ao2_iterator iter;
+
 		ast_cli(a->fd, "Conference Bridge Name           Users  Marked Locked?\n");
 		ast_cli(a->fd, "================================ ====== ====== ========\n");
-		i = ao2_iterator_init(conference_bridges, 0);
-		while ((bridge = ao2_iterator_next(&i))) {
+		iter = ao2_iterator_init(conference_bridges, 0);
+		while ((bridge = ao2_iterator_next(&iter))) {
 			ast_cli(a->fd, "%-32s %6i %6i %s\n", bridge->name, bridge->activeusers + bridge->waitingusers, bridge->markedusers, (bridge->locked ? "locked" : "unlocked"));
 			ao2_ref(bridge, -1);
 		}
-		ao2_iterator_destroy(&i);
+		ao2_iterator_destroy(&iter);
 		return CLI_SUCCESS;
 	}
 
 	if (a->argc == 3) {
+		struct conference_bridge_user *participant;
+		struct conference_bridge tmp;
+
 		ast_copy_string(tmp.name, a->argv[2], sizeof(tmp.name));
 		bridge = ao2_find(conference_bridges, &tmp, OBJ_POINTER);
 		if (!bridge) {
 			ast_cli(a->fd, "No conference bridge named '%s' found!\n", a->argv[2]);
 			return CLI_SUCCESS;
 		}
-		ast_cli(a->fd, "Channel                       User Profile     Bridge Profile   Menu             CallerID\n");
-		ast_cli(a->fd, "============================= ================ ================ ================ ================\n");
+		ast_cli(a->fd, "Channel                       Flags User Profile     Bridge Profile   Menu             CallerID\n");
+		ast_cli(a->fd, "============================= ===== ================ ================ ================ ================\n");
 		ao2_lock(bridge);
 		AST_LIST_TRAVERSE(&bridge->active_list, participant, list) {
-			handle_cli_confbridge_list_item(a, participant);
+			handle_cli_confbridge_list_item(a, participant, 0);
 		}
 		AST_LIST_TRAVERSE(&bridge->waiting_list, participant, list) {
-			handle_cli_confbridge_list_item(a, participant);
+			handle_cli_confbridge_list_item(a, participant, 1);
 		}
 		ao2_unlock(bridge);
 		ao2_ref(bridge, -1);
@@ -2580,7 +2643,7 @@
 	.read = func_confbridge_info,
 };
 
-static void action_confbridgelist_item(struct mansession *s, const char *id_text, struct conference_bridge *bridge, struct conference_bridge_user *participant)
+static void action_confbridgelist_item(struct mansession *s, const char *id_text, struct conference_bridge *bridge, struct conference_bridge_user *participant, int waiting)
 {
 	astman_append(s,
 		"Event: ConfbridgeList\r\n"
@@ -2591,6 +2654,9 @@
 		"Channel: %s\r\n"
 		"Admin: %s\r\n"
 		"MarkedUser: %s\r\n"
+		"WaitMarked: %s\r\n"
+		"EndMarked: %s\r\n"
+		"Waiting: %s\r\n"
 		"\r\n",
 		id_text,
 		bridge->name,
@@ -2598,19 +2664,23 @@
 		S_COR(ast_channel_caller(participant->chan)->id.name.valid, ast_channel_caller(participant->chan)->id.name.str, "<no name>"),
 		ast_channel_name(participant->chan),
 		ast_test_flag(&participant->u_profile, USER_OPT_ADMIN) ? "Yes" : "No",
-		ast_test_flag(&participant->u_profile, USER_OPT_MARKEDUSER) ? "Yes" : "No");
+		ast_test_flag(&participant->u_profile, USER_OPT_MARKEDUSER) ? "Yes" : "No",
+		ast_test_flag(&participant->u_profile, USER_OPT_WAITMARKED) ? "Yes" : "No",
+		ast_test_flag(&participant->u_profile, USER_OPT_ENDMARKED) ? "Yes" : "No",
+		waiting ? "Yes" : "No");
 }
 
 static int action_confbridgelist(struct mansession *s, const struct message *m)
 {
 	const char *actionid = astman_get_header(m, "ActionID");
 	const char *conference = astman_get_header(m, "Conference");
-	struct conference_bridge_user *participant = NULL;
-	struct conference_bridge *bridge = NULL;
+	struct conference_bridge_user *participant;
+	struct conference_bridge *bridge;
 	struct conference_bridge tmp;
-	char id_text[80] = "";
+	char id_text[80];
 	int total = 0;
 
+	id_text[0] = '\0';
 	if (!ast_strlen_zero(actionid)) {
 		snprintf(id_text, sizeof(id_text), "ActionID: %s\r\n", actionid);
 	}
@@ -2634,11 +2704,11 @@
 	ao2_lock(bridge);
 	AST_LIST_TRAVERSE(&bridge->active_list, participant, list) {
 		total++;
-		action_confbridgelist_item(s, id_text, bridge, participant);
+		action_confbridgelist_item(s, id_text, bridge, participant, 0);
 	}
 	AST_LIST_TRAVERSE(&bridge->waiting_list, participant, list) {
 		total++;
-		action_confbridgelist_item(s, id_text, bridge, participant);
+		action_confbridgelist_item(s, id_text, bridge, participant, 1);
 	}
 	ao2_unlock(bridge);
 	ao2_ref(bridge, -1);
@@ -2657,7 +2727,7 @@
 {
 	const char *actionid = astman_get_header(m, "ActionID");
 	struct conference_bridge *bridge = NULL;
-	struct ao2_iterator i;
+	struct ao2_iterator iter;
 	char id_text[512] = "";
 	int totalitems = 0;
 
@@ -2673,8 +2743,8 @@
 	astman_send_listack(s, m, "Confbridge conferences will follow", "start");
 
 	/* Traverse the conference list */
-	i = ao2_iterator_init(conference_bridges, 0);
-	while ((bridge = ao2_iterator_next(&i))) {
+	iter = ao2_iterator_init(conference_bridges, 0);
+	while ((bridge = ao2_iterator_next(&iter))) {
 		totalitems++;
 
 		ao2_lock(bridge);
@@ -2695,7 +2765,7 @@
 
 		ao2_ref(bridge, -1);
 	}
-	ao2_iterator_destroy(&i);
+	ao2_iterator_destroy(&iter);
 
 	/* Send final confirmation */
 	astman_append(s,

Modified: team/oej/oolong-path-support-trunk/apps/app_dial.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/oolong-path-support-trunk/apps/app_dial.c?view=diff&rev=381913&r1=381912&r2=381913
==============================================================================
--- team/oej/oolong-path-support-trunk/apps/app_dial.c (original)
+++ team/oej/oolong-path-support-trunk/apps/app_dial.c Fri Feb 22 21:47:21 2013
@@ -3096,7 +3096,7 @@
 	}
 
 	ast_channel_early_bridge(chan, NULL);
-	hanguptree(&out_chans, NULL, ast_channel_hangupcause(chan)==AST_CAUSE_ANSWERED_ELSEWHERE ? 1 : 0 ); /* forward 'answered elsewhere' if we received it */
+	hanguptree(&out_chans, NULL, ast_channel_hangupcause(chan)==AST_CAUSE_ANSWERED_ELSEWHERE || ast_test_flag64(&opts, OPT_CANCEL_ELSEWHERE) ? 1 : 0 ); /* forward 'answered elsewhere' if we received it */
 	pbx_builtin_setvar_helper(chan, "DIALSTATUS", pa.status);
 	senddialendevent(chan, pa.status);
 	ast_debug(1, "Exiting with DIALSTATUS=%s.\n", pa.status);

Modified: team/oej/oolong-path-support-trunk/apps/app_skel.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/oolong-path-support-trunk/apps/app_skel.c?view=diff&rev=381913&r1=381912&r2=381913
==============================================================================
--- team/oej/oolong-path-support-trunk/apps/app_skel.c (original)
+++ team/oej/oolong-path-support-trunk/apps/app_skel.c Fri Feb 22 21:47:21 2013
@@ -86,6 +86,51 @@
 		from. It shows you the basic structure to create your own Asterisk applications.</para>
 		</description>
 	</application>
+
+	<configInfo name="app_skel" language="en_US">
+		<configFile name="app_skel.conf">
+			<configObject name="globals">
+				<synopsis>Options that apply globally to app_skel</synopsis>
+				<configOption name="games">
+					<synopsis>The number of games a single execution of SkelGuessNumber will play</synopsis>
+				</configOption>
+				<configOption name="cheat">
+					<synopsis>Should the computer cheat?</synopsis>
+					<description><para>If enabled, the computer will ignore winning guesses.</para></description>
+				</configOption>
+			</configObject>
+			<configObject name="sounds">
+				<synopsis>Prompts for SkelGuessNumber to play</synopsis>
+				<configOption name="prompt" default="please-enter-your&amp;number&amp;queue-less-than">
+					<synopsis>A prompt directing the user to enter a number less than the max number</synopsis>
+				</configOption>
+				<configOption name="wrong_guess" default="vm-pls-try-again">
+					<synopsis>The sound file to play when a wrong guess is made</synopsis>
+				</configOption>
+				<configOption name="right_guess" default="auth-thankyou">
+					<synopsis>The sound file to play when a correct guess is made</synopsis>
+				</configOption>
+				<configOption name="too_low">
+					<synopsis>The sound file to play when a guess is too low</synopsis>
+				</configOption>
+				<configOption name="too_high">
+					<synopsis>The sound file to play when a guess is too high</synopsis>
+				</configOption>
+				<configOption name="lose" default="vm-goodbye">
+					<synopsis>The sound file to play when a player loses</synopsis>
+				</configOption>
+			</configObject>
+			<configObject name="level">
+				<synopsis>Defined levels for the SkelGuessNumber game</synopsis>
+				<configOption name="max_number">
+					<synopsis>The maximum in the range of numbers to guess (1 is the implied minimum)</synopsis>
+				</configOption>
+				<configOption name="max_guesses">
+					<synopsis>The maximum number of guesses before a game is considered lost</synopsis>
+				</configOption>
+			</configObject>
+		</configFile>
+	</configInfo>
  ***/
 
 static char *app = "SkelGuessNumber";
@@ -197,6 +242,7 @@
 /*! \brief An aco_type structure to link the "general" category to the skel_global_config type */
 static struct aco_type global_option = {
 	.type = ACO_GLOBAL,
+	.name = "globals",
 	.item_offset = offsetof(struct skel_config, global),
 	.category_match = ACO_WHITELIST,
 	.category = "^general$",
@@ -207,6 +253,7 @@
 /*! \brief An aco_type structure to link the "sounds" category to the skel_global_config type */
 static struct aco_type sound_option = {
 	.type = ACO_GLOBAL,
+	.name = "sounds",
 	.item_offset = offsetof(struct skel_config, global),
 	.category_match = ACO_WHITELIST,
 	.category = "^sounds$",
@@ -217,6 +264,7 @@
 /*! \brief An aco_type structure to link the everything but the "general" and "sounds" categories to the skel_level type */
 static struct aco_type level_option = {
 	.type = ACO_ITEM,
+	.name = "level",
 	.category_match = ACO_BLACKLIST,
 	.category = "^(general|sounds)$",
 	.item_alloc = skel_level_alloc,

Modified: team/oej/oolong-path-support-trunk/apps/confbridge/conf_config_parser.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/oolong-path-support-trunk/apps/confbridge/conf_config_parser.c?view=diff&rev=381913&r1=381912&r2=381913
==============================================================================
--- team/oej/oolong-path-support-trunk/apps/confbridge/conf_config_parser.c (original)
+++ team/oej/oolong-path-support-trunk/apps/confbridge/conf_config_parser.c Fri Feb 22 21:47:21 2013
@@ -40,6 +40,464 @@
 #include "asterisk/stringfields.h"
 #include "asterisk/pbx.h"
 
+
+/*** DOCUMENTATION
+	<configInfo name="app_confbridge" language="en_US">
+		<synopsis>Conference Bridge Application</synopsis>
+		<configFile name="confbridge.conf">
+			<configObject name="global">
+				<synopsis>Unused, but reserved.</synopsis>
+			</configObject>
+			<configObject name="user_profile">
+				<synopsis>A named profile to apply to specific callers.</synopsis>
+				<description><para>Callers in a ConfBridge have a profile associated with them
+				that determine their options. A configuration section is determined to be a
+				user_profile when the <literal>type</literal> parameter has a value
+				of <literal>user</literal>.
+				</para></description>
+				<configOption name="type">
+					<synopsis>Define this configuration category as a user profile.</synopsis>
+					<description><para>The type parameter determines how a context in the
+					configuration file is interpreted.</para>
+					<enumlist>
+						<enum name="user"><para>Configure the context as a <replaceable>user_profile</replaceable></para></enum>
+						<enum name="bridge"><para>Configure the context as a <replaceable>bridge_profile</replaceable></para></enum>
+						<enum name="menu"><para>Configure the context as a <replaceable>menu</replaceable></para></enum>
+					</enumlist>
+					</description>
+				</configOption>
+				<configOption name="admin">
+					<synopsis>Sets if the user is an admin or not</synopsis>
+				</configOption>
+				<configOption name="marked">
+					<synopsis>Sets if this is a marked user or not</synopsis>
+				</configOption>
+				<configOption name="startmuted">
+					<synopsis>Sets if all users should start out muted</synopsis>
+				</configOption>
+				<configOption name="music_on_hold_when_empty">
+					<synopsis>Play MOH when user is alone or waiting on a marked user</synopsis>
+				</configOption>
+				<configOption name="quiet">
+					<synopsis>Silence enter/leave prompts and user intros for this user</synopsis>
+				</configOption>
+				<configOption name="announce_user_count">
+					<synopsis>Sets if the number of users should be announced to the user</synopsis>
+				</configOption>
+				<configOption name="announce_user_count_all">
+					<synopsis>Announce user count to all the other users when this user joins</synopsis>
+					<description><para>Sets if the number of users should be announced to all the other users
+					in the conference when this user joins. This option can be either set to 'yes' or
+					a number. When set to a number, the announcement will only occur once the user
+					count is above the specified number.
+					</para></description>
+				</configOption>
+				<configOption name="announce_only_user">
+					<synopsis>Announce to a user when they join an empty conference</synopsis>
+				</configOption>
+				<configOption name="wait_marked">
+					<synopsis>Sets if the user must wait for a marked user to enter before joining a conference</synopsis>
+				</configOption>
+				<configOption name="end_marked">
+					<synopsis>Kick the user from the conference when the last marked user leaves</synopsis>
+				</configOption>
+				<configOption name="talk_detection_events">
+					<synopsis>Set whether or not notifications of when a user begins and ends talking should be sent out as events over AMI</synopsis>
+				</configOption>
+				<configOption name="dtmf_passthrough">
+					<synopsis>Sets whether or not DTMF should pass through the conference</synopsis>
+				</configOption>
+				<configOption name="announce_join_leave">
+					<synopsis>Prompt user for their name when joining a conference and play it to the conference when they enter</synopsis>
+				</configOption>
+				<configOption name="pin">
+					<synopsis>Sets a PIN the user must enter before joining the conference</synopsis>
+				</configOption>
+				<configOption name="music_on_hold_class">
+					<synopsis>The MOH class to use for this user</synopsis>
+				</configOption>
+				<configOption name="announcement">
+					<synopsis>Sound file to play to the user when they join a conference</synopsis>
+				</configOption>
+				<configOption name="denoise">
+					<synopsis>Apply a denoise filter to the audio before mixing</synopsis>
+					<description><para>Sets whether or not a denoise filter should be applied
+					to the audio before mixing or not.  Off by default. Requires
+					codec_speex to be built and installed.  Do not confuse this option
+					with drop_silence.  Denoise is useful if there is a lot of background
+					noise for a user as it attempts to remove the noise while preserving
+					the speech.  This option does NOT remove silence from being mixed into
+					the conference and does come at the cost of a slight performance hit.
+					</para></description>
+				</configOption>
+				<configOption name="dsp_drop_silence">
+					<synopsis>Drop what Asterisk detects as silence from audio sent to the bridge</synopsis>
+					<description><para>
+					This option drops what Asterisk detects as silence from
+					entering into the bridge.  Enabling this option will drastically
+					improve performance and help remove the buildup of background
+					noise from the conference. Highly recommended for large conferences
+					due to its performance enhancements.
+					</para></description>
+				</configOption>
+				<configOption name="dsp_silence_threshold">
+					<synopsis>The number of milliseconds of detected silence necessary to trigger silence detection</synopsis>
+					<description><para>
+					The time in milliseconds of sound falling within the what
+					the dsp has established as baseline silence before a user
+					is considered be silent.  This value affects several
+					operations and should not be changed unless the impact
+					on call quality is fully understood.</para>
+					<para>What this value affects internally:</para>
+					<para>
+						1. When talk detection AMI events are enabled, this value
+						determines when the user has stopped talking after a
+						period of talking.  If this value is set too low
+						AMI events indicating the user has stopped talking
+						may get falsely sent out when the user briefly pauses
+						during mid sentence.
+					</para>
+					<para>
+						2. The drop_silence option depends on this value to
+						determine when the user's audio should begin to be
+						dropped from the conference bridge after the user
+						stops talking.  If this value is set too low the user's
+						audio stream may sound choppy to the other participants.
+						This is caused by the user transitioning constantly from
+						silence to talking during mid sentence.
+					</para>
+					<para>
+						The best way to approach this option is to set it slightly above
+						the maximum amount of ms of silence a user may generate during
+						natural speech.
+					</para>
+					<para>By default this value is 2500ms. Valid values are 1 through 2^31.</para>
+					</description>
+				</configOption>
+				<configOption name="dsp_talking_threshold">
+					<synopsis>The number of milliseconds of detected non-silence necessary to triger talk detection</synopsis>
+					<description><para>
+						The time in milliseconds of sound above what the dsp has
+						established as base line silence for a user before a user
+						is considered to be talking.  This value affects several
+						operations and should not be changed unless the impact on
+						call quality is fully understood.</para>
+						<para>
+						What this value affects internally:
+						</para>
+						<para>
+						1. Audio is only mixed out of a user's incoming audio stream
+						if talking is detected.  If this value is set too
+						loose the user will hear themselves briefly each
+						time they begin talking until the dsp has time to
+						establish that they are in fact talking.
+						</para>
+						<para>
+						2. When talk detection AMI events are enabled, this value
+						determines when talking has begun which results in
+						an AMI event to fire.  If this value is set too tight
+						AMI events may be falsely triggered by variants in
+						room noise.
+						</para>
+						<para>
+						3. The drop_silence option depends on this value to determine
+						when the user's audio should be mixed into the bridge
+						after periods of silence.  If this value is too loose
+						the beginning of a user's speech will get cut off as they
+						transition from silence to talking.
+						</para>
+						<para>By default this value is 160 ms. Valid values are 1 through 2^31</para>
+					</description>
+				</configOption>
+				<configOption name="jitterbuffer">
+					<synopsis>Place a jitter buffer on the user's audio stream before audio mixing is performed</synopsis>
+					<description><para>
+						Enabling this option places a jitterbuffer on the user's audio stream
+						before audio mixing is performed.  This is highly recommended but will
+						add a slight delay to the audio.  This option is using the <literal>JITTERBUFFER</literal>
+						dialplan function's default adaptive jitterbuffer.  For a more fine tuned
+						jitterbuffer, disable this option and use the <literal>JITTERBUFFER</literal> dialplan function
+						on the user before entering the ConfBridge application.
+					</para></description>
+				</configOption>
+				<configOption name="template">
+					<synopsis>When using the CONFBRIDGE dialplan function, use a user profile as a template for creating a new temporary profile</synopsis>
+				</configOption>
+			</configObject>
+			<configObject name="bridge_profile">
+				<synopsis>A named profile to apply to specific bridges.</synopsis>
+				<description><para>ConfBridge bridges have a profile associated with them
+				that determine their options. A configuration section is determined to be a
+				<literal>bridge_profile</literal> when the <literal>type</literal> parameter has a value
+				of <literal>bridge</literal>.
+				</para></description>
+				<configOption name="type">
+					<synopsis>Define this configuration category as a bridge profile</synopsis>
+					<description><para>The type parameter determines how a context in the
+					configuration file is interpreted.</para>
+					<enumlist>
+						<enum name="user"><para>Configure the context as a <replaceable>user_profile</replaceable></para></enum>
+						<enum name="bridge"><para>Configure the context as a <replaceable>bridge_profile</replaceable></para></enum>
+						<enum name="menu"><para>Configure the context as a <replaceable>menu</replaceable></para></enum>
+					</enumlist>
+					</description>
+				</configOption>
+				<configOption name="jitterbuffer">
+					<synopsis>Place a jitter buffer on the conference's audio stream</synopsis>
+				</configOption>
+				<configOption name="internal_sample_rate">
+					<synopsis>Set the internal native sample rate for mixing the conference</synopsis>
+					<description><para>
+						Sets the internal native sample rate the
+						conference is mixed at.  This is set to automatically
+						adjust the sample rate to the best quality by default.
+						Other values can be anything from 8000-192000.  If a
+						sample rate is set that Asterisk does not support, the
+						closest sample rate Asterisk does support to the one requested
+						will be used.
+					</para></description>
+				</configOption>
+				<configOption name="mixing_interval">
+					<synopsis>Sets the internal mixing interval in milliseconds for the bridge</synopsis>
+					<description><para>
+						Sets the internal mixing interval in milliseconds for the bridge.  This
+						number reflects how tight or loose the mixing will be for the conference.
+						In order to improve performance a larger mixing interval such as 40ms may
+						be chosen.  Using a larger mixing interval comes at the cost of introducing
+						larger amounts of delay into the bridge.  Valid values here are 10, 20, 40,
+						or 80.
+					</para></description>
+				</configOption>
+				<configOption name="record_conference">
+					<synopsis>Record the conference starting with the first active user's entrance and ending with the last active user's exit</synopsis>
+					<description><para>
+						Records the conference call starting when the first user
+						enters the room, and ending when the last user exits the room.
+						The default recorded filename is
+						<filename>'confbridge-${name of conference bridge}-${start time}.wav</filename>
+						and the default format is 8khz slinear.  This file will be
+						located in the configured monitoring directory in asterisk.conf.
+					</para></description>
+				</configOption>
+				<configOption name="record_file" default="confbridge-${name of conference bridge}-${start time}.wav">
+					<synopsis>The filename of the conference recording</synopsis>
+					<description><para>
+						When record_conference is set to yes, the specific name of the
+						record file can be set using this option.  Note that since multiple
+						conferences may use the same bridge profile, this may cause issues
+						depending on the configuration.  It is recommended to only use this
+						option dynamically with the <literal>CONFBRIDGE()</literal> dialplan function. This
+						allows the record name to be specified and a unique name to be chosen.
+						By default, the record_file is stored in Asterisk's spool/monitor directory
+						with a unique filename starting with the 'confbridge' prefix.
+					</para></description>
+				</configOption>
+				<configOption name="video_mode">
+					<synopsis>Sets how confbridge handles video distribution to the conference participants</synopsis>
+					<description><para>
+						Sets how confbridge handles video distribution to the conference participants.
+						Note that participants wanting to view and be the source of a video feed
+						_MUST_ be sharing the same video codec.  Also, using video in conjunction with
+						with the jitterbuffer currently results in the audio being slightly out of sync
+						with the video.  This is a result of the jitterbuffer only working on the audio
+						stream.  It is recommended to disable the jitterbuffer when video is used.</para>
+						<enumlist>
+							<enum name="none">
+								<para>No video sources are set by default in the conference. It is still
+								possible for a user to be set as a video source via AMI or DTMF action
+								at any time.</para>
+							</enum>
+							<enum name="follow_talker">
+								<para>The video feed will follow whoever is talking and providing video.</para>
+							</enum>
+							<enum name="last_marked">
+								<para>The last marked user to join the conference with video capabilities
+								will be the single source of video distributed to all participants.
+								If multiple marked users are capable of video, the last one to join
+								is always the source, when that user leaves it goes to the one who
+								joined before them.</para>
+							</enum>
+							<enum name="first_marked">
+								<para>The first marked user to join the conference with video capabilities
+								is the single source of video distribution among all participants. If
+								that user leaves, the marked user to join after them becomes the source.</para>
+							</enum>
+						</enumlist>
+					</description>
+				</configOption>
+				<configOption name="max_members">
+					<synopsis>Limit the maximum number of participants for a single conference</synopsis>
+					<description><para>
+						This option limits the number of participants for a single
+						conference to a specific number.  By default conferences
+						have no participant limit. After the limit is reached, the
+						conference will be locked until someone leaves.  Note however
+						that an Admin user will always be alowed to join the conference
+						regardless if this limit is reached or not.
+					</para></description>
+				</configOption>
+				<configOption name="^sound_">
+					<synopsis>Override the various conference bridge sound files</synopsis>
+					<description><para>
+						All sounds in the conference are customizable using the bridge profile options below.
+						Simply state the option followed by the filename or full path of the filename after
+						the option.  Example: <literal>sound_had_joined=conf-hasjoin</literal>  This will play the <literal>conf-hasjoin</literal>
+						sound file found in the sounds directory when announcing someone's name is joining the
+						conference.</para>
+						<enumlist>
+							<enum name="sound_join"><para>The sound played to everyone when someone enters the conference.</para></enum>
+							<enum name="sound_leave"><para>The sound played to everyone when someone leaves the conference.</para></enum>
+							<enum name="sound_has_joined"><para>The sound played before announcing someone's name has
+										joined the conference. This is used for user intros.
+										Example <literal>"_____ has joined the conference"</literal></para></enum>
+							<enum name="sound_has_left"><para>The sound played when announcing someone's name has
+										left the conference. This is used for user intros.
+										Example <literal>"_____ has left the conference"</literal></para></enum>
+							<enum name="sound_kicked"><para>The sound played to a user who has been kicked from the conference.</para></enum>
+							<enum name="sound_muted"><para>The sound played when the mute option it toggled on.</para></enum>
+							<enum name="sound_unmuted"><para>The sound played when the mute option it toggled off.</para></enum>
+							<enum name="sound_only_person"><para>The sound played when the user is the only person in the conference.</para></enum>
+							<enum name="sound_only_one"><para>The sound played to a user when there is only one other
+										person is in the conference.</para></enum>
+							<enum name="sound_there_are"><para>The sound played when announcing how many users there
+										are in a conference.</para></enum>
+							<enum name="sound_other_in_party"><para>This file is used in conjunction with <literal>sound_there_are</literal>
+										when announcing how many users there are in the conference.
+										The sounds are stringed together like this.
+										<literal>"sound_there_are" ${number of participants} "sound_other_in_party"</literal></para></enum>
+							<enum name="sound_place_into_conference"><para>The sound played when someone is placed into the conference
+										after waiting for a marked user.</para></enum>
+							<enum name="sound_wait_for_leader"><para>The sound played when a user is placed into a conference that
+										can not start until a marked user enters.</para></enum>
+							<enum name="sound_leader_has_left"><para>The sound played when the last marked user leaves the conference.</para></enum>
+							<enum name="sound_get_pin"><para>The sound played when prompting for a conference pin number.</para></enum>

[... 3587 lines stripped ...]



More information about the svn-commits mailing list