]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
app_sendtext: Allow content types other than text/plain
authorGeorge Joseph <gjoseph@digium.com>
Mon, 4 Jun 2018 14:50:51 +0000 (08:50 -0600)
committerGeorge Joseph <gjoseph@digium.com>
Mon, 4 Jun 2018 19:20:26 +0000 (13:20 -0600)
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

apps/app_sendtext.c
main/channel.c

index 1cefb6c6883a7cb3c2098b1726c4098d97645d15..45ae073a3dabc69d919b1cc0203dfb21f88f3498 100644 (file)
                                </variable>
                                <variable name="SENDTEXT_CONTENT_TYPE">
                                        <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>
-                                       be a <literal>text/&#42;</literal> content type.  If not specified, the
+                                       used as the message <literal>Content-Type</literal>.  If not specified, the
                                        default of <literal>text/plain</literal> will be used.</para>
+                                       <para><emphasis>Warning:</emphasis> Messages of types other than
+                                       <literal>text/&#42;</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 name="SENDTEXT_BODY">
                                        <para>If set this value will be used as the message body and any text supplied
@@ -191,11 +195,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 = ast_msg_data_alloc(AST_MSG_DATA_SOURCE_TYPE_IN_DIALOG, attrs, ARRAY_LEN(attrs));
                if (msg) {
@@ -212,6 +211,11 @@ static int sendtext_exec(struct ast_channel *chan, const char *data)
                }
 
        } 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";
                if (ast_sendtext(chan, body) == 0) {
                        status = "SUCCESS";
index 4475d24af67aecf1b92cbd6260b41e23e1d2b305..92ec444d41f6306b13eb39f69a6616ae0e0ec63c 100644 (file)
@@ -4693,7 +4693,7 @@ int ast_sendtext_data(struct ast_channel *chan, struct ast_msg_data *msg)
 
        CHECK_BLOCKING(chan);
        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))) {
                struct ast_frame f;
                size_t body_len = strlen(body) + 1;
@@ -4721,7 +4721,7 @@ int ast_sendtext_data(struct ast_channel *chan, struct ast_msg_data *msg)
                        ast_channel_name(chan), body);
                res = ast_channel_tech(chan)->send_text_data(chan, msg);
        } 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 */
                ast_debug(1, "Sending TEXT to %s: %s\n", ast_channel_name(chan), body);
                res = ast_channel_tech(chan)->send_text(chan, body);