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);