Author: dlee
Date: Mon Jul 29 10:46:34 2013
New Revision: 395671

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=395671
Log:
Merged revisions 394278-395367 from http://svn.asterisk.org/svn/asterisk/trunk

Added:
    team/dlee/stasis-cache-split/apps/app_agent_pool.c
      - copied unchanged from r395367, trunk/apps/app_agent_pool.c
    team/dlee/stasis-cache-split/channels/chan_bridge_media.c
      - copied unchanged from r395367, trunk/channels/chan_bridge_media.c
    team/dlee/stasis-cache-split/channels/chan_dahdi.h
      - copied unchanged from r395367, trunk/channels/chan_dahdi.h
    team/dlee/stasis-cache-split/channels/dahdi/
      - copied from r395367, trunk/channels/dahdi/
    team/dlee/stasis-cache-split/configs/safe_asterisk.conf.sample
      - copied unchanged from r395367, trunk/configs/safe_asterisk.conf.sample
    team/dlee/stasis-cache-split/include/asterisk/bridging_after.h
      - copied unchanged from r395367, trunk/include/asterisk/bridging_after.h
    team/dlee/stasis-cache-split/include/asterisk/bridging_channel.h
      - copied unchanged from r395367, trunk/include/asterisk/bridging_channel.h
    team/dlee/stasis-cache-split/include/asterisk/bridging_channel_internal.h
      - copied unchanged from r395367, 
trunk/include/asterisk/bridging_channel_internal.h
    team/dlee/stasis-cache-split/include/asterisk/bridging_internal.h
      - copied unchanged from r395367, 
trunk/include/asterisk/bridging_internal.h
    team/dlee/stasis-cache-split/main/bridging_after.c
      - copied unchanged from r395367, trunk/main/bridging_after.c
    team/dlee/stasis-cache-split/main/bridging_channel.c
      - copied unchanged from r395367, trunk/main/bridging_channel.c
    team/dlee/stasis-cache-split/res/res_sip/config_global.c
      - copied unchanged from r395367, trunk/res/res_sip/config_global.c
    team/dlee/stasis-cache-split/res/res_sip/config_system.c
      - copied unchanged from r395367, trunk/res/res_sip/config_system.c
    team/dlee/stasis-cache-split/res/res_sip/sip_global_headers.c
      - copied unchanged from r395367, trunk/res/res_sip/sip_global_headers.c
Removed:
    team/dlee/stasis-cache-split/channels/chan_agent.c
Modified:
    team/dlee/stasis-cache-split/   (props changed)
    team/dlee/stasis-cache-split/CHANGES
    team/dlee/stasis-cache-split/Makefile
    team/dlee/stasis-cache-split/UPGRADE.txt
    team/dlee/stasis-cache-split/addons/chan_mobile.c
    team/dlee/stasis-cache-split/apps/app_bridgewait.c
    team/dlee/stasis-cache-split/apps/app_celgenuserevent.c
    team/dlee/stasis-cache-split/apps/app_confbridge.c
    team/dlee/stasis-cache-split/apps/app_dial.c
    team/dlee/stasis-cache-split/apps/app_directed_pickup.c
    team/dlee/stasis-cache-split/apps/app_meetme.c
    team/dlee/stasis-cache-split/apps/app_queue.c
    team/dlee/stasis-cache-split/apps/app_voicemail.c
    team/dlee/stasis-cache-split/apps/confbridge/conf_chan_announce.c
    team/dlee/stasis-cache-split/apps/confbridge/conf_chan_record.c
    team/dlee/stasis-cache-split/apps/confbridge/confbridge_manager.c
    team/dlee/stasis-cache-split/bridges/bridge_builtin_features.c
    team/dlee/stasis-cache-split/bridges/bridge_builtin_interval_features.c
    team/dlee/stasis-cache-split/bridges/bridge_holding.c
    team/dlee/stasis-cache-split/bridges/bridge_native_rtp.c
    team/dlee/stasis-cache-split/bridges/bridge_simple.c
    team/dlee/stasis-cache-split/bridges/bridge_softmix.c
    team/dlee/stasis-cache-split/channels/Makefile
    team/dlee/stasis-cache-split/channels/chan_dahdi.c
    team/dlee/stasis-cache-split/channels/chan_gulp.c
    team/dlee/stasis-cache-split/channels/chan_mgcp.c
    team/dlee/stasis-cache-split/channels/chan_sip.c
    team/dlee/stasis-cache-split/channels/iax2/parser.c
    team/dlee/stasis-cache-split/channels/sig_analog.c
    team/dlee/stasis-cache-split/configs/agents.conf.sample
    team/dlee/stasis-cache-split/configs/iax.conf.sample
    team/dlee/stasis-cache-split/configs/indications.conf.sample
    team/dlee/stasis-cache-split/configs/queues.conf.sample
    team/dlee/stasis-cache-split/contrib/realtime/postgresql/realtime.sql
    team/dlee/stasis-cache-split/contrib/scripts/install_prereq
    team/dlee/stasis-cache-split/contrib/scripts/safe_asterisk
    team/dlee/stasis-cache-split/funcs/func_channel.c
    team/dlee/stasis-cache-split/funcs/func_strings.c
    team/dlee/stasis-cache-split/include/asterisk/astobj2.h
    team/dlee/stasis-cache-split/include/asterisk/audiohook.h
    team/dlee/stasis-cache-split/include/asterisk/bridging.h
    team/dlee/stasis-cache-split/include/asterisk/bridging_basic.h
    team/dlee/stasis-cache-split/include/asterisk/bridging_features.h
    team/dlee/stasis-cache-split/include/asterisk/bridging_roles.h
    team/dlee/stasis-cache-split/include/asterisk/bridging_technology.h
    team/dlee/stasis-cache-split/include/asterisk/cel.h
    team/dlee/stasis-cache-split/include/asterisk/channel.h
    team/dlee/stasis-cache-split/include/asterisk/config_options.h
    team/dlee/stasis-cache-split/include/asterisk/core_unreal.h
    team/dlee/stasis-cache-split/include/asterisk/features.h
    team/dlee/stasis-cache-split/include/asterisk/features_config.h
    team/dlee/stasis-cache-split/include/asterisk/logger.h
    team/dlee/stasis-cache-split/include/asterisk/res_sip.h
    team/dlee/stasis-cache-split/include/asterisk/res_sip_session.h
    team/dlee/stasis-cache-split/include/asterisk/stasis_app.h
    team/dlee/stasis-cache-split/include/asterisk/stasis_app_playback.h
    team/dlee/stasis-cache-split/include/asterisk/stasis_bridging.h
    team/dlee/stasis-cache-split/include/asterisk/stasis_channels.h
    team/dlee/stasis-cache-split/include/asterisk/stasis_message_router.h
    team/dlee/stasis-cache-split/include/asterisk/stasis_system.h
    team/dlee/stasis-cache-split/main/asterisk.c
    team/dlee/stasis-cache-split/main/asterisk.exports.in
    team/dlee/stasis-cache-split/main/audiohook.c
    team/dlee/stasis-cache-split/main/bridging.c
    team/dlee/stasis-cache-split/main/bridging_basic.c
    team/dlee/stasis-cache-split/main/bridging_roles.c
    team/dlee/stasis-cache-split/main/ccss.c
    team/dlee/stasis-cache-split/main/cdr.c
    team/dlee/stasis-cache-split/main/cel.c
    team/dlee/stasis-cache-split/main/channel.c
    team/dlee/stasis-cache-split/main/core_unreal.c
    team/dlee/stasis-cache-split/main/dial.c
    team/dlee/stasis-cache-split/main/dns.c
    team/dlee/stasis-cache-split/main/features.c
    team/dlee/stasis-cache-split/main/features_config.c
    team/dlee/stasis-cache-split/main/http.c
    team/dlee/stasis-cache-split/main/manager.c
    team/dlee/stasis-cache-split/main/manager_bridging.c
    team/dlee/stasis-cache-split/main/manager_channels.c
    team/dlee/stasis-cache-split/main/pbx.c
    team/dlee/stasis-cache-split/main/stasis_bridging.c
    team/dlee/stasis-cache-split/main/stasis_cache.c
    team/dlee/stasis-cache-split/main/stasis_channels.c
    team/dlee/stasis-cache-split/main/stasis_message_router.c
    team/dlee/stasis-cache-split/main/stasis_system.c
    team/dlee/stasis-cache-split/main/utils.c
    team/dlee/stasis-cache-split/res/parking/parking_bridge.c
    team/dlee/stasis-cache-split/res/parking/parking_bridge_features.c
    team/dlee/stasis-cache-split/res/parking/parking_manager.c
    team/dlee/stasis-cache-split/res/res_agi.c
    team/dlee/stasis-cache-split/res/res_http_websocket.c
    team/dlee/stasis-cache-split/res/res_mutestream.c
    team/dlee/stasis-cache-split/res/res_sip.c
    team/dlee/stasis-cache-split/res/res_sip.exports.in
    team/dlee/stasis-cache-split/res/res_sip/config_transport.c
    team/dlee/stasis-cache-split/res/res_sip/include/res_sip_private.h
    team/dlee/stasis-cache-split/res/res_sip/sip_configuration.c
    team/dlee/stasis-cache-split/res/res_sip/sip_distributor.c
    team/dlee/stasis-cache-split/res/res_sip/sip_options.c
    team/dlee/stasis-cache-split/res/res_sip_caller_id.c
    team/dlee/stasis-cache-split/res/res_sip_mwi.c
    team/dlee/stasis-cache-split/res/res_sip_one_touch_record_info.c
    team/dlee/stasis-cache-split/res/res_sip_pubsub.c
    team/dlee/stasis-cache-split/res/res_sip_refer.c
    team/dlee/stasis-cache-split/res/res_sip_sdp_rtp.c
    team/dlee/stasis-cache-split/res/res_sip_session.c
    team/dlee/stasis-cache-split/res/res_sip_session.exports.in
    team/dlee/stasis-cache-split/res/res_stasis.c
    team/dlee/stasis-cache-split/res/res_stasis_http.c
    team/dlee/stasis-cache-split/res/res_stasis_http_asterisk.c
    team/dlee/stasis-cache-split/res/res_stasis_http_bridges.c
    team/dlee/stasis-cache-split/res/res_stasis_http_channels.c
    team/dlee/stasis-cache-split/res/res_stasis_http_endpoints.c
    team/dlee/stasis-cache-split/res/res_stasis_http_playback.c
    team/dlee/stasis-cache-split/res/res_stasis_http_recordings.c
    team/dlee/stasis-cache-split/res/res_stasis_http_sounds.c
    team/dlee/stasis-cache-split/res/res_stasis_playback.c
    team/dlee/stasis-cache-split/res/stasis/app.c
    team/dlee/stasis-cache-split/res/stasis/app.h
    team/dlee/stasis-cache-split/res/stasis/control.c
    team/dlee/stasis-cache-split/res/stasis_http/ari_model_validators.c
    team/dlee/stasis-cache-split/res/stasis_http/ari_model_validators.h
    team/dlee/stasis-cache-split/res/stasis_http/ari_websockets.c
    team/dlee/stasis-cache-split/res/stasis_http/resource_bridges.c
    team/dlee/stasis-cache-split/res/stasis_http/resource_bridges.h
    team/dlee/stasis-cache-split/res/stasis_http/resource_channels.c
    team/dlee/stasis-cache-split/res/stasis_http/resource_channels.h
    
team/dlee/stasis-cache-split/rest-api-templates/res_stasis_http_resource.c.mustache
    team/dlee/stasis-cache-split/rest-api/api-docs/bridges.json
    team/dlee/stasis-cache-split/rest-api/api-docs/channels.json
    team/dlee/stasis-cache-split/rest-api/api-docs/playback.json
    team/dlee/stasis-cache-split/rest-api/api-docs/recordings.json
    team/dlee/stasis-cache-split/tests/test_app.c
    team/dlee/stasis-cache-split/tests/test_cdr.c
    team/dlee/stasis-cache-split/tests/test_cel.c
    team/dlee/stasis-cache-split/tests/test_stasis.c
    team/dlee/stasis-cache-split/tests/test_stasis_endpoints.c
    team/dlee/stasis-cache-split/tests/test_voicemail_api.c

Propchange: team/dlee/stasis-cache-split/
------------------------------------------------------------------------------
--- branch-11-blocked (original)
+++ branch-11-blocked Mon Jul 29 10:46:34 2013
@@ -1,1 +1,1 @@
-/branches/11:373240,375247,375702,385356
+/branches/11:373240,375247,375702,385356,395020

Propchange: team/dlee/stasis-cache-split/
------------------------------------------------------------------------------
Binary property 'branch-11-merged' - no diff available.

Propchange: team/dlee/stasis-cache-split/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Mon Jul 29 10:46:34 2013
@@ -1,1 +1,1 @@
-/trunk:1-394263
+/trunk:1-395367

Modified: team/dlee/stasis-cache-split/CHANGES
URL: 
http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/CHANGES?view=diff&rev=395671&r1=395670&r2=395671
==============================================================================
--- team/dlee/stasis-cache-split/CHANGES (original)
+++ team/dlee/stasis-cache-split/CHANGES Mon Jul 29 10:46:34 2013
@@ -14,10 +14,23 @@
 Applications
 ------------------
 
+AgentLogin
+------------------
+ * The application no longer does agent authentication.  The dialplan needs to
+   perform this function before running AgentLogin.  If the agent is already
+   logged in, dialplan will continue with the AGENT_STATUS channel variable
+   set to ALREADY_LOGGED_IN.
+
 AgentMonitorOutgoing
 ------------------
- * The 'c' option has been removed. It is not possible to modify the name of a
-   channel involved in a CDR.
+ * Application removed.  It was a holdover from when AgentCallbackLogin was
+   removed.
+
+ConfBridge
+------------------
+ * All participants in a bridge can now be kicked out of a conference room
+   by specifying the channel parameter as 'all' in the ConfBridge kick CLI
+   command, i.e., "confbridge kick <conference> all"
 
 ForkCDR
 ------------------
@@ -260,8 +273,8 @@
    of "CallerID" and "ConnectedID" to avoid confusion with similarly named
    parameters in the channel snapshot.
 
- * The "Agentlogin" and "Agentlogoff" events have been renamed "AgentLogin" and
-   "AgentLogoff" respectively.
+ * The AMI events "Agentlogin" and "Agentlogoff" have been renamed
+   "AgentLogin" and "AgentLogoff" respectively.
 
  * The "Channel" key used in the "AlarmClear", "Alarm", and "DNDState" has been
    renamed "DAHDIChannel" since it does not convey an Asterisk channel name.
@@ -281,6 +294,10 @@
    the Local channel. This affects the LocalBridge, LocalOptimizationBegin,
    and LocalOptimizationEnd events.
 
+ * The option 'allowmultiplelogin' can now be set or overriden in a particular
+   account. When set in the general context, it will act as the default
+   setting for defined accounts.
+
 AGI (Asterisk Gateway Interface)
 ------------------
  * The manager event AGIExec has been split into AGIExecStart and AGIExecEnd.
@@ -306,6 +323,27 @@
  * When a CDR is dispatched, user defined CDR variables from both parties are
    included in the resulting CDR. If both parties have the same variable, only
    the Party A value is provided.
+
+CEL (Channel Event Logging)
+------------------
+ * The 'extra' field of all CEL events that use it now consists of a JSON blob
+   with key/value pairs which are defined in the Asterisk 12 CEL documentation.
+
+ * AST_CEL_BLINDTRANSFER events now report the transferee bridge unique
+   identifier, extension, and context in a JSON blob as the extra string
+   instead of the transferee channel name as the peer.
+
+ * AST_CEL_ATTENDEDTRANSFER events now report the peer as NULL and additional
+   information in the 'extra' string as a JSON blob. For transfers that occur
+   between two bridged channels, the 'extra' JSON blob contains the primary
+   bridge unique identifier, the secondary channel name, and the secondary
+   bridge unique identifier. For transfers that occur between a bridged channel
+   and a channel running an app, the 'extra' JSON blob contains the primary
+   bridge unique identifier, the secondary channel name, and the app name.
+
+ * AST_CEL_LOCAL_OPTIMIZE events have been added to convey local channel
+   optimizations with the record occurring for the semi-one channel and
+   the semi-two channel name in the peer field.
 
 Features
 -------------------
@@ -453,6 +491,21 @@
    and pretending otherwise helps no one.
  * The AGENTUPDATECDR channel variable has also been removed, for the same
    reason as the updatecdr option.
+ * The driver is no longer a Data retrieval API data provider for the
+   AMI DataGet action.
+ * The endcall and enddtmf configuration options are removed.  Use the
+   dialplan function CHANNEL(dtmf-features) to set DTMF features on the agent
+   channel before calling AgentLogin.
+ * chan_agent is removed and replaced with AgentLogin and AgentRequest dialplan
+   applications.  Agents are connected with callers using the new AgentRequest
+   dialplan application.  The Agents:<agent-id> device state is available to
+   monitor the status of an agent.  See agents.conf.sample for valid
+   configuration options.
+
+chan_bridge
+------------------
+ * chan_bridge is removed and its functionality is incorporated into ConfBridge
+   itself.
 
 chan_local
 ------------------
@@ -527,6 +580,18 @@
    If no resources exist or all are unavailable the device state is considered
    to be unavailable.
 
+
+Scripts
+------------------
+
+safe_asterisk
+------------------
+ * The safe_asterisk script will now install over previously installations.
+   In previous versions of Asterisk, once installed a 'make install' would
+   skip over safe_asterisk if it was already installed.
+ * Certain options in safe_asterisk can now be configured from the
+   safe_asterisk.conf file. A sample version of this is located in the
+   configs/ folder.
 
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 10 to Asterisk 11 --------------------

Modified: team/dlee/stasis-cache-split/Makefile
URL: 
http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/Makefile?view=diff&rev=395671&r1=395670&r2=395671
==============================================================================
--- team/dlee/stasis-cache-split/Makefile (original)
+++ team/dlee/stasis-cache-split/Makefile Mon Jul 29 10:46:34 2013
@@ -558,8 +558,8 @@
 bininstall: _all installdirs $(SUBDIRS_INSTALL) main-bininstall
        $(INSTALL) -m 755 contrib/scripts/astgenkey "$(DESTDIR)$(ASTSBINDIR)/"
        $(INSTALL) -m 755 contrib/scripts/autosupport "$(DESTDIR)$(ASTSBINDIR)/"
-       if [ ! -f "$(DESTDIR)$(ASTSBINDIR)/safe_asterisk" -a ! -f /sbin/launchd 
]; then \
-               cat contrib/scripts/safe_asterisk | sed 
's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;s|__ASTERISK_LOG_DIR__|$(ASTLOGDIR)|;'
 > contrib/scripts/safe.tmp ; \
+       if [ ! -f /sbin/launchd ]; then \
+               cat contrib/scripts/safe_asterisk | sed 
's|__ASTERISK_SBIN_DIR__|$(ASTSBINDIR)|;s|__ASTERISK_VARRUN_DIR__|$(ASTVARRUNDIR)|;s|__ASTERISK_LOG_DIR__|$(ASTLOGDIR)|;s|__ASTERISK_ETC_DIR__|$(ASTETCDIR)|;'
 > contrib/scripts/safe.tmp ; \
                $(INSTALL) -m 755 contrib/scripts/safe.tmp 
"$(DESTDIR)$(ASTSBINDIR)/safe_asterisk" ; \
                rm -f contrib/scripts/safe.tmp ; \
        fi

Modified: team/dlee/stasis-cache-split/UPGRADE.txt
URL: 
http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/UPGRADE.txt?view=diff&rev=395671&r1=395670&r2=395671
==============================================================================
--- team/dlee/stasis-cache-split/UPGRADE.txt (original)
+++ team/dlee/stasis-cache-split/UPGRADE.txt Mon Jul 29 10:46:34 2013
@@ -22,8 +22,8 @@
 ===========================================================
 
 AgentMonitorOutgoing
- - The 'c' option has been removed. It is not possible to modify the name of a
-   channel involved in a CDR.
+ - Application removed.  It was a holdover from when AgentCallbackLogin was
+   removed.
 
 NoCDR:
  - This application is deprecated. Please use the CDR_PROP function instead.
@@ -140,6 +140,15 @@
    and pretending otherwise helps no one.
  - The AGENTUPDATECDR channel variable has also been removed, for the same
    reason as the updatecdr option.
+ - chan_agent is removed and replaced with AgentLogin and AgentRequest dialplan
+   applications.  Agents are connected with callers using the new AgentRequest
+   dialplan application.  The Agents:<agent-id> device state is available to
+   monitor the status of an agent.  See agents.conf.sample for valid
+   configuration options.
+
+chan_bridge
+ - chan_bridge is removed and its functionality is incorporated into ConfBridge
+   itself.
 
 chan_dahdi:
  - Analog port dialing and deferred DTMF dialing for PRI now distinguishes

Modified: team/dlee/stasis-cache-split/addons/chan_mobile.c
URL: 
http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/addons/chan_mobile.c?view=diff&rev=395671&r1=395670&r2=395671
==============================================================================
--- team/dlee/stasis-cache-split/addons/chan_mobile.c (original)
+++ team/dlee/stasis-cache-split/addons/chan_mobile.c Mon Jul 29 10:46:34 2013
@@ -1339,9 +1339,7 @@
 
 static int mbl_ast_hangup(struct mbl_pvt *pvt)
 {
-       if (pvt->owner) {
-               ast_hangup(pvt->owner);
-       }
+       ast_hangup(pvt->owner);
        return 0;
 }
 

Modified: team/dlee/stasis-cache-split/apps/app_bridgewait.c
URL: 
http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/apps/app_bridgewait.c?view=diff&rev=395671&r1=395670&r2=395671
==============================================================================
--- team/dlee/stasis-cache-split/apps/app_bridgewait.c (original)
+++ team/dlee/stasis-cache-split/apps/app_bridgewait.c Mon Jul 29 10:46:34 2013
@@ -54,26 +54,44 @@
                        Put a call into the holding bridge.
                </synopsis>
                <syntax>
+                       <parameter name="role" required="false">
+                               <para>Defines the channel's purpose for 
entering the holding bridge. Values are case sensitive.
+                               </para>
+                               <enumlist>
+                                       <enum name="participant">
+                                               <para>The channel will enter 
the holding bridge to be placed on hold
+                                               until it is removed from the 
bridge for some reason. (default)</para>
+                                       </enum>
+                                       <enum name="announcer">
+                                               <para>The channel will enter 
the holding bridge to make announcements
+                                               to channels that are currently 
in the holding bridge. While an
+                                               announcer is present, holding 
for the participants will be
+                                               suspended.</para>
+                                       </enum>
+                               </enumlist>
+                       </parameter>
                        <parameter name="options">
                                <optionlist>
-                                       <option name="A">
-                                               <para>The channel will join the 
holding bridge as an
-                                               announcer</para>
+                                       <option name="m">
+                                               <argument name="class" 
required="true" />
+                                               <para>The specified MOH class 
will be used/suggested for
+                                               music on hold operations. This 
option will only be useful for
+                                               entertainment modes that use it 
(m and h).</para>
                                        </option>
-                                       <option name="m">
-                                               <argument name="class" 
required="false" />
-                                               <para>Play music on hold to the 
entering channel while it is
-                                               on hold. If the 
<emphasis>class</emphasis> is included, then
-                                               that class of music on hold 
will take priority over the
-                                               channel default.</para>
-                                       </option>
-                                       <option name="r">
-                                               <para>Play a ringing tone to 
the entering channel while it is
-                                               on hold.</para>
+                                       <option name="e">
+                                               <para>Which entertainment 
mechanism should be used while on hold
+                                               in the holding bridge. Only the 
first letter is read.</para>
+                                               <enumlist>
+                                                       <enum 
name="m"><para>Play music on hold (default)</para></enum>
+                                                       <enum 
name="r"><para>Ring without pause</para></enum>
+                                                       <enum 
name="s"><para>Generate silent audio</para></enum>
+                                                       <enum 
name="h"><para>Put the channel on hold</para></enum>
+                                                       <enum name="n"><para>No 
entertainment</para></enum>
+                                               </enumlist>
                                        </option>
                                        <option name="S">
                                                <argument name="duration" 
required="true" />
-                                               <para>Automatically end the 
hold and return to the PBX after
+                                               <para>Automatically exit the 
bridge and return to the PBX after
                                                <emphasis>duration</emphasis> 
seconds.</para>
                                        </option>
                                </optionlist>
@@ -87,12 +105,8 @@
        </application>
  ***/
 /* BUGBUG Add bridge name/id parameter to specify which holding bridge to join 
(required) */
-/* BUGBUG Add h(moh-class) option to put channel on hold using 
AST_CONTROL_HOLD/AST_CONTROL_UNHOLD while in bridge */
-/* BUGBUG Add s option to send silence media frames to channel while in bridge 
(uses a silence generator) */
-/* BUGBUG Add n option to send no media to channel while in bridge (Channel 
should not be answered yet) */
 /* BUGBUG The channel may or may not be answered with the r option. */
 /* BUGBUG You should not place an announcer into a holding bridge with 
unanswered channels. */
-/* BUGBUG Not supplying any option flags will assume the m option with the 
default music class. */
 
 static char *app = "BridgeWait";
 static struct ast_bridge *holding_bridge;
@@ -100,22 +114,21 @@
 AST_MUTEX_DEFINE_STATIC(bridgewait_lock);
 
 enum bridgewait_flags {
-       MUXFLAG_PLAYMOH = (1 << 0),
-       MUXFLAG_RINGING = (1 << 1),
+       MUXFLAG_MOHCLASS = (1 << 0),
+       MUXFLAG_ENTERTAINMENT = (1 << 1),
        MUXFLAG_TIMEOUT = (1 << 2),
-       MUXFLAG_ANNOUNCER = (1 << 3),
 };
 
 enum bridgewait_args {
+       OPT_ARG_ENTERTAINMENT,
        OPT_ARG_MOHCLASS,
        OPT_ARG_TIMEOUT,
        OPT_ARG_ARRAY_SIZE, /* Always the last element of the enum */
 };
 
 AST_APP_OPTIONS(bridgewait_opts, {
-       AST_APP_OPTION('A', MUXFLAG_ANNOUNCER),
-       AST_APP_OPTION('r', MUXFLAG_RINGING),
-       AST_APP_OPTION_ARG('m', MUXFLAG_PLAYMOH, OPT_ARG_MOHCLASS),
+       AST_APP_OPTION_ARG('e', MUXFLAG_ENTERTAINMENT, OPT_ARG_ENTERTAINMENT),
+       AST_APP_OPTION_ARG('m', MUXFLAG_MOHCLASS, OPT_ARG_MOHCLASS),
        AST_APP_OPTION_ARG('S', MUXFLAG_TIMEOUT, OPT_ARG_TIMEOUT),
 });
 
@@ -147,18 +160,38 @@
        return 0;
 }
 
-static void apply_option_moh(struct ast_channel *chan, char *class_arg)
-{
-       ast_channel_set_bridge_role_option(chan, "holding_participant", 
"idle_mode", "musiconhold");
-       ast_channel_set_bridge_role_option(chan, "holding_participant", 
"moh_class", class_arg);
-}
-
-static void apply_option_ringing(struct ast_channel *chan)
-{
-       ast_channel_set_bridge_role_option(chan, "holding_participant", 
"idle_mode", "ringing");
-}
-
-static int process_options(struct ast_channel *chan, struct ast_flags *flags, 
char **opts, struct ast_bridge_features *features)
+static int apply_option_moh(struct ast_channel *chan, const char *class_arg)
+{
+       return ast_channel_set_bridge_role_option(chan, "holding_participant", 
"moh_class", class_arg);
+}
+
+static int apply_option_entertainment(struct ast_channel *chan, const char 
*entertainment_arg)
+{
+       char entertainment = entertainment_arg[0];
+       switch (entertainment) {
+       case 'm':
+               return ast_channel_set_bridge_role_option(chan, 
"holding_participant", "idle_mode", "musiconhold");
+       case 'r':
+               return ast_channel_set_bridge_role_option(chan, 
"holding_participant", "idle_mode", "ringing");
+       case 's':
+               return ast_channel_set_bridge_role_option(chan, 
"holding_participant", "idle_mode", "silence");
+       case 'h':
+               return ast_channel_set_bridge_role_option(chan, 
"holding_participant", "idle_mode", "hold");
+       case 'n':
+               return ast_channel_set_bridge_role_option(chan, 
"holding_participant", "idle_mode", "none");
+       default:
+               ast_log(LOG_ERROR, "Invalid argument for BridgeWait 
entertainment '%s'\n", entertainment_arg);
+               return -1;
+       }
+}
+
+enum wait_bridge_roles {
+       ROLE_PARTICIPANT = 0,
+       ROLE_ANNOUNCER,
+       ROLE_INVALID,
+};
+
+static int process_options(struct ast_channel *chan, struct ast_flags *flags, 
char **opts, struct ast_bridge_features *features, enum wait_bridge_roles role)
 {
        if (ast_test_flag(flags, MUXFLAG_TIMEOUT)) {
                if (apply_option_timeout(features, opts[OPT_ARG_TIMEOUT])) {
@@ -166,21 +199,47 @@
                }
        }
 
-       if (ast_test_flag(flags, MUXFLAG_ANNOUNCER)) {
-               /* Announcer specific stuff */
-               ast_channel_add_bridge_role(chan, "announcer");
+       switch (role) {
+       case ROLE_PARTICIPANT:
+               if (ast_channel_add_bridge_role(chan, "holding_participant")) {
+                       return -1;
+               }
+
+               if (ast_test_flag(flags, MUXFLAG_MOHCLASS)) {
+                       if (apply_option_moh(chan, opts[OPT_ARG_MOHCLASS])) {
+                               return -1;
+                       }
+               }
+
+               if (ast_test_flag(flags, MUXFLAG_ENTERTAINMENT)) {
+                       if (apply_option_entertainment(chan, 
opts[OPT_ARG_ENTERTAINMENT])) {
+                               return -1;
+                       }
+               }
+
+               break;
+       case ROLE_ANNOUNCER:
+               if (ast_channel_add_bridge_role(chan, "announcer")) {
+                       return -1;
+               }
+               break;
+       case ROLE_INVALID:
+               ast_assert(0);
+               return -1;
+       }
+
+       return 0;
+}
+
+static enum wait_bridge_roles validate_role(const char *role)
+{
+       if (!strcmp(role, "participant")) {
+               return ROLE_PARTICIPANT;
+       } else if (!strcmp(role, "announcer")) {
+               return ROLE_ANNOUNCER;
        } else {
-               /* Non Announcer specific stuff */
-               ast_channel_add_bridge_role(chan, "holding_participant");
-
-               if (ast_test_flag(flags, MUXFLAG_PLAYMOH)) {
-                       apply_option_moh(chan, opts[OPT_ARG_MOHCLASS]);
-               } else if (ast_test_flag(flags, MUXFLAG_RINGING)) {
-                       apply_option_ringing(chan);
-               }
-       }
-
-       return 0;
+               return ROLE_INVALID;
+       }
 }
 
 static int bridgewait_exec(struct ast_channel *chan, const char *data)
@@ -188,8 +247,11 @@
        struct ast_bridge_features chan_features;
        struct ast_flags flags = { 0 };
        char *parse;
+       enum wait_bridge_roles role = ROLE_PARTICIPANT;
+       char *opts[OPT_ARG_ARRAY_SIZE] = { NULL, };
 
        AST_DECLARE_APP_ARGS(args,
+               AST_APP_ARG(role);
                AST_APP_ARG(options);
                AST_APP_ARG(other);             /* Any remaining unused 
arguments */
        );
@@ -209,18 +271,26 @@
        parse = ast_strdupa(data);
        AST_STANDARD_APP_ARGS(args, parse);
 
+       if (!ast_strlen_zero(args.role)) {
+               role = validate_role(args.role);
+               if (role == ROLE_INVALID) {
+                       ast_log(LOG_ERROR, "Requested waiting bridge role '%s' 
is invalid.\n", args.role);
+                       return -1;
+               }
+       }
+
        if (ast_bridge_features_init(&chan_features)) {
                ast_bridge_features_cleanup(&chan_features);
                return -1;
        }
 
        if (args.options) {
-               char *opts[OPT_ARG_ARRAY_SIZE] = { NULL, };
                ast_app_parse_options(bridgewait_opts, &flags, opts, 
args.options);
-               if (process_options(chan, &flags, opts, &chan_features)) {
-                       ast_bridge_features_cleanup(&chan_features);
-                       return -1;
-               }
+       }
+
+       if (process_options(chan, &flags, opts, &chan_features, role)) {
+               ast_bridge_features_cleanup(&chan_features);
+               return -1;
        }
 
        ast_bridge_join(holding_bridge, chan, NULL, &chan_features, NULL, 0);

Modified: team/dlee/stasis-cache-split/apps/app_celgenuserevent.c
URL: 
http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/apps/app_celgenuserevent.c?view=diff&rev=395671&r1=395670&r2=395671
==============================================================================
--- team/dlee/stasis-cache-split/apps/app_celgenuserevent.c (original)
+++ team/dlee/stasis-cache-split/apps/app_celgenuserevent.c Mon Jul 29 10:46:34 
2013
@@ -75,9 +75,9 @@
        parse = ast_strdupa(data);
        AST_STANDARD_APP_ARGS(args, parse);
 
-       blob = ast_json_pack("{s: s, s: s}",
+       blob = ast_json_pack("{s: s, s: {s: s}}",
                "event", args.event,
-               "extra", args.extra);
+               "extra", "extra", args.extra);
        if (!blob) {
                return res;
        }

Modified: team/dlee/stasis-cache-split/apps/app_confbridge.c
URL: 
http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/apps/app_confbridge.c?view=diff&rev=395671&r1=395670&r2=395671
==============================================================================
--- team/dlee/stasis-cache-split/apps/app_confbridge.c (original)
+++ team/dlee/stasis-cache-split/apps/app_confbridge.c Mon Jul 29 10:46:34 2013
@@ -1402,25 +1402,26 @@
        ast_free(pvt_data);
 }
 
-static void conf_handle_talker_cb(struct ast_bridge_channel *bridge_channel, 
void *pvt_data, int talking)
+static int conf_handle_talker_cb(struct ast_bridge_channel *bridge_channel, 
void *pvt_data, int talking)
 {
        const char *conf_name = pvt_data;
        struct confbridge_conference *conference = ao2_find(conference_bridges, 
conf_name, OBJ_KEY);
        struct ast_json *talking_extras;
 
        if (!conference) {
-               return;
+               /* Remove the hook since the conference does not exist. */
+               return -1;
        }
 
        talking_extras = ast_json_pack("{s: s}",
-                                        "talking_status", talking ? "on" : 
"off");
-
+               "talking_status", talking ? "on" : "off");
        if (!talking_extras) {
-               return;
+               return 0;
        }
 
        send_conf_stasis(conference, bridge_channel->chan, 
confbridge_talking_type(), talking_extras, 0);
        ast_json_unref(talking_extras);
+       return 0;
 }
 
 static int conf_get_pin(struct ast_channel *chan, struct confbridge_user *user)
@@ -1599,14 +1600,17 @@
        /* Set a talker indicate call back if talking detection is requested */
        if (ast_test_flag(&user.u_profile, USER_OPT_TALKER_DETECT)) {
                char *conf_name = ast_strdup(args.conf_name); /* this is freed 
during feature cleanup */
-               if (!(conf_name)) {
+
+               if (!conf_name) {
                        res = -1; /* invalid PIN */
                        goto confbridge_cleanup;
                }
-               ast_bridge_features_set_talk_detector(&user.features,
-                       conf_handle_talker_cb,
-                       conf_handle_talker_destructor,
-                       conf_name);
+               if (ast_bridge_talk_detector_hook(&user.features, 
conf_handle_talker_cb,
+                       conf_name, conf_handle_talker_destructor, 
AST_BRIDGE_HOOK_REMOVE_ON_PULL)) {
+                       ast_free(conf_name);
+                       res = -1;
+                       goto confbridge_cleanup;
+               }
        }
 
        /* Look for a conference bridge matching the provided name */
@@ -2069,6 +2073,7 @@
 
 static int kick_conference_participant(struct confbridge_conference 
*conference, const char *channel)
 {
+       int res = -1;
        struct confbridge_user *user = NULL;
 
        SCOPED_AO2LOCK(bridge_lock, conference);
@@ -2077,6 +2082,10 @@
                        user->kicked = 1;
                        ast_bridge_remove(conference->bridge, user->chan);
                        return 0;
+               } else if (!strcasecmp("all", channel)) {
+                       user->kicked = 1;
+                       ast_bridge_remove(conference->bridge, user->chan);
+                       res = 0;
                }
        }
        AST_LIST_TRAVERSE(&conference->waiting_list, user, list) {
@@ -2084,10 +2093,14 @@
                        user->kicked = 1;
                        ast_bridge_remove(conference->bridge, user->chan);
                        return 0;
-               }
-       }
-
-       return -1;
+               } else if (!strcasecmp("all", channel)) {
+                       user->kicked = 1;
+                       ast_bridge_remove(conference->bridge, user->chan);
+                       res = 0;
+               }
+       }
+
+       return res;
 }
 
 static char *complete_confbridge_name(const char *line, const char *word, int 
pos, int state)

Modified: team/dlee/stasis-cache-split/apps/app_dial.c
URL: 
http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/apps/app_dial.c?view=diff&rev=395671&r1=395670&r2=395671
==============================================================================
--- team/dlee/stasis-cache-split/apps/app_dial.c (original)
+++ team/dlee/stasis-cache-split/apps/app_dial.c Mon Jul 29 10:46:34 2013
@@ -60,7 +60,6 @@
 #include "asterisk/stringfields.h"
 #include "asterisk/global_datastores.h"
 #include "asterisk/dsp.h"
-#include "asterisk/cel.h"
 #include "asterisk/aoc.h"
 #include "asterisk/ccss.h"
 #include "asterisk/indications.h"
@@ -68,6 +67,7 @@
 #include "asterisk/dial.h"
 #include "asterisk/stasis_channels.h"
 #include "asterisk/bridging.h"
+#include "asterisk/bridging_after.h"
 #include "asterisk/features_config.h"
 
 /*** DOCUMENTATION
@@ -202,7 +202,7 @@
                                        <argument name="exten" required="false" 
/>
                                        <argument name="priority" 
required="true" />
                                        <para>If the call is answered, transfer 
the calling party to
-                                       the specified 
<replaceable>priority</replaceable> and the called party to the specified 
+                                       the specified 
<replaceable>priority</replaceable> and the called party to the specified
                                        <replaceable>priority</replaceable> 
plus one.</para>
                                        <note>
                                                <para>You cannot use any 
additional action post answer options in conjunction with this option.</para>
@@ -291,7 +291,7 @@
                                        <argument name="arg" multiple="true">
                                                <para>Macro arguments</para>
                                        </argument>
-                                       <para>Execute the specified 
<replaceable>macro</replaceable> for the <emphasis>called</emphasis> channel 
+                                       <para>Execute the specified 
<replaceable>macro</replaceable> for the <emphasis>called</emphasis> channel
                                        before connecting to the calling 
channel. Arguments can be specified to the Macro
                                        using <literal>^</literal> as a 
delimiter. The macro can set the variable
                                        <variable>MACRO_RESULT</variable> to 
specify the following actions after the macro is
@@ -333,7 +333,7 @@
                                                <para>With 
<replaceable>delete</replaceable> set to <literal>1</literal>, the introduction 
will
                                                always be deleted.</para>
                                        </argument>
-                                       <para>This option is a modifier for the 
call screening/privacy mode. (See the 
+                                       <para>This option is a modifier for the 
call screening/privacy mode. (See the
                                        <literal>p</literal> and 
<literal>P</literal> options.) It specifies
                                        that no introductions are to be saved 
in the <directory>priv-callerintros</directory>
                                        directory.</para>
@@ -354,7 +354,7 @@
                                        <argument name="mode">
                                                <para>With 
<replaceable>mode</replaceable> either not specified or set to 
<literal>1</literal>,
                                                the originator hanging up will 
cause the phone to ring back immediately.</para>
-                                               <para>With 
<replaceable>mode</replaceable> set to <literal>2</literal>, when the operator 
+                                               <para>With 
<replaceable>mode</replaceable> set to <literal>2</literal>, when the operator
                                                flashes the trunk, it will ring 
their phone back.</para>
                                        </argument>
                                        <para>Enables <emphasis>operator 
services</emphasis> mode.  This option only
@@ -1072,7 +1072,7 @@
                        /* If we are calling a single channel, and not 
providing ringback or music, */
                        /* then, make them compatible for in-band tone purpose 
*/
                        if (ast_channel_make_compatible(outgoing->chan, in) < 
0) {
-                               /* If these channels can not be made 
compatible, 
+                               /* If these channels can not be made compatible,
                                 * there is no point in continuing.  The bridge
                                 * will just fail if it gets that far.
                                 */
@@ -1766,7 +1766,7 @@
 
                /*! \page DialPrivacy Dial Privacy scripts
                 * \par priv-callee-options script:
-                * \li Dial 1 if you wish this caller to reach you directly in 
the future, 
+                * \li Dial 1 if you wish this caller to reach you directly in 
the future,
                 *      and immediately connect to their incoming call.
                 * \li Dial 2 if you wish to send this caller to voicemail now 
and forevermore.
                 * \li Dial 3 to send this caller to the torture menus, now and 
forevermore.
@@ -1892,7 +1892,7 @@
        } else if (ast_test_flag64(opts, OPT_SCREEN_NOCALLERID) && 
strncmp(pa->privcid, "NOCALLERID", 10) == 0) {
                ast_verb(3, "CallerID blank; N option set; Screening should 
happen; dbval is %d\n", pa->privdb_val);
        }
-       
+
        if (pa->privdb_val == AST_PRIVACY_DENY) {
                ast_verb(3, "Privacy DB reports PRIVACY_DENY for this callerid. 
Dial reports unavailable\n");
                ast_copy_string(pa->status, "NOANSWER", sizeof(pa->status));
@@ -2022,14 +2022,14 @@
                ast_channel_lock(chan);
                context = ast_strdupa(ast_channel_context(chan));
                ast_channel_unlock(chan);
-               ast_after_bridge_set_h(peer, context);
+               ast_bridge_set_after_h(peer, context);
        } else if (ast_test_flag64(opts, OPT_CALLEE_GO_ON)) {
                ast_channel_lock(chan);
                context = ast_strdupa(ast_channel_context(chan));
                extension = ast_strdupa(ast_channel_exten(chan));
                priority = ast_channel_priority(chan);
                ast_channel_unlock(chan);
-               ast_after_bridge_set_go_on(peer, context, extension, priority,
+               ast_bridge_set_after_go_on(peer, context, extension, priority,
                        opt_args[OPT_ARG_CALLEE_GO_ON]);
        }
 }
@@ -2445,7 +2445,7 @@
                        /* We are on the only destination. */
                        ast_rtp_instance_early_bridge_make_compatible(tc, chan);
                }
-               
+
                /* Inherit specially named variables from parent channel */
                ast_channel_inherit_variables(chan, tc);
                ast_channel_datastore_inherit(chan, tc);
@@ -2699,7 +2699,7 @@
                /* If appropriate, log that we have a destination channel and 
set the answer time */
                if (ast_channel_name(peer))
                        pbx_builtin_setvar_helper(chan, "DIALEDPEERNAME", 
ast_channel_name(peer));
-               
+
                ast_channel_lock(peer);
                number = pbx_builtin_getvar_helper(peer, "DIALEDPEERNUMBER");
                if (ast_strlen_zero(number)) {
@@ -2968,7 +2968,7 @@
                                ast_channel_hangupcause_set(chan, 
ast_channel_hangupcause(peer));
                        }
                        setup_peer_after_bridge_goto(chan, peer, &opts, 
opt_args);
-                       if (ast_after_bridge_goto_setup(peer)
+                       if (ast_bridge_setup_after_goto(peer)
                                || ast_pbx_start(peer)) {
                                ast_autoservice_chan_hangup_peer(chan, peer);
                        }
@@ -2998,7 +2998,7 @@
                        config.end_bridge_callback = end_bridge_callback;
                        config.end_bridge_callback_data = chan;
                        config.end_bridge_callback_data_fixup = 
end_bridge_callback_data_fixup;
-                       
+
                        if (moh) {
                                moh = 0;
                                ast_moh_stop(chan);

Modified: team/dlee/stasis-cache-split/apps/app_directed_pickup.c
URL: 
http://svnview.digium.com/svn/asterisk/team/dlee/stasis-cache-split/apps/app_directed_pickup.c?view=diff&rev=395671&r1=395670&r2=395671
==============================================================================
--- team/dlee/stasis-cache-split/apps/app_directed_pickup.c (original)
+++ team/dlee/stasis-cache-split/apps/app_directed_pickup.c Mon Jul 29 10:46:34 
2013
@@ -46,7 +46,6 @@
 #include "asterisk/features.h"
 #include "asterisk/manager.h"
 #include "asterisk/callerid.h"
-#include "asterisk/cel.h"
 
 #define PICKUPMARK "PICKUPMARK"
 

Modified: team/dlee/stasis-cache-split/apps/app_meetme.c

[... 23840 lines stripped ...]

--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to