From bd1c6106dc9e56de169fbc1012fe8bd4d37de42d Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 8 Aug 2013 05:15:18 +0500 Subject: [PATCH] FS-5682 --- src/mod/endpoints/mod_sofia/sofia.c | 14 ++++++-------- src/mod/endpoints/mod_sofia/sofia_glue.c | 7 +++++++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 087ad7bed4..834e83f24c 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -8350,15 +8350,13 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia for (mp = sip->sip_multipart; mp; mp = mp->mp_next) { if (mp->mp_payload && mp->mp_payload->pl_data && mp->mp_content_type && mp->mp_content_type->c_type) { char *name = switch_core_session_strdup(session, mp->mp_content_type->c_type); - char *p; - - for (p = name; p && *p; p++) { - if (*p == '/') { - *p = '_'; - } - } + char *encoded_name; + int len = (strlen(name) * 3) + 1; - switch_channel_set_variable_name_printf(channel, mp->mp_payload->pl_data, SOFIA_MULTIPART_PREFIX "%s", name); + encoded_name = switch_core_session_alloc(session, len); + switch_url_encode(name, encoded_name, len); + + switch_channel_set_variable_name_printf(channel, mp->mp_payload->pl_data, SOFIA_MULTIPART_PREFIX "_enc_%s", encoded_name); } } } diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index 1b1b51438d..382ca069ee 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -1986,6 +1986,13 @@ char *sofia_glue_get_multipart(switch_core_session_t *session, const char *prefi if (!strncasecmp(name, prefix, strlen(prefix))) { const char *hname = name + strlen(prefix); + + if (*hname == '_' && strncmp(hname, "_enc_", 4)) { + char *dname = switch_core_session_strdup(session, hname); + switch_url_decode(dname); + hname = dname; + } + if (*value == '~') { stream.write_function(&stream, "--%s\nContent-Type: %s\nContent-Length: %d\n%s\n", boundary, hname, strlen(value), value + 1); } else {