[asterisk-commits] rmudgett: trunk r393632 - in /trunk: ./ apps/ channels/ configs/ include/aste...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Jul 3 18:57:39 CDT 2013
Author: rmudgett
Date: Wed Jul 3 18:57:37 2013
New Revision: 393632
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=393632
Log:
Revert accidental overcommit.
Added:
trunk/channels/chan_agent.c
- copied unchanged from r393630, trunk/channels/chan_agent.c
Removed:
trunk/apps/app_agent_pool.c
Modified:
trunk/CHANGES
trunk/UPGRADE.txt
trunk/configs/agents.conf.sample
trunk/configs/queues.conf.sample
trunk/include/asterisk/bridging.h
trunk/include/asterisk/config_options.h
trunk/include/asterisk/stasis_channels.h
trunk/main/bridging.c
trunk/main/config_options.c
trunk/main/stasis_channels.c
Modified: trunk/CHANGES
URL: http://svnview.digium.com/svn/asterisk/trunk/CHANGES?view=diff&rev=393632&r1=393631&r2=393632
==============================================================================
--- trunk/CHANGES (original)
+++ trunk/CHANGES Wed Jul 3 18:57:37 2013
@@ -14,19 +14,10 @@
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.
ForkCDR
------------------
@@ -253,8 +244,8 @@
of "CallerID" and "ConnectedID" to avoid confusion with similarly named
parameters in the channel snapshot.
- * The AMI events "Agentlogin" and "Agentlogoff" have been renamed
- "AgentLogin" and "AgentLogoff" respectively.
+ * The "Agentlogin" and "Agentlogoff" events 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.
@@ -432,21 +423,6 @@
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
------------------
Modified: trunk/UPGRADE.txt
URL: http://svnview.digium.com/svn/asterisk/trunk/UPGRADE.txt?view=diff&rev=393632&r1=393631&r2=393632
==============================================================================
--- trunk/UPGRADE.txt (original)
+++ trunk/UPGRADE.txt Wed Jul 3 18:57:37 2013
@@ -24,8 +24,6 @@
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.
@@ -126,15 +124,6 @@
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: trunk/configs/agents.conf.sample
URL: http://svnview.digium.com/svn/asterisk/trunk/configs/agents.conf.sample?view=diff&rev=393632&r1=393631&r2=393632
==============================================================================
--- trunk/configs/agents.conf.sample (original)
+++ trunk/configs/agents.conf.sample Wed Jul 3 18:57:37 2013
@@ -1,68 +1,102 @@
;
-; Agent pool configuration
+; Agent configuration
;
[general]
-; The general section of this config is not currently used, but reserved
-; for future use.
-;[agent-id]
-; Define ackcall to require the agent to give a DTMF acknowledgement
-; when the agent receives a call.
-; The channel variable AGENTACKCALL overrides on agent login.
-; Default is "no".
-;ackcall=no
+[agents]
;
-; Set what DTMF key sequence the agent should use to acknowledge a call.
-; The channel variable AGENTACCEPTDTMF overrides on agent login.
-; Default is "#".
-;acceptdtmf=##
+; Define maxlogintries to allow agent to try max logins before
+; failed.
+; default to 3
;
-; Set how many seconds a call for the agent has to wait for the agent to
-; acknowledge the call before the agent is automatically logged off. If
-; set to zero then the call will wait forever for the agent to acknowledge.
-; The channel variable AGENTAUTOLOGOFF overrides on agent login.
-; Default is 0.
+;maxlogintries=5
+;
+;
+; Define autologoff times if appropriate. This is how long
+; the phone has to ring with no answer before the agent is
+; automatically logged off (in seconds)
+;
;autologoff=15
;
-; Set the minimum amount of time after disconnecting a call before
-; the agent can receive a new call in milliseconds.
-; The channel variable AGENTWRAPUPTIME overrides on agent login.
-; Default is 0.
+; Define autologoffunavail to have agents automatically logged
+; out when the extension that they are at returns a CHANUNAVAIL
+; status when a call is attempted to be sent there.
+; Default is "no".
+;
+;autologoffunavail=yes
+;
+; Define ackcall to require a DTMF acknowledgement when
+; a logged-in agent receives a call. Default is "no".
+; Use the acceptdtmf option to configure what DTMF key
+; press should be used to acknowledge the call. The
+; default is '#'.
+;
+;ackcall=no
+;acceptdtmf=#
+;
+; Define endcall to allow an agent to hangup a call with a
+; DTMF keypress. Default is "yes". Use the enddtmf option to
+; configure which DTMF key will end a call. The default is
+; '*'.
+;
+;endcall=yes
+;enddtmf=*
+;
+; Define wrapuptime. This is the minimum amount of time when
+; after disconnecting before the caller can receive a new call
+; note this is in milliseconds.
+;
;wrapuptime=5000
;
-; Set the musiconhold class for the agent.
-; Default is "default".
-;musiconhold=default
+; Define the default musiconhold for agents
+; musiconhold => music_class
;
-; Enable recording calls the agent takes automatically by invoking the
-; DTMF automixmon feature when the agent connects to a caller.
-; See features.conf.sample for information about the automixmon feature.
-; Default is "no".
+;musiconhold => default
+;
+; Define the default good bye sound file for agents
+; default to vm-goodbye
+;
+;goodbye => goodbye_file
+;
+; Define updatecdr. This is whether or not to change the source
+; channel in the CDR record for this call to agent/agent_id so
+; that we know which agent generates the call
+;
+;updatecdr=no
+;
+; Group memberships for agents (may change in mid-file)
+;
+;group=3
+;group=1,2
+;group=
+;
+; --------------------------------------------------
+; This section is devoted to recording agent's calls
+; The keywords are global to the chan_agent channel driver
+;
+; Enable recording calls addressed to agents. It's turned off by default.
;recordagentcalls=yes
;
-; The sound file played to alert the agent when a call is present.
-; Default is "beep".
+; The format to be used to record the calls: wav, gsm, wav49.
+; By default its "wav".
+;recordformat=gsm
+;
+; The text to be added to the name of the recording. Allows forming a url link.
+;urlprefix=http://localhost/calls/
+;
+; The optional directory to save the conversations in. The default is
+; /var/spool/asterisk/monitor
+;savecallsin=/var/calls
+;
+; An optional custom beep sound file to play to always-connected agents.
;custom_beep=beep
-;
-; A friendly name for the agent used in log messages.
-; Default is "".
-;fullname=Mark Spencer
;
; --------------------------------------------------
;
-; This section contains example agent definitions:
+; This section contains the agent definitions, in the form:
;
-; Define a template called my-agents:
-;[my-agents](!)
-;autologoff=15
-;ackcall=yes
-;acceptdtmf=##
+; agent => agentid,agentpassword,name
;
-; Define agent 1001 using the my-agents template:
-;[1001](my-agents)
-;fullname=Mark Spencer
-;
-; Define agent 1002 using the my-agents template:
-;[1002](my-agents)
-;fullname=Will Meadows
+;agent => 1001,4321,Mark Spencer
+;agent => 1002,4321,Will Meadows
Modified: trunk/configs/queues.conf.sample
URL: http://svnview.digium.com/svn/asterisk/trunk/configs/queues.conf.sample?view=diff&rev=393632&r1=393631&r2=393632
==============================================================================
--- trunk/configs/queues.conf.sample (original)
+++ trunk/configs/queues.conf.sample Wed Jul 3 18:57:37 2013
@@ -543,7 +543,18 @@
;member => DAHDI/1
;member => DAHDI/2,10
;member => DAHDI/3,10,Bob Johnson
-;member => Local/1001 at agents,0,May Flowers,Agent:1001
-;member => Local/1002 at agents,0,John Doe,Agent:1002
+;member => Agent/1001
+;member => Agent/1002
;member => Local/1000 at default,0,John Smith,SIP/1000
;member => Local/2000 at default,0,Lorem Ipsum,SIP/2000,no
+
+;
+; Note that using agent groups is probably not what you want. Strategies do
+; not propagate down to the Agent system so if you want round robin, least
+; recent, etc, you should list all the agents in this file individually and not
+; use agent groups.
+;
+;member => Agent/@1 ; Any agent in group 1
+;member => Agent/:1,1 ; Any agent in group 1, wait for first
+ ; available, but consider with penalty
+
Modified: trunk/include/asterisk/bridging.h
URL: http://svnview.digium.com/svn/asterisk/trunk/include/asterisk/bridging.h?view=diff&rev=393632&r1=393631&r2=393632
==============================================================================
--- trunk/include/asterisk/bridging.h (original)
+++ trunk/include/asterisk/bridging.h Wed Jul 3 18:57:37 2013
@@ -1647,7 +1647,7 @@
/*! Reason the the after bridge callback will not be called. */
enum ast_after_bridge_cb_reason {
- /*! The datastore is being destroyed. Likely due to hangup. (Enum value must be zero.) */
+ /*! The datastore is being destroyed. Likely due to hangup. */
AST_AFTER_BRIDGE_CB_REASON_DESTROY,
/*! Something else replaced the callback with another. */
AST_AFTER_BRIDGE_CB_REASON_REPLACED,
@@ -1666,9 +1666,6 @@
* \param reason Reason callback is failing.
* \param data Extra data what setup the callback wanted to pass.
*
- * \note Called when the channel leaves the bridging system or
- * is destroyed.
- *
* \return Nothing
*/
typedef void (*ast_after_bridge_cb_failed)(enum ast_after_bridge_cb_reason reason, void *data);
@@ -1708,9 +1705,6 @@
*
* \note chan is locked by this function.
*
- * \note failed is called when the channel leaves the bridging
- * system or is destroyed.
- *
* \retval 0 on success.
* \retval -1 on error.
*/
Modified: trunk/include/asterisk/config_options.h
URL: http://svnview.digium.com/svn/asterisk/trunk/include/asterisk/config_options.h?view=diff&rev=393632&r1=393631&r2=393632
==============================================================================
--- trunk/include/asterisk/config_options.h (original)
+++ trunk/include/asterisk/config_options.h Wed Jul 3 18:57:37 2013
@@ -461,7 +461,7 @@
/*! \brief Process a config info via the options registered with an aco_info
*
* \param info The config_options_info to be used for handling the config
- * \param reload Non-zero if this is for a reload.
+ * \param reload Whether or not this is a reload
*
* \retval ACO_PROCESS_OK Success
* \retval ACO_PROCESS_ERROR Failure
Modified: trunk/include/asterisk/stasis_channels.h
URL: http://svnview.digium.com/svn/asterisk/trunk/include/asterisk/stasis_channels.h?view=diff&rev=393632&r1=393631&r2=393632
==============================================================================
--- trunk/include/asterisk/stasis_channels.h (original)
+++ trunk/include/asterisk/stasis_channels.h Wed Jul 3 18:57:37 2013
@@ -422,22 +422,6 @@
struct stasis_message_type *ast_channel_monitor_stop_type(void);
/*!
- * \since 12.0.0
- * \brief Message type for agent login on a channel
- *
- * \retval A stasis message type
- */
-struct stasis_message_type *ast_channel_agent_login_type(void);
-
-/*!
- * \since 12.0.0
- * \brief Message type for agent logoff on a channel
- *
- * \retval A stasis message type
- */
-struct stasis_message_type *ast_channel_agent_logoff_type(void);
-
-/*!
* \since 12
* \brief Message type for starting music on hold on a channel
*
Modified: trunk/main/bridging.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/bridging.c?view=diff&rev=393632&r1=393631&r2=393632
==============================================================================
--- trunk/main/bridging.c (original)
+++ trunk/main/bridging.c Wed Jul 3 18:57:37 2013
@@ -3145,69 +3145,14 @@
return bridge_channel;
}
-struct after_bridge_cb_node {
- /*! Next list node. */
- AST_LIST_ENTRY(after_bridge_cb_node) list;
+struct after_bridge_cb_ds {
/*! Desired callback function. */
ast_after_bridge_cb callback;
/*! After bridge callback will not be called and destroy any resources data may contain. */
ast_after_bridge_cb_failed failed;
/*! Extra data to pass to the callback. */
void *data;
- /*! Reason the after bridge callback failed. */
- enum ast_after_bridge_cb_reason reason;
};
-
-struct after_bridge_cb_ds {
- /*! After bridge callbacks container. */
- AST_LIST_HEAD(, after_bridge_cb_node) callbacks;
-};
-
-/*!
- * \internal
- * \brief Indicate after bridge callback failed.
- * \since 12.0.0
- *
- * \param node After bridge callback node.
- *
- * \return Nothing
- */
-static void after_bridge_cb_failed(struct after_bridge_cb_node *node)
-{
- if (node->failed) {
- node->failed(node->reason, node->data);
- node->failed = NULL;
- }
-}
-
-/*!
- * \internal
- * \brief Run discarding any after bridge callbacks.
- * \since 12.0.0
- *
- * \param after_bridge After bridge callback container process.
- * \param reason Why are we doing this.
- *
- * \return Nothing
- */
-static void after_bridge_cb_run_discard(struct after_bridge_cb_ds *after_bridge, enum ast_after_bridge_cb_reason reason)
-{
- struct after_bridge_cb_node *node;
-
- for (;;) {
- AST_LIST_LOCK(&after_bridge->callbacks);
- node = AST_LIST_REMOVE_HEAD(&after_bridge->callbacks, list);
- AST_LIST_UNLOCK(&after_bridge->callbacks);
- if (!node) {
- break;
- }
- if (!node->reason) {
- node->reason = reason;
- }
- after_bridge_cb_failed(node);
- ast_free(node);
- }
-}
/*!
* \internal
@@ -3222,9 +3167,10 @@
{
struct after_bridge_cb_ds *after_bridge = data;
- after_bridge_cb_run_discard(after_bridge, AST_AFTER_BRIDGE_CB_REASON_DESTROY);
-
- AST_LIST_HEAD_DESTROY(&after_bridge->callbacks);
+ if (after_bridge->failed) {
+ after_bridge->failed(AST_AFTER_BRIDGE_CB_REASON_DESTROY, after_bridge->data);
+ after_bridge->failed = NULL;
+ }
ast_free(after_bridge);
}
@@ -3241,6 +3187,7 @@
*/
static void after_bridge_cb_fixup(void *data, struct ast_channel *old_chan, struct ast_channel *new_chan)
{
+ /* There can be only one. Discard any already on the new channel. */
ast_after_bridge_callback_discard(new_chan, AST_AFTER_BRIDGE_CB_REASON_MASQUERADE);
}
@@ -3252,144 +3199,82 @@
/*!
* \internal
- * \brief Setup/create an after bridge callback datastore container.
+ * \brief Remove channel after the bridge callback and return it.
* \since 12.0.0
*
- * \param chan Channel to setup/create the after bridge callback container on.
- *
- * \retval after_bridge datastore container on success.
- * \retval NULL on error.
- */
-static struct after_bridge_cb_ds *after_bridge_cb_setup(struct ast_channel *chan)
+ * \param chan Channel to remove after bridge callback.
+ *
+ * \retval datastore on success.
+ * \retval NULL on error or not found.
+ */
+static struct ast_datastore *after_bridge_cb_remove(struct ast_channel *chan)
+{
+ struct ast_datastore *datastore;
+
+ ast_channel_lock(chan);
+ datastore = ast_channel_datastore_find(chan, &after_bridge_cb_info, NULL);
+ if (datastore && ast_channel_datastore_remove(chan, datastore)) {
+ datastore = NULL;
+ }
+ ast_channel_unlock(chan);
+
+ return datastore;
+}
+
+void ast_after_bridge_callback_discard(struct ast_channel *chan, enum ast_after_bridge_cb_reason reason)
+{
+ struct ast_datastore *datastore;
+
+ datastore = after_bridge_cb_remove(chan);
+ if (datastore) {
+ struct after_bridge_cb_ds *after_bridge = datastore->data;
+
+ if (after_bridge && after_bridge->failed) {
+ after_bridge->failed(reason, after_bridge->data);
+ after_bridge->failed = NULL;
+ }
+ ast_datastore_free(datastore);
+ }
+}
+
+/*!
+ * \internal
+ * \brief Run any after bridge callback if possible.
+ * \since 12.0.0
+ *
+ * \param chan Channel to run after bridge callback.
+ *
+ * \return Nothing
+ */
+static void after_bridge_callback_run(struct ast_channel *chan)
{
struct ast_datastore *datastore;
struct after_bridge_cb_ds *after_bridge;
- SCOPED_CHANNELLOCK(lock, chan);
-
- datastore = ast_channel_datastore_find(chan, &after_bridge_cb_info, NULL);
- if (datastore) {
- return datastore->data;
- }
-
- /* Create a new datastore. */
- datastore = ast_datastore_alloc(&after_bridge_cb_info, NULL);
+
+ if (ast_check_hangup(chan)) {
+ return;
+ }
+
+ /* Get after bridge goto datastore. */
+ datastore = after_bridge_cb_remove(chan);
if (!datastore) {
- return NULL;
- }
- after_bridge = ast_calloc(1, sizeof(*after_bridge));
- if (!after_bridge) {
- ast_datastore_free(datastore);
- return NULL;
- }
- AST_LIST_HEAD_INIT(&after_bridge->callbacks);
- datastore->data = after_bridge;
- ast_channel_datastore_add(chan, datastore);
-
- return datastore->data;
-}
-
-/*!
- * \internal
- * \brief Find an after bridge callback datastore container.
- * \since 12.0.0
- *
- * \param chan Channel to find the after bridge callback container on.
- *
- * \retval after_bridge datastore container on success.
- * \retval NULL on error.
- */
-static struct after_bridge_cb_ds *after_bridge_cb_find(struct ast_channel *chan)
+ return;
+ }
+
+ after_bridge = datastore->data;
+ if (after_bridge) {
+ after_bridge->failed = NULL;
+ after_bridge->callback(chan, after_bridge->data);
+ }
+
+ /* Discard after bridge callback datastore. */
+ ast_datastore_free(datastore);
+}
+
+int ast_after_bridge_callback_set(struct ast_channel *chan, ast_after_bridge_cb callback, ast_after_bridge_cb_failed failed, void *data)
{
struct ast_datastore *datastore;
- SCOPED_CHANNELLOCK(lock, chan);
-
- datastore = ast_channel_datastore_find(chan, &after_bridge_cb_info, NULL);
- if (!datastore) {
- return NULL;
- }
- return datastore->data;
-}
-
-/*!
- * \internal
- * \brief Run any after bridge callback.
- * \since 12.0.0
- *
- * \param chan Channel to run after bridge callback.
- *
- * \return Nothing
- */
-static void after_bridge_callback_run(struct ast_channel *chan)
-{
struct after_bridge_cb_ds *after_bridge;
- struct after_bridge_cb_node *node;
-
- after_bridge = after_bridge_cb_find(chan);
- if (!after_bridge) {
- return;
- }
-
- for (;;) {
- AST_LIST_LOCK(&after_bridge->callbacks);
- node = AST_LIST_REMOVE_HEAD(&after_bridge->callbacks, list);
- AST_LIST_UNLOCK(&after_bridge->callbacks);
- if (!node) {
- break;
- }
- if (node->reason) {
- after_bridge_cb_failed(node);
- } else {
- node->failed = NULL;
- node->callback(chan, node->data);
- }
- ast_free(node);
- }
-}
-
-/*!
- * \internal
- * \brief Run discarding any after bridge callbacks.
- * \since 12.0.0
- *
- * \param chan Channel to run after bridge callback.
- *
- * \return Nothing
- */
-static void after_bridge_callback_run_discard(struct ast_channel *chan, enum ast_after_bridge_cb_reason reason)
-{
- struct after_bridge_cb_ds *after_bridge;
-
- after_bridge = after_bridge_cb_find(chan);
- if (!after_bridge) {
- return;
- }
-
- after_bridge_cb_run_discard(after_bridge, reason);
-}
-
-void ast_after_bridge_callback_discard(struct ast_channel *chan, enum ast_after_bridge_cb_reason reason)
-{
- struct after_bridge_cb_ds *after_bridge;
- struct after_bridge_cb_node *node;
-
- after_bridge = after_bridge_cb_find(chan);
- if (!after_bridge) {
- return;
- }
-
- AST_LIST_LOCK(&after_bridge->callbacks);
- node = AST_LIST_LAST(&after_bridge->callbacks);
- if (node && !node->reason) {
- node->reason = reason;
- }
- AST_LIST_UNLOCK(&after_bridge->callbacks);
-}
-
-int ast_after_bridge_callback_set(struct ast_channel *chan, ast_after_bridge_cb callback, ast_after_bridge_cb_failed failed, void *data)
-{
- struct after_bridge_cb_ds *after_bridge;
- struct after_bridge_cb_node *new_node;
- struct after_bridge_cb_node *last_node;
/* Sanity checks. */
ast_assert(chan != NULL);
@@ -3397,28 +3282,29 @@
return -1;
}
- after_bridge = after_bridge_cb_setup(chan);
+ /* Create a new datastore. */
+ datastore = ast_datastore_alloc(&after_bridge_cb_info, NULL);
+ if (!datastore) {
+ return -1;
+ }
+ after_bridge = ast_calloc(1, sizeof(*after_bridge));
if (!after_bridge) {
+ ast_datastore_free(datastore);
return -1;
}
- /* Create a new callback node. */
- new_node = ast_calloc(1, sizeof(*new_node));
- if (!new_node) {
- return -1;
- }
- new_node->callback = callback;
- new_node->failed = failed;
- new_node->data = data;
-
- /* Put it in the container disabling any previously active one. */
- AST_LIST_LOCK(&after_bridge->callbacks);
- last_node = AST_LIST_LAST(&after_bridge->callbacks);
- if (last_node && !last_node->reason) {
- last_node->reason = AST_AFTER_BRIDGE_CB_REASON_REPLACED;
- }
- AST_LIST_INSERT_TAIL(&after_bridge->callbacks, new_node, list);
- AST_LIST_UNLOCK(&after_bridge->callbacks);
+ /* Initialize it. */
+ after_bridge->callback = callback;
+ after_bridge->failed = failed;
+ after_bridge->data = data;
+ datastore->data = after_bridge;
+
+ /* Put it on the channel replacing any existing one. */
+ ast_channel_lock(chan);
+ ast_after_bridge_callback_discard(chan, AST_AFTER_BRIDGE_CB_REASON_REPLACED);
+ ast_channel_datastore_add(chan, datastore);
+ ast_channel_unlock(chan);
+
return 0;
}
@@ -3883,7 +3769,7 @@
ast_bridge_features_destroy(bridge_channel->features);
bridge_channel->features = NULL;
- after_bridge_callback_run_discard(bridge_channel->chan, AST_AFTER_BRIDGE_CB_REASON_DEPART);
+ ast_after_bridge_callback_discard(bridge_channel->chan, AST_AFTER_BRIDGE_CB_REASON_DEPART);
ast_after_bridge_goto_discard(bridge_channel->chan);
return NULL;
@@ -5103,23 +4989,6 @@
}
builtin_features_handlers[feature] = NULL;
-
- return 0;
-}
-
-int ast_bridge_features_do(enum ast_bridge_builtin_feature feature, struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, void *hook_pvt)
-{
- ast_bridge_hook_callback callback;
-
- if (ARRAY_LEN(builtin_features_handlers) <= feature) {
- return -1;
- }
-
- callback = builtin_features_handlers[feature];
- if (!callback) {
- return -1;
- }
- callback(bridge, bridge_channel, hook_pvt);
return 0;
}
Modified: trunk/main/config_options.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/config_options.c?view=diff&rev=393632&r1=393631&r2=393632
==============================================================================
--- trunk/main/config_options.c (original)
+++ trunk/main/config_options.c Wed Jul 3 18:57:37 2013
@@ -598,12 +598,6 @@
return ACO_PROCESS_ERROR;
}
-/*
- * BUGBUG must fix config framework loading of multiple files.
- *
- * A reload with multiple files must reload all files if any
- * file has been touched.
- */
while (res != ACO_PROCESS_ERROR && (file = info->files[x++])) {
const char *filename = file->filename;
try_alias:
Modified: trunk/main/stasis_channels.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/stasis_channels.c?view=diff&rev=393632&r1=393631&r2=393632
==============================================================================
--- trunk/main/stasis_channels.c (original)
+++ trunk/main/stasis_channels.c Wed Jul 3 18:57:37 2013
@@ -51,35 +51,6 @@
<para>The new value of the variable.</para>
</parameter>
</syntax>
- </managerEventInstance>
- </managerEvent>
- <managerEvent language="en_US" name="AgentLogin">
- <managerEventInstance class="EVENT_FLAG_AGENT">
- <synopsis>Raised when an Agent has logged in.</synopsis>
- <syntax>
- <xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
- <parameter name="Agent">
- <para>The name of the agent.</para>
- </parameter>
- </syntax>
- <see-also>
- <ref type="application">AgentLogin</ref>
- <ref type="managerEvent">Agentlogoff</ref>
- </see-also>
- </managerEventInstance>
- </managerEvent>
- <managerEvent language="en_US" name="AgentLogoff">
- <managerEventInstance class="EVENT_FLAG_AGENT">
- <synopsis>Raised when an Agent has logged off.</synopsis>
- <syntax>
- <xi:include xpointer="xpointer(/docs/managerEvent[@name='AgentLogin']/managerEventInstance/syntax/parameter)" />
- <parameter name="Logintime">
- <para>The number of seconds the agent was logged in.</para>
- </parameter>
- </syntax>
- <see-also>
- <ref type="managerEvent">AgentLogin</ref>
- </see-also>
</managerEventInstance>
</managerEvent>
***/
@@ -617,44 +588,6 @@
"Variable: %s\r\n"
"Value: %s\r\n",
ast_str_buffer(channel_event_string), variable, value);
-}
-
-static struct ast_manager_event_blob *agent_login_to_ami(struct stasis_message *msg)
-{
- RAII_VAR(struct ast_str *, channel_string, NULL, ast_free);
- RAII_VAR(struct ast_str *, party_string, ast_str_create(256), ast_free);
- struct ast_channel_blob *obj = stasis_message_data(msg);
- const char *agent = ast_json_string_get(ast_json_object_get(obj->blob, "agent"));
-
- channel_string = ast_manager_build_channel_state_string(obj->snapshot);
- if (!channel_string) {
- return NULL;
- }
-
- return ast_manager_event_blob_create(EVENT_FLAG_AGENT, "AgentLogin",
- "%s"
- "Agent: %s\r\n",
- ast_str_buffer(channel_string), agent);
-}
-
-static struct ast_manager_event_blob *agent_logoff_to_ami(struct stasis_message *msg)
-{
- RAII_VAR(struct ast_str *, channel_string, NULL, ast_free);
- RAII_VAR(struct ast_str *, party_string, ast_str_create(256), ast_free);
- struct ast_channel_blob *obj = stasis_message_data(msg);
- const char *agent = ast_json_string_get(ast_json_object_get(obj->blob, "agent"));
- long logintime = ast_json_integer_get(ast_json_object_get(obj->blob, "logintime"));
-
- channel_string = ast_manager_build_channel_state_string(obj->snapshot);
- if (!channel_string) {
- return NULL;
- }
-
- return ast_manager_event_blob_create(EVENT_FLAG_AGENT, "AgentLogoff",
- "%s"
- "Agent: %s\r\n"
- "Logintime: %ld\r\n",
- ast_str_buffer(channel_string), agent, logintime);
}
void ast_publish_channel_state(struct ast_channel *chan)
@@ -857,12 +790,6 @@
STASIS_MESSAGE_TYPE_DEFN(ast_channel_moh_stop_type);
STASIS_MESSAGE_TYPE_DEFN(ast_channel_monitor_start_type);
STASIS_MESSAGE_TYPE_DEFN(ast_channel_monitor_stop_type);
-STASIS_MESSAGE_TYPE_DEFN(ast_channel_agent_login_type,
- .to_ami = agent_login_to_ami,
- );
-STASIS_MESSAGE_TYPE_DEFN(ast_channel_agent_logoff_type,
- .to_ami = agent_logoff_to_ami,
- );
/*! @} */
@@ -889,8 +816,6 @@
STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_moh_stop_type);
STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_monitor_start_type);
STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_monitor_stop_type);
- STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_agent_login_type);
- STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_agent_logoff_type);
}
void ast_stasis_channels_init(void)
@@ -914,8 +839,6 @@
STASIS_MESSAGE_TYPE_INIT(ast_channel_moh_stop_type);
STASIS_MESSAGE_TYPE_INIT(ast_channel_monitor_start_type);
STASIS_MESSAGE_TYPE_INIT(ast_channel_monitor_stop_type);
- STASIS_MESSAGE_TYPE_INIT(ast_channel_agent_login_type);
- STASIS_MESSAGE_TYPE_INIT(ast_channel_agent_logoff_type);
channel_topic_all = stasis_topic_create("ast_channel_topic_all");
channel_topic_all_cached = stasis_caching_topic_create(channel_topic_all, channel_snapshot_get_id);
More information about the asterisk-commits
mailing list