mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 12:16:00 +00:00
app_sendtext: Allow content types other than text/plain
There was no real reason to limit the conteny type to text/plain other than that's what it was limited to before. Now any text/* content type will be allowed for channel drivers that don't support enhanced messaging and any type will be allowed for channel drivers that do support enhanced messaging. Change-Id: I94a90cfee98b4bc8e22aa5c0b6afb7b862f979d9
This commit is contained in:
@@ -68,9 +68,13 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
|||||||
</variable>
|
</variable>
|
||||||
<variable name="SENDTEXT_CONTENT_TYPE">
|
<variable name="SENDTEXT_CONTENT_TYPE">
|
||||||
<para>If set and this channel supports enhanced messaging, this value will be
|
<para>If set and this channel supports enhanced messaging, this value will be
|
||||||
used as the message <literal>Content-Type</literal>. It <emphasis>MUST</emphasis>
|
used as the message <literal>Content-Type</literal>. If not specified, the
|
||||||
be a <literal>text/*</literal> content type. If not specified, the
|
|
||||||
default of <literal>text/plain</literal> will be used.</para>
|
default of <literal>text/plain</literal> will be used.</para>
|
||||||
|
<para><emphasis>Warning:</emphasis> Messages of types other than
|
||||||
|
<literal>text/*</literal> cannot be sent via channel drivers that do not
|
||||||
|
support Enhanced Messaging. An attempt to do so will be ignored and will result
|
||||||
|
in the <literal>SENDTEXTSTATUS</literal> variable being set to
|
||||||
|
<literal>UNSUPPORTED</literal>.</para>
|
||||||
</variable>
|
</variable>
|
||||||
<variable name="SENDTEXT_BODY">
|
<variable name="SENDTEXT_BODY">
|
||||||
<para>If set this value will be used as the message body and any text supplied
|
<para>If set this value will be used as the message body and any text supplied
|
||||||
@@ -193,11 +197,6 @@ static int sendtext_exec(struct ast_channel *chan, const char *data)
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!ast_strlen_zero(content_type) && !ast_begins_with(content_type, "text/")) {
|
|
||||||
ast_log(LOG_ERROR, "SENDTEXT_CONTENT_TYPE must begin with 'text/'\n");
|
|
||||||
rc = -1;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
msg_type = "ENHANCED";
|
msg_type = "ENHANCED";
|
||||||
msg = ast_msg_data_alloc(AST_MSG_DATA_SOURCE_TYPE_IN_DIALOG, attrs, ARRAY_LEN(attrs));
|
msg = ast_msg_data_alloc(AST_MSG_DATA_SOURCE_TYPE_IN_DIALOG, attrs, ARRAY_LEN(attrs));
|
||||||
if (msg) {
|
if (msg) {
|
||||||
@@ -214,6 +213,11 @@ static int sendtext_exec(struct ast_channel *chan, const char *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else if (ast_channel_tech(chan)->send_text) {
|
} else if (ast_channel_tech(chan)->send_text) {
|
||||||
|
if (!ast_strlen_zero(content_type) && !ast_begins_with(content_type, "text/")) {
|
||||||
|
rc = -1;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
msg_type = "BASIC";
|
msg_type = "BASIC";
|
||||||
if (ast_sendtext(chan, body) == 0) {
|
if (ast_sendtext(chan, body) == 0) {
|
||||||
status = "SUCCESS";
|
status = "SUCCESS";
|
||||||
|
@@ -4889,7 +4889,7 @@ int ast_sendtext_data(struct ast_channel *chan, struct ast_msg_data *msg)
|
|||||||
|
|
||||||
CHECK_BLOCKING(chan);
|
CHECK_BLOCKING(chan);
|
||||||
if (ast_channel_tech(chan)->write_text
|
if (ast_channel_tech(chan)->write_text
|
||||||
&& (ast_strlen_zero(content_type) || strcasecmp(content_type, "text/plain") == 0)
|
&& (ast_strlen_zero(content_type) || ast_begins_with(content_type, "text/"))
|
||||||
&& (ast_format_cap_has_type(ast_channel_nativeformats(chan), AST_MEDIA_TYPE_TEXT))) {
|
&& (ast_format_cap_has_type(ast_channel_nativeformats(chan), AST_MEDIA_TYPE_TEXT))) {
|
||||||
struct ast_frame f;
|
struct ast_frame f;
|
||||||
size_t body_len = strlen(body) + 1;
|
size_t body_len = strlen(body) + 1;
|
||||||
@@ -4917,7 +4917,7 @@ int ast_sendtext_data(struct ast_channel *chan, struct ast_msg_data *msg)
|
|||||||
ast_channel_name(chan), body);
|
ast_channel_name(chan), body);
|
||||||
res = ast_channel_tech(chan)->send_text_data(chan, msg);
|
res = ast_channel_tech(chan)->send_text_data(chan, msg);
|
||||||
} else if (ast_channel_tech(chan)->send_text
|
} else if (ast_channel_tech(chan)->send_text
|
||||||
&& (ast_strlen_zero(content_type) || strcasecmp(content_type, "text/plain") == 0)) {
|
&& (ast_strlen_zero(content_type) || ast_begins_with(content_type, "text/"))) {
|
||||||
/* Send the body of an enhanced message to a channel driver that supports only a char str */
|
/* Send the body of an enhanced message to a channel driver that supports only a char str */
|
||||||
ast_debug(1, "Sending TEXT to %s: %s\n", ast_channel_name(chan), body);
|
ast_debug(1, "Sending TEXT to %s: %s\n", ast_channel_name(chan), body);
|
||||||
res = ast_channel_tech(chan)->send_text(chan, body);
|
res = ast_channel_tech(chan)->send_text(chan, body);
|
||||||
|
Reference in New Issue
Block a user