diff --git a/src/chat/chat-message/chat-message.cpp b/src/chat/chat-message/chat-message.cpp index 09bd476e0..c3638d259 100644 --- a/src/chat/chat-message/chat-message.cpp +++ b/src/chat/chat-message/chat-message.cpp @@ -600,7 +600,7 @@ void ChatMessagePrivate::send () { if (applyModifiers) { // Do not multipart or encapsulate with CPIM in an old ChatRoom to maintain backward compatibility - if (q->getChatRoom()->canHandleCpim()) { + if (q->getChatRoom()->canHandleMultipart()) { if ((currentSendStep &ChatMessagePrivate::Step::Multipart) == ChatMessagePrivate::Step::Multipart) { lInfo() << "Multipart step already done, skipping"; } else { diff --git a/src/chat/chat-room/abstract-chat-room.h b/src/chat/chat-room/abstract-chat-room.h index 69fe7f0f5..06064e177 100644 --- a/src/chat/chat-room/abstract-chat-room.h +++ b/src/chat/chat-room/abstract-chat-room.h @@ -51,6 +51,9 @@ public: typedef EnumMask CapabilitiesMask; + virtual bool canHandleCpim () const = 0; + virtual bool canHandleMultipart () const = 0; + virtual const ChatRoomId &getChatRoomId () const = 0; virtual const IdentityAddress &getPeerAddress () const = 0; diff --git a/src/chat/chat-room/basic-chat-room-p.h b/src/chat/chat-room/basic-chat-room-p.h index 000f07f04..661a413a5 100644 --- a/src/chat/chat-room/basic-chat-room-p.h +++ b/src/chat/chat-room/basic-chat-room-p.h @@ -34,7 +34,8 @@ public: private: std::string subject; std::list> participants; - bool allowCpim = false; + bool cpimAllowed = false; + bool multipartAllowed = false; L_DECLARE_PUBLIC(BasicChatRoom); }; diff --git a/src/chat/chat-room/basic-chat-room.cpp b/src/chat/chat-room/basic-chat-room.cpp index 8be0dbd5e..619b52dc7 100644 --- a/src/chat/chat-room/basic-chat-room.cpp +++ b/src/chat/chat-room/basic-chat-room.cpp @@ -43,6 +43,26 @@ BasicChatRoom::BasicChatRoom ( d->participants.push_back(make_shared(getPeerAddress())); } +void BasicChatRoom::allowCpim (bool value) { + L_D(); + d->cpimAllowed = value; +} + +void BasicChatRoom::allowMultipart (bool value) { + L_D(); + d->multipartAllowed = value; +} + +bool BasicChatRoom::canHandleCpim () const { + L_D(); + return d->cpimAllowed; +} + +bool BasicChatRoom::canHandleMultipart () const { + L_D(); + return d->multipartAllowed; +} + BasicChatRoom::CapabilitiesMask BasicChatRoom::getCapabilities () const { return { Capabilities::Basic, Capabilities::OneToOne }; } @@ -55,16 +75,6 @@ bool BasicChatRoom::canHandleParticipants () const { return false; } -bool BasicChatRoom::canHandleCpim () const { - L_D(); - return d->allowCpim; -} - -void BasicChatRoom::allowCpim (bool isCpimAllowed) { - L_D(); - d->allowCpim = isCpimAllowed; -} - const IdentityAddress &BasicChatRoom::getConferenceAddress () const { lError() << "a BasicChatRoom does not have a conference address"; return Utils::getEmptyConstRefObject(); diff --git a/src/chat/chat-room/basic-chat-room.h b/src/chat/chat-room/basic-chat-room.h index d1da80346..86b7e76d3 100644 --- a/src/chat/chat-room/basic-chat-room.h +++ b/src/chat/chat-room/basic-chat-room.h @@ -33,13 +33,17 @@ class LINPHONE_PUBLIC BasicChatRoom : public ChatRoom { friend class CorePrivate; public: + void allowCpim (bool value); + void allowMultipart (bool value); + bool canHandleCpim () const override; + bool canHandleMultipart () const override; + CapabilitiesMask getCapabilities () const override; bool hasBeenLeft () const override; const IdentityAddress &getConferenceAddress () const override; bool canHandleParticipants () const override; - bool canHandleCpim () const override; void addParticipant (const IdentityAddress &addr, const CallSessionParams *params, bool hasMedia) override; void addParticipants (const std::list &addresses, const CallSessionParams *params, bool hasMedia) override; @@ -61,7 +65,6 @@ public: void join () override; void leave () override; - void allowCpim (bool isCpimAllowed); protected: explicit BasicChatRoom (BasicChatRoomPrivate &p, const std::shared_ptr &core, const ChatRoomId &chatRoomId); diff --git a/src/chat/chat-room/client-group-chat-room.cpp b/src/chat/chat-room/client-group-chat-room.cpp index c6d459cd7..b47d33188 100644 --- a/src/chat/chat-room/client-group-chat-room.cpp +++ b/src/chat/chat-room/client-group-chat-room.cpp @@ -205,6 +205,14 @@ shared_ptr ClientGroupChatRoom::getCore () const { return ChatRoom::getCore(); } +bool ClientGroupChatRoom::canHandleCpim () const { + return true; +} + +bool ClientGroupChatRoom::canHandleMultipart () const { + return true; +} + ClientGroupChatRoom::CapabilitiesMask ClientGroupChatRoom::getCapabilities () const { L_D(); return d->capabilities; @@ -218,10 +226,6 @@ bool ClientGroupChatRoom::canHandleParticipants () const { return RemoteConference::canHandleParticipants(); } -bool ClientGroupChatRoom::canHandleCpim () const { - return true; -} - const IdentityAddress &ClientGroupChatRoom::getConferenceAddress () const { return RemoteConference::getConferenceAddress(); } diff --git a/src/chat/chat-room/client-group-chat-room.h b/src/chat/chat-room/client-group-chat-room.h index 0bc562504..cc547cd39 100644 --- a/src/chat/chat-room/client-group-chat-room.h +++ b/src/chat/chat-room/client-group-chat-room.h @@ -57,13 +57,15 @@ public: std::shared_ptr getCore () const; + bool canHandleCpim () const override; + bool canHandleMultipart () const override; + CapabilitiesMask getCapabilities () const override; bool hasBeenLeft () const override; const IdentityAddress &getConferenceAddress () const override; bool canHandleParticipants () const override; - bool canHandleCpim () const override; void deleteFromDb () override; diff --git a/src/chat/chat-room/proxy-chat-room.cpp b/src/chat/chat-room/proxy-chat-room.cpp index 9f4f3aa94..3ad94ae82 100644 --- a/src/chat/chat-room/proxy-chat-room.cpp +++ b/src/chat/chat-room/proxy-chat-room.cpp @@ -298,15 +298,21 @@ const IdentityAddress &ProxyChatRoom::getConferenceAddress () const { // ----------------------------------------------------------------------------- +bool ProxyChatRoom::canHandleCpim () const { + L_D(); + return d->chatRoom->canHandleCpim(); +} + +bool ProxyChatRoom::canHandleMultipart () const { + L_D(); + return d->chatRoom->canHandleMultipart(); +} + bool ProxyChatRoom::canHandleParticipants () const { L_D(); return d->chatRoom->canHandleParticipants(); } -bool ProxyChatRoom::canHandleCpim () const { - return true; -} - void ProxyChatRoom::addParticipant ( const IdentityAddress &participantAddress, const CallSessionParams *params, diff --git a/src/chat/chat-room/proxy-chat-room.h b/src/chat/chat-room/proxy-chat-room.h index 614da87ff..1f2a3ce4b 100644 --- a/src/chat/chat-room/proxy-chat-room.h +++ b/src/chat/chat-room/proxy-chat-room.h @@ -75,8 +75,10 @@ public: const IdentityAddress &getConferenceAddress () const override; - bool canHandleParticipants () const override; bool canHandleCpim () const override; + bool canHandleMultipart () const override; + + bool canHandleParticipants () const override; void addParticipant ( const IdentityAddress &participantAddress, 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 1bb1f246d..13e54827d 100644 --- a/src/chat/chat-room/server-group-chat-room-stub.cpp +++ b/src/chat/chat-room/server-group-chat-room-stub.cpp @@ -125,6 +125,14 @@ ServerGroupChatRoom::CapabilitiesMask ServerGroupChatRoom::getCapabilities () co return 0; } +bool ServerGroupChatRoom::canHandleCpim () const { + return true; +} + +bool ServerGroupChatRoom::canHandleMultipart () const { + return true; +} + bool ServerGroupChatRoom::hasBeenLeft () const { return true; } @@ -137,10 +145,6 @@ bool ServerGroupChatRoom::canHandleParticipants () const { return false; } -bool ServerGroupChatRoom::canHandleCpim () const { - return true; -} - void ServerGroupChatRoom::addParticipant (const IdentityAddress &, const CallSessionParams *, bool) {} void ServerGroupChatRoom::addParticipants (const list &, const CallSessionParams *, bool) {} diff --git a/src/chat/chat-room/server-group-chat-room.h b/src/chat/chat-room/server-group-chat-room.h index 8dac199a4..c63604dd0 100644 --- a/src/chat/chat-room/server-group-chat-room.h +++ b/src/chat/chat-room/server-group-chat-room.h @@ -47,6 +47,9 @@ public: std::shared_ptr getCore () const; + bool canHandleCpim () const override; + bool canHandleMultipart () const override; + std::shared_ptr findParticipant (const std::shared_ptr &session) const; CapabilitiesMask getCapabilities () const override; @@ -55,7 +58,6 @@ public: const IdentityAddress &getConferenceAddress () const override; bool canHandleParticipants () const override; - bool canHandleCpim () const override; void addParticipant (const IdentityAddress &address, const CallSessionParams *params, bool hasMedia) override; void addParticipants ( diff --git a/src/conference/conference-interface.h b/src/conference/conference-interface.h index 100950c84..dc4e740a1 100644 --- a/src/conference/conference-interface.h +++ b/src/conference/conference-interface.h @@ -47,7 +47,6 @@ public: bool hasMedia ) = 0; virtual bool canHandleParticipants () const = 0; - virtual bool canHandleCpim () const = 0; virtual std::shared_ptr findParticipant (const IdentityAddress &participantAddress) const = 0; virtual const IdentityAddress &getConferenceAddress () const = 0; virtual std::shared_ptr getMe () const = 0; diff --git a/src/conference/conference.cpp b/src/conference/conference.cpp index 2387ad7a7..b3127d89d 100644 --- a/src/conference/conference.cpp +++ b/src/conference/conference.cpp @@ -72,10 +72,6 @@ bool Conference::canHandleParticipants () const { return true; } -bool Conference::canHandleCpim () const { - return true; -} - const IdentityAddress &Conference::getConferenceAddress () const { L_D(); return d->conferenceAddress; diff --git a/src/conference/conference.h b/src/conference/conference.h index 53308fa27..733c1360e 100644 --- a/src/conference/conference.h +++ b/src/conference/conference.h @@ -50,7 +50,6 @@ public: void addParticipant (const IdentityAddress &addr, const CallSessionParams *params, bool hasMedia) override; void addParticipants (const std::list &addresses, const CallSessionParams *params, bool hasMedia) override; bool canHandleParticipants () const override; - bool canHandleCpim () const override; std::shared_ptr findParticipant (const IdentityAddress &addr) const override; const IdentityAddress &getConferenceAddress () const override; std::shared_ptr getMe () const override; diff --git a/tester/multipart-tester.cpp b/tester/multipart-tester.cpp index 0b790b9b6..9b10dcb33 100644 --- a/tester/multipart-tester.cpp +++ b/tester/multipart-tester.cpp @@ -42,6 +42,7 @@ static void chat_message_multipart_modifier_base(bool first_file_transfer, bool IdentityAddress paulineAddress(linphone_address_as_string_uri_only(pauline->identity)); shared_ptr marieRoom = pauline->lc->cppPtr->getOrCreateBasicChatRoom(paulineAddress); + static_pointer_cast(marieRoom)->allowMultipart(true); shared_ptr marieMessage = marieRoom->createChatMessage(); if (first_file_transfer) {