[svn-commits] kmoore: branch kmoore/cel_cleanup r392831 - in /team/kmoore/cel_cleanup: ./ a...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Tue Jun 25 08:11:02 CDT 2013


Author: kmoore
Date: Tue Jun 25 08:11:00 2013
New Revision: 392831

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=392831
Log:
Resolve merge conflict

Modified:
    team/kmoore/cel_cleanup/   (props changed)
    team/kmoore/cel_cleanup/apps/app_stasis.c
    team/kmoore/cel_cleanup/channels/chan_motif.c
    team/kmoore/cel_cleanup/doc/appdocsxml.dtd
    team/kmoore/cel_cleanup/main/cdr.c
    team/kmoore/cel_cleanup/main/cel.c
    team/kmoore/cel_cleanup/main/config_options.c
    team/kmoore/cel_cleanup/main/devicestate.c
    team/kmoore/cel_cleanup/main/features_config.c
    team/kmoore/cel_cleanup/main/http.c
    team/kmoore/cel_cleanup/main/manager.c
    team/kmoore/cel_cleanup/main/named_acl.c
    team/kmoore/cel_cleanup/main/parking.c
    team/kmoore/cel_cleanup/main/presencestate.c
    team/kmoore/cel_cleanup/main/sorcery.c
    team/kmoore/cel_cleanup/res/parking/parking_bridge.c
    team/kmoore/cel_cleanup/res/res_calendar.c
    team/kmoore/cel_cleanup/res/res_chan_stats.c
    team/kmoore/cel_cleanup/res/res_stasis.c
    team/kmoore/cel_cleanup/res/res_stasis_answer.c
    team/kmoore/cel_cleanup/res/res_stasis_bridge_add.c
    team/kmoore/cel_cleanup/res/res_stasis_http.c
    team/kmoore/cel_cleanup/res/res_stasis_http_asterisk.c
    team/kmoore/cel_cleanup/res/res_stasis_http_bridges.c
    team/kmoore/cel_cleanup/res/res_stasis_http_channels.c
    team/kmoore/cel_cleanup/res/res_stasis_http_endpoints.c
    team/kmoore/cel_cleanup/res/res_stasis_http_events.c
    team/kmoore/cel_cleanup/res/res_stasis_http_playback.c
    team/kmoore/cel_cleanup/res/res_stasis_http_recordings.c
    team/kmoore/cel_cleanup/res/res_stasis_http_sounds.c
    team/kmoore/cel_cleanup/res/res_stasis_json_asterisk.c
    team/kmoore/cel_cleanup/res/res_stasis_json_bridges.c
    team/kmoore/cel_cleanup/res/res_stasis_json_channels.c
    team/kmoore/cel_cleanup/res/res_stasis_json_endpoints.c
    team/kmoore/cel_cleanup/res/res_stasis_json_events.c
    team/kmoore/cel_cleanup/res/res_stasis_json_playback.c
    team/kmoore/cel_cleanup/res/res_stasis_json_recordings.c
    team/kmoore/cel_cleanup/res/res_stasis_json_sounds.c
    team/kmoore/cel_cleanup/res/res_stasis_playback.c
    team/kmoore/cel_cleanup/res/res_stasis_test.c
    team/kmoore/cel_cleanup/res/res_stasis_websocket.c
    team/kmoore/cel_cleanup/res/res_statsd.c
    team/kmoore/cel_cleanup/res/stasis_json/resource_sounds.h
    team/kmoore/cel_cleanup/rest-api-templates/res_stasis_http_resource.c.mustache
    team/kmoore/cel_cleanup/rest-api-templates/res_stasis_json_resource.c.mustache
    team/kmoore/cel_cleanup/tests/test_endpoints.c
    team/kmoore/cel_cleanup/tests/test_stasis_endpoints.c

Propchange: team/kmoore/cel_cleanup/
------------------------------------------------------------------------------
    automerge = *

Propchange: team/kmoore/cel_cleanup/
------------------------------------------------------------------------------
Binary property 'branch-11-merged' - no diff available.

Propchange: team/kmoore/cel_cleanup/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Tue Jun 25 08:11:00 2013
@@ -1,1 +1,1 @@
-/trunk:1-392704
+/trunk:1-392830

Modified: team/kmoore/cel_cleanup/apps/app_stasis.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/apps/app_stasis.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/apps/app_stasis.c (original)
+++ team/kmoore/cel_cleanup/apps/app_stasis.c Tue Jun 25 08:11:00 2013
@@ -106,9 +106,7 @@
 	return r;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY,
-	AST_MODFLAG_DEFAULT,
-	"Stasis dialplan application",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Stasis dialplan application",
 	.load = load_module,
 	.unload = unload_module,
 	.nonoptreq = "res_stasis",

Modified: team/kmoore/cel_cleanup/channels/chan_motif.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/channels/chan_motif.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/channels/chan_motif.c (original)
+++ team/kmoore/cel_cleanup/channels/chan_motif.c Tue Jun 25 08:11:00 2013
@@ -2711,9 +2711,9 @@
 	aco_option_register_custom(&cfg_info, "connection", ACO_EXACT, endpoint_options, NULL, custom_connection_handler, 0);
 	aco_option_register_custom(&cfg_info, "transport", ACO_EXACT, endpoint_options, NULL, custom_transport_handler, 0);
 	aco_option_register(&cfg_info, "maxicecandidates", ACO_EXACT, endpoint_options, DEFAULT_MAX_ICE_CANDIDATES, OPT_UINT_T, PARSE_DEFAULT,
-			    FLDSET(struct jingle_endpoint, maxicecandidates));
+			    FLDSET(struct jingle_endpoint, maxicecandidates), DEFAULT_MAX_ICE_CANDIDATES);
 	aco_option_register(&cfg_info, "maxpayloads", ACO_EXACT, endpoint_options, DEFAULT_MAX_PAYLOADS, OPT_UINT_T, PARSE_DEFAULT,
-			    FLDSET(struct jingle_endpoint, maxpayloads));
+			    FLDSET(struct jingle_endpoint, maxpayloads), DEFAULT_MAX_PAYLOADS);
 
 	ast_format_cap_add_all_by_type(jingle_tech.capabilities, AST_FORMAT_TYPE_AUDIO);
 
@@ -2764,6 +2764,8 @@
 static int unload_module(void)
 {
 	ast_channel_unregister(&jingle_tech);
+	ast_format_cap_destroy(jingle_tech.capabilities);
+	jingle_tech.capabilities = NULL;
 	ast_rtp_glue_unregister(&jingle_rtp_glue);
 	ast_sched_context_destroy(sched);
 	aco_info_destroy(&cfg_info);

Modified: team/kmoore/cel_cleanup/doc/appdocsxml.dtd
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/doc/appdocsxml.dtd?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/doc/appdocsxml.dtd (original)
+++ team/kmoore/cel_cleanup/doc/appdocsxml.dtd Tue Jun 25 08:11:00 2013
@@ -71,7 +71,7 @@
   <!ELEMENT see-also (ref|xi:include)*>
 
   <!ELEMENT ref (#PCDATA)>
-  <!ATTLIST ref type (application|function|astcli|link|manpage|filename|agi|manager|managerEvent) #REQUIRED>
+  <!ATTLIST ref type (application|function|astcli|link|manpage|filename|agi|manager|managerEvent|configOption) #REQUIRED>
   <!ATTLIST ref module CDATA #IMPLIED>
 
   <!ELEMENT synopsis (#PCDATA)>

Modified: team/kmoore/cel_cleanup/main/cdr.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/main/cdr.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/main/cdr.c (original)
+++ team/kmoore/cel_cleanup/main/cdr.c Tue Jun 25 08:11:00 2013
@@ -3514,7 +3514,6 @@
 	ao2_callback(active_cdrs_by_channel, OBJ_NODATA, cdr_object_dispatch_all_cb,
 		NULL);
 	finalize_batch_mode();
-	aco_info_destroy(&cfg_info);
 	ast_cli_unregister(&cli_status);
 	ast_cli_unregister(&cli_debug);
 	ast_sched_context_destroy(sched);
@@ -3522,6 +3521,12 @@
 	ast_free(batch);
 	batch = NULL;
 
+	channel_subscription = stasis_unsubscribe_and_join(channel_subscription);
+	bridge_subscription = stasis_unsubscribe_and_join(bridge_subscription);
+	stasis_message_router_unsubscribe_and_join(stasis_router);
+	aco_info_destroy(&cfg_info);
+	ao2_global_obj_release(module_configs);
+
 	ao2_ref(active_cdrs_by_channel, -1);
 	ao2_ref(active_cdrs_by_bridge, -1);
 }

Modified: team/kmoore/cel_cleanup/main/cel.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/main/cel.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/main/cel.c (original)
+++ team/kmoore/cel_cleanup/main/cel.c Tue Jun 25 08:11:00 2013
@@ -1435,17 +1435,22 @@
 
 	switch (event_type) {
 	case AST_CEL_USER_DEFINED:
-	{
-		const char *event = ast_json_string_get(ast_json_object_get(event_details, "event"));
-		const char *extra = ast_json_string_get(ast_json_object_get(event_details, "extra"));
-		report_event_snapshot(obj->snapshot, event_type, event, extra, NULL);
+		{
+			const char *event = ast_json_string_get(ast_json_object_get(event_details, "event"));
+			const char *extra = ast_json_string_get(ast_json_object_get(event_details, "extra"));
+			report_event_snapshot(obj->snapshot, event_type, event, extra, NULL);
+			break;
+		}
+	default:
+		ast_log(LOG_ERROR, "Unhandled %s event blob\n", ast_cel_get_type_name(event_type));
 		break;
 	}
-	}
 }
 
 static void ast_cel_engine_term(void)
 {
+	aco_info_destroy(&cel_cfg_info);
+	ao2_global_obj_release(cel_configs);
 	stasis_message_router_unsubscribe_and_join(cel_state_router);
 	cel_state_router = NULL;
 	ao2_cleanup(cel_aggregation_topic);
@@ -1456,11 +1461,13 @@
 	cel_bridge_forwarder = stasis_unsubscribe_and_join(cel_bridge_forwarder);
 	cel_parking_forwarder = stasis_unsubscribe_and_join(cel_parking_forwarder);
 	cel_cel_forwarder = stasis_unsubscribe_and_join(cel_cel_forwarder);
+	ao2_cleanup(bridge_primaries);
+	bridge_primaries = NULL;
+	ast_cli_unregister(&cli_status);
+	ao2_cleanup(cel_dialstatus_store);
+	cel_dialstatus_store = NULL;
 	ao2_cleanup(linkedids);
 	linkedids = NULL;
-	ast_cli_unregister(&cli_status);
-	ao2_cleanup(bridge_primaries);
-	bridge_primaries = NULL;
 	STASIS_MESSAGE_TYPE_CLEANUP(cel_generic_type);
 }
 

Modified: team/kmoore/cel_cleanup/main/config_options.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/main/config_options.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/main/config_options.c (original)
+++ team/kmoore/cel_cleanup/main/config_options.c Tue Jun 25 08:11:00 2013
@@ -186,14 +186,15 @@
 				|| xmldoc_update_config_option(types, info->module, opt->name, type->name, opt->default_val, opt->match_type == ACO_REGEX, opt->type)
 #endif /* AST_XML_DOCS */
 		) {
-			while (--idx) {
+			do {
 				ao2_unlink(types[idx]->internal->opts, opt);
-			}
+			} while (--idx);
 			return -1;
 		}
-		/* The container should hold the only ref to opt */
-		ao2_ref(opt, -1);
-	}
+	}
+	/* The container(s) should hold the only ref to opt */
+	ao2_ref(opt, -1);
+
 	return 0;
 }
 

Modified: team/kmoore/cel_cleanup/main/devicestate.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/main/devicestate.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/main/devicestate.c (original)
+++ team/kmoore/cel_cleanup/main/devicestate.c Tue Jun 25 08:11:00 2013
@@ -774,6 +774,7 @@
 
 static void devstate_cleanup(void)
 {
+	devstate_message_sub = stasis_unsubscribe_and_join(devstate_message_sub);
 	ao2_cleanup(device_state_topic_all);
 	device_state_topic_all = NULL;
 	device_state_topic_cached = stasis_caching_unsubscribe_and_join(device_state_topic_cached);

Modified: team/kmoore/cel_cleanup/main/features_config.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/main/features_config.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/main/features_config.c (original)
+++ team/kmoore/cel_cleanup/main/features_config.c Tue Jun 25 08:11:00 2013
@@ -26,8 +26,248 @@
 #include "asterisk/app.h"
 #include "asterisk/cli.h"
 
-/* BUGBUG XML Documentation is still needed for configuration options */
 /*** DOCUMENTATION
+	<configInfo name="features" language="en_US">
+		<synopsis>Features Configuration</synopsis>
+		<configFile name="features.conf">
+			<configObject name="globals">
+				<synopsis>
+				</synopsis>
+				<configOption name="featuredigittimeout" default="1000">
+					<synopsis>Milliseconds allowed between digit presses when entering a feature code.</synopsis>
+				</configOption>
+				<configOption name="courtesytone">
+					<synopsis>Sound to play when automon or automixmon is activated</synopsis>
+				</configOption>
+				<configOption name="transferdigittimeout" default="3000">
+					<synopsis>Milliseconds allowed between digit presses when dialing a transfer destination</synopsis>
+				</configOption>
+				<configOption name="atxfernoanswertimeout" default="15000">
+					<synopsis>Milliseconds to wait for attended transfer destination to answer</synopsis>
+				</configOption>
+				<configOption name="atxferdropcall" default="no">
+					<synopsis>Hang up the call entirely if the attended transfer fails</synopsis>
+					<description>
+						<para>When this option is set to <literal>no</literal>, then Asterisk will attempt to
+						re-call the transferrer if the call to the transfer target fails. If the call to the
+						transferrer fails, then Asterisk will wait <replaceable>atxferloopdelay</replaceable>
+						milliseconds and then attempt to dial the transfer target again. This process will
+						repeat until <replaceable>atxfercallbackretries</replaceable> attempts to re-call
+						the transferrer have occurred.</para>
+						<para>When this option is set to <literal>yes</literal>, then Asterisk will not attempt
+						to re-call the transferrer if the call to the transfer target fails. Asterisk will instead
+						hang up all channels involved in the transfer.</para>
+					</description>
+				</configOption>
+				<configOption name="atxferloopdelay" default="10000">
+					<synopsis>Milliseconds to wait between attempts to re-dial transfer destination</synopsis>
+					<see-also><ref type="configOption">atxferdropcall</ref></see-also>
+				</configOption>
+				<configOption name="atxfercallbackretries" default="2">
+					<synopsis>Number of times to re-attempt dialing a transfer destination</synopsis>
+					<see-also><ref type="configOption">atxferdropcall</ref></see-also>
+				</configOption>
+				<configOption name="xfersound" default="beep">
+					<synopsis>Sound to play to during transfer and transfer-like operations.</synopsis>
+					<description>
+						<para>This sound will play to the transferrer and transfer target channels when
+						an attended transfer completes. This sound is also played to channels when performing
+						an AMI <literal>Bridge</literal> action.</para>
+					</description>
+				</configOption>
+				<configOption name="xferfailsound" default="beeperr">
+					<synopsis>Sound to play to a transferee when a transfer fails</synopsis>
+				</configOption>
+				<configOption name="atxferabort" default="*1">
+					<synopsis>Digits to dial to abort an attended transfer attempt</synopsis>
+					<description>
+						<para>This option is only available to the transferrer during an attended
+						transfer operation. Aborting a transfer results in the transfer being cancelled and
+						the original parties in the call being re-bridged.</para>
+					</description>
+				</configOption>
+				<configOption name="atxfercomplete" default="*2">
+					<synopsis>Digits to dial to complete an attended transfer</synopsis>
+					<description>
+						<para>This option is only available to the transferrer during an attended
+						transfer operation. Completing the transfer with a DTMF sequence is functionally
+						equivalent to hanging up the transferrer channel during an attended transfer. The
+						result is that the transfer target and transferees are bridged.</para>
+					</description>
+				</configOption>
+				<configOption name="atxferthreeway" default="*3">
+					<synopsis>Digits to dial to change an attended transfer into a three-way call</synopsis>
+					<description>
+						<para>This option is only available to the transferrer during an attended
+						transfer operation. Pressing this DTMF sequence will result in the transferrer,
+						the transferees, and the transfer target all being in a single bridge together.</para>
+					</description>
+				</configOption>
+				<configOption name="pickupexten" default="*8">
+					<synopsis>Digits used for picking up ringing calls</synopsis>
+					<description>
+						<para>In order for the pickup attempt to be successful, the party attempting to
+						pick up the call must either have a <replaceable>namedpickupgroup</replaceable> in
+						common with a ringing party's <replaceable>namedcallgroup</replaceable> or must
+						have a <replaceable>pickupgroup</replaceable> in common with a ringing party's
+						<replaceable>callgroup</replaceable>.</para>
+					</description>
+				</configOption>
+				<configOption name="pickupsound">
+					<synopsis>Sound to play to picker when a call is picked up</synopsis>
+				</configOption>
+				<configOption name="pickupfailsound">
+					<synopsis>Sound to play to picker when a call cannot be picked up</synopsis>
+				</configOption>
+			</configObject>
+			<configObject name="featuremap">
+				<synopsis>DTMF options that can be triggered during bridged calls</synopsis>
+				<configOption name="atxfer">
+					<synopsis>DTMF sequence to initiate an attended transfer</synopsis>
+					<description>
+						<para>The transferee parties will be placed on hold and the
+						transferrer may dial an extension to reach a transfer target. During an
+						attended transfer, the transferrer may consult with the transfer target
+						before completing the transfer. Once the transferrer has hung up or pressed
+						the <replaceable>atxfercomplete</replaceable> DTMF sequence, then the transferees
+						and transfer target will be bridged.</para>
+					</description>
+				</configOption>
+				<configOption name="blindxfer" default="#">
+					<synopsis>DTMF sequence to initiate a blind transfer</synopsis>
+					<description>
+						<para>The transferee parties will be placed on hold and the
+						transferrer may dial an extension to reach a transfer target. During a
+						blind transfer, as soon as the transfer target is dialed, the transferrer
+						is hung up.</para>
+					</description>
+				</configOption>
+				<configOption name="disconnect" default="*">
+					<synopsis>DTMF sequence to disconnect the current call</synopsis>
+					<description>
+						<para>Entering this DTMF sequence will cause the bridge to end, no
+						matter the number of parties present</para>
+					</description>
+				</configOption>
+				<configOption name="parkcall">
+					<synopsis>DTMF sequence to park a call</synopsis>
+					<description>
+						<para>The parking lot used to park the call is determined by using either the
+						<replaceable>PARKINGLOT</replaceable> channel variable or a configured value on
+						the channel (provided by the channel driver) if the variable is not present. If
+						no configured value on the channel is present, then <literal>"default"</literal>
+						is used. The call is parked in the next available space in the parking lot.</para>
+					</description>
+				</configOption>
+				<configOption name="automon">
+					<synopsis>DTMF sequence to start or stop monitoring a call</synopsis>
+					<description>
+						<para>This will cause the channel that pressed the DTMF sequence
+						to be monitored by the <literal>Monitor</literal> application. The
+						format for the recording is determined by the <replaceable>TOUCH_MONITOR_FORMAT</replaceable>
+						channel variable. If this variable is not specified, then <literal>wav</literal> is the
+						default. The filename is constructed in the following manner:</para>
+							
+						<para>    prefix-timestamp-filename</para>
+
+						<para>where prefix is either the value of the <replaceable>TOUCH_MONITOR_PREFIX</replaceable>
+						channel variable or <literal>auto</literal> if the variable is not set. The timestamp
+						is a UNIX timestamp. The filename is either the value of the <replaceable>TOUCH_MONITOR</replaceable>
+						channel variable or the callerID of the channels if the variable is not set.</para>
+					</description>
+				</configOption>
+				<configOption name="automixmon">
+					<synopsis>DTMF sequence to start or stop mixmonitoring a call </synopsis>
+					<description>
+						<para>Operation of the automixmon is similar to the <literal> automon </literal>
+						feature, with the following exceptions:
+							<replaceable>TOUCH_MIXMONITOR</replaceable> is used in place of <replaceable>TOUCH_MONITOR</replaceable>
+							<replaceable>TOUCH_MIXMONITOR_FORMAT</replaceable> is used in place of <replaceable>TOUCH_MIXMONITOR</replaceable>
+							There is no equivalent for <replaceable>TOUCH_MONITOR_PREFIX</replaceable>. <literal>"auto"</literal> is always how the filename begins.</para>
+					</description>
+					<see-also><ref type="configOption">automon</ref></see-also>
+				</configOption>
+			</configObject>
+			<configObject name="applicationmap">
+				<synopsis>Section for defining custom feature invocations during a call</synopsis>
+				<description>
+					<para>The applicationmap is an area where new custom features can be created. Items
+					defined in the applicationmap are not automatically accessible to bridged parties. Access
+					to the individual items is controled using the <replaceable>DYNAMIC_FEATURES</replaceable> channel variable.
+					The <replaceable>DYNAMIC_FEATURES</replaceable> is a <literal>#</literal> separated list of
+					either applicationmap item names or featuregroup names.</para>
+				</description>
+				<configOption name="^.*$" regex="true">
+					<synopsis>A custom feature to invoke during a bridged call</synopsis>
+					<description>
+						<para>Each item listed here is a comma-separated list of parameters that determine
+						how a feature may be invoked during a call</para>
+						<para>    Example:</para>
+						<para>    eggs = *5,self,Playback(hello-world),default</para>
+						<para>This would create a feature called <literal>eggs</literal> that could be invoked
+						during a call by pressing the <literal>*5</literal>. The party that presses the DTMF
+						sequence would then trigger the <literal>Playback</literal> application to play the
+						<literal>hello-world</literal> file. The application invocation would happen on the
+						party that pressed the DTMF sequence since <literal>self</literal> is specified. The
+						other parties in the bridge would hear the <literal>default</literal> music on hold
+						class during the playback.</para>
+						<para>In addition to the syntax outlined in this documentation, a backwards-compatible alternative
+						is also allowed. The following applicationmap lines are functionally identical:</para>
+						<para>    eggs = *5,self,Playback(hello-world),default</para>
+						<para>    eggs = *5,self,Playback,hello-world,default</para>
+						<para>    eggs = *5,self,Playback,"hello-world",default</para>
+					</description>
+					<syntax argsep=",">
+						<parameter name="dtmf" required="true">
+							<para>The DTMF sequence used to trigger the option</para>
+						</parameter>
+						<parameter name="activate_on" required="true">
+							<para>The party that the feature will be invoked on</para>
+							<optionlist>
+								<option name="self"><para>Feature is invoked on party that presses the DTMF sequence</para></option>
+								<option name="peer"><para>Feature is invoked on other parties in the bridge</para></option>
+							</optionlist>
+						</parameter>
+						<parameter name="app" required="true">
+							<para>The dialplan application to run when the DTMF sequence is pressed</para>
+							<argument name="app_args" required="false">
+								<para>The arguments to the dialplan application to run</para>
+							</argument>
+						</parameter>
+						<parameter name="moh_class" required="false">
+							<para>Music on hold class to play to bridge participants that are not the target of the application invocation</para>
+						</parameter>
+					</syntax>
+				</configOption>
+			</configObject>
+			<configObject name="featuregroup">
+				<synopsis>Groupings of items from the applicationmap</synopsis>
+				<description>
+					<para>Feature groups allow for multiple applicationmap items to be
+					grouped together. Like with individual applicationmap items, feature groups
+					can be part of the <replaceable>DYNAMIC_FEATURES</replaceable> channel variable.
+					In addition to creating groupings, the feature group section allows for the
+					DTMF sequence used to invoke an applicationmap item to be overridden with
+					a different sequence.</para>
+				</description>
+				<configOption name="^.*$" regex="true">
+					<synopsis>Applicationmap item to place in the feature group</synopsis>
+					<description>
+						<para>Each item here must be a name of an item in the applicationmap. The
+						argument may either be a new DTMF sequence to use for the item or it
+						may be left blank in order to use the DTMF sequence specified in the
+						applicationmap. For example:</para>
+						<para>	eggs => *1</para>
+						<para>	bacon =></para>
+						<para>would result in the applicationmap items <literal>eggs</literal> and
+						<literal>bacon</literal> being in the featuregroup. The former would have its
+						default DTMF trigger overridden with <literal>*1</literal> and the latter would
+						have the DTMF value specified in the applicationmap.</para>
+					</description>
+				</configOption>
+			</configObject>
+		</configFile>
+	</configInfo>
 	<function name="FEATURE" language="en_US">
 		<synopsis>
 			Get or set a feature option on a channel.
@@ -37,21 +277,21 @@
 				<para>The allowed values are:</para>
 				<enumlist>
 					<enum name="inherit"><para>Inherit feature settings made in FEATURE or FEATUREMAP to child channels.</para></enum>
-					<enum name="featuredigittimeout"><para>Milliseconds allowed between digits when entering a feature code.</para></enum>
-					<enum name="transferdigittimeout"><para>Milliseconds allowed between digits when dialing a transfer destination</para></enum>
-					<enum name="atxfernoanswertimeout"><para>Milliseconds to wait for transfer destination to answer</para></enum>
-					<enum name="atxferdropcall"><para>Hang up the call entirely if the attended transfer fails</para></enum>
-					<enum name="atxferloopdelay"><para>Milliseconds to wait between attempts to re-dial transfer destination</para></enum>
-					<enum name="atxfercallbackretries"><para>Number of times to re-attempt dialing a transfer destination</para></enum>
-					<enum name="xfersound"><para>Sound to play to a transferee when a transfer completes</para></enum>
-					<enum name="xferfailsound"><para>Sound to play to a transferee when a transfer fails</para></enum>
-					<enum name="atxferabort"><para>Digits to dial to abort an attended transfer attempt</para></enum>
-					<enum name="atxfercomplete"><para>Digits to dial to complete an attended transfer</para></enum>
-					<enum name="atxferthreeway"><para>Digits to dial to change an attended transfer into a three-way call</para></enum>
-					<enum name="pickupexten"><para>Digits used for picking up ringing calls</para></enum>
-					<enum name="pickupsound"><para>Sound to play to picker when a call is picked up</para></enum>
-					<enum name="pickupfailsound"><para>Sound to play to picker when a call cannot be picked up</para></enum>
-					<enum name="courtesytone"><para>Sound to play when automon or automixmon is activated</para></enum>
+					<enum name="featuredigittimeout"><para><xi:include xpointer="xpointer(/docs/configInfo[@name='features']/configFile[@name='features.conf']/configObject[@name='globals']/configOption[@name='featuredigittimeout']/synopsis/text())" /></para></enum>
+					<enum name="transferdigittimeout"><para><xi:include xpointer="xpointer(/docs/configInfo[@name='features']/configFile[@name='features.conf']/configObject[@name='globals']/configOption[@name='transferdigittimeout']/synopsis/text())" /></para></enum>
+					<enum name="atxfernoanswertimeout"><para><xi:include xpointer="xpointer(/docs/configInfo[@name='features']/configFile[@name='features.conf']/configObject[@name='globals']/configOption[@name='atxfernoanswertimeout']/synopsis/text())" /></para></enum>
+					<enum name="atxferdropcall"><para><xi:include xpointer="xpointer(/docs/configInfo[@name='features']/configFile[@name='features.conf']/configObject[@name='globals']/configOption[@name='atxferdropcall']/synopsis/text())" /></para></enum>
+					<enum name="atxferloopdelay"><para><xi:include xpointer="xpointer(/docs/configInfo[@name='features']/configFile[@name='features.conf']/configObject[@name='globals']/configOption[@name='atxferloopdelay']/synopsis/text())" /></para></enum>
+					<enum name="atxfercallbackretries"><para><xi:include xpointer="xpointer(/docs/configInfo[@name='features']/configFile[@name='features.conf']/configObject[@name='globals']/configOption[@name='atxfercallbackretries']/synopsis/text())" /></para></enum>
+					<enum name="xfersound"><para><xi:include xpointer="xpointer(/docs/configInfo[@name='features']/configFile[@name='features.conf']/configObject[@name='globals']/configOption[@name='xfersound']/synopsis/text())" /></para></enum>
+					<enum name="xferfailsound"><para><xi:include xpointer="xpointer(/docs/configInfo[@name='features']/configFile[@name='features.conf']/configObject[@name='globals']/configOption[@name='xferfailsound']/synopsis/text())" /></para></enum>
+					<enum name="atxferabort"><para><xi:include xpointer="xpointer(/docs/configInfo[@name='features']/configFile[@name='features.conf']/configObject[@name='globals']/configOption[@name='atxferabort']/synopsis/text())" /></para></enum>
+					<enum name="atxfercomplete"><para><xi:include xpointer="xpointer(/docs/configInfo[@name='features']/configFile[@name='features.conf']/configObject[@name='globals']/configOption[@name='atxfercomplete']/synopsis/text())" /></para></enum>
+					<enum name="atxferthreeway"><para><xi:include xpointer="xpointer(/docs/configInfo[@name='features']/configFile[@name='features.conf']/configObject[@name='globals']/configOption[@name='atxferthreeway']/synopsis/text())" /></para></enum>
+					<enum name="pickupexten"><para><xi:include xpointer="xpointer(/docs/configInfo[@name='features']/configFile[@name='features.conf']/configObject[@name='globals']/configOption[@name='pickupexten']/synopsis/text())" /></para></enum>
+					<enum name="pickupsound"><para><xi:include xpointer="xpointer(/docs/configInfo[@name='features']/configFile[@name='features.conf']/configObject[@name='globals']/configOption[@name='pickupsound']/synopsis/text())" /></para></enum>
+					<enum name="pickupfailsound"><para><xi:include xpointer="xpointer(/docs/configInfo[@name='features']/configFile[@name='features.conf']/configObject[@name='globals']/configOption[@name='pickupfailsound']/synopsis/text())" /></para></enum>
+					<enum name="courtesytone"><para><xi:include xpointer="xpointer(/docs/configInfo[@name='features']/configFile[@name='features.conf']/configObject[@name='globals']/configOption[@name='courtesytone']/synopsis/text())" /></para></enum>
 				</enumlist>
 			</parameter>
 		</syntax>
@@ -97,6 +337,7 @@
  ***/
 /*! Default general options */
 #define DEFAULT_FEATURE_DIGIT_TIMEOUT               1000
+#define DEFAULT_COURTESY_TONE                       ""
 
 /*! Default xfer options */
 #define DEFAULT_TRANSFER_DIGIT_TIMEOUT              3000

Modified: team/kmoore/cel_cleanup/main/http.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/main/http.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/main/http.c (original)
+++ team/kmoore/cel_cleanup/main/http.c Tue Jun 25 08:11:00 2013
@@ -1040,7 +1040,7 @@
 	struct http_uri_redirect *redirect;
 	struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
 	uint32_t bindport = DEFAULT_PORT;
-	struct ast_sockaddr *addrs = NULL;
+	RAII_VAR(struct ast_sockaddr *, addrs, NULL, ast_free);
 	int num_addrs = 0;
 	int http_tls_was_enabled = 0;
 

Modified: team/kmoore/cel_cleanup/main/manager.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/main/manager.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/main/manager.c (original)
+++ team/kmoore/cel_cleanup/main/manager.c Tue Jun 25 08:11:00 2013
@@ -7659,6 +7659,7 @@
 		ast_manager_unregister("ModuleCheck");
 		ast_manager_unregister("AOCMessage");
 		ast_manager_unregister("Filter");
+		ast_manager_unregister("BlindTransfer");
 		ast_custom_function_unregister(&managerclient_function);
 		ast_cli_unregister_multiple(cli_manager, ARRAY_LEN(cli_manager));
 	}

Modified: team/kmoore/cel_cleanup/main/named_acl.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/main/named_acl.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/main/named_acl.c (original)
+++ team/kmoore/cel_cleanup/main/named_acl.c Tue Jun 25 08:11:00 2013
@@ -360,21 +360,6 @@
 /*! \brief Message type for named ACL changes */
 STASIS_MESSAGE_TYPE_DEFN(ast_named_acl_change_type);
 
-static void acl_stasis_cleanup(void)
-{
-	STASIS_MESSAGE_TYPE_CLEANUP(ast_named_acl_change_type);
-}
-
-/*!
- * \internal
- * \brief Initialize Named ACL related stasis topics/messages
- */
-static void ast_acl_stasis_init(void)
-{
-	ast_register_cleanup(acl_stasis_cleanup);
-	STASIS_MESSAGE_TYPE_INIT(ast_named_acl_change_type);
-}
-
 /*!
  * \internal
  * \brief Sends a stasis message corresponding to a given named ACL that has changed or
@@ -580,15 +565,24 @@
 	AST_CLI_DEFINE(handle_show_named_acl_cmd, "Show a named ACL or list all named ACLs"),
 };
 
+static void named_acl_cleanup(void)
+{
+	STASIS_MESSAGE_TYPE_CLEANUP(ast_named_acl_change_type);
+	aco_info_destroy(&cfg_info);
+	ao2_global_obj_release(globals);
+}
+
 int ast_named_acl_init()
 {
 	ast_cli_register_multiple(cli_named_acl, ARRAY_LEN(cli_named_acl));
+
+	STASIS_MESSAGE_TYPE_INIT(ast_named_acl_change_type);
+
+	ast_register_cleanup(named_acl_cleanup);
 
 	if (aco_info_init(&cfg_info)) {
 		return 0;
 	}
-
-	ast_acl_stasis_init();
 
 	/* Register the per level options. */
 	aco_option_register(&cfg_info, "permit", ACO_EXACT, named_acl_types, NULL, OPT_ACL_T, 1, FLDSET(struct named_acl, ha));

Modified: team/kmoore/cel_cleanup/main/parking.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/main/parking.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/main/parking.c (original)
+++ team/kmoore/cel_cleanup/main/parking.c Tue Jun 25 08:11:00 2013
@@ -80,6 +80,7 @@
 
 	ao2_cleanup(park_obj->parkee);
 	ao2_cleanup(park_obj->parker);
+	ao2_cleanup(park_obj->retriever);
 	ast_string_field_free_memory(park_obj);
 }
 

Modified: team/kmoore/cel_cleanup/main/presencestate.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/main/presencestate.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/main/presencestate.c (original)
+++ team/kmoore/cel_cleanup/main/presencestate.c Tue Jun 25 08:11:00 2013
@@ -314,8 +314,7 @@
 {
 	ao2_cleanup(presence_state_topic_all);
 	presence_state_topic_all = NULL;
-	ao2_cleanup(presence_state_topic_cached);
-	presence_state_topic_cached = NULL;
+	presence_state_topic_cached = stasis_caching_unsubscribe_and_join(presence_state_topic_cached);
 	STASIS_MESSAGE_TYPE_CLEANUP(ast_presence_state_message_type);
 }
 

Modified: team/kmoore/cel_cleanup/main/sorcery.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/main/sorcery.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/main/sorcery.c (original)
+++ team/kmoore/cel_cleanup/main/sorcery.c Tue Jun 25 08:11:00 2013
@@ -253,6 +253,19 @@
 	return !strcmp(wizard1->name, flags & OBJ_KEY ? name : wizard2->name) ? CMP_MATCH | CMP_STOP : 0;
 }
 
+/*! \brief Cleanup function */
+static void sorcery_exit(void)
+{
+	ast_threadpool_shutdown(threadpool);
+	threadpool = NULL;
+}
+
+/*! \brief Cleanup function for graceful shutdowns */
+static void sorcery_cleanup(void)
+{
+	ao2_cleanup(wizards);
+}
+
 int ast_sorcery_init(void)
 {
 	struct ast_threadpool_options options = {
@@ -265,6 +278,7 @@
 	ast_assert(wizards == NULL);
 
 	if (!(threadpool = ast_threadpool_create("Sorcery", NULL, &options))) {
+		threadpool = NULL;
 		return -1;
 	}
 
@@ -272,6 +286,9 @@
 		ast_threadpool_shutdown(threadpool);
 		return -1;
 	}
+
+	ast_register_cleanup(sorcery_cleanup);
+	ast_register_atexit(sorcery_exit);
 
 	return 0;
 }

Modified: team/kmoore/cel_cleanup/res/parking/parking_bridge.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/res/parking/parking_bridge.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/res/parking/parking_bridge.c (original)
+++ team/kmoore/cel_cleanup/res/parking/parking_bridge.c Tue Jun 25 08:11:00 2013
@@ -66,10 +66,8 @@
 	struct parked_user *pu = obj;
 
 	ao2_cleanup(pu->lot);
-	pu->lot = NULL;
-
 	ao2_cleanup(pu->parker);
-	pu->parker = NULL;
+	ao2_cleanup(pu->retriever);
 }
 
 /*!

Modified: team/kmoore/cel_cleanup/res/res_calendar.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/res/res_calendar.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/res/res_calendar.c (original)
+++ team/kmoore/cel_cleanup/res/res_calendar.c Tue Jun 25 08:11:00 2013
@@ -1819,6 +1819,8 @@
 
 	/* Remove all calendars */
 	ao2_callback(calendars, OBJ_UNLINK | OBJ_NODATA | OBJ_MULTIPLE, NULL, NULL);
+	ao2_cleanup(calendars);
+	calendars = NULL;
 
 	ast_mutex_lock(&refreshlock);
 	module_unloading = 1;

Modified: team/kmoore/cel_cleanup/res/res_chan_stats.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/res/res_chan_stats.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/res/res_chan_stats.c (original)
+++ team/kmoore/cel_cleanup/res/res_chan_stats.c Tue Jun 25 08:11:00 2013
@@ -179,9 +179,7 @@
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY,
-	AST_MODFLAG_DEFAULT,
-	"Example of how to use Stasis",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Example of how to use Stasis",
 	.load = load_module,
 	.unload = unload_module,
 	.nonoptreq = "res_statsd"

Modified: team/kmoore/cel_cleanup/res/res_stasis.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/res/res_stasis.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/res/res_stasis.c (original)
+++ team/kmoore/cel_cleanup/res/res_stasis.c Tue Jun 25 08:11:00 2013
@@ -1018,7 +1018,7 @@
 	return r;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS,
-		"Stasis application support",
-		.load = load_module,
-		.unload = unload_module);
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Stasis application support",
+	.load = load_module,
+	.unload = unload_module,
+	);

Modified: team/kmoore/cel_cleanup/res/res_stasis_answer.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/cel_cleanup/res/res_stasis_answer.c?view=diff&rev=392831&r1=392830&r2=392831
==============================================================================
--- team/kmoore/cel_cleanup/res/res_stasis_answer.c (original)
+++ team/kmoore/cel_cleanup/res/res_stasis_answer.c Tue Jun 25 08:11:00 2013
@@ -75,8 +75,7 @@
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS,
-	"Stasis application answer support",

[... 460 lines stripped ...]



More information about the svn-commits mailing list