mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-04-24 17:58:41 +00:00
Allow addition of participant to a server group chat room using a REFER.
This commit is contained in:
parent
8b5c4e0305
commit
4d17bb5f54
2 changed files with 43 additions and 24 deletions
|
|
@ -783,34 +783,51 @@ static void refer_received(SalOp *op, const SalAddress *refer_to){
|
||||||
}
|
}
|
||||||
static_cast<SalReferOp *>(op)->reply(SalReasonDeclined);
|
static_cast<SalReferOp *>(op)->reply(SalReasonDeclined);
|
||||||
}
|
}
|
||||||
} else if (addr.hasParam("admin")) {
|
} else {
|
||||||
LinphoneChatRoom *cr = L_GET_C_BACK_PTR(L_GET_CPP_PTR_FROM_C_OBJECT(lc)->findChatRoom(
|
if (linphone_core_conference_server_enabled(lc)) {
|
||||||
ChatRoomId(IdentityAddress(op->get_to()), IdentityAddress(op->get_to()))
|
shared_ptr<AbstractChatRoom> chatRoom = L_GET_CPP_PTR_FROM_C_OBJECT(lc)->findChatRoom(
|
||||||
));
|
ChatRoomId(IdentityAddress(op->get_to()), IdentityAddress(op->get_to()))
|
||||||
if (cr) {
|
);
|
||||||
Address fromAddr(op->get_from());
|
LinphoneChatRoom *cr = L_GET_C_BACK_PTR(chatRoom);
|
||||||
std::shared_ptr<Participant> participant = L_GET_CPP_PTR_FROM_C_OBJECT(cr)->findParticipant(fromAddr);
|
if (cr) {
|
||||||
if (!participant || !participant->isAdmin()) {
|
Address fromAddr(op->get_from());
|
||||||
static_cast<SalReferOp *>(op)->reply(SalReasonDeclined);
|
shared_ptr<Participant> participant = chatRoom->findParticipant(fromAddr);
|
||||||
return;
|
if (!participant || !participant->isAdmin()) {
|
||||||
}
|
static_cast<SalReferOp *>(op)->reply(SalReasonDeclined);
|
||||||
participant = L_GET_CPP_PTR_FROM_C_OBJECT(cr)->findParticipant(addr);
|
return;
|
||||||
if (participant) {
|
}
|
||||||
bool value = Utils::stob(addr.getParamValue("admin"));
|
if (addr.hasParam("admin")) {
|
||||||
L_GET_CPP_PTR_FROM_C_OBJECT(cr)->setParticipantAdminStatus(participant, value);
|
participant = chatRoom->findParticipant(addr);
|
||||||
|
if (participant) {
|
||||||
|
bool value = Utils::stob(addr.getParamValue("admin"));
|
||||||
|
chatRoom->setParticipantAdminStatus(participant, value);
|
||||||
|
static_cast<SalReferOp *>(op)->reply(SalReasonNone);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
participant = L_GET_PRIVATE(static_pointer_cast<ServerGroupChatRoom>(chatRoom))->findFilteredParticipant(addr);
|
||||||
|
if (!participant) {
|
||||||
|
list<IdentityAddress> identAddresses;
|
||||||
|
identAddresses.push_back(addr);
|
||||||
|
L_GET_PRIVATE(static_pointer_cast<ServerGroupChatRoom>(chatRoom))->checkCompatibleParticipants(
|
||||||
|
IdentityAddress(op->get_remote_contact()),
|
||||||
|
identAddresses
|
||||||
|
);
|
||||||
|
static_cast<SalReferOp *>(op)->reply(SalReasonNone);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
shared_ptr<AbstractChatRoom> chatRoom = L_GET_CPP_PTR_FROM_C_OBJECT(lc)->findChatRoom(
|
||||||
|
ChatRoomId(addr, IdentityAddress(op->get_to()))
|
||||||
|
);
|
||||||
|
if (!chatRoom)
|
||||||
|
chatRoom = L_GET_PRIVATE_FROM_C_OBJECT(lc)->createClientGroupChatRoom("", addr.asString(), Content(), false);
|
||||||
|
chatRoom->join();
|
||||||
static_cast<SalReferOp *>(op)->reply(SalReasonNone);
|
static_cast<SalReferOp *>(op)->reply(SalReasonNone);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
shared_ptr<AbstractChatRoom> chatRoom = L_GET_CPP_PTR_FROM_C_OBJECT(lc)->findChatRoom(
|
|
||||||
ChatRoomId(addr, IdentityAddress(op->get_to()))
|
|
||||||
);
|
|
||||||
if (!chatRoom)
|
|
||||||
chatRoom = L_GET_PRIVATE_FROM_C_OBJECT(lc)->createClientGroupChatRoom("", addr.asString(), Content(), false);
|
|
||||||
chatRoom->join();
|
|
||||||
static_cast<SalReferOp *>(op)->reply(SalReasonNone);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,8 @@ void ServerGroupChatRoomPrivate::addParticipantDevice (const IdentityAddress &pa
|
||||||
|
|
||||||
void ServerGroupChatRoomPrivate::addCompatibleParticipants (const IdentityAddress &deviceAddr, const list<IdentityAddress> &participantCompatible) {}
|
void ServerGroupChatRoomPrivate::addCompatibleParticipants (const IdentityAddress &deviceAddr, const list<IdentityAddress> &participantCompatible) {}
|
||||||
|
|
||||||
|
void ServerGroupChatRoomPrivate::checkCompatibleParticipants (const IdentityAddress &deviceAddr, const list<IdentityAddress> &addressesToCheck) {}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
LinphoneReason ServerGroupChatRoomPrivate::onSipMessageReceived (SalOp *, const SalMessage *) {
|
LinphoneReason ServerGroupChatRoomPrivate::onSipMessageReceived (SalOp *, const SalMessage *) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue