[Asterisk-code-review] res_pjsip_messaging: Allow Content-Type to be overridden (asterisk[17])
Joshua Colp
asteriskteam at digium.com
Mon Feb 3 06:12:01 CST 2020
Joshua Colp has submitted this change. ( https://gerrit.asterisk.org/c/asterisk/+/13703 )
Change subject: res_pjsip_messaging: Allow Content-Type to be overridden
......................................................................
res_pjsip_messaging: Allow Content-Type to be overridden
ASTERISK-26082 #close
Reported by: Alex
Change-Id: I6549e90932016349bc72b0f053432dc25286f4fb
---
M res/res_pjsip_messaging.c
1 file changed, 33 insertions(+), 5 deletions(-)
Approvals:
George Joseph: Looks good to me, but someone else must approve
Joshua Colp: Looks good to me, approved; Approved for Submit
diff --git a/res/res_pjsip_messaging.c b/res/res_pjsip_messaging.c
index 930cf84..5e41d63 100644
--- a/res/res_pjsip_messaging.c
+++ b/res/res_pjsip_messaging.c
@@ -316,10 +316,7 @@
{
int i;
- /*
- * Don't block Content-Type or Max-Forwards headers because the
- * user can override them.
- */
+ /* Don't block the Max-Forwards header because the user can override it */
static const char *hdr[] = {
"To",
"From",
@@ -330,6 +327,7 @@
"CSeq",
"Allow",
"Content-Length",
+ "Content-Type",
"Request-URI",
};
@@ -635,11 +633,40 @@
return mdata;
}
+static void update_content_type(pjsip_tx_data *tdata, struct ast_msg *msg, struct ast_sip_body *body)
+{
+ static const pj_str_t CONTENT_TYPE = { "Content-Type", sizeof("Content-Type") - 1 };
+
+ const char *content_type = ast_msg_get_var(msg, pj_strbuf(&CONTENT_TYPE));
+ if (content_type) {
+ pj_str_t type, subtype;
+ pjsip_ctype_hdr *parsed;
+
+ /* Let pjsip do the parsing for us */
+ parsed = pjsip_parse_hdr(tdata->pool, &CONTENT_TYPE,
+ ast_strdupa(content_type), strlen(content_type),
+ NULL);
+
+ if (!parsed) {
+ ast_log(LOG_WARNING, "Failed to parse '%s' as a content type. Using text/plain\n",
+ content_type);
+ return;
+ }
+
+ /* We need to turn type and subtype into zero-terminated strings */
+ pj_strdup_with_null(tdata->pool, &type, &parsed->media.type);
+ pj_strdup_with_null(tdata->pool, &subtype, &parsed->media.subtype);
+
+ body->type = pj_strbuf(&type);
+ body->subtype = pj_strbuf(&subtype);
+ }
+}
+
static int msg_send(void *data)
{
RAII_VAR(struct msg_data *, mdata, data, ao2_cleanup);
- const struct ast_sip_body body = {
+ struct ast_sip_body body = {
.type = "text",
.subtype = "plain",
.body_text = ast_msg_get_body(mdata->msg)
@@ -664,6 +691,7 @@
update_to(tdata, mdata->to);
update_from(tdata, mdata->from);
+ update_content_type(tdata, mdata->msg, &body);
if (ast_sip_add_body(tdata, &body)) {
pjsip_tx_data_dec_ref(tdata);
--
To view, visit https://gerrit.asterisk.org/c/asterisk/+/13703
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings
Gerrit-Project: asterisk
Gerrit-Branch: 17
Gerrit-Change-Id: I6549e90932016349bc72b0f053432dc25286f4fb
Gerrit-Change-Number: 13703
Gerrit-PatchSet: 1
Gerrit-Owner: Sean Bright <sean.bright at gmail.com>
Gerrit-Reviewer: Friendly Automation
Gerrit-Reviewer: George Joseph <gjoseph at digium.com>
Gerrit-Reviewer: Joshua Colp <jcolp at sangoma.com>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20200203/2502b542/attachment-0001.html>
More information about the asterisk-code-review
mailing list