mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-27 07:59:20 +00:00
Fixed content type parameters between SalBodyHandler and Content
This commit is contained in:
parent
c001364b39
commit
cf2b6ca2bf
3 changed files with 40 additions and 6 deletions
|
|
@ -348,6 +348,26 @@ void sal_body_handler_set_subtype(SalBodyHandler *body_handler, const char *subt
|
|||
belle_sip_header_content_type_set_subtype(content_type, subtype);
|
||||
}
|
||||
|
||||
char * sal_body_handler_get_content_type_parameters(const SalBodyHandler *body_handler) {
|
||||
belle_sip_header_content_type_t *content_type = BELLE_SIP_HEADER_CONTENT_TYPE(sal_body_handler_find_header(body_handler, "Content-Type"));
|
||||
if (content_type != NULL) {
|
||||
char buff[2048];
|
||||
size_t buff_size = sizeof(buff);
|
||||
size_t offset = 0;
|
||||
belle_sip_parameters_marshal(BELLE_SIP_PARAMETERS(content_type), buff, buff_size, &offset);
|
||||
buff[offset]='\0';
|
||||
return strdup(buff);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void sal_body_handler_set_content_type_parameters(SalBodyHandler *body_handler, const char *params) {
|
||||
belle_sip_header_content_type_t *content_type = BELLE_SIP_HEADER_CONTENT_TYPE(sal_body_handler_find_header(body_handler, "Content-Type"));
|
||||
if (content_type != NULL) {
|
||||
belle_sip_parameters_set(BELLE_SIP_PARAMETERS(content_type), params);
|
||||
}
|
||||
}
|
||||
|
||||
const char * sal_body_handler_get_encoding(const SalBodyHandler *body_handler) {
|
||||
belle_sip_header_t *content_encoding = sal_body_handler_find_header(body_handler, "Content-Encoding");
|
||||
if (content_encoding != NULL) {
|
||||
|
|
|
|||
|
|
@ -233,9 +233,14 @@ static LinphoneContent * linphone_content_new_with_body_handler(SalBodyHandler *
|
|||
content->cryptoContext = NULL;
|
||||
LinphonePrivate::Content *c = new LinphonePrivate::Content();
|
||||
L_SET_CPP_PTR_FROM_C_OBJECT(content, c);
|
||||
|
||||
if (body_handler != NULL) {
|
||||
linphone_content_set_type(content, sal_body_handler_get_type(body_handler));
|
||||
linphone_content_set_subtype(content, sal_body_handler_get_subtype(body_handler));
|
||||
LinphonePrivate::ContentType ct = c->getContentType();
|
||||
ct.setType(sal_body_handler_get_type(body_handler));
|
||||
ct.setSubType(sal_body_handler_get_subtype(body_handler));
|
||||
ct.setParameter(sal_body_handler_get_content_type_parameters(body_handler));
|
||||
c->setContentType(ct);
|
||||
|
||||
if (!sal_body_handler_is_multipart(body_handler)) {
|
||||
linphone_content_set_string_buffer(content, (char *)sal_body_handler_get_data(body_handler));
|
||||
} else {
|
||||
|
|
@ -257,8 +262,10 @@ static LinphoneContent * linphone_content_new_with_body_handler(SalBodyHandler *
|
|||
LinphonePrivate::Content multipartContent = LinphonePrivate::ContentManager::contentListToMultipart(contents);
|
||||
linphone_content_set_string_buffer(content, multipartContent.getBodyAsUtf8String().c_str());
|
||||
}
|
||||
|
||||
if (sal_body_handler_get_encoding(body_handler)) linphone_content_set_encoding(content, sal_body_handler_get_encoding(body_handler));
|
||||
}
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
|
|
@ -288,11 +295,14 @@ LinphoneContent * linphone_content_from_sal_body_handler(SalBodyHandler *body_ha
|
|||
|
||||
SalBodyHandler * sal_body_handler_from_content(const LinphoneContent *content) {
|
||||
if (content == NULL) return NULL;
|
||||
|
||||
SalBodyHandler *body_handler;
|
||||
if (L_GET_CPP_PTR_FROM_C_OBJECT(content)->getContentType().isMultipart()) {
|
||||
LinphonePrivate::ContentType contentType = L_GET_CPP_PTR_FROM_C_OBJECT(content)->getContentType();
|
||||
|
||||
if (contentType.isMultipart()) {
|
||||
size_t size = linphone_content_get_size(content);
|
||||
char *buffer = ms_strdup(L_GET_CPP_PTR_FROM_C_OBJECT(content)->getBodyAsUtf8String().c_str());
|
||||
const char *boundary = L_STRING_TO_C(L_GET_CPP_PTR_FROM_C_OBJECT(content)->getContentType().getParameter());
|
||||
const char *boundary = L_STRING_TO_C(contentType.getParameter());
|
||||
belle_sip_multipart_body_handler_t *bh = belle_sip_multipart_body_handler_new_from_buffer(buffer, size, boundary);
|
||||
body_handler = (SalBodyHandler *)BELLE_SIP_BODY_HANDLER(bh);
|
||||
} else {
|
||||
|
|
@ -310,9 +320,11 @@ SalBodyHandler * sal_body_handler_from_content(const LinphoneContent *content) {
|
|||
belle_sip_body_handler_add_header(BELLE_SIP_BODY_HANDLER(body_handler), additionalHeader);
|
||||
}
|
||||
|
||||
sal_body_handler_set_type(body_handler, linphone_content_get_type(content));
|
||||
sal_body_handler_set_subtype(body_handler, linphone_content_get_subtype(content));
|
||||
sal_body_handler_set_type(body_handler, contentType.getType().c_str());
|
||||
sal_body_handler_set_subtype(body_handler, contentType.getSubType().c_str());
|
||||
sal_body_handler_set_size(body_handler, linphone_content_get_size(content));
|
||||
sal_body_handler_set_content_type_parameters(body_handler, contentType.getParameter().c_str());
|
||||
if (content->encoding) sal_body_handler_set_encoding(body_handler, linphone_content_get_encoding(content));
|
||||
|
||||
return body_handler;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -636,6 +636,8 @@ const char * sal_body_handler_get_type(const SalBodyHandler *body_handler);
|
|||
void sal_body_handler_set_type(SalBodyHandler *body_handler, const char *type);
|
||||
const char * sal_body_handler_get_subtype(const SalBodyHandler *body_handler);
|
||||
void sal_body_handler_set_subtype(SalBodyHandler *body_handler, const char *subtype);
|
||||
char * sal_body_handler_get_content_type_parameters(const SalBodyHandler *body_handler);
|
||||
void sal_body_handler_set_content_type_parameters(SalBodyHandler *body_handler, const char *params);
|
||||
const char * sal_body_handler_get_encoding(const SalBodyHandler *body_handler);
|
||||
void sal_body_handler_set_encoding(SalBodyHandler *body_handler, const char *encoding);
|
||||
void * sal_body_handler_get_data(const SalBodyHandler *body_handler);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue