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 = '_';
- }
- }
-
- switch_channel_set_variable_name_printf(channel, mp->mp_payload->pl_data, SOFIA_MULTIPART_PREFIX "%s", name);
+ char *val = switch_core_session_sprintf(session, "%s:%s", mp->mp_content_type->c_type, mp->mp_payload->pl_data);
+ switch_channel_add_variable_var_check(channel, "sip_multipart", val, SWITCH_FALSE, SWITCH_STACK_PUSH);
}
}
}
tech_pvt->nh->nh_has_invite = 1;
}
- if ((mp = sofia_media_get_multipart(session, SOFIA_MULTIPART_PREFIX, tech_pvt->mparams.local_sdp_str, &mp_type))) {
+ if ((mp = sofia_media_get_multipart(session, "sip_multipart", tech_pvt->mparams.local_sdp_str, &mp_type))) {
sofia_clear_flag(tech_pvt, TFLAG_ENABLE_SOA);
}
return SWITCH_STATUS_FALSE;
}
+static void process_mp(switch_core_session_t *session, switch_stream_handle_t *stream, const char *boundary, const char *str) {
+ char *dname = switch_core_session_strdup(session, str);
+ char *dval;
+
+ if ((dval = strchr(dname, ':'))) {
+ *dval++ = '\0';
+ if (*dval == '~') {
+ stream->write_function(stream, "--%s\nContent-Type: %s\nContent-Length: %d\n%s\n", boundary, dname, strlen(dval), dval + 1);
+ } else {
+ stream->write_function(stream, "--%s\nContent-Type: %s\nContent-Length: %d\n\n%s\n", boundary, dname, strlen(dval) + 1, dval);
+ }
+ }
+}
char *sofia_media_get_multipart(switch_core_session_t *session, const char *prefix, const char *sdp, char **mp_type)
{
const char *name = (char *) hi->name;
char *value = (char *) hi->value;
- if (!strncasecmp(name, prefix, strlen(prefix))) {
- const char *hname = name + strlen(prefix);
- if (*value == '~') {
- stream.write_function(&stream, "--%s\nContent-Type: %s\nContent-Length: %d\n%s\n", boundary, hname, strlen(value), value + 1);
+ if (!strcasecmp(name, prefix)) {
+ if (hi->idx > 0) {
+ int i = 0;
+
+ for(i = 0; i < hi->idx; i++) {
+ process_mp(session, &stream, boundary, hi->array[i]);
+ x++;
+ }
} else {
- stream.write_function(&stream, "--%s\nContent-Type: %s\nContent-Length: %d\n\n%s\n", boundary, hname, strlen(value) + 1, value);
+ process_mp(session, &stream, boundary, value);
+ x++;
}
- x++;
}
}
switch_channel_variable_last(channel);