diff --git a/src/chat/chat-message/chat-message.cpp b/src/chat/chat-message/chat-message.cpp index da5cb1685..eb3f5704b 100644 --- a/src/chat/chat-message/chat-message.cpp +++ b/src/chat/chat-message/chat-message.cpp @@ -547,7 +547,7 @@ void ChatMessagePrivate::send () { if (applyModifiers) { // Do not multipart or encapsulate with CPIM in an old ChatRoom to maintain backward compatibility - if (q->getChatRoom()->canHandleParticipants()) { + if (q->getChatRoom()->canHandleCpim()) { if ((currentSendStep &ChatMessagePrivate::Step::Multipart) == ChatMessagePrivate::Step::Multipart) { lInfo() << "Multipart step already done, skipping"; } else { @@ -575,7 +575,7 @@ void ChatMessagePrivate::send () { currentSendStep |= ChatMessagePrivate::Step::Encryption; } - if (q->getChatRoom()->canHandleParticipants()) { + if (q->getChatRoom()->canHandleCpim()) { if ((currentSendStep &ChatMessagePrivate::Step::Cpim) == ChatMessagePrivate::Step::Cpim) { lInfo() << "Cpim step already done, skipping"; } else { diff --git a/src/chat/chat-room/basic-chat-room-p.h b/src/chat/chat-room/basic-chat-room-p.h index ec740bfd2..a1d58ea60 100644 --- a/src/chat/chat-room/basic-chat-room-p.h +++ b/src/chat/chat-room/basic-chat-room-p.h @@ -34,6 +34,7 @@ public: private: std::string subject; std::list> participants; + bool allowCpim = 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 495de0140..7e30faad7 100644 --- a/src/chat/chat-room/basic-chat-room.cpp +++ b/src/chat/chat-room/basic-chat-room.cpp @@ -55,6 +55,16 @@ 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 b21b4020e..dd22e1ea9 100644 --- a/src/chat/chat-room/basic-chat-room.h +++ b/src/chat/chat-room/basic-chat-room.h @@ -39,6 +39,7 @@ public: 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; @@ -60,6 +61,8 @@ 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 1df88721e..2a8da317b 100644 --- a/src/chat/chat-room/client-group-chat-room.cpp +++ b/src/chat/chat-room/client-group-chat-room.cpp @@ -200,6 +200,10 @@ 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 48c541fbe..42cda37fa 100644 --- a/src/chat/chat-room/client-group-chat-room.h +++ b/src/chat/chat-room/client-group-chat-room.h @@ -61,6 +61,7 @@ public: 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; diff --git a/src/chat/chat-room/proxy-chat-room.cpp b/src/chat/chat-room/proxy-chat-room.cpp index 9f48bef5f..2bb7ade91 100644 --- a/src/chat/chat-room/proxy-chat-room.cpp +++ b/src/chat/chat-room/proxy-chat-room.cpp @@ -278,6 +278,10 @@ bool ProxyChatRoom::canHandleParticipants () const { 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 435561877..0f687bd5d 100644 --- a/src/chat/chat-room/proxy-chat-room.h +++ b/src/chat/chat-room/proxy-chat-room.h @@ -75,6 +75,7 @@ public: const IdentityAddress &getConferenceAddress () const override; bool canHandleParticipants () const override; + bool canHandleCpim () 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 8a01fc918..8d5e62b07 100644 --- a/src/chat/chat-room/server-group-chat-room-stub.cpp +++ b/src/chat/chat-room/server-group-chat-room-stub.cpp @@ -132,6 +132,10 @@ 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 c86656cd0..e1c1f70dc 100644 --- a/src/chat/chat-room/server-group-chat-room.h +++ b/src/chat/chat-room/server-group-chat-room.h @@ -50,6 +50,7 @@ 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 68baba738..90dc092d0 100644 --- a/src/conference/conference-interface.h +++ b/src/conference/conference-interface.h @@ -48,6 +48,7 @@ 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 42f3151ef..5f013af09 100644 --- a/src/conference/conference.cpp +++ b/src/conference/conference.cpp @@ -72,6 +72,10 @@ 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 080eb75ee..b7fa3e356 100644 --- a/src/conference/conference.h +++ b/src/conference/conference.h @@ -50,6 +50,7 @@ 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;