[Asterisk-code-review] app_mixmonitor: Add AMI event MixMonitorMute. (asterisk[master])

Sébastien Duthil asteriskteam at digium.com
Thu Jan 14 16:14:06 CST 2021


Sébastien Duthil has uploaded this change for review. ( https://gerrit.asterisk.org/c/asterisk/+/15326 )


Change subject: app_mixmonitor: Add AMI event MixMonitorMute.
......................................................................

app_mixmonitor: Add AMI event MixMonitorMute.

Change-Id: I878e5843984c7c477e87f3672850b4cb10e6e8d4
---
M apps/app_mixmonitor.c
M include/asterisk/stasis_channels.h
M main/manager_channels.c
M main/stasis.c
M main/stasis_channels.c
5 files changed, 59 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/26/15326/1

diff --git a/apps/app_mixmonitor.c b/apps/app_mixmonitor.c
index 50b119a..5195b7b 100644
--- a/apps/app_mixmonitor.c
+++ b/apps/app_mixmonitor.c
@@ -1368,6 +1368,8 @@
 	const char *direction = astman_get_header(m,"Direction");
 	int clearmute = 1;
 	enum ast_audiohook_flags flag;
+	RAII_VAR(struct stasis_message *, stasis_message, NULL, ao2_cleanup);
+	RAII_VAR(struct ast_json *, stasis_message_blob, NULL, ast_json_unref);
 
 	if (ast_strlen_zero(direction)) {
 		astman_send_error(s, m, "No direction specified. Must be read, write or both");
@@ -1409,6 +1411,17 @@
 		return AMI_SUCCESS;
 	}
 
+	stasis_message_blob = ast_json_pack("{s: s, s: b}",
+		"direction", direction,
+		"state", ast_true(state));
+
+	stasis_message = ast_channel_blob_create_from_cache(ast_channel_uniqueid(c),
+		ast_channel_mixmonitor_mute_type(), stasis_message_blob);
+
+	if (stasis_message) {
+		stasis_publish(ast_channel_topic(c), stasis_message);
+	}
+
 	astman_append(s, "Response: Success\r\n");
 
 	if (!ast_strlen_zero(id)) {
diff --git a/include/asterisk/stasis_channels.h b/include/asterisk/stasis_channels.h
index 152d545..02654e9 100644
--- a/include/asterisk/stasis_channels.h
+++ b/include/asterisk/stasis_channels.h
@@ -606,6 +606,14 @@
 struct stasis_message_type *ast_channel_mixmonitor_stop_type(void);
 
 /*!
+ * \since 18
+ * \brief Message type for muting or unmuting mixmonitor on a channel
+ *
+ * \retval A stasis message type
+ */
+struct stasis_message_type *ast_channel_mixmonitor_mute_type(void);
+
+/*!
  * \since 18.0.0
  * \brief Message type for agent login on a channel
  *
diff --git a/main/manager_channels.c b/main/manager_channels.c
index 6dc32ee..22f3c52 100644
--- a/main/manager_channels.c
+++ b/main/manager_channels.c
@@ -1132,6 +1132,37 @@
 	publish_basic_channel_event("MixMonitorStop", EVENT_FLAG_CALL, payload->snapshot);
 }
 
+static void channel_mixmonitor_mute_cb(void *data, struct stasis_subscription *sub,
+		struct stasis_message *message)
+{
+	RAII_VAR(struct ast_str *, channel_event_string, NULL, ast_free);
+	RAII_VAR(struct ast_str *, event_buffer, ast_str_create(64), ast_free);
+	struct ast_channel_blob *payload = stasis_message_data(message);
+	struct ast_json *direction = ast_json_object_get(payload->blob, "direction");
+	const int state = ast_json_is_true(ast_json_object_get(payload->blob, "state"));
+
+	if (!event_buffer) {
+		return;
+	}
+
+	channel_event_string = ast_manager_build_channel_state_string(payload->snapshot);
+	if (!channel_event_string) {
+		return;
+	}
+
+	if (direction) {
+		ast_str_append(&event_buffer, 0, "Direction: %s\r\n", ast_json_string_get(direction));
+	}
+	ast_str_append(&event_buffer, 0, "State: %s\r\n", state ? "1" : "0");
+
+	manager_event(EVENT_FLAG_CALL, "MixMonitorMute",
+		"%s"
+		"%s",
+		ast_str_buffer(channel_event_string),
+		ast_str_buffer(event_buffer));
+
+}
+
 static int dial_status_end(const char *dialstatus)
 {
 	return (strcmp(dialstatus, "RINGING") &&
@@ -1342,6 +1373,9 @@
 	ret |= stasis_message_router_add(message_router,
     ast_channel_mixmonitor_stop_type(), channel_mixmonitor_stop_cb, NULL);
 
+	ret |= stasis_message_router_add(message_router,
+    ast_channel_mixmonitor_mute_type(), channel_mixmonitor_mute_cb, NULL);
+
 	/* If somehow we failed to add any routes, just shut down the whole
 	 * thing and fail it.
 	 */
diff --git a/main/stasis.c b/main/stasis.c
index b2172e9..4ae6d6a 100644
--- a/main/stasis.c
+++ b/main/stasis.c
@@ -132,6 +132,7 @@
 							<enum name="ast_channel_monitor_stop_type" />
 							<enum name="ast_channel_mixmonitor_start_type" />
 							<enum name="ast_channel_mixmonitor_stop_type" />
+							<enum name="ast_channel_mixmonitor_mute_type" />
 							<enum name="ast_channel_agent_login_type" />
 							<enum name="ast_channel_agent_logoff_type" />
 							<enum name="ast_channel_talking_start" />
diff --git a/main/stasis_channels.c b/main/stasis_channels.c
index 925f75c..3f3312b 100644
--- a/main/stasis_channels.c
+++ b/main/stasis_channels.c
@@ -1608,6 +1608,7 @@
 STASIS_MESSAGE_TYPE_DEFN(ast_channel_monitor_stop_type);
 STASIS_MESSAGE_TYPE_DEFN(ast_channel_mixmonitor_start_type);
 STASIS_MESSAGE_TYPE_DEFN(ast_channel_mixmonitor_stop_type);
+STASIS_MESSAGE_TYPE_DEFN(ast_channel_mixmonitor_mute_type);
 STASIS_MESSAGE_TYPE_DEFN(ast_channel_agent_login_type,
 	.to_ami = agent_login_to_ami,
 	);
@@ -1653,6 +1654,7 @@
 	STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_monitor_stop_type);
 	STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_mixmonitor_start_type);
 	STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_mixmonitor_stop_type);
+	STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_mixmonitor_mute_type);
 	STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_agent_login_type);
 	STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_agent_logoff_type);
 	STASIS_MESSAGE_TYPE_CLEANUP(ast_channel_talking_start);
@@ -1705,6 +1707,7 @@
 	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_monitor_stop_type);
 	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_mixmonitor_start_type);
 	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_mixmonitor_stop_type);
+	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_mixmonitor_mute_type);
 	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_talking_start);
 	res |= STASIS_MESSAGE_TYPE_INIT(ast_channel_talking_stop);
 

-- 
To view, visit https://gerrit.asterisk.org/c/asterisk/+/15326
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Change-Id: I878e5843984c7c477e87f3672850b4cb10e6e8d4
Gerrit-Change-Number: 15326
Gerrit-PatchSet: 1
Gerrit-Owner: Sébastien Duthil <sduthil at wazo.community>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20210114/b2261c44/attachment-0001.html>


More information about the asterisk-code-review mailing list