[asterisk-commits] kmoore: branch kmoore/channel_event_refactor r392276 - /team/kmoore/channel_e...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Jun 19 15:15:43 CDT 2013


Author: kmoore
Date: Wed Jun 19 15:15:41 2013
New Revision: 392276

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=392276
Log:
Rework the chan_dahdi/sig_analog interaction and revert changes in chan_agent that will be handled in a different review

Removed:
    team/kmoore/channel_event_refactor/channels/chan_dahdi.h
Modified:
    team/kmoore/channel_event_refactor/channels/chan_agent.c
    team/kmoore/channel_event_refactor/channels/chan_dahdi.c
    team/kmoore/channel_event_refactor/channels/sig_analog.c

Modified: team/kmoore/channel_event_refactor/channels/chan_agent.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/channel_event_refactor/channels/chan_agent.c?view=diff&rev=392276&r1=392275&r2=392276
==============================================================================
--- team/kmoore/channel_event_refactor/channels/chan_agent.c (original)
+++ team/kmoore/channel_event_refactor/channels/chan_agent.c Wed Jun 19 15:15:41 2013
@@ -69,7 +69,6 @@
 #include "asterisk/stringfields.h"
 #include "asterisk/event.h"
 #include "asterisk/data.h"
-#include "asterisk/stasis_channels.h"
 
 /*** DOCUMENTATION
 	<application name="AgentLogin" language="en_US">
@@ -194,36 +193,6 @@
 			<para>Sets an agent as no longer logged in.</para>
 		</description>
 	</manager>
-	<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 time the agent logged on.</para>
-				</parameter>
-			</syntax>
-			<see-also>
-				<ref type="managerEvent">AgentLogin</ref>
-			</see-also>
-		</managerEventInstance>
-	</managerEvent>
-
  ***/
 
 static const char tdesc[] = "Call Agent Proxy Channel";
@@ -1888,83 +1857,6 @@
 	AST_CLI_DEFINE(agent_logoff_cmd, "Sets an agent offline"),
 };
 
-static struct ast_manager_event_blob *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);
-}
-
-STASIS_MESSAGE_TYPE_DEFN_LOCAL(login_type,
-	.to_ami = login_to_ami,
-	);
-
-static void send_agent_login(struct ast_channel *chan, const char *agent)
-{
-	RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
-
-	ast_assert(agent != NULL);
-
-	blob = ast_json_pack("{s: s}",
-		"agent", agent);
-	if (!blob) {
-		return;
-	}
-
-	ast_channel_publish_blob(chan, login_type(), blob);
-}
-
-static struct ast_manager_event_blob *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);
-}
-
-STASIS_MESSAGE_TYPE_DEFN_LOCAL(logoff_type,
-	.to_ami = logoff_to_ami,
-	);
-
-static void send_agent_logoff(struct ast_channel *chan, const char *agent, long logintime)
-{
-	RAII_VAR(struct ast_json *, blob, NULL, ast_json_unref);
-
-	ast_assert(agent != NULL);
-
-	blob = ast_json_pack("{s: s, s: i}",
-		"agent", agent,
-		"logintime", logintime);
-	if (!blob) {
-		return;
-	}
-
-	ast_channel_publish_blob(chan, logoff_type(), blob);
-}
-
 /*!
  * Called by the AgentLogin application (from the dial plan).
  * 
@@ -2161,7 +2053,25 @@
 						p->lastdisc = ast_tvnow();
 						time(&p->loginstart);
 
-						send_agent_login(chan, p->agent);
+						/*** DOCUMENTATION
+							<managerEventInstance>
+								<synopsis>Raised when an Agent has logged in.</synopsis>
+								<syntax>
+									<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>
+						***/
+						manager_event(EVENT_FLAG_AGENT, "Agentlogin",
+							      "Agent: %s\r\n"
+							      "Channel: %s\r\n"
+							      "Uniqueid: %s\r\n",
+							      p->agent, ast_channel_name(chan), ast_channel_uniqueid(chan));
 						ast_queue_log("NONE", ast_channel_uniqueid(chan), agent, "AGENTLOGIN", "%s", ast_channel_name(chan));
 						ast_verb(2, "Agent '%s' logged in (format %s/%s)\n", p->agent,
 								    ast_getformatname(ast_channel_readformat(chan)), ast_getformatname(ast_channel_writeformat(chan)));
@@ -2243,7 +2153,22 @@
 						ast_mutex_unlock(&p->lock);
 
 						ast_devstate_changed(AST_DEVICE_UNKNOWN, AST_DEVSTATE_CACHABLE, "%s", agent);
-						send_agent_logoff(chan, p->agent, logintime);
+						/*** DOCUMENTATION
+							<managerEventInstance>
+								<synopsis>Raised when an Agent has logged off.</synopsis>
+								<syntax>
+									<xi:include xpointer="xpointer(/docs/managerEvent[@name='Agentlogin']/managerEventInstance/syntax/parameter[@name='Agent'])" />
+								</syntax>
+								<see-also>
+									<ref type="managerEvent">Agentlogin</ref>
+								</see-also>
+							</managerEventInstance>
+						***/
+						manager_event(EVENT_FLAG_AGENT, "Agentlogoff",
+							      "Agent: %s\r\n"
+							      "Logintime: %ld\r\n"
+							      "Uniqueid: %s\r\n",
+							      p->agent, logintime, ast_channel_uniqueid(chan));
 						ast_queue_log("NONE", ast_channel_uniqueid(chan), agent, "AGENTLOGOFF", "%s|%ld", ast_channel_name(chan), logintime);
 						ast_verb(2, "Agent '%s' logged out\n", p->agent);
 
@@ -2562,14 +2487,6 @@
  */
 static int load_module(void)
 {
-	if (STASIS_MESSAGE_TYPE_INIT(login_type)) {
-		return AST_MODULE_LOAD_FAILURE;
-	}
-
-	if (STASIS_MESSAGE_TYPE_INIT(logoff_type)) {
-		return AST_MODULE_LOAD_FAILURE;
-	}
-
 	if (!(agent_tech.capabilities = ast_format_cap_alloc())) {
 		ast_log(LOG_ERROR, "ast_format_cap_alloc_nolock fail.\n");
 		return AST_MODULE_LOAD_FAILURE;
@@ -2639,10 +2556,6 @@
 	AST_LIST_UNLOCK(&agents);
 
 	agent_tech.capabilities = ast_format_cap_destroy(agent_tech.capabilities);
-
-	STASIS_MESSAGE_TYPE_CLEANUP(login_type);
-	STASIS_MESSAGE_TYPE_CLEANUP(logoff_type);
-
 	return 0;
 }
 

Modified: team/kmoore/channel_event_refactor/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/channel_event_refactor/channels/chan_dahdi.c?view=diff&rev=392276&r1=392275&r2=392276
==============================================================================
--- team/kmoore/channel_event_refactor/channels/chan_dahdi.c (original)
+++ team/kmoore/channel_event_refactor/channels/chan_dahdi.c Wed Jun 19 15:15:41 2013
@@ -69,7 +69,6 @@
 
 #include <dahdi/user.h>
 #include <dahdi/tonezone.h>
-#include "chan_dahdi.h"
 #include "sig_analog.h"
 /* Analog signaling is currently still present in chan_dahdi for use with
  * radio. Sig_analog does not currently handle any radio operations. If
@@ -4065,7 +4064,7 @@
 	}
 }
 
-void dahdi_publish_channel_alarm_clear(int channel)
+static void publish_channel_alarm_clear(int channel)
 {
 	RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
 
@@ -4100,7 +4099,7 @@
 #endif	/* defined(HAVE_PRI) */
 
 	if (report_alarms & REPORT_CHANNEL_ALARMS) {
-		dahdi_publish_channel_alarm_clear(p->channel);
+		publish_channel_alarm_clear(p->channel);
 	}
 	if (report_alarms & REPORT_SPAN_ALARMS && p->manages_span_alarms) {
 		publish_span_alarm_clear(p->span);
@@ -10218,7 +10217,7 @@
 	return 0;
 }
 
-void dahdi_publish_dnd_state(int channel, const char *status)
+static void publish_dnd_state(int channel, const char *status)
 {
 	RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
 	RAII_VAR(struct ast_str *, dahdichan, ast_str_create(32), ast_free);
@@ -10263,7 +10262,7 @@
 	ast_verb(3, "%s DND on channel %d\n",
 			flag? "Enabled" : "Disabled",
 			dahdichan->channel);
-	dahdi_publish_dnd_state(dahdichan->channel, flag ? "enabled" : "disabled");
+	publish_dnd_state(dahdichan->channel, flag ? "enabled" : "disabled");
 	manager_event(EVENT_FLAG_SYSTEM, "DNDState",
 			"Channel: DAHDI/%d\r\n"
 			"Status: %s\r\n", dahdichan->channel,

Modified: team/kmoore/channel_event_refactor/channels/sig_analog.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/channel_event_refactor/channels/sig_analog.c?view=diff&rev=392276&r1=392275&r2=392276
==============================================================================
--- team/kmoore/channel_event_refactor/channels/sig_analog.c (original)
+++ team/kmoore/channel_event_refactor/channels/sig_analog.c Wed Jun 19 15:15:41 2013
@@ -47,7 +47,6 @@
 #include "asterisk/bridging.h"
 
 #include "sig_analog.h"
-#include "chan_dahdi.h"
 
 /*** DOCUMENTATION
  ***/
@@ -2623,6 +2622,19 @@
 	return ast_pthread_create_detached(&threadid, NULL, __analog_ss_thread, p);
 }
 
+static void analog_publish_channel_alarm_clear(int channel)
+{
+	RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
+
+	ast_log(LOG_NOTICE, "Alarm cleared on channel %d\n", channel);
+	body = ast_json_pack("{s: i}", "Channel", channel);
+	if (!body) {
+		return;
+	}
+	
+	ast_manager_publish_event("AlarmClear", EVENT_FLAG_SYSTEM, body);
+}
+
 static struct ast_frame *__analog_handle_event(struct analog_pvt *p, struct ast_channel *ast)
 {
 	int res, x;
@@ -3087,7 +3099,7 @@
 		break;
 	case ANALOG_EVENT_NOALARM:
 		analog_set_alarm(p, 0);
-		dahdi_publish_channel_alarm_clear(p->channel);
+		analog_publish_channel_alarm_clear(p->channel);
 		break;
 	case ANALOG_EVENT_WINKFLASH:
 		if (p->inalarm) {
@@ -3729,7 +3741,7 @@
 		break;
 	case ANALOG_EVENT_NOALARM:
 		analog_set_alarm(i, 0);
-		dahdi_publish_channel_alarm_clear(i->channel);
+		analog_publish_channel_alarm_clear(i->channel);
 		break;
 	case ANALOG_EVENT_ALARM:
 		analog_set_alarm(i, 1);
@@ -3932,6 +3944,27 @@
 	return 0;
 }
 
+static void analog_publish_dnd_state(int channel, const char *status)
+{
+	RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
+	RAII_VAR(struct ast_str *, dahdichan, ast_str_create(32), ast_free);
+	if (!dahdichan) {
+		return;
+	}
+
+	ast_str_set(&dahdichan, 0, "DAHDI/%d", channel);
+
+	ast_log(LOG_NOTICE, "Alarm cleared on channel %d\n", channel);
+	body = ast_json_pack("{s: s, s: s}",
+		"Channel", ast_str_buffer(dahdichan),
+		"Status", status);
+	if (!body) {
+		return;
+	}
+	
+	ast_manager_publish_event("DNDState", EVENT_FLAG_SYSTEM, body);
+}
+
 int analog_dnd(struct analog_pvt *p, int flag)
 {
 	if (flag == -1) {
@@ -3943,7 +3976,7 @@
 	ast_verb(3, "%s DND on channel %d\n",
 			flag ? "Enabled" : "Disabled",
 			p->channel);
-	dahdi_publish_dnd_state(p->channel, flag ? "enabled" : "disabled");
+	analog_publish_dnd_state(p->channel, flag ? "enabled" : "disabled");
 
 	return 0;
 }




More information about the asterisk-commits mailing list