mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-27 07:59:20 +00:00
Add timer to retry basic to client group chat room migration after some time if it has failed.
This commit is contained in:
parent
88e381ffb2
commit
4c0c1b6ae5
3 changed files with 35 additions and 4 deletions
|
|
@ -48,12 +48,20 @@ public:
|
|||
|
||||
void sendChatMessage (const shared_ptr<ChatMessage> &chatMessage) override {
|
||||
ProxyChatRoomPrivate::sendChatMessage(chatMessage);
|
||||
const char *specs = linphone_core_get_linphone_specs(chatMessage->getCore()->getCCore());
|
||||
time_t currentRealTime = ms_time(nullptr);
|
||||
if (!linphone_core_get_conference_factory_uri(chatMessage->getCore()->getCCore())
|
||||
|| (chatRoom->getCapabilities() & ChatRoom::Capabilities::Conference)
|
||||
|| clientGroupChatRoom
|
||||
|| !specs || !strstr(specs, "groupchat")
|
||||
|| ((currentRealTime - migrationRealTime) <
|
||||
linphone_config_get_int(linphone_core_get_config(chatMessage->getCore()->getCCore()),
|
||||
"misc", "basic_to_client_group_chat_room_migration_timer", 86400) // Try migration every 24 hours
|
||||
)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
migrationRealTime = currentRealTime;
|
||||
clientGroupChatRoom = static_pointer_cast<ClientGroupChatRoom>(
|
||||
chatRoom->getCore()->getPrivate()->createClientGroupChatRoom(chatRoom->getSubject(), false)
|
||||
);
|
||||
|
|
@ -81,6 +89,7 @@ public:
|
|||
|
||||
private:
|
||||
shared_ptr<ClientGroupChatRoom> clientGroupChatRoom;
|
||||
time_t migrationRealTime = 0;
|
||||
|
||||
L_DECLARE_PUBLIC(BasicToClientGroupChatRoom);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1757,14 +1757,14 @@ static void group_chat_room_migrate_from_basic_to_client_fail (void) {
|
|||
BC_ASSERT_EQUAL(linphone_chat_room_get_capabilities(marieCr), LinphoneChatRoomCapabilitiesBasic | LinphoneChatRoomCapabilitiesProxy | LinphoneChatRoomCapabilitiesMigratable, int, "%d");
|
||||
msg = linphone_chat_room_create_message(marieCr, "Did you migrate?");
|
||||
linphone_chat_message_send(msg);
|
||||
BC_ASSERT_TRUE(wait_for_list(coresList, &marie->stat.number_of_LinphoneChatRoomStateCreationPending, initialMarieStats.number_of_LinphoneChatRoomStateCreationPending + 1, 10000));
|
||||
BC_ASSERT_FALSE(wait_for_list(coresList, &marie->stat.number_of_LinphoneChatRoomStateCreated, initialMarieStats.number_of_LinphoneChatRoomStateCreated + 1, 10000));
|
||||
BC_ASSERT_TRUE(wait_for_list(coresList, &marie->stat.number_of_LinphoneChatRoomStateCreationPending, initialMarieStats.number_of_LinphoneChatRoomStateCreationPending + 1, 3000));
|
||||
BC_ASSERT_FALSE(wait_for_list(coresList, &marie->stat.number_of_LinphoneChatRoomStateCreated, initialMarieStats.number_of_LinphoneChatRoomStateCreated + 1, 3000));
|
||||
BC_ASSERT_TRUE(linphone_chat_room_get_capabilities(marieCr) & LinphoneChatRoomCapabilitiesBasic);
|
||||
BC_ASSERT_EQUAL(linphone_chat_room_get_nb_participants(marieCr), 1, int, "%d");
|
||||
BC_ASSERT_EQUAL(linphone_chat_room_get_history_size(marieCr), 2, int, "%d");
|
||||
|
||||
BC_ASSERT_FALSE(wait_for_list(coresList, &pauline->stat.number_of_LinphoneChatRoomStateCreationPending, initialPaulineStats.number_of_LinphoneChatRoomStateCreationPending + 1, 10000));
|
||||
BC_ASSERT_FALSE(wait_for_list(coresList, &pauline->stat.number_of_LinphoneChatRoomStateCreated, initialPaulineStats.number_of_LinphoneChatRoomStateCreated + 1, 10000));
|
||||
BC_ASSERT_FALSE(wait_for_list(coresList, &pauline->stat.number_of_LinphoneChatRoomStateCreationPending, initialPaulineStats.number_of_LinphoneChatRoomStateCreationPending + 1, 3000));
|
||||
BC_ASSERT_FALSE(wait_for_list(coresList, &pauline->stat.number_of_LinphoneChatRoomStateCreated, initialPaulineStats.number_of_LinphoneChatRoomStateCreated + 1, 3000));
|
||||
BC_ASSERT_TRUE(linphone_chat_room_get_capabilities(paulineCr) & LinphoneChatRoomCapabilitiesBasic);
|
||||
BC_ASSERT_EQUAL(linphone_chat_room_get_nb_participants(paulineCr), 1, int, "%d");
|
||||
BC_ASSERT_TRUE(wait_for_list(coresList, &pauline->stat.number_of_LinphoneMessageReceived, initialPaulineStats.number_of_LinphoneMessageReceived + 1, 1000));
|
||||
|
|
@ -1781,6 +1781,27 @@ static void group_chat_room_migrate_from_basic_to_client_fail (void) {
|
|||
BC_ASSERT_TRUE(wait_for_list(coresList, &marie->stat.number_of_LinphoneMessageReceived, initialMarieStats.number_of_LinphoneMessageReceived + 1, 1000));
|
||||
BC_ASSERT_EQUAL(linphone_chat_room_get_history_size(marieCr), 4, int, "%d");
|
||||
BC_ASSERT_EQUAL(linphone_chat_room_get_history_size(paulineCr), 4, int, "%d");
|
||||
|
||||
// Activate groupchat on Pauline's side and wait for 5 seconds, the migration should now be done on next message sending
|
||||
linphone_core_set_linphone_specs(pauline->lc, "groupchat");
|
||||
linphone_core_set_network_reachable(pauline->lc, FALSE);
|
||||
wait_for_list(coresList, &dummy, 1, 1000);
|
||||
linphone_core_set_network_reachable(pauline->lc, TRUE);
|
||||
wait_for_list(coresList, &dummy, 1, 5000);
|
||||
msg = linphone_chat_room_create_message(marieCr, "And now, did you migrate?");
|
||||
linphone_chat_message_send(msg);
|
||||
BC_ASSERT_TRUE(wait_for_list(coresList, &marie->stat.number_of_LinphoneChatRoomStateCreationPending, initialMarieStats.number_of_LinphoneChatRoomStateCreationPending + 2, 10000));
|
||||
BC_ASSERT_TRUE(wait_for_list(coresList, &marie->stat.number_of_LinphoneChatRoomStateCreated, initialMarieStats.number_of_LinphoneChatRoomStateCreated + 1, 10000));
|
||||
BC_ASSERT_TRUE(linphone_chat_room_get_capabilities(marieCr) & LinphoneChatRoomCapabilitiesConference);
|
||||
BC_ASSERT_EQUAL(linphone_chat_room_get_nb_participants(marieCr), 1, int, "%d");
|
||||
BC_ASSERT_EQUAL(linphone_chat_room_get_history_size(marieCr), 5, int, "%d");
|
||||
|
||||
BC_ASSERT_TRUE(wait_for_list(coresList, &pauline->stat.number_of_LinphoneChatRoomStateCreationPending, initialPaulineStats.number_of_LinphoneChatRoomStateCreationPending + 1, 10000));
|
||||
BC_ASSERT_TRUE(wait_for_list(coresList, &pauline->stat.number_of_LinphoneChatRoomStateCreated, initialPaulineStats.number_of_LinphoneChatRoomStateCreated + 1, 10000));
|
||||
BC_ASSERT_TRUE(linphone_chat_room_get_capabilities(paulineCr) & LinphoneChatRoomCapabilitiesConference);
|
||||
BC_ASSERT_EQUAL(linphone_chat_room_get_nb_participants(paulineCr), 1, int, "%d");
|
||||
BC_ASSERT_TRUE(wait_for_list(coresList, &pauline->stat.number_of_LinphoneMessageReceived, initialPaulineStats.number_of_LinphoneMessageReceived + 3, 1000));
|
||||
BC_ASSERT_EQUAL(linphone_chat_room_get_history_size(paulineCr), 5, int, "%d");
|
||||
}
|
||||
|
||||
// Clean db from chat room
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ subscribe=0
|
|||
[misc]
|
||||
conference_factory_uri=sip:conference-factory@conf.example.org
|
||||
enable_basic_to_client_group_chat_room_migration=1
|
||||
basic_to_client_group_chat_room_migration_timer=10
|
||||
|
||||
[rtp]
|
||||
audio_rtp_port=18070-28000
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue