From 97ce647afdd02f42b5fec99b07ef50159d6f95e4 Mon Sep 17 00:00:00 2001 From: Sean Bright Date: Tue, 21 Sep 2021 10:58:09 -0400 Subject: [PATCH] message.c: Support 'To' header override with AMI's MessageSend. The MessageSend AMI action has been updated to allow the Destination and the To addresses to be provided separately. This brings the MessageSend manager command in line with the capabilities of the MessageSend dialplan application. ASTERISK-29663 #close Change-Id: I8513168d3e189a9fed88aaab6f5547ccb50d332c --- doc/CHANGES-staging/manager_message_send.txt | 6 +++ main/message.c | 39 +++++++++++++++++--- 2 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 doc/CHANGES-staging/manager_message_send.txt diff --git a/doc/CHANGES-staging/manager_message_send.txt b/doc/CHANGES-staging/manager_message_send.txt new file mode 100644 index 0000000000..ab5b58a287 --- /dev/null +++ b/doc/CHANGES-staging/manager_message_send.txt @@ -0,0 +1,6 @@ +Subject: MessageSend + +The MessageSend AMI action has been updated to allow the Destination +and the To addresses to be provided separately. This brings the +MessageSend manager command in line with the capabilities of the +MessageSend dialplan application. diff --git a/main/message.c b/main/message.c index 75450e913d..8ca3987167 100644 --- a/main/message.c +++ b/main/message.c @@ -190,8 +190,22 @@ - - The URI the message is to be sent to. + + 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. + For backwards compatibility, if Destination is not provided, + the To parameter must be provided and will be used as the message + destination. + + + + 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 Alice <sip:alice@atlanta.com>, + or a string in the format alice@atlanta.com. + This parameter is required if the Destination parameter is not + provided. @@ -1305,10 +1319,12 @@ exit_cleanup: 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 @@ static int action_messagesend(struct mansession *s, const struct message *m) 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 @@ static int action_messagesend(struct mansession *s, const struct message *m) 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); -- 2.47.2