summaryrefslogtreecommitdiff
path: root/main/stasis_channels.c
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2013-07-03 23:55:53 +0000
committerRichard Mudgett <rmudgett@digium.com>2013-07-03 23:55:53 +0000
commitb4e9a3fc2fd63a4a73c5a0025f3fdef86578da4c (patch)
treec3491316e597c573889a748e80c1be925c20bf94 /main/stasis_channels.c
parentc841c34aae82660d43ff24b2a379fa38aa7d984b (diff)
Add BUGBUG note for ASTERISK-22009
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393631 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/stasis_channels.c')
-rw-r--r--main/stasis_channels.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/main/stasis_channels.c b/main/stasis_channels.c
index d121279d8..dd8f7b445 100644
--- a/main/stasis_channels.c
+++ b/main/stasis_channels.c
@@ -53,6 +53,35 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
</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>
***/
#define NUM_MULTI_CHANNEL_BLOB_BUCKETS 7
@@ -590,6 +619,44 @@ static struct ast_manager_event_blob *varset_to_ami(struct stasis_message *msg)
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)
{
RAII_VAR(struct ast_channel_snapshot *, snapshot, NULL, ao2_cleanup);
@@ -790,6 +857,12 @@ STASIS_MESSAGE_TYPE_DEFN(ast_channel_moh_start_type);
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,
+ );
/*! @} */
@@ -816,6 +889,8 @@ static void stasis_channels_cleanup(void)
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)
@@ -839,6 +914,8 @@ void ast_stasis_channels_init(void)
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);