From 1cf7027eb192db476a1581926c97a7f1650ee33c Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Tue, 19 Dec 2017 14:13:11 +0100 Subject: [PATCH] Add fetch of participant devices, checking of their capabilities and improve group chat tests. --- coreapi/linphonecore.c | 2 +- include/linphone/api/c-callbacks.h | 15 ++ include/linphone/api/c-chat-room-cbs.h | 28 +++ include/linphone/api/c-chat-room.h | 20 +- include/linphone/api/c-types.h | 6 + src/c-wrapper/api/c-chat-room-cbs.cpp | 18 ++ src/c-wrapper/api/c-chat-room.cpp | 35 ++- .../client-group-to-basic-chat-room.cpp | 2 +- src/chat/chat-room/proxy-chat-room.cpp | 2 +- src/chat/chat-room/server-group-chat-room-p.h | 1 + .../chat-room/server-group-chat-room-stub.cpp | 10 + tester/group_chat_tester.c | 218 +++++++++++------- tester/liblinphone_tester.h | 2 + tester/tester.c | 12 +- 14 files changed, 284 insertions(+), 87 deletions(-) diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 79bfde9c3..149ebf18a 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -2143,7 +2143,7 @@ static void linphone_core_internal_notify_received(LinphoneCore *lc, LinphoneEve if (chatRoom) { shared_ptr cgcr; - if (chatRoom->getCapabilities() & static_cast(ChatRoom::Capabilities::Proxy)) + if (chatRoom->getCapabilities() & ChatRoom::Capabilities::Proxy) cgcr = static_pointer_cast( static_pointer_cast(chatRoom)->getProxiedChatRoom()); else diff --git a/include/linphone/api/c-callbacks.h b/include/linphone/api/c-callbacks.h index c8cfc7142..77b06974e 100644 --- a/include/linphone/api/c-callbacks.h +++ b/include/linphone/api/c-callbacks.h @@ -234,6 +234,21 @@ typedef void (*LinphoneChatRoomCbsParticipantDeviceRemovedCb) (LinphoneChatRoom */ typedef void (*LinphoneChatRoomCbsConferenceAddressGenerationCb) (LinphoneChatRoom *cr); +/** + * Callback used when a group chat room server is adding participant to fetch all device information from participant. + * @param[in] cr #LinphoneChatRoom object + * @param[in] participantAddr #LinphoneAddress object + */ +typedef void (*LinphoneChatRoomCbsParticipantDeviceFetchedCb) (LinphoneChatRoom *cr, const LinphoneAddress *participantAddr); + +/** + * Callback used when a group chat room server is checking participants capabilities. + * @param[in] cr #LinphoneChatRoom object + * @param[in] deviceAddr #LinphoneAddress object + * @param[in] participantsAddr \bctbx_list{LinphoneAddress} + */ +typedef void (*LinphoneChatRoomCbsParticipantsCapabilitiesCheckedCb) (LinphoneChatRoom *cr, const LinphoneAddress *deviceAddr, const bctbx_list_t *participantsAddr); + /** * @} **/ diff --git a/include/linphone/api/c-chat-room-cbs.h b/include/linphone/api/c-chat-room-cbs.h index 49f5629db..dea6e763f 100644 --- a/include/linphone/api/c-chat-room-cbs.h +++ b/include/linphone/api/c-chat-room-cbs.h @@ -243,6 +243,34 @@ LINPHONE_PUBLIC LinphoneChatRoomCbsConferenceAddressGenerationCb linphone_chat_r */ LINPHONE_PUBLIC void linphone_chat_room_cbs_set_conference_address_generation (LinphoneChatRoomCbs *cbs, LinphoneChatRoomCbsConferenceAddressGenerationCb cb); +/** + * Get the participant device getting callback. + * @param[in] cbs LinphoneChatRoomCbs object + * @return The participant device getting callback + */ +LINPHONE_PUBLIC LinphoneChatRoomCbsParticipantDeviceFetchedCb linphone_chat_room_cbs_get_participant_device_fetched (const LinphoneChatRoomCbs *cbs); + +/** + * Set the participant device getting callback. + * @param[in] cbs LinphoneChatRoomCbs object + * @param[in] cb The participant device getting callback to be used + */ +LINPHONE_PUBLIC void linphone_chat_room_cbs_set_participant_device_fetched (LinphoneChatRoomCbs *cbs, LinphoneChatRoomCbsParticipantDeviceFetchedCb cb); + +/** + * Get the participants capabilities callback. + * @param[in] cbs LinphoneChatRoomCbs object + * @return The participants capabilities getting callback + */ +LINPHONE_PUBLIC LinphoneChatRoomCbsParticipantsCapabilitiesCheckedCb linphone_chat_room_cbs_get_participants_capabilities_checked (const LinphoneChatRoomCbs *cbs); + +/** + * Set the participants capabilities callback. + * @param[in] cbs LinphoneChatRoomCbs object + * @param[in] cb The participants capabilities callback to be used + */ +LINPHONE_PUBLIC void linphone_chat_room_cbs_set_participants_capabilities_checked (LinphoneChatRoomCbs *cbs, LinphoneChatRoomCbsParticipantsCapabilitiesCheckedCb cb); + /** * @} */ diff --git a/include/linphone/api/c-chat-room.h b/include/linphone/api/c-chat-room.h index 085484ad9..df9cdf764 100644 --- a/include/linphone/api/c-chat-room.h +++ b/include/linphone/api/c-chat-room.h @@ -317,7 +317,7 @@ LINPHONE_PUBLIC LinphoneParticipant *linphone_chat_room_find_participant (const * @param[in] cr A LinphoneChatRoom object * @return The capabilities of the chat room */ -LINPHONE_PUBLIC LinphoneChatRoomCapabilities linphone_chat_room_get_capabilities (const LinphoneChatRoom *cr); +LINPHONE_PUBLIC LinphoneChatRoomCapabilitiesMask linphone_chat_room_get_capabilities (const LinphoneChatRoom *cr); /** * Get the conference address of the chat room. @@ -404,6 +404,24 @@ LINPHONE_PUBLIC const bctbx_list_t * linphone_chat_room_get_composing_addresses( */ LINPHONE_PUBLIC void linphone_chat_room_set_conference_address (LinphoneChatRoom *cr, const LinphoneAddress *confAddr); +/** + * Set the participant device. This function needs to be called from the + * LinphoneChatRoomCbsParticipantDeviceFetchedCb callback and only there. + * @param[in] cr A LinphoneChatRoom object + * @param[in] partAddr The participant address + * @param[in] partDevices \bctbx_list{LinphoneAddress} list of the participant devices to be used by the group chat room + */ +LINPHONE_PUBLIC void linphone_chat_room_set_participant_devices (LinphoneChatRoom *cr, const LinphoneAddress *partAddr, const bctbx_list_t *partDevices); + +/** + * Set the participant device. This function needs to be called from the + * LinphoneChatRoomCbsParticipantsCapabilitiesCheckedCb callback and only there. + * @param[in] cr A LinphoneChatRoom object + * @param[in] deviceAddr The device address + * @param[in] participantsCompatible \bctbx_list{LinphoneAddress} + */ +LINPHONE_PUBLIC void linphone_chat_room_add_compatible_participants (LinphoneChatRoom *cr, const LinphoneAddress *deviceAddr, const bctbx_list_t *participantsCompatible); + /** * Returns back pointer to #LinphoneCore object. * @deprecated use linphone_chat_room_get_core() diff --git a/include/linphone/api/c-types.h b/include/linphone/api/c-types.h index 15c1945fe..05d1951a5 100644 --- a/include/linphone/api/c-types.h +++ b/include/linphone/api/c-types.h @@ -117,6 +117,12 @@ typedef struct _LinphoneChatMessageCbs LinphoneChatMessageCbs; */ typedef struct _LinphoneChatRoom LinphoneChatRoom; +/** + * A mask of LinphoneChatRoomCapabilities + * @ingroup chatroom + */ +typedef int LinphoneChatRoomCapabilitiesMask; + /** * An object to handle the callbacks for the handling a LinphoneChatRoom objects. * @ingroup chatroom diff --git a/src/c-wrapper/api/c-chat-room-cbs.cpp b/src/c-wrapper/api/c-chat-room-cbs.cpp index dc1beebbf..6f5695974 100644 --- a/src/c-wrapper/api/c-chat-room-cbs.cpp +++ b/src/c-wrapper/api/c-chat-room-cbs.cpp @@ -39,6 +39,8 @@ struct _LinphoneChatRoomCbs { LinphoneChatRoomCbsChatMessageReceivedCb chatMessageReceivedCb; LinphoneChatRoomCbsChatMessageSentCb chatMessageSentCb; LinphoneChatRoomCbsConferenceAddressGenerationCb conferenceAddressGenerationCb; + LinphoneChatRoomCbsParticipantDeviceFetchedCb participantDeviceFetchedCb; + LinphoneChatRoomCbsParticipantsCapabilitiesCheckedCb participantsCapabilitiesChecked; }; BELLE_SIP_DECLARE_VPTR_NO_EXPORT(LinphoneChatRoomCbs); @@ -178,3 +180,19 @@ LinphoneChatRoomCbsConferenceAddressGenerationCb linphone_chat_room_cbs_get_conf void linphone_chat_room_cbs_set_conference_address_generation (LinphoneChatRoomCbs *cbs, LinphoneChatRoomCbsConferenceAddressGenerationCb cb) { cbs->conferenceAddressGenerationCb = cb; } + +LinphoneChatRoomCbsParticipantDeviceFetchedCb linphone_chat_room_cbs_get_participant_device_fetched (const LinphoneChatRoomCbs *cbs) { + return cbs->participantDeviceFetchedCb; +} + +void linphone_chat_room_cbs_set_participant_device_fetched (LinphoneChatRoomCbs *cbs, LinphoneChatRoomCbsParticipantDeviceFetchedCb cb) { + cbs->participantDeviceFetchedCb = cb; +} + +LinphoneChatRoomCbsParticipantsCapabilitiesCheckedCb linphone_chat_room_cbs_get_participants_capabilities_checked (const LinphoneChatRoomCbs *cbs) { + return cbs->participantsCapabilitiesChecked; +} + +void linphone_chat_room_cbs_set_participants_capabilities_checked (LinphoneChatRoomCbs *cbs, LinphoneChatRoomCbsParticipantsCapabilitiesCheckedCb cb) { + cbs->participantsCapabilitiesChecked = cb; +} diff --git a/src/c-wrapper/api/c-chat-room.cpp b/src/c-wrapper/api/c-chat-room.cpp index 453612980..dba1ac8e3 100644 --- a/src/c-wrapper/api/c-chat-room.cpp +++ b/src/c-wrapper/api/c-chat-room.cpp @@ -70,6 +70,13 @@ static void _linphone_chat_room_destructor (LinphoneChatRoom *cr) { bctbx_list_free_with_data(cr->composingAddresses, (bctbx_list_free_func)linphone_address_unref); } +static list _get_identity_address_list_from_address_list(list addressList) { + list lIdent; + for (const auto &addr : addressList) + lIdent.push_back(LinphonePrivate::IdentityAddress(addr)); + return lIdent; +} + // ============================================================================= // Public functions. // ============================================================================= @@ -265,8 +272,8 @@ LinphoneParticipant *linphone_chat_room_find_participant (const LinphoneChatRoom )); } -LinphoneChatRoomCapabilities linphone_chat_room_get_capabilities (const LinphoneChatRoom *cr) { - return (LinphoneChatRoomCapabilities)L_GET_CPP_PTR_FROM_C_OBJECT(cr)->getCapabilities(); +LinphoneChatRoomCapabilitiesMask linphone_chat_room_get_capabilities (const LinphoneChatRoom *cr) { + return L_GET_CPP_PTR_FROM_C_OBJECT(cr)->getCapabilities(); } const LinphoneAddress *linphone_chat_room_get_conference_address (const LinphoneChatRoom *cr) { @@ -350,6 +357,30 @@ void linphone_chat_room_set_conference_address (LinphoneChatRoom *cr, const Linp bctbx_free(addrStr); } +void linphone_chat_room_set_participant_devices (LinphoneChatRoom *cr, const LinphoneAddress *partAddr, const bctbx_list_t *partDevices) { + char *addrStr = linphone_address_as_string(partAddr); + list lDevices = L_GET_RESOLVED_CPP_LIST_FROM_C_LIST(partDevices, Address); + list lIdentAddr; + for (const auto &addr : lDevices) + lIdentAddr.push_back(LinphonePrivate::IdentityAddress(addr)); + LinphonePrivate::ServerGroupChatRoomPrivate *sgcr = dynamic_cast(L_GET_PRIVATE_FROM_C_OBJECT(cr)); + if (sgcr) + sgcr->setParticipantDevices(LinphonePrivate::IdentityAddress(addrStr), lIdentAddr); + bctbx_free(addrStr); +} + +void linphone_chat_room_add_compatible_participants (LinphoneChatRoom *cr, const LinphoneAddress *deviceAddr, const bctbx_list_t *participantsCompatible) { + list lPartsComp = L_GET_RESOLVED_CPP_LIST_FROM_C_LIST(participantsCompatible, Address); + LinphonePrivate::ServerGroupChatRoomPrivate *sgcr = dynamic_cast(L_GET_PRIVATE_FROM_C_OBJECT(cr)); + if (sgcr) { + char *deviceAddrStr = linphone_address_as_string_uri_only(deviceAddr); + sgcr->addCompatibleParticipants(LinphonePrivate::IdentityAddress(deviceAddrStr), + _get_identity_address_list_from_address_list(lPartsComp) + ); + bctbx_free(deviceAddrStr); + } +} + // ============================================================================= // Reference and user data handling functions. // ============================================================================= diff --git a/src/chat/chat-room/client-group-to-basic-chat-room.cpp b/src/chat/chat-room/client-group-to-basic-chat-room.cpp index e726cc362..b403a64bd 100644 --- a/src/chat/chat-room/client-group-to-basic-chat-room.cpp +++ b/src/chat/chat-room/client-group-to-basic-chat-room.cpp @@ -46,7 +46,7 @@ public: } void onCallSessionSetReleased (const std::shared_ptr &session) override { - if (!(chatRoom->getCapabilities() & static_cast(ChatRoom::Capabilities::Conference))) + if (!(chatRoom->getCapabilities() & ChatRoom::Capabilities::Conference)) return; static_pointer_cast(chatRoom)->getPrivate()->onCallSessionSetReleased(session); } diff --git a/src/chat/chat-room/proxy-chat-room.cpp b/src/chat/chat-room/proxy-chat-room.cpp index 19cfd0770..73b05678e 100644 --- a/src/chat/chat-room/proxy-chat-room.cpp +++ b/src/chat/chat-room/proxy-chat-room.cpp @@ -68,7 +68,7 @@ time_t ProxyChatRoom::getLastUpdateTime () const { ProxyChatRoom::CapabilitiesMask ProxyChatRoom::getCapabilities () const { L_D(); - return d->chatRoom->getCapabilities() | static_cast(ProxyChatRoom::Capabilities::Proxy); + return d->chatRoom->getCapabilities() | ProxyChatRoom::Capabilities::Proxy; } ProxyChatRoom::State ProxyChatRoom::getState () const { diff --git a/src/chat/chat-room/server-group-chat-room-p.h b/src/chat/chat-room/server-group-chat-room-p.h index ec3ac2bd2..9f1b76b04 100644 --- a/src/chat/chat-room/server-group-chat-room-p.h +++ b/src/chat/chat-room/server-group-chat-room-p.h @@ -46,6 +46,7 @@ public: void setConferenceAddress (const IdentityAddress &conferenceAddress); void setParticipantDevices (const IdentityAddress &addr, const std::list &devices); + void addCompatibleParticipants (const IdentityAddress &deviceAddr, const std::list &participantCompatible); LinphoneReason onSipMessageReceived (SalOp *op, const SalMessage *message) override; diff --git a/src/chat/chat-room/server-group-chat-room-stub.cpp b/src/chat/chat-room/server-group-chat-room-stub.cpp index b883ce291..b46e5512b 100644 --- a/src/chat/chat-room/server-group-chat-room-stub.cpp +++ b/src/chat/chat-room/server-group-chat-room-stub.cpp @@ -64,6 +64,8 @@ void ServerGroupChatRoomPrivate::setConferenceAddress (const IdentityAddress &) void ServerGroupChatRoomPrivate::setParticipantDevices (const IdentityAddress &addr, const list &devices) {} +void ServerGroupChatRoomPrivate::addCompatibleParticipants (const IdentityAddress &deviceAddr, const list &participantCompatible) {} + // ----------------------------------------------------------------------------- LinphoneReason ServerGroupChatRoomPrivate::onSipMessageReceived (SalOp *, const SalMessage *) { @@ -82,6 +84,14 @@ bool ServerGroupChatRoomPrivate::isAdminLeft () const { // ----------------------------------------------------------------------------- +void ServerGroupChatRoomPrivate::onChatRoomInsertRequested (const shared_ptr &chatRoom) {} + +void ServerGroupChatRoomPrivate::onChatRoomInsertInDatabaseRequested (const shared_ptr &chatRoom) {} + +void ServerGroupChatRoomPrivate::onChatRoomDeleteRequested (const shared_ptr &chatRoom) {} + +// ----------------------------------------------------------------------------- + void ServerGroupChatRoomPrivate::onCallSessionStateChanged ( const shared_ptr &, LinphoneCallState, diff --git a/tester/group_chat_tester.c b/tester/group_chat_tester.c index 013a87744..b05a2addd 100644 --- a/tester/group_chat_tester.c +++ b/tester/group_chat_tester.c @@ -133,6 +133,10 @@ static void _configure_core_for_callbacks(LinphoneCoreManager *lcm, LinphoneCore linphone_core_set_user_data(lcm->lc, lcm); } +static void _start_core(LinphoneCoreManager *lcm) { + linphone_core_manager_start(lcm, TRUE); +} + // Configure list of core manager for conference and add the listener static bctbx_list_t * init_core_for_conference(bctbx_list_t *coreManagerList) { bctbx_list_t *coresList = NULL; @@ -157,6 +161,10 @@ static bctbx_list_t * init_core_for_conference(bctbx_list_t *coreManagerList) { return coresList; } +static void start_core_for_conference(bctbx_list_t *coreManagerList) { + bctbx_list_for_each(coreManagerList, (void (*)(void *))_start_core); +} + static LinphoneChatRoom * check_creation_chat_room_client_side(bctbx_list_t *lcs, LinphoneCoreManager *lcm, stats *initialStats, const LinphoneAddress *confAddr, const char* subject, int participantNumber, bool_t isAdmin) { BC_ASSERT_TRUE(wait_for_list(lcs, &lcm->stat.number_of_LinphoneChatRoomStateCreationPending, initialStats->number_of_LinphoneChatRoomStateCreationPending + 1, 5000)); BC_ASSERT_TRUE(wait_for_list(lcs, &lcm->stat.number_of_LinphoneChatRoomStateCreated, initialStats->number_of_LinphoneChatRoomStateCreated + 1, 5000)); @@ -176,7 +184,7 @@ static LinphoneChatRoom * check_creation_chat_room_client_side(bctbx_list_t *lcs return chatRoom; } -static LinphoneChatRoom * create_chat_room_client_side(bctbx_list_t *lcs, LinphoneCoreManager *lcm, stats *initialStats, bctbx_list_t *participantsAddresses, const char* initialSubject) { +static LinphoneChatRoom * create_chat_room_client_side(bctbx_list_t *lcs, LinphoneCoreManager *lcm, stats *initialStats, bctbx_list_t *participantsAddresses, const char* initialSubject, int expectedParticipantSize) { LinphoneChatRoom *chatRoom = linphone_core_create_client_group_chat_room(lcm->lc, initialSubject); if (!chatRoom) return NULL; @@ -188,7 +196,9 @@ static LinphoneChatRoom * create_chat_room_client_side(bctbx_list_t *lcs, Linpho // Check that the chat room is correctly created on Marie's side and that the participants are added BC_ASSERT_TRUE(wait_for_list(lcs, &lcm->stat.number_of_LinphoneChatRoomStateCreationPending, initialStats->number_of_LinphoneChatRoomStateCreationPending + 1, 10000)); BC_ASSERT_TRUE(wait_for_list(lcs, &lcm->stat.number_of_LinphoneChatRoomStateCreated, initialStats->number_of_LinphoneChatRoomStateCreated + 1, 10000)); - BC_ASSERT_EQUAL(linphone_chat_room_get_nb_participants(chatRoom), bctbx_list_size(participantsAddresses), int, "%d"); + BC_ASSERT_EQUAL(linphone_chat_room_get_nb_participants(chatRoom), + (expectedParticipantSize >= 0) ? expectedParticipantSize : (int)bctbx_list_size(participantsAddresses), + int, "%d"); LinphoneParticipant *participant = linphone_chat_room_get_me(chatRoom); BC_ASSERT_PTR_NOT_NULL(participant); if (participant) @@ -202,10 +212,10 @@ static LinphoneChatRoom * create_chat_room_client_side(bctbx_list_t *lcs, Linpho } static void group_chat_room_creation_server (void) { - LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *laure = linphone_core_manager_new("laure_tcp_rc"); - LinphoneCoreManager *chloe = linphone_core_manager_new("chloe_rc"); + LinphoneCoreManager *marie = linphone_core_manager_create("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *laure = linphone_core_manager_create("laure_tcp_rc"); + LinphoneCoreManager *chloe = linphone_core_manager_create("chloe_rc"); bctbx_list_t *coresManagerList = NULL; bctbx_list_t *participantsAddresses = NULL; int dummy = 0; @@ -214,6 +224,7 @@ static void group_chat_room_creation_server (void) { coresManagerList = bctbx_list_append(coresManagerList, laure); coresManagerList = bctbx_list_append(coresManagerList, chloe); bctbx_list_t *coresList = init_core_for_conference(coresManagerList); + start_core_for_conference(coresManagerList); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(pauline->lc))); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(laure->lc))); @@ -224,7 +235,7 @@ static void group_chat_room_creation_server (void) { // Marie creates a new group chat room const char *initialSubject = "Colleagues"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject, -1); const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); // Check that the chat room is correctly created on Pauline's side and that the participants are added @@ -364,9 +375,9 @@ static void group_chat_room_creation_server (void) { } static void group_chat_room_send_message (void) { - LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *chloe = linphone_core_manager_new("chloe_rc"); + LinphoneCoreManager *marie = linphone_core_manager_create("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *chloe = linphone_core_manager_create("chloe_rc"); bctbx_list_t *coresManagerList = NULL; bctbx_list_t *participantsAddresses = NULL; int dummy = 0; @@ -374,6 +385,7 @@ static void group_chat_room_send_message (void) { coresManagerList = bctbx_list_append(coresManagerList, pauline); coresManagerList = bctbx_list_append(coresManagerList, chloe); bctbx_list_t *coresList = init_core_for_conference(coresManagerList); + start_core_for_conference(coresManagerList); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(pauline->lc))); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(chloe->lc))); stats initialMarieStats = marie->stat; @@ -382,7 +394,7 @@ static void group_chat_room_send_message (void) { // Marie creates a new group chat room const char *initialSubject = "Colleagues"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject, -1); const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); // Check that the chat room is correctly created on Pauline's side and that the participants are added @@ -423,10 +435,10 @@ static void group_chat_room_send_message (void) { } static void group_chat_room_invite_multi_register_account (void) { - LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager *pauline1 = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *pauline2 = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *laure = linphone_core_manager_new("laure_tcp_rc"); + LinphoneCoreManager *marie = linphone_core_manager_create("marie_rc"); + LinphoneCoreManager *pauline1 = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *pauline2 = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *laure = linphone_core_manager_create("laure_tcp_rc"); bctbx_list_t *coresManagerList = NULL; bctbx_list_t *participantsAddresses = NULL; int dummy = 0; @@ -435,6 +447,7 @@ static void group_chat_room_invite_multi_register_account (void) { coresManagerList = bctbx_list_append(coresManagerList, pauline2); coresManagerList = bctbx_list_append(coresManagerList, laure); bctbx_list_t *coresList = init_core_for_conference(coresManagerList); + start_core_for_conference(coresManagerList); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(pauline1->lc))); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(laure->lc))); stats initialMarieStats = marie->stat; @@ -444,7 +457,7 @@ static void group_chat_room_invite_multi_register_account (void) { // Marie creates a new group chat room const char *initialSubject = "Colleagues"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject, -1); const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); @@ -473,9 +486,9 @@ static void group_chat_room_invite_multi_register_account (void) { } static void group_chat_room_add_admin (void) { - LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *laure = linphone_core_manager_new("laure_tcp_rc"); + LinphoneCoreManager *marie = linphone_core_manager_create("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *laure = linphone_core_manager_create("laure_tcp_rc"); bctbx_list_t *coresManagerList = NULL; bctbx_list_t *participantsAddresses = NULL; int dummy = 0; @@ -483,6 +496,7 @@ static void group_chat_room_add_admin (void) { coresManagerList = bctbx_list_append(coresManagerList, pauline); coresManagerList = bctbx_list_append(coresManagerList, laure); bctbx_list_t *coresList = init_core_for_conference(coresManagerList); + start_core_for_conference(coresManagerList); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(pauline->lc))); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(laure->lc))); stats initialMarieStats = marie->stat; @@ -491,7 +505,7 @@ static void group_chat_room_add_admin (void) { // Marie creates a new group chat room const char *initialSubject = "Colleagues"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject, -1); const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); @@ -526,9 +540,9 @@ static void group_chat_room_add_admin (void) { } static void group_chat_room_add_admin_non_admin (void) { - LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *laure = linphone_core_manager_new("laure_tcp_rc"); + LinphoneCoreManager *marie = linphone_core_manager_create("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *laure = linphone_core_manager_create("laure_tcp_rc"); bctbx_list_t *coresManagerList = NULL; bctbx_list_t *participantsAddresses = NULL; int dummy = 0; @@ -536,6 +550,7 @@ static void group_chat_room_add_admin_non_admin (void) { coresManagerList = bctbx_list_append(coresManagerList, pauline); coresManagerList = bctbx_list_append(coresManagerList, laure); bctbx_list_t *coresList = init_core_for_conference(coresManagerList); + start_core_for_conference(coresManagerList); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(pauline->lc))); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(laure->lc))); stats initialMarieStats = marie->stat; @@ -544,7 +559,7 @@ static void group_chat_room_add_admin_non_admin (void) { // Marie creates a new group chat room const char *initialSubject = "Colleagues"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject, -1); const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); @@ -576,9 +591,9 @@ static void group_chat_room_add_admin_non_admin (void) { } static void group_chat_room_remove_admin (void) { - LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *laure = linphone_core_manager_new("laure_tcp_rc"); + LinphoneCoreManager *marie = linphone_core_manager_create("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *laure = linphone_core_manager_create("laure_tcp_rc"); bctbx_list_t *coresManagerList = NULL; bctbx_list_t *participantsAddresses = NULL; int dummy = 0; @@ -586,6 +601,7 @@ static void group_chat_room_remove_admin (void) { coresManagerList = bctbx_list_append(coresManagerList, pauline); coresManagerList = bctbx_list_append(coresManagerList, laure); bctbx_list_t *coresList = init_core_for_conference(coresManagerList); + start_core_for_conference(coresManagerList); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(pauline->lc))); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(laure->lc))); stats initialMarieStats = marie->stat; @@ -594,7 +610,7 @@ static void group_chat_room_remove_admin (void) { // Marie creates a new group chat room const char *initialSubject = "Colleagues"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject, -1); const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); @@ -641,9 +657,9 @@ static void group_chat_room_remove_admin (void) { static void group_chat_room_change_subject (void) { - LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *laure = linphone_core_manager_new("laure_tcp_rc"); + LinphoneCoreManager *marie = linphone_core_manager_create("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *laure = linphone_core_manager_create("laure_tcp_rc"); bctbx_list_t *coresManagerList = NULL; bctbx_list_t *participantsAddresses = NULL; int dummy = 0; @@ -651,6 +667,7 @@ static void group_chat_room_change_subject (void) { coresManagerList = bctbx_list_append(coresManagerList, pauline); coresManagerList = bctbx_list_append(coresManagerList, laure); bctbx_list_t *coresList = init_core_for_conference(coresManagerList); + start_core_for_conference(coresManagerList); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(pauline->lc))); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(laure->lc))); stats initialMarieStats = marie->stat; @@ -660,7 +677,7 @@ static void group_chat_room_change_subject (void) { // Marie creates a new group chat room const char *initialSubject = "Colleagues"; const char *newSubject = "New subject"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject, -1); const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); @@ -693,9 +710,9 @@ static void group_chat_room_change_subject (void) { } static void group_chat_room_change_subject_non_admin (void) { - LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *laure = linphone_core_manager_new("laure_tcp_rc"); + LinphoneCoreManager *marie = linphone_core_manager_create("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *laure = linphone_core_manager_create("laure_tcp_rc"); bctbx_list_t *coresManagerList = NULL; bctbx_list_t *participantsAddresses = NULL; int dummy = 0; @@ -703,6 +720,7 @@ static void group_chat_room_change_subject_non_admin (void) { coresManagerList = bctbx_list_append(coresManagerList, pauline); coresManagerList = bctbx_list_append(coresManagerList, laure); bctbx_list_t *coresList = init_core_for_conference(coresManagerList); + start_core_for_conference(coresManagerList); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(pauline->lc))); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(laure->lc))); stats initialMarieStats = marie->stat; @@ -712,7 +730,7 @@ static void group_chat_room_change_subject_non_admin (void) { // Marie creates a new group chat room const char *initialSubject = "Colleagues"; const char *newSubject = "New subject"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject, -1); const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); @@ -746,9 +764,9 @@ static void group_chat_room_change_subject_non_admin (void) { static void group_chat_room_remove_participant (void) { - LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *laure = linphone_core_manager_new("laure_tcp_rc"); + LinphoneCoreManager *marie = linphone_core_manager_create("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *laure = linphone_core_manager_create("laure_tcp_rc"); bctbx_list_t *coresManagerList = NULL; bctbx_list_t *participantsAddresses = NULL; int dummy = 0; @@ -756,6 +774,7 @@ static void group_chat_room_remove_participant (void) { coresManagerList = bctbx_list_append(coresManagerList, pauline); coresManagerList = bctbx_list_append(coresManagerList, laure); bctbx_list_t *coresList = init_core_for_conference(coresManagerList); + start_core_for_conference(coresManagerList); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(pauline->lc))); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(laure->lc))); stats initialMarieStats = marie->stat; @@ -764,7 +783,7 @@ static void group_chat_room_remove_participant (void) { // Marie creates a new group chat room const char *initialSubject = "Colleagues"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject, -1); const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); @@ -798,9 +817,9 @@ static void group_chat_room_remove_participant (void) { } static void group_chat_room_leave (void) { - LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *laure = linphone_core_manager_new("laure_tcp_rc"); + LinphoneCoreManager *marie = linphone_core_manager_create("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *laure = linphone_core_manager_create("laure_tcp_rc"); bctbx_list_t *coresManagerList = NULL; bctbx_list_t *participantsAddresses = NULL; int dummy = 0; @@ -808,6 +827,7 @@ static void group_chat_room_leave (void) { coresManagerList = bctbx_list_append(coresManagerList, pauline); coresManagerList = bctbx_list_append(coresManagerList, laure); bctbx_list_t *coresList = init_core_for_conference(coresManagerList); + start_core_for_conference(coresManagerList); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(pauline->lc))); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(laure->lc))); stats initialMarieStats = marie->stat; @@ -816,7 +836,7 @@ static void group_chat_room_leave (void) { // Marie creates a new group chat room const char *initialSubject = "Colleagues"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject, -1); const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); @@ -845,9 +865,9 @@ static void group_chat_room_leave (void) { } static void group_chat_room_come_back_after_disconnection (void) { - LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *laure = linphone_core_manager_new("laure_tcp_rc"); + LinphoneCoreManager *marie = linphone_core_manager_create("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *laure = linphone_core_manager_create("laure_tcp_rc"); bctbx_list_t *coresManagerList = NULL; bctbx_list_t *participantsAddresses = NULL; int dummy = 0; @@ -855,6 +875,7 @@ static void group_chat_room_come_back_after_disconnection (void) { coresManagerList = bctbx_list_append(coresManagerList, pauline); coresManagerList = bctbx_list_append(coresManagerList, laure); bctbx_list_t *coresList = init_core_for_conference(coresManagerList); + start_core_for_conference(coresManagerList); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(pauline->lc))); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(laure->lc))); stats initialMarieStats = marie->stat; @@ -864,7 +885,7 @@ static void group_chat_room_come_back_after_disconnection (void) { // Marie creates a new group chat room const char *initialSubject = "Colleagues"; const char *newSubject = "New subject"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject, -1); const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); @@ -931,7 +952,7 @@ static void group_chat_room_create_room_with_disconnected_friends (void) { // Marie creates a new group chat room const char *initialSubject = "Colleagues"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject, -1); const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); @@ -961,9 +982,9 @@ static void group_chat_room_create_room_with_disconnected_friends (void) { } static void group_chat_room_reinvited_after_removed (void) { - LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *laure = linphone_core_manager_new("laure_tcp_rc"); + LinphoneCoreManager *marie = linphone_core_manager_create("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *laure = linphone_core_manager_create("laure_tcp_rc"); bctbx_list_t *coresManagerList = NULL; bctbx_list_t *participantsAddresses = NULL; int dummy = 0; @@ -971,6 +992,7 @@ static void group_chat_room_reinvited_after_removed (void) { coresManagerList = bctbx_list_append(coresManagerList, pauline); coresManagerList = bctbx_list_append(coresManagerList, laure); bctbx_list_t *coresList = init_core_for_conference(coresManagerList); + start_core_for_conference(coresManagerList); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(pauline->lc))); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(laure->lc))); stats initialMarieStats = marie->stat; @@ -979,7 +1001,7 @@ static void group_chat_room_reinvited_after_removed (void) { // Marie creates a new group chat room const char *initialSubject = "Colleagues"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject, -1); participantsAddresses = NULL; const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); @@ -1031,9 +1053,9 @@ static void group_chat_room_reinvited_after_removed (void) { } static void group_chat_room_notify_after_disconnection (void) { - LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *laure = linphone_core_manager_new("laure_tcp_rc"); + LinphoneCoreManager *marie = linphone_core_manager_create("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *laure = linphone_core_manager_create("laure_tcp_rc"); bctbx_list_t *coresManagerList = NULL; bctbx_list_t *participantsAddresses = NULL; int dummy = 0; @@ -1041,6 +1063,7 @@ static void group_chat_room_notify_after_disconnection (void) { coresManagerList = bctbx_list_append(coresManagerList, pauline); coresManagerList = bctbx_list_append(coresManagerList, laure); bctbx_list_t *coresList = init_core_for_conference(coresManagerList); + start_core_for_conference(coresManagerList); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(pauline->lc))); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(laure->lc))); stats initialMarieStats = marie->stat; @@ -1049,7 +1072,7 @@ static void group_chat_room_notify_after_disconnection (void) { // Marie creates a new group chat room const char *initialSubject = "Colleagues"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject, -1); participantsAddresses = NULL; const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); @@ -1139,12 +1162,11 @@ static void group_chat_room_notify_after_disconnection (void) { } static void group_chat_room_send_refer_to_all_devices (void) { - LinphoneCoreManager *marie1 = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager *marie2 = linphone_core_manager_new("marie_rc"); - LinphoneCoreManager *pauline1 = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *pauline2 = linphone_core_manager_new("pauline_rc"); - LinphoneCoreManager *laure1 = linphone_core_manager_new("laure_tcp_rc"); - //LinphoneCoreManager *laure2 = linphone_core_manager_new("laure_tcp_rc"); + LinphoneCoreManager *marie1 = linphone_core_manager_create("marie_rc"); + LinphoneCoreManager *marie2 = linphone_core_manager_create("marie_rc"); + LinphoneCoreManager *pauline1 = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *pauline2 = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *laure = linphone_core_manager_create("laure_tcp_rc"); bctbx_list_t *coresManagerList = NULL; bctbx_list_t *participantsAddresses = NULL; int dummy = 0; @@ -1152,41 +1174,39 @@ static void group_chat_room_send_refer_to_all_devices (void) { coresManagerList = bctbx_list_append(coresManagerList, marie2); coresManagerList = bctbx_list_append(coresManagerList, pauline1); coresManagerList = bctbx_list_append(coresManagerList, pauline2); - coresManagerList = bctbx_list_append(coresManagerList, laure1); - //coresManagerList = bctbx_list_append(coresManagerList, laure2); + coresManagerList = bctbx_list_append(coresManagerList, laure); bctbx_list_t *coresList = init_core_for_conference(coresManagerList); participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(pauline1->lc))); - participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(laure1->lc))); + participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(laure->lc))); stats initialMarie1Stats = marie1->stat; stats initialMarie2Stats = marie2->stat; stats initialPauline1Stats = pauline1->stat; stats initialPauline2Stats = pauline2->stat; - stats initialLaure1Stats = laure1->stat; - //stats initialLaure2Stats = laure2->stat; + stats initialLaureStats = laure->stat; // Marie creates a new group chat room const char *initialSubject = "Colleagues"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie1, &initialMarie1Stats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie1, &initialMarie1Stats, participantsAddresses, initialSubject, -1); participantsAddresses = NULL; const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); - LinphoneChatRoom *marieCr2= check_creation_chat_room_client_side(coresList, marie2, &initialMarie2Stats, confAddr, initialSubject, 2, 1); + // Check that the chat room is correctly created on second Marie's device + LinphoneChatRoom *marieCr2 = check_creation_chat_room_client_side(coresList, marie2, &initialMarie2Stats, confAddr, initialSubject, 2, 1); + // Check that the chat room is correctly created on Pauline's side and that the participants are added LinphoneChatRoom *paulineCr = check_creation_chat_room_client_side(coresList, pauline1, &initialPauline1Stats, confAddr, initialSubject, 2, 0); LinphoneChatRoom *paulineCr2 = check_creation_chat_room_client_side(coresList, pauline2, &initialPauline2Stats, confAddr, initialSubject, 2, 0); // Check that the chat room is correctly created on Laure's side and that the participants are added - LinphoneChatRoom *laureCr = check_creation_chat_room_client_side(coresList, laure1, &initialLaure1Stats, confAddr, initialSubject, 2, 0); - /*LinphoneChatRoom *laure2Cr = *///check_creation_chat_room_client_side(coresList, laure2, &initialLaure2Stats, confAddr, initialSubject, 2); + LinphoneChatRoom *laureCr = check_creation_chat_room_client_side(coresList, laure, &initialLaureStats, confAddr, initialSubject, 2, 0); // Marie removes Laure from the chat room - LinphoneAddress *laureAddr = linphone_address_new(linphone_core_get_identity(laure1->lc)); + LinphoneAddress *laureAddr = linphone_address_new(linphone_core_get_identity(laure->lc)); LinphoneParticipant *laureParticipant = linphone_chat_room_find_participant(marieCr, laureAddr); linphone_address_unref(laureAddr); BC_ASSERT_PTR_NOT_NULL(laureParticipant); linphone_chat_room_remove_participant(marieCr, laureParticipant); - BC_ASSERT_TRUE(wait_for_list(coresList, &laure1->stat.number_of_LinphoneChatRoomStateTerminated, initialLaure1Stats.number_of_LinphoneChatRoomStateTerminated + 1, 1000)); - //BC_ASSERT_TRUE(wait_for_list(coresList, &laure2->stat.number_of_LinphoneChatRoomStateTerminated, initialLaure2Stats.number_of_LinphoneChatRoomStateTerminated + 1, 1000)); + BC_ASSERT_TRUE(wait_for_list(coresList, &laure->stat.number_of_LinphoneChatRoomStateTerminated, initialLaureStats.number_of_LinphoneChatRoomStateTerminated + 1, 1000)); BC_ASSERT_TRUE(wait_for_list(coresList, &marie1->stat.number_of_participants_removed, initialMarie1Stats.number_of_participants_removed + 1, 1000)); BC_ASSERT_TRUE(wait_for_list(coresList, &marie2->stat.number_of_participants_removed, initialMarie2Stats.number_of_participants_removed + 1, 1000)); BC_ASSERT_TRUE(wait_for_list(coresList, &pauline1->stat.number_of_participants_removed, initialPauline1Stats.number_of_participants_removed + 1, 1000)); @@ -1199,7 +1219,7 @@ static void group_chat_room_send_refer_to_all_devices (void) { // Clean db from chat room linphone_core_delete_chat_room(marie1->lc, marieCr); linphone_core_delete_chat_room(marie2->lc, marieCr2); - linphone_core_delete_chat_room(laure1->lc, laureCr); + linphone_core_delete_chat_room(laure->lc, laureCr); linphone_core_delete_chat_room(pauline1->lc, paulineCr); linphone_core_delete_chat_room(pauline2->lc, paulineCr2); @@ -1210,8 +1230,7 @@ static void group_chat_room_send_refer_to_all_devices (void) { linphone_core_manager_destroy(marie2); linphone_core_manager_destroy(pauline1); linphone_core_manager_destroy(pauline2); - linphone_core_manager_destroy(laure1); - //linphone_core_manager_destroy(laure2); + linphone_core_manager_destroy(laure); } static void multiple_is_composing_notification(void) { @@ -1233,7 +1252,7 @@ static void multiple_is_composing_notification(void) { // Marie creates a new group chat room const char *initialSubject = "Colleagues"; - LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject); + LinphoneChatRoom *marieCr = create_chat_room_client_side(coresList, marie, &initialMarieStats, participantsAddresses, initialSubject, -1); participantsAddresses = NULL; const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(marieCr); @@ -1340,6 +1359,47 @@ static void multiple_is_composing_notification(void) { linphone_core_manager_destroy(laure); } +static void group_chat_room_create_room_with_incompatible_friend (void) { + LinphoneCoreManager *marie = linphone_core_manager_create("marie2_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_create("pauline_rc"); + LinphoneCoreManager *laure = linphone_core_manager_create("laure_tcp_rc"); + bctbx_list_t *coresManagerList = NULL; + bctbx_list_t *participantsAddresses = NULL; + int dummy = 0; + coresManagerList = bctbx_list_append(coresManagerList, marie); + coresManagerList = bctbx_list_append(coresManagerList, pauline); + coresManagerList = bctbx_list_append(coresManagerList, laure); + bctbx_list_t *coresList = init_core_for_conference(coresManagerList); + start_core_for_conference(coresManagerList); + participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(marie->lc))); + participantsAddresses = bctbx_list_append(participantsAddresses, linphone_address_new(linphone_core_get_identity(laure->lc))); + //stats initialMarieStats = marie->stat; + stats initialPaulineStats = pauline->stat; + stats initialLaureStats = laure->stat; + + // Marie creates a new group chat room + const char *initialSubject = "Colleagues"; + LinphoneChatRoom *paulineCr = create_chat_room_client_side(coresList, pauline, &initialPaulineStats, participantsAddresses, initialSubject, 1); + participantsAddresses = NULL; + const LinphoneAddress *confAddr = linphone_chat_room_get_conference_address(paulineCr); + + // Check that the chat room is correctly created on Pauline's side and that the participants are added + //LinphoneChatRoom *marieCr = check_creation_chat_room_client_side(coresList, marie, &initialMarieStats, confAddr, initialSubject, 2, 0); + + // Check that the chat room is correctly created on Laure's side and that the participants are added + LinphoneChatRoom *laureCr = check_creation_chat_room_client_side(coresList, laure, &initialLaureStats, confAddr, initialSubject, 1, 0); + + BC_ASSERT_EQUAL(linphone_chat_room_get_nb_participants(laureCr), 1, int, "%d"); + BC_ASSERT_EQUAL(linphone_chat_room_get_nb_participants(paulineCr), 1, int, "%d"); + + wait_for_list(coresList, &dummy, 1, 1000); + bctbx_list_free(coresList); + bctbx_list_free(coresManagerList); + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); + linphone_core_manager_destroy(laure); +} + static void group_chat_room_fallback_to_basic_chat_room (void) { LinphoneCoreManager *marie = linphone_core_manager_create("marie_rc"); LinphoneCoreManager *pauline = linphone_core_manager_create("pauline_rc"); diff --git a/tester/liblinphone_tester.h b/tester/liblinphone_tester.h index 260db22d4..5c5190fcb 100644 --- a/tester/liblinphone_tester.h +++ b/tester/liblinphone_tester.h @@ -319,6 +319,8 @@ void liblinphone_tester_add_suites(void); void linphone_core_manager_init(LinphoneCoreManager *mgr, const char* rc_file, const char* phone_alias); void linphone_core_manager_start(LinphoneCoreManager *mgr, int check_for_proxies); +LinphoneCoreManager* linphone_core_manager_create2(const char* rc_file, const char* phone_alias); +LinphoneCoreManager* linphone_core_manager_create(const char* rc_file); LinphoneCoreManager* linphone_core_manager_new3(const char* rc_file, int check_for_proxies, const char* phone_alias); LinphoneCoreManager* linphone_core_manager_new2(const char* rc_file, int check_for_proxies); LinphoneCoreManager* linphone_core_manager_new(const char* rc_file); diff --git a/tester/tester.c b/tester/tester.c index b20eeda8f..d6c317f1f 100644 --- a/tester/tester.c +++ b/tester/tester.c @@ -426,10 +426,18 @@ void linphone_core_manager_start(LinphoneCoreManager *mgr, int check_for_proxies } -LinphoneCoreManager* linphone_core_manager_new3(const char* rc_file, int check_for_proxies, const char* phone_alias) { +LinphoneCoreManager* linphone_core_manager_create2(const char* rc_file, const char* phone_alias) { LinphoneCoreManager *manager = ms_new0(LinphoneCoreManager, 1); - linphone_core_manager_init(manager, rc_file, phone_alias); + return manager; +} + +LinphoneCoreManager* linphone_core_manager_create(const char* rc_file) { + return linphone_core_manager_create2(rc_file, NULL); +} + +LinphoneCoreManager* linphone_core_manager_new3(const char* rc_file, int check_for_proxies, const char* phone_alias) { + LinphoneCoreManager *manager = linphone_core_manager_create2(rc_file, phone_alias); linphone_core_manager_start(manager, check_for_proxies); return manager; }