[Asterisk-code-review] message.c: Support To header override with AMI's MessageSend (asterisk[16])

Sean Bright asteriskteam at digium.com
Tue Sep 21 12:12:57 CDT 2021


Sean Bright has uploaded this change for review. ( https://gerrit.asterisk.org/c/asterisk/+/16496 )


Change subject: message.c: Support To header override with AMI's MessageSend
......................................................................

message.c: Support To header override with AMI's MessageSend

ASTERISK-29663 #close

Change-Id: I8513168d3e189a9fed88aaab6f5547ccb50d332c
---
M main/message.c
1 file changed, 33 insertions(+), 6 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/96/16496/1

diff --git a/main/message.c b/main/message.c
index 75450e9..8ca3987 100644
--- a/main/message.c
+++ b/main/message.c
@@ -190,8 +190,22 @@
 		</synopsis>
 		<syntax>
 			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
-			<parameter name="To" required="true">
-				<para>The URI the message is to be sent to.</para>
+			<parameter name="Destination" required="false">
+				<para>A To URI for the message. If Destination is provided, the To
+				parameter can also be supplied and may alter the message based on
+				the specified message technology.</para>
+				<para>For backwards compatibility, if Destination is not provided,
+				the To parameter must be provided and will be used as the message
+				destination.</para>
+				<xi:include xpointer="xpointer(/docs/info[@name='MessageDestinationInfo'])" />
+			</parameter>
+			<parameter name="To" required="false">
+				<para>A To URI for the message if needed for the
+				message technology being used to send this message. This can be a
+				SIP(S) URI, such as <literal>Alice <sip:alice at atlanta.com></literal>,
+				or a string in the format <literal>alice at atlanta.com</literal>.</para>
+				<para>This parameter is required if the Destination parameter is not
+				provided.</para>
 				<xi:include xpointer="xpointer(/docs/info[@name='MessageToInfo'])" />
 			</parameter>
 			<parameter name="From">
@@ -1305,10 +1319,12 @@
 
 static int action_messagesend(struct mansession *s, const struct message *m)
 {
-	const char *to = ast_strdupa(astman_get_header(m, "To"));
+	const char *destination = astman_get_header(m, "Destination");
+	const char *to = astman_get_header(m, "To");
 	const char *from = astman_get_header(m, "From");
 	const char *body = astman_get_header(m, "Body");
 	const char *base64body = astman_get_header(m, "Base64Body");
+	const char *to_override = NULL;
 	char base64decoded[1301] = { 0, };
 	char *tech_name = NULL;
 	struct ast_variable *vars = NULL;
@@ -1317,9 +1333,16 @@
 	struct ast_msg *msg;
 	int res = -1;
 
-	if (ast_strlen_zero(to)) {
-		astman_send_error(s, m, "No 'To' address specified.");
-		return 0;
+	if (!ast_strlen_zero(destination)) {
+		if (!ast_strlen_zero(to)) {
+			to_override = to;
+		}
+		to = destination;
+	} else {
+		if (ast_strlen_zero(to)) {
+			astman_send_error(s, m, "No 'To' address specified.");
+			return 0;
+		}
 	}
 
 	if (!ast_strlen_zero(base64body)) {
@@ -1351,6 +1374,10 @@
 
 	ast_msg_set_body(msg, "%s", body);
 
+	if (to_override) {
+		ast_string_field_set(msg, to, to_override);
+	}
+
 	res = msg_tech->msg_send(msg, S_OR(to, ""), S_OR(from, ""));
 
 	ast_rwlock_unlock(&msg_techs_lock);

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

Gerrit-Project: asterisk
Gerrit-Branch: 16
Gerrit-Change-Id: I8513168d3e189a9fed88aaab6f5547ccb50d332c
Gerrit-Change-Number: 16496
Gerrit-PatchSet: 1
Gerrit-Owner: Sean Bright <sean at seanbright.com>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20210921/33344a9f/attachment-0001.html>


More information about the asterisk-code-review mailing list