From b5c4007d59c7149e2eaca4d426d11b154b8b0aa8 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Wed, 27 Sep 2017 14:59:37 +0200 Subject: [PATCH] Change getId() to getConferenceAddress() in the conference interface. --- include/linphone/api/c-chat-room.h | 6 +++--- src/c-wrapper/api/c-chat-room.cpp | 18 +++++++++++++++--- src/chat/basic-chat-room-p.h | 2 -- src/chat/basic-chat-room.cpp | 7 +++---- src/chat/basic-chat-room.h | 2 +- src/chat/client-group-chat-room.cpp | 9 +++++---- src/chat/client-group-chat-room.h | 2 +- src/chat/real-time-text-chat-room-p.h | 2 -- src/chat/real-time-text-chat-room.cpp | 7 +++---- src/chat/real-time-text-chat-room.h | 2 +- src/conference/conference-interface.h | 2 +- src/conference/conference.cpp | 4 ++-- src/conference/conference.h | 4 ++-- 13 files changed, 37 insertions(+), 30 deletions(-) diff --git a/include/linphone/api/c-chat-room.h b/include/linphone/api/c-chat-room.h index b6071d0da..0b82cdb43 100644 --- a/include/linphone/api/c-chat-room.h +++ b/include/linphone/api/c-chat-room.h @@ -262,11 +262,11 @@ LINPHONE_PUBLIC void linphone_chat_room_add_participants (LinphoneChatRoom *cr, LINPHONE_PUBLIC bool_t linphone_chat_room_can_handle_participants (const LinphoneChatRoom *cr); /** - * Get the conference ID of the chat room. + * Get the conference address of the chat room. * @param[in] cr A LinphoneChatRoom object - * @return The conference ID of the chat room or NULL if this type of chat room is not conference based + * @return The conference address of the chat room or NULL if this type of chat room is not conference based */ -LINPHONE_PUBLIC const char * linphone_chat_room_get_id (const LinphoneChatRoom *cr); +LINPHONE_PUBLIC const LinphoneAddress *linphone_chat_room_get_conference_address (const LinphoneChatRoom *cr); /** * Get the number of participants in the chat room (that is without ourselves). diff --git a/src/c-wrapper/api/c-chat-room.cpp b/src/c-wrapper/api/c-chat-room.cpp index 558b8e56c..02fd19102 100644 --- a/src/c-wrapper/api/c-chat-room.cpp +++ b/src/c-wrapper/api/c-chat-room.cpp @@ -38,6 +38,7 @@ L_DECLARE_C_OBJECT_IMPL_WITH_XTORS( ChatRoom, _linphone_chat_room_constructor, _linphone_chat_room_destructor, LinphoneChatRoomCbs *cbs; + mutable LinphoneAddress *conferenceAddressCache; LinphoneAddress *peerAddressCache; ) @@ -48,6 +49,10 @@ static void _linphone_chat_room_constructor (LinphoneChatRoom *cr) { static void _linphone_chat_room_destructor (LinphoneChatRoom *cr) { linphone_chat_room_cbs_unref(cr->cbs); cr->cbs = nullptr; + if (cr->conferenceAddressCache) { + linphone_address_unref(cr->conferenceAddressCache); + cr->conferenceAddressCache = nullptr; + } if (cr->peerAddressCache) { linphone_address_unref(cr->peerAddressCache); cr->peerAddressCache = nullptr; @@ -220,9 +225,16 @@ bool_t linphone_chat_room_can_handle_participants (const LinphoneChatRoom *cr) { return L_GET_CPP_PTR_FROM_C_OBJECT(cr)->canHandleParticipants(); } -const char *linphone_chat_room_get_id (const LinphoneChatRoom *cr) { - string id = L_GET_CPP_PTR_FROM_C_OBJECT(cr)->getId(); - return id.empty() ? nullptr : id.c_str(); +const LinphoneAddress *linphone_chat_room_get_conference_address (const LinphoneChatRoom *cr) { + if (cr->conferenceAddressCache) { + linphone_address_unref(cr->conferenceAddressCache); + } + auto addr = L_GET_CPP_PTR_FROM_C_OBJECT(cr)->getConferenceAddress(); + if (addr) + cr->conferenceAddressCache = linphone_address_new(addr->asString().c_str()); + else + cr->conferenceAddressCache = nullptr; + return cr->conferenceAddressCache; } int linphone_chat_room_get_nb_participants (const LinphoneChatRoom *cr) { diff --git a/src/chat/basic-chat-room-p.h b/src/chat/basic-chat-room-p.h index 54cd99f16..54d3d9fe5 100644 --- a/src/chat/basic-chat-room-p.h +++ b/src/chat/basic-chat-room-p.h @@ -35,8 +35,6 @@ public: virtual ~BasicChatRoomPrivate () = default; private: - std::string dummyConferenceId; - L_DECLARE_PUBLIC(BasicChatRoom); }; diff --git a/src/chat/basic-chat-room.cpp b/src/chat/basic-chat-room.cpp index c7eec4b58..1c1fba3b7 100644 --- a/src/chat/basic-chat-room.cpp +++ b/src/chat/basic-chat-room.cpp @@ -48,10 +48,9 @@ bool BasicChatRoom::canHandleParticipants () const { return false; } -const string& BasicChatRoom::getId () const { - L_D(const BasicChatRoom); - lError() << "a BasicChatRoom does not have a conference id"; - return d->dummyConferenceId; +const Address *BasicChatRoom::getConferenceAddress () const { + lError() << "a BasicChatRoom does not have a conference address"; + return nullptr; } int BasicChatRoom::getNbParticipants () const { diff --git a/src/chat/basic-chat-room.h b/src/chat/basic-chat-room.h index c464d9921..3bc723387 100644 --- a/src/chat/basic-chat-room.h +++ b/src/chat/basic-chat-room.h @@ -36,7 +36,7 @@ public: std::shared_ptr addParticipant (const Address &addr, const CallSessionParams *params, bool hasMedia) override; void addParticipants (const std::list
&addresses, const CallSessionParams *params, bool hasMedia) override; bool canHandleParticipants () const override; - const std::string &getId () const override; + const Address *getConferenceAddress () const override; int getNbParticipants () const override; std::list> getParticipants () const override; void removeParticipant (const std::shared_ptr &participant) override; diff --git a/src/chat/client-group-chat-room.cpp b/src/chat/client-group-chat-room.cpp index bfd078e57..47ade072f 100644 --- a/src/chat/client-group-chat-room.cpp +++ b/src/chat/client-group-chat-room.cpp @@ -77,8 +77,8 @@ bool ClientGroupChatRoom::canHandleParticipants () const { return RemoteConference::canHandleParticipants(); } -const string& ClientGroupChatRoom::getId () const { - return RemoteConference::getId(); +const Address *ClientGroupChatRoom::getConferenceAddress () const { + return RemoteConference::getConferenceAddress(); } int ClientGroupChatRoom::getNbParticipants () const { @@ -101,6 +101,7 @@ void ClientGroupChatRoom::removeParticipants (const list void ClientGroupChatRoom::onConferenceCreated (const Address &addr) { L_D(ClientGroupChatRoom); + conferenceAddress = addr; d->setState(ChatRoom::State::Created); } @@ -156,8 +157,8 @@ void ClientGroupChatRoom::onParticipantSetAdmin (const Address &addr, bool isAdm void ClientGroupChatRoom::onCallSessionStateChanged (const CallSession &session, LinphoneCallState state, const string &message) { if (state == LinphoneCallConnected) { - // TODO: Get the conference ID instead of the remote address - onConferenceCreated(session.getRemoteAddress()); + Address addr(session.getRemoteContact()); + onConferenceCreated(addr); } } diff --git a/src/chat/client-group-chat-room.h b/src/chat/client-group-chat-room.h index eab0f5a28..c795991d5 100644 --- a/src/chat/client-group-chat-room.h +++ b/src/chat/client-group-chat-room.h @@ -44,7 +44,7 @@ public: std::shared_ptr addParticipant (const Address &addr, const CallSessionParams *params, bool hasMedia) override; void addParticipants (const std::list
&addresses, const CallSessionParams *params, bool hasMedia) override; bool canHandleParticipants () const override; - const std::string& getId () const override; + const Address *getConferenceAddress () const override; int getNbParticipants () const override; std::list> getParticipants () const override; void removeParticipant (const std::shared_ptr &participant) override; diff --git a/src/chat/real-time-text-chat-room-p.h b/src/chat/real-time-text-chat-room-p.h index 50ca2db1c..41a94f6af 100644 --- a/src/chat/real-time-text-chat-room-p.h +++ b/src/chat/real-time-text-chat-room-p.h @@ -46,8 +46,6 @@ public: LinphoneChatMessage *pendingMessage = nullptr; private: - std::string dummyConferenceId; - L_DECLARE_PUBLIC(RealTimeTextChatRoom); }; diff --git a/src/chat/real-time-text-chat-room.cpp b/src/chat/real-time-text-chat-room.cpp index 3898f8ec5..851ec9451 100644 --- a/src/chat/real-time-text-chat-room.cpp +++ b/src/chat/real-time-text-chat-room.cpp @@ -152,10 +152,9 @@ bool RealTimeTextChatRoom::canHandleParticipants () const { return false; } -const string& RealTimeTextChatRoom::getId () const { - L_D(const RealTimeTextChatRoom); - lError() << "a RealTimeTextChatRoom does not have a conference id"; - return d->dummyConferenceId; +const Address *RealTimeTextChatRoom::getConferenceAddress () const { + lError() << "a RealTimeTextChatRoom does not have a conference address"; + return nullptr; } int RealTimeTextChatRoom::getNbParticipants () const { diff --git a/src/chat/real-time-text-chat-room.h b/src/chat/real-time-text-chat-room.h index 1be0f549b..117f36dd5 100644 --- a/src/chat/real-time-text-chat-room.h +++ b/src/chat/real-time-text-chat-room.h @@ -46,7 +46,7 @@ public: std::shared_ptr addParticipant (const Address &addr, const CallSessionParams *params, bool hasMedia) override; void addParticipants (const std::list
&addresses, const CallSessionParams *params, bool hasMedia) override; bool canHandleParticipants () const override; - const std::string& getId () const override; + const Address *getConferenceAddress () const override; int getNbParticipants () const override; std::list> getParticipants () const override; void removeParticipant (const std::shared_ptr &participant) override; diff --git a/src/conference/conference-interface.h b/src/conference/conference-interface.h index a32040846..b4241d34c 100644 --- a/src/conference/conference-interface.h +++ b/src/conference/conference-interface.h @@ -37,7 +37,7 @@ public: virtual std::shared_ptr addParticipant (const Address &addr, const CallSessionParams *params, bool hasMedia) = 0; virtual void addParticipants (const std::list
&addresses, const CallSessionParams *params, bool hasMedia) = 0; virtual bool canHandleParticipants () const = 0; - virtual const std::string& getId () const = 0; + virtual const Address *getConferenceAddress () const = 0; virtual int getNbParticipants () const = 0; virtual std::list> getParticipants () const = 0; virtual void removeParticipant (const std::shared_ptr &participant) = 0; diff --git a/src/conference/conference.cpp b/src/conference/conference.cpp index b26f83845..8e4214989 100644 --- a/src/conference/conference.cpp +++ b/src/conference/conference.cpp @@ -54,8 +54,8 @@ bool Conference::canHandleParticipants () const { return true; } -const string& Conference::getId () const { - return id; +const Address *Conference::getConferenceAddress () const { + return &conferenceAddress; } int Conference::getNbParticipants () const { diff --git a/src/conference/conference.h b/src/conference/conference.h index d80c50298..955688757 100644 --- a/src/conference/conference.h +++ b/src/conference/conference.h @@ -50,7 +50,7 @@ public: std::shared_ptr addParticipant (const Address &addr, const CallSessionParams *params, bool hasMedia) override; void addParticipants (const std::list
&addresses, const CallSessionParams *params, bool hasMedia) override; bool canHandleParticipants () const override; - const std::string& getId () const override; + const Address *getConferenceAddress () const override; int getNbParticipants () const override; std::list> getParticipants () const override; void removeParticipant (const std::shared_ptr &participant) override; @@ -85,7 +85,7 @@ protected: std::shared_ptr activeParticipant; std::shared_ptr me; std::list> participants; - std::string id; + Address conferenceAddress; private: L_DISABLE_COPY(Conference);