diff --git a/build/android/Android.mk b/build/android/Android.mk
index cb4b703f4..adc78454c 100755
--- a/build/android/Android.mk
+++ b/build/android/Android.mk
@@ -26,50 +26,51 @@ include $(CLEAR_VARS)
LOCAL_CPP_EXTENSION := .cc
LOCAL_SRC_FILES := \
- linphonecore.c \
- misc.c \
- enum.c \
- presence.c \
- proxy.c \
- friend.c \
- authentication.c \
- lpconfig.c \
- chat.c \
- sipsetup.c \
- siplogin.c \
address.c \
- linphonecore_jni.cc \
+ authentication.c \
bellesip_sal/sal_address_impl.c \
bellesip_sal/sal_impl.c \
bellesip_sal/sal_op_call.c \
bellesip_sal/sal_op_call_transfer.c \
+ bellesip_sal/sal_op_events.c \
bellesip_sal/sal_op_impl.c \
+ bellesip_sal/sal_op_info.c \
bellesip_sal/sal_op_message.c \
bellesip_sal/sal_op_presence.c \
- bellesip_sal/sal_op_registration.c \
bellesip_sal/sal_op_publish.c \
- bellesip_sal/sal_op_info.c \
- bellesip_sal/sal_op_events.c \
+ bellesip_sal/sal_op_registration.c \
bellesip_sal/sal_sdp.c \
- sal.c \
- offeranswer.c \
callbacks.c \
- linphonecall.c \
- conference.c \
- ec-calibrator.c \
- linphone_tunnel_config.c \
- message_storage.c \
- info.c \
- event.c \
- xml.c \
- xml2lpc.c \
- lpc2xml.c \
- remote_provisioning.c \
- quality_reporting.c \
call_log.c \
call_params.c \
+ chat.c \
+ conference.c \
+ content.c \
+ ec-calibrator.c \
+ enum.c \
+ event.c \
+ friend.c \
+ info.c \
+ linphonecall.c \
+ linphonecore.c \
+ linphonecore_jni.cc \
+ linphone_tunnel_config.c \
+ localplayer.c \
+ lpc2xml.c \
+ lpconfig.c \
+ message_storage.c \
+ misc.c \
+ offeranswer.c \
player.c \
- localplayer.c
+ presence.c \
+ proxy.c \
+ quality_reporting.c \
+ remote_provisioning.c \
+ sal.c \
+ siplogin.c \
+ sipsetup.c \
+ xml2lpc.c \
+ xml.c
ifndef LIBLINPHONE_VERSION
LIBLINPHONE_VERSION = "Devel"
diff --git a/build/wp8/LibLinphone.vcxproj b/build/wp8/LibLinphone.vcxproj
index cca41bb87..6a3d8e034 100644
--- a/build/wp8/LibLinphone.vcxproj
+++ b/build/wp8/LibLinphone.vcxproj
@@ -115,6 +115,7 @@
+
@@ -144,6 +145,7 @@
+
diff --git a/coreapi/CMakeLists.txt b/coreapi/CMakeLists.txt
index 8ed8185ab..2369501c7 100644
--- a/coreapi/CMakeLists.txt
+++ b/coreapi/CMakeLists.txt
@@ -46,6 +46,7 @@ set(SOURCE_FILES
call_params.c
chat.c
conference.c
+ content.c
ec-calibrator.c
enum.c
event.c
@@ -152,6 +153,7 @@ install(TARGETS linphone
set(HEADER_FILES
call_log.h
call_params.h
+ content.h
event.h
linphonecore.h
linphonecore_utils.h
diff --git a/coreapi/Makefile.am b/coreapi/Makefile.am
index 2bb8498d9..f7d163749 100644
--- a/coreapi/Makefile.am
+++ b/coreapi/Makefile.am
@@ -24,45 +24,61 @@ CLEANFILES=$(GITVERSION_FILE)
## Process this file with automake to produce Makefile.in
linphone_includedir=$(includedir)/linphone
-linphone_include_HEADERS=linphonecore.h linphonefriend.h linphonepresence.h linphonecore_utils.h lpconfig.h sipsetup.h event.h xml2lpc.h lpc2xml.h linphone_tunnel.h call_log.h call_params.h
+linphone_include_HEADERS=\
+ call_log.h \
+ call_params.h \
+ content.h \
+ event.h \
+ linphonecore.h \
+ linphonecore_utils.h \
+ linphonefriend.h \
+ linphonepresence.h \
+ linphone_tunnel.h \
+ lpc2xml.h \
+ lpconfig.h \
+ sipsetup.h \
+ xml2lpc.h
lib_LTLIBRARIES=liblinphone.la
liblinphone_la_SOURCES=\
- linphonecore.c linphonecore.h private.h\
- offeranswer.c offeranswer.h\
- sal.c \
- callbacks.c \
- misc.c \
address.c \
- enum.c enum.h \
- presence.c \
- proxy.c \
- friend.c \
authentication.c \
- lpconfig.c lpconfig.h \
- chat.c \
- linphonecall.c \
- sipsetup.c sipsetup.h \
- siplogin.c \
- lsd.c linphonecore_utils.h \
- ec-calibrator.c \
- conference.c \
- message_storage.c \
- info.c \
- event.c event.h \
- contactprovider.c contactprovider.h contact_providers_priv.h \
- ldap/ldapprovider.c ldap/ldapprovider.h \
- dict.c \
- xml.c \
- xml2lpc.c \
- lpc2xml.c \
- remote_provisioning.c \
- quality_reporting.c quality_reporting.h\
+ callbacks.c \
call_log.c \
call_params.c \
- player.c \
+ chat.c \
+ conference.c \
+ contactprovider.c contactprovider.h contact_providers_priv.h \
+ content.c \
+ dict.c \
+ ec-calibrator.c \
+ enum.c enum.h \
+ event.c event.h \
+ friend.c \
+ info.c \
+ ldap/ldapprovider.c ldap/ldapprovider.h \
+ linphonecall.c \
+ linphonecore.c linphonecore.h \
+ linphonecore_utils.h \
localplayer.c \
+ lpc2xml.c \
+ lpconfig.c lpconfig.h \
+ lsd.c \
+ message_storage.c \
+ misc.c \
+ offeranswer.c offeranswer.h\
+ player.c \
+ presence.c \
+ private.h \
+ proxy.c \
+ quality_reporting.c quality_reporting.h\
+ remote_provisioning.c \
+ sal.c \
+ siplogin.c \
+ sipsetup.c sipsetup.h \
+ xml2lpc.c \
+ xml.c \
$(GITVERSION_FILE)
if BUILD_UPNP
diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c
index bc58f3c7d..59ce4a9a6 100644
--- a/coreapi/callbacks.c
+++ b/coreapi/callbacks.c
@@ -1208,14 +1208,13 @@ static void subscribe_response(SalOp *op, SalSubscribeStatus status){
static void notify(SalOp *op, SalSubscribeStatus st, const char *eventname, const SalBody *body){
LinphoneEvent *lev=(LinphoneEvent*)sal_op_get_user_pointer(op);
LinphoneCore *lc=(LinphoneCore *)sal_get_user_pointer(sal_op_get_sal(op));
- LinphoneContent content={0};
if (lev==NULL) {
/*out of subscribe notify */
lev=linphone_event_new_with_out_of_dialog_op(lc,op,LinphoneSubscriptionOutgoing,eventname);
}
{
- const LinphoneContent *ct=linphone_content_from_sal_body(&content,body);
+ LinphoneContent *ct=linphone_content_from_sal_body(body);
if (ct) linphone_core_notify_notify_received(lc,lev,eventname,ct);
}
if (st!=SalSubscribeNone){
diff --git a/coreapi/chat.c b/coreapi/chat.c
index a6f2a952d..989350544 100644
--- a/coreapi/chat.c
+++ b/coreapi/chat.c
@@ -96,7 +96,7 @@ static int linphone_chat_message_file_transfer_on_send_body(belle_sip_user_body_
char *buf = (char *)buffer;
/* if we've not reach the end of file yet, ask for more data*/
- if (offsetfile_transfer_information->size){
+ if (offsetfile_transfer_information)){
/* get data from call back */
linphone_core_notify_file_transfer_send(lc, chatMsg, chatMsg->file_transfer_information, buf, size);
}
@@ -130,17 +130,17 @@ static void linphone_chat_message_process_response_from_post_file(void *data, co
belle_sip_body_handler_t *first_part_bh;
/* temporary storage for the Content-disposition header value */
- first_part_header = belle_sip_strdup_printf("form-data; name=\"File\"; filename=\"%s\"", msg->file_transfer_information->name);
+ first_part_header = belle_sip_strdup_printf("form-data; name=\"File\"; filename=\"%s\"", linphone_content_get_name(msg->file_transfer_information));
/* create a user body handler to take care of the file and add the content disposition and content-type headers */
if (msg->file_transfer_filepath != NULL) {
first_part_bh=(belle_sip_body_handler_t *)belle_sip_file_body_handler_new(msg->file_transfer_filepath,NULL,msg);
} else {
- first_part_bh=(belle_sip_body_handler_t *)belle_sip_user_body_handler_new(msg->file_transfer_information->size,NULL,NULL,linphone_chat_message_file_transfer_on_send_body,msg);
+ first_part_bh=(belle_sip_body_handler_t *)belle_sip_user_body_handler_new(linphone_content_get_size(msg->file_transfer_information),NULL,NULL,linphone_chat_message_file_transfer_on_send_body,msg);
}
belle_sip_body_handler_add_header(first_part_bh, belle_sip_header_create("Content-disposition", first_part_header));
belle_sip_free(first_part_header);
- belle_sip_body_handler_add_header(first_part_bh, (belle_sip_header_t *)belle_sip_header_content_type_create(msg->file_transfer_information->type, msg->file_transfer_information->subtype));
+ belle_sip_body_handler_add_header(first_part_bh, (belle_sip_header_t *)belle_sip_header_content_type_create(linphone_content_get_type(msg->file_transfer_information), linphone_content_get_subtype(msg->file_transfer_information)));
/* insert it in a multipart body handler which will manage the boundaries of multipart message */
bh=belle_sip_multipart_body_handler_new(linphone_chat_message_file_transfer_on_progress, msg, first_part_bh);
@@ -531,7 +531,7 @@ void linphone_core_message_received(LinphoneCore *lc, SalOp *op, const SalMessag
msg = linphone_chat_room_create_message(cr, NULL); /* create a message with empty body */
msg->content_type = ms_strdup(sal_msg->content_type); /* add the content_type "application/vnd.gsma.rcs-ft-http+xml" */
- msg->file_transfer_information = ms_new0(LinphoneContent,1);
+ msg->file_transfer_information = linphone_content_new();
/* parse the message body to get all informations from it */
xmlMessageBody = xmlParseDoc((const xmlChar *)sal_msg->text);
@@ -547,21 +547,27 @@ void linphone_core_message_received(LinphoneCore *lc, SalOp *op, const SalMessag
while (cur!=NULL) {
if (!xmlStrcmp(cur->name, (const xmlChar *)"file-size")) {
xmlChar *fileSizeString = xmlNodeListGetString(xmlMessageBody, cur->xmlChildrenNode, 1);
- msg->file_transfer_information->size = strtol((const char*)fileSizeString, NULL, 10);
+ linphone_content_set_size(msg->file_transfer_information, strtol((const char*)fileSizeString, NULL, 10));
xmlFree(fileSizeString);
}
if (!xmlStrcmp(cur->name, (const xmlChar *)"file-name")) {
- msg->file_transfer_information->name = (char *)xmlNodeListGetString(xmlMessageBody, cur->xmlChildrenNode, 1);
+ linphone_content_set_name(msg->file_transfer_information, (const char *)xmlNodeListGetString(xmlMessageBody, cur->xmlChildrenNode, 1));
}
if (!xmlStrcmp(cur->name, (const xmlChar *)"content-type")) {
xmlChar *contentType = xmlNodeListGetString(xmlMessageBody, cur->xmlChildrenNode, 1);
int contentTypeIndex = 0;
+ char *type;
+ char *subtype;
while (contentType[contentTypeIndex]!='/' && contentType[contentTypeIndex]!='\0') {
contentTypeIndex++;
}
- msg->file_transfer_information->type = ms_strndup((char *)contentType, contentTypeIndex);
- msg->file_transfer_information->subtype = ms_strdup(((char *)contentType+contentTypeIndex+1));
+ type = ms_strndup((char *)contentType, contentTypeIndex);
+ subtype = ms_strdup(((char *)contentType+contentTypeIndex+1));
+ linphone_content_set_type(msg->file_transfer_information, type);
+ linphone_content_set_subtype(msg->file_transfer_information, subtype);
+ ms_free(subtype);
+ ms_free(type);
xmlFree(contentType);
}
if (!xmlStrcmp(cur->name, (const xmlChar *)"data")) {
@@ -1024,28 +1030,27 @@ static void on_recv_body(belle_sip_user_body_handler_t *bh, belle_sip_message_t
static LinphoneContent* linphone_chat_create_file_transfer_information_from_headers(const belle_sip_message_t* message ){
- LinphoneContent *content = ms_new0(LinphoneContent,1);
+ LinphoneContent *content = linphone_content_new();
belle_sip_header_content_length_t* content_length_hdr = BELLE_SIP_HEADER_CONTENT_LENGTH(belle_sip_message_get_header(message, "Content-Length"));
belle_sip_header_content_type_t* content_type_hdr = BELLE_SIP_HEADER_CONTENT_TYPE(belle_sip_message_get_header(message, "Content-Type"));
const char* type = NULL,*subtype = NULL;
- content->name = ms_strdup("");
+ linphone_content_set_name(content, "");
if( content_type_hdr ){
type = belle_sip_header_content_type_get_type(content_type_hdr);
subtype = belle_sip_header_content_type_get_subtype(content_type_hdr);
ms_message("Extracted content type %s / %s from header", type?type:"", subtype?subtype:"");
- if( type ) content->type = ms_strdup(type);
- if( subtype ) content->type = ms_strdup(subtype);
+ if( type ) linphone_content_set_type(content, type);
+ if( subtype ) linphone_content_set_subtype(content, subtype);
}
if( content_length_hdr ){
- content->size = belle_sip_header_content_length_get_content_length(content_length_hdr);
- ms_message("Extracted content length %i from header", (int)content->size);
+ linphone_content_set_size(content, belle_sip_header_content_length_get_content_length(content_length_hdr));
+ ms_message("Extracted content length %i from header", (int)linphone_content_get_size(content));
}
-
return content;
}
@@ -1063,7 +1068,7 @@ static void linphone_chat_process_response_headers_from_get_file(void *data, con
}
if( message->file_transfer_information ){
- body_size = message->file_transfer_information->size;
+ body_size = linphone_content_get_size(message->file_transfer_information);
}
if (message->file_transfer_filepath == NULL) {
@@ -1318,8 +1323,7 @@ static void _linphone_chat_message_destroy(LinphoneChatMessage* msg) {
if (msg->custom_headers) sal_custom_header_free(msg->custom_headers);
if (msg->content_type) ms_free(msg->content_type);
if (msg->file_transfer_information) {
- linphone_content_uninit(msg->file_transfer_information);
- ms_free(msg->file_transfer_information);
+ linphone_content_unref(msg->file_transfer_information);
}
if (msg->file_transfer_filepath != NULL) {
ms_free(msg->file_transfer_filepath);
@@ -1385,7 +1389,7 @@ const char * linphone_chat_message_get_file_transfer_filepath(LinphoneChatMessag
/**
* Create a message attached to a dedicated chat room with a particular content. Use #linphone_chat_room_send_message2 to initiate the transfer
* @param cr the chat room.
- * @param a #LinphoneContent initial content. #LinphoneCoreVTable.file_transfer_send is invoked later to notify file transfer progress and collect next chunk of the message if #LinphoneContent.data is NULL.
+ * @param initial_content #LinphoneContent initial content. #LinphoneCoreVTable.file_transfer_send is invoked later to notify file transfer progress and collect next chunk of the message if #LinphoneContent.data is NULL.
* @return a new #LinphoneChatMessage
*/
@@ -1393,8 +1397,7 @@ LinphoneChatMessage* linphone_chat_room_create_file_transfer_message(LinphoneCha
LinphoneChatMessage* msg = belle_sip_object_new(LinphoneChatMessage);
msg->chat_room=(LinphoneChatRoom*)cr;
msg->message = NULL;
- msg->file_transfer_information = ms_new0(LinphoneContent,1);
- linphone_content_copy(msg->file_transfer_information, initial_content);
+ msg->file_transfer_information = linphone_content_copy(initial_content);
msg->dir=LinphoneChatMessageOutgoing;
linphone_chat_message_set_to(msg, linphone_chat_room_get_peer_address(cr));
linphone_chat_message_set_from(msg, linphone_address_new(linphone_core_get_identity(cr->lc)));
diff --git a/coreapi/content.c b/coreapi/content.c
new file mode 100644
index 000000000..944ebb2e0
--- /dev/null
+++ b/coreapi/content.c
@@ -0,0 +1,205 @@
+/*
+linphone
+Copyright (C) 2010-2014 Belledonne Communications SARL
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include "linphonecore.h"
+#include "private.h"
+
+
+
+static void linphone_content_destroy(LinphoneContent *content) {
+ if (content->lcp.type) belle_sip_free(content->lcp.type);
+ if (content->lcp.subtype) belle_sip_free(content->lcp.subtype);
+ if (content->lcp.data) belle_sip_free(content->lcp.data);
+ if (content->lcp.encoding) belle_sip_free(content->lcp.encoding);
+ if (content->lcp.name) belle_sip_free(content->lcp.name);
+}
+
+static void linphone_content_clone(LinphoneContent *obj, const LinphoneContent *ref) {
+ void *data;
+ linphone_content_set_type(obj, linphone_content_get_type(ref));
+ linphone_content_set_subtype(obj, linphone_content_get_subtype(ref));
+ linphone_content_set_encoding(obj, linphone_content_get_encoding(ref));
+ linphone_content_set_name(obj, linphone_content_get_name(ref));
+ linphone_content_set_size(obj, linphone_content_get_size(ref));
+ data = linphone_content_get_data(ref);
+ if (data != NULL) {
+ size_t size = linphone_content_get_size(ref);
+ void *objdata = belle_sip_malloc(size + 1);
+ memcpy(objdata, data, size);
+ ((char *)objdata)[size] = '\0';
+ linphone_content_set_data(obj, objdata);
+ }
+}
+
+
+BELLE_SIP_DECLARE_NO_IMPLEMENTED_INTERFACES(LinphoneContent);
+
+BELLE_SIP_INSTANCIATE_VPTR(LinphoneContent, belle_sip_object_t,
+ (belle_sip_object_destroy_t)linphone_content_destroy,
+ (belle_sip_object_clone_t)linphone_content_clone,
+ NULL, // marshal
+ TRUE
+);
+
+
+LinphoneContent * linphone_core_create_content(LinphoneCore *lc) {
+ return linphone_content_new();
+}
+
+LinphoneContent * linphone_content_ref(LinphoneContent *content) {
+ belle_sip_object_ref(content);
+ return content;
+}
+
+void linphone_content_unref(LinphoneContent *content) {
+ belle_sip_object_unref(content);
+}
+
+void *linphone_content_get_user_data(const LinphoneContent *content) {
+ return content->user_data;
+}
+
+void linphone_content_set_user_data(LinphoneContent *content, void *ud) {
+ content->user_data = ud;
+}
+
+const char * linphone_content_get_type(const LinphoneContent *content) {
+ return content->lcp.type;
+}
+
+void linphone_content_set_type(LinphoneContent *content, const char *type) {
+ if (content->lcp.type != NULL) {
+ belle_sip_free(content->lcp.type);
+ content->lcp.type = NULL;
+ }
+ if (type != NULL) {
+ content->lcp.type = belle_sip_strdup(type);
+ }
+}
+
+const char * linphone_content_get_subtype(const LinphoneContent *content) {
+ return content->lcp.subtype;
+}
+
+void linphone_content_set_subtype(LinphoneContent *content, const char *subtype) {
+ if (content->lcp.subtype != NULL) {
+ belle_sip_free(content->lcp.subtype);
+ content->lcp.subtype = NULL;
+ }
+ if (subtype != NULL) {
+ content->lcp.subtype = belle_sip_strdup(subtype);
+ }
+}
+
+void * linphone_content_get_data(const LinphoneContent *content) {
+ return content->lcp.data;
+}
+
+void linphone_content_set_data(LinphoneContent *content, void *data) {
+ content->lcp.data = data;
+}
+
+size_t linphone_content_get_size(const LinphoneContent *content) {
+ return content->lcp.size;
+}
+
+void linphone_content_set_size(LinphoneContent *content, size_t size) {
+ content->lcp.size = size;
+}
+
+const char * linphone_content_get_encoding(const LinphoneContent *content) {
+ return content->lcp.encoding;
+}
+
+void linphone_content_set_encoding(LinphoneContent *content, const char *encoding) {
+ if (content->lcp.encoding != NULL) {
+ belle_sip_free(content->lcp.encoding);
+ content->lcp.encoding = NULL;
+ }
+ if (encoding != NULL) {
+ content->lcp.encoding = belle_sip_strdup(encoding);
+ }
+}
+
+const char * linphone_content_get_name(const LinphoneContent *content) {
+ return content->lcp.name;
+}
+
+void linphone_content_set_name(LinphoneContent *content, const char *name) {
+ if (content->lcp.name != NULL) {
+ belle_sip_free(content->lcp.name);
+ content->lcp.name = NULL;
+ }
+ if (name != NULL) {
+ content->lcp.name = belle_sip_strdup(name);
+ }
+}
+
+
+
+LinphoneContent * linphone_content_new(void) {
+ LinphoneContent *content = belle_sip_object_new(LinphoneContent);
+ belle_sip_object_ref(content);
+ return content;
+}
+
+LinphoneContent * linphone_content_copy(const LinphoneContent *ref) {
+ return (LinphoneContent *)belle_sip_object_ref(belle_sip_object_clone(BELLE_SIP_OBJECT(ref)));
+}
+
+LinphoneContent * linphone_content_from_sal_body(const SalBody *ref) {
+ if (ref && ref->type) {
+ void *objdata;
+ LinphoneContent *content = linphone_content_new();
+ linphone_content_set_type(content, ref->type);
+ linphone_content_set_subtype(content, ref->subtype);
+ linphone_content_set_encoding(content, ref->encoding);
+ linphone_content_set_size(content, ref->size);
+ objdata = belle_sip_malloc(ref->size + 1);
+ memcpy(objdata, ref->data, ref->size);
+ ((char *)objdata)[ref->size] = '\0';
+ linphone_content_set_data(content, objdata);
+ return content;
+ }
+ return NULL;
+}
+
+SalBody *sal_body_from_content(SalBody *body, const LinphoneContent *content) {
+ if (content && linphone_content_get_type(content)) {
+ body->type = linphone_content_get_type(content);
+ body->subtype = linphone_content_get_subtype(content);
+ body->data = linphone_content_get_data(content);
+ body->size = linphone_content_get_size(content);
+ body->encoding = linphone_content_get_encoding(content);
+ return body;
+ }
+ return NULL;
+}
+
+
+
+LinphoneContent * linphone_content_private_to_linphone_content(const LinphoneContentPrivate *lcp) {
+ LinphoneContent *content = belle_sip_object_new(LinphoneContent);
+ memcpy(&content->lcp, lcp, sizeof(LinphoneContentPrivate));
+ return content;
+}
+
+LinphoneContentPrivate * linphone_content_to_linphone_content_private(const LinphoneContent *content) {
+ return (LinphoneContentPrivate *)&content->lcp;
+}
diff --git a/coreapi/content.h b/coreapi/content.h
new file mode 100644
index 000000000..24f137857
--- /dev/null
+++ b/coreapi/content.h
@@ -0,0 +1,213 @@
+/*
+content.h
+Copyright (C) 2010-2014 Belledonne Communications SARL
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef LINPHONE_CONTENT_H_
+#define LINPHONE_CONTENT_H_
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * @addtogroup misc
+ * @{
+ */
+
+/**
+ * The LinphoneContent object holds data that can be embedded in a signaling message.
+**/
+struct _LinphoneContent;
+/**
+ * The LinphoneContent object holds data that can be embedded in a signaling message.
+**/
+typedef struct _LinphoneContent LinphoneContent;
+
+/**
+ * @deprecated Use LinphoneContent objects instead of this structure.
+ */
+struct _LinphoneContentPrivate{
+ char *type; /**type
- , content->subtype
+ , linphone_content_get_type(content)
+ , linphone_content_get_subtype(content)
,(linphone_chat_message_is_outgoing(message)?"to":"from")
, address);
free(address);
@@ -131,7 +131,7 @@ static void linphone_file_transfer_state_changed(LinphoneChatMessage* msg,Linpho
*/
static void message_received(LinphoneCore *lc, LinphoneChatRoom *cr, LinphoneChatMessage *msg) {
const LinphoneContent *file_transfer_info = linphone_chat_message_get_file_transfer_information(msg);
- printf ("Do you really want to download %s (size %ld)?[Y/n]\nOk, let's go\n", file_transfer_info->name, (long int)file_transfer_info->size);
+ printf ("Do you really want to download %s (size %ld)?[Y/n]\nOk, let's go\n", linphone_content_get_name(file_transfer_info), (long int)linphone_content_get_size(file_transfer_info));
linphone_chat_message_start_file_download(msg, linphone_file_transfer_state_changed, NULL);
@@ -145,7 +145,7 @@ int main(int argc, char *argv[]){
int i;
const char* big_file_content="big file";
LinphoneChatRoom* chat_room;
- LinphoneContent content;
+ LinphoneContent* content;
LinphoneChatMessage* chat_message;
/*seting dummy file content to something*/
@@ -189,14 +189,14 @@ int main(int argc, char *argv[]){
/*Next step is to create a chat room*/
chat_room = linphone_core_create_chat_room(lc,dest_friend);
- memset(&content,0,sizeof(content));
- content.type="text";
- content.subtype="plain";
- content.size=sizeof(big_file); /*total size to be transfered*/
- content.name = "bigfile.txt";
+ content = linphone_core_create_content(lc);
+ linphone_content_set_type(content,"text");
+ linphone_content_set_subtype(content,"plain");
+ linphone_content_set_size(content,sizeof(big_file)); /*total size to be transfered*/
+ linphone_content_set_name(content,"bigfile.txt");
/*now create a chat message with custom content*/
- chat_message = linphone_chat_room_create_file_transfer_message(chat_room,&content);
+ chat_message = linphone_chat_room_create_file_transfer_message(chat_room,content);
if (chat_message == NULL) {
printf("returned message is null\n");
}
@@ -212,6 +212,7 @@ int main(int argc, char *argv[]){
printf("Shutting down...\n");
+ linphone_content_unref(content);
linphone_chat_room_destroy(chat_room);
linphone_core_destroy(lc);
printf("Exited\n");
diff --git a/coreapi/help/notify.c b/coreapi/help/notify.c
index 27077d92f..bdfae0835 100644
--- a/coreapi/help/notify.c
+++ b/coreapi/help/notify.c
@@ -152,12 +152,12 @@ int main(int argc, char *argv[]){
ms_usleep(50000);
++i;
if (data->ev && i%100==0){
- LinphoneContent content;
+ LinphoneContentPrivate content;
content.type="application";
content.subtype="goodxml";
content.data="really cool";
content.size=strlen((const char*)content.data);
- linphone_event_notify(data->ev,&content);
+ linphone_event_notify(data->ev,LINPHONE_CONTENT(&content));
}
}
diff --git a/coreapi/info.c b/coreapi/info.c
index ad8cd1f8e..6b2eb33fa 100644
--- a/coreapi/info.c
+++ b/coreapi/info.c
@@ -29,98 +29,23 @@
struct _LinphoneInfoMessage{
- LinphoneContent content;
+ LinphoneContent *content;
SalCustomHeader *headers;
};
-#define SET_STRING(ptr,field,val) \
- if (ptr->field) { \
- ms_free(ptr->field); \
- ptr->field=NULL; \
- } \
- if (val){ \
- ptr->field=ms_strdup(val); \
- }
-
-void linphone_content_copy(LinphoneContent *obj, const LinphoneContent *ref){
- SET_STRING(obj,type,ref->type);
- SET_STRING(obj,subtype,ref->subtype);
- SET_STRING(obj,encoding,ref->encoding);
- SET_STRING(obj,name,ref->name);
- if (obj->data) {
- ms_free(obj->data);
- obj->data=NULL;
- }
- if (ref->data){
- obj->data=ms_malloc(ref->size+1);
- memcpy(obj->data, ref->data, ref->size);
- ((char*)obj->data)[ref->size]='\0';
- }
- obj->size=ref->size;
-}
-
-void linphone_content_uninit(LinphoneContent * obj){
- if (obj->type) ms_free(obj->type);
- if (obj->subtype) ms_free(obj->subtype);
- if (obj->data) ms_free(obj->data);
- if (obj->encoding) ms_free(obj->encoding);
- if (obj->name) ms_free(obj->name);
-}
-
-LinphoneContent *linphone_content_copy_from_sal_body(LinphoneContent *obj, const SalBody *ref){
- SET_STRING(obj,type,ref->type);
- SET_STRING(obj,subtype,ref->subtype);
- SET_STRING(obj,encoding,ref->encoding);
- if (obj->data) {
- ms_free(obj->data);
- obj->data=NULL;
- }
- if (ref->data){
- obj->data=ms_malloc(ref->size+1);
- memcpy(obj->data, ref->data, ref->size);
- ((char*)obj->data)[ref->size]='\0';
- }
- obj->size=ref->size;
- return obj;
-}
-
-const LinphoneContent *linphone_content_from_sal_body(LinphoneContent *obj, const SalBody *ref){
- if (ref && ref->type){
- obj->type=(char*)ref->type;
- obj->subtype=(char*)ref->subtype;
- obj->data=(void*)ref->data;
- obj->encoding=(char*)ref->encoding;
- obj->size=ref->size;
- return obj;
- }
- return NULL;
-}
-
-SalBody *sal_body_from_content(SalBody *body, const LinphoneContent *lc){
- if (lc && lc->type){
- body->type=lc->type;
- body->subtype=lc->subtype;
- body->data=lc->data;
- body->size=lc->size;
- body->encoding=lc->encoding;
- return body;
- }
- return NULL;
-}
-
/**
* Destroy a LinphoneInfoMessage
**/
void linphone_info_message_destroy(LinphoneInfoMessage *im){
- linphone_content_uninit(&im->content);
- sal_custom_header_free(im->headers);
+ if (im->content) linphone_content_unref(im->content);
+ if (im->headers) sal_custom_header_free(im->headers);
ms_free(im);
}
LinphoneInfoMessage *linphone_info_message_copy(const LinphoneInfoMessage *orig){
LinphoneInfoMessage *im=ms_new0(LinphoneInfoMessage,1);
- linphone_content_copy(&im->content,&orig->content);
+ if (orig->content) im->content=linphone_content_copy(orig->content);
if (orig->headers) im->headers=sal_custom_header_clone(orig->headers);
return im;
}
@@ -146,7 +71,7 @@ LinphoneInfoMessage *linphone_core_create_info_message(LinphoneCore *lc){
int linphone_call_send_info_message(LinphoneCall *call, const LinphoneInfoMessage *info){
SalBody body;
sal_op_set_sent_custom_header(call->op,info->headers);
- return sal_send_info(call->op,NULL, NULL, sal_body_from_content(&body,&info->content));
+ return sal_send_info(call->op,NULL, NULL, sal_body_from_content(&body,info->content));
}
/**
@@ -176,14 +101,14 @@ const char *linphone_info_message_get_header(const LinphoneInfoMessage *im, cons
* All fields of the LinphoneContent are copied, thus the application can destroy/modify/recycloe the content object freely ater the function returns.
**/
void linphone_info_message_set_content(LinphoneInfoMessage *im, const LinphoneContent *content){
- linphone_content_copy(&im->content,content);
+ im->content=linphone_content_copy(content);
}
/**
* Returns the info message's content as a #LinphoneContent structure.
**/
const LinphoneContent * linphone_info_message_get_content(const LinphoneInfoMessage *im){
- return im->content.type ? &im->content : NULL;
+ return (im->content && linphone_content_get_type(im->content)) ? im->content : NULL;
}
void linphone_core_notify_info_message(LinphoneCore* lc,SalOp *op, const SalBody *body){
@@ -191,7 +116,7 @@ void linphone_core_notify_info_message(LinphoneCore* lc,SalOp *op, const SalBody
if (call){
LinphoneInfoMessage *info=ms_new0(LinphoneInfoMessage,1);
info->headers=sal_custom_header_clone(sal_op_get_recv_custom_header(op));
- if (body) linphone_content_copy_from_sal_body(&info->content,body);
+ if (body) info->content=linphone_content_from_sal_body(body);
linphone_core_notify_info_received(lc,call,info);
linphone_info_message_destroy(info);
}
diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c
index c36c5894d..3ead49966 100644
--- a/coreapi/linphonecore.c
+++ b/coreapi/linphonecore.c
@@ -354,7 +354,7 @@ static int log_collection_upload_on_send_body(belle_sip_user_body_handler_t *bh,
LinphoneCore *core = (LinphoneCore *)data;
/* If we've not reach the end of file yet, fill the buffer with more data */
- if (offset < core->log_collection_upload_information->size) {
+ if (offset < linphone_content_get_size(core->log_collection_upload_information)) {
char *log_filename = ms_strdup_printf("%s/%s_log.%s",
liblinphone_log_collection_path ? liblinphone_log_collection_path : LOG_COLLECTION_DEFAULT_PATH,
liblinphone_log_collection_prefix ? liblinphone_log_collection_prefix : LOG_COLLECTION_DEFAULT_PREFIX,
@@ -410,13 +410,14 @@ static void process_response_from_post_file_log_collection(void *data, const bel
linphone_core_notify_log_collection_upload_state_changed(core, LinphoneCoreLogCollectionUploadStateInProgress, NULL);
/* Temporary storage for the Content-disposition header value */
- first_part_header = belle_sip_strdup_printf("form-data; name=\"File\"; filename=\"%s\"", core->log_collection_upload_information->name);
+ first_part_header = belle_sip_strdup_printf("form-data; name=\"File\"; filename=\"%s\"", linphone_content_get_name(core->log_collection_upload_information));
/* Create a user body handler to take care of the file and add the content disposition and content-type headers */
- first_part_bh = belle_sip_user_body_handler_new(core->log_collection_upload_information->size, NULL, NULL, log_collection_upload_on_send_body, core);
+ first_part_bh = belle_sip_user_body_handler_new(linphone_content_get_size(core->log_collection_upload_information), NULL, NULL, log_collection_upload_on_send_body, core);
belle_sip_body_handler_add_header((belle_sip_body_handler_t *)first_part_bh, belle_sip_header_create("Content-disposition", first_part_header));
belle_sip_free(first_part_header);
- belle_sip_body_handler_add_header((belle_sip_body_handler_t *)first_part_bh, (belle_sip_header_t *)belle_sip_header_content_type_create(core->log_collection_upload_information->type, core->log_collection_upload_information->subtype));
+ belle_sip_body_handler_add_header((belle_sip_body_handler_t *)first_part_bh,
+ (belle_sip_header_t *)belle_sip_header_content_type_create(linphone_content_get_type(core->log_collection_upload_information), linphone_content_get_subtype(core->log_collection_upload_information)));
/* Insert it in a multipart body handler which will manage the boundaries of multipart message */
bh = belle_sip_multipart_body_handler_new(log_collection_upload_on_progress, core, (belle_sip_body_handler_t *)first_part_bh);
@@ -553,6 +554,7 @@ void linphone_core_upload_log_collection(LinphoneCore *core) {
belle_http_request_listener_t *l;
belle_generic_uri_t *uri;
belle_http_request_t *req;
+ char *name;
core->log_collection_upload_information = (LinphoneContent *)malloc(sizeof(LinphoneContent));
memset(core->log_collection_upload_information, 0, sizeof(LinphoneContent));
@@ -560,14 +562,15 @@ void linphone_core_upload_log_collection(LinphoneCore *core) {
core->log_collection_upload_information->type = "application";
core->log_collection_upload_information->subtype = "gzip";
#else
- core->log_collection_upload_information->type = "text";
- core->log_collection_upload_information->subtype = "plain";
+ linphone_content_set_type(core->log_collection_upload_information, "text");
+ linphone_content_set_subtype(core->log_collection_upload_information,"plain");
#endif
- core->log_collection_upload_information->name = ms_strdup_printf("%s_log.%s",
+ name = ms_strdup_printf("%s_log.%s",
liblinphone_log_collection_prefix ? liblinphone_log_collection_prefix : LOG_COLLECTION_DEFAULT_PREFIX,
COMPRESSED_LOG_COLLECTION_EXTENSION);
- if (prepare_log_collection_file_to_upload(core->log_collection_upload_information->name) < 0) return;
- core->log_collection_upload_information->size = get_size_of_file_to_upload(core->log_collection_upload_information->name);
+ linphone_content_set_name(core->log_collection_upload_information, name);
+ if (prepare_log_collection_file_to_upload(name) < 0) return;
+ linphone_content_set_size(core->log_collection_upload_information, get_size_of_file_to_upload(name));
uri = belle_generic_uri_parse(linphone_core_get_log_collection_upload_server_url(core));
req = belle_http_request_create("POST", uri, NULL, NULL, NULL);
cbs.process_response = process_response_from_post_file_log_collection;
@@ -575,6 +578,7 @@ void linphone_core_upload_log_collection(LinphoneCore *core) {
cbs.process_auth_requested = process_auth_requested_upload_log_collection;
l = belle_http_request_listener_create_from_callbacks(&cbs, core);
belle_http_provider_send_request(core->http_provider, req, l);
+ ms_free(name);
}
}
diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h
index 33dd95df2..add43e4a0 100644
--- a/coreapi/linphonecore.h
+++ b/coreapi/linphonecore.h
@@ -126,26 +126,6 @@ typedef struct SalAddress LinphoneAddress;
typedef struct belle_sip_dict LinphoneDictionary;
-/**
- * The LinphoneContent struct holds data that can be embedded in a signaling message.
- * @ingroup misc
-**/
-struct _LinphoneContent{
- char *type; /**file_transfer_information) {
- linphone_content_uninit(message->file_transfer_information);
- ms_free(message->file_transfer_information);
+ linphone_content_unref(message->file_transfer_information);
message->file_transfer_information = NULL;
}
- message->file_transfer_information = (LinphoneContent *)malloc(sizeof(LinphoneContent));
- memset(message->file_transfer_information, 0, sizeof(*(message->file_transfer_information)));
-
- message->file_transfer_information->type = argv[1] ? ms_strdup(argv[1]) : NULL;
- message->file_transfer_information->subtype = argv[2] ? ms_strdup(argv[2]) : NULL;
- message->file_transfer_information->name = argv[3] ? ms_strdup(argv[3]) : NULL;
- message->file_transfer_information->encoding = argv[4] ? ms_strdup(argv[4]) : NULL;
- message->file_transfer_information->size = (size_t) atoi(argv[5]);
+ message->file_transfer_information = linphone_content_new();
+ if (argv[1]) linphone_content_set_type(message->file_transfer_information, argv[1]);
+ if (argv[2]) linphone_content_set_subtype(message->file_transfer_information, argv[2]);
+ if (argv[3]) linphone_content_set_name(message->file_transfer_information, argv[3]);
+ if (argv[4]) linphone_content_set_encoding(message->file_transfer_information, argv[4]);
+ linphone_content_set_size(message->file_transfer_information, (size_t)atoi(argv[5]));
return 0;
}
@@ -199,11 +196,11 @@ static int linphone_chat_message_store_content(LinphoneChatMessage *msg) {
if (lc->db) {
LinphoneContent *content = msg->file_transfer_information;
char *buf = sqlite3_mprintf("INSERT INTO content VALUES(NULL,%Q,%Q,%Q,%Q,%i,%Q);",
- content->type,
- content->subtype,
- content->name,
- content->encoding,
- content->size,
+ linphone_content_get_type(content),
+ linphone_content_get_subtype(content),
+ linphone_content_get_name(content),
+ linphone_content_get_encoding(content),
+ linphone_content_get_size(content),
NULL
);
linphone_sql_request(lc->db, buf);
diff --git a/coreapi/private.h b/coreapi/private.h
index 0a6270a24..8e1bfaf8a 100644
--- a/coreapi/private.h
+++ b/coreapi/private.h
@@ -887,10 +887,9 @@ void linphone_configure_op(LinphoneCore *lc, SalOp *op, const LinphoneAddress *d
void linphone_call_create_op(LinphoneCall *call);
int linphone_call_prepare_ice(LinphoneCall *call, bool_t incoming_offer);
void linphone_core_notify_info_message(LinphoneCore* lc,SalOp *op, const SalBody *body);
-void linphone_content_uninit(LinphoneContent * obj);
-void linphone_content_copy(LinphoneContent *obj, const LinphoneContent *ref);
-LinphoneContent *linphone_content_copy_from_sal_body(LinphoneContent *obj, const SalBody *ref);
-SalBody *sal_body_from_content(SalBody *body, const LinphoneContent *lc);
+LinphoneContent * linphone_content_new(void);
+LinphoneContent * linphone_content_copy(const LinphoneContent *ref);
+SalBody *sal_body_from_content(SalBody *body, const LinphoneContent *content);
SalReason linphone_reason_to_sal(LinphoneReason reason);
LinphoneReason linphone_reason_from_sal(SalReason reason);
LinphoneEvent *linphone_event_new(LinphoneCore *lc, LinphoneSubscriptionDir dir, const char *name, int expires);
@@ -902,9 +901,20 @@ LinphoneEvent *linphone_event_new_with_out_of_dialog_op(LinphoneCore *lc, SalOp
void linphone_event_set_state(LinphoneEvent *lev, LinphoneSubscriptionState state);
void linphone_event_set_publish_state(LinphoneEvent *lev, LinphonePublishState state);
LinphoneSubscriptionState linphone_subscription_state_from_sal(SalSubscribeStatus ss);
-const LinphoneContent *linphone_content_from_sal_body(LinphoneContent *obj, const SalBody *ref);
+LinphoneContent *linphone_content_from_sal_body(const SalBody *ref);
void linphone_core_invalidate_friend_subscriptions(LinphoneCore *lc);
+
+struct _LinphoneContent {
+ belle_sip_object_t base;
+ void *user_data;
+ struct _LinphoneContentPrivate lcp;
+};
+
+BELLE_SIP_DECLARE_VPTR(LinphoneContent);
+
+
+
/*****************************************************************************
* REMOTE PROVISIONING FUNCTIONS *
****************************************************************************/
@@ -986,6 +996,7 @@ BELLE_SIP_TYPE_ID(LinphoneCallLog),
BELLE_SIP_TYPE_ID(LinphoneCallParams),
BELLE_SIP_TYPE_ID(LinphoneChatMessage),
BELLE_SIP_TYPE_ID(LinphoneChatRoom),
+BELLE_SIP_TYPE_ID(LinphoneContent),
BELLE_SIP_TYPE_ID(LinphoneLDAPContactProvider),
BELLE_SIP_TYPE_ID(LinphoneLDAPContactSearch),
BELLE_SIP_TYPE_ID(LinphoneProxyConfig)
diff --git a/coreapi/quality_reporting.c b/coreapi/quality_reporting.c
index 52d88a7a2..1beea886a 100644
--- a/coreapi/quality_reporting.c
+++ b/coreapi/quality_reporting.c
@@ -257,7 +257,7 @@ static void append_metrics_to_buffer(char ** buffer, size_t * size, size_t * off
}
static int send_report(LinphoneCall* call, reporting_session_report_t * report, const char * report_event) {
- LinphoneContent content = {0};
+ LinphoneContent *content = linphone_content_new();
LinphoneAddress *addr;
int expires = -1;
size_t offset = 0;
@@ -294,9 +294,9 @@ static int send_report(LinphoneCall* call, reporting_session_report_t * report,
goto end;
}
- buffer = (char *) ms_malloc(size);
- content.type = ms_strdup("application");
- content.subtype = ms_strdup("vq-rtcpxr");
+ buffer = (char *) belle_sip_malloc(size);
+ linphone_content_set_type(content, "application");
+ linphone_content_set_subtype(content, "vq-rtcpxr");
append_to_buffer(&buffer, &size, &offset, "%s\r\n", report_event);
append_to_buffer(&buffer, &size, &offset, "CallID: %s\r\n", report->info.call_id);
@@ -331,17 +331,17 @@ static int send_report(LinphoneCall* call, reporting_session_report_t * report,
append_to_buffer(&buffer, &size, &offset, "\r\n");
}
- content.data = buffer;
- content.size = strlen(buffer);
+ linphone_content_set_data(content, buffer);
+ linphone_content_set_size(content, strlen(buffer));
if (call->log->reporting.on_report_sent != NULL){
call->log->reporting.on_report_sent(
call,
(report==call->log->reporting.reports[0])?LINPHONE_CALL_STATS_AUDIO:LINPHONE_CALL_STATS_VIDEO,
- &content);
+ content);
}
- if (! linphone_core_publish(call->core, addr, "vq-rtcpxr", expires, &content)){
+ if (! linphone_core_publish(call->core, addr, "vq-rtcpxr", expires, content)){
ret=4;
} else {
reset_avg_metrics(report);
@@ -354,7 +354,7 @@ static int send_report(LinphoneCall* call, reporting_session_report_t * report,
linphone_address_destroy(addr);
- linphone_content_uninit(&content);
+ linphone_content_unref(content);
end:
ms_message("QualityReporting[%p]: Send '%s' with status %d",
diff --git a/tester/eventapi_tester.c b/tester/eventapi_tester.c
index 1d4b07e59..835130f54 100644
--- a/tester/eventapi_tester.c
+++ b/tester/eventapi_tester.c
@@ -40,7 +40,7 @@ const char *liblinphone_tester_get_notify_content(void){
void linphone_notify_received(LinphoneCore *lc, LinphoneEvent *lev, const char *eventname, const LinphoneContent *content){
LinphoneCoreManager *mgr;
CU_ASSERT_PTR_NOT_NULL_FATAL(content);
- CU_ASSERT_TRUE(strcmp(notify_content,(const char*)content->data)==0);
+ CU_ASSERT_TRUE(strcmp(notify_content,(const char*)linphone_content_get_data(content))==0);
mgr=get_manager(lc);
mgr->stat.number_of_NotifyReceived++;
}
@@ -48,13 +48,14 @@ void linphone_notify_received(LinphoneCore *lc, LinphoneEvent *lev, const char *
void linphone_subscription_state_change(LinphoneCore *lc, LinphoneEvent *lev, LinphoneSubscriptionState state) {
stats* counters = get_stats(lc);
LinphoneCoreManager *mgr=get_manager(lc);
- LinphoneContent content={0};
+ LinphoneContent* content;
const LinphoneAddress* from_addr = linphone_event_get_from(lev);
char* from = linphone_address_as_string(from_addr);
- content.type="application";
- content.subtype="somexml2";
- content.data=(void*)notify_content;
- content.size=strlen(notify_content);
+ content = linphone_core_create_content(lc);
+ linphone_content_set_type(content,"application");
+ linphone_content_set_subtype(content,"somexml2");
+ linphone_content_set_data(content,belle_sip_strdup(notify_content));
+ linphone_content_set_size(content,strlen(notify_content));
ms_message("Subscription state [%s] from [%s]",linphone_subscription_state_to_string(state),from);
ms_free(from);
@@ -80,7 +81,7 @@ void linphone_subscription_state_change(LinphoneCore *lc, LinphoneEvent *lev, Li
counters->number_of_LinphoneSubscriptionActive++;
if (linphone_event_get_subscription_dir(lev)==LinphoneSubscriptionIncoming){
mgr->lev=lev;
- linphone_event_notify(lev,&content);
+ linphone_event_notify(lev,content);
}
break;
case LinphoneSubscriptionTerminated:
@@ -96,6 +97,7 @@ void linphone_subscription_state_change(LinphoneCore *lc, LinphoneEvent *lev, Li
mgr->lev=NULL;
break;
}
+ linphone_content_unref(content);
}
void linphone_publish_state_changed(LinphoneCore *lc, LinphoneEvent *ev, LinphonePublishState state){
@@ -123,23 +125,23 @@ void linphone_publish_state_changed(LinphoneCore *lc, LinphoneEvent *ev, Linphon
static void subscribe_test_declined(void) {
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
- LinphoneContent content={0};
+ LinphoneContent* content;
LinphoneEvent *lev;
const LinphoneErrorInfo *ei;
MSList* lcs=ms_list_append(NULL,marie->lc);
lcs=ms_list_append(lcs,pauline->lc);
+ content = linphone_core_create_content(marie->lc);
+ linphone_content_set_type(content,"application");
+ linphone_content_set_subtype(content,"somexml");
+ linphone_content_set_data(content,belle_sip_strdup(subscribe_content));
+ linphone_content_set_size(content,strlen(subscribe_content));
- content.type="application";
- content.subtype="somexml";
- content.data=(char*)subscribe_content;
- content.size=strlen(subscribe_content);
-
pauline->decline_subscribe=TRUE;
-
- lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",600,&content);
+
+ lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",600,content);
linphone_event_ref(lev);
-
+
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000));
CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000));
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionError,1,21000));/*yes flexisip may wait 20 secs in case of forking*/
@@ -150,7 +152,8 @@ static void subscribe_test_declined(void) {
CU_ASSERT_PTR_NOT_NULL(linphone_error_info_get_phrase(ei));
}
CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionTerminated,1,1000));
-
+
+ linphone_content_unref(content);
linphone_event_unref(lev);
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
@@ -165,23 +168,24 @@ typedef enum RefreshTestType{
static void subscribe_test_with_args(bool_t terminated_by_subscriber, RefreshTestType refresh_type) {
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
- LinphoneContent content={0};
+ LinphoneContent* content;
LinphoneEvent *lev;
int expires= refresh_type!=NoRefresh ? 4 : 600;
MSList* lcs=ms_list_append(NULL,marie->lc);
-
+
lcs=ms_list_append(lcs,pauline->lc);
if (refresh_type==ManualRefresh){
lp_config_set_int(marie->lc->config,"sip","refresh_generic_subscribe",0);
}
- content.type="application";
- content.subtype="somexml";
- content.data=(char*)subscribe_content;
- content.size=strlen(subscribe_content);
-
- lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",expires,&content);
+ content = linphone_core_create_content(marie->lc);
+ linphone_content_set_type(content,"application");
+ linphone_content_set_subtype(content,"somexml");
+ linphone_content_set_data(content,belle_sip_strdup(subscribe_content));
+ linphone_content_set_size(content,strlen(subscribe_content));
+
+ lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",expires,content);
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000));
CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000));
@@ -190,7 +194,7 @@ static void subscribe_test_with_args(bool_t terminated_by_subscriber, RefreshTes
/*make sure marie receives first notification before terminating*/
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_NotifyReceived,1,1000));
-
+
if (refresh_type==AutoRefresh){
wait_for_list(lcs,NULL,0,6000);
CU_ASSERT_TRUE(linphone_event_get_subscription_state(pauline->lev)==LinphoneSubscriptionActive);
@@ -206,10 +210,11 @@ static void subscribe_test_with_args(bool_t terminated_by_subscriber, RefreshTes
CU_ASSERT_PTR_NOT_NULL_FATAL(pauline->lev);
linphone_event_terminate(pauline->lev);
}
-
+
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionTerminated,1,1000));
CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionTerminated,1,1000));
-
+
+ linphone_content_unref(content);
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
}
@@ -217,7 +222,7 @@ static void subscribe_test_with_args(bool_t terminated_by_subscriber, RefreshTes
static void subscribe_test_with_args2(bool_t terminated_by_subscriber, RefreshTestType refresh_type) {
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
- LinphoneContent content={0};
+ LinphoneContent* content;
LinphoneEvent *lev;
int expires= refresh_type!=NoRefresh ? 4 : 600;
MSList* lcs=ms_list_append(NULL,marie->lc);
@@ -228,19 +233,20 @@ static void subscribe_test_with_args2(bool_t terminated_by_subscriber, RefreshTe
lp_config_set_int(marie->lc->config,"sip","refresh_generic_subscribe",0);
}
- content.type="application";
- content.subtype="somexml";
- content.data=(char*)subscribe_content;
- content.size=strlen(subscribe_content);
-
+ content = linphone_core_create_content(marie->lc);
+ linphone_content_set_type(content,"application");
+ linphone_content_set_subtype(content,"somexml");
+ linphone_content_set_data(content,belle_sip_strdup(subscribe_content));
+ linphone_content_set_size(content,strlen(subscribe_content));
+
lev=linphone_core_create_subscribe(marie->lc,pauline->identity,"dodo",expires);
linphone_event_add_custom_header(lev,"My-Header","pouet");
linphone_event_add_custom_header(lev,"My-Header2","pimpon");
- linphone_event_send_subscribe(lev,&content);
-
+ linphone_event_send_subscribe(lev,content);
+
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000));
CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000));
-
+
/*check good receipt of custom headers*/
CU_ASSERT_STRING_EQUAL(linphone_event_get_custom_header(pauline->lev,"My-Header"),"pouet");
CU_ASSERT_STRING_EQUAL(linphone_event_get_custom_header(pauline->lev,"My-Header2"),"pimpon");
@@ -266,10 +272,11 @@ static void subscribe_test_with_args2(bool_t terminated_by_subscriber, RefreshTe
CU_ASSERT_PTR_NOT_NULL_FATAL(pauline->lev);
linphone_event_terminate(pauline->lev);
}
-
+
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionTerminated,1,1000));
CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionTerminated,1,1000));
-
+
+ linphone_content_unref(content);
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
}
@@ -300,30 +307,30 @@ static void subscribe_test_manually_refreshed(void){
static void publish_test_with_args(bool_t refresh, int expires){
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
- LinphoneContent content={0};
+ LinphoneContent* content;
LinphoneEvent *lev;
MSList* lcs=ms_list_append(NULL,marie->lc);
lcs=ms_list_append(lcs,pauline->lc);
+ content = linphone_core_create_content(marie->lc);
+ linphone_content_set_type(content,"application");
+ linphone_content_set_subtype(content,"somexml");
+ linphone_content_set_data(content,belle_sip_strdup(subscribe_content));
+ linphone_content_set_size(content,strlen(subscribe_content));
- content.type="application";
- content.subtype="somexml";
- content.data=(char*)subscribe_content;
- content.size=strlen(subscribe_content);
-
lp_config_set_int(marie->lc->config,"sip","refresh_generic_publish",refresh);
lev=linphone_core_create_publish(marie->lc,pauline->identity,"dodo",expires);
linphone_event_add_custom_header(lev,"CustomHeader","someValue");
- linphone_event_send_publish(lev,&content);
+ linphone_event_send_publish(lev,content);
linphone_event_ref(lev);
-
+
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishProgress,1,1000));
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishOk,1,3000));
-
+
if (!refresh){
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishExpiring,1,5000));
- linphone_event_update_publish(lev,&content);
+ linphone_event_update_publish(lev,content);
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishProgress,1,1000));
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishOk,1,3000));
}else{
@@ -331,11 +338,12 @@ static void publish_test_with_args(bool_t refresh, int expires){
}
linphone_event_terminate(lev);
-
+
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishCleared,1,3000));
-
+
linphone_event_unref(lev);
-
+
+ linphone_content_unref(content);
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
}
diff --git a/tester/flexisip_tester.c b/tester/flexisip_tester.c
index a91811538..f2ec9192e 100644
--- a/tester/flexisip_tester.c
+++ b/tester/flexisip_tester.c
@@ -27,7 +27,7 @@ static void subscribe_forking(void) {
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_tcp_rc");
LinphoneCoreManager* pauline2 = linphone_core_manager_new( "pauline_tcp_rc");
- LinphoneContent content={0};
+ LinphoneContent* content;
LinphoneEvent *lev;
int expires= 600;
MSList* lcs=ms_list_append(NULL,marie->lc);
@@ -35,12 +35,13 @@ static void subscribe_forking(void) {
lcs=ms_list_append(lcs,pauline->lc);
lcs=ms_list_append(lcs,pauline2->lc);
- content.type="application";
- content.subtype="somexml";
- content.data=(char*)liblinphone_tester_get_subscribe_content();
- content.size=strlen(liblinphone_tester_get_subscribe_content());
+ content = linphone_core_create_content(marie->lc);
+ linphone_content_set_type(content,"application");
+ linphone_content_set_subtype(content,"somexml");
+ linphone_content_set_data(content, belle_sip_strdup(liblinphone_tester_get_subscribe_content()));
+ linphone_content_set_size(content, strlen(liblinphone_tester_get_subscribe_content()));
- lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",expires,&content);
+ lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",expires,content);
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000));
CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000));
@@ -51,7 +52,8 @@ static void subscribe_forking(void) {
CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_NotifyReceived,1,1000));
linphone_event_terminate(lev);
-
+
+ linphone_content_unref(content);
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
linphone_core_manager_destroy(pauline2);
diff --git a/tester/message_tester.c b/tester/message_tester.c
index d5f084f44..65ad16d9d 100644
--- a/tester/message_tester.c
+++ b/tester/message_tester.c
@@ -124,8 +124,8 @@ void file_transfer_progress_indication(LinphoneCore *lc, LinphoneChatMessage *me
int progress = (int)((offset * 100)/total);
ms_message(" File transfer [%d%%] %s of type [%s/%s] %s [%s] \n", progress
,(linphone_chat_message_is_outgoing(message)?"sent":"received")
- , content->type
- , content->subtype
+ , linphone_content_get_type(content)
+ , linphone_content_get_subtype(content)
,(linphone_chat_message_is_outgoing(message)?"to":"from")
, address);
counters->progress_of_LinphoneFileTransfer = progress;
@@ -396,7 +396,7 @@ static void file_transfer_message(void) {
char* to;
LinphoneChatRoom* chat_room;
LinphoneChatMessage* message;
- LinphoneContent content;
+ LinphoneContent* content;
const char* big_file_content="big file"; /* setting dummy file content to something */
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
@@ -417,12 +417,12 @@ static void file_transfer_message(void) {
chat_room = linphone_core_create_chat_room(pauline->lc,to);
ms_free(to);
/* create a file transfer message */
- memset(&content,0,sizeof(content));
- content.type="text";
- content.subtype="plain";
- content.size=sizeof(big_file); /*total size to be transfered*/
- content.name = "bigfile.txt";
- message = linphone_chat_room_create_file_transfer_message(chat_room, &content);
+ content = linphone_core_create_content(pauline->lc);
+ linphone_content_set_type(content,"text");
+ linphone_content_set_subtype(content,"plain");
+ linphone_content_set_size(content,sizeof(big_file)); /*total size to be transfered*/
+ linphone_content_set_name(content,"bigfile.txt");
+ message = linphone_chat_room_create_file_transfer_message(chat_room, content);
{
int dummy=0;
wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/
@@ -440,6 +440,7 @@ static void file_transfer_message(void) {
CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1);
CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageExtBodyReceived,1);
+ linphone_content_unref(content);
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
}
@@ -451,7 +452,7 @@ static void small_file_transfer_message(void) {
char* to;
LinphoneChatRoom* chat_room;
LinphoneChatMessage* message;
- LinphoneContent content;
+ LinphoneContent* content;
const char* big_file_content="big file"; /* setting dummy file content to something */
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
@@ -472,12 +473,12 @@ static void small_file_transfer_message(void) {
chat_room = linphone_core_create_chat_room(pauline->lc,to);
ms_free(to);
/* create a file transfer message */
- memset(&content,0,sizeof(content));
- content.type="text";
- content.subtype="plain";
- content.size=SMALL_FILE_SIZE; /*total size to be transfered*/
- content.name = "bigfile.txt";
- message = linphone_chat_room_create_file_transfer_message(chat_room, &content);
+ content = linphone_core_create_content(pauline->lc);
+ linphone_content_set_type(content,"text");
+ linphone_content_set_subtype(content,"plain");
+ linphone_content_set_size(content,SMALL_FILE_SIZE); /*total size to be transfered*/
+ linphone_content_set_name(content,"bigfile.txt");
+ message = linphone_chat_room_create_file_transfer_message(chat_room, content);
{
int dummy=0;
wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/
@@ -495,6 +496,7 @@ static void small_file_transfer_message(void) {
CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1);
CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageExtBodyReceived,1);
+ linphone_content_unref(content);
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
}
@@ -504,7 +506,7 @@ static void file_transfer_message_io_error_upload(void) {
char* to;
LinphoneChatRoom* chat_room;
LinphoneChatMessage* message;
- LinphoneContent content;
+ LinphoneContent* content;
const char* big_file_content="big file"; /* setting dummy file content to something */
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
@@ -526,12 +528,12 @@ static void file_transfer_message_io_error_upload(void) {
chat_room = linphone_core_create_chat_room(pauline->lc,to);
/* create a file transfer message */
- memset(&content,0,sizeof(content));
- content.type="text";
- content.subtype="plain";
- content.size=sizeof(big_file); /*total size to be transfered*/
- content.name = "bigfile.txt";
- message = linphone_chat_room_create_file_transfer_message(chat_room, &content);
+ content = linphone_core_create_content(pauline->lc);
+ linphone_content_set_type(content,"text");
+ linphone_content_set_subtype(content,"plain");
+ linphone_content_set_size(content,sizeof(big_file)); /*total size to be transfered*/
+ linphone_content_set_name(content,"bigfile.txt");
+ message = linphone_chat_room_create_file_transfer_message(chat_room, content);
{
int dummy=0;
wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/
@@ -554,6 +556,7 @@ static void file_transfer_message_io_error_upload(void) {
linphone_core_refresh_registers(pauline->lc); /*to make sure registration is back in registered and so it can be later unregistered*/
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneRegistrationOk,pauline->stat.number_of_LinphoneRegistrationOk+1));
+ linphone_content_unref(content);
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
}
@@ -629,7 +632,7 @@ static void file_transfer_message_upload_cancelled(void) {
char* to;
LinphoneChatRoom* chat_room;
LinphoneChatMessage* message;
- LinphoneContent content;
+ LinphoneContent* content;
const char* big_file_content="big file"; /* setting dummy file content to something */
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
@@ -651,12 +654,12 @@ static void file_transfer_message_upload_cancelled(void) {
chat_room = linphone_core_create_chat_room(pauline->lc,to);
/* create a file transfer message */
- memset(&content,0,sizeof(content));
- content.type="text";
- content.subtype="plain";
- content.size=sizeof(big_file); /*total size to be transfered*/
- content.name = "bigfile.txt";
- message = linphone_chat_room_create_file_transfer_message(chat_room, &content);
+ content = linphone_core_create_content(pauline->lc);
+ linphone_content_set_type(content,"text");
+ linphone_content_set_subtype(content,"plain");
+ linphone_content_set_size(content,sizeof(big_file)); /*total size to be transfered*/
+ linphone_content_set_name(content,"bigfile.txt");
+ message = linphone_chat_room_create_file_transfer_message(chat_room, content);
{
int dummy=0;
wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/
@@ -674,6 +677,7 @@ static void file_transfer_message_upload_cancelled(void) {
CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageNotDelivered,1);
CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageExtBodyReceived,0);
+ linphone_content_unref(content);
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
}
@@ -829,12 +833,13 @@ static void info_message_with_args(bool_t with_content) {
info=linphone_core_create_info_message(marie->lc);
linphone_info_message_add_header(info,"Weather","still bad");
if (with_content) {
- LinphoneContent ct={0};
- ct.type="application";
- ct.subtype="somexml";
- ct.data=(void*)info_content;
- ct.size=strlen(info_content);
- linphone_info_message_set_content(info,&ct);
+ LinphoneContent* ct=linphone_core_create_content(marie->lc);
+ linphone_content_set_type(ct,"application");
+ linphone_content_set_subtype(ct,"somexml");
+ linphone_content_set_data(ct,belle_sip_strdup(info_content));
+ linphone_content_set_size(ct,strlen(info_content));
+ linphone_info_message_set_content(info,ct);
+ linphone_content_unref(ct);
}
{
int dummy=0;
@@ -858,13 +863,13 @@ static void info_message_with_args(bool_t with_content) {
if (with_content){
CU_ASSERT_PTR_NOT_NULL(content);
if (content) {
- CU_ASSERT_PTR_NOT_NULL(content->data);
- CU_ASSERT_PTR_NOT_NULL(content->type);
- CU_ASSERT_PTR_NOT_NULL(content->subtype);
- if (content->type) CU_ASSERT_TRUE(strcmp(content->type,"application")==0);
- if (content->subtype) CU_ASSERT_TRUE(strcmp(content->subtype,"somexml")==0);
- if (content->data)CU_ASSERT_TRUE(strcmp((const char*)content->data,info_content)==0);
- CU_ASSERT_EQUAL(content->size,strlen(info_content));
+ CU_ASSERT_PTR_NOT_NULL(linphone_content_get_data(content));
+ CU_ASSERT_PTR_NOT_NULL(linphone_content_get_type(content));
+ CU_ASSERT_PTR_NOT_NULL(linphone_content_get_subtype(content));
+ if (linphone_content_get_type(content)) CU_ASSERT_TRUE(strcmp(linphone_content_get_type(content),"application")==0);
+ if (linphone_content_get_subtype(content)) CU_ASSERT_TRUE(strcmp(linphone_content_get_subtype(content),"somexml")==0);
+ if (linphone_content_get_data(content))CU_ASSERT_TRUE(strcmp((const char*)linphone_content_get_data(content),info_content)==0);
+ CU_ASSERT_EQUAL(linphone_content_get_size(content),strlen(info_content));
}
}
linphone_core_manager_destroy(marie);
diff --git a/tester/quality_reporting_tester.c b/tester/quality_reporting_tester.c
index 1190f188f..81bae75cf 100644
--- a/tester/quality_reporting_tester.c
+++ b/tester/quality_reporting_tester.c
@@ -25,7 +25,7 @@
#define __strstr(x, y) ((x==NULL)?NULL:strstr(x,y))
void on_report_send_mandatory(const LinphoneCall *call, int stream_type, const LinphoneContent *content){
- char * body = (char *)content->data;
+ char * body = (char *)linphone_content_get_data(content);
char * remote_metrics_start = __strstr(body, "RemoteMetrics:");
reporting_session_report_t * report = call->log->reporting.reports[stream_type];
MediaStream * ms;
@@ -91,7 +91,7 @@ char * on_report_send_verify_metrics(const reporting_content_metrics_t *metrics,
}
void on_report_send_with_rtcp_xr_local(const LinphoneCall *call, int stream_type, const LinphoneContent *content){
- char * body = (char*)content->data;
+ char * body = (char*)linphone_content_get_data(content);
char * remote_metrics_start = __strstr(body, "RemoteMetrics:");
reporting_session_report_t * report = call->log->reporting.reports[stream_type];
on_report_send_mandatory(call,stream_type,content);
@@ -99,7 +99,7 @@ void on_report_send_with_rtcp_xr_local(const LinphoneCall *call, int stream_type
CU_ASSERT_TRUE(!remote_metrics_start || on_report_send_verify_metrics(&report->local_metrics,body) < remote_metrics_start);
}
void on_report_send_with_rtcp_xr_remote(const LinphoneCall *call, int stream_type, const LinphoneContent *content){
- char * body = (char*)content->data;
+ char * body = (char*)linphone_content_get_data(content);
reporting_session_report_t * report = call->log->reporting.reports[stream_type];
on_report_send_mandatory(call,stream_type,content);
@@ -214,7 +214,7 @@ static void quality_reporting_not_sent_if_low_bandwidth() {
}
void on_report_send_remove_fields(const LinphoneCall *call, int stream_type, const LinphoneContent *content){
- char *body = (char*)content->data;
+ char *body = (char*)linphone_content_get_data(content);
/*corrupt start of the report*/
strncpy(body, "corrupted report is corrupted", strlen("corrupted report is corrupted"));
}