Commit 68532f69 authored by jehan's avatar jehan

make lime optional for file sharing

parent 0bf665e8
......@@ -323,7 +323,7 @@ static void linphone_chat_message_process_response_from_post_file(void *data, co
belle_sip_body_handler_t *first_part_bh;
/* shall we encrypt the file */
if (linphone_core_lime_enabled(msg->chat_room->lc)) {
if (linphone_core_lime_for_file_sharing_enabled(msg->chat_room->lc)) {
char keyBuffer[FILE_TRANSFER_KEY_SIZE]; /* temporary storage of generated key: 192 bits of key + 64 bits of initial vector */
/* generate a random 192 bits key + 64 bits of initial vector and store it into the file_transfer_information->key field of the message */
sal_get_random_bytes((unsigned char *)keyBuffer, FILE_TRANSFER_KEY_SIZE);
......@@ -739,20 +739,26 @@ static void _linphone_chat_room_send_message(LinphoneChatRoom *cr, LinphoneChatM
sal_message_send(op,identity,cr->peer,content_type, NULL, NULL);
ms_free(content_type);
} else {
if (linphone_core_lime_enabled(cr->lc)) { /* shall we try to encrypt messages? */
linphone_chat_message_ref(msg); /* ref the message or it may be destroyed by callback if the encryption failed */
if ((msg->content_type != NULL) && (strcmp(msg->content_type, "application/vnd.gsma.rcs-ft-http+xml") == 0 )) { /* it's a file transfer, content type shall be set to application/cipher.vnd.gsma.rcs-ft-http+xml*/
sal_message_send(op, identity, cr->peer, "application/cipher.vnd.gsma.rcs-ft-http+xml", msg->message, linphone_address_as_string_uri_only(linphone_chat_room_get_peer_address(cr)));
char *peer_uri = linphone_address_as_string_uri_only(linphone_chat_room_get_peer_address(cr));
const char * content_type;
if (linphone_core_lime_enabled(cr->lc)) {
linphone_chat_message_ref(msg); /* ref the message or it may be destroyed by callback if the encryption failed */
if (msg->content_type && strcmp(msg->content_type, "application/vnd.gsma.rcs-ft-http+xml") == 0) {
content_type = "application/cipher.vnd.gsma.rcs-ft-http+xml"; /* it's a file transfer, content type shall be set to application/cipher.vnd.gsma.rcs-ft-http+xml*/
} else {
sal_message_send(op, identity, cr->peer, "xml/cipher", msg->message, linphone_address_as_string_uri_only(linphone_chat_room_get_peer_address(cr)));
content_type = "xml/cipher";
}
} else {
if (msg->content_type == NULL) {
sal_text_send(op, identity, cr->peer,msg->message);
} else { /* rcs file transfer */
sal_message_send(op, identity, cr->peer, msg->content_type, msg->message, NULL);
}
content_type = msg->content_type;
}
if (content_type == NULL) {
sal_text_send(op, identity, cr->peer,msg->message);
} else {
sal_message_send(op, identity, cr->peer, content_type, msg->message, peer_uri);
}
ms_free(peer_uri);
}
msg->dir=LinphoneChatMessageOutgoing;
......
......@@ -1871,6 +1871,10 @@ bool_t linphone_core_lime_enabled(const LinphoneCore *lc){
return (lp_config_get_int(lc->config,"sip", "lime", FALSE) && lime_is_available());
}
bool_t linphone_core_lime_for_file_sharing_enabled(const LinphoneCore *lc){
return linphone_core_lime_enabled(lc) && (lp_config_get_int(lc->config,"sip", "lime_for_file_sharing", TRUE) && lime_is_available());
}
/**
* Same as linphone_core_get_primary_contact() but the result is a LinphoneAddress object
* instead of const char*
......
......@@ -1184,6 +1184,8 @@ void _linphone_core_add_listener(LinphoneCore *lc, LinphoneCoreVTable *vtable, b
MSWebCam *linphone_call_get_video_device(const LinphoneCall *call);
MSWebCam *get_nowebcam_device();
#endif
bool_t linphone_core_lime_for_file_sharing_enabled(const LinphoneCore *lc);
#ifdef __cplusplus
}
#endif
......
......@@ -584,7 +584,7 @@ static FILE* fopen_from_write_dir(const char * name, const char * mode) {
return file;
}
static void lime_file_transfer_message(void) {
static void lime_file_transfer_message_base(bool_t encrypt_file) {
int i;
char *to;
FILE *ZIDCacheMarieFD, *ZIDCachePaulineFD;
......@@ -612,6 +612,10 @@ static void lime_file_transfer_message(void) {
/* make sure lime is enabled */
linphone_core_enable_lime(marie->lc, 1);
linphone_core_enable_lime(pauline->lc, 1);
if (!encrypt_file) {
LpConfig *pauline_lp = linphone_core_get_config(pauline->lc);
lp_config_set_int(pauline_lp,"sip","lime_for_file_sharing",0);
}
/* set the zid caches files : create two ZID cache from this valid one inserting the auto-generated sip URI for the peer account as keys in ZID cache are indexed by peer sip uri */
ZIDCacheMarieFD = fopen_from_write_dir("tmpZIDCacheMarie.xml", "wb");
......@@ -677,6 +681,13 @@ static void lime_file_transfer_message(void) {
linphone_core_manager_destroy(pauline);
}
static void lime_file_transfer_message() {
lime_file_transfer_message_base(TRUE);
}
static void lime_file_transfer_message_without_encryption() {
lime_file_transfer_message_base(FALSE);
}
static void printHex(char *title, uint8_t *data, uint32_t length) {
int i;
......@@ -1600,6 +1611,7 @@ test_t message_tests[] = {
#ifdef HAVE_LIME
,{ "Lime Text Message", lime_text_message }
,{ "Lime File transfer message", lime_file_transfer_message }
,{ "Lime File transfer message encryption only", lime_file_transfer_message_without_encryption}
,{ "Lime Unitary", lime_unit }
#endif /* HAVE_LIME */
#ifdef MSG_STORAGE_ENABLED
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment