[Asterisk-code-review] external_media: Add ARI support for AudioSocket. (...asterisk[master])

Benjamin Keith Ford asteriskteam at digium.com
Wed Oct 9 08:51:47 CDT 2019


Benjamin Keith Ford has uploaded this change for review. ( https://gerrit.asterisk.org/c/asterisk/+/13029


Change subject: external_media: Add ARI support for AudioSocket.
......................................................................

external_media: Add ARI support for AudioSocket.

WIP.

Change-Id: I51db231c492010bff0d3c164e0b719aab4149352
---
M res/ari/resource_channels.c
M rest-api/api-docs/channels.json
2 files changed, 66 insertions(+), 2 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/29/13029/1

diff --git a/res/ari/resource_channels.c b/res/ari/resource_channels.c
index 0fd2d69..4c860f3 100644
--- a/res/ari/resource_channels.c
+++ b/res/ari/resource_channels.c
@@ -2135,6 +2135,66 @@
 	ast_channel_unref(chan);
 }
 
+static void external_media_audiosocket_tcp(struct ast_ari_channels_external_media_args *args,
+	struct ast_variable *variables,
+	struct ast_ari_response *response)
+{
+	size_t endpoint_len;
+	char *endpoint;
+	struct ast_channel *chan;
+	struct ast_json *json_chan;
+	struct varshead *vars;
+
+	endpoint_len = strlen("AudioSocket/") + strlen(args->external_host) + 1;
+	endpoint = ast_alloca(endpoint_len);
+	snprintf(endpoint, endpoint_len, "AudioSocket/%s", args->external_host);
+
+	chan = ari_channels_handle_originate_with_id(
+		endpoint,
+		NULL,
+		NULL,
+		0,
+		NULL,
+		args->app,
+		NULL,
+		NULL,
+		0,
+		variables,
+		args->channel_id,
+		NULL,
+		NULL,
+		args->format,
+		response);
+	ast_variables_destroy(variables);
+
+	if (!chan) {
+		return;
+	}
+
+	json_chan = response->message;
+	response->message = ast_json_object_create();
+	if (!response->message) {
+		ast_channel_unref(chan);
+		ast_json_unref(json_chan);
+		ast_ari_response_alloc_failed(response);
+		return;
+	}
+
+	ast_json_object_set(response->message, "channel", json_chan);
+
+	ast_channel_lock(chan);
+	vars = ast_channel_varshead(chan);
+	if (vars && !AST_LIST_EMPTY(vars)) {
+		struct ast_var_t *variables;
+
+		ast_json_object_set(json_chan, "channelvars", ast_json_channel_vars(vars));
+		AST_LIST_TRAVERSE(vars, variables, entries) {
+		}
+	}
+	ast_channel_unlock(chan);
+	ast_channel_unref(chan);
+}
+
 #include "asterisk/config.h"
 #include "asterisk/netsock2.h"
 
@@ -2195,6 +2255,8 @@
 
 	if (strcasecmp(args->encapsulation, "rtp") == 0 && strcasecmp(args->transport, "udp") == 0) {
 		external_media_rtp_udp(args, variables, response);
+	} else if (strcasecmp(args->encapsulation, "audiosocket") == 0 && strcasecmp(args->transport, "tcp") == 0) {
+		external_media_audiosocket_tcp(args, variables, response);
 	} else {
 		ast_ari_response_error(
 			response, 501, "Not Implemented",
diff --git a/rest-api/api-docs/channels.json b/rest-api/api-docs/channels.json
index 53e6e9d..2352d22 100644
--- a/rest-api/api-docs/channels.json
+++ b/rest-api/api-docs/channels.json
@@ -1810,7 +1810,8 @@
 							"allowableValues": {
 								"valueType": "LIST",
 								"values": [
-									"rtp"
+									"rtp",
+									"audiosocket"
 								]
 							}
 						},
@@ -1825,7 +1826,8 @@
 							"allowableValues": {
 								"valueType": "LIST",
 								"values": [
-									"udp"
+									"udp",
+									"tcp"
 								]
 							}
 						},

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

Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Change-Id: I51db231c492010bff0d3c164e0b719aab4149352
Gerrit-Change-Number: 13029
Gerrit-PatchSet: 1
Gerrit-Owner: Benjamin Keith Ford <bford at digium.com>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20191009/5deae6e7/attachment.html>


More information about the asterisk-code-review mailing list