From 85691e11f41684ab509d612ab4bda8f7e6060bb5 Mon Sep 17 00:00:00 2001 From: Ergyun Syuleyman Date: Mon, 18 May 2020 20:00:19 +0300 Subject: [PATCH 01/11] -refresh access token if it is expired and try to call some calling service requests --- .gitignore | 2 + src/core/call/CallManagerImpl.cpp | 506 ++++++++++++++++++++++++++++-- 2 files changed, 477 insertions(+), 31 deletions(-) diff --git a/.gitignore b/.gitignore index b80c2d4f..80fc5e11 100644 --- a/.gitignore +++ b/.gitignore @@ -121,6 +121,8 @@ freeline.py freeline/ freeline_project_description.json +src/sdk/android/api/*_wrap.cxx +src/sdk/android/api/*_wrap.h ############### # PROJECT diff --git a/src/core/call/CallManagerImpl.cpp b/src/core/call/CallManagerImpl.cpp index bf5913ab..4d876771 100644 --- a/src/core/call/CallManagerImpl.cpp +++ b/src/core/call/CallManagerImpl.cpp @@ -82,8 +82,10 @@ namespace nynja { const std::string accessToken = _tokenProvider->accessToken(); _grpService->createConference2(externalId, chatRoomId, subject, accessToken, - [this, accessToken, callback, requestId, subject] (ErrorCode err, - const ::nynjacoin::nccs::cfp::CreateConferenceResponse& response) + [this, accessToken, callback, + requestId, externalId, chatRoomId, + subject] (ErrorCode err, + const ::nynjacoin::nccs::cfp::CreateConferenceResponse& response) { // Thread: [GRPDispatch] // create a new call object @@ -101,7 +103,30 @@ namespace nynja { dynamic_cast(call.get())->setParticipantsCountLimit(response.members_count_limit()); this->_addCall(confId, call); } - + else if (err == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, + err, + requestId, + confId, + externalId, + chatRoomId, + subject, + callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + createConference(requestId, + externalId, + chatRoomId, + subject, + callback); + } else { + callback((int)err, requestId, confId); + } + }); + return; + } callback((int)err, requestId, confId); }); } @@ -120,8 +145,10 @@ namespace nynja { const std::string accessToken = _tokenProvider->accessToken(); _grpService->createConferenceWithDeletableRoom2(subject, disabledAutoDelete, deleteDelay, replaceRef, accessToken, - [this, accessToken, callback, requestId, subject] (ErrorCode err, - const ::nynjacoin::nccs::cfp::CreateConferenceResponse& response) + [this, accessToken, callback, requestId, + disabledAutoDelete, deleteDelay, + replaceRef, subject] (ErrorCode err, + const ::nynjacoin::nccs::cfp::CreateConferenceResponse& response) { // Thread: [GRPDispatch] // create a new call object @@ -139,7 +166,32 @@ namespace nynja { dynamic_cast(call.get())->setParticipantsCountLimit(response.members_count_limit()); this->_addCall(confId, call); } - + else if (err == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, + err, + requestId, + confId, + disabledAutoDelete, + deleteDelay, + replaceRef, + subject, + callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + createConferenceWithDeletableRoom(requestId, + subject, + disabledAutoDelete, + deleteDelay, + replaceRef, + callback); + } else { + callback((int)err, requestId, confId); + } + }); + return; + } callback((int)err, requestId, confId); }); } @@ -159,7 +211,8 @@ namespace nynja { name, me, _tokenProvider->accessToken(), - [this, address, name, me, callback] + [this, requestId, conferenceId, + address, name, me, callback] (int result, std::string req, std::string confId, @@ -167,6 +220,22 @@ namespace nynja { std::string a3) { // Thread: [GRPDispatch] + if (result == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, result, req, confId, memId, + requestId, conferenceId, + address, name, me, callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + addConferenceMember(requestId, conferenceId, + address, name, me, callback); + } else { + callback(result, req, confId, memId); + } + }); + return; + } callback(result, req, confId, memId); }); } @@ -182,19 +251,41 @@ namespace nynja { _grpService->startConference(requestId, conferenceId, _tokenProvider->accessToken(), - [this, callback](int err, + [this, requestId, + conferenceId, callback](int err, std::string req, std::string confId, std::string a2, std::string a3) { // Thread: [GRPDispatch] - if (err == 0) { + if (err == ErrorCode::OK) { CallPtr ptr = _ensureConferenceWithId(confId); if (ptr) { dynamic_cast(ptr.get())->setStartTime(std::time(NULL)); } } + else if (err == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, + err, + req, + confId, + requestId, + conferenceId, + callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + startConference(requestId, + conferenceId, + callback); + } else { + callback((int)err, req, confId); + } + }); + return; + } callback(err, req, confId); }); @@ -209,7 +300,8 @@ namespace nynja { _grpService->startConference2(conferenceId, _tokenProvider->accessToken(), - [this, callback, requestId, conferenceId](ErrorCode err, + [this, callback, requestId, + conferenceId, replaceRef](ErrorCode err, const ::nynjacoin::nccs::def::Void& response) { // Thread: [GRPDispatch] @@ -219,7 +311,27 @@ namespace nynja { dynamic_cast(ptr.get())->setStartTime(std::time(NULL)); } } - + else if (err == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, + err, + requestId, + conferenceId, + replaceRef, + callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + startEscalatedConference(requestId, + conferenceId, + replaceRef, + callback); + } else { + callback((int)err, requestId, conferenceId); + } + }); + return; + } callback(err, requestId, conferenceId); }); } @@ -244,7 +356,12 @@ namespace nynja { memberId, _deviceId, _tokenProvider->accessToken(), - [this, callback, memberId](int result, + [this, + requestId, + conferenceId, + memberId, + deviceId, + callback](int result, std::string req, std::string confId, std::string participantId, @@ -254,14 +371,39 @@ namespace nynja { // TODO: Create Call Obj and store it CallPtr ptr = _ensureConferenceWithId(confId); if (ptr) { - if (result == 0) { + if (result == ErrorCode::OK) { dynamic_cast(ptr.get())->setMyParticipantId(participantId); dynamic_cast(ptr.get())->setState(nynja::ICallStateReadyToStart); } + else if (result == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, + ptr, + result, + participantId, + requestId, + conferenceId, + memberId, + deviceId, + callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + joinConference(requestId, + conferenceId, + memberId, + deviceId, + callback); + } else { + dynamic_cast(ptr.get())->setState(nynja::ICallStateFailed); + callback(result, requestId, conferenceId, participantId); + } + }); + return; + } else dynamic_cast(ptr.get())->setState(nynja::ICallStateFailed); } - callback(result, req, confId, participantId); }); } @@ -278,13 +420,30 @@ namespace nynja { conferenceId, memberId, _tokenProvider->accessToken(), - [this, callback](int result, + [this, requestId, conferenceId, + memberId, callback](int result, std::string req, std::string confId, std::string a2, std::string a3) { // Thread: [GRPDispatch] + if (result == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, result, req, confId, + requestId, conferenceId, + memberId, callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + rejectConference(requestId, conferenceId, + memberId, callback); + } else { + callback(result, req, confId); + } + }); + return; + } callback(result, req, confId); }); } @@ -299,13 +458,28 @@ namespace nynja { _grpService->getMembers(requestId, conferenceId, _tokenProvider->accessToken(), - [this, callback](int result, + [this, requestId, conferenceId, callback](int result, std::string req, std::string confId, std::string a2, std::string a3) { // Thread: [GRPDispatch] + if (result == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, result, req, confId, + requestId, conferenceId, + callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + getMembers(requestId, conferenceId, callback); + } else { + callback(result, req, confId); + } + }); + return; + } callback(result, req, confId); }); } @@ -323,7 +497,11 @@ namespace nynja { conferenceId, memberId, _tokenProvider->accessToken(), - [this, callback](int result, + [this, + requestId, + conferenceId, + memberId, + callback](int result, std::string req, std::string confId, std::string memId, @@ -332,13 +510,32 @@ namespace nynja { // Thread: [GRPDispatch] callback(result, req, confId, memId); - if (result == 0) { + if (result == ErrorCode::OK) { CallPtr callPtr = _findCallById(confId); if (callPtr.get() != NULL) { dynamic_cast(callPtr.get())->removeMember(memId); } } + else if (result == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, + result, + requestId, + conferenceId, + memberId, + callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + removeConferenceMember(requestId, + conferenceId, + memberId, + callback); + } + }); + return; + } }); } @@ -352,13 +549,28 @@ namespace nynja { _grpService->endConference(requestId, conferenceId, _tokenProvider->accessToken(), - [this, callback](int err, + [this, requestId, conferenceId, callback](int err, std::string req, std::string confId, std::string a2, std::string a3) { // Thread: [GRPDispatch] + if (err == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, err, req, confId, + requestId, conferenceId, + callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + endConference(requestId, conferenceId, callback); + } else { + callback(err, req, confId); + } + }); + return; + } callback(err, req, confId); }); } @@ -374,13 +586,28 @@ namespace nynja { conferenceId, subject, _tokenProvider->accessToken(), - [this, callback](int err, + [this, requestId, conferenceId, subject, callback](int err, std::string req, std::string confId, std::string a2, std::string a3) { // Thread: [GRPDispatch] + if (err == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, err, req, confId, + requestId, conferenceId, + subject, callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + updateConferenceInfo(requestId, conferenceId, subject, callback); + } else { + callback(err, req, confId); + } + }); + return; + } callback(err, req, confId); }); } @@ -677,6 +904,38 @@ namespace nynja { call->start(); dynamic_cast(call.get())->setState(nynja::ICallStateConnecting); + } + else if (err == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, + err, + requestId, + callId, + callback, + toUser, + externalInfo, + video, + externalId](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + createCall(requestId, + toUser, + externalId, + externalInfo, + video, + callback); + } else { + CallPtr rawCall = _findCallById(externalId); + if (rawCall != nullptr) { + // Notify that the early call object is about to be removed and associated with the new one + dynamic_cast(rawCall.get())->setState(nynja::ICallStateFailed); + _removeCallById(rawCall->getId()); + } + callback((int)err, requestId, callId); + } + }); + return; } else { CallPtr rawCall = _findCallById(externalId); if (rawCall != nullptr) { @@ -732,12 +991,27 @@ namespace nynja { _grpService->getConferenceId(requestId, linkId, _tokenProvider->accessToken(), - [this, callback](ErrorCode err, + [this, requestId, linkId, callback](ErrorCode err, std::string req, std::string confId, std::string a2, std::string a3) { + if (err == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, err, req, confId, + requestId, linkId, + callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + conferenceIdByLinkId(requestId, linkId, callback); + } else { + callback(err, req, confId); + } + }); + return; + } callback(err, req, confId); }); } @@ -751,13 +1025,14 @@ namespace nynja { _grpService->getConferenceId(requestId, linkId, accessToken, - [this, accessToken, callback, displayName](ErrorCode err, + [this, requestId, linkId, + accessToken, callback, displayName](ErrorCode err, std::string req, std::string linkId, std::string confId, std::string a3) { - if (0 == err) { + if (ErrorCode::OK == err) { _grpService->bindConferenceByLink(req, confId, displayName, @@ -799,6 +1074,28 @@ namespace nynja { callback(err, req, confId); } }); + } + else if (err == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, + err, + requestId, + confId, + linkId, + displayName, + callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + joinConferenceByLinkId(requestId, + linkId, + displayName, + callback); + } else { + callback(err, requestId, confId); + } + }); + return; } else { callback(err, req, confId); } @@ -915,7 +1212,13 @@ namespace nynja { disable_auto_delete, auto_delete_after_seconds, replaceRef, members, accessToken, - [this, accessToken, callback, requestId, chatRoomId, subject] + [this, externalId, + externalInfo, + disable_auto_delete, + auto_delete_after_seconds, + replaceRef, + members, + accessToken, callback, requestId, chatRoomId, subject] (ErrorCode err, const ::nynjacoin::nccs::cfp::CreateConferenceResponse& response) { @@ -943,7 +1246,40 @@ namespace nynja { this->_addCall(confId, call); } - + else if (err == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, + err, + confId, + requestId, + externalId, + externalInfo, + subject, + chatRoomId, + disable_auto_delete, + auto_delete_after_seconds, + replaceRef, + members, + callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + createConferenceEx(requestId, + externalId, + externalInfo, + subject, + chatRoomId, + disable_auto_delete, + auto_delete_after_seconds, + replaceRef, + members, + callback); + } else { + callback(err, requestId, chatRoomId, confId); + } + }); + return; + } callback(err, requestId, chatRoomId, confId); }); } @@ -973,7 +1309,13 @@ namespace nynja { disable_auto_delete, auto_delete_after_seconds, replaceRef, members, accessToken, - [this, accessToken, callback, requestId, chatRoomId, subject, isVideo] + [this, externalId, + externalInfo, accessToken, + disable_auto_delete, + auto_delete_after_seconds, + replaceRef, members, + callback, requestId, + chatRoomId, subject, isVideo] (ErrorCode err, const ::nynjacoin::nccs::cfp::StartConferenceResponse& response) { @@ -1011,7 +1353,43 @@ namespace nynja { dynamic_cast(call.get())->setEmitsVideo(isVideo); } } - + else if (err == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, + err, + confId, + requestId, + externalId, + externalInfo, + subject, + chatRoomId, + disable_auto_delete, + auto_delete_after_seconds, + replaceRef, + members, + isVideo, + callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + createAndStartConferenceEx(requestId, + externalId, + externalInfo, + subject, + chatRoomId, + disable_auto_delete, + auto_delete_after_seconds, + replaceRef, + members, + isVideo, + callback); + } else { + callback(err, requestId, chatRoomId, confId); + } + }); + return; + } + callback(err, requestId, chatRoomId, confId); }); } @@ -1027,7 +1405,7 @@ namespace nynja { _grpService->getConferenceRoomInfo(linkId, _tokenProvider->accessToken(), - [this, callback, requestId] + [this, linkId, callback, requestId] (ErrorCode err, const ::nynjacoin::nccs::cfp::GetRoomInfoResponse& response) { @@ -1038,7 +1416,28 @@ namespace nynja { roomId = response.room_id(); roomName = response.room_name(); } - + else if (err == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, + err, + requestId, + roomId, + roomName, + linkId, + callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + getConferenceRoomInfo(requestId, + linkId, + callback); + } else { + callback(err, requestId, roomId, roomName); + } + }); + return; + } + callback(err, requestId, roomId, roomName); }); } @@ -1062,7 +1461,27 @@ namespace nynja { if (err == ErrorCode::OK) { limit = response.max_members(); } - + else if (err == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, + err, + requestId, + roomId, + limit, + callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + getConferenceRoomLimits(requestId, + roomId, + callback); + } else { + callback(err, requestId, roomId, limit); + } + }); + return; + } + callback(err, requestId, roomId, limit); }); } @@ -1083,7 +1502,7 @@ namespace nynja { displayName, subject, _tokenProvider->accessToken(), - [this, callback, requestId, roomId] + [this, callback, requestId, roomId, displayName, subject] (ErrorCode err, const ::nynjacoin::nccs::cfp::EnterRoomResponse& response) { @@ -1100,6 +1519,31 @@ namespace nynja { } else { callback(err, requestId, roomId, confId, memberId); } + } + else if (err == ErrorCode::UNAUTHENTICATED) { + // need to refresh the token + _tokenProvider->refreshAccessToken( + [this, + err, + requestId, + confId, + memberId, + roomId, + displayName, + subject, + callback](bool fOk) { + if (fOk) { + // TODO: resend the failed request !!! + enterConferenceRoom(requestId, + roomId, + displayName, + subject, + callback); + } else { + callback(err, requestId, roomId, confId, memberId); + } + }); + return; } else { callback(err, requestId, roomId, confId, memberId); } -- GitLab From 12303430b40a8709cc302cadf47eb3aaca310f25 Mon Sep 17 00:00:00 2001 From: Angel Terziev Date: Wed, 27 May 2020 11:07:47 +0300 Subject: [PATCH 02/11] next step call pickup --- src/core/call/CallImpl.h | 2 + src/core/call/CallManagerImpl.cpp | 40 +++++++++++++++ src/core/call/CallManagerImpl.h | 4 ++ src/core/call/TwoPartyCall.cpp | 6 +++ src/core/call/TwoPartyCall.h | 3 +- src/core/interface/ICall.h | 1 + src/core/interface/ICallManager.h | 4 ++ src/core/interface/ICallManagerCallback.h | 1 + src/sdk/ios/api/CallManager.h | 4 ++ src/sdk/ios/api/CallManager.mm | 57 ++++++++++++++++++++++ src/sdk/ios/api/NYNCallManagerDelegate.h | 3 +- src/sdk/ios/internal/CallManager+Private.h | 2 + 12 files changed, 125 insertions(+), 2 deletions(-) diff --git a/src/core/call/CallImpl.h b/src/core/call/CallImpl.h index fa9e8013..26cdc939 100644 --- a/src/core/call/CallImpl.h +++ b/src/core/call/CallImpl.h @@ -132,6 +132,8 @@ namespace nynja { CallParticipantPtr getParticipantByTrackId(const std::string& trackId) override { return nullptr; }; + + bool pickup() override {return false;}; // Public helpers void setState(ICallState newState); diff --git a/src/core/call/CallManagerImpl.cpp b/src/core/call/CallManagerImpl.cpp index bf5913ab..5a687c1e 100644 --- a/src/core/call/CallManagerImpl.cpp +++ b/src/core/call/CallManagerImpl.cpp @@ -1146,6 +1146,32 @@ namespace nynja { }); } + CallPtr CallManagerImpl::pickupCall(const std::string& requestId, + const std::string& callId, + const CreateCallCallback& callback) + { + CallPtr call = _findCallById(callId); + + if (nullptr == call) { + callback(-1, requestId, callId); + return nullptr; + } + + if (call->isConference()) { + // only for p2p calls + callback(-1, requestId, callId); + return nullptr; + } + + if (!call->pickup()) { + callback(-1, requestId, callId); + return nullptr; + } + + callback(0, requestId, callId); + return call; + } + //MARK: IOwnershipProtocol void CallManagerImpl::purge(ICall* call) { @@ -1546,6 +1572,8 @@ namespace nynja { std::vector acceptedCalls; std::vector acceptedElsewhereCalls; std::vector completedCalls; + std::vector elsewhereCallsFinished; + if (updateType == GRPCallUpdateFull) { _deleteTwoPartyCallsNotIncludedIn(updated);} bool fHasActiveOrRingingCall = hasActiveOrRingingCall();//check before _ensureTwoPartyCallWithId @@ -1611,6 +1639,11 @@ namespace nynja { else if (oldInvState == TwoPartyCallActive && newInvState == TwoPartyCallCompleted) { completedCalls.push_back(callPtr); dynamic_cast(callPtr.get())->setEndReason(ICallEndReasonCompleted); + + if (0 != dynamic_cast(callPtr.get())->acceptedOnDevice().compare(_deviceId)) { + // p2p call ended while runnign on another device + elsewhereCallsFinished.push_back(callPtr); + } } } } @@ -1697,6 +1730,13 @@ namespace nynja { } } + for (auto c: elsewhereCallsFinished) { + if (_callback != NULL) { + RTC_LOG(LS_INFO) << " report finished elsewhere call: " << c->getId(); + _callback->elsewhereCallFinished(c); + } + } + // Report invitation state changed for (auto c: stateChangedCalls) { if (_callback != NULL) { diff --git a/src/core/call/CallManagerImpl.h b/src/core/call/CallManagerImpl.h index 65a50b47..0615252f 100644 --- a/src/core/call/CallManagerImpl.h +++ b/src/core/call/CallManagerImpl.h @@ -199,6 +199,10 @@ namespace nynja { bool isVideo, const EscalateConferenceCallback& callback) override; + CallPtr pickupCall(const std::string& requestId, + const std::string& callId, + const CreateCallCallback& callback) override; + protected: // MARK: - Protected diff --git a/src/core/call/TwoPartyCall.cpp b/src/core/call/TwoPartyCall.cpp index 0fde6d8b..912a4035 100644 --- a/src/core/call/TwoPartyCall.cpp +++ b/src/core/call/TwoPartyCall.cpp @@ -314,6 +314,12 @@ namespace nynja { return kDefaultMaxCallDuration; } + bool TwoPartyCall::pickup() { + + CallImpl::start(); + return true; + } + void TwoPartyCall::markAsDeleted() { CallImpl::markAsDeleted(); std::lock_guard lock(_mutex_call); diff --git a/src/core/call/TwoPartyCall.h b/src/core/call/TwoPartyCall.h index 4e8dae16..6f38de8d 100644 --- a/src/core/call/TwoPartyCall.h +++ b/src/core/call/TwoPartyCall.h @@ -121,7 +121,8 @@ namespace nynja { void setInitialOffer(const nynjacoin::nccs::def::Offer& initialOffer); long getMaxCallDuration() const override; - + bool pickup() override; + protected: void markAsDeleted() override; diff --git a/src/core/interface/ICall.h b/src/core/interface/ICall.h index 6e048c8a..25d988d3 100644 --- a/src/core/interface/ICall.h +++ b/src/core/interface/ICall.h @@ -133,6 +133,7 @@ namespace nynja { virtual CallParticipantPtr getParticipantById(const std::string& participantId) = 0; virtual CallParticipantPtr getParticipantByTrackId(const std::string& trackId) = 0; virtual void enableVideoForTrack(const std::string& participantId, bool enable) = 0; + virtual bool pickup() = 0; }; typedef std::shared_ptr CallPtr; diff --git a/src/core/interface/ICallManager.h b/src/core/interface/ICallManager.h index 9b3fc9bc..a55672c3 100644 --- a/src/core/interface/ICallManager.h +++ b/src/core/interface/ICallManager.h @@ -260,6 +260,10 @@ namespace nynja { const AddConfMemberRequestList& members, bool isVideo, const EscalateConferenceCallback& callback) = 0; + + virtual CallPtr pickupCall(const std::string& requestId, + const std::string& callId, + const CreateCallCallback& callback) = 0; }; diff --git a/src/core/interface/ICallManagerCallback.h b/src/core/interface/ICallManagerCallback.h index d5ac1558..777a6da8 100644 --- a/src/core/interface/ICallManagerCallback.h +++ b/src/core/interface/ICallManagerCallback.h @@ -33,6 +33,7 @@ namespace nynja{ virtual void signalCallTimedOut(const std::shared_ptr& call) = 0; virtual void resetStateForAllConferenceCalls() = 0; virtual void resetStateForAllTwoPartyCallsCalls() = 0; + virtual void elsewhereCallFinished(const std::shared_ptr& call) = 0; }; } #endif /* ICallManagerCallback_h */ diff --git a/src/sdk/ios/api/CallManager.h b/src/sdk/ios/api/CallManager.h index e1677489..ac091c5f 100644 --- a/src/sdk/ios/api/CallManager.h +++ b/src/sdk/ios/api/CallManager.h @@ -15,6 +15,7 @@ FOUNDATION_EXPORT NSString *const NYNConferenceErrorDomain; typedef void (^NYNStartCallBlock)(NYNCall* _Nullable, NSError* _Nullable); +typedef void (^NYNPickupCallBlock)(NYNCall* _Nullable, NSError* _Nullable); typedef NS_ENUM(NSUInteger, DialOption) { DIALOUT = 0, @@ -153,4 +154,7 @@ typedef NS_ENUM(NSUInteger, DialOption) { withAutoDeleteTimeout: (NSUInteger) autoDeleteTimeout andMembersToAdd: (NSArray* _Nonnull) membersToAdd; +- (NYNCall * _Nullable) pickUpCallWithId: (NSString* _Nonnull) callId + withCompletion: (NYNPickupCallBlock _Nonnull ) completion; + @end diff --git a/src/sdk/ios/api/CallManager.mm b/src/sdk/ios/api/CallManager.mm index 46cd3421..9b72d00c 100644 --- a/src/sdk/ios/api/CallManager.mm +++ b/src/sdk/ios/api/CallManager.mm @@ -735,6 +735,18 @@ public: }); } + void elsewhereCallFinished(const std::shared_ptr& call) override { + dispatch_async(dispatch_get_main_queue(), ^{ + std::cout << __FUNCTION__ << std::endl; + if (_callManager.delegate != nil) { + NYNCall* ncall = [_callManager createCallWithCallPtr: call]; + if (nil != ncall) { + [_callManager.delegate elsewhereCallFinished: ncall]; + } + } + }); + } + private: CallManager* _callManager; }; @@ -771,6 +783,7 @@ public: @property (nonatomic, strong) NYNNotificationManager* notifManager; @property (atomic, strong) NSMutableDictionary* _Nullable requests; @property (atomic, strong) NSMutableDictionary* _Nullable answerActions; +@property (atomic, strong) NSMutableDictionary* _Nullable pickups; @end @@ -791,6 +804,7 @@ public: self.requests = [[NSMutableDictionary alloc] init]; self.answerActions = [[NSMutableDictionary alloc] init]; + self.pickups = [[NSMutableDictionary alloc] init]; self.remoteRenderers = [[NSMutableDictionary alloc] init]; //self.localRenderer = [[RTCCameraPreviewView alloc] initWithFrame: CGRectZero]; @@ -1379,6 +1393,49 @@ public: fcb); } + +- (NYNCall * _Nullable) pickUpCallWithId: (NSString* _Nonnull) callId + withCompletion: (NYNPickupCallBlock _Nonnull ) completion +{ + NSString* requestId = [[[NSUUID alloc] init] UUIDString]; + [self.pickups setObject:completion forKey:requestId]; + + nynja::CallPtr newCall = + _callManagerPtr->pickupCall(requestId.UTF8String, + callId.UTF8String, + [self](int err, + const std::string& req, + const std::string& cId) + { + NSString* r = @(req.c_str()); + + NYNStartCallBlock pickupCallBlock = [self.pickups objectForKey: r]; + if (nil != pickupCallBlock) { + NYNCall* ncall = nil; + NSError* error = nil; + if (0 == err) { + ncall = [self createCallWithId: cId]; + if (nil != ncall) { + NSString* otherName = ncall.isOutgoing ? ncall.callee : ncall. caller; + [self.callProvider reportOutgoingCall:ncall calleeName:otherName withVideo: ncall.recvVideo]; + } + } else { + error = [NSError errorWithDomain: [[self class] description] + code: err + userInfo: nil]; + } + + [self.pickups removeObjectForKey: r]; + + dispatch_async(dispatch_get_main_queue(), ^{ + pickupCallBlock(ncall, error); + }); + } + }); + + return [self createCallWithId: newCall->getId()]; +} + //MARK: - RTCEAGLVideoViewDelegate - (void)videoView:(RTCEAGLVideoView *)videoView didChangeVideoSize:(CGSize)size { diff --git a/src/sdk/ios/api/NYNCallManagerDelegate.h b/src/sdk/ios/api/NYNCallManagerDelegate.h index d9c9d75b..1ac55da4 100644 --- a/src/sdk/ios/api/NYNCallManagerDelegate.h +++ b/src/sdk/ios/api/NYNCallManagerDelegate.h @@ -127,5 +127,6 @@ - (void) resetStateForAllConferenceCalls; - (void) resetStateForAllTwoPartyCalls; - (void) willReportIncomingCallWithId: (NSString* _Nonnull) callId; - +- (void) elsewhereCallFinished: (NYNCall* _Nonnull) call; + @end diff --git a/src/sdk/ios/internal/CallManager+Private.h b/src/sdk/ios/internal/CallManager+Private.h index dcbca7b0..a2755834 100644 --- a/src/sdk/ios/internal/CallManager+Private.h +++ b/src/sdk/ios/internal/CallManager+Private.h @@ -51,6 +51,8 @@ NS_ASSUME_NONNULL_BEGIN - (BOOL) hasCallWithReplaceRef: (NSString*) replaceRef; +- (NYNCall*) createCallWithCallPtr: (const nynja::CallPtr&) ptr; + @end @interface CallManager (NYNCallRouter) -- GitLab From 61d9c71363f193228e959a12951cfe082e470ffc Mon Sep 17 00:00:00 2001 From: Angel Terziev Date: Wed, 27 May 2020 15:46:53 +0300 Subject: [PATCH 03/11] Added Conductor obejct in all ConductorObserver callback methods Introduced a second conductor to hold up call for pick up --- src/core/call/CallImpl.cpp | 202 ++++++++++-------- src/core/call/CallImpl.h | 65 +++--- src/core/call/CallManagerImpl.cpp | 1 + src/core/call/ConfCall.cpp | 86 ++++---- src/core/call/ConfCall.h | 7 +- src/core/call/TwoPartyCall.cpp | 6 +- src/core/call/TwoPartyCall.h | 4 +- src/core/conductor/ConductorObserver.h | 58 ++--- .../webrtc/PeerConnectionConductor.cpp | 110 +++++----- 9 files changed, 285 insertions(+), 254 deletions(-) diff --git a/src/core/call/CallImpl.cpp b/src/core/call/CallImpl.cpp index 3d0da8b1..84445447 100644 --- a/src/core/call/CallImpl.cpp +++ b/src/core/call/CallImpl.cpp @@ -378,6 +378,15 @@ namespace nynja { _callId = value; } + void CallImpl::acceptedElsewhere() + { + if (nullptr != _conductor) { + RTC_LOG(LS_INFO) << __FUNCTION__ << " will tear down conductor"; + _conductor->tearDown(); + _conductor.reset(); + } + } + void CallImpl::setMyParticipantId(const std::string& myId) { // Thread: [GRPDispatch] @@ -433,7 +442,7 @@ namespace nynja { // Thread: [MediaControl] if (isConference()) { - createConductor(getId(), false); + createConductor(getId()); } } @@ -467,16 +476,26 @@ namespace nynja { { // Thread: [MediaControl] std::lock_guard lock(_mutex_call); - if (_conductor != nullptr) + if (_conductor != nullptr && (0 == _conductor->getConnId().compare(connId))) { + RTC_LOG(LS_INFO) << __FUNCTION__ << " for conductor connId: " << connId; _conductor->setRemoteOffer(content, priority, sequence, ssrc_mapping, track_info, requestId, mediaRequests); + } else if (_pickup_conductor != nullptr && (0 == _pickup_conductor->getConnId().compare(connId))) { + RTC_LOG(LS_INFO) << __FUNCTION__ << " for pickup conductor connId: " << connId; + _pickup_conductor->setRemoteOffer(content, priority, sequence, ssrc_mapping, track_info, requestId, mediaRequests); + } } void CallImpl::answerReceived(const std::string &connId, uint32_t seq, const std::string& content, const TrackInfoVec& track_info) { // Thread: [MediaControl] std::lock_guard lock(_mutex_call); - if (_conductor != nullptr) + if (_conductor != nullptr && (0 == _conductor->getConnId().compare(connId))) { + RTC_LOG(LS_INFO) << __FUNCTION__ << " for conductor connId: " << connId; _conductor->setRemoteAnswer(content, track_info); + } else if (_pickup_conductor != nullptr && (0 == _pickup_conductor->getConnId().compare(connId))) { + RTC_LOG(LS_INFO) << __FUNCTION__ << " for pickup conductor connId: " << connId; + _pickup_conductor->setRemoteAnswer(content, track_info); + } } void CallImpl::iceCandidateReceived(const std::string &connId, uint32_t seq, @@ -485,8 +504,13 @@ namespace nynja { RTC_LOG(LS_INFO) << __FUNCTION__; std::lock_guard lock(_mutex_call); - if (_conductor != nullptr) + if (_conductor != nullptr && (0 == _conductor->getConnId().compare(connId))) { + RTC_LOG(LS_INFO) << __FUNCTION__ << " for conductor connId: " << connId; _conductor->addIceCandidate(sdp_mid, sdp_mline_index, content); + } else if (_pickup_conductor != nullptr && (0 == _pickup_conductor->getConnId().compare(connId))) { + RTC_LOG(LS_INFO) << __FUNCTION__ << " for pickup conductor connId: " << connId; + _pickup_conductor->addIceCandidate(sdp_mid, sdp_mline_index, content); + } } void CallImpl::terminated(const std::string &connId, ::nynjacoin::nccs::csp::TerminateReason reason) { @@ -496,10 +520,22 @@ namespace nynja { void CallImpl::connectionOpened(const std::string &connId, bool sendOffer) { RTC_LOG(LS_INFO) << __FUNCTION__ << " connId: " << connId << " sendOffer: " << sendOffer; + // If this is a p2p call and we already have a valid conductor, + // this could be a second connection for the call pickup case + + if (_conductor != nullptr && (_conductor->getConnId().compare(connId) != 0)) { + // second conenction request + createPickupConductor(connId); + if (sendOffer && _pickup_conductor != nullptr) { + _pickup_conductor->generateOffer(true); + } + return; + } + _mediaChannelReady = true; // if sendOffer is true, means the party is initiator - createConductor(connId, sendOffer); + createConductor(connId); _conductor->updateConnectionId(connId); @@ -582,65 +618,21 @@ namespace nynja { } //MARK:ConductorObserver - bool CallImpl::setLocalDescription(webrtc::SessionDescriptionInterface* desc) { - // Thread: [PCSignal] - if (nullptr != _conductor) { - return _conductor->setLocalDescription(desc); - } - - RTC_LOG(LS_INFO) << __FUNCTION__ << " conductor has gone"; - return false; - } - - void CallImpl::didCreateOffer(const std::string& sdp, uint32_t prio, uint32_t seq) { - RTC_LOG(LS_INFO) << __FUNCTION__; - - // Thread: [PCSignal] - if (nullptr != _conductor) { - _conductor->didCreateOffer(sdp, prio, seq); - } - } - - void CallImpl::didCreateAnswer(webrtc::SessionDescriptionInterface* desc, - const std::map& options) { - RTC_LOG(LS_INFO) << __FUNCTION__; - // Thread: [PCSignal] - if (nullptr != _conductor) { - _conductor->didCreateAnswer(desc, options); - } - } - - void CallImpl::didSetLocalOffer(uint32_t prio, uint32_t seq) - { - // Thread: [PCSignal] - if (nullptr != _conductor) { - _conductor->didSetLocalOffer(prio, seq); - } - } - - void CallImpl::didSetLocalAnswer() - { - // Thread: [PCSignal] - if (nullptr != _conductor) { - _conductor->didSetLocalAnswer(); - } - } - - void CallImpl::onSdpOffer(const std::string& sdp, uint32_t prio, uint32_t seq, const std::string& connId, const TrackInfoVec& track_info) { + void CallImpl::onSdpOffer(Conductor* conductor, const std::string& sdp, uint32_t prio, uint32_t seq, const std::string& connId, const TrackInfoVec& track_info) { // Thread: [PCSignal] RTC_LOG(LS_INFO) << __FUNCTION__; if (_client != nullptr) _client->sendSdpOffer(sdp, prio, seq, connId, track_info); } - void CallImpl::onSdpAnswer(const std::string& sdp, const std::string& connId, const TrackInfoVec& track_info) { + void CallImpl::onSdpAnswer(Conductor* conductor, const std::string& sdp, const std::string& connId, const TrackInfoVec& track_info) { // Thread: [PCSignal] RTC_LOG(LS_INFO) << __FUNCTION__; if (_client != nullptr) _client->sendSdpAnswer(sdp, connId, track_info); } - void CallImpl::onIceCandidate(const std::string& mid, int mline, const std::string& candidate, + void CallImpl::onIceCandidate(Conductor* conductor, const std::string& mid, int mline, const std::string& candidate, const std::string& connId) { // Thread: [PCSignal] @@ -648,35 +640,56 @@ namespace nynja { _client->sendIceCandidate(mid, mline, candidate, connId); } - void CallImpl::onConnected() { + void CallImpl::onConnected(Conductor* conductor) { // Thread: [PCSignal] RTC_LOG(LS_INFO); - _client->mediaConnected(); - setState(ICallState::ICallStateConnected); - if (isConference()) { - if (_client != nullptr) - _client->enableTimedCallback(true); + if (conductor == _conductor.get()) { + setState(ICallState::ICallStateConnected); + + if (isConference()) { + if (_client != nullptr) + _client->enableTimedCallback(true); + } + } else if (conductor == _pickup_conductor.get()) { + // This is the second peer conenction. swap the calls now + if (_conductor != nullptr) { + RTC_LOG(LS_INFO) << __FUNCTION__ << " will release conductor before switching to the pickup conductor"; + std::shared_ptr tmp = _conductor; + _conductor.reset(); + tmp->tearDown(); + } + + // switch conductors now + RTC_LOG(LS_INFO) << __FUNCTION__ << " switch conductors"; + _conductor = _pickup_conductor; + _pickup_conductor.reset(); } } - void CallImpl::onFailed() { + void CallImpl::onFailed(Conductor* conductor) { // Thread: [PCSignal] RTC_LOG(LS_INFO) << __FUNCTION__ << " rtc media failed"; - - //setState(ICallState::ICallStateFailed); + if (conductor == _conductor.get()) { + } else if (conductor == _pickup_conductor.get()) { + // TODO: Tear Down pickup conductor + } } - void CallImpl::onDisconnected() { + void CallImpl::onDisconnected(Conductor* conductor) { // Thread: [PCSignal] RTC_LOG(LS_INFO) << __FUNCTION__ << " rtc media disconnected"; - _client->mediaDisconnected(); - setState(ICallState::ICallStateDisconnected); + if (conductor == _conductor.get()) { + _client->mediaDisconnected(); + setState(ICallState::ICallStateDisconnected); + } else if (conductor == _pickup_conductor.get()) { + // TODO: Tear Down pickup conductor + } } - void CallImpl::onRemoteScreenShareTrackAdded(rtc::scoped_refptr track, + void CallImpl::onRemoteScreenShareTrackAdded(Conductor* conductor, rtc::scoped_refptr track, const std::string& participantId) { // Thread: [PCSignal] std::lock_guard lock(_mutex_dlgt); @@ -689,7 +702,7 @@ namespace nynja { } } - void CallImpl::onRemoteScreenShareTrackRemoved(rtc::scoped_refptr track, + void CallImpl::onRemoteScreenShareTrackRemoved(Conductor* conductor, rtc::scoped_refptr track, const std::string& participantId) { // Thread: [PCSignal] std::lock_guard lock(_mutex_dlgt); @@ -704,21 +717,22 @@ namespace nynja { } } - void CallImpl::onScreenShareStarted() { + void CallImpl::onScreenShareStarted(Conductor* conductor) { std::lock_guard lock(_mutex_dlgt); if (NULL != _delegate) { _delegate->onScreenShareStarted(this); } } - void CallImpl::onScreenShareStopped() { + void CallImpl::onScreenShareStopped(Conductor* conductor) { std::lock_guard lock(_mutex_dlgt); if (NULL != _delegate) { _delegate->onScreenShareStopped(this); } } - void CallImpl::onRemoteVideoTrackAdded(rtc::scoped_refptr track, + void CallImpl::onRemoteVideoTrackAdded(Conductor* conductor, + rtc::scoped_refptr track, const std::string& participantId) { // Thread: [PCSignal] std::lock_guard lock(_mutex_dlgt); @@ -727,7 +741,8 @@ namespace nynja { } } - void CallImpl::onRemoteVideoTrackRemoved(rtc::scoped_refptr track, + void CallImpl::onRemoteVideoTrackRemoved(Conductor* conductor, + rtc::scoped_refptr track, const std::string& participantId) { // Thread: [PCSignal] std::lock_guard lock(_mutex_dlgt); @@ -736,21 +751,22 @@ namespace nynja { } } - void CallImpl::onLocalVideoCapturerStarted() { + void CallImpl::onLocalVideoCapturerStarted(Conductor* conductor) { std::lock_guard lock(_mutex_dlgt); if (NULL != _delegate) { _delegate->onLocalVideoCapturerStarted(this); } } - void CallImpl::onLocalVideoCapturerStopped() { + void CallImpl::onLocalVideoCapturerStopped(Conductor* conductor) { std::lock_guard lock(_mutex_dlgt); if (NULL != _delegate) { _delegate->onLocalVideoCapturerStopped(this); } } - void CallImpl::onSendMediaRequest(const std::string& requestId, + void CallImpl::onSendMediaRequest(Conductor* conductor, + const std::string& requestId, ::nynjacoin::nccs::def::SendMediaRequest::Type type, ::nynjacoin::nccs::def::MediaContentType cntType) { @@ -759,24 +775,17 @@ namespace nynja { _client->sendMediaRequest(requestId, type, cntType); } - void CallImpl::onFatalError() - { - if (nullptr != _conductor) { - _conductor->onFatalError(); - } - } - - void CallImpl::onStartScreenShareFailed(int code) + void CallImpl::onStartScreenShareFailed(Conductor* conductor, int code) { _delegate->startScreenShareFailed(this, code); } - void CallImpl::onScreenShareEnded() + void CallImpl::onScreenShareEnded(Conductor* conductor) { _delegate->screenShareEnded(this); } - void CallImpl::onStartCameraFailed(int code) + void CallImpl::onStartCameraFailed(Conductor* conductor, int code) { _delegate->startCameraFailed(this, code); } @@ -1052,7 +1061,7 @@ namespace nynja { } //MARK: Conductor Helpers - void CallImpl::createConductor(const std::string& connId, bool initiator) { + void CallImpl::createConductor(const std::string& connId) { // Thread: [MediaControl] if (nullptr != _conductor && _conductor->isTearDown()) { @@ -1060,8 +1069,7 @@ namespace nynja { } if (nullptr == _conductor) { - - RTC_LOG(LS_INFO) << __FUNCTION__ << " will create conductor"; + RTC_LOG(LS_INFO) << __FUNCTION__ << " will create conductor with connId: " << connId; _conductor = _callFactory->createConductor(this, _dispatcher, _mutex_call); bool p2p = (false == isConference()); if(!_conductor->initialize(_myParticipantId, connId, p2p, recvVideo(), _ownership->getUsernme(this))) { @@ -1070,7 +1078,27 @@ namespace nynja { } } } - + + void CallImpl::createPickupConductor(const std::string& connId) + { + // Thread: [MediaControl] + if (nullptr != _pickup_conductor && _pickup_conductor->isTearDown()) { + RTC_LOG(LS_INFO) << __FUNCTION__ << " reset pickup conductor"; + _pickup_conductor.reset(); + } + + if (nullptr == _pickup_conductor) { + + RTC_LOG(LS_INFO) << __FUNCTION__ << " will create pickup conductor with connId: " << connId; + _pickup_conductor = _callFactory->createConductor(this, _dispatcher, _mutex_call); + bool p2p = (false == isConference()); + if(!_pickup_conductor->initialize(_myParticipantId, connId, p2p, recvVideo(), _ownership->getUsernme(this))) { + RTC_LOG(LS_INFO) << __FUNCTION__ << " failed to initialize conductor"; + _pickup_conductor.reset(); + } + } + } + void CallImpl::notifyCallEndedIfNecessary() { // Thread: [MediaControl] diff --git a/src/core/call/CallImpl.h b/src/core/call/CallImpl.h index 26cdc939..eae84ded 100644 --- a/src/core/call/CallImpl.h +++ b/src/core/call/CallImpl.h @@ -160,7 +160,7 @@ namespace nynja { }; void updateCallId(const std::string& value); - + void acceptedElsewhere(); protected: @@ -194,41 +194,38 @@ namespace nynja { void didReceiveHandshakeError(const nynjacoin::nccs::csp::HandshakeError &error) override; // ConductorObserver - bool setLocalDescription(webrtc::SessionDescriptionInterface* desc) override; - void didCreateOffer(const std::string& sdp, uint32_t prio, uint32_t seq) override; - void didCreateAnswer(webrtc::SessionDescriptionInterface* desc, - const std::map& options) override; - void didSetLocalOffer(uint32_t prio, uint32_t seq) override; - void didSetLocalAnswer() override; - void onSdpOffer(const std::string& sdp, uint32_t prio, uint32_t seq, const std::string& connId, const TrackInfoVec& track_info) override; - void onSdpAnswer(const std::string& sdp, const std::string& connId, const TrackInfoVec& track_info) override; - void onIceCandidate(const std::string& mid, int mline, const std::string& candidate, + void onSdpOffer(Conductor* conductor, const std::string& sdp, uint32_t prio, uint32_t seq, const std::string& connId, const TrackInfoVec& track_info) override; + void onSdpAnswer(Conductor* conductor, const std::string& sdp, const std::string& connId, const TrackInfoVec& track_info) override; + void onIceCandidate(Conductor* conductor, const std::string& mid, int mline, const std::string& candidate, const std::string& connId) override; - void onConnected() override; - void onFailed() override; - void onDisconnected() override; - void onRemoteScreenShareTrackAdded(rtc::scoped_refptr track, + void onConnected(Conductor* conductor) override; + void onFailed(Conductor* conductor) override; + void onDisconnected(Conductor* conductor) override; + void onRemoteScreenShareTrackAdded(Conductor* conductor, + rtc::scoped_refptr track, const std::string& participantId) override; - void onRemoteScreenShareTrackRemoved(rtc::scoped_refptr track, + void onRemoteScreenShareTrackRemoved(Conductor* conductor, + rtc::scoped_refptr track, const std::string& participantId) override; - void onScreenShareStarted() override; - void onScreenShareStopped() override; - void onRemoteVideoTrackAdded(rtc::scoped_refptr track, + void onScreenShareStarted(Conductor* conductor) override; + void onScreenShareStopped(Conductor* conductor) override; + void onRemoteVideoTrackAdded(Conductor* conductor, + rtc::scoped_refptr track, const std::string& participantId) override; - void onRemoteVideoTrackRemoved(rtc::scoped_refptr track, + void onRemoteVideoTrackRemoved(Conductor* conductor, + rtc::scoped_refptr track, const std::string& participantId) override; - void onLocalVideoCapturerStarted() override; - void onLocalVideoCapturerStopped() override; - void onUpdateSpeakingParticipant(const std::string& partId, bool speaking) override {}; - void emitUpdateSpeakingParticipants() override {}; - void onSendMediaRequest(const std::string& requestId, + void onLocalVideoCapturerStarted(Conductor* conductor) override; + void onLocalVideoCapturerStopped(Conductor* conductor) override; + void onUpdateSpeakingParticipant(Conductor* conductor, const std::string& partId, bool speaking) override {}; + void emitUpdateSpeakingParticipants(Conductor* conductor) override {}; + void onSendMediaRequest(Conductor* conductor, const std::string& requestId, ::nynjacoin::nccs::def::SendMediaRequest::Type type, ::nynjacoin::nccs::def::MediaContentType cntType) override; - void onFatalError() override; - void onStartScreenShareFailed(int code) override; - void onScreenShareEnded() override; - void onMediaUpdated(const TrackInfoVec& medias) override {}; - void onStartCameraFailed(int code) override; + void onStartScreenShareFailed(Conductor* conductor, int code) override; + void onScreenShareEnded(Conductor* conductor) override; + void onMediaUpdated(Conductor* conductor, const TrackInfoVec& medias) override {}; + void onStartCameraFailed(Conductor* conductor, int code) override; // GRPServiceDelegate @@ -250,8 +247,9 @@ namespace nynja { GRPCallUpdateType updateType) override {}; // helpers - void createConductor(const std::string& connId, bool initiator); - + void createConductor(const std::string& connId); + void createPickupConductor(const std::string& connId); + // delegate helpers void notifyCallEndedIfNecessary(); @@ -300,7 +298,10 @@ namespace nynja { // conductor is thread safe and does not need to be protected by _mutex_call std::shared_ptr _conductor; - + + // conductor is thread safe and does not need to be protected by _mutex_call + std::shared_ptr _pickup_conductor; + std::string _acceptedOnDevice; std::string _deviceId; bool _fClientStarted = false; diff --git a/src/core/call/CallManagerImpl.cpp b/src/core/call/CallManagerImpl.cpp index 5a687c1e..6d0089a4 100644 --- a/src/core/call/CallManagerImpl.cpp +++ b/src/core/call/CallManagerImpl.cpp @@ -1709,6 +1709,7 @@ namespace nynja { for (auto c: acceptedElsewhereCalls) { if (_callback != NULL) { RTC_LOG(LS_INFO) << " report accepted elsewhere call: " << c->getId(); + dynamic_cast(c.get())->acceptedElsewhere(); _callback->receivedAcceptedElsewhereCall(c); } } diff --git a/src/core/call/ConfCall.cpp b/src/core/call/ConfCall.cpp index 5fc6444b..1b56f078 100644 --- a/src/core/call/ConfCall.cpp +++ b/src/core/call/ConfCall.cpp @@ -568,7 +568,7 @@ namespace nynja { return (_ucPtr.get() != NULL); } - void ConfCall::onUpdateSpeakingParticipant(const std::string& partId, bool speaking) { + void ConfCall::onUpdateSpeakingParticipant(Conductor* conductor, const std::string& partId, bool speaking) { std::lock_guard lock(_mutex_call); auto exist = std::find_if(_participants.begin(), _participants.end(), [&](const CallParticipantPtr& p){ @@ -581,13 +581,54 @@ namespace nynja { } } - void ConfCall::emitUpdateSpeakingParticipants() { + void ConfCall::emitUpdateSpeakingParticipants(Conductor* conductor) { std::lock_guard lock(_mutex_dlgt); if (NULL != _delegate) { _delegate->emitUpdateSpeakingParticipants(this); } } + void ConfCall::onMediaUpdated(Conductor* conductor, const TrackInfoVec& medias) { + bool emitMediaEvent = true; + + { + std::lock_guard lock(_mutex_call); + + for (auto particip: _participants) { + + dynamic_cast(particip.get())->setHasMedia(nynjacoin::nccs::def::MediaContentType::VIDEO, false); + dynamic_cast(particip.get())->setHasMedia(nynjacoin::nccs::def::MediaContentType::SCREEN, false); + } + + for (auto ti: medias) { + auto exist = std::find_if(_participants.begin(), _participants.end(), + [&](const CallParticipantPtr& p){ + return (0 == p->participantId().compare(ti->participant_id())); + }); + + if (exist != _participants.end()) { + switch (ti->media_content_type()) { + case ::nynjacoin::nccs::def::MediaContentType::VIDEO: + dynamic_cast((*exist).get())->setHasMedia(nynjacoin::nccs::def::MediaContentType::VIDEO, true); + break; + case ::nynjacoin::nccs::def::MediaContentType::SCREEN: + dynamic_cast((*exist).get())->setHasMedia(nynjacoin::nccs::def::MediaContentType::SCREEN, true); + break; + default: + break; + } + } + } + } + + { + std::lock_guard lock(_mutex_dlgt); + if (NULL != _delegate) { + _delegate->callParticipantsUpdated(this); + } + } + } + //MARK: GRPServiceDelegate void ConfCall::receivedUpdatedParticipants(const std::shared_ptr& conferenceFeatures, const std::shared_ptr& conferenceInfo, @@ -635,47 +676,6 @@ namespace nynja { } } - void ConfCall::onMediaUpdated(const TrackInfoVec& medias) { - bool emitMediaEvent = true; - - { - std::lock_guard lock(_mutex_call); - - for (auto particip: _participants) { - - dynamic_cast(particip.get())->setHasMedia(nynjacoin::nccs::def::MediaContentType::VIDEO, false); - dynamic_cast(particip.get())->setHasMedia(nynjacoin::nccs::def::MediaContentType::SCREEN, false); - } - - for (auto ti: medias) { - auto exist = std::find_if(_participants.begin(), _participants.end(), - [&](const CallParticipantPtr& p){ - return (0 == p->participantId().compare(ti->participant_id())); - }); - - if (exist != _participants.end()) { - switch (ti->media_content_type()) { - case ::nynjacoin::nccs::def::MediaContentType::VIDEO: - dynamic_cast((*exist).get())->setHasMedia(nynjacoin::nccs::def::MediaContentType::VIDEO, true); - break; - case ::nynjacoin::nccs::def::MediaContentType::SCREEN: - dynamic_cast((*exist).get())->setHasMedia(nynjacoin::nccs::def::MediaContentType::SCREEN, true); - break; - default: - break; - } - } - } - } - - { - std::lock_guard lock(_mutex_dlgt); - if (NULL != _delegate) { - _delegate->callParticipantsUpdated(this); - } - } - } - void ConfCall::updateMySpeaking() { bool emitSpeakingEvent = true; { diff --git a/src/core/call/ConfCall.h b/src/core/call/ConfCall.h index d8877454..0e728607 100644 --- a/src/core/call/ConfCall.h +++ b/src/core/call/ConfCall.h @@ -94,14 +94,15 @@ namespace nynja { void sortParticipants(); - void onUpdateSpeakingParticipant(const std::string& partId, bool speaking) override; - void emitUpdateSpeakingParticipants() override; + void onUpdateSpeakingParticipant(Conductor* conductor, const std::string& partId, bool speaking) override; + void emitUpdateSpeakingParticipants(Conductor* conductor) override; + void onMediaUpdated(Conductor* conductor, const TrackInfoVec& medias) override; + void receivedUpdatedParticipants(const std::shared_ptr& conferenceFeatures, const std::shared_ptr& conferenceInfo, const std::map>& members, const std::map>& participants, const std::vector& deletedParticipants) override; - void onMediaUpdated(const TrackInfoVec& medias) override; void _updateParticipantsByMember(const std::map>& members); void _updateParticipantsByParticipant(const std::map>& participants); diff --git a/src/core/call/TwoPartyCall.cpp b/src/core/call/TwoPartyCall.cpp index 912a4035..5d1b5d17 100644 --- a/src/core/call/TwoPartyCall.cpp +++ b/src/core/call/TwoPartyCall.cpp @@ -288,7 +288,7 @@ namespace nynja { void TwoPartyCall::createConductorForTwoPartyIncoming() { std::lock_guard lock(_mutex_call); RTC_LOG(LS_INFO) << __FUNCTION__; - createConductor(globalNynjaEmptyString, false); + createConductor(globalNynjaEmptyString); processInitialOffer(); } @@ -327,7 +327,7 @@ namespace nynja { } //MARK: ConductorObserver - void TwoPartyCall::onSdpAnswer(const std::string& sdp, const std::string& connId, const TrackInfoVec& track_info) { + void TwoPartyCall::onSdpAnswer(Conductor* conductor, const std::string& sdp, const std::string& connId, const TrackInfoVec& track_info) { // Thread: [PCSignal] std::lock_guard lock(_mutex_call); RTC_LOG(LS_INFO) << __FUNCTION__; @@ -338,7 +338,7 @@ namespace nynja { processSdpAnswer(); } - void TwoPartyCall::onIceCandidate(const std::string& mid, int mline, const std::string& candidate, + void TwoPartyCall::onIceCandidate(Conductor* conductor, const std::string& mid, int mline, const std::string& candidate, const std::string& connId) { std::lock_guard lock(_mutex_call); diff --git a/src/core/call/TwoPartyCall.h b/src/core/call/TwoPartyCall.h index 6f38de8d..7ad787f8 100644 --- a/src/core/call/TwoPartyCall.h +++ b/src/core/call/TwoPartyCall.h @@ -127,8 +127,8 @@ namespace nynja { void markAsDeleted() override; // ConductorObserver - void onSdpAnswer(const std::string& sdp, const std::string& connId, const TrackInfoVec& track_info) override; - void onIceCandidate(const std::string& mid, int mline, const std::string& candidate, + void onSdpAnswer(Conductor* conductor, const std::string& sdp, const std::string& connId, const TrackInfoVec& track_info) override; + void onIceCandidate(Conductor* conductor, const std::string& mid, int mline, const std::string& candidate, const std::string& connId) override; void mediaChannelReady() override; diff --git a/src/core/conductor/ConductorObserver.h b/src/core/conductor/ConductorObserver.h index a47d475e..59db2486 100644 --- a/src/core/conductor/ConductorObserver.h +++ b/src/core/conductor/ConductorObserver.h @@ -16,45 +16,45 @@ namespace nynja { + // Forward declarations + class Conductor; + class ConductorObserver { public: virtual ~ConductorObserver() = default; - virtual bool setLocalDescription(webrtc::SessionDescriptionInterface* desc) = 0; - virtual void didCreateOffer(const std::string& sdp, uint32_t prio, uint32_t seq) = 0; - virtual void didCreateAnswer(webrtc::SessionDescriptionInterface* desc, - const std::map& options) = 0; - virtual void didSetLocalOffer(uint32_t prio, uint32_t seq) = 0; - virtual void didSetLocalAnswer() = 0; - - virtual void onSdpOffer(const std::string& sdp, uint32_t prio, uint32_t seq, const std::string& connId, const TrackInfoVec& track_info) = 0; - virtual void onSdpAnswer(const std::string& sdp, const std::string& connId, const TrackInfoVec& track_info) = 0; - virtual void onIceCandidate(const std::string& mid, int mline, const std::string& candidate, const std::string& connId) = 0; - virtual void onConnected() = 0; - virtual void onFailed() = 0; - virtual void onDisconnected() = 0; - virtual void onRemoteScreenShareTrackAdded(rtc::scoped_refptr track, + virtual void onSdpOffer(Conductor* conductor, const std::string& sdp, uint32_t prio, uint32_t seq, const std::string& connId, const TrackInfoVec& track_info) = 0; + virtual void onSdpAnswer(Conductor* conductor, const std::string& sdp, const std::string& connId, const TrackInfoVec& track_info) = 0; + virtual void onIceCandidate(Conductor* conductor, const std::string& mid, int mline, const std::string& candidate, const std::string& connId) = 0; + virtual void onConnected(Conductor* conductor) = 0; + virtual void onFailed(Conductor* conductor) = 0; + virtual void onDisconnected(Conductor* conductor) = 0; + virtual void onRemoteScreenShareTrackAdded(Conductor* conductor, + rtc::scoped_refptr track, const std::string& participantId) = 0; - virtual void onRemoteScreenShareTrackRemoved(rtc::scoped_refptr track, + virtual void onRemoteScreenShareTrackRemoved(Conductor* conductor, + rtc::scoped_refptr track, const std::string& participantId) = 0; - virtual void onScreenShareStarted() = 0; - virtual void onScreenShareStopped() = 0; - virtual void onRemoteVideoTrackAdded(rtc::scoped_refptr track, + virtual void onScreenShareStarted(Conductor* conductor) = 0; + virtual void onScreenShareStopped(Conductor* conductor) = 0; + virtual void onRemoteVideoTrackAdded(Conductor* conductor, + rtc::scoped_refptr track, const std::string& participantId) = 0; - virtual void onRemoteVideoTrackRemoved(rtc::scoped_refptr track, + virtual void onRemoteVideoTrackRemoved(Conductor* conductor, + rtc::scoped_refptr track, const std::string& participantId) = 0; - virtual void onLocalVideoCapturerStarted() = 0; - virtual void onLocalVideoCapturerStopped() = 0; - virtual void onUpdateSpeakingParticipant(const std::string& partId, bool speaking) = 0; - virtual void emitUpdateSpeakingParticipants() = 0; - virtual void onSendMediaRequest(const std::string& requestId, + virtual void onLocalVideoCapturerStarted(Conductor* conductor) = 0; + virtual void onLocalVideoCapturerStopped(Conductor* conductor) = 0; + virtual void onUpdateSpeakingParticipant(Conductor* conductor, const std::string& partId, bool speaking) = 0; + virtual void emitUpdateSpeakingParticipants(Conductor* conductor) = 0; + virtual void onSendMediaRequest(Conductor* conductor, + const std::string& requestId, ::nynjacoin::nccs::def::SendMediaRequest::Type type, ::nynjacoin::nccs::def::MediaContentType cntType) = 0; - virtual void onFatalError() = 0; - virtual void onStartScreenShareFailed(int code) = 0; - virtual void onScreenShareEnded() = 0; - virtual void onMediaUpdated(const TrackInfoVec& medias) = 0; - virtual void onStartCameraFailed(int code) = 0; + virtual void onStartScreenShareFailed(Conductor* conductor, int code) = 0; + virtual void onScreenShareEnded(Conductor* conductor) = 0; + virtual void onMediaUpdated(Conductor* conductor, const TrackInfoVec& medias) = 0; + virtual void onStartCameraFailed(Conductor* conductor, int code) = 0; }; } diff --git a/src/core/conductor/webrtc/PeerConnectionConductor.cpp b/src/core/conductor/webrtc/PeerConnectionConductor.cpp index f78ae5d7..31e5ca93 100644 --- a/src/core/conductor/webrtc/PeerConnectionConductor.cpp +++ b/src/core/conductor/webrtc/PeerConnectionConductor.cpp @@ -68,10 +68,10 @@ namespace nynja { CreateOfferAnswerObserver(uint32_t prio, uint32_t seq, const std::string& connId, - ConductorObserver* observer, + Conductor* conductor, const std::map& options = std::map()); CreateOfferAnswerObserver(const std::string& connId, - ConductorObserver* observer, + Conductor* conductor, const std::map& options = std::map()); void OnSuccess(webrtc::SessionDescriptionInterface* desc) override; @@ -83,7 +83,7 @@ namespace nynja { uint32_t _prio; uint32_t _seq; std::string _connId; - ConductorObserver* _observer; + Conductor* _conductor; std::map _options; }; @@ -95,14 +95,14 @@ namespace nynja { public: SetLocalSessionDescriptionObserver(uint32_t prio, uint32_t seq, - ConductorObserver* observer); - SetLocalSessionDescriptionObserver(ConductorObserver* observer); + Conductor* conductor); + SetLocalSessionDescriptionObserver(Conductor* conductor); private: bool _isOffer; uint32_t _prio; uint32_t _seq; - ConductorObserver* _observer; + Conductor* _conductor; }; class DummySetSessionDescriptionObserver @@ -207,7 +207,7 @@ namespace nynja { uint32_t sequence = ++_sequence; RTC_LOG(LS_INFO) << "[offer/answer] will CreateOffer prio: seq: " << sequence << " prio: " << _prio; - _peer_connection->CreateOffer(new rtc::RefCountedObject(_prio, sequence, _connId, _observer), + _peer_connection->CreateOffer(new rtc::RefCountedObject(_prio, sequence, _connId, this), options); } @@ -418,7 +418,7 @@ namespace nynja { RTC_LOG(LS_INFO) << "[offer/answer] will CreateAnswer"; - _peer_connection->CreateAnswer(new rtc::RefCountedObject(_connId,_observer, answer_options), + _peer_connection->CreateAnswer(new rtc::RefCountedObject(_connId,this, answer_options), options); } } @@ -490,7 +490,7 @@ namespace nynja { } RTC_LOG(LS_INFO) << "[offer/answer] will CreateAnswer"; - _peer_connection->CreateAnswer(new rtc::RefCountedObject(_connId,_observer), + _peer_connection->CreateAnswer(new rtc::RefCountedObject(_connId,this), options); } } @@ -1553,7 +1553,7 @@ namespace nynja { if (shouldNotify && _observer != NULL) { RTC_LOG(LS_INFO) << __FUNCTION__ << " did start capturer"; - _observer->onLocalVideoCapturerStarted(); + _observer->onLocalVideoCapturerStarted(this); } } @@ -1569,7 +1569,7 @@ namespace nynja { } if (shouldNotify && _observer != NULL) { - _observer->onLocalVideoCapturerStopped(); + _observer->onLocalVideoCapturerStopped(this); } } @@ -1597,7 +1597,7 @@ namespace nynja { if (shouldNotify && _observer != NULL) { RTC_LOG(LS_INFO) << __FUNCTION__ << " did start SS capturer"; - _observer->onScreenShareStarted(); + _observer->onScreenShareStarted(this); } } @@ -2060,7 +2060,7 @@ namespace nynja { if (_screen_transceiver != nullptr) { // already have started video, can't have both video and screenshare if (_observer != NULL) { - _observer->onStartCameraFailed(-47); + _observer->onStartCameraFailed(this, -47); } return; } @@ -2069,7 +2069,7 @@ namespace nynja { hashidsxx::Hashids hash(_participantId, 16); _startCameraRequestId = hash.encode({arc4random()}); RTC_LOG(LS_INFO) << "will send request to start camera in conference with request id: " << _startCameraRequestId; - _observer->onSendMediaRequest(_startCameraRequestId, + _observer->onSendMediaRequest(this, _startCameraRequestId, ::nynjacoin::nccs::def::SendMediaRequest_Type_BEGIN, ::nynjacoin::nccs::def::VIDEO); } else { @@ -2082,7 +2082,7 @@ namespace nynja { hashidsxx::Hashids hash(_participantId, 16); _stopCameraRequestId = hash.encode({arc4random()}); RTC_LOG(LS_INFO) << "will send request to stop camera in conference with request id: " << _stopCameraRequestId; - _observer->onSendMediaRequest(_stopCameraRequestId, + _observer->onSendMediaRequest(this, _stopCameraRequestId, ::nynjacoin::nccs::def::SendMediaRequest_Type_END, ::nynjacoin::nccs::def::VIDEO); } else { @@ -2460,7 +2460,7 @@ namespace nynja { #ifdef ANDROID_NDK if (shouldNotify && _observer != NULL) { RTC_LOG(LS_INFO) << __FUNCTION__ << " did start SS capturer"; - _observer->onScreenShareStarted(); + _observer->onScreenShareStarted(this); } #endif } @@ -2470,7 +2470,7 @@ namespace nynja { if (_video_transceiver != nullptr) { // already have started video, can't have both video and screenshare if (_observer != NULL) { - _observer->onStartScreenShareFailed(-47); + _observer->onStartScreenShareFailed(this, -47); } return; } @@ -2479,7 +2479,7 @@ namespace nynja { hashidsxx::Hashids hash(_participantId, 16); _startScreenShareRequestId = hash.encode({arc4random()}); RTC_LOG(LS_INFO) << "will send request to start ss in conference with request id: " << _startScreenShareRequestId; - _observer->onSendMediaRequest(_startScreenShareRequestId, + _observer->onSendMediaRequest(this, _startScreenShareRequestId, ::nynjacoin::nccs::def::SendMediaRequest_Type_BEGIN, ::nynjacoin::nccs::def::SCREEN); } else { @@ -3078,7 +3078,7 @@ namespace nynja { hashidsxx::Hashids hash(_participantId, 16); _stopScreenShareRequestId = hash.encode({arc4random()}); RTC_LOG(LS_INFO) << "will send request to stop ss in conference with request id: " << _stopScreenShareRequestId; - _observer->onSendMediaRequest(_stopScreenShareRequestId, + _observer->onSendMediaRequest(this, _stopScreenShareRequestId, ::nynjacoin::nccs::def::SendMediaRequest_Type_END, ::nynjacoin::nccs::def::SCREEN); } else { @@ -3176,9 +3176,9 @@ namespace nynja { if (_observer != NULL) { if (shouldNotifyVideo) { - _observer->onRemoteVideoTrackAdded(vtrack, participant_id); + _observer->onRemoteVideoTrackAdded(this, vtrack, participant_id); } else if (shouldNotifyScreen) { - _observer->onRemoteScreenShareTrackAdded(vtrack, participant_id); + _observer->onRemoteScreenShareTrackAdded(this, vtrack, participant_id); } } @@ -3253,9 +3253,9 @@ namespace nynja { if (_observer != NULL) { if (shouldNotifyVideo) { - _observer->onRemoteVideoTrackRemoved(vtrack, participant_id); + _observer->onRemoteVideoTrackRemoved(this, vtrack, participant_id); } else if (shouldNotifyScreen) { - _observer->onRemoteScreenShareTrackRemoved(vtrack, participant_id); + _observer->onRemoteScreenShareTrackRemoved(this, vtrack, participant_id); } } @@ -3289,7 +3289,7 @@ namespace nynja { startLocalScreenShare(); #endif // #ifdef ANDROID_NDK } - _observer->onConnected(); + _observer->onConnected(this); break; case webrtc::PeerConnectionInterface::kIceConnectionCompleted: break; @@ -3298,7 +3298,7 @@ namespace nynja { generateOffer(true); break; case webrtc::PeerConnectionInterface::kIceConnectionDisconnected: - _observer->onDisconnected(); + _observer->onDisconnected(this); if (_p2p) { #ifndef ANDROID_NDK stopLocalVideo(); @@ -3344,7 +3344,7 @@ namespace nynja { << " mct: " << _kMediaContentTypes[(*it)->media_content_type()]; } - _observer->onSdpOffer(sdp, prio, seq, connId, trackInfo); + _observer->onSdpOffer(this, sdp, prio, seq, connId, trackInfo); } } @@ -3386,11 +3386,11 @@ namespace nynja { RTC_LOG(LS_INFO) << __FUNCTION__ << " [track][loc] mid: " << (*it)->mid() << " prt: " << (*it)->participant_id() << " mct: " << _kMediaContentTypes[(*it)->media_content_type()]; } - _observer->onSdpAnswer(sdp, connId, trackInfo); + _observer->onSdpAnswer(this, sdp, connId, trackInfo); } if (!_p2p && _observer != NULL) { - _observer->onMediaUpdated(remoteTrackInfo); + _observer->onMediaUpdated(this, remoteTrackInfo); } } @@ -3435,7 +3435,7 @@ namespace nynja { _networks.clear(); RTC_LOG(LS_INFO) << "[offer/answer] will SetLocalDescription: (" << sdpType << ")\n" << sdpNew; - _peer_connection->SetLocalDescription(new rtc::RefCountedObject(prio, seq, _observer), session_description.release()); + _peer_connection->SetLocalDescription(new rtc::RefCountedObject(prio, seq, this), session_description.release()); return; } @@ -3451,7 +3451,7 @@ namespace nynja { << " mct: " << _kMediaContentTypes[(*it)->media_content_type()]; } RTC_LOG(LS_INFO) << "[offer/answer] will send offer to other party"; - _observer->onSdpOffer(sdp, prio, seq, connId, localTrackInfo); + _observer->onSdpOffer(this, sdp, prio, seq, connId, localTrackInfo); } } @@ -3490,7 +3490,7 @@ namespace nynja { webrtc::CreateSessionDescription(type, modSdp, &error_out); if (session_description != nullptr) { RTC_LOG(LS_INFO) << "[offer/answer] will SetLocalDescription: (" << sdpType << ")\n" << modSdp; - _peer_connection->SetLocalDescription(new rtc::RefCountedObject(_observer), session_description.release()); + _peer_connection->SetLocalDescription(new rtc::RefCountedObject(this), session_description.release()); return; } } @@ -3504,7 +3504,7 @@ namespace nynja { webrtc::CreateSessionDescription(type, modSdp, &error_out); if (session_description != nullptr) { RTC_LOG(LS_INFO) << "[offer/answer] will SetLocalDescription: (" << sdpType << ")\n" << modSdp; - _peer_connection->SetLocalDescription(new rtc::RefCountedObject(_observer), session_description.release()); + _peer_connection->SetLocalDescription(new rtc::RefCountedObject(this), session_description.release()); return; } } @@ -3520,7 +3520,7 @@ namespace nynja { RTC_LOG(LS_INFO) << "[offer/answer] will SetLocalDescription: (" << sdpType << ")\n" << modSdp; std::unique_ptr session_description = webrtc::CreateSessionDescription(type, modSdp, &error_out); - _peer_connection->SetLocalDescription(new rtc::RefCountedObject(_observer), session_description.release()); + _peer_connection->SetLocalDescription(new rtc::RefCountedObject(this), session_description.release()); } void PeerConnectionConductor::processIceCandidate(const std::string& mid, @@ -3532,7 +3532,7 @@ namespace nynja { RTC_LOG(LS_INFO) << "_deleted"; return; } - _observer->onIceCandidate(mid, mline, candidate, _connId); + _observer->onIceCandidate(this, mid, mline, candidate, _connId); } void PeerConnectionConductor::processSpeaking(const std::string& trackId, const std::string& ssrc, bool speaking) @@ -3573,14 +3573,14 @@ namespace nynja { if (_observer != NULL && !partId.empty()) { RTC_LOG(LS_INFO) << " [speak] trackId: " << trackId << " partId: " << partId << " ssrc: " << ssrc << " speak: " << speaking; - _observer->onUpdateSpeakingParticipant(partId, speaking); + _observer->onUpdateSpeakingParticipant(this, partId, speaking); } } void PeerConnectionConductor::processUpdateSpeaking() { if (_observer != NULL) { - _observer->emitUpdateSpeakingParticipants(); + _observer->emitUpdateSpeakingParticipants(this); } } @@ -3588,28 +3588,28 @@ namespace nynja { void PeerConnectionConductor::notifyOnStartScreenShareFailed() { if (_observer != NULL) { - _observer->onStartScreenShareFailed(-1); + _observer->onStartScreenShareFailed(this, -1); } } void PeerConnectionConductor::notifyOnScreenShareStopped() { if (_observer != NULL) { - _observer->onScreenShareStopped(); + _observer->onScreenShareStopped(this); } } void PeerConnectionConductor::notifyOnScreenShareStarted() { if (_observer != NULL) { - _observer->onScreenShareStarted(); + _observer->onScreenShareStarted(this); } } void PeerConnectionConductor::notifyOnScreenShareEnded() { if (_observer != NULL) { - _observer->onScreenShareEnded(); + _observer->onScreenShareEnded(this); } } @@ -3617,14 +3617,14 @@ namespace nynja { { if (_observer != NULL) { RTC_LOG(LS_INFO) << __FUNCTION__ << " did start capturer"; - _observer->onLocalVideoCapturerStarted(); + _observer->onLocalVideoCapturerStarted(this); } } void PeerConnectionConductor::notifyOnLocalVideoCapturerStopped() { if (_observer != NULL) { - _observer->onLocalVideoCapturerStopped(); + _observer->onLocalVideoCapturerStopped(this); } } @@ -3632,23 +3632,23 @@ namespace nynja { CreateOfferAnswerObserver::CreateOfferAnswerObserver(uint32_t prio, uint32_t seq, const std::string& connId, - ConductorObserver* observer, + Conductor* conductor, const std::map& options) : _isOffer(true), _seq(seq), _prio(prio), _connId(connId), - _observer(observer), + _conductor(conductor), _options(options) {} CreateOfferAnswerObserver::CreateOfferAnswerObserver(const std::string& connId, - ConductorObserver* observer, + Conductor* conductor, const std::map& options) : _isOffer(false), _seq(0), _prio(0), _connId(connId), - _observer(observer), + _conductor(conductor), _options(options) {} void CreateOfferAnswerObserver::OnSuccess(webrtc::SessionDescriptionInterface* desc) { @@ -3657,9 +3657,9 @@ namespace nynja { desc->ToString(&sdp); if (_isOffer) { - _observer->didCreateOffer(sdp, _prio, _seq); + _conductor->didCreateOffer(sdp, _prio, _seq); } else { - _observer->didCreateAnswer(desc, _options); + _conductor->didCreateAnswer(desc, _options); } } } @@ -3671,31 +3671,31 @@ namespace nynja { //MARK: SetLocalSessionDescriptionObserver SetLocalSessionDescriptionObserver::SetLocalSessionDescriptionObserver(uint32_t prio, uint32_t seq, - ConductorObserver* observer) + Conductor* conductor) : _isOffer(true), _seq(seq), _prio(prio), - _observer(observer) {} + _conductor(conductor) {} - SetLocalSessionDescriptionObserver::SetLocalSessionDescriptionObserver(ConductorObserver* observer) + SetLocalSessionDescriptionObserver::SetLocalSessionDescriptionObserver(Conductor* conductor) : _isOffer(false), _seq(0), _prio(0), - _observer(observer) {} + _conductor(conductor) {} void SetLocalSessionDescriptionObserver::OnSuccess() { RTC_LOG(INFO) << __FUNCTION__; if (_isOffer) { - _observer->didSetLocalOffer(_prio, _seq); + _conductor->didSetLocalOffer(_prio, _seq); } else { - _observer->didSetLocalAnswer(); + _conductor->didSetLocalAnswer(); } } void SetLocalSessionDescriptionObserver::OnFailure(webrtc::RTCError error) { RTC_LOG(INFO) << __FUNCTION__ << " " << error.message(); //TODO: Drop the call here if set local description fails for soem reason - _observer->onFatalError(); + _conductor->onFatalError(); } -- GitLab From 7e26616719e6c19cecae76e93cb72b8e0d22e572 Mon Sep 17 00:00:00 2001 From: Angel Terziev Date: Thu, 28 May 2020 14:13:32 +0300 Subject: [PATCH 04/11] ability to ask for calls active elsewhere call pickup various fixes --- src/core/call/CallImpl.cpp | 11 +- src/core/call/CallImpl.h | 1 + src/core/call/CallManagerImpl.cpp | 24 +- src/core/call/CallManagerImpl.h | 3 + src/core/call/TwoPartyCall.cpp | 24 + src/core/call/TwoPartyCall.h | 1 + src/core/client/Client.h | 3 +- src/core/grpc/voice/GRPClient.cpp | 12 +- src/core/grpc/voice/GRPClient.h | 6 +- .../voice/GRPStatePackageUserActivity.cpp | 18 +- src/core/grpc/voice/definitions.pb.cc | 79 ++- src/core/grpc/voice/definitions.pb.h | 43 ++ .../voice/state_package_user_activity.pb.cc | 531 ++++++++++++++++-- .../voice/state_package_user_activity.pb.h | 363 +++++++++++- src/core/interface/ICall.h | 1 + src/core/interface/ICallManager.h | 1 + src/core/proto | 2 +- src/core/utility/IOwnershipProtocol.h | 1 + src/sdk/ios/api/CallManager.h | 2 + src/sdk/ios/api/CallManager.mm | 13 + 20 files changed, 1064 insertions(+), 75 deletions(-) diff --git a/src/core/call/CallImpl.cpp b/src/core/call/CallImpl.cpp index 84445447..d4c9230d 100644 --- a/src/core/call/CallImpl.cpp +++ b/src/core/call/CallImpl.cpp @@ -405,7 +405,7 @@ namespace nynja { { std::lock_guard lock(_mutex_call); if (_client != nullptr) - _client->openMediaChannel(_callId, _myParticipantId); + _client->openMediaChannel(_callId, _myParticipantId, _ownership->getAccessToken(this)); } void CallImpl::reOpenMediaChannel() @@ -520,10 +520,14 @@ namespace nynja { void CallImpl::connectionOpened(const std::string &connId, bool sendOffer) { RTC_LOG(LS_INFO) << __FUNCTION__ << " connId: " << connId << " sendOffer: " << sendOffer; + if (_conductor != nullptr && !_conductor->isTearDown() && _conductor->getConnId().empty()) { + _conductor->updateConnectionId(connId); + } + // If this is a p2p call and we already have a valid conductor, // this could be a second connection for the call pickup case - if (_conductor != nullptr && (_conductor->getConnId().compare(connId) != 0)) { + if (!isConference() && _conductor != nullptr && (_conductor->getConnId().compare(connId) != 0)) { // second conenction request createPickupConductor(connId); if (sendOffer && _pickup_conductor != nullptr) { @@ -534,11 +538,8 @@ namespace nynja { _mediaChannelReady = true; - // if sendOffer is true, means the party is initiator createConductor(connId); - _conductor->updateConnectionId(connId); - if (sendOffer) { _conductor->generateOffer(true); } diff --git a/src/core/call/CallImpl.h b/src/core/call/CallImpl.h index eae84ded..aead44b0 100644 --- a/src/core/call/CallImpl.h +++ b/src/core/call/CallImpl.h @@ -134,6 +134,7 @@ namespace nynja { }; bool pickup() override {return false;}; + bool isActiveElsewhere() const {return false;}; // Public helpers void setState(ICallState newState); diff --git a/src/core/call/CallManagerImpl.cpp b/src/core/call/CallManagerImpl.cpp index 6d0089a4..be1676df 100644 --- a/src/core/call/CallManagerImpl.cpp +++ b/src/core/call/CallManagerImpl.cpp @@ -1172,6 +1172,21 @@ namespace nynja { return call; } + std::vector CallManagerImpl::callsActiveElsewhere() { + std::vector result; + + std::lock_guard lock(_mutex_calls); + for (auto pair: _calls) { + if (!pair.second->isConference()) { + if (pair.second->isActiveElsewhere()) { + result.push_back(pair.second); + } + } + } + + return result; + } + //MARK: IOwnershipProtocol void CallManagerImpl::purge(ICall* call) { @@ -1309,7 +1324,14 @@ namespace nynja { } } - + const std::string& CallManagerImpl::getAccessToken(const ICall* call) { + if (_tokenProvider == NULL) { + return globalNynjaEmptyString; + } + + return _tokenProvider->accessToken(); + } + //MARK: GRPServiceDelegate void CallManagerImpl::updateCallMembers(const std::string& confId, const std::vector& members) diff --git a/src/core/call/CallManagerImpl.h b/src/core/call/CallManagerImpl.h index 0615252f..2c40f7cc 100644 --- a/src/core/call/CallManagerImpl.h +++ b/src/core/call/CallManagerImpl.h @@ -203,6 +203,8 @@ namespace nynja { const std::string& callId, const CreateCallCallback& callback) override; + std::vector callsActiveElsewhere() override; + protected: // MARK: - Protected @@ -219,6 +221,7 @@ namespace nynja { void timedOut(const ICall* call) override; void stopParticipantVideo(const ICall* call, const std::string& participantId) override; void stopParticipantScreen(const ICall* call, const std::string& participantId) override; + const std::string& getAccessToken(const ICall* call) override; //MARK: GRPServiceDelegate void updateCallMembers(const std::string& confId, diff --git a/src/core/call/TwoPartyCall.cpp b/src/core/call/TwoPartyCall.cpp index 5d1b5d17..925e9e6d 100644 --- a/src/core/call/TwoPartyCall.cpp +++ b/src/core/call/TwoPartyCall.cpp @@ -319,6 +319,30 @@ namespace nynja { CallImpl::start(); return true; } + + bool TwoPartyCall::isActiveElsewhere() const + { + bool isActiveElsewhere = false; + bool isActiveHere = false; + std::lock_guard lock(_mutex_call); + + if (_uaPtr != nullptr && _uaPtr->call().data().has_two_party() && + _uaPtr->call().data().two_party().peer_connection_info_size() > 0) + { + for(int i = 0; i < _uaPtr->call().data().two_party().peer_connection_info_size(); ++i) + { + const auto& pci = _uaPtr->call().data().two_party().peer_connection_info(i); + if (0 == pci.client_id().compare(_deviceId)) { + // Call has been accepted on my side + isActiveHere = true; + } else { + isActiveElsewhere = true; + } + } + } + + return (isActiveElsewhere && !isActiveHere); + } void TwoPartyCall::markAsDeleted() { CallImpl::markAsDeleted(); diff --git a/src/core/call/TwoPartyCall.h b/src/core/call/TwoPartyCall.h index 7ad787f8..978eee05 100644 --- a/src/core/call/TwoPartyCall.h +++ b/src/core/call/TwoPartyCall.h @@ -122,6 +122,7 @@ namespace nynja { long getMaxCallDuration() const override; bool pickup() override; + bool isActiveElsewhere() const override; protected: void markAsDeleted() override; diff --git a/src/core/client/Client.h b/src/core/client/Client.h index 1b768376..b6e2cd77 100644 --- a/src/core/client/Client.h +++ b/src/core/client/Client.h @@ -60,7 +60,8 @@ namespace nynja { explicit Client(ClientCallback* callback); virtual void openMediaChannel(const std::string& callId, - const std::string& myId) = 0; + const std::string& myId, + const std::string& accessToken) = 0; virtual void reOpenMediaChannel() = 0; virtual void closeMediaChannel() = 0; virtual void hangup() = 0; diff --git a/src/core/grpc/voice/GRPClient.cpp b/src/core/grpc/voice/GRPClient.cpp index 31def85c..b94b507d 100644 --- a/src/core/grpc/voice/GRPClient.cpp +++ b/src/core/grpc/voice/GRPClient.cpp @@ -18,6 +18,8 @@ #include "GRPService.h" #include "LogLock.h" +#include "ICommonConstants.h" + extern const char* gAccountId; extern const char* gInstanceId; @@ -53,7 +55,8 @@ namespace nynja { }; void GRPCClient::openMediaChannel(const std::string& callId, - const std::string& myId) + const std::string& myId, + const std::string& accessToken) { { std::lock_guard lk(async_stream_mutex_); @@ -71,6 +74,7 @@ namespace nynja { _callId = callId; _myId = myId; + _accessToken = accessToken; } cleanupThread(); @@ -347,6 +351,12 @@ namespace nynja { // mark the channel is running _fChannelShutdown = false; + if (!_accessToken.empty()) { + std::ostringstream accessTokenStream; + accessTokenStream << gAppTokenAuthorizationkenBearer << _accessToken; + context.AddMetadata(gAppAuthorizationHeader, accessTokenStream.str()); + } + context.AddMetadata(gAccountId, _account); context.AddMetadata(gInstanceId, ss.str()); diff --git a/src/core/grpc/voice/GRPClient.h b/src/core/grpc/voice/GRPClient.h index e8fd263f..c42f10d5 100644 --- a/src/core/grpc/voice/GRPClient.h +++ b/src/core/grpc/voice/GRPClient.h @@ -64,7 +64,8 @@ namespace nynja { protected: virtual void openMediaChannel(const std::string& callId, - const std::string& myId) override; + const std::string& myId, + const std::string& accessToken) override; virtual void reOpenMediaChannel() override; virtual void closeMediaChannel() override; virtual void hangup() override; @@ -119,7 +120,8 @@ namespace nynja { std::string _callId; std::string _myId; - + std::string _accessToken; + std::deque _write_queue; bool _write_packet_is_on_wire; gpr_timespec _time_keep_alive_snd; diff --git a/src/core/grpc/voice/GRPStatePackageUserActivity.cpp b/src/core/grpc/voice/GRPStatePackageUserActivity.cpp index 189a7d41..be4035ff 100644 --- a/src/core/grpc/voice/GRPStatePackageUserActivity.cpp +++ b/src/core/grpc/voice/GRPStatePackageUserActivity.cpp @@ -129,7 +129,7 @@ namespace nynja { return state; } - std::string getCallState(const nynjacoin::nccs::def::CallState& callState) { + std::string printCallState(const nynjacoin::nccs::def::CallState& callState) { std::stringstream ss; if(callState.has_invitation_sent()) { @@ -144,6 +144,17 @@ namespace nynja { return ss.str(); } + + std::string printPeerConnInfo(const ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo >& repeated_pci) { + std::stringstream ss; + + for (int i = 0; i < repeated_pci.size(); ++i) { + const auto& pci = repeated_pci.Get(i); + ss << i << " " << pci.client_id() << " conn: " << pci.connection_id() << " "; + } + + return ss.str(); + } void logUserActivity(const std::shared_ptr& uaptr) { @@ -152,9 +163,10 @@ namespace nynja { << " dir: " << ((uaptr->call().data().two_party().direction() == ::nynjacoin::nccs::def::CallDirection::INBOUND) ? "IN" : "OUT") << " from: " << uaptr->call().data().two_party().from().value() << " to: " << uaptr->call().data().two_party().to().value() - << " state: " << getCallState(uaptr->call().state()); + << " state: " << printCallState(uaptr->call().state()) + << " pci: " << printPeerConnInfo(uaptr->call().data().two_party().peer_connection_info()); - RTC_LOG(LS_VERBOSE) << "[CALL_STATE] grpc state: " << getCallState(uaptr->call().state()) << ": " << uaptr->call().id(); + RTC_LOG(LS_VERBOSE) << "[CALL_STATE] grpc state: " << printCallState(uaptr->call().state()) << ": " << uaptr->call().id(); } } } diff --git a/src/core/grpc/voice/definitions.pb.cc b/src/core/grpc/voice/definitions.pb.cc index f7d4c272..06c9c4c6 100644 --- a/src/core/grpc/voice/definitions.pb.cc +++ b/src/core/grpc/voice/definitions.pb.cc @@ -556,6 +556,7 @@ void InitDefaultsAnswerImpl() { #else ::google::protobuf::internal::InitProtobufDefaults(); #endif // GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS + protobuf_definitions_2eproto::InitDefaultsSsrcMapping(); protobuf_definitions_2eproto::InitDefaultsTrackInfo(); { void* ptr = &::nynjacoin::nccs::def::_Answer_default_instance_; @@ -758,6 +759,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUT ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::def::Answer, content_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::def::Answer, ssrc_mapping_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::def::Answer, track_info_), ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::def::AddMemberRequest, _internal_metadata_), @@ -796,8 +798,8 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROT { 116, -1, sizeof(::nynjacoin::nccs::def::SendMediaRequest)}, { 123, -1, sizeof(::nynjacoin::nccs::def::Offer)}, { 134, -1, sizeof(::nynjacoin::nccs::def::Answer)}, - { 141, -1, sizeof(::nynjacoin::nccs::def::AddMemberRequest)}, - { 149, -1, sizeof(::nynjacoin::nccs::def::AddMemberResponse)}, + { 142, -1, sizeof(::nynjacoin::nccs::def::AddMemberRequest)}, + { 150, -1, sizeof(::nynjacoin::nccs::def::AddMemberResponse)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -901,23 +903,24 @@ void AddDescriptorsImpl() { ".nccs.def.SsrcMapping\0221\n\ntrack_info\030\005 \003(" "\0132\035.nynjacoin.nccs.def.TrackInfo\022;\n\rmedi" "a_request\030\006 \003(\0132$.nynjacoin.nccs.def.Sen" - "dMediaRequest\"L\n\006Answer\022\017\n\007content\030\001 \001(\t" - "\0221\n\ntrack_info\030\005 \003(\0132\035.nynjacoin.nccs.de" - "f.TrackInfo\"\210\001\n\020AddMemberRequest\022,\n\007addr" - "ess\030\001 \001(\0132\033.nynjacoin.nccs.def.Address\0220" - "\n\006option\030\002 \003(\0162 .nynjacoin.nccs.def.Memb" - "erOption\022\024\n\014display_name\030\003 \001(\t\"T\n\021AddMem" - "berResponse\022\021\n\tmember_id\030\001 \001(\t\022,\n\007addres" - "s\030\002 \001(\0132\033.nynjacoin.nccs.def.Address**\n\r" - "CallDirection\022\013\n\007INBOUND\020\000\022\014\n\010OUTBOUND\020\001" - "*1\n\013CallEndedBy\022\n\n\006SYSTEM\020\000\022\n\n\006CALLER\020\001\022" - "\n\n\006CALLEE\020\002*4\n\020MediaContentType\022\t\n\005AUDIO" - "\020\000\022\t\n\005VIDEO\020\001\022\n\n\006SCREEN\020\003*\033\n\014MemberOptio" - "n\022\013\n\007DIALOUT\020\000B#\n\037com.nynjacoin.nccs.pro" - "tocol.defP\001b\006proto3" + "dMediaRequest\"\203\001\n\006Answer\022\017\n\007content\030\001 \001(" + "\t\0225\n\014ssrc_mapping\030\004 \003(\0132\037.nynjacoin.nccs" + ".def.SsrcMapping\0221\n\ntrack_info\030\005 \003(\0132\035.n" + "ynjacoin.nccs.def.TrackInfo\"\210\001\n\020AddMembe" + "rRequest\022,\n\007address\030\001 \001(\0132\033.nynjacoin.nc" + "cs.def.Address\0220\n\006option\030\002 \003(\0162 .nynjaco" + "in.nccs.def.MemberOption\022\024\n\014display_name" + "\030\003 \001(\t\"T\n\021AddMemberResponse\022\021\n\tmember_id" + "\030\001 \001(\t\022,\n\007address\030\002 \001(\0132\033.nynjacoin.nccs" + ".def.Address**\n\rCallDirection\022\013\n\007INBOUND" + "\020\000\022\014\n\010OUTBOUND\020\001*1\n\013CallEndedBy\022\n\n\006SYSTE" + "M\020\000\022\n\n\006CALLER\020\001\022\n\n\006CALLEE\020\002*4\n\020MediaCont" + "entType\022\t\n\005AUDIO\020\000\022\t\n\005VIDEO\020\001\022\n\n\006SCREEN\020" + "\003*\033\n\014MemberOption\022\013\n\007DIALOUT\020\000B#\n\037com.ny" + "njacoin.nccs.protocol.defP\001b\006proto3" }; ::google::protobuf::DescriptorPool::InternalAddGeneratedFile( - descriptor, 2699); + descriptor, 2755); ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile( "definitions.proto", &protobuf_RegisterTypes); } @@ -6883,6 +6886,7 @@ void Answer::InitAsDefaultInstance() { } #if !defined(_MSC_VER) || _MSC_VER >= 1900 const int Answer::kContentFieldNumber; +const int Answer::kSsrcMappingFieldNumber; const int Answer::kTrackInfoFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 @@ -6897,6 +6901,7 @@ Answer::Answer() Answer::Answer(const Answer& from) : ::google::protobuf::Message(), _internal_metadata_(NULL), + ssrc_mapping_(from.ssrc_mapping_), track_info_(from.track_info_), _cached_size_(0) { _internal_metadata_.MergeFrom(from._internal_metadata_); @@ -6950,6 +6955,7 @@ void Answer::Clear() { // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; + ssrc_mapping_.Clear(); track_info_.Clear(); content_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); _internal_metadata_.Clear(); @@ -6981,6 +6987,17 @@ bool Answer::MergePartialFromCodedStream( break; } + // repeated .nynjacoin.nccs.def.SsrcMapping ssrc_mapping = 4; + case 4: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(input, add_ssrc_mapping())); + } else { + goto handle_unusual; + } + break; + } + // repeated .nynjacoin.nccs.def.TrackInfo track_info = 5; case 5: { if (static_cast< ::google::protobuf::uint8>(tag) == @@ -7028,6 +7045,13 @@ void Answer::SerializeWithCachedSizes( 1, this->content(), output); } + // repeated .nynjacoin.nccs.def.SsrcMapping ssrc_mapping = 4; + for (unsigned int i = 0, + n = static_cast(this->ssrc_mapping_size()); i < n; i++) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 4, this->ssrc_mapping(static_cast(i)), output); + } + // repeated .nynjacoin.nccs.def.TrackInfo track_info = 5; for (unsigned int i = 0, n = static_cast(this->track_info_size()); i < n; i++) { @@ -7060,6 +7084,14 @@ void Answer::SerializeWithCachedSizes( 1, this->content(), target); } + // repeated .nynjacoin.nccs.def.SsrcMapping ssrc_mapping = 4; + for (unsigned int i = 0, + n = static_cast(this->ssrc_mapping_size()); i < n; i++) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 4, this->ssrc_mapping(static_cast(i)), deterministic, target); + } + // repeated .nynjacoin.nccs.def.TrackInfo track_info = 5; for (unsigned int i = 0, n = static_cast(this->track_info_size()); i < n; i++) { @@ -7085,6 +7117,17 @@ size_t Answer::ByteSizeLong() const { ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance())); } + // repeated .nynjacoin.nccs.def.SsrcMapping ssrc_mapping = 4; + { + unsigned int count = static_cast(this->ssrc_mapping_size()); + total_size += 1UL * count; + for (unsigned int i = 0; i < count; i++) { + total_size += + ::google::protobuf::internal::WireFormatLite::MessageSize( + this->ssrc_mapping(static_cast(i))); + } + } + // repeated .nynjacoin.nccs.def.TrackInfo track_info = 5; { unsigned int count = static_cast(this->track_info_size()); @@ -7132,6 +7175,7 @@ void Answer::MergeFrom(const Answer& from) { ::google::protobuf::uint32 cached_has_bits = 0; (void) cached_has_bits; + ssrc_mapping_.MergeFrom(from.ssrc_mapping_); track_info_.MergeFrom(from.track_info_); if (from.content().size() > 0) { @@ -7163,6 +7207,7 @@ void Answer::Swap(Answer* other) { } void Answer::InternalSwap(Answer* other) { using std::swap; + ssrc_mapping_.InternalSwap(&other->ssrc_mapping_); track_info_.InternalSwap(&other->track_info_); content_.Swap(&other->content_); _internal_metadata_.Swap(&other->_internal_metadata_); diff --git a/src/core/grpc/voice/definitions.pb.h b/src/core/grpc/voice/definitions.pb.h index 80cf1948..b2efb718 100644 --- a/src/core/grpc/voice/definitions.pb.h +++ b/src/core/grpc/voice/definitions.pb.h @@ -2759,6 +2759,18 @@ class Answer : public ::google::protobuf::Message /* @@protoc_insertion_point(cl // accessors ------------------------------------------------------- + // repeated .nynjacoin.nccs.def.SsrcMapping ssrc_mapping = 4; + int ssrc_mapping_size() const; + void clear_ssrc_mapping(); + static const int kSsrcMappingFieldNumber = 4; + const ::nynjacoin::nccs::def::SsrcMapping& ssrc_mapping(int index) const; + ::nynjacoin::nccs::def::SsrcMapping* mutable_ssrc_mapping(int index); + ::nynjacoin::nccs::def::SsrcMapping* add_ssrc_mapping(); + ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::def::SsrcMapping >* + mutable_ssrc_mapping(); + const ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::def::SsrcMapping >& + ssrc_mapping() const; + // repeated .nynjacoin.nccs.def.TrackInfo track_info = 5; int track_info_size() const; void clear_track_info(); @@ -2789,6 +2801,7 @@ class Answer : public ::google::protobuf::Message /* @@protoc_insertion_point(cl private: ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::def::SsrcMapping > ssrc_mapping_; ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::def::TrackInfo > track_info_; ::google::protobuf::internal::ArenaStringPtr content_; mutable int _cached_size_; @@ -4501,6 +4514,36 @@ inline void Answer::set_allocated_content(::std::string* content) { // @@protoc_insertion_point(field_set_allocated:nynjacoin.nccs.def.Answer.content) } +// repeated .nynjacoin.nccs.def.SsrcMapping ssrc_mapping = 4; +inline int Answer::ssrc_mapping_size() const { + return ssrc_mapping_.size(); +} +inline void Answer::clear_ssrc_mapping() { + ssrc_mapping_.Clear(); +} +inline const ::nynjacoin::nccs::def::SsrcMapping& Answer::ssrc_mapping(int index) const { + // @@protoc_insertion_point(field_get:nynjacoin.nccs.def.Answer.ssrc_mapping) + return ssrc_mapping_.Get(index); +} +inline ::nynjacoin::nccs::def::SsrcMapping* Answer::mutable_ssrc_mapping(int index) { + // @@protoc_insertion_point(field_mutable:nynjacoin.nccs.def.Answer.ssrc_mapping) + return ssrc_mapping_.Mutable(index); +} +inline ::nynjacoin::nccs::def::SsrcMapping* Answer::add_ssrc_mapping() { + // @@protoc_insertion_point(field_add:nynjacoin.nccs.def.Answer.ssrc_mapping) + return ssrc_mapping_.Add(); +} +inline ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::def::SsrcMapping >* +Answer::mutable_ssrc_mapping() { + // @@protoc_insertion_point(field_mutable_list:nynjacoin.nccs.def.Answer.ssrc_mapping) + return &ssrc_mapping_; +} +inline const ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::def::SsrcMapping >& +Answer::ssrc_mapping() const { + // @@protoc_insertion_point(field_list:nynjacoin.nccs.def.Answer.ssrc_mapping) + return ssrc_mapping_; +} + // repeated .nynjacoin.nccs.def.TrackInfo track_info = 5; inline int Answer::track_info_size() const { return track_info_.size(); diff --git a/src/core/grpc/voice/state_package_user_activity.pb.cc b/src/core/grpc/voice/state_package_user_activity.pb.cc index cfe3e403..2d7dd953 100644 --- a/src/core/grpc/voice/state_package_user_activity.pb.cc +++ b/src/core/grpc/voice/state_package_user_activity.pb.cc @@ -23,6 +23,11 @@ namespace nynjacoin { namespace nccs { namespace sp { namespace user_activity { +class PeerConnectionInfoDefaultTypeInternal { + public: + ::google::protobuf::internal::ExplicitlyConstructed + _instance; +} _PeerConnectionInfo_default_instance_; class TwoPartyDataDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed @@ -56,6 +61,27 @@ class UserActivityDefaultTypeInternal { } // namespace nccs } // namespace nynjacoin namespace protobuf_state_5fpackage_5fuser_5factivity_2eproto { +void InitDefaultsPeerConnectionInfoImpl() { + GOOGLE_PROTOBUF_VERIFY_VERSION; + +#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS + ::google::protobuf::internal::InitProtobufDefaultsForceUnique(); +#else + ::google::protobuf::internal::InitProtobufDefaults(); +#endif // GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS + { + void* ptr = &::nynjacoin::nccs::sp::user_activity::_PeerConnectionInfo_default_instance_; + new (ptr) ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo(); + ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); + } + ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo::InitAsDefaultInstance(); +} + +void InitDefaultsPeerConnectionInfo() { + static GOOGLE_PROTOBUF_DECLARE_ONCE(once); + ::google::protobuf::GoogleOnceInit(&once, &InitDefaultsPeerConnectionInfoImpl); +} + void InitDefaultsTwoPartyDataImpl() { GOOGLE_PROTOBUF_VERIFY_VERSION; @@ -67,6 +93,7 @@ void InitDefaultsTwoPartyDataImpl() { protobuf_definitions_2eproto::InitDefaultsAddress(); protobuf_google_2fprotobuf_2ftimestamp_2eproto::InitDefaultsTimestamp(); protobuf_definitions_2eproto::InitDefaultsOffer(); + protobuf_state_5fpackage_5fuser_5factivity_2eproto::InitDefaultsPeerConnectionInfo(); { void* ptr = &::nynjacoin::nccs::sp::user_activity::_TwoPartyData_default_instance_; new (ptr) ::nynjacoin::nccs::sp::user_activity::TwoPartyData(); @@ -170,9 +197,17 @@ void InitDefaultsUserActivity() { ::google::protobuf::GoogleOnceInit(&once, &InitDefaultsUserActivityImpl); } -::google::protobuf::Metadata file_level_metadata[5]; +::google::protobuf::Metadata file_level_metadata[6]; const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = { + ~0u, // no _has_bits_ + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo, client_id_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo, participant_id_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo, connection_id_), ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::TwoPartyData, _internal_metadata_), ~0u, // no _extensions_ @@ -185,6 +220,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUT GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::TwoPartyData, accept_time_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::TwoPartyData, complete_time_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::TwoPartyData, initial_offer_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::TwoPartyData, peer_connection_info_), ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::ConferenceData, _internal_metadata_), ~0u, // no _extensions_ @@ -228,14 +264,16 @@ const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUT GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::UserActivity, activity_), }; static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = { - { 0, -1, sizeof(::nynjacoin::nccs::sp::user_activity::TwoPartyData)}, - { 12, -1, sizeof(::nynjacoin::nccs::sp::user_activity::ConferenceData)}, - { 26, -1, sizeof(::nynjacoin::nccs::sp::user_activity::CallData)}, - { 34, -1, sizeof(::nynjacoin::nccs::sp::user_activity::CallActivity)}, - { 46, -1, sizeof(::nynjacoin::nccs::sp::user_activity::UserActivity)}, + { 0, -1, sizeof(::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo)}, + { 8, -1, sizeof(::nynjacoin::nccs::sp::user_activity::TwoPartyData)}, + { 21, -1, sizeof(::nynjacoin::nccs::sp::user_activity::ConferenceData)}, + { 35, -1, sizeof(::nynjacoin::nccs::sp::user_activity::CallData)}, + { 43, -1, sizeof(::nynjacoin::nccs::sp::user_activity::CallActivity)}, + { 55, -1, sizeof(::nynjacoin::nccs::sp::user_activity::UserActivity)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { + reinterpret_cast(&::nynjacoin::nccs::sp::user_activity::_PeerConnectionInfo_default_instance_), reinterpret_cast(&::nynjacoin::nccs::sp::user_activity::_TwoPartyData_default_instance_), reinterpret_cast(&::nynjacoin::nccs::sp::user_activity::_ConferenceData_default_instance_), reinterpret_cast(&::nynjacoin::nccs::sp::user_activity::_CallData_default_instance_), @@ -259,7 +297,7 @@ void protobuf_AssignDescriptorsOnce() { void protobuf_RegisterTypes(const ::std::string&) GOOGLE_PROTOBUF_ATTRIBUTE_COLD; void protobuf_RegisterTypes(const ::std::string&) { protobuf_AssignDescriptorsOnce(); - ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 5); + ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 6); } void AddDescriptorsImpl() { @@ -268,39 +306,44 @@ void AddDescriptorsImpl() { "\n!state_package_user_activity.proto\022\037nyn" "jacoin.nccs.sp.user_activity\032\037google/pro" "tobuf/timestamp.proto\032\021definitions.proto" - "\"\336\002\n\014TwoPartyData\0224\n\tdirection\030\001 \001(\0162!.n" - "ynjacoin.nccs.def.CallDirection\022)\n\004from\030" - "\002 \001(\0132\033.nynjacoin.nccs.def.Address\022\'\n\002to" - "\030\003 \001(\0132\033.nynjacoin.nccs.def.Address\022.\n\ns" - "tart_time\030\005 \001(\0132\032.google.protobuf.Timest" - "amp\022/\n\013accept_time\030\004 \001(\0132\032.google.protob" - "uf.Timestamp\0221\n\rcomplete_time\030\006 \001(\0132\032.go" - "ogle.protobuf.Timestamp\0220\n\rinitial_offer" - "\030\007 \001(\0132\031.nynjacoin.nccs.def.Offer\"\347\001\n\016Co" - "nferenceData\022\n\n\002id\030\001 \001(\t\022\021\n\tmember_id\030\002 " - "\001(\t\022\017\n\007subject\030\003 \001(\t\022\030\n\020owner_account_id" - "\030\004 \001(\t\022\035\n\025current_members_count\030\005 \001(\r\022.\n" - "\nstart_time\030\006 \001(\0132\032.google.protobuf.Time" - "stamp\022\021\n\tjoin_link\030\007 \001(\t\022\024\n\014chat_room_id" - "\030\010 \001(\t\022\023\n\013replace_ref\030\t \001(\t\"\240\001\n\010CallData" - "\022B\n\ttwo_party\030\001 \001(\0132-.nynjacoin.nccs.sp." - "user_activity.TwoPartyDataH\000\022E\n\nconferen" - "ce\030\002 \001(\0132/.nynjacoin.nccs.sp.user_activi" - "ty.ConferenceDataH\000B\t\n\007content\"\245\002\n\014CallA" - "ctivity\022\n\n\002id\030\001 \001(\t\022,\n\005state\030\002 \001(\0132\035.nyn" - "jacoin.nccs.def.CallState\022\025\n\rexternal_in" - "fo\030\003 \001(\t\022\023\n\013external_id\030\004 \001(\t\022@\n\022media_c" - "ontent_type\030\005 \003(\0162$.nynjacoin.nccs.def.M" - "ediaContentType\0227\n\004data\030\006 \001(\0132).nynjacoi" - "n.nccs.sp.user_activity.CallData\0224\n\tdire" - "ction\030\007 \001(\0162!.nynjacoin.nccs.def.CallDir" - "ection\"Y\n\014UserActivity\022=\n\004call\030\001 \001(\0132-.n" - "ynjacoin.nccs.sp.user_activity.CallActiv" - "ityH\000B\n\n\010activityB/\n+com.nynjacoin.nccs." - "protocol.sp.useractivityP\001b\006proto3" + "\"V\n\022PeerConnectionInfo\022\021\n\tclient_id\030\001 \001(" + "\t\022\026\n\016participant_id\030\002 \001(\t\022\025\n\rconnection_" + "id\030\003 \001(\t\"\261\003\n\014TwoPartyData\0224\n\tdirection\030\001" + " \001(\0162!.nynjacoin.nccs.def.CallDirection\022" + ")\n\004from\030\002 \001(\0132\033.nynjacoin.nccs.def.Addre" + "ss\022\'\n\002to\030\003 \001(\0132\033.nynjacoin.nccs.def.Addr" + "ess\022.\n\nstart_time\030\005 \001(\0132\032.google.protobu" + "f.Timestamp\022/\n\013accept_time\030\004 \001(\0132\032.googl" + "e.protobuf.Timestamp\0221\n\rcomplete_time\030\006 " + "\001(\0132\032.google.protobuf.Timestamp\0220\n\riniti" + "al_offer\030\007 \001(\0132\031.nynjacoin.nccs.def.Offe" + "r\022Q\n\024peer_connection_info\030\010 \003(\01323.nynjac" + "oin.nccs.sp.user_activity.PeerConnection" + "Info\"\347\001\n\016ConferenceData\022\n\n\002id\030\001 \001(\t\022\021\n\tm" + "ember_id\030\002 \001(\t\022\017\n\007subject\030\003 \001(\t\022\030\n\020owner" + "_account_id\030\004 \001(\t\022\035\n\025current_members_cou" + "nt\030\005 \001(\r\022.\n\nstart_time\030\006 \001(\0132\032.google.pr" + "otobuf.Timestamp\022\021\n\tjoin_link\030\007 \001(\t\022\024\n\014c" + "hat_room_id\030\010 \001(\t\022\023\n\013replace_ref\030\t \001(\t\"\240" + "\001\n\010CallData\022B\n\ttwo_party\030\001 \001(\0132-.nynjaco" + "in.nccs.sp.user_activity.TwoPartyDataH\000\022" + "E\n\nconference\030\002 \001(\0132/.nynjacoin.nccs.sp." + "user_activity.ConferenceDataH\000B\t\n\007conten" + "t\"\245\002\n\014CallActivity\022\n\n\002id\030\001 \001(\t\022,\n\005state\030" + "\002 \001(\0132\035.nynjacoin.nccs.def.CallState\022\025\n\r" + "external_info\030\003 \001(\t\022\023\n\013external_id\030\004 \001(\t" + "\022@\n\022media_content_type\030\005 \003(\0162$.nynjacoin" + ".nccs.def.MediaContentType\0227\n\004data\030\006 \001(\013" + "2).nynjacoin.nccs.sp.user_activity.CallD" + "ata\0224\n\tdirection\030\007 \001(\0162!.nynjacoin.nccs." + "def.CallDirection\"Y\n\014UserActivity\022=\n\004cal" + "l\030\001 \001(\0132-.nynjacoin.nccs.sp.user_activit" + "y.CallActivityH\000B\n\n\010activityB/\n+com.nynj" + "acoin.nccs.protocol.sp.useractivityP\001b\006p" + "roto3" }; ::google::protobuf::DescriptorPool::InternalAddGeneratedFile( - descriptor, 1314); + descriptor, 1485); ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile( "state_package_user_activity.proto", &protobuf_RegisterTypes); ::protobuf_google_2fprotobuf_2ftimestamp_2eproto::AddDescriptors(); @@ -323,6 +366,376 @@ namespace nccs { namespace sp { namespace user_activity { +// =================================================================== + +void PeerConnectionInfo::InitAsDefaultInstance() { +} +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int PeerConnectionInfo::kClientIdFieldNumber; +const int PeerConnectionInfo::kParticipantIdFieldNumber; +const int PeerConnectionInfo::kConnectionIdFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +PeerConnectionInfo::PeerConnectionInfo() + : ::google::protobuf::Message(), _internal_metadata_(NULL) { + if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) { + ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::InitDefaultsPeerConnectionInfo(); + } + SharedCtor(); + // @@protoc_insertion_point(constructor:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) +} +PeerConnectionInfo::PeerConnectionInfo(const PeerConnectionInfo& from) + : ::google::protobuf::Message(), + _internal_metadata_(NULL), + _cached_size_(0) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + client_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.client_id().size() > 0) { + client_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.client_id_); + } + participant_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.participant_id().size() > 0) { + participant_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.participant_id_); + } + connection_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.connection_id().size() > 0) { + connection_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.connection_id_); + } + // @@protoc_insertion_point(copy_constructor:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) +} + +void PeerConnectionInfo::SharedCtor() { + client_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + participant_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + connection_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + _cached_size_ = 0; +} + +PeerConnectionInfo::~PeerConnectionInfo() { + // @@protoc_insertion_point(destructor:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + SharedDtor(); +} + +void PeerConnectionInfo::SharedDtor() { + client_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + participant_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + connection_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} + +void PeerConnectionInfo::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* PeerConnectionInfo::descriptor() { + ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::protobuf_AssignDescriptorsOnce(); + return ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; +} + +const PeerConnectionInfo& PeerConnectionInfo::default_instance() { + ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::InitDefaultsPeerConnectionInfo(); + return *internal_default_instance(); +} + +PeerConnectionInfo* PeerConnectionInfo::New(::google::protobuf::Arena* arena) const { + PeerConnectionInfo* n = new PeerConnectionInfo; + if (arena != NULL) { + arena->Own(n); + } + return n; +} + +void PeerConnectionInfo::Clear() { +// @@protoc_insertion_point(message_clear_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + client_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + participant_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + connection_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + _internal_metadata_.Clear(); +} + +bool PeerConnectionInfo::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + for (;;) { + ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // string client_id = 1; + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_client_id())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->client_id().data(), static_cast(this->client_id().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id")); + } else { + goto handle_unusual; + } + break; + } + + // string participant_id = 2; + case 2: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_participant_id())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->participant_id().data(), static_cast(this->participant_id().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id")); + } else { + goto handle_unusual; + } + break; + } + + // string connection_id = 3; + case 3: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_connection_id())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->connection_id().data(), static_cast(this->connection_id().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id")); + } else { + goto handle_unusual; + } + break; + } + + default: { + handle_unusual: + if (tag == 0) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, _internal_metadata_.mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + return true; +failure: + // @@protoc_insertion_point(parse_failure:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + return false; +#undef DO_ +} + +void PeerConnectionInfo::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // string client_id = 1; + if (this->client_id().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->client_id().data(), static_cast(this->client_id().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 1, this->client_id(), output); + } + + // string participant_id = 2; + if (this->participant_id().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->participant_id().data(), static_cast(this->participant_id().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 2, this->participant_id(), output); + } + + // string connection_id = 3; + if (this->connection_id().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->connection_id().data(), static_cast(this->connection_id().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 3, this->connection_id(), output); + } + + if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), output); + } + // @@protoc_insertion_point(serialize_end:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) +} + +::google::protobuf::uint8* PeerConnectionInfo::InternalSerializeWithCachedSizesToArray( + bool deterministic, ::google::protobuf::uint8* target) const { + (void)deterministic; // Unused + // @@protoc_insertion_point(serialize_to_array_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // string client_id = 1; + if (this->client_id().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->client_id().data(), static_cast(this->client_id().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 1, this->client_id(), target); + } + + // string participant_id = 2; + if (this->participant_id().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->participant_id().data(), static_cast(this->participant_id().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 2, this->participant_id(), target); + } + + // string connection_id = 3; + if (this->connection_id().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->connection_id().data(), static_cast(this->connection_id().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 3, this->connection_id(), target); + } + + if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), target); + } + // @@protoc_insertion_point(serialize_to_array_end:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + return target; +} + +size_t PeerConnectionInfo::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + size_t total_size = 0; + + if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance())); + } + // string client_id = 1; + if (this->client_id().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->client_id()); + } + + // string participant_id = 2; + if (this->participant_id().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->participant_id()); + } + + // string connection_id = 3; + if (this->connection_id().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->connection_id()); + } + + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = cached_size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); + return total_size; +} + +void PeerConnectionInfo::MergeFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_merge_from_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + GOOGLE_DCHECK_NE(&from, this); + const PeerConnectionInfo* source = + ::google::protobuf::internal::DynamicCastToGenerated( + &from); + if (source == NULL) { + // @@protoc_insertion_point(generalized_merge_from_cast_fail:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + // @@protoc_insertion_point(generalized_merge_from_cast_success:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + MergeFrom(*source); + } +} + +void PeerConnectionInfo::MergeFrom(const PeerConnectionInfo& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + if (from.client_id().size() > 0) { + + client_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.client_id_); + } + if (from.participant_id().size() > 0) { + + participant_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.participant_id_); + } + if (from.connection_id().size() > 0) { + + connection_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.connection_id_); + } +} + +void PeerConnectionInfo::CopyFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_copy_from_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void PeerConnectionInfo::CopyFrom(const PeerConnectionInfo& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool PeerConnectionInfo::IsInitialized() const { + return true; +} + +void PeerConnectionInfo::Swap(PeerConnectionInfo* other) { + if (other == this) return; + InternalSwap(other); +} +void PeerConnectionInfo::InternalSwap(PeerConnectionInfo* other) { + using std::swap; + client_id_.Swap(&other->client_id_); + participant_id_.Swap(&other->participant_id_); + connection_id_.Swap(&other->connection_id_); + _internal_metadata_.Swap(&other->_internal_metadata_); + swap(_cached_size_, other->_cached_size_); +} + +::google::protobuf::Metadata PeerConnectionInfo::GetMetadata() const { + protobuf_state_5fpackage_5fuser_5factivity_2eproto::protobuf_AssignDescriptorsOnce(); + return ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::file_level_metadata[kIndexInFileMessages]; +} + + // =================================================================== void TwoPartyData::InitAsDefaultInstance() { @@ -383,6 +796,7 @@ const int TwoPartyData::kStartTimeFieldNumber; const int TwoPartyData::kAcceptTimeFieldNumber; const int TwoPartyData::kCompleteTimeFieldNumber; const int TwoPartyData::kInitialOfferFieldNumber; +const int TwoPartyData::kPeerConnectionInfoFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 TwoPartyData::TwoPartyData() @@ -396,6 +810,7 @@ TwoPartyData::TwoPartyData() TwoPartyData::TwoPartyData(const TwoPartyData& from) : ::google::protobuf::Message(), _internal_metadata_(NULL), + peer_connection_info_(from.peer_connection_info_), _cached_size_(0) { _internal_metadata_.MergeFrom(from._internal_metadata_); if (from.has_from()) { @@ -482,6 +897,7 @@ void TwoPartyData::Clear() { // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; + peer_connection_info_.Clear(); if (GetArenaNoVirtual() == NULL && from_ != NULL) { delete from_; } @@ -607,6 +1023,17 @@ bool TwoPartyData::MergePartialFromCodedStream( break; } + // repeated .nynjacoin.nccs.sp.user_activity.PeerConnectionInfo peer_connection_info = 8; + case 8: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(66u /* 66 & 0xFF */)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(input, add_peer_connection_info())); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -675,6 +1102,13 @@ void TwoPartyData::SerializeWithCachedSizes( 7, *this->initial_offer_, output); } + // repeated .nynjacoin.nccs.sp.user_activity.PeerConnectionInfo peer_connection_info = 8; + for (unsigned int i = 0, + n = static_cast(this->peer_connection_info_size()); i < n; i++) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 8, this->peer_connection_info(static_cast(i)), output); + } + if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), output); @@ -737,6 +1171,14 @@ void TwoPartyData::SerializeWithCachedSizes( 7, *this->initial_offer_, deterministic, target); } + // repeated .nynjacoin.nccs.sp.user_activity.PeerConnectionInfo peer_connection_info = 8; + for (unsigned int i = 0, + n = static_cast(this->peer_connection_info_size()); i < n; i++) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 8, this->peer_connection_info(static_cast(i)), deterministic, target); + } + if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), target); @@ -754,6 +1196,17 @@ size_t TwoPartyData::ByteSizeLong() const { ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance())); } + // repeated .nynjacoin.nccs.sp.user_activity.PeerConnectionInfo peer_connection_info = 8; + { + unsigned int count = static_cast(this->peer_connection_info_size()); + total_size += 1UL * count; + for (unsigned int i = 0; i < count; i++) { + total_size += + ::google::protobuf::internal::WireFormatLite::MessageSize( + this->peer_connection_info(static_cast(i))); + } + } + // .nynjacoin.nccs.def.Address from = 2; if (this->has_from()) { total_size += 1 + @@ -831,6 +1284,7 @@ void TwoPartyData::MergeFrom(const TwoPartyData& from) { ::google::protobuf::uint32 cached_has_bits = 0; (void) cached_has_bits; + peer_connection_info_.MergeFrom(from.peer_connection_info_); if (from.has_from()) { mutable_from()->::nynjacoin::nccs::def::Address::MergeFrom(from.from()); } @@ -878,6 +1332,7 @@ void TwoPartyData::Swap(TwoPartyData* other) { } void TwoPartyData::InternalSwap(TwoPartyData* other) { using std::swap; + peer_connection_info_.InternalSwap(&other->peer_connection_info_); swap(from_, other->from_); swap(to_, other->to_); swap(accept_time_, other->accept_time_); diff --git a/src/core/grpc/voice/state_package_user_activity.pb.h b/src/core/grpc/voice/state_package_user_activity.pb.h index a150edb0..5e01d4d6 100644 --- a/src/core/grpc/voice/state_package_user_activity.pb.h +++ b/src/core/grpc/voice/state_package_user_activity.pb.h @@ -38,12 +38,14 @@ namespace protobuf_state_5fpackage_5fuser_5factivity_2eproto { struct TableStruct { static const ::google::protobuf::internal::ParseTableField entries[]; static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; - static const ::google::protobuf::internal::ParseTable schema[5]; + static const ::google::protobuf::internal::ParseTable schema[6]; static const ::google::protobuf::internal::FieldMetadata field_metadata[]; static const ::google::protobuf::internal::SerializationTable serialization_table[]; static const ::google::protobuf::uint32 offsets[]; }; void AddDescriptors(); +void InitDefaultsPeerConnectionInfoImpl(); +void InitDefaultsPeerConnectionInfo(); void InitDefaultsTwoPartyDataImpl(); void InitDefaultsTwoPartyData(); void InitDefaultsConferenceDataImpl(); @@ -55,6 +57,7 @@ void InitDefaultsCallActivity(); void InitDefaultsUserActivityImpl(); void InitDefaultsUserActivity(); inline void InitDefaults() { + InitDefaultsPeerConnectionInfo(); InitDefaultsTwoPartyData(); InitDefaultsConferenceData(); InitDefaultsCallData(); @@ -75,6 +78,9 @@ extern CallDataDefaultTypeInternal _CallData_default_instance_; class ConferenceData; class ConferenceDataDefaultTypeInternal; extern ConferenceDataDefaultTypeInternal _ConferenceData_default_instance_; +class PeerConnectionInfo; +class PeerConnectionInfoDefaultTypeInternal; +extern PeerConnectionInfoDefaultTypeInternal _PeerConnectionInfo_default_instance_; class TwoPartyData; class TwoPartyDataDefaultTypeInternal; extern TwoPartyDataDefaultTypeInternal _TwoPartyData_default_instance_; @@ -92,6 +98,143 @@ namespace user_activity { // =================================================================== +class PeerConnectionInfo : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) */ { + public: + PeerConnectionInfo(); + virtual ~PeerConnectionInfo(); + + PeerConnectionInfo(const PeerConnectionInfo& from); + + inline PeerConnectionInfo& operator=(const PeerConnectionInfo& from) { + CopyFrom(from); + return *this; + } + #if LANG_CXX11 + PeerConnectionInfo(PeerConnectionInfo&& from) noexcept + : PeerConnectionInfo() { + *this = ::std::move(from); + } + + inline PeerConnectionInfo& operator=(PeerConnectionInfo&& from) noexcept { + if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { + if (this != &from) InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + #endif + static const ::google::protobuf::Descriptor* descriptor(); + static const PeerConnectionInfo& default_instance(); + + static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY + static inline const PeerConnectionInfo* internal_default_instance() { + return reinterpret_cast( + &_PeerConnectionInfo_default_instance_); + } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 0; + + void Swap(PeerConnectionInfo* other); + friend void swap(PeerConnectionInfo& a, PeerConnectionInfo& b) { + a.Swap(&b); + } + + // implements Message ---------------------------------------------- + + inline PeerConnectionInfo* New() const PROTOBUF_FINAL { return New(NULL); } + + PeerConnectionInfo* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL; + void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL; + void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL; + void CopyFrom(const PeerConnectionInfo& from); + void MergeFrom(const PeerConnectionInfo& from); + void Clear() PROTOBUF_FINAL; + bool IsInitialized() const PROTOBUF_FINAL; + + size_t ByteSizeLong() const PROTOBUF_FINAL; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL; + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; + ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( + bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; + int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const PROTOBUF_FINAL; + void InternalSwap(PeerConnectionInfo* other); + private: + inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + return NULL; + } + inline void* MaybeArenaPtr() const { + return NULL; + } + public: + + ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // string client_id = 1; + void clear_client_id(); + static const int kClientIdFieldNumber = 1; + const ::std::string& client_id() const; + void set_client_id(const ::std::string& value); + #if LANG_CXX11 + void set_client_id(::std::string&& value); + #endif + void set_client_id(const char* value); + void set_client_id(const char* value, size_t size); + ::std::string* mutable_client_id(); + ::std::string* release_client_id(); + void set_allocated_client_id(::std::string* client_id); + + // string participant_id = 2; + void clear_participant_id(); + static const int kParticipantIdFieldNumber = 2; + const ::std::string& participant_id() const; + void set_participant_id(const ::std::string& value); + #if LANG_CXX11 + void set_participant_id(::std::string&& value); + #endif + void set_participant_id(const char* value); + void set_participant_id(const char* value, size_t size); + ::std::string* mutable_participant_id(); + ::std::string* release_participant_id(); + void set_allocated_participant_id(::std::string* participant_id); + + // string connection_id = 3; + void clear_connection_id(); + static const int kConnectionIdFieldNumber = 3; + const ::std::string& connection_id() const; + void set_connection_id(const ::std::string& value); + #if LANG_CXX11 + void set_connection_id(::std::string&& value); + #endif + void set_connection_id(const char* value); + void set_connection_id(const char* value, size_t size); + ::std::string* mutable_connection_id(); + ::std::string* release_connection_id(); + void set_allocated_connection_id(::std::string* connection_id); + + // @@protoc_insertion_point(class_scope:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + private: + + ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::google::protobuf::internal::ArenaStringPtr client_id_; + ::google::protobuf::internal::ArenaStringPtr participant_id_; + ::google::protobuf::internal::ArenaStringPtr connection_id_; + mutable int _cached_size_; + friend struct ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::TableStruct; + friend void ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::InitDefaultsPeerConnectionInfoImpl(); +}; +// ------------------------------------------------------------------- + class TwoPartyData : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:nynjacoin.nccs.sp.user_activity.TwoPartyData) */ { public: TwoPartyData(); @@ -127,7 +270,7 @@ class TwoPartyData : public ::google::protobuf::Message /* @@protoc_insertion_po &_TwoPartyData_default_instance_); } static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = - 0; + 1; void Swap(TwoPartyData* other); friend void swap(TwoPartyData& a, TwoPartyData& b) { @@ -174,6 +317,18 @@ class TwoPartyData : public ::google::protobuf::Message /* @@protoc_insertion_po // accessors ------------------------------------------------------- + // repeated .nynjacoin.nccs.sp.user_activity.PeerConnectionInfo peer_connection_info = 8; + int peer_connection_info_size() const; + void clear_peer_connection_info(); + static const int kPeerConnectionInfoFieldNumber = 8; + const ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo& peer_connection_info(int index) const; + ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo* mutable_peer_connection_info(int index); + ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo* add_peer_connection_info(); + ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo >* + mutable_peer_connection_info(); + const ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo >& + peer_connection_info() const; + // .nynjacoin.nccs.def.Address from = 2; bool has_from() const; void clear_from(); @@ -238,6 +393,7 @@ class TwoPartyData : public ::google::protobuf::Message /* @@protoc_insertion_po private: ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo > peer_connection_info_; ::nynjacoin::nccs::def::Address* from_; ::nynjacoin::nccs::def::Address* to_; ::google::protobuf::Timestamp* accept_time_; @@ -286,7 +442,7 @@ class ConferenceData : public ::google::protobuf::Message /* @@protoc_insertion_ &_ConferenceData_default_instance_); } static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = - 1; + 2; void Swap(ConferenceData* other); friend void swap(ConferenceData& a, ConferenceData& b) { @@ -506,7 +662,7 @@ class CallData : public ::google::protobuf::Message /* @@protoc_insertion_point( &_CallData_default_instance_); } static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = - 2; + 3; void Swap(CallData* other); friend void swap(CallData& a, CallData& b) { @@ -630,7 +786,7 @@ class CallActivity : public ::google::protobuf::Message /* @@protoc_insertion_po &_CallActivity_default_instance_); } static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = - 3; + 4; void Swap(CallActivity* other); friend void swap(CallActivity& a, CallActivity& b) { @@ -811,7 +967,7 @@ class UserActivity : public ::google::protobuf::Message /* @@protoc_insertion_po &_UserActivity_default_instance_); } static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = - 4; + 5; void Swap(UserActivity* other); friend void swap(UserActivity& a, UserActivity& b) { @@ -896,6 +1052,169 @@ class UserActivity : public ::google::protobuf::Message /* @@protoc_insertion_po #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wstrict-aliasing" #endif // __GNUC__ +// PeerConnectionInfo + +// string client_id = 1; +inline void PeerConnectionInfo::clear_client_id() { + client_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& PeerConnectionInfo::client_id() const { + // @@protoc_insertion_point(field_get:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) + return client_id_.GetNoArena(); +} +inline void PeerConnectionInfo::set_client_id(const ::std::string& value) { + + client_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) +} +#if LANG_CXX11 +inline void PeerConnectionInfo::set_client_id(::std::string&& value) { + + client_id_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) +} +#endif +inline void PeerConnectionInfo::set_client_id(const char* value) { + GOOGLE_DCHECK(value != NULL); + + client_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) +} +inline void PeerConnectionInfo::set_client_id(const char* value, size_t size) { + + client_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) +} +inline ::std::string* PeerConnectionInfo::mutable_client_id() { + + // @@protoc_insertion_point(field_mutable:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) + return client_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* PeerConnectionInfo::release_client_id() { + // @@protoc_insertion_point(field_release:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) + + return client_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void PeerConnectionInfo::set_allocated_client_id(::std::string* client_id) { + if (client_id != NULL) { + + } else { + + } + client_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), client_id); + // @@protoc_insertion_point(field_set_allocated:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) +} + +// string participant_id = 2; +inline void PeerConnectionInfo::clear_participant_id() { + participant_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& PeerConnectionInfo::participant_id() const { + // @@protoc_insertion_point(field_get:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) + return participant_id_.GetNoArena(); +} +inline void PeerConnectionInfo::set_participant_id(const ::std::string& value) { + + participant_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) +} +#if LANG_CXX11 +inline void PeerConnectionInfo::set_participant_id(::std::string&& value) { + + participant_id_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) +} +#endif +inline void PeerConnectionInfo::set_participant_id(const char* value) { + GOOGLE_DCHECK(value != NULL); + + participant_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) +} +inline void PeerConnectionInfo::set_participant_id(const char* value, size_t size) { + + participant_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) +} +inline ::std::string* PeerConnectionInfo::mutable_participant_id() { + + // @@protoc_insertion_point(field_mutable:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) + return participant_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* PeerConnectionInfo::release_participant_id() { + // @@protoc_insertion_point(field_release:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) + + return participant_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void PeerConnectionInfo::set_allocated_participant_id(::std::string* participant_id) { + if (participant_id != NULL) { + + } else { + + } + participant_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), participant_id); + // @@protoc_insertion_point(field_set_allocated:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) +} + +// string connection_id = 3; +inline void PeerConnectionInfo::clear_connection_id() { + connection_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& PeerConnectionInfo::connection_id() const { + // @@protoc_insertion_point(field_get:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) + return connection_id_.GetNoArena(); +} +inline void PeerConnectionInfo::set_connection_id(const ::std::string& value) { + + connection_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) +} +#if LANG_CXX11 +inline void PeerConnectionInfo::set_connection_id(::std::string&& value) { + + connection_id_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) +} +#endif +inline void PeerConnectionInfo::set_connection_id(const char* value) { + GOOGLE_DCHECK(value != NULL); + + connection_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) +} +inline void PeerConnectionInfo::set_connection_id(const char* value, size_t size) { + + connection_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) +} +inline ::std::string* PeerConnectionInfo::mutable_connection_id() { + + // @@protoc_insertion_point(field_mutable:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) + return connection_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* PeerConnectionInfo::release_connection_id() { + // @@protoc_insertion_point(field_release:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) + + return connection_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void PeerConnectionInfo::set_allocated_connection_id(::std::string* connection_id) { + if (connection_id != NULL) { + + } else { + + } + connection_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), connection_id); + // @@protoc_insertion_point(field_set_allocated:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) +} + +// ------------------------------------------------------------------- + // TwoPartyData // .nynjacoin.nccs.def.CallDirection direction = 1; @@ -1179,6 +1498,36 @@ inline void TwoPartyData::set_allocated_initial_offer(::nynjacoin::nccs::def::Of // @@protoc_insertion_point(field_set_allocated:nynjacoin.nccs.sp.user_activity.TwoPartyData.initial_offer) } +// repeated .nynjacoin.nccs.sp.user_activity.PeerConnectionInfo peer_connection_info = 8; +inline int TwoPartyData::peer_connection_info_size() const { + return peer_connection_info_.size(); +} +inline void TwoPartyData::clear_peer_connection_info() { + peer_connection_info_.Clear(); +} +inline const ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo& TwoPartyData::peer_connection_info(int index) const { + // @@protoc_insertion_point(field_get:nynjacoin.nccs.sp.user_activity.TwoPartyData.peer_connection_info) + return peer_connection_info_.Get(index); +} +inline ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo* TwoPartyData::mutable_peer_connection_info(int index) { + // @@protoc_insertion_point(field_mutable:nynjacoin.nccs.sp.user_activity.TwoPartyData.peer_connection_info) + return peer_connection_info_.Mutable(index); +} +inline ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo* TwoPartyData::add_peer_connection_info() { + // @@protoc_insertion_point(field_add:nynjacoin.nccs.sp.user_activity.TwoPartyData.peer_connection_info) + return peer_connection_info_.Add(); +} +inline ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo >* +TwoPartyData::mutable_peer_connection_info() { + // @@protoc_insertion_point(field_mutable_list:nynjacoin.nccs.sp.user_activity.TwoPartyData.peer_connection_info) + return &peer_connection_info_; +} +inline const ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo >& +TwoPartyData::peer_connection_info() const { + // @@protoc_insertion_point(field_list:nynjacoin.nccs.sp.user_activity.TwoPartyData.peer_connection_info) + return peer_connection_info_; +} + // ------------------------------------------------------------------- // ConferenceData @@ -2071,6 +2420,8 @@ inline UserActivity::ActivityCase UserActivity::activity_case() const { // ------------------------------------------------------------------- +// ------------------------------------------------------------------- + // @@protoc_insertion_point(namespace_scope) diff --git a/src/core/interface/ICall.h b/src/core/interface/ICall.h index 25d988d3..cd30bc52 100644 --- a/src/core/interface/ICall.h +++ b/src/core/interface/ICall.h @@ -134,6 +134,7 @@ namespace nynja { virtual CallParticipantPtr getParticipantByTrackId(const std::string& trackId) = 0; virtual void enableVideoForTrack(const std::string& participantId, bool enable) = 0; virtual bool pickup() = 0; + virtual bool isActiveElsewhere() const = 0; }; typedef std::shared_ptr CallPtr; diff --git a/src/core/interface/ICallManager.h b/src/core/interface/ICallManager.h index a55672c3..08f6917f 100644 --- a/src/core/interface/ICallManager.h +++ b/src/core/interface/ICallManager.h @@ -265,6 +265,7 @@ namespace nynja { const std::string& callId, const CreateCallCallback& callback) = 0; + virtual std::vector callsActiveElsewhere() = 0; }; typedef std::shared_ptr CallManagerPtr; diff --git a/src/core/proto b/src/core/proto index 007ac66a..ced6152f 160000 --- a/src/core/proto +++ b/src/core/proto @@ -1 +1 @@ -Subproject commit 007ac66a75cb1b7b2dd741a622a0aebe5050899d +Subproject commit ced6152fa6bc7dc8ee8fcec3d867b2d66924f082 diff --git a/src/core/utility/IOwnershipProtocol.h b/src/core/utility/IOwnershipProtocol.h index 7e94fc9c..41d1c1e1 100644 --- a/src/core/utility/IOwnershipProtocol.h +++ b/src/core/utility/IOwnershipProtocol.h @@ -26,6 +26,7 @@ namespace nynja { virtual void timedOut(const C*) = 0; virtual void stopParticipantVideo(const C*, const std::string& participantId) = 0; virtual void stopParticipantScreen(const C*, const std::string& participantId) = 0; + virtual const std::string& getAccessToken(const C*) = 0; }; } diff --git a/src/sdk/ios/api/CallManager.h b/src/sdk/ios/api/CallManager.h index ac091c5f..c2de5214 100644 --- a/src/sdk/ios/api/CallManager.h +++ b/src/sdk/ios/api/CallManager.h @@ -157,4 +157,6 @@ typedef NS_ENUM(NSUInteger, DialOption) { - (NYNCall * _Nullable) pickUpCallWithId: (NSString* _Nonnull) callId withCompletion: (NYNPickupCallBlock _Nonnull ) completion; +- (NSArray* _Nonnull) callsActiveElsewhere; + @end diff --git a/src/sdk/ios/api/CallManager.mm b/src/sdk/ios/api/CallManager.mm index 9b72d00c..365ebb38 100644 --- a/src/sdk/ios/api/CallManager.mm +++ b/src/sdk/ios/api/CallManager.mm @@ -1436,6 +1436,19 @@ public: return [self createCallWithId: newCall->getId()]; } +- (NSArray* _Nonnull) callsActiveElsewhere +{ + NSMutableArray* result = [[NSMutableArray alloc] init]; + auto calls = _callManagerPtr->callsActiveElsewhere(); + + for (auto call: calls) { + NYNCall* n = [self createCallWithCallPtr: call]; + [result addObject: n]; + } + + return result; +} + //MARK: - RTCEAGLVideoViewDelegate - (void)videoView:(RTCEAGLVideoView *)videoView didChangeVideoSize:(CGSize)size { -- GitLab From fc71001114db01d90cf7ac5bb3ab3ece929d787e Mon Sep 17 00:00:00 2001 From: Angel Terziev Date: Thu, 28 May 2020 15:36:40 +0300 Subject: [PATCH 05/11] Renamed gRPC PeerConnectionInfo to P2PParticipantInfo --- src/core/call/TwoPartyCall.cpp | 6 +- .../voice/GRPStatePackageUserActivity.cpp | 10 +- .../voice/state_package_user_activity.pb.cc | 236 +++++++++--------- .../voice/state_package_user_activity.pb.h | 226 ++++++++--------- src/core/proto | 2 +- 5 files changed, 240 insertions(+), 240 deletions(-) diff --git a/src/core/call/TwoPartyCall.cpp b/src/core/call/TwoPartyCall.cpp index 925e9e6d..b8b4ab1e 100644 --- a/src/core/call/TwoPartyCall.cpp +++ b/src/core/call/TwoPartyCall.cpp @@ -327,11 +327,11 @@ namespace nynja { std::lock_guard lock(_mutex_call); if (_uaPtr != nullptr && _uaPtr->call().data().has_two_party() && - _uaPtr->call().data().two_party().peer_connection_info_size() > 0) + _uaPtr->call().data().two_party().participant_info_size() > 0) { - for(int i = 0; i < _uaPtr->call().data().two_party().peer_connection_info_size(); ++i) + for(int i = 0; i < _uaPtr->call().data().two_party().participant_info_size(); ++i) { - const auto& pci = _uaPtr->call().data().two_party().peer_connection_info(i); + const auto& pci = _uaPtr->call().data().two_party().participant_info(i); if (0 == pci.client_id().compare(_deviceId)) { // Call has been accepted on my side isActiveHere = true; diff --git a/src/core/grpc/voice/GRPStatePackageUserActivity.cpp b/src/core/grpc/voice/GRPStatePackageUserActivity.cpp index be4035ff..a97be49d 100644 --- a/src/core/grpc/voice/GRPStatePackageUserActivity.cpp +++ b/src/core/grpc/voice/GRPStatePackageUserActivity.cpp @@ -145,12 +145,12 @@ namespace nynja { return ss.str(); } - std::string printPeerConnInfo(const ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo >& repeated_pci) { + std::string printPeerConnInfo(const ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo >& repeated_pi) { std::stringstream ss; - for (int i = 0; i < repeated_pci.size(); ++i) { - const auto& pci = repeated_pci.Get(i); - ss << i << " " << pci.client_id() << " conn: " << pci.connection_id() << " "; + for (int i = 0; i < repeated_pi.size(); ++i) { + const auto& pi = repeated_pi.Get(i); + ss << i << " " << pi.client_id() << " conn: " << pi.connection_id() << " "; } return ss.str(); @@ -164,7 +164,7 @@ namespace nynja { << " from: " << uaptr->call().data().two_party().from().value() << " to: " << uaptr->call().data().two_party().to().value() << " state: " << printCallState(uaptr->call().state()) - << " pci: " << printPeerConnInfo(uaptr->call().data().two_party().peer_connection_info()); + << " pi: " << printPeerConnInfo(uaptr->call().data().two_party().participant_info()); RTC_LOG(LS_VERBOSE) << "[CALL_STATE] grpc state: " << printCallState(uaptr->call().state()) << ": " << uaptr->call().id(); } diff --git a/src/core/grpc/voice/state_package_user_activity.pb.cc b/src/core/grpc/voice/state_package_user_activity.pb.cc index 2d7dd953..c52a6a35 100644 --- a/src/core/grpc/voice/state_package_user_activity.pb.cc +++ b/src/core/grpc/voice/state_package_user_activity.pb.cc @@ -23,11 +23,11 @@ namespace nynjacoin { namespace nccs { namespace sp { namespace user_activity { -class PeerConnectionInfoDefaultTypeInternal { +class P2PParticipantInfoDefaultTypeInternal { public: - ::google::protobuf::internal::ExplicitlyConstructed + ::google::protobuf::internal::ExplicitlyConstructed _instance; -} _PeerConnectionInfo_default_instance_; +} _P2PParticipantInfo_default_instance_; class TwoPartyDataDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed @@ -61,7 +61,7 @@ class UserActivityDefaultTypeInternal { } // namespace nccs } // namespace nynjacoin namespace protobuf_state_5fpackage_5fuser_5factivity_2eproto { -void InitDefaultsPeerConnectionInfoImpl() { +void InitDefaultsP2PParticipantInfoImpl() { GOOGLE_PROTOBUF_VERIFY_VERSION; #ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS @@ -70,16 +70,16 @@ void InitDefaultsPeerConnectionInfoImpl() { ::google::protobuf::internal::InitProtobufDefaults(); #endif // GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS { - void* ptr = &::nynjacoin::nccs::sp::user_activity::_PeerConnectionInfo_default_instance_; - new (ptr) ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo(); + void* ptr = &::nynjacoin::nccs::sp::user_activity::_P2PParticipantInfo_default_instance_; + new (ptr) ::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo(); ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); } - ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo::InitAsDefaultInstance(); + ::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo::InitAsDefaultInstance(); } -void InitDefaultsPeerConnectionInfo() { +void InitDefaultsP2PParticipantInfo() { static GOOGLE_PROTOBUF_DECLARE_ONCE(once); - ::google::protobuf::GoogleOnceInit(&once, &InitDefaultsPeerConnectionInfoImpl); + ::google::protobuf::GoogleOnceInit(&once, &InitDefaultsP2PParticipantInfoImpl); } void InitDefaultsTwoPartyDataImpl() { @@ -93,7 +93,7 @@ void InitDefaultsTwoPartyDataImpl() { protobuf_definitions_2eproto::InitDefaultsAddress(); protobuf_google_2fprotobuf_2ftimestamp_2eproto::InitDefaultsTimestamp(); protobuf_definitions_2eproto::InitDefaultsOffer(); - protobuf_state_5fpackage_5fuser_5factivity_2eproto::InitDefaultsPeerConnectionInfo(); + protobuf_state_5fpackage_5fuser_5factivity_2eproto::InitDefaultsP2PParticipantInfo(); { void* ptr = &::nynjacoin::nccs::sp::user_activity::_TwoPartyData_default_instance_; new (ptr) ::nynjacoin::nccs::sp::user_activity::TwoPartyData(); @@ -201,13 +201,13 @@ void InitDefaultsUserActivity() { const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = { ~0u, // no _has_bits_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo, _internal_metadata_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo, _internal_metadata_), ~0u, // no _extensions_ ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo, client_id_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo, participant_id_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo, connection_id_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo, client_id_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo, participant_id_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo, connection_id_), ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::TwoPartyData, _internal_metadata_), ~0u, // no _extensions_ @@ -220,7 +220,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUT GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::TwoPartyData, accept_time_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::TwoPartyData, complete_time_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::TwoPartyData, initial_offer_), - GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::TwoPartyData, peer_connection_info_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::TwoPartyData, participant_info_), ~0u, // no _has_bits_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::ConferenceData, _internal_metadata_), ~0u, // no _extensions_ @@ -264,7 +264,7 @@ const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUT GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::sp::user_activity::UserActivity, activity_), }; static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = { - { 0, -1, sizeof(::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo)}, + { 0, -1, sizeof(::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo)}, { 8, -1, sizeof(::nynjacoin::nccs::sp::user_activity::TwoPartyData)}, { 21, -1, sizeof(::nynjacoin::nccs::sp::user_activity::ConferenceData)}, { 35, -1, sizeof(::nynjacoin::nccs::sp::user_activity::CallData)}, @@ -273,7 +273,7 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROT }; static ::google::protobuf::Message const * const file_default_instances[] = { - reinterpret_cast(&::nynjacoin::nccs::sp::user_activity::_PeerConnectionInfo_default_instance_), + reinterpret_cast(&::nynjacoin::nccs::sp::user_activity::_P2PParticipantInfo_default_instance_), reinterpret_cast(&::nynjacoin::nccs::sp::user_activity::_TwoPartyData_default_instance_), reinterpret_cast(&::nynjacoin::nccs::sp::user_activity::_ConferenceData_default_instance_), reinterpret_cast(&::nynjacoin::nccs::sp::user_activity::_CallData_default_instance_), @@ -306,9 +306,9 @@ void AddDescriptorsImpl() { "\n!state_package_user_activity.proto\022\037nyn" "jacoin.nccs.sp.user_activity\032\037google/pro" "tobuf/timestamp.proto\032\021definitions.proto" - "\"V\n\022PeerConnectionInfo\022\021\n\tclient_id\030\001 \001(" + "\"V\n\022P2PParticipantInfo\022\021\n\tclient_id\030\001 \001(" "\t\022\026\n\016participant_id\030\002 \001(\t\022\025\n\rconnection_" - "id\030\003 \001(\t\"\261\003\n\014TwoPartyData\0224\n\tdirection\030\001" + "id\030\003 \001(\t\"\255\003\n\014TwoPartyData\0224\n\tdirection\030\001" " \001(\0162!.nynjacoin.nccs.def.CallDirection\022" ")\n\004from\030\002 \001(\0132\033.nynjacoin.nccs.def.Addre" "ss\022\'\n\002to\030\003 \001(\0132\033.nynjacoin.nccs.def.Addr" @@ -317,33 +317,33 @@ void AddDescriptorsImpl() { "e.protobuf.Timestamp\0221\n\rcomplete_time\030\006 " "\001(\0132\032.google.protobuf.Timestamp\0220\n\riniti" "al_offer\030\007 \001(\0132\031.nynjacoin.nccs.def.Offe" - "r\022Q\n\024peer_connection_info\030\010 \003(\01323.nynjac" - "oin.nccs.sp.user_activity.PeerConnection" - "Info\"\347\001\n\016ConferenceData\022\n\n\002id\030\001 \001(\t\022\021\n\tm" - "ember_id\030\002 \001(\t\022\017\n\007subject\030\003 \001(\t\022\030\n\020owner" - "_account_id\030\004 \001(\t\022\035\n\025current_members_cou" - "nt\030\005 \001(\r\022.\n\nstart_time\030\006 \001(\0132\032.google.pr" - "otobuf.Timestamp\022\021\n\tjoin_link\030\007 \001(\t\022\024\n\014c" - "hat_room_id\030\010 \001(\t\022\023\n\013replace_ref\030\t \001(\t\"\240" - "\001\n\010CallData\022B\n\ttwo_party\030\001 \001(\0132-.nynjaco" - "in.nccs.sp.user_activity.TwoPartyDataH\000\022" - "E\n\nconference\030\002 \001(\0132/.nynjacoin.nccs.sp." - "user_activity.ConferenceDataH\000B\t\n\007conten" - "t\"\245\002\n\014CallActivity\022\n\n\002id\030\001 \001(\t\022,\n\005state\030" - "\002 \001(\0132\035.nynjacoin.nccs.def.CallState\022\025\n\r" - "external_info\030\003 \001(\t\022\023\n\013external_id\030\004 \001(\t" - "\022@\n\022media_content_type\030\005 \003(\0162$.nynjacoin" - ".nccs.def.MediaContentType\0227\n\004data\030\006 \001(\013" - "2).nynjacoin.nccs.sp.user_activity.CallD" - "ata\0224\n\tdirection\030\007 \001(\0162!.nynjacoin.nccs." - "def.CallDirection\"Y\n\014UserActivity\022=\n\004cal" - "l\030\001 \001(\0132-.nynjacoin.nccs.sp.user_activit" - "y.CallActivityH\000B\n\n\010activityB/\n+com.nynj" - "acoin.nccs.protocol.sp.useractivityP\001b\006p" - "roto3" + "r\022M\n\020participant_info\030\010 \003(\01323.nynjacoin." + "nccs.sp.user_activity.P2PParticipantInfo" + "\"\347\001\n\016ConferenceData\022\n\n\002id\030\001 \001(\t\022\021\n\tmembe" + "r_id\030\002 \001(\t\022\017\n\007subject\030\003 \001(\t\022\030\n\020owner_acc" + "ount_id\030\004 \001(\t\022\035\n\025current_members_count\030\005" + " \001(\r\022.\n\nstart_time\030\006 \001(\0132\032.google.protob" + "uf.Timestamp\022\021\n\tjoin_link\030\007 \001(\t\022\024\n\014chat_" + "room_id\030\010 \001(\t\022\023\n\013replace_ref\030\t \001(\t\"\240\001\n\010C" + "allData\022B\n\ttwo_party\030\001 \001(\0132-.nynjacoin.n" + "ccs.sp.user_activity.TwoPartyDataH\000\022E\n\nc" + "onference\030\002 \001(\0132/.nynjacoin.nccs.sp.user" + "_activity.ConferenceDataH\000B\t\n\007content\"\245\002" + "\n\014CallActivity\022\n\n\002id\030\001 \001(\t\022,\n\005state\030\002 \001(" + "\0132\035.nynjacoin.nccs.def.CallState\022\025\n\rexte" + "rnal_info\030\003 \001(\t\022\023\n\013external_id\030\004 \001(\t\022@\n\022" + "media_content_type\030\005 \003(\0162$.nynjacoin.ncc" + "s.def.MediaContentType\0227\n\004data\030\006 \001(\0132).n" + "ynjacoin.nccs.sp.user_activity.CallData\022" + "4\n\tdirection\030\007 \001(\0162!.nynjacoin.nccs.def." + "CallDirection\"Y\n\014UserActivity\022=\n\004call\030\001 " + "\001(\0132-.nynjacoin.nccs.sp.user_activity.Ca" + "llActivityH\000B\n\n\010activityB/\n+com.nynjacoi" + "n.nccs.protocol.sp.useractivityP\001b\006proto" + "3" }; ::google::protobuf::DescriptorPool::InternalAddGeneratedFile( - descriptor, 1485); + descriptor, 1481); ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile( "state_package_user_activity.proto", &protobuf_RegisterTypes); ::protobuf_google_2fprotobuf_2ftimestamp_2eproto::AddDescriptors(); @@ -368,23 +368,23 @@ namespace user_activity { // =================================================================== -void PeerConnectionInfo::InitAsDefaultInstance() { +void P2PParticipantInfo::InitAsDefaultInstance() { } #if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int PeerConnectionInfo::kClientIdFieldNumber; -const int PeerConnectionInfo::kParticipantIdFieldNumber; -const int PeerConnectionInfo::kConnectionIdFieldNumber; +const int P2PParticipantInfo::kClientIdFieldNumber; +const int P2PParticipantInfo::kParticipantIdFieldNumber; +const int P2PParticipantInfo::kConnectionIdFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 -PeerConnectionInfo::PeerConnectionInfo() +P2PParticipantInfo::P2PParticipantInfo() : ::google::protobuf::Message(), _internal_metadata_(NULL) { if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) { - ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::InitDefaultsPeerConnectionInfo(); + ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::InitDefaultsP2PParticipantInfo(); } SharedCtor(); - // @@protoc_insertion_point(constructor:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + // @@protoc_insertion_point(constructor:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) } -PeerConnectionInfo::PeerConnectionInfo(const PeerConnectionInfo& from) +P2PParticipantInfo::P2PParticipantInfo(const P2PParticipantInfo& from) : ::google::protobuf::Message(), _internal_metadata_(NULL), _cached_size_(0) { @@ -401,52 +401,52 @@ PeerConnectionInfo::PeerConnectionInfo(const PeerConnectionInfo& from) if (from.connection_id().size() > 0) { connection_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.connection_id_); } - // @@protoc_insertion_point(copy_constructor:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + // @@protoc_insertion_point(copy_constructor:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) } -void PeerConnectionInfo::SharedCtor() { +void P2PParticipantInfo::SharedCtor() { client_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); participant_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); connection_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); _cached_size_ = 0; } -PeerConnectionInfo::~PeerConnectionInfo() { - // @@protoc_insertion_point(destructor:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) +P2PParticipantInfo::~P2PParticipantInfo() { + // @@protoc_insertion_point(destructor:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) SharedDtor(); } -void PeerConnectionInfo::SharedDtor() { +void P2PParticipantInfo::SharedDtor() { client_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); participant_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); connection_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } -void PeerConnectionInfo::SetCachedSize(int size) const { +void P2PParticipantInfo::SetCachedSize(int size) const { GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); _cached_size_ = size; GOOGLE_SAFE_CONCURRENT_WRITES_END(); } -const ::google::protobuf::Descriptor* PeerConnectionInfo::descriptor() { +const ::google::protobuf::Descriptor* P2PParticipantInfo::descriptor() { ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::protobuf_AssignDescriptorsOnce(); return ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; } -const PeerConnectionInfo& PeerConnectionInfo::default_instance() { - ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::InitDefaultsPeerConnectionInfo(); +const P2PParticipantInfo& P2PParticipantInfo::default_instance() { + ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::InitDefaultsP2PParticipantInfo(); return *internal_default_instance(); } -PeerConnectionInfo* PeerConnectionInfo::New(::google::protobuf::Arena* arena) const { - PeerConnectionInfo* n = new PeerConnectionInfo; +P2PParticipantInfo* P2PParticipantInfo::New(::google::protobuf::Arena* arena) const { + P2PParticipantInfo* n = new P2PParticipantInfo; if (arena != NULL) { arena->Own(n); } return n; } -void PeerConnectionInfo::Clear() { -// @@protoc_insertion_point(message_clear_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) +void P2PParticipantInfo::Clear() { +// @@protoc_insertion_point(message_clear_start:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) ::google::protobuf::uint32 cached_has_bits = 0; // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; @@ -457,11 +457,11 @@ void PeerConnectionInfo::Clear() { _internal_metadata_.Clear(); } -bool PeerConnectionInfo::MergePartialFromCodedStream( +bool P2PParticipantInfo::MergePartialFromCodedStream( ::google::protobuf::io::CodedInputStream* input) { #define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure ::google::protobuf::uint32 tag; - // @@protoc_insertion_point(parse_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + // @@protoc_insertion_point(parse_start:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) for (;;) { ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); tag = p.first; @@ -476,7 +476,7 @@ bool PeerConnectionInfo::MergePartialFromCodedStream( DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( this->client_id().data(), static_cast(this->client_id().length()), ::google::protobuf::internal::WireFormatLite::PARSE, - "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id")); + "nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.client_id")); } else { goto handle_unusual; } @@ -492,7 +492,7 @@ bool PeerConnectionInfo::MergePartialFromCodedStream( DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( this->participant_id().data(), static_cast(this->participant_id().length()), ::google::protobuf::internal::WireFormatLite::PARSE, - "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id")); + "nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.participant_id")); } else { goto handle_unusual; } @@ -508,7 +508,7 @@ bool PeerConnectionInfo::MergePartialFromCodedStream( DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( this->connection_id().data(), static_cast(this->connection_id().length()), ::google::protobuf::internal::WireFormatLite::PARSE, - "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id")); + "nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.connection_id")); } else { goto handle_unusual; } @@ -527,17 +527,17 @@ bool PeerConnectionInfo::MergePartialFromCodedStream( } } success: - // @@protoc_insertion_point(parse_success:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + // @@protoc_insertion_point(parse_success:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) return true; failure: - // @@protoc_insertion_point(parse_failure:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + // @@protoc_insertion_point(parse_failure:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) return false; #undef DO_ } -void PeerConnectionInfo::SerializeWithCachedSizes( +void P2PParticipantInfo::SerializeWithCachedSizes( ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + // @@protoc_insertion_point(serialize_start:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) ::google::protobuf::uint32 cached_has_bits = 0; (void) cached_has_bits; @@ -546,7 +546,7 @@ void PeerConnectionInfo::SerializeWithCachedSizes( ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( this->client_id().data(), static_cast(this->client_id().length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id"); + "nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.client_id"); ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( 1, this->client_id(), output); } @@ -556,7 +556,7 @@ void PeerConnectionInfo::SerializeWithCachedSizes( ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( this->participant_id().data(), static_cast(this->participant_id().length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id"); + "nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.participant_id"); ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( 2, this->participant_id(), output); } @@ -566,7 +566,7 @@ void PeerConnectionInfo::SerializeWithCachedSizes( ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( this->connection_id().data(), static_cast(this->connection_id().length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id"); + "nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.connection_id"); ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( 3, this->connection_id(), output); } @@ -575,13 +575,13 @@ void PeerConnectionInfo::SerializeWithCachedSizes( ::google::protobuf::internal::WireFormat::SerializeUnknownFields( (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), output); } - // @@protoc_insertion_point(serialize_end:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + // @@protoc_insertion_point(serialize_end:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) } -::google::protobuf::uint8* PeerConnectionInfo::InternalSerializeWithCachedSizesToArray( +::google::protobuf::uint8* P2PParticipantInfo::InternalSerializeWithCachedSizesToArray( bool deterministic, ::google::protobuf::uint8* target) const { (void)deterministic; // Unused - // @@protoc_insertion_point(serialize_to_array_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + // @@protoc_insertion_point(serialize_to_array_start:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) ::google::protobuf::uint32 cached_has_bits = 0; (void) cached_has_bits; @@ -590,7 +590,7 @@ void PeerConnectionInfo::SerializeWithCachedSizes( ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( this->client_id().data(), static_cast(this->client_id().length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id"); + "nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.client_id"); target = ::google::protobuf::internal::WireFormatLite::WriteStringToArray( 1, this->client_id(), target); @@ -601,7 +601,7 @@ void PeerConnectionInfo::SerializeWithCachedSizes( ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( this->participant_id().data(), static_cast(this->participant_id().length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id"); + "nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.participant_id"); target = ::google::protobuf::internal::WireFormatLite::WriteStringToArray( 2, this->participant_id(), target); @@ -612,7 +612,7 @@ void PeerConnectionInfo::SerializeWithCachedSizes( ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( this->connection_id().data(), static_cast(this->connection_id().length()), ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id"); + "nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.connection_id"); target = ::google::protobuf::internal::WireFormatLite::WriteStringToArray( 3, this->connection_id(), target); @@ -622,12 +622,12 @@ void PeerConnectionInfo::SerializeWithCachedSizes( target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), target); } - // @@protoc_insertion_point(serialize_to_array_end:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + // @@protoc_insertion_point(serialize_to_array_end:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) return target; } -size_t PeerConnectionInfo::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) +size_t P2PParticipantInfo::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) size_t total_size = 0; if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { @@ -663,23 +663,23 @@ size_t PeerConnectionInfo::ByteSizeLong() const { return total_size; } -void PeerConnectionInfo::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) +void P2PParticipantInfo::MergeFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_merge_from_start:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) GOOGLE_DCHECK_NE(&from, this); - const PeerConnectionInfo* source = - ::google::protobuf::internal::DynamicCastToGenerated( + const P2PParticipantInfo* source = + ::google::protobuf::internal::DynamicCastToGenerated( &from); if (source == NULL) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + // @@protoc_insertion_point(generalized_merge_from_cast_fail:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) ::google::protobuf::internal::ReflectionOps::Merge(from, this); } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + // @@protoc_insertion_point(generalized_merge_from_cast_success:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) MergeFrom(*source); } } -void PeerConnectionInfo::MergeFrom(const PeerConnectionInfo& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) +void P2PParticipantInfo::MergeFrom(const P2PParticipantInfo& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) GOOGLE_DCHECK_NE(&from, this); _internal_metadata_.MergeFrom(from._internal_metadata_); ::google::protobuf::uint32 cached_has_bits = 0; @@ -699,29 +699,29 @@ void PeerConnectionInfo::MergeFrom(const PeerConnectionInfo& from) { } } -void PeerConnectionInfo::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) +void P2PParticipantInfo::CopyFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_copy_from_start:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) if (&from == this) return; Clear(); MergeFrom(from); } -void PeerConnectionInfo::CopyFrom(const PeerConnectionInfo& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) +void P2PParticipantInfo::CopyFrom(const P2PParticipantInfo& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) if (&from == this) return; Clear(); MergeFrom(from); } -bool PeerConnectionInfo::IsInitialized() const { +bool P2PParticipantInfo::IsInitialized() const { return true; } -void PeerConnectionInfo::Swap(PeerConnectionInfo* other) { +void P2PParticipantInfo::Swap(P2PParticipantInfo* other) { if (other == this) return; InternalSwap(other); } -void PeerConnectionInfo::InternalSwap(PeerConnectionInfo* other) { +void P2PParticipantInfo::InternalSwap(P2PParticipantInfo* other) { using std::swap; client_id_.Swap(&other->client_id_); participant_id_.Swap(&other->participant_id_); @@ -730,7 +730,7 @@ void PeerConnectionInfo::InternalSwap(PeerConnectionInfo* other) { swap(_cached_size_, other->_cached_size_); } -::google::protobuf::Metadata PeerConnectionInfo::GetMetadata() const { +::google::protobuf::Metadata P2PParticipantInfo::GetMetadata() const { protobuf_state_5fpackage_5fuser_5factivity_2eproto::protobuf_AssignDescriptorsOnce(); return ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::file_level_metadata[kIndexInFileMessages]; } @@ -796,7 +796,7 @@ const int TwoPartyData::kStartTimeFieldNumber; const int TwoPartyData::kAcceptTimeFieldNumber; const int TwoPartyData::kCompleteTimeFieldNumber; const int TwoPartyData::kInitialOfferFieldNumber; -const int TwoPartyData::kPeerConnectionInfoFieldNumber; +const int TwoPartyData::kParticipantInfoFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 TwoPartyData::TwoPartyData() @@ -810,7 +810,7 @@ TwoPartyData::TwoPartyData() TwoPartyData::TwoPartyData(const TwoPartyData& from) : ::google::protobuf::Message(), _internal_metadata_(NULL), - peer_connection_info_(from.peer_connection_info_), + participant_info_(from.participant_info_), _cached_size_(0) { _internal_metadata_.MergeFrom(from._internal_metadata_); if (from.has_from()) { @@ -897,7 +897,7 @@ void TwoPartyData::Clear() { // Prevent compiler warnings about cached_has_bits being unused (void) cached_has_bits; - peer_connection_info_.Clear(); + participant_info_.Clear(); if (GetArenaNoVirtual() == NULL && from_ != NULL) { delete from_; } @@ -1023,11 +1023,11 @@ bool TwoPartyData::MergePartialFromCodedStream( break; } - // repeated .nynjacoin.nccs.sp.user_activity.PeerConnectionInfo peer_connection_info = 8; + // repeated .nynjacoin.nccs.sp.user_activity.P2PParticipantInfo participant_info = 8; case 8: { if (static_cast< ::google::protobuf::uint8>(tag) == static_cast< ::google::protobuf::uint8>(66u /* 66 & 0xFF */)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(input, add_peer_connection_info())); + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(input, add_participant_info())); } else { goto handle_unusual; } @@ -1102,11 +1102,11 @@ void TwoPartyData::SerializeWithCachedSizes( 7, *this->initial_offer_, output); } - // repeated .nynjacoin.nccs.sp.user_activity.PeerConnectionInfo peer_connection_info = 8; + // repeated .nynjacoin.nccs.sp.user_activity.P2PParticipantInfo participant_info = 8; for (unsigned int i = 0, - n = static_cast(this->peer_connection_info_size()); i < n; i++) { + n = static_cast(this->participant_info_size()); i < n; i++) { ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( - 8, this->peer_connection_info(static_cast(i)), output); + 8, this->participant_info(static_cast(i)), output); } if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { @@ -1171,12 +1171,12 @@ void TwoPartyData::SerializeWithCachedSizes( 7, *this->initial_offer_, deterministic, target); } - // repeated .nynjacoin.nccs.sp.user_activity.PeerConnectionInfo peer_connection_info = 8; + // repeated .nynjacoin.nccs.sp.user_activity.P2PParticipantInfo participant_info = 8; for (unsigned int i = 0, - n = static_cast(this->peer_connection_info_size()); i < n; i++) { + n = static_cast(this->participant_info_size()); i < n; i++) { target = ::google::protobuf::internal::WireFormatLite:: InternalWriteMessageToArray( - 8, this->peer_connection_info(static_cast(i)), deterministic, target); + 8, this->participant_info(static_cast(i)), deterministic, target); } if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { @@ -1196,14 +1196,14 @@ size_t TwoPartyData::ByteSizeLong() const { ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance())); } - // repeated .nynjacoin.nccs.sp.user_activity.PeerConnectionInfo peer_connection_info = 8; + // repeated .nynjacoin.nccs.sp.user_activity.P2PParticipantInfo participant_info = 8; { - unsigned int count = static_cast(this->peer_connection_info_size()); + unsigned int count = static_cast(this->participant_info_size()); total_size += 1UL * count; for (unsigned int i = 0; i < count; i++) { total_size += ::google::protobuf::internal::WireFormatLite::MessageSize( - this->peer_connection_info(static_cast(i))); + this->participant_info(static_cast(i))); } } @@ -1284,7 +1284,7 @@ void TwoPartyData::MergeFrom(const TwoPartyData& from) { ::google::protobuf::uint32 cached_has_bits = 0; (void) cached_has_bits; - peer_connection_info_.MergeFrom(from.peer_connection_info_); + participant_info_.MergeFrom(from.participant_info_); if (from.has_from()) { mutable_from()->::nynjacoin::nccs::def::Address::MergeFrom(from.from()); } @@ -1332,7 +1332,7 @@ void TwoPartyData::Swap(TwoPartyData* other) { } void TwoPartyData::InternalSwap(TwoPartyData* other) { using std::swap; - peer_connection_info_.InternalSwap(&other->peer_connection_info_); + participant_info_.InternalSwap(&other->participant_info_); swap(from_, other->from_); swap(to_, other->to_); swap(accept_time_, other->accept_time_); diff --git a/src/core/grpc/voice/state_package_user_activity.pb.h b/src/core/grpc/voice/state_package_user_activity.pb.h index 5e01d4d6..e0a13617 100644 --- a/src/core/grpc/voice/state_package_user_activity.pb.h +++ b/src/core/grpc/voice/state_package_user_activity.pb.h @@ -44,8 +44,8 @@ struct TableStruct { static const ::google::protobuf::uint32 offsets[]; }; void AddDescriptors(); -void InitDefaultsPeerConnectionInfoImpl(); -void InitDefaultsPeerConnectionInfo(); +void InitDefaultsP2PParticipantInfoImpl(); +void InitDefaultsP2PParticipantInfo(); void InitDefaultsTwoPartyDataImpl(); void InitDefaultsTwoPartyData(); void InitDefaultsConferenceDataImpl(); @@ -57,7 +57,7 @@ void InitDefaultsCallActivity(); void InitDefaultsUserActivityImpl(); void InitDefaultsUserActivity(); inline void InitDefaults() { - InitDefaultsPeerConnectionInfo(); + InitDefaultsP2PParticipantInfo(); InitDefaultsTwoPartyData(); InitDefaultsConferenceData(); InitDefaultsCallData(); @@ -78,9 +78,9 @@ extern CallDataDefaultTypeInternal _CallData_default_instance_; class ConferenceData; class ConferenceDataDefaultTypeInternal; extern ConferenceDataDefaultTypeInternal _ConferenceData_default_instance_; -class PeerConnectionInfo; -class PeerConnectionInfoDefaultTypeInternal; -extern PeerConnectionInfoDefaultTypeInternal _PeerConnectionInfo_default_instance_; +class P2PParticipantInfo; +class P2PParticipantInfoDefaultTypeInternal; +extern P2PParticipantInfoDefaultTypeInternal _P2PParticipantInfo_default_instance_; class TwoPartyData; class TwoPartyDataDefaultTypeInternal; extern TwoPartyDataDefaultTypeInternal _TwoPartyData_default_instance_; @@ -98,24 +98,24 @@ namespace user_activity { // =================================================================== -class PeerConnectionInfo : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) */ { +class P2PParticipantInfo : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) */ { public: - PeerConnectionInfo(); - virtual ~PeerConnectionInfo(); + P2PParticipantInfo(); + virtual ~P2PParticipantInfo(); - PeerConnectionInfo(const PeerConnectionInfo& from); + P2PParticipantInfo(const P2PParticipantInfo& from); - inline PeerConnectionInfo& operator=(const PeerConnectionInfo& from) { + inline P2PParticipantInfo& operator=(const P2PParticipantInfo& from) { CopyFrom(from); return *this; } #if LANG_CXX11 - PeerConnectionInfo(PeerConnectionInfo&& from) noexcept - : PeerConnectionInfo() { + P2PParticipantInfo(P2PParticipantInfo&& from) noexcept + : P2PParticipantInfo() { *this = ::std::move(from); } - inline PeerConnectionInfo& operator=(PeerConnectionInfo&& from) noexcept { + inline P2PParticipantInfo& operator=(P2PParticipantInfo&& from) noexcept { if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { if (this != &from) InternalSwap(&from); } else { @@ -125,30 +125,30 @@ class PeerConnectionInfo : public ::google::protobuf::Message /* @@protoc_insert } #endif static const ::google::protobuf::Descriptor* descriptor(); - static const PeerConnectionInfo& default_instance(); + static const P2PParticipantInfo& default_instance(); static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const PeerConnectionInfo* internal_default_instance() { - return reinterpret_cast( - &_PeerConnectionInfo_default_instance_); + static inline const P2PParticipantInfo* internal_default_instance() { + return reinterpret_cast( + &_P2PParticipantInfo_default_instance_); } static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = 0; - void Swap(PeerConnectionInfo* other); - friend void swap(PeerConnectionInfo& a, PeerConnectionInfo& b) { + void Swap(P2PParticipantInfo* other); + friend void swap(P2PParticipantInfo& a, P2PParticipantInfo& b) { a.Swap(&b); } // implements Message ---------------------------------------------- - inline PeerConnectionInfo* New() const PROTOBUF_FINAL { return New(NULL); } + inline P2PParticipantInfo* New() const PROTOBUF_FINAL { return New(NULL); } - PeerConnectionInfo* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL; + P2PParticipantInfo* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL; void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL; void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL; - void CopyFrom(const PeerConnectionInfo& from); - void MergeFrom(const PeerConnectionInfo& from); + void CopyFrom(const P2PParticipantInfo& from); + void MergeFrom(const P2PParticipantInfo& from); void Clear() PROTOBUF_FINAL; bool IsInitialized() const PROTOBUF_FINAL; @@ -164,7 +164,7 @@ class PeerConnectionInfo : public ::google::protobuf::Message /* @@protoc_insert void SharedCtor(); void SharedDtor(); void SetCachedSize(int size) const PROTOBUF_FINAL; - void InternalSwap(PeerConnectionInfo* other); + void InternalSwap(P2PParticipantInfo* other); private: inline ::google::protobuf::Arena* GetArenaNoVirtual() const { return NULL; @@ -222,7 +222,7 @@ class PeerConnectionInfo : public ::google::protobuf::Message /* @@protoc_insert ::std::string* release_connection_id(); void set_allocated_connection_id(::std::string* connection_id); - // @@protoc_insertion_point(class_scope:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo) + // @@protoc_insertion_point(class_scope:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo) private: ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; @@ -231,7 +231,7 @@ class PeerConnectionInfo : public ::google::protobuf::Message /* @@protoc_insert ::google::protobuf::internal::ArenaStringPtr connection_id_; mutable int _cached_size_; friend struct ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::TableStruct; - friend void ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::InitDefaultsPeerConnectionInfoImpl(); + friend void ::protobuf_state_5fpackage_5fuser_5factivity_2eproto::InitDefaultsP2PParticipantInfoImpl(); }; // ------------------------------------------------------------------- @@ -317,17 +317,17 @@ class TwoPartyData : public ::google::protobuf::Message /* @@protoc_insertion_po // accessors ------------------------------------------------------- - // repeated .nynjacoin.nccs.sp.user_activity.PeerConnectionInfo peer_connection_info = 8; - int peer_connection_info_size() const; - void clear_peer_connection_info(); - static const int kPeerConnectionInfoFieldNumber = 8; - const ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo& peer_connection_info(int index) const; - ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo* mutable_peer_connection_info(int index); - ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo* add_peer_connection_info(); - ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo >* - mutable_peer_connection_info(); - const ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo >& - peer_connection_info() const; + // repeated .nynjacoin.nccs.sp.user_activity.P2PParticipantInfo participant_info = 8; + int participant_info_size() const; + void clear_participant_info(); + static const int kParticipantInfoFieldNumber = 8; + const ::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo& participant_info(int index) const; + ::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo* mutable_participant_info(int index); + ::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo* add_participant_info(); + ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo >* + mutable_participant_info(); + const ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo >& + participant_info() const; // .nynjacoin.nccs.def.Address from = 2; bool has_from() const; @@ -393,7 +393,7 @@ class TwoPartyData : public ::google::protobuf::Message /* @@protoc_insertion_po private: ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo > peer_connection_info_; + ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo > participant_info_; ::nynjacoin::nccs::def::Address* from_; ::nynjacoin::nccs::def::Address* to_; ::google::protobuf::Timestamp* accept_time_; @@ -1052,165 +1052,165 @@ class UserActivity : public ::google::protobuf::Message /* @@protoc_insertion_po #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wstrict-aliasing" #endif // __GNUC__ -// PeerConnectionInfo +// P2PParticipantInfo // string client_id = 1; -inline void PeerConnectionInfo::clear_client_id() { +inline void P2PParticipantInfo::clear_client_id() { client_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } -inline const ::std::string& PeerConnectionInfo::client_id() const { - // @@protoc_insertion_point(field_get:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) +inline const ::std::string& P2PParticipantInfo::client_id() const { + // @@protoc_insertion_point(field_get:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.client_id) return client_id_.GetNoArena(); } -inline void PeerConnectionInfo::set_client_id(const ::std::string& value) { +inline void P2PParticipantInfo::set_client_id(const ::std::string& value) { client_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) + // @@protoc_insertion_point(field_set:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.client_id) } #if LANG_CXX11 -inline void PeerConnectionInfo::set_client_id(::std::string&& value) { +inline void P2PParticipantInfo::set_client_id(::std::string&& value) { client_id_.SetNoArena( &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) + // @@protoc_insertion_point(field_set_rvalue:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.client_id) } #endif -inline void PeerConnectionInfo::set_client_id(const char* value) { +inline void P2PParticipantInfo::set_client_id(const char* value) { GOOGLE_DCHECK(value != NULL); client_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) + // @@protoc_insertion_point(field_set_char:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.client_id) } -inline void PeerConnectionInfo::set_client_id(const char* value, size_t size) { +inline void P2PParticipantInfo::set_client_id(const char* value, size_t size) { client_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) + // @@protoc_insertion_point(field_set_pointer:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.client_id) } -inline ::std::string* PeerConnectionInfo::mutable_client_id() { +inline ::std::string* P2PParticipantInfo::mutable_client_id() { - // @@protoc_insertion_point(field_mutable:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) + // @@protoc_insertion_point(field_mutable:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.client_id) return client_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } -inline ::std::string* PeerConnectionInfo::release_client_id() { - // @@protoc_insertion_point(field_release:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) +inline ::std::string* P2PParticipantInfo::release_client_id() { + // @@protoc_insertion_point(field_release:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.client_id) return client_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } -inline void PeerConnectionInfo::set_allocated_client_id(::std::string* client_id) { +inline void P2PParticipantInfo::set_allocated_client_id(::std::string* client_id) { if (client_id != NULL) { } else { } client_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), client_id); - // @@protoc_insertion_point(field_set_allocated:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.client_id) + // @@protoc_insertion_point(field_set_allocated:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.client_id) } // string participant_id = 2; -inline void PeerConnectionInfo::clear_participant_id() { +inline void P2PParticipantInfo::clear_participant_id() { participant_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } -inline const ::std::string& PeerConnectionInfo::participant_id() const { - // @@protoc_insertion_point(field_get:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) +inline const ::std::string& P2PParticipantInfo::participant_id() const { + // @@protoc_insertion_point(field_get:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.participant_id) return participant_id_.GetNoArena(); } -inline void PeerConnectionInfo::set_participant_id(const ::std::string& value) { +inline void P2PParticipantInfo::set_participant_id(const ::std::string& value) { participant_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) + // @@protoc_insertion_point(field_set:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.participant_id) } #if LANG_CXX11 -inline void PeerConnectionInfo::set_participant_id(::std::string&& value) { +inline void P2PParticipantInfo::set_participant_id(::std::string&& value) { participant_id_.SetNoArena( &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) + // @@protoc_insertion_point(field_set_rvalue:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.participant_id) } #endif -inline void PeerConnectionInfo::set_participant_id(const char* value) { +inline void P2PParticipantInfo::set_participant_id(const char* value) { GOOGLE_DCHECK(value != NULL); participant_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) + // @@protoc_insertion_point(field_set_char:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.participant_id) } -inline void PeerConnectionInfo::set_participant_id(const char* value, size_t size) { +inline void P2PParticipantInfo::set_participant_id(const char* value, size_t size) { participant_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) + // @@protoc_insertion_point(field_set_pointer:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.participant_id) } -inline ::std::string* PeerConnectionInfo::mutable_participant_id() { +inline ::std::string* P2PParticipantInfo::mutable_participant_id() { - // @@protoc_insertion_point(field_mutable:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) + // @@protoc_insertion_point(field_mutable:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.participant_id) return participant_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } -inline ::std::string* PeerConnectionInfo::release_participant_id() { - // @@protoc_insertion_point(field_release:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) +inline ::std::string* P2PParticipantInfo::release_participant_id() { + // @@protoc_insertion_point(field_release:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.participant_id) return participant_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } -inline void PeerConnectionInfo::set_allocated_participant_id(::std::string* participant_id) { +inline void P2PParticipantInfo::set_allocated_participant_id(::std::string* participant_id) { if (participant_id != NULL) { } else { } participant_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), participant_id); - // @@protoc_insertion_point(field_set_allocated:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.participant_id) + // @@protoc_insertion_point(field_set_allocated:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.participant_id) } // string connection_id = 3; -inline void PeerConnectionInfo::clear_connection_id() { +inline void P2PParticipantInfo::clear_connection_id() { connection_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } -inline const ::std::string& PeerConnectionInfo::connection_id() const { - // @@protoc_insertion_point(field_get:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) +inline const ::std::string& P2PParticipantInfo::connection_id() const { + // @@protoc_insertion_point(field_get:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.connection_id) return connection_id_.GetNoArena(); } -inline void PeerConnectionInfo::set_connection_id(const ::std::string& value) { +inline void P2PParticipantInfo::set_connection_id(const ::std::string& value) { connection_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) + // @@protoc_insertion_point(field_set:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.connection_id) } #if LANG_CXX11 -inline void PeerConnectionInfo::set_connection_id(::std::string&& value) { +inline void P2PParticipantInfo::set_connection_id(::std::string&& value) { connection_id_.SetNoArena( &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) + // @@protoc_insertion_point(field_set_rvalue:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.connection_id) } #endif -inline void PeerConnectionInfo::set_connection_id(const char* value) { +inline void P2PParticipantInfo::set_connection_id(const char* value) { GOOGLE_DCHECK(value != NULL); connection_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) + // @@protoc_insertion_point(field_set_char:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.connection_id) } -inline void PeerConnectionInfo::set_connection_id(const char* value, size_t size) { +inline void P2PParticipantInfo::set_connection_id(const char* value, size_t size) { connection_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) + // @@protoc_insertion_point(field_set_pointer:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.connection_id) } -inline ::std::string* PeerConnectionInfo::mutable_connection_id() { +inline ::std::string* P2PParticipantInfo::mutable_connection_id() { - // @@protoc_insertion_point(field_mutable:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) + // @@protoc_insertion_point(field_mutable:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.connection_id) return connection_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } -inline ::std::string* PeerConnectionInfo::release_connection_id() { - // @@protoc_insertion_point(field_release:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) +inline ::std::string* P2PParticipantInfo::release_connection_id() { + // @@protoc_insertion_point(field_release:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.connection_id) return connection_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); } -inline void PeerConnectionInfo::set_allocated_connection_id(::std::string* connection_id) { +inline void P2PParticipantInfo::set_allocated_connection_id(::std::string* connection_id) { if (connection_id != NULL) { } else { } connection_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), connection_id); - // @@protoc_insertion_point(field_set_allocated:nynjacoin.nccs.sp.user_activity.PeerConnectionInfo.connection_id) + // @@protoc_insertion_point(field_set_allocated:nynjacoin.nccs.sp.user_activity.P2PParticipantInfo.connection_id) } // ------------------------------------------------------------------- @@ -1498,34 +1498,34 @@ inline void TwoPartyData::set_allocated_initial_offer(::nynjacoin::nccs::def::Of // @@protoc_insertion_point(field_set_allocated:nynjacoin.nccs.sp.user_activity.TwoPartyData.initial_offer) } -// repeated .nynjacoin.nccs.sp.user_activity.PeerConnectionInfo peer_connection_info = 8; -inline int TwoPartyData::peer_connection_info_size() const { - return peer_connection_info_.size(); +// repeated .nynjacoin.nccs.sp.user_activity.P2PParticipantInfo participant_info = 8; +inline int TwoPartyData::participant_info_size() const { + return participant_info_.size(); } -inline void TwoPartyData::clear_peer_connection_info() { - peer_connection_info_.Clear(); +inline void TwoPartyData::clear_participant_info() { + participant_info_.Clear(); } -inline const ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo& TwoPartyData::peer_connection_info(int index) const { - // @@protoc_insertion_point(field_get:nynjacoin.nccs.sp.user_activity.TwoPartyData.peer_connection_info) - return peer_connection_info_.Get(index); +inline const ::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo& TwoPartyData::participant_info(int index) const { + // @@protoc_insertion_point(field_get:nynjacoin.nccs.sp.user_activity.TwoPartyData.participant_info) + return participant_info_.Get(index); } -inline ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo* TwoPartyData::mutable_peer_connection_info(int index) { - // @@protoc_insertion_point(field_mutable:nynjacoin.nccs.sp.user_activity.TwoPartyData.peer_connection_info) - return peer_connection_info_.Mutable(index); +inline ::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo* TwoPartyData::mutable_participant_info(int index) { + // @@protoc_insertion_point(field_mutable:nynjacoin.nccs.sp.user_activity.TwoPartyData.participant_info) + return participant_info_.Mutable(index); } -inline ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo* TwoPartyData::add_peer_connection_info() { - // @@protoc_insertion_point(field_add:nynjacoin.nccs.sp.user_activity.TwoPartyData.peer_connection_info) - return peer_connection_info_.Add(); +inline ::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo* TwoPartyData::add_participant_info() { + // @@protoc_insertion_point(field_add:nynjacoin.nccs.sp.user_activity.TwoPartyData.participant_info) + return participant_info_.Add(); } -inline ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo >* -TwoPartyData::mutable_peer_connection_info() { - // @@protoc_insertion_point(field_mutable_list:nynjacoin.nccs.sp.user_activity.TwoPartyData.peer_connection_info) - return &peer_connection_info_; +inline ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo >* +TwoPartyData::mutable_participant_info() { + // @@protoc_insertion_point(field_mutable_list:nynjacoin.nccs.sp.user_activity.TwoPartyData.participant_info) + return &participant_info_; } -inline const ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::PeerConnectionInfo >& -TwoPartyData::peer_connection_info() const { - // @@protoc_insertion_point(field_list:nynjacoin.nccs.sp.user_activity.TwoPartyData.peer_connection_info) - return peer_connection_info_; +inline const ::google::protobuf::RepeatedPtrField< ::nynjacoin::nccs::sp::user_activity::P2PParticipantInfo >& +TwoPartyData::participant_info() const { + // @@protoc_insertion_point(field_list:nynjacoin.nccs.sp.user_activity.TwoPartyData.participant_info) + return participant_info_; } // ------------------------------------------------------------------- diff --git a/src/core/proto b/src/core/proto index ced6152f..22f5f3eb 160000 --- a/src/core/proto +++ b/src/core/proto @@ -1 +1 @@ -Subproject commit ced6152fa6bc7dc8ee8fcec3d867b2d66924f082 +Subproject commit 22f5f3eb9cbf5828da15d3f5a0e74031a5ecd0d7 -- GitLab From 140dcde142b850637a92bc4076bfb732f96a8d91 Mon Sep 17 00:00:00 2001 From: Angel Terziev Date: Fri, 29 May 2020 12:08:31 +0300 Subject: [PATCH 06/11] Call pickup finished --- src/core/call/CallImpl.cpp | 95 +++- src/core/call/CallImpl.h | 6 +- src/core/call/CallManagerImpl.cpp | 28 +- src/core/call/TwoPartyCall.cpp | 75 ++- src/core/call/TwoPartyCall.h | 21 +- src/core/client/Client.h | 4 +- src/core/core.xcodeproj/project.pbxproj | 4 + src/core/grpc/voice/GRPClient.cpp | 14 +- src/core/grpc/voice/GRPClient.h | 4 +- src/core/grpc/voice/call_signaling.grpc.pb.cc | 10 +- src/core/grpc/voice/call_signaling.grpc.pb.h | 34 +- src/core/grpc/voice/call_signaling.pb.cc | 486 +++++++++++++++++- src/core/grpc/voice/call_signaling.pb.h | 327 +++++++++++- src/core/interface/ICall.h | 2 + src/core/interface/ICallDefs.h | 27 + src/core/proto | 2 +- 16 files changed, 1065 insertions(+), 74 deletions(-) create mode 100644 src/core/interface/ICallDefs.h diff --git a/src/core/call/CallImpl.cpp b/src/core/call/CallImpl.cpp index d4c9230d..11c27502 100644 --- a/src/core/call/CallImpl.cpp +++ b/src/core/call/CallImpl.cpp @@ -27,6 +27,9 @@ extern long kDefaultMaxCallDuration; namespace nynja { + static ::nynjacoin::nccs::csp::HangupRequest_Scope _convertHangupScope(IHangupScope scope); + static ::nynjacoin::nccs::csp::HangupRequest_ReasonCode _convertHangupReason(IHangupReason reason); + CallImpl::CallImpl(const std::shared_ptr callFactory, const std::string accessToken, const std::string callId, @@ -126,17 +129,20 @@ namespace nynja { } void CallImpl::hangup() { - - close(ICallState::ICallStateClosed); + hangup(IHangupScopeDefault, IHangupReasonUserAction); + } + + void CallImpl::hangup(IHangupScope scope, IHangupReason reason) { + close(ICallState::ICallStateClosed, scope, reason); notifyCallEndedIfNecessary(); setState(nynja::ICallStateClosed); } - + void CallImpl::end() { - close(ICallState::ICallStateClosed); + close(ICallState::ICallStateClosed, IHangupScopeDefault, IHangupReasonUserAction); notifyCallEndedIfNecessary(); @@ -451,7 +457,7 @@ namespace nynja { _mediaChannelReady = false; // Thread: [MediaControl] - close(ICallState::ICallStateFailed); + close(ICallState::ICallStateFailed, IHangupScopeDefault, IHangupReasonError); notifyCallEndedIfNecessary(); } @@ -460,11 +466,27 @@ namespace nynja { _mediaChannelReady = false; // Thread: [MediaControl] - close(ICallState::ICallStateClosed); + close(ICallState::ICallStateClosed, IHangupScopeDefault, IHangupReasonUserAction); notifyCallEndedIfNecessary(); } - + + void CallImpl::mediaChannelTerminated(::nynjacoin::nccs::csp::TerminateReason reason) + { + IHangupScope scope = IHangupScopeDefault; + + _mediaChannelReady = false; + + if (reason == ::nynjacoin::nccs::csp::PARTICIPANT_HUNG_UP) { + scope = IHangupScopeThisParticipant; + } + + // Thread: [MediaControl] + close(ICallState::ICallStateClosed, scope, IHangupReasonUserAction); + + notifyCallEndedIfNecessary(); + } + void CallImpl::offerReceived(const std::string &connId, const std::string& content, uint32_t priority, @@ -515,6 +537,11 @@ namespace nynja { void CallImpl::terminated(const std::string &connId, ::nynjacoin::nccs::csp::TerminateReason reason) { RTC_LOG(LS_INFO) << __FUNCTION__ << " connId: " << connId << " reason: " << reason; + + if (reason == ::nynjacoin::nccs::csp::PARTICIPANT_HUNG_UP) { + // just close my connection and that's it + RTC_LOG(LS_INFO) << __FUNCTION__ << " PARTICIPANT_HUNG_UP "; + } } void CallImpl::connectionOpened(const std::string &connId, bool sendOffer) { @@ -1146,7 +1173,7 @@ namespace nynja { } } - void CallImpl::close(ICallState closeState) + void CallImpl::close(ICallState closeState, IHangupScope scope, IHangupReason reason) { ICallState newState = ICallState::ICallStateCount; @@ -1163,14 +1190,16 @@ namespace nynja { { std::lock_guard lock(_mutex_call); if (nullptr != _client) { - if (isHangupNecessaryNoThreadSafe()) { + if (scope == IHangupScopeThisParticipant && !isConference()) { + RTC_LOG(LS_INFO) << " called picked elsewhere, no hangup via signaling is required"; + } else if (isHangupNecessaryNoThreadSafe()) { RTC_LOG(LS_INFO) << " will hangup call"; - _client->hangup(); + _client->hangup(_convertHangupScope(scope), _convertHangupReason(reason)); } else { RTC_LOG(LS_INFO) << " no hangup via signaling is required"; } - RTC_LOG(LS_INFO) << " will close media channle"; + RTC_LOG(LS_INFO) << " will close media channee"; _client->closeMediaChannel(); } @@ -1218,5 +1247,49 @@ namespace nynja { _delegate->emitAudioResumed(this); } } + + + static ::nynjacoin::nccs::csp::HangupRequest_Scope _convertHangupScope(IHangupScope scope) + { + ::nynjacoin::nccs::csp::HangupRequest_Scope result; + switch (scope) { + case IHangupScopeDefault: + result = ::nynjacoin::nccs::csp::HangupRequest_Scope_DEFAULT; + break; + case IHangupScopeCall: + result = ::nynjacoin::nccs::csp::HangupRequest_Scope_CALL; + break; + case IHangupScopeThisParticipant: + result = ::nynjacoin::nccs::csp::HangupRequest_Scope_THIS_PARTICIPANT; + break; + case IHangupScopeMyOtherParticipants: + result = ::nynjacoin::nccs::csp::HangupRequest_Scope_MY_OTHER_PARTICIPANTS; + break; + default: + result = ::nynjacoin::nccs::csp::HangupRequest_Scope_DEFAULT; + assert(false); + break; + } + + return result; + } + static ::nynjacoin::nccs::csp::HangupRequest_ReasonCode _convertHangupReason(IHangupReason reason) + { + ::nynjacoin::nccs::csp::HangupRequest_ReasonCode result; + switch (reason) { + case IHangupReasonUserAction: + result = ::nynjacoin::nccs::csp::HangupRequest_ReasonCode_USER_ACTION; + break; + case IHangupReasonError: + result = ::nynjacoin::nccs::csp::HangupRequest_ReasonCode_ERROR; + break; + default: + result = ::nynjacoin::nccs::csp::HangupRequest_ReasonCode_USER_ACTION; + assert(false); + break; + } + + return result; + } } diff --git a/src/core/call/CallImpl.h b/src/core/call/CallImpl.h index aead44b0..9d29fd70 100644 --- a/src/core/call/CallImpl.h +++ b/src/core/call/CallImpl.h @@ -59,6 +59,7 @@ namespace nynja { void start() override; void hangup() override; + void hangup(IHangupScope scope, IHangupReason reason) override; void end() override; bool accept() override; void reject() override; @@ -170,7 +171,8 @@ namespace nynja { void mediaChannelReady() override; void mediaChannelFailed() override; void mediaChannelClosed() override; - + void mediaChannelTerminated(::nynjacoin::nccs::csp::TerminateReason reason) override; + void offerReceived(const std::string &connId, const std::string& content, uint32_t priority, @@ -257,7 +259,7 @@ namespace nynja { virtual void openStateChannel() = 0; virtual void reOpenStateChannel() = 0; - void close(ICallState closeState); + void close(ICallState closeState, IHangupScope scope, IHangupReason reason); virtual bool isHangupNecessaryNoThreadSafe() const = 0; diff --git a/src/core/call/CallManagerImpl.cpp b/src/core/call/CallManagerImpl.cpp index be1676df..7c9553e9 100644 --- a/src/core/call/CallManagerImpl.cpp +++ b/src/core/call/CallManagerImpl.cpp @@ -1650,9 +1650,9 @@ namespace nynja { if (newInvState == TwoPartyCallActive) { if( 0 == dynamic_cast(callPtr.get())->acceptedOnDevice().compare(_deviceId)) { acceptedCalls.push_back(callPtr); - } else { + } /* DO NOT DELETE THE CODE YET else { acceptedElsewhereCalls.push_back(callPtr); - } + }*/ } else if (newInvState == TwoPartyCallCompleted) { stoppedRingingCalls.push_back(callPtr); dynamic_cast(callPtr.get())->setEndReason(ICallEndReasonMissed); @@ -1662,9 +1662,31 @@ namespace nynja { completedCalls.push_back(callPtr); dynamic_cast(callPtr.get())->setEndReason(ICallEndReasonCompleted); - if (0 != dynamic_cast(callPtr.get())->acceptedOnDevice().compare(_deviceId)) { + /*if (0 != dynamic_cast(callPtr.get())->acceptedOnDevice().compare(_deviceId)) { // p2p call ended while runnign on another device elsewhereCallsFinished.push_back(callPtr); + }*/ + } + + // Check participant info to determine if call is active on this device, other device or both + if (newInvState == TwoPartyCallCompleted || newInvState == TwoPartyCallActive) { + TwoPartyCallActiveLocation location = dynamic_cast(callPtr.get())->determineActiveLocationStateChanged(); + + switch (location) { + case TwoPartyCallActiveNowhere: + // p2p call ended while runnign on another device + elsewhereCallsFinished.push_back(callPtr); + break; + case TwoPartyCallActiveHere: + // p2p call ended while runnign on another device + elsewhereCallsFinished.push_back(callPtr); + break; + case TwoPartyCallActiveElsewhere: + acceptedElsewhereCalls.push_back(callPtr); + break; + case TwoPartyCallActiveNoChange: + default: + break; } } } diff --git a/src/core/call/TwoPartyCall.cpp b/src/core/call/TwoPartyCall.cpp index b8b4ab1e..264daf7a 100644 --- a/src/core/call/TwoPartyCall.cpp +++ b/src/core/call/TwoPartyCall.cpp @@ -315,7 +315,7 @@ namespace nynja { } bool TwoPartyCall::pickup() { - + _pickingUp = true; CallImpl::start(); return true; } @@ -344,6 +344,47 @@ namespace nynja { return (isActiveElsewhere && !isActiveHere); } + TwoPartyCallActiveLocation TwoPartyCall::determineActiveLocationStateChanged() + { + TwoPartyCallActiveLocation result = TwoPartyCallActiveNoChange; + bool isActiveElsewhere = false; + bool isActiveHere = false; + std::lock_guard lock(_mutex_call); + + if (_uaPtr != nullptr && _uaPtr->call().data().has_two_party() && + _uaPtr->call().data().two_party().participant_info_size() > 0) + { + for(int i = 0; i < _uaPtr->call().data().two_party().participant_info_size(); ++i) + { + const auto& pci = _uaPtr->call().data().two_party().participant_info(i); + if (0 == pci.client_id().compare(_deviceId)) { + // Call has been accepted on my side + isActiveHere = true; + } else { + isActiveElsewhere = true; + } + } + } + + if (isActiveHere) { + result = TwoPartyCallActiveHere; + } else if (isActiveElsewhere) { + result = TwoPartyCallActiveElsewhere; + } else { + result = TwoPartyCallActiveNowhere; + } + + // check new active state with the old active state + if (result == _activeLocation) { + // no change, report it + return TwoPartyCallActiveNoChange; + } + + // save new active location and report it + _activeLocation = result; + return result; + } + void TwoPartyCall::markAsDeleted() { CallImpl::markAsDeleted(); std::lock_guard lock(_mutex_call); @@ -371,10 +412,42 @@ namespace nynja { processPendingIceCandidates(); } + void TwoPartyCall::onConnected(Conductor* conductor) { + // Now check if I was the person who picks up the call + if ( _pickingUp ) { + RTC_LOG(LS_INFO) << __FUNCTION__ << " Pickup successfull, terminate other participants"; + _client->hangup(::nynjacoin::nccs::csp::HangupRequest_Scope_MY_OTHER_PARTICIPANTS, + ::nynjacoin::nccs::csp::HangupRequest_ReasonCode_USER_ACTION); + _pickingUp = false; + } + + // call base + CallImpl::onConnected(conductor); + } + + void TwoPartyCall::onFailed(Conductor* conductor) { + if ( _pickingUp ) { + RTC_LOG(LS_INFO) << __FUNCTION__ << " Pickup failed. no action required"; + _pickingUp = false; + } + CallImpl::onFailed(conductor); + } + + void TwoPartyCall::onDisconnected(Conductor* conductor) { + CallImpl::onDisconnected(conductor); + } + void TwoPartyCall::mediaChannelReady() { CallImpl::mediaChannelReady(); } + void TwoPartyCall::mediaChannelFailed() { + if ( _pickingUp ) { + _pickingUp = false; + } + CallImpl::mediaChannelFailed(); + } + void TwoPartyCall::connectionOpened(const std::string &connId, bool sendOffer) { CallImpl::connectionOpened(connId, sendOffer); updateConnIdForStoredPackets(connId); diff --git a/src/core/call/TwoPartyCall.h b/src/core/call/TwoPartyCall.h index 978eee05..d0643298 100644 --- a/src/core/call/TwoPartyCall.h +++ b/src/core/call/TwoPartyCall.h @@ -74,6 +74,13 @@ namespace nynja { TwoPartyCallCount = 4 }; + enum TwoPartyCallActiveLocation { + TwoPartyCallActiveNoChange = 0, + TwoPartyCallActiveNowhere = 1, + TwoPartyCallActiveHere = 2, + TwoPartyCallActiveElsewhere = 4 + }; + class TwoPartyCall : public CallImpl { public: @@ -123,7 +130,9 @@ namespace nynja { long getMaxCallDuration() const override; bool pickup() override; bool isActiveElsewhere() const override; - + + TwoPartyCallActiveLocation determineActiveLocationStateChanged(); + protected: void markAsDeleted() override; @@ -131,8 +140,13 @@ namespace nynja { void onSdpAnswer(Conductor* conductor, const std::string& sdp, const std::string& connId, const TrackInfoVec& track_info) override; void onIceCandidate(Conductor* conductor, const std::string& mid, int mline, const std::string& candidate, const std::string& connId) override; - + void onConnected(Conductor* conductor) override; + void onFailed(Conductor* conductor) override; + void onDisconnected(Conductor* conductor) override; + + // ClientCallback void mediaChannelReady() override; + void mediaChannelFailed() override; void connectionOpened(const std::string &connId, bool sendOffer) override; @@ -141,6 +155,7 @@ namespace nynja { void processInitialOffer(); void updateConnIdForStoredPackets(const std::string &connId); + private: std::shared_ptr _uaPtr; @@ -148,6 +163,8 @@ namespace nynja { std::vector> _pending_ices; std::unique_ptr _initialOffer; bool _initialOfferUsed = false; + bool _pickingUp = false; + TwoPartyCallActiveLocation _activeLocation = TwoPartyCallActiveNowhere; }; } diff --git a/src/core/client/Client.h b/src/core/client/Client.h index b6e2cd77..c091c568 100644 --- a/src/core/client/Client.h +++ b/src/core/client/Client.h @@ -26,6 +26,7 @@ namespace nynja { virtual void mediaChannelReady() = 0; virtual void mediaChannelFailed() = 0; virtual void mediaChannelClosed() = 0; + virtual void mediaChannelTerminated(::nynjacoin::nccs::csp::TerminateReason reason) = 0; virtual void offerReceived(const std::string &connId, const std::string& content, @@ -64,7 +65,8 @@ namespace nynja { const std::string& accessToken) = 0; virtual void reOpenMediaChannel() = 0; virtual void closeMediaChannel() = 0; - virtual void hangup() = 0; + virtual void hangup(::nynjacoin::nccs::csp::HangupRequest_Scope scope, + ::nynjacoin::nccs::csp::HangupRequest_ReasonCode reason) = 0; virtual void ConnectToPeer(int peer_id) = 0; virtual void DisconnectFromCurrentPeer() = 0; virtual void UIThreadCallback(int msg_id, void* data) = 0; diff --git a/src/core/core.xcodeproj/project.pbxproj b/src/core/core.xcodeproj/project.pbxproj index bf608e1f..2bc737ba 100644 --- a/src/core/core.xcodeproj/project.pbxproj +++ b/src/core/core.xcodeproj/project.pbxproj @@ -174,6 +174,7 @@ 5BDD256E23F5382D005B55D3 /* NynjaCoreVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BDD256D23F5382D005B55D3 /* NynjaCoreVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5BE1800E23FBDBB500DE38F7 /* dbgInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BE1800C23FBDBB500DE38F7 /* dbgInfo.h */; }; 5BE1800F23FBDBB500DE38F7 /* dbgInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5BE1800D23FBDBB500DE38F7 /* dbgInfo.cpp */; }; + 5BE7383D2480DB6000F16ED2 /* ICallDefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BE7383C2480DB6000F16ED2 /* ICallDefs.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5BF0C5622113429400EE0B6D /* WebRtcVideoPreview.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BF0C5612113429400EE0B6D /* WebRtcVideoPreview.h */; }; 5BF0C5692113453E00EE0B6D /* IOSWebRtcVideoPreview.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BF0C5672113453E00EE0B6D /* IOSWebRtcVideoPreview.h */; }; 5BF0C56A2113453E00EE0B6D /* IOSWebRtcVideoPreview.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5BF0C5682113453E00EE0B6D /* IOSWebRtcVideoPreview.mm */; }; @@ -479,6 +480,7 @@ 5BDD256D23F5382D005B55D3 /* NynjaCoreVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NynjaCoreVersion.h; sourceTree = ""; }; 5BE1800C23FBDBB500DE38F7 /* dbgInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dbgInfo.h; sourceTree = ""; }; 5BE1800D23FBDBB500DE38F7 /* dbgInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dbgInfo.cpp; sourceTree = ""; }; + 5BE7383C2480DB6000F16ED2 /* ICallDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ICallDefs.h; sourceTree = ""; }; 5BED166D20AC07B2007A2565 /* IOwnershipProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IOwnershipProtocol.h; sourceTree = ""; }; 5BF0C5612113429400EE0B6D /* WebRtcVideoPreview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebRtcVideoPreview.h; sourceTree = ""; }; 5BF0C5672113453E00EE0B6D /* IOSWebRtcVideoPreview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IOSWebRtcVideoPreview.h; sourceTree = ""; }; @@ -682,6 +684,7 @@ 5B15DB212195A4050062E147 /* ICallLogFetchedResults.h */, 5B15DB1F2195A3DE0062E147 /* ICallLogFetchRequest.h */, 5B22AF54208F31C2009D756A /* ICallManager.h */, + 5BE7383C2480DB6000F16ED2 /* ICallDefs.h */, 5BCA4DE7209700C200A3AECC /* ICall.h */, 5BCA4DE820970BBF00A3AECC /* ICallParticipant.h */, 5B7B5DC121A2B9F5002BCFC9 /* ICallParticipantRecord.h */, @@ -1350,6 +1353,7 @@ C79D7B63216272E400F4F8A7 /* LoginManagerImpl.h in Headers */, 5BD0C56023DED0AA007F201D /* MediaTrackInfo.h in Headers */, 5BB0047820B5F00D0038D01B /* state_package_user_conferences.pb.h in Headers */, + 5BE7383D2480DB6000F16ED2 /* ICallDefs.h in Headers */, C79E15C121E386C700D82A8C /* CallManagerDelegate.h in Headers */, C79D7B9C216DFE0D00F4F8A7 /* auth.grpc.pb.h in Headers */, 5B0DA3DB20F6514000E7ED47 /* call_factory.grpc.pb.h in Headers */, diff --git a/src/core/grpc/voice/GRPClient.cpp b/src/core/grpc/voice/GRPClient.cpp index b94b507d..6a7ae56f 100644 --- a/src/core/grpc/voice/GRPClient.cpp +++ b/src/core/grpc/voice/GRPClient.cpp @@ -135,7 +135,8 @@ namespace nynja { } - void GRPCClient::hangup() + void GRPCClient::hangup(::nynjacoin::nccs::csp::HangupRequest_Scope scope, + ::nynjacoin::nccs::csp::HangupRequest_ReasonCode reason) { std::lock_guard lk(async_stream_mutex_); RTC_LOG(LS_INFO) << __FUNCTION__; @@ -149,7 +150,7 @@ namespace nynja { _fHungUp = true; ::grpc::ClientContext context; - ::nynjacoin::nccs::def::Void request; + ::nynjacoin::nccs::csp::HangupRequest request; ::nynjacoin::nccs::def::Void response; std::stringstream ss; @@ -162,6 +163,9 @@ namespace nynja { gpr_time_from_millis(5000, GPR_TIMESPAN)); context.set_deadline(deadline); + request.set_scope(scope); + request.set_reason_code(reason); + // server's exposed services. std::unique_ptr stub = Call::NewStub(_provider->getChannel(GRPChannelProvider::GRPChannelKind::GRPC_CHANNEL_CALL)); @@ -281,6 +285,9 @@ namespace nynja { int reconnectDelay = 1; //seconds bool mediaChannelFailed = false; + //reset terminate reason + _reason = ::nynjacoin::nccs::csp::TerminateReason_INT_MIN_SENTINEL_DO_NOT_USE_; + do { MediaControlResult res = mediaControlLoop(); if(MediaControlResult::Fatal == res) { @@ -313,6 +320,8 @@ namespace nynja { clearWriteQueue(); if (mediaChannelFailed) _callback->mediaChannelFailed(); + else if (TerminateReason_IsValid(_reason)) + _callback->mediaChannelTerminated(_reason); else _callback->mediaChannelClosed(); @@ -712,6 +721,7 @@ namespace nynja { case HandshakeMessage::kTerminate: { const Terminate& terminate = msg.terminate(); + _reason = terminate.reason(); _callback->terminated(pkt->connection_id(), terminate.reason()); } break; diff --git a/src/core/grpc/voice/GRPClient.h b/src/core/grpc/voice/GRPClient.h index c42f10d5..91c67b27 100644 --- a/src/core/grpc/voice/GRPClient.h +++ b/src/core/grpc/voice/GRPClient.h @@ -68,7 +68,8 @@ namespace nynja { const std::string& accessToken) override; virtual void reOpenMediaChannel() override; virtual void closeMediaChannel() override; - virtual void hangup() override; + virtual void hangup(::nynjacoin::nccs::csp::HangupRequest_Scope scope, + ::nynjacoin::nccs::csp::HangupRequest_ReasonCode reason) override; virtual void ConnectToPeer(int peer_id) override; virtual void DisconnectFromCurrentPeer() override; @@ -139,6 +140,7 @@ namespace nynja { gpr_timespec _time_reconnect_exp; bool _streamFinished = true; bool _emitsVideo; + ::nynjacoin::nccs::csp::TerminateReason _reason = ::nynjacoin::nccs::csp::TerminateReason_INT_MIN_SENTINEL_DO_NOT_USE_; }; } diff --git a/src/core/grpc/voice/call_signaling.grpc.pb.cc b/src/core/grpc/voice/call_signaling.grpc.pb.cc index 2fe03b11..241f4eae 100644 --- a/src/core/grpc/voice/call_signaling.grpc.pb.cc +++ b/src/core/grpc/voice/call_signaling.grpc.pb.cc @@ -168,15 +168,15 @@ Call::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel) return ::grpc::internal::ClientAsyncReaderWriterFactory< ::nynjacoin::nccs::csp::HandshakePacket, ::nynjacoin::nccs::csp::HandshakePacket>::Create(channel_.get(), cq, rpcmethod_OpenMediaControl_, context, false, nullptr); } -::grpc::Status Call::Stub::Hangup(::grpc::ClientContext* context, const ::nynjacoin::nccs::def::Void& request, ::nynjacoin::nccs::def::Void* response) { +::grpc::Status Call::Stub::Hangup(::grpc::ClientContext* context, const ::nynjacoin::nccs::csp::HangupRequest& request, ::nynjacoin::nccs::def::Void* response) { return ::grpc::internal::BlockingUnaryCall(channel_.get(), rpcmethod_Hangup_, context, request, response); } -::grpc::ClientAsyncResponseReader< ::nynjacoin::nccs::def::Void>* Call::Stub::AsyncHangupRaw(::grpc::ClientContext* context, const ::nynjacoin::nccs::def::Void& request, ::grpc::CompletionQueue* cq) { +::grpc::ClientAsyncResponseReader< ::nynjacoin::nccs::def::Void>* Call::Stub::AsyncHangupRaw(::grpc::ClientContext* context, const ::nynjacoin::nccs::csp::HangupRequest& request, ::grpc::CompletionQueue* cq) { return ::grpc::internal::ClientAsyncResponseReaderFactory< ::nynjacoin::nccs::def::Void>::Create(channel_.get(), cq, rpcmethod_Hangup_, context, request, true); } -::grpc::ClientAsyncResponseReader< ::nynjacoin::nccs::def::Void>* Call::Stub::PrepareAsyncHangupRaw(::grpc::ClientContext* context, const ::nynjacoin::nccs::def::Void& request, ::grpc::CompletionQueue* cq) { +::grpc::ClientAsyncResponseReader< ::nynjacoin::nccs::def::Void>* Call::Stub::PrepareAsyncHangupRaw(::grpc::ClientContext* context, const ::nynjacoin::nccs::csp::HangupRequest& request, ::grpc::CompletionQueue* cq) { return ::grpc::internal::ClientAsyncResponseReaderFactory< ::nynjacoin::nccs::def::Void>::Create(channel_.get(), cq, rpcmethod_Hangup_, context, request, false); } @@ -189,7 +189,7 @@ Call::Service::Service() { AddMethod(new ::grpc::internal::RpcServiceMethod( Call_method_names[1], ::grpc::internal::RpcMethod::NORMAL_RPC, - new ::grpc::internal::RpcMethodHandler< Call::Service, ::nynjacoin::nccs::def::Void, ::nynjacoin::nccs::def::Void>( + new ::grpc::internal::RpcMethodHandler< Call::Service, ::nynjacoin::nccs::csp::HangupRequest, ::nynjacoin::nccs::def::Void>( std::mem_fn(&Call::Service::Hangup), this))); } @@ -202,7 +202,7 @@ Call::Service::~Service() { return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); } -::grpc::Status Call::Service::Hangup(::grpc::ServerContext* context, const ::nynjacoin::nccs::def::Void* request, ::nynjacoin::nccs::def::Void* response) { +::grpc::Status Call::Service::Hangup(::grpc::ServerContext* context, const ::nynjacoin::nccs::csp::HangupRequest* request, ::nynjacoin::nccs::def::Void* response) { (void) context; (void) request; (void) response; diff --git a/src/core/grpc/voice/call_signaling.grpc.pb.h b/src/core/grpc/voice/call_signaling.grpc.pb.h index 845840c8..76d05ad7 100644 --- a/src/core/grpc/voice/call_signaling.grpc.pb.h +++ b/src/core/grpc/voice/call_signaling.grpc.pb.h @@ -389,19 +389,19 @@ class Call final { std::unique_ptr< ::grpc::ClientAsyncReaderWriterInterface< ::nynjacoin::nccs::csp::HandshakePacket, ::nynjacoin::nccs::csp::HandshakePacket>> PrepareAsyncOpenMediaControl(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncReaderWriterInterface< ::nynjacoin::nccs::csp::HandshakePacket, ::nynjacoin::nccs::csp::HandshakePacket>>(PrepareAsyncOpenMediaControlRaw(context, cq)); } - virtual ::grpc::Status Hangup(::grpc::ClientContext* context, const ::nynjacoin::nccs::def::Void& request, ::nynjacoin::nccs::def::Void* response) = 0; - std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::nynjacoin::nccs::def::Void>> AsyncHangup(::grpc::ClientContext* context, const ::nynjacoin::nccs::def::Void& request, ::grpc::CompletionQueue* cq) { + virtual ::grpc::Status Hangup(::grpc::ClientContext* context, const ::nynjacoin::nccs::csp::HangupRequest& request, ::nynjacoin::nccs::def::Void* response) = 0; + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::nynjacoin::nccs::def::Void>> AsyncHangup(::grpc::ClientContext* context, const ::nynjacoin::nccs::csp::HangupRequest& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::nynjacoin::nccs::def::Void>>(AsyncHangupRaw(context, request, cq)); } - std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::nynjacoin::nccs::def::Void>> PrepareAsyncHangup(::grpc::ClientContext* context, const ::nynjacoin::nccs::def::Void& request, ::grpc::CompletionQueue* cq) { + std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::nynjacoin::nccs::def::Void>> PrepareAsyncHangup(::grpc::ClientContext* context, const ::nynjacoin::nccs::csp::HangupRequest& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::nynjacoin::nccs::def::Void>>(PrepareAsyncHangupRaw(context, request, cq)); } private: virtual ::grpc::ClientReaderWriterInterface< ::nynjacoin::nccs::csp::HandshakePacket, ::nynjacoin::nccs::csp::HandshakePacket>* OpenMediaControlRaw(::grpc::ClientContext* context) = 0; virtual ::grpc::ClientAsyncReaderWriterInterface< ::nynjacoin::nccs::csp::HandshakePacket, ::nynjacoin::nccs::csp::HandshakePacket>* AsyncOpenMediaControlRaw(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq, void* tag) = 0; virtual ::grpc::ClientAsyncReaderWriterInterface< ::nynjacoin::nccs::csp::HandshakePacket, ::nynjacoin::nccs::csp::HandshakePacket>* PrepareAsyncOpenMediaControlRaw(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq) = 0; - virtual ::grpc::ClientAsyncResponseReaderInterface< ::nynjacoin::nccs::def::Void>* AsyncHangupRaw(::grpc::ClientContext* context, const ::nynjacoin::nccs::def::Void& request, ::grpc::CompletionQueue* cq) = 0; - virtual ::grpc::ClientAsyncResponseReaderInterface< ::nynjacoin::nccs::def::Void>* PrepareAsyncHangupRaw(::grpc::ClientContext* context, const ::nynjacoin::nccs::def::Void& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientAsyncResponseReaderInterface< ::nynjacoin::nccs::def::Void>* AsyncHangupRaw(::grpc::ClientContext* context, const ::nynjacoin::nccs::csp::HangupRequest& request, ::grpc::CompletionQueue* cq) = 0; + virtual ::grpc::ClientAsyncResponseReaderInterface< ::nynjacoin::nccs::def::Void>* PrepareAsyncHangupRaw(::grpc::ClientContext* context, const ::nynjacoin::nccs::csp::HangupRequest& request, ::grpc::CompletionQueue* cq) = 0; }; class Stub final : public StubInterface { public: @@ -415,11 +415,11 @@ class Call final { std::unique_ptr< ::grpc::ClientAsyncReaderWriter< ::nynjacoin::nccs::csp::HandshakePacket, ::nynjacoin::nccs::csp::HandshakePacket>> PrepareAsyncOpenMediaControl(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncReaderWriter< ::nynjacoin::nccs::csp::HandshakePacket, ::nynjacoin::nccs::csp::HandshakePacket>>(PrepareAsyncOpenMediaControlRaw(context, cq)); } - ::grpc::Status Hangup(::grpc::ClientContext* context, const ::nynjacoin::nccs::def::Void& request, ::nynjacoin::nccs::def::Void* response) override; - std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::nynjacoin::nccs::def::Void>> AsyncHangup(::grpc::ClientContext* context, const ::nynjacoin::nccs::def::Void& request, ::grpc::CompletionQueue* cq) { + ::grpc::Status Hangup(::grpc::ClientContext* context, const ::nynjacoin::nccs::csp::HangupRequest& request, ::nynjacoin::nccs::def::Void* response) override; + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::nynjacoin::nccs::def::Void>> AsyncHangup(::grpc::ClientContext* context, const ::nynjacoin::nccs::csp::HangupRequest& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::nynjacoin::nccs::def::Void>>(AsyncHangupRaw(context, request, cq)); } - std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::nynjacoin::nccs::def::Void>> PrepareAsyncHangup(::grpc::ClientContext* context, const ::nynjacoin::nccs::def::Void& request, ::grpc::CompletionQueue* cq) { + std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::nynjacoin::nccs::def::Void>> PrepareAsyncHangup(::grpc::ClientContext* context, const ::nynjacoin::nccs::csp::HangupRequest& request, ::grpc::CompletionQueue* cq) { return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::nynjacoin::nccs::def::Void>>(PrepareAsyncHangupRaw(context, request, cq)); } @@ -428,8 +428,8 @@ class Call final { ::grpc::ClientReaderWriter< ::nynjacoin::nccs::csp::HandshakePacket, ::nynjacoin::nccs::csp::HandshakePacket>* OpenMediaControlRaw(::grpc::ClientContext* context) override; ::grpc::ClientAsyncReaderWriter< ::nynjacoin::nccs::csp::HandshakePacket, ::nynjacoin::nccs::csp::HandshakePacket>* AsyncOpenMediaControlRaw(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq, void* tag) override; ::grpc::ClientAsyncReaderWriter< ::nynjacoin::nccs::csp::HandshakePacket, ::nynjacoin::nccs::csp::HandshakePacket>* PrepareAsyncOpenMediaControlRaw(::grpc::ClientContext* context, ::grpc::CompletionQueue* cq) override; - ::grpc::ClientAsyncResponseReader< ::nynjacoin::nccs::def::Void>* AsyncHangupRaw(::grpc::ClientContext* context, const ::nynjacoin::nccs::def::Void& request, ::grpc::CompletionQueue* cq) override; - ::grpc::ClientAsyncResponseReader< ::nynjacoin::nccs::def::Void>* PrepareAsyncHangupRaw(::grpc::ClientContext* context, const ::nynjacoin::nccs::def::Void& request, ::grpc::CompletionQueue* cq) override; + ::grpc::ClientAsyncResponseReader< ::nynjacoin::nccs::def::Void>* AsyncHangupRaw(::grpc::ClientContext* context, const ::nynjacoin::nccs::csp::HangupRequest& request, ::grpc::CompletionQueue* cq) override; + ::grpc::ClientAsyncResponseReader< ::nynjacoin::nccs::def::Void>* PrepareAsyncHangupRaw(::grpc::ClientContext* context, const ::nynjacoin::nccs::csp::HangupRequest& request, ::grpc::CompletionQueue* cq) override; const ::grpc::internal::RpcMethod rpcmethod_OpenMediaControl_; const ::grpc::internal::RpcMethod rpcmethod_Hangup_; }; @@ -440,7 +440,7 @@ class Call final { Service(); virtual ~Service(); virtual ::grpc::Status OpenMediaControl(::grpc::ServerContext* context, ::grpc::ServerReaderWriter< ::nynjacoin::nccs::csp::HandshakePacket, ::nynjacoin::nccs::csp::HandshakePacket>* stream); - virtual ::grpc::Status Hangup(::grpc::ServerContext* context, const ::nynjacoin::nccs::def::Void* request, ::nynjacoin::nccs::def::Void* response); + virtual ::grpc::Status Hangup(::grpc::ServerContext* context, const ::nynjacoin::nccs::csp::HangupRequest* request, ::nynjacoin::nccs::def::Void* response); }; template class WithAsyncMethod_OpenMediaControl : public BaseClass { @@ -474,11 +474,11 @@ class Call final { BaseClassMustBeDerivedFromService(this); } // disable synchronous version of this method - ::grpc::Status Hangup(::grpc::ServerContext* context, const ::nynjacoin::nccs::def::Void* request, ::nynjacoin::nccs::def::Void* response) final override { + ::grpc::Status Hangup(::grpc::ServerContext* context, const ::nynjacoin::nccs::csp::HangupRequest* request, ::nynjacoin::nccs::def::Void* response) final override { abort(); return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); } - void RequestHangup(::grpc::ServerContext* context, ::nynjacoin::nccs::def::Void* request, ::grpc::ServerAsyncResponseWriter< ::nynjacoin::nccs::def::Void>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { + void RequestHangup(::grpc::ServerContext* context, ::nynjacoin::nccs::csp::HangupRequest* request, ::grpc::ServerAsyncResponseWriter< ::nynjacoin::nccs::def::Void>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) { ::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag); } }; @@ -512,7 +512,7 @@ class Call final { BaseClassMustBeDerivedFromService(this); } // disable synchronous version of this method - ::grpc::Status Hangup(::grpc::ServerContext* context, const ::nynjacoin::nccs::def::Void* request, ::nynjacoin::nccs::def::Void* response) final override { + ::grpc::Status Hangup(::grpc::ServerContext* context, const ::nynjacoin::nccs::csp::HangupRequest* request, ::nynjacoin::nccs::def::Void* response) final override { abort(); return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); } @@ -524,18 +524,18 @@ class Call final { public: WithStreamedUnaryMethod_Hangup() { ::grpc::Service::MarkMethodStreamed(1, - new ::grpc::internal::StreamedUnaryHandler< ::nynjacoin::nccs::def::Void, ::nynjacoin::nccs::def::Void>(std::bind(&WithStreamedUnaryMethod_Hangup::StreamedHangup, this, std::placeholders::_1, std::placeholders::_2))); + new ::grpc::internal::StreamedUnaryHandler< ::nynjacoin::nccs::csp::HangupRequest, ::nynjacoin::nccs::def::Void>(std::bind(&WithStreamedUnaryMethod_Hangup::StreamedHangup, this, std::placeholders::_1, std::placeholders::_2))); } ~WithStreamedUnaryMethod_Hangup() override { BaseClassMustBeDerivedFromService(this); } // disable regular version of this method - ::grpc::Status Hangup(::grpc::ServerContext* context, const ::nynjacoin::nccs::def::Void* request, ::nynjacoin::nccs::def::Void* response) final override { + ::grpc::Status Hangup(::grpc::ServerContext* context, const ::nynjacoin::nccs::csp::HangupRequest* request, ::nynjacoin::nccs::def::Void* response) final override { abort(); return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, ""); } // replace default version of method with streamed unary - virtual ::grpc::Status StreamedHangup(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::nynjacoin::nccs::def::Void,::nynjacoin::nccs::def::Void>* server_unary_streamer) = 0; + virtual ::grpc::Status StreamedHangup(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::nynjacoin::nccs::csp::HangupRequest,::nynjacoin::nccs::def::Void>* server_unary_streamer) = 0; }; typedef WithStreamedUnaryMethod_Hangup StreamedUnaryService; typedef Service SplitStreamedService; diff --git a/src/core/grpc/voice/call_signaling.pb.cc b/src/core/grpc/voice/call_signaling.pb.cc index 4e1db578..ec104622 100644 --- a/src/core/grpc/voice/call_signaling.pb.cc +++ b/src/core/grpc/voice/call_signaling.pb.cc @@ -90,6 +90,11 @@ class RejectRequestDefaultTypeInternal { ::google::protobuf::internal::ExplicitlyConstructed _instance; } _RejectRequest_default_instance_; +class HangupRequestDefaultTypeInternal { + public: + ::google::protobuf::internal::ExplicitlyConstructed + _instance; +} _HangupRequest_default_instance_; } // namespace csp } // namespace nccs } // namespace nynjacoin @@ -340,8 +345,29 @@ void InitDefaultsRejectRequest() { ::google::protobuf::GoogleOnceInit(&once, &InitDefaultsRejectRequestImpl); } -::google::protobuf::Metadata file_level_metadata[11]; -const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[2]; +void InitDefaultsHangupRequestImpl() { + GOOGLE_PROTOBUF_VERIFY_VERSION; + +#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS + ::google::protobuf::internal::InitProtobufDefaultsForceUnique(); +#else + ::google::protobuf::internal::InitProtobufDefaults(); +#endif // GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS + { + void* ptr = &::nynjacoin::nccs::csp::_HangupRequest_default_instance_; + new (ptr) ::nynjacoin::nccs::csp::HangupRequest(); + ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); + } + ::nynjacoin::nccs::csp::HangupRequest::InitAsDefaultInstance(); +} + +void InitDefaultsHangupRequest() { + static GOOGLE_PROTOBUF_DECLARE_ONCE(once); + ::google::protobuf::GoogleOnceInit(&once, &InitDefaultsHangupRequestImpl); +} + +::google::protobuf::Metadata file_level_metadata[12]; +const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[4]; const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = { ~0u, // no _has_bits_ @@ -429,6 +455,14 @@ const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUT ~0u, // no _oneof_case_ ~0u, // no _weak_field_map_ GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::csp::RejectRequest, end_reason_), + ~0u, // no _has_bits_ + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::csp::HangupRequest, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::csp::HangupRequest, scope_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::csp::HangupRequest, reason_code_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::nynjacoin::nccs::csp::HangupRequest, reason_message_), }; static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::nynjacoin::nccs::csp::IceCandidate)}, @@ -442,6 +476,7 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROT { 51, -1, sizeof(::nynjacoin::nccs::csp::HandshakeMessage)}, { 71, -1, sizeof(::nynjacoin::nccs::csp::HandshakePacket)}, { 79, -1, sizeof(::nynjacoin::nccs::csp::RejectRequest)}, + { 85, -1, sizeof(::nynjacoin::nccs::csp::HangupRequest)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -456,6 +491,7 @@ static ::google::protobuf::Message const * const file_default_instances[] = { reinterpret_cast(&::nynjacoin::nccs::csp::_HandshakeMessage_default_instance_), reinterpret_cast(&::nynjacoin::nccs::csp::_HandshakePacket_default_instance_), reinterpret_cast(&::nynjacoin::nccs::csp::_RejectRequest_default_instance_), + reinterpret_cast(&::nynjacoin::nccs::csp::_HangupRequest_default_instance_), }; void protobuf_AssignDescriptors() { @@ -474,7 +510,7 @@ void protobuf_AssignDescriptorsOnce() { void protobuf_RegisterTypes(const ::std::string&) GOOGLE_PROTOBUF_ATTRIBUTE_COLD; void protobuf_RegisterTypes(const ::std::string&) { protobuf_AssignDescriptorsOnce(); - ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 11); + ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 12); } void AddDescriptorsImpl() { @@ -518,30 +554,38 @@ void AddDescriptorsImpl() { "ssage\030\003 \003(\0132$.nynjacoin.nccs.csp.Handsha" "keMessage\"F\n\rRejectRequest\0225\n\nend_reason" "\030\001 \001(\0132!.nynjacoin.nccs.def.CallEndReaso" - "n*\254\001\n\017TerminateReason\022\n\n\006HANGUP\020\000\022\021\n\rNO_" - "KEEP_ALIVE\020\001\022\013\n\007EJECTED\020\003\022\016\n\nCALL_ENDED\020" - "\004\022\014\n\010REPLACED\020\005\022\020\n\014CLIENT_ERROR\020\006\022\027\n\023SER" - "VICE_UNAVAILABLE\020\007\022\020\n\014SERVER_ERROR\020\010\022\022\n\016" - "ANSWER_TIMEOUT\020\t*\203\001\n\022HandshakeErrorCode\022" - "\027\n\023MEDIA_NOT_SUPPORTED\020\000\022\017\n\013NOT_ALLOWED\020" - "\001\022\016\n\nFLOOR_BUSY\020\002\022\021\n\rINVALID_STATE\020\003\022 \n\034" - "OVERRIDDEN_BY_CLIENT_REQUEST\020\0042\233\002\n\016CallI" - "nvitation\022\?\n\007Confirm\022\030.nynjacoin.nccs.de" - "f.Void\032\030.nynjacoin.nccs.def.Void\"\000\022\?\n\007Si" - "lence\022\030.nynjacoin.nccs.def.Void\032\030.nynjac" - "oin.nccs.def.Void\"\000\022>\n\006Accept\022\030.nynjacoi" - "n.nccs.def.Void\032\030.nynjacoin.nccs.def.Voi" - "d\"\000\022G\n\006Reject\022!.nynjacoin.nccs.csp.Rejec" - "tRequest\032\030.nynjacoin.nccs.def.Void\"\0002\252\001\n" - "\004Call\022b\n\020OpenMediaControl\022#.nynjacoin.nc" - "cs.csp.HandshakePacket\032#.nynjacoin.nccs." - "csp.HandshakePacket\"\000(\0010\001\022>\n\006Hangup\022\030.ny" - "njacoin.nccs.def.Void\032\030.nynjacoin.nccs.d" - "ef.Void\"\000B#\n\037com.nynjacoin.nccs.protocol" - ".cspP\001b\006proto3" + "n\"\235\002\n\rHangupRequest\0226\n\005scope\030\001 \001(\0162\'.nyn" + "jacoin.nccs.csp.HangupRequest.Scope\022A\n\013r" + "eason_code\030\002 \001(\0162,.nynjacoin.nccs.csp.Ha" + "ngupRequest.ReasonCode\022\026\n\016reason_message" + "\030\003 \001(\t\"O\n\005Scope\022\013\n\007DEFAULT\020\000\022\010\n\004CALL\020\001\022\024" + "\n\020THIS_PARTICIPANT\020\002\022\031\n\025MY_OTHER_PARTICI" + "PANTS\020\003\"(\n\nReasonCode\022\017\n\013USER_ACTION\020\000\022\t" + "\n\005ERROR\020\001*\305\001\n\017TerminateReason\022\n\n\006HANGUP\020" + "\000\022\021\n\rNO_KEEP_ALIVE\020\001\022\027\n\023PARTICIPANT_HUNG" + "_UP\020\002\022\013\n\007EJECTED\020\003\022\016\n\nCALL_ENDED\020\004\022\014\n\010RE" + "PLACED\020\005\022\020\n\014CLIENT_ERROR\020\006\022\027\n\023SERVICE_UN" + "AVAILABLE\020\007\022\020\n\014SERVER_ERROR\020\010\022\022\n\016ANSWER_" + "TIMEOUT\020\t*\203\001\n\022HandshakeErrorCode\022\027\n\023MEDI" + "A_NOT_SUPPORTED\020\000\022\017\n\013NOT_ALLOWED\020\001\022\016\n\nFL" + "OOR_BUSY\020\002\022\021\n\rINVALID_STATE\020\003\022 \n\034OVERRID" + "DEN_BY_CLIENT_REQUEST\020\0042\233\002\n\016CallInvitati" + "on\022\?\n\007Confirm\022\030.nynjacoin.nccs.def.Void\032" + "\030.nynjacoin.nccs.def.Void\"\000\022\?\n\007Silence\022\030" + ".nynjacoin.nccs.def.Void\032\030.nynjacoin.ncc" + "s.def.Void\"\000\022>\n\006Accept\022\030.nynjacoin.nccs." + "def.Void\032\030.nynjacoin.nccs.def.Void\"\000\022G\n\006" + "Reject\022!.nynjacoin.nccs.csp.RejectReques" + "t\032\030.nynjacoin.nccs.def.Void\"\0002\263\001\n\004Call\022b" + "\n\020OpenMediaControl\022#.nynjacoin.nccs.csp." + "HandshakePacket\032#.nynjacoin.nccs.csp.Han" + "dshakePacket\"\000(\0010\001\022G\n\006Hangup\022!.nynjacoin" + ".nccs.csp.HangupRequest\032\030.nynjacoin.nccs" + ".def.Void\"\000B#\n\037com.nynjacoin.nccs.protoc" + "ol.cspP\001b\006proto3" }; ::google::protobuf::DescriptorPool::InternalAddGeneratedFile( - descriptor, 2334); + descriptor, 2656); ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile( "call_signaling.proto", &protobuf_RegisterTypes); ::protobuf_definitions_2eproto::AddDescriptors(); @@ -561,14 +605,61 @@ struct StaticDescriptorInitializer { namespace nynjacoin { namespace nccs { namespace csp { -const ::google::protobuf::EnumDescriptor* TerminateReason_descriptor() { +const ::google::protobuf::EnumDescriptor* HangupRequest_Scope_descriptor() { protobuf_call_5fsignaling_2eproto::protobuf_AssignDescriptorsOnce(); return protobuf_call_5fsignaling_2eproto::file_level_enum_descriptors[0]; } +bool HangupRequest_Scope_IsValid(int value) { + switch (value) { + case 0: + case 1: + case 2: + case 3: + return true; + default: + return false; + } +} + +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const HangupRequest_Scope HangupRequest::DEFAULT; +const HangupRequest_Scope HangupRequest::CALL; +const HangupRequest_Scope HangupRequest::THIS_PARTICIPANT; +const HangupRequest_Scope HangupRequest::MY_OTHER_PARTICIPANTS; +const HangupRequest_Scope HangupRequest::Scope_MIN; +const HangupRequest_Scope HangupRequest::Scope_MAX; +const int HangupRequest::Scope_ARRAYSIZE; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 +const ::google::protobuf::EnumDescriptor* HangupRequest_ReasonCode_descriptor() { + protobuf_call_5fsignaling_2eproto::protobuf_AssignDescriptorsOnce(); + return protobuf_call_5fsignaling_2eproto::file_level_enum_descriptors[1]; +} +bool HangupRequest_ReasonCode_IsValid(int value) { + switch (value) { + case 0: + case 1: + return true; + default: + return false; + } +} + +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const HangupRequest_ReasonCode HangupRequest::USER_ACTION; +const HangupRequest_ReasonCode HangupRequest::ERROR; +const HangupRequest_ReasonCode HangupRequest::ReasonCode_MIN; +const HangupRequest_ReasonCode HangupRequest::ReasonCode_MAX; +const int HangupRequest::ReasonCode_ARRAYSIZE; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 +const ::google::protobuf::EnumDescriptor* TerminateReason_descriptor() { + protobuf_call_5fsignaling_2eproto::protobuf_AssignDescriptorsOnce(); + return protobuf_call_5fsignaling_2eproto::file_level_enum_descriptors[2]; +} bool TerminateReason_IsValid(int value) { switch (value) { case 0: case 1: + case 2: case 3: case 4: case 5: @@ -584,7 +675,7 @@ bool TerminateReason_IsValid(int value) { const ::google::protobuf::EnumDescriptor* HandshakeErrorCode_descriptor() { protobuf_call_5fsignaling_2eproto::protobuf_AssignDescriptorsOnce(); - return protobuf_call_5fsignaling_2eproto::file_level_enum_descriptors[1]; + return protobuf_call_5fsignaling_2eproto::file_level_enum_descriptors[3]; } bool HandshakeErrorCode_IsValid(int value) { switch (value) { @@ -4475,6 +4566,347 @@ void RejectRequest::InternalSwap(RejectRequest* other) { } +// =================================================================== + +void HangupRequest::InitAsDefaultInstance() { +} +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int HangupRequest::kScopeFieldNumber; +const int HangupRequest::kReasonCodeFieldNumber; +const int HangupRequest::kReasonMessageFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +HangupRequest::HangupRequest() + : ::google::protobuf::Message(), _internal_metadata_(NULL) { + if (GOOGLE_PREDICT_TRUE(this != internal_default_instance())) { + ::protobuf_call_5fsignaling_2eproto::InitDefaultsHangupRequest(); + } + SharedCtor(); + // @@protoc_insertion_point(constructor:nynjacoin.nccs.csp.HangupRequest) +} +HangupRequest::HangupRequest(const HangupRequest& from) + : ::google::protobuf::Message(), + _internal_metadata_(NULL), + _cached_size_(0) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + reason_message_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.reason_message().size() > 0) { + reason_message_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.reason_message_); + } + ::memcpy(&scope_, &from.scope_, + static_cast(reinterpret_cast(&reason_code_) - + reinterpret_cast(&scope_)) + sizeof(reason_code_)); + // @@protoc_insertion_point(copy_constructor:nynjacoin.nccs.csp.HangupRequest) +} + +void HangupRequest::SharedCtor() { + reason_message_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + ::memset(&scope_, 0, static_cast( + reinterpret_cast(&reason_code_) - + reinterpret_cast(&scope_)) + sizeof(reason_code_)); + _cached_size_ = 0; +} + +HangupRequest::~HangupRequest() { + // @@protoc_insertion_point(destructor:nynjacoin.nccs.csp.HangupRequest) + SharedDtor(); +} + +void HangupRequest::SharedDtor() { + reason_message_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} + +void HangupRequest::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* HangupRequest::descriptor() { + ::protobuf_call_5fsignaling_2eproto::protobuf_AssignDescriptorsOnce(); + return ::protobuf_call_5fsignaling_2eproto::file_level_metadata[kIndexInFileMessages].descriptor; +} + +const HangupRequest& HangupRequest::default_instance() { + ::protobuf_call_5fsignaling_2eproto::InitDefaultsHangupRequest(); + return *internal_default_instance(); +} + +HangupRequest* HangupRequest::New(::google::protobuf::Arena* arena) const { + HangupRequest* n = new HangupRequest; + if (arena != NULL) { + arena->Own(n); + } + return n; +} + +void HangupRequest::Clear() { +// @@protoc_insertion_point(message_clear_start:nynjacoin.nccs.csp.HangupRequest) + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + reason_message_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + ::memset(&scope_, 0, static_cast( + reinterpret_cast(&reason_code_) - + reinterpret_cast(&scope_)) + sizeof(reason_code_)); + _internal_metadata_.Clear(); +} + +bool HangupRequest::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:nynjacoin.nccs.csp.HangupRequest) + for (;;) { + ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // .nynjacoin.nccs.csp.HangupRequest.Scope scope = 1; + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) { + int value; + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>( + input, &value))); + set_scope(static_cast< ::nynjacoin::nccs::csp::HangupRequest_Scope >(value)); + } else { + goto handle_unusual; + } + break; + } + + // .nynjacoin.nccs.csp.HangupRequest.ReasonCode reason_code = 2; + case 2: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) { + int value; + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>( + input, &value))); + set_reason_code(static_cast< ::nynjacoin::nccs::csp::HangupRequest_ReasonCode >(value)); + } else { + goto handle_unusual; + } + break; + } + + // string reason_message = 3; + case 3: { + if (static_cast< ::google::protobuf::uint8>(tag) == + static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_reason_message())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->reason_message().data(), static_cast(this->reason_message().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "nynjacoin.nccs.csp.HangupRequest.reason_message")); + } else { + goto handle_unusual; + } + break; + } + + default: { + handle_unusual: + if (tag == 0) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, _internal_metadata_.mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:nynjacoin.nccs.csp.HangupRequest) + return true; +failure: + // @@protoc_insertion_point(parse_failure:nynjacoin.nccs.csp.HangupRequest) + return false; +#undef DO_ +} + +void HangupRequest::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:nynjacoin.nccs.csp.HangupRequest) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // .nynjacoin.nccs.csp.HangupRequest.Scope scope = 1; + if (this->scope() != 0) { + ::google::protobuf::internal::WireFormatLite::WriteEnum( + 1, this->scope(), output); + } + + // .nynjacoin.nccs.csp.HangupRequest.ReasonCode reason_code = 2; + if (this->reason_code() != 0) { + ::google::protobuf::internal::WireFormatLite::WriteEnum( + 2, this->reason_code(), output); + } + + // string reason_message = 3; + if (this->reason_message().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->reason_message().data(), static_cast(this->reason_message().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "nynjacoin.nccs.csp.HangupRequest.reason_message"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 3, this->reason_message(), output); + } + + if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), output); + } + // @@protoc_insertion_point(serialize_end:nynjacoin.nccs.csp.HangupRequest) +} + +::google::protobuf::uint8* HangupRequest::InternalSerializeWithCachedSizesToArray( + bool deterministic, ::google::protobuf::uint8* target) const { + (void)deterministic; // Unused + // @@protoc_insertion_point(serialize_to_array_start:nynjacoin.nccs.csp.HangupRequest) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // .nynjacoin.nccs.csp.HangupRequest.Scope scope = 1; + if (this->scope() != 0) { + target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( + 1, this->scope(), target); + } + + // .nynjacoin.nccs.csp.HangupRequest.ReasonCode reason_code = 2; + if (this->reason_code() != 0) { + target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( + 2, this->reason_code(), target); + } + + // string reason_message = 3; + if (this->reason_message().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->reason_message().data(), static_cast(this->reason_message().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "nynjacoin.nccs.csp.HangupRequest.reason_message"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 3, this->reason_message(), target); + } + + if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance()), target); + } + // @@protoc_insertion_point(serialize_to_array_end:nynjacoin.nccs.csp.HangupRequest) + return target; +} + +size_t HangupRequest::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:nynjacoin.nccs.csp.HangupRequest) + size_t total_size = 0; + + if ((_internal_metadata_.have_unknown_fields() && ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + (::google::protobuf::internal::GetProto3PreserveUnknownsDefault() ? _internal_metadata_.unknown_fields() : _internal_metadata_.default_instance())); + } + // string reason_message = 3; + if (this->reason_message().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->reason_message()); + } + + // .nynjacoin.nccs.csp.HangupRequest.Scope scope = 1; + if (this->scope() != 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::EnumSize(this->scope()); + } + + // .nynjacoin.nccs.csp.HangupRequest.ReasonCode reason_code = 2; + if (this->reason_code() != 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::EnumSize(this->reason_code()); + } + + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = cached_size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); + return total_size; +} + +void HangupRequest::MergeFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_merge_from_start:nynjacoin.nccs.csp.HangupRequest) + GOOGLE_DCHECK_NE(&from, this); + const HangupRequest* source = + ::google::protobuf::internal::DynamicCastToGenerated( + &from); + if (source == NULL) { + // @@protoc_insertion_point(generalized_merge_from_cast_fail:nynjacoin.nccs.csp.HangupRequest) + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + // @@protoc_insertion_point(generalized_merge_from_cast_success:nynjacoin.nccs.csp.HangupRequest) + MergeFrom(*source); + } +} + +void HangupRequest::MergeFrom(const HangupRequest& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:nynjacoin.nccs.csp.HangupRequest) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + if (from.reason_message().size() > 0) { + + reason_message_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.reason_message_); + } + if (from.scope() != 0) { + set_scope(from.scope()); + } + if (from.reason_code() != 0) { + set_reason_code(from.reason_code()); + } +} + +void HangupRequest::CopyFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_copy_from_start:nynjacoin.nccs.csp.HangupRequest) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void HangupRequest::CopyFrom(const HangupRequest& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:nynjacoin.nccs.csp.HangupRequest) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool HangupRequest::IsInitialized() const { + return true; +} + +void HangupRequest::Swap(HangupRequest* other) { + if (other == this) return; + InternalSwap(other); +} +void HangupRequest::InternalSwap(HangupRequest* other) { + using std::swap; + reason_message_.Swap(&other->reason_message_); + swap(scope_, other->scope_); + swap(reason_code_, other->reason_code_); + _internal_metadata_.Swap(&other->_internal_metadata_); + swap(_cached_size_, other->_cached_size_); +} + +::google::protobuf::Metadata HangupRequest::GetMetadata() const { + protobuf_call_5fsignaling_2eproto::protobuf_AssignDescriptorsOnce(); + return ::protobuf_call_5fsignaling_2eproto::file_level_metadata[kIndexInFileMessages]; +} + + // @@protoc_insertion_point(namespace_scope) } // namespace csp } // namespace nccs diff --git a/src/core/grpc/voice/call_signaling.pb.h b/src/core/grpc/voice/call_signaling.pb.h index 8ae97699..cd8b47cf 100644 --- a/src/core/grpc/voice/call_signaling.pb.h +++ b/src/core/grpc/voice/call_signaling.pb.h @@ -38,7 +38,7 @@ namespace protobuf_call_5fsignaling_2eproto { struct TableStruct { static const ::google::protobuf::internal::ParseTableField entries[]; static const ::google::protobuf::internal::AuxillaryParseTableField aux[]; - static const ::google::protobuf::internal::ParseTable schema[11]; + static const ::google::protobuf::internal::ParseTable schema[12]; static const ::google::protobuf::internal::FieldMetadata field_metadata[]; static const ::google::protobuf::internal::SerializationTable serialization_table[]; static const ::google::protobuf::uint32 offsets[]; @@ -66,6 +66,8 @@ void InitDefaultsHandshakePacketImpl(); void InitDefaultsHandshakePacket(); void InitDefaultsRejectRequestImpl(); void InitDefaultsRejectRequest(); +void InitDefaultsHangupRequestImpl(); +void InitDefaultsHangupRequest(); inline void InitDefaults() { InitDefaultsIceCandidate(); InitDefaultsKeepAlive(); @@ -78,6 +80,7 @@ inline void InitDefaults() { InitDefaultsHandshakeMessage(); InitDefaultsHandshakePacket(); InitDefaultsRejectRequest(); + InitDefaultsHangupRequest(); } } // namespace protobuf_call_5fsignaling_2eproto namespace nynjacoin { @@ -98,6 +101,9 @@ extern HandshakeMessageDefaultTypeInternal _HandshakeMessage_default_instance_; class HandshakePacket; class HandshakePacketDefaultTypeInternal; extern HandshakePacketDefaultTypeInternal _HandshakePacket_default_instance_; +class HangupRequest; +class HangupRequestDefaultTypeInternal; +extern HangupRequestDefaultTypeInternal _HangupRequest_default_instance_; class IceCandidate; class IceCandidateDefaultTypeInternal; extern IceCandidateDefaultTypeInternal _IceCandidate_default_instance_; @@ -123,9 +129,54 @@ namespace nynjacoin { namespace nccs { namespace csp { +enum HangupRequest_Scope { + HangupRequest_Scope_DEFAULT = 0, + HangupRequest_Scope_CALL = 1, + HangupRequest_Scope_THIS_PARTICIPANT = 2, + HangupRequest_Scope_MY_OTHER_PARTICIPANTS = 3, + HangupRequest_Scope_HangupRequest_Scope_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32min, + HangupRequest_Scope_HangupRequest_Scope_INT_MAX_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32max +}; +bool HangupRequest_Scope_IsValid(int value); +const HangupRequest_Scope HangupRequest_Scope_Scope_MIN = HangupRequest_Scope_DEFAULT; +const HangupRequest_Scope HangupRequest_Scope_Scope_MAX = HangupRequest_Scope_MY_OTHER_PARTICIPANTS; +const int HangupRequest_Scope_Scope_ARRAYSIZE = HangupRequest_Scope_Scope_MAX + 1; + +const ::google::protobuf::EnumDescriptor* HangupRequest_Scope_descriptor(); +inline const ::std::string& HangupRequest_Scope_Name(HangupRequest_Scope value) { + return ::google::protobuf::internal::NameOfEnum( + HangupRequest_Scope_descriptor(), value); +} +inline bool HangupRequest_Scope_Parse( + const ::std::string& name, HangupRequest_Scope* value) { + return ::google::protobuf::internal::ParseNamedEnum( + HangupRequest_Scope_descriptor(), name, value); +} +enum HangupRequest_ReasonCode { + HangupRequest_ReasonCode_USER_ACTION = 0, + HangupRequest_ReasonCode_ERROR = 1, + HangupRequest_ReasonCode_HangupRequest_ReasonCode_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32min, + HangupRequest_ReasonCode_HangupRequest_ReasonCode_INT_MAX_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32max +}; +bool HangupRequest_ReasonCode_IsValid(int value); +const HangupRequest_ReasonCode HangupRequest_ReasonCode_ReasonCode_MIN = HangupRequest_ReasonCode_USER_ACTION; +const HangupRequest_ReasonCode HangupRequest_ReasonCode_ReasonCode_MAX = HangupRequest_ReasonCode_ERROR; +const int HangupRequest_ReasonCode_ReasonCode_ARRAYSIZE = HangupRequest_ReasonCode_ReasonCode_MAX + 1; + +const ::google::protobuf::EnumDescriptor* HangupRequest_ReasonCode_descriptor(); +inline const ::std::string& HangupRequest_ReasonCode_Name(HangupRequest_ReasonCode value) { + return ::google::protobuf::internal::NameOfEnum( + HangupRequest_ReasonCode_descriptor(), value); +} +inline bool HangupRequest_ReasonCode_Parse( + const ::std::string& name, HangupRequest_ReasonCode* value) { + return ::google::protobuf::internal::ParseNamedEnum( + HangupRequest_ReasonCode_descriptor(), name, value); +} enum TerminateReason { HANGUP = 0, NO_KEEP_ALIVE = 1, + PARTICIPANT_HUNG_UP = 2, EJECTED = 3, CALL_ENDED = 4, REPLACED = 5, @@ -1536,6 +1587,183 @@ class RejectRequest : public ::google::protobuf::Message /* @@protoc_insertion_p friend struct ::protobuf_call_5fsignaling_2eproto::TableStruct; friend void ::protobuf_call_5fsignaling_2eproto::InitDefaultsRejectRequestImpl(); }; +// ------------------------------------------------------------------- + +class HangupRequest : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:nynjacoin.nccs.csp.HangupRequest) */ { + public: + HangupRequest(); + virtual ~HangupRequest(); + + HangupRequest(const HangupRequest& from); + + inline HangupRequest& operator=(const HangupRequest& from) { + CopyFrom(from); + return *this; + } + #if LANG_CXX11 + HangupRequest(HangupRequest&& from) noexcept + : HangupRequest() { + *this = ::std::move(from); + } + + inline HangupRequest& operator=(HangupRequest&& from) noexcept { + if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { + if (this != &from) InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + #endif + static const ::google::protobuf::Descriptor* descriptor(); + static const HangupRequest& default_instance(); + + static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY + static inline const HangupRequest* internal_default_instance() { + return reinterpret_cast( + &_HangupRequest_default_instance_); + } + static PROTOBUF_CONSTEXPR int const kIndexInFileMessages = + 11; + + void Swap(HangupRequest* other); + friend void swap(HangupRequest& a, HangupRequest& b) { + a.Swap(&b); + } + + // implements Message ---------------------------------------------- + + inline HangupRequest* New() const PROTOBUF_FINAL { return New(NULL); } + + HangupRequest* New(::google::protobuf::Arena* arena) const PROTOBUF_FINAL; + void CopyFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL; + void MergeFrom(const ::google::protobuf::Message& from) PROTOBUF_FINAL; + void CopyFrom(const HangupRequest& from); + void MergeFrom(const HangupRequest& from); + void Clear() PROTOBUF_FINAL; + bool IsInitialized() const PROTOBUF_FINAL; + + size_t ByteSizeLong() const PROTOBUF_FINAL; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) PROTOBUF_FINAL; + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const PROTOBUF_FINAL; + ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( + bool deterministic, ::google::protobuf::uint8* target) const PROTOBUF_FINAL; + int GetCachedSize() const PROTOBUF_FINAL { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const PROTOBUF_FINAL; + void InternalSwap(HangupRequest* other); + private: + inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + return NULL; + } + inline void* MaybeArenaPtr() const { + return NULL; + } + public: + + ::google::protobuf::Metadata GetMetadata() const PROTOBUF_FINAL; + + // nested types ---------------------------------------------------- + + typedef HangupRequest_Scope Scope; + static const Scope DEFAULT = + HangupRequest_Scope_DEFAULT; + static const Scope CALL = + HangupRequest_Scope_CALL; + static const Scope THIS_PARTICIPANT = + HangupRequest_Scope_THIS_PARTICIPANT; + static const Scope MY_OTHER_PARTICIPANTS = + HangupRequest_Scope_MY_OTHER_PARTICIPANTS; + static inline bool Scope_IsValid(int value) { + return HangupRequest_Scope_IsValid(value); + } + static const Scope Scope_MIN = + HangupRequest_Scope_Scope_MIN; + static const Scope Scope_MAX = + HangupRequest_Scope_Scope_MAX; + static const int Scope_ARRAYSIZE = + HangupRequest_Scope_Scope_ARRAYSIZE; + static inline const ::google::protobuf::EnumDescriptor* + Scope_descriptor() { + return HangupRequest_Scope_descriptor(); + } + static inline const ::std::string& Scope_Name(Scope value) { + return HangupRequest_Scope_Name(value); + } + static inline bool Scope_Parse(const ::std::string& name, + Scope* value) { + return HangupRequest_Scope_Parse(name, value); + } + + typedef HangupRequest_ReasonCode ReasonCode; + static const ReasonCode USER_ACTION = + HangupRequest_ReasonCode_USER_ACTION; + static const ReasonCode ERROR = + HangupRequest_ReasonCode_ERROR; + static inline bool ReasonCode_IsValid(int value) { + return HangupRequest_ReasonCode_IsValid(value); + } + static const ReasonCode ReasonCode_MIN = + HangupRequest_ReasonCode_ReasonCode_MIN; + static const ReasonCode ReasonCode_MAX = + HangupRequest_ReasonCode_ReasonCode_MAX; + static const int ReasonCode_ARRAYSIZE = + HangupRequest_ReasonCode_ReasonCode_ARRAYSIZE; + static inline const ::google::protobuf::EnumDescriptor* + ReasonCode_descriptor() { + return HangupRequest_ReasonCode_descriptor(); + } + static inline const ::std::string& ReasonCode_Name(ReasonCode value) { + return HangupRequest_ReasonCode_Name(value); + } + static inline bool ReasonCode_Parse(const ::std::string& name, + ReasonCode* value) { + return HangupRequest_ReasonCode_Parse(name, value); + } + + // accessors ------------------------------------------------------- + + // string reason_message = 3; + void clear_reason_message(); + static const int kReasonMessageFieldNumber = 3; + const ::std::string& reason_message() const; + void set_reason_message(const ::std::string& value); + #if LANG_CXX11 + void set_reason_message(::std::string&& value); + #endif + void set_reason_message(const char* value); + void set_reason_message(const char* value, size_t size); + ::std::string* mutable_reason_message(); + ::std::string* release_reason_message(); + void set_allocated_reason_message(::std::string* reason_message); + + // .nynjacoin.nccs.csp.HangupRequest.Scope scope = 1; + void clear_scope(); + static const int kScopeFieldNumber = 1; + ::nynjacoin::nccs::csp::HangupRequest_Scope scope() const; + void set_scope(::nynjacoin::nccs::csp::HangupRequest_Scope value); + + // .nynjacoin.nccs.csp.HangupRequest.ReasonCode reason_code = 2; + void clear_reason_code(); + static const int kReasonCodeFieldNumber = 2; + ::nynjacoin::nccs::csp::HangupRequest_ReasonCode reason_code() const; + void set_reason_code(::nynjacoin::nccs::csp::HangupRequest_ReasonCode value); + + // @@protoc_insertion_point(class_scope:nynjacoin.nccs.csp.HangupRequest) + private: + + ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::google::protobuf::internal::ArenaStringPtr reason_message_; + int scope_; + int reason_code_; + mutable int _cached_size_; + friend struct ::protobuf_call_5fsignaling_2eproto::TableStruct; + friend void ::protobuf_call_5fsignaling_2eproto::InitDefaultsHangupRequestImpl(); +}; // =================================================================== @@ -2622,6 +2850,91 @@ inline void RejectRequest::set_allocated_end_reason(::nynjacoin::nccs::def::Call // @@protoc_insertion_point(field_set_allocated:nynjacoin.nccs.csp.RejectRequest.end_reason) } +// ------------------------------------------------------------------- + +// HangupRequest + +// .nynjacoin.nccs.csp.HangupRequest.Scope scope = 1; +inline void HangupRequest::clear_scope() { + scope_ = 0; +} +inline ::nynjacoin::nccs::csp::HangupRequest_Scope HangupRequest::scope() const { + // @@protoc_insertion_point(field_get:nynjacoin.nccs.csp.HangupRequest.scope) + return static_cast< ::nynjacoin::nccs::csp::HangupRequest_Scope >(scope_); +} +inline void HangupRequest::set_scope(::nynjacoin::nccs::csp::HangupRequest_Scope value) { + + scope_ = value; + // @@protoc_insertion_point(field_set:nynjacoin.nccs.csp.HangupRequest.scope) +} + +// .nynjacoin.nccs.csp.HangupRequest.ReasonCode reason_code = 2; +inline void HangupRequest::clear_reason_code() { + reason_code_ = 0; +} +inline ::nynjacoin::nccs::csp::HangupRequest_ReasonCode HangupRequest::reason_code() const { + // @@protoc_insertion_point(field_get:nynjacoin.nccs.csp.HangupRequest.reason_code) + return static_cast< ::nynjacoin::nccs::csp::HangupRequest_ReasonCode >(reason_code_); +} +inline void HangupRequest::set_reason_code(::nynjacoin::nccs::csp::HangupRequest_ReasonCode value) { + + reason_code_ = value; + // @@protoc_insertion_point(field_set:nynjacoin.nccs.csp.HangupRequest.reason_code) +} + +// string reason_message = 3; +inline void HangupRequest::clear_reason_message() { + reason_message_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& HangupRequest::reason_message() const { + // @@protoc_insertion_point(field_get:nynjacoin.nccs.csp.HangupRequest.reason_message) + return reason_message_.GetNoArena(); +} +inline void HangupRequest::set_reason_message(const ::std::string& value) { + + reason_message_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:nynjacoin.nccs.csp.HangupRequest.reason_message) +} +#if LANG_CXX11 +inline void HangupRequest::set_reason_message(::std::string&& value) { + + reason_message_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:nynjacoin.nccs.csp.HangupRequest.reason_message) +} +#endif +inline void HangupRequest::set_reason_message(const char* value) { + GOOGLE_DCHECK(value != NULL); + + reason_message_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:nynjacoin.nccs.csp.HangupRequest.reason_message) +} +inline void HangupRequest::set_reason_message(const char* value, size_t size) { + + reason_message_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:nynjacoin.nccs.csp.HangupRequest.reason_message) +} +inline ::std::string* HangupRequest::mutable_reason_message() { + + // @@protoc_insertion_point(field_mutable:nynjacoin.nccs.csp.HangupRequest.reason_message) + return reason_message_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* HangupRequest::release_reason_message() { + // @@protoc_insertion_point(field_release:nynjacoin.nccs.csp.HangupRequest.reason_message) + + return reason_message_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void HangupRequest::set_allocated_reason_message(::std::string* reason_message) { + if (reason_message != NULL) { + + } else { + + } + reason_message_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), reason_message); + // @@protoc_insertion_point(field_set_allocated:nynjacoin.nccs.csp.HangupRequest.reason_message) +} + #ifdef __GNUC__ #pragma GCC diagnostic pop #endif // __GNUC__ @@ -2645,6 +2958,8 @@ inline void RejectRequest::set_allocated_end_reason(::nynjacoin::nccs::def::Call // ------------------------------------------------------------------- +// ------------------------------------------------------------------- + // @@protoc_insertion_point(namespace_scope) @@ -2655,6 +2970,16 @@ inline void RejectRequest::set_allocated_end_reason(::nynjacoin::nccs::def::Call namespace google { namespace protobuf { +template <> struct is_proto_enum< ::nynjacoin::nccs::csp::HangupRequest_Scope> : ::google::protobuf::internal::true_type {}; +template <> +inline const EnumDescriptor* GetEnumDescriptor< ::nynjacoin::nccs::csp::HangupRequest_Scope>() { + return ::nynjacoin::nccs::csp::HangupRequest_Scope_descriptor(); +} +template <> struct is_proto_enum< ::nynjacoin::nccs::csp::HangupRequest_ReasonCode> : ::google::protobuf::internal::true_type {}; +template <> +inline const EnumDescriptor* GetEnumDescriptor< ::nynjacoin::nccs::csp::HangupRequest_ReasonCode>() { + return ::nynjacoin::nccs::csp::HangupRequest_ReasonCode_descriptor(); +} template <> struct is_proto_enum< ::nynjacoin::nccs::csp::TerminateReason> : ::google::protobuf::internal::true_type {}; template <> inline const EnumDescriptor* GetEnumDescriptor< ::nynjacoin::nccs::csp::TerminateReason>() { diff --git a/src/core/interface/ICall.h b/src/core/interface/ICall.h index cd30bc52..c668b8fe 100644 --- a/src/core/interface/ICall.h +++ b/src/core/interface/ICall.h @@ -14,6 +14,7 @@ #include #include // for std::time_t +#include "ICallDefs.h" #include "ICallState.h" #include "ICallRoomType.h" #include "ICallDelegate.h" @@ -40,6 +41,7 @@ namespace nynja { virtual ICallEndReason getEndReason() const = 0; virtual void start() = 0; virtual void hangup() = 0; + virtual void hangup(IHangupScope scope, IHangupReason reason) = 0; virtual void end() = 0; virtual bool accept() = 0; virtual void reject() = 0; diff --git a/src/core/interface/ICallDefs.h b/src/core/interface/ICallDefs.h new file mode 100644 index 00000000..855e6a21 --- /dev/null +++ b/src/core/interface/ICallDefs.h @@ -0,0 +1,27 @@ +// +// ICallDefs.h +// core +// +// Created by Angel Terziev on 05.29.20. +// Copyright © 2020 Nynja Inc. All rights reserved. +// + +#ifndef __ICallDefs_h__ +#define __ICallDefs_h__ + +namespace nynja { + + typedef enum { + IHangupScopeDefault, + IHangupScopeCall, + IHangupScopeThisParticipant, + IHangupScopeMyOtherParticipants + } IHangupScope; + + typedef enum { + IHangupReasonUserAction, + IHangupReasonError + } IHangupReason; +} + +#endif /* __ICallDefs_h__ */ diff --git a/src/core/proto b/src/core/proto index 22f5f3eb..d48d9291 160000 --- a/src/core/proto +++ b/src/core/proto @@ -1 +1 @@ -Subproject commit 22f5f3eb9cbf5828da15d3f5a0e74031a5ecd0d7 +Subproject commit d48d92919520c2e90769769b392f019fe9c7c36e -- GitLab From 9604d6af9d3011b4e433133ffbc657da6cc236a9 Mon Sep 17 00:00:00 2001 From: Ergyun Syuleyman Date: Fri, 29 May 2020 13:09:16 +0300 Subject: [PATCH 07/11] -core Call pickup JNIs --- scripts/android-core/build-jni.sh | 19 ++++++++- src/sdk/android/api/CallManager.cpp | 41 +++++++++++++++++++ src/sdk/android/api/CallManager.h | 7 ++++ src/sdk/android/api/CallManager.i | 3 ++ .../android/api/INYNCallManagerListener.cpp | 10 +++++ src/sdk/android/api/INYNCallManagerListener.h | 5 +++ src/sdk/android/api/NYNCall.cpp | 15 +++++++ src/sdk/android/api/NYNCall.h | 7 ++++ src/sdk/android/api/NYNCall.i | 2 + .../sdkAndroid.xcodeproj/project.pbxproj | 2 + 10 files changed, 110 insertions(+), 1 deletion(-) diff --git a/scripts/android-core/build-jni.sh b/scripts/android-core/build-jni.sh index 04f2786b..6d086ba4 100755 --- a/scripts/android-core/build-jni.sh +++ b/scripts/android-core/build-jni.sh @@ -197,6 +197,9 @@ run_sdk_swig() prepare_sdk_java_out provisionDir "$JAVA_OUT_DIR" + echo "COPY Common Core Interface files ..." + copy_ommon_headers_for_jni + echo "Start creating $JAVA_OUT_DIR dir" run_sdk_swig_with_param "-outdir $JAVA_OUT_DIR" @@ -355,6 +358,21 @@ copy_webrtc_java() cp -rf ${SRC_JAVA_DIR} ${DST_JAVA_DIR} } +copy_ommon_headers_for_jni() +{ + echo "Copying COMMON Interface header files .." + SRC_INTERFACE_DIR="$BASE_CORE_DIR/interface" + DST_API_DIR="$BASE_SDK_DIR/api" + + retval=$( directoryExists "$DST_API_DIR" ) + + if [ $retval == "false" ]; then + exit + fi + + cp -rf "${SRC_INTERFACE_DIR}"/ICallDefs.h ${DST_API_DIR}/ +} + build_sdk() { copy_sdk_libs @@ -380,7 +398,6 @@ main() remove_ndk_temps echo "Finished Clean" fi - build_ndk check_failure "SDK build_ndk call failed!!!" diff --git a/src/sdk/android/api/CallManager.cpp b/src/sdk/android/api/CallManager.cpp index 834183f0..6c6ecaed 100644 --- a/src/sdk/android/api/CallManager.cpp +++ b/src/sdk/android/api/CallManager.cpp @@ -555,8 +555,39 @@ namespace nynja { std::placeholders::_5)); } + NYNCall* CallManager::pickupCall(const std::string& requestId, + const std::string& callId) + { + __android_log_write(ANDROID_LOG_INFO, "SDK", __FUNCTION__); + nynja::CallPtr callPtr = _callManagerPtr->pickupCall(requestId, callId, + std::bind(&CallManager::pickupCallCallback, + this, + std::placeholders::_1, + std::placeholders::_2, + std::placeholders::_3)); + if (callPtr.get() != NULL) { + return new NYNCall(callPtr); + } + + return NULL; + } + NYNCallsArray* CallManager::callsActiveElsewhere() { + __android_log_write(ANDROID_LOG_INFO, "SDK", __FUNCTION__); + NYNCallsArray* newNYNCalls = new NYNCallsArray(); + if (_callManagerPtr) { + std::vector calls = _callManagerPtr->callsActiveElsewhere(); + std::for_each(calls.begin(), calls.end(), + [&newNYNCalls](const nynja::CallPtr& ptr) { + NYNCall* nc = new NYNCall(ptr); + newNYNCalls->push_back(nc); + }); + } + + return newNYNCalls; + } + /////////////////////////////////////////////////////////////////////////////////////////// ////////// // Internal callbacks @@ -823,5 +854,15 @@ namespace nynja { conferenceId); } } + + void CallManager::pickupCallCallback(int response, + const std::string& requestId, + const std::string& callId) + { + if (_listener != NULL) + { + _listener->pickupCallFinished(requestId, callId, (response == 0)); + } + } } diff --git a/src/sdk/android/api/CallManager.h b/src/sdk/android/api/CallManager.h index 64e6e60b..daefc4a2 100644 --- a/src/sdk/android/api/CallManager.h +++ b/src/sdk/android/api/CallManager.h @@ -154,6 +154,9 @@ namespace nynja { const NYNAddConfMemberRequestArray& members, bool isVideo); + NYNCall* pickupCall(const std::string& requestId, const std::string& callId); + + NYNCallsArray* callsActiveElsewhere(); protected: @@ -243,6 +246,10 @@ namespace nynja { const std::string& replaceRef, const std::string& roomId, const std::string& conferenceId); + + void pickupCallCallback(int response, + const std::string& requestId, + const std::string& callId); private: std::shared_ptr _callManagerPtr; diff --git a/src/sdk/android/api/CallManager.i b/src/sdk/android/api/CallManager.i index 25696e8a..b7a94290 100644 --- a/src/sdk/android/api/CallManager.i +++ b/src/sdk/android/api/CallManager.i @@ -20,6 +20,8 @@ %newobject findCallWithTrackId(const std::string& trackId); %newobject findCallWithReplaceRef(const std::string& replaceRef); +%newobject pickupCall(const std::string& requestId, const std::string& callId); +%newobject callsActiveElsewhere(); %{ #include "CallManager.h" @@ -35,6 +37,7 @@ %include "std_shared_ptr.i" %shared_ptr(nynja::NYNAddConfMemberRequest) %template(NYNAddConfMemberRequestArray) std::vector>; +%template(NYNCallsArray) std::vector; %typemap(jtype) (void* payload, long len) "byte[]" diff --git a/src/sdk/android/api/INYNCallManagerListener.cpp b/src/sdk/android/api/INYNCallManagerListener.cpp index 80f63e80..dac5143f 100644 --- a/src/sdk/android/api/INYNCallManagerListener.cpp +++ b/src/sdk/android/api/INYNCallManagerListener.cpp @@ -153,6 +153,16 @@ namespace nynja { } } + virtual void elsewhereCallFinished(const std::shared_ptr& call) override { + if (_delegate != NULL) + { + if (call) + { + _delegate->elsewhereCallFinished((std::make_shared(call)).get()); + } + } + } + private: INYNCallManagerListener* _delegate; }; diff --git a/src/sdk/android/api/INYNCallManagerListener.h b/src/sdk/android/api/INYNCallManagerListener.h index ab9a3a86..dea45f8a 100644 --- a/src/sdk/android/api/INYNCallManagerListener.h +++ b/src/sdk/android/api/INYNCallManagerListener.h @@ -112,6 +112,10 @@ namespace nynja { const std::string& roomId, const std::string& conferenceId) {} + virtual void pickupCallFinished(const std::string& requestId, + const std::string& callId, + bool success) {} + // ICallManagerCallback interface depends virtual void receivedRingingCall(NYNCall *call) {} virtual void receivedStopRinging(const std::string& conferenceId) {} @@ -125,6 +129,7 @@ namespace nynja { virtual void signalCallTimedOut(NYNCall* call) {} virtual void resetStateForAllConferenceCalls() {} virtual void resetStateForAllTwoPartyCallsCalls() {} + virtual void elsewhereCallFinished(NYNCall* call) {} const std::shared_ptr& getInternalCallback(); diff --git a/src/sdk/android/api/NYNCall.cpp b/src/sdk/android/api/NYNCall.cpp index 9dee7c38..7e890389 100644 --- a/src/sdk/android/api/NYNCall.cpp +++ b/src/sdk/android/api/NYNCall.cpp @@ -126,6 +126,13 @@ namespace nynja { } } + void NYNCall::hangup(IHangupScope scope, IHangupReason reason) + { + if (_callPtr) { + _callPtr->hangup(scope, reason); + } + } + void NYNCall::end() { if (_callPtr) { _callPtr->end(); @@ -630,6 +637,14 @@ namespace nynja { } } + bool NYNCall::isActiveElsewhere() + { + if (_callPtr) { + return _callPtr->isActiveElsewhere(); + } + + return false; + } } diff --git a/src/sdk/android/api/NYNCall.h b/src/sdk/android/api/NYNCall.h index 06c2bc0d..966ee380 100644 --- a/src/sdk/android/api/NYNCall.h +++ b/src/sdk/android/api/NYNCall.h @@ -12,6 +12,7 @@ #include #include #include "ICall.h" +#include "ICallDefs.h" #include "NYNCommon.h" #include "NYNCallParticipant.h" @@ -39,6 +40,7 @@ namespace nynja { NYNCallRoomType roomType(); void start(); void hangup(); + void hangup(IHangupScope scope, IHangupReason reason); void end(); bool accept(); void reject(); @@ -109,6 +111,8 @@ namespace nynja { NYNCallParticipant* getParticipantById(const std::string& participantId); NYNCallParticipant* getParticipantByTrackId(const std::string& trackId); void enableVideoForTrack(const std::string& participantId, bool enable); + + bool isActiveElsewhere(); //// SWIG Interface call helpers // JNI helper used by extended Java funnctions in 'NYNCall.i' @@ -120,6 +124,9 @@ namespace nynja { std::shared_ptr _callPtr; rtc::scoped_refptr _videoSource; }; + + typedef std::vector NYNCallsArray; + } diff --git a/src/sdk/android/api/NYNCall.i b/src/sdk/android/api/NYNCall.i index add8baf1..06e317c0 100644 --- a/src/sdk/android/api/NYNCall.i +++ b/src/sdk/android/api/NYNCall.i @@ -57,6 +57,7 @@ %include "std_vector.i" %template(NYNCallParticipantArray) std::vector; %template(TrackIdsList) std::vector; +%template(NYNCallsArray) std::vector; typedef long time_t; @@ -136,5 +137,6 @@ typedef long time_t; %shared_ptr( nynja::ICall ) +%include "ICallDefs.h" %include "NYNCommon.h" %include "NYNCall.h" diff --git a/src/sdk/android/sdkAndroid.xcodeproj/project.pbxproj b/src/sdk/android/sdkAndroid.xcodeproj/project.pbxproj index 2d317849..61843c4d 100644 --- a/src/sdk/android/sdkAndroid.xcodeproj/project.pbxproj +++ b/src/sdk/android/sdkAndroid.xcodeproj/project.pbxproj @@ -61,6 +61,7 @@ C7753BD9218CCF4D00D2614C /* NYNAuthProviderDetails.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = NYNAuthProviderDetails.cpp; sourceTree = ""; }; C7753BDA218CCF4D00D2614C /* NYNAuthProviderDetails.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYNAuthProviderDetails.h; sourceTree = ""; }; C7753BDB218CD2EF00D2614C /* NYNAuthProviderDetails.i */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c.preprocessed; path = NYNAuthProviderDetails.i; sourceTree = ""; }; + C775824D248113130013A7C9 /* ICallDefs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ICallDefs.h; sourceTree = ""; }; C7771A4324488E8700956B61 /* NYNSubscriptionPlanInfo.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = NYNSubscriptionPlanInfo.cpp; sourceTree = ""; }; C7771A4424488E8700956B61 /* NYNSubscriptionPlanInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NYNSubscriptionPlanInfo.h; sourceTree = ""; }; C7771A45244890F700956B61 /* NYNSubscriptionPlanInfo.i */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c.preprocessed; path = NYNSubscriptionPlanInfo.i; sourceTree = ""; }; @@ -171,6 +172,7 @@ C754C3A620AD7957004CE9E8 /* NynjaCommunicator.cpp */, C754C3A720AD7957004CE9E8 /* NynjaCommunicator.h */, C754C3A820AD7957004CE9E8 /* NynjaCommunicator.i */, + C775824D248113130013A7C9 /* ICallDefs.h */, C754C3AC20AD7D0A004CE9E8 /* NYNCommon.h */, C72CF8D520B4548600E323E1 /* INYNCommunicatorListener.cpp */, C72CF8D020B432C400E323E1 /* INYNCommunicatorListener.h */, -- GitLab From 0f592a51be04b27ba682bce527b36a3c5c1622f9 Mon Sep 17 00:00:00 2001 From: Angel Terziev Date: Fri, 29 May 2020 13:31:31 +0300 Subject: [PATCH 08/11] Check observer for nullptr --- src/core/conductor/webrtc/PeerConnectionConductor.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/core/conductor/webrtc/PeerConnectionConductor.cpp b/src/core/conductor/webrtc/PeerConnectionConductor.cpp index 31e5ca93..14779708 100644 --- a/src/core/conductor/webrtc/PeerConnectionConductor.cpp +++ b/src/core/conductor/webrtc/PeerConnectionConductor.cpp @@ -3289,7 +3289,8 @@ namespace nynja { startLocalScreenShare(); #endif // #ifdef ANDROID_NDK } - _observer->onConnected(this); + if (_observer != NULL) + _observer->onConnected(this); break; case webrtc::PeerConnectionInterface::kIceConnectionCompleted: break; @@ -3298,7 +3299,8 @@ namespace nynja { generateOffer(true); break; case webrtc::PeerConnectionInterface::kIceConnectionDisconnected: - _observer->onDisconnected(this); + if (_observer != NULL) + _observer->onDisconnected(this); if (_p2p) { #ifndef ANDROID_NDK stopLocalVideo(); @@ -3532,7 +3534,9 @@ namespace nynja { RTC_LOG(LS_INFO) << "_deleted"; return; } - _observer->onIceCandidate(this, mid, mline, candidate, _connId); + + if (_observer != NULL) + _observer->onIceCandidate(this, mid, mline, candidate, _connId); } void PeerConnectionConductor::processSpeaking(const std::string& trackId, const std::string& ssrc, bool speaking) -- GitLab From 031022c14e5c58b716480a87642e66a5daf7d1f6 Mon Sep 17 00:00:00 2001 From: Angel Terziev Date: Mon, 1 Jun 2020 14:04:17 +0300 Subject: [PATCH 09/11] NY-10551: [CORE]: Passive callers doesn't detect that the SS/camera is stopped when active perform call pickup --- src/core/call/CallImpl.cpp | 2 + src/core/conductor/Conductor.h | 1 + .../webrtc/PeerConnectionConductor.cpp | 38 +++++++++++++++++++ .../webrtc/PeerConnectionConductor.h | 1 + 4 files changed, 42 insertions(+) diff --git a/src/core/call/CallImpl.cpp b/src/core/call/CallImpl.cpp index 11c27502..284cd912 100644 --- a/src/core/call/CallImpl.cpp +++ b/src/core/call/CallImpl.cpp @@ -684,6 +684,8 @@ namespace nynja { // This is the second peer conenction. swap the calls now if (_conductor != nullptr) { RTC_LOG(LS_INFO) << __FUNCTION__ << " will release conductor before switching to the pickup conductor"; + _conductor->notifyRemoveRemoteRenderers(); + std::shared_ptr tmp = _conductor; _conductor.reset(); tmp->tearDown(); diff --git a/src/core/conductor/Conductor.h b/src/core/conductor/Conductor.h index 32bd4266..79083a4d 100644 --- a/src/core/conductor/Conductor.h +++ b/src/core/conductor/Conductor.h @@ -106,6 +106,7 @@ namespace nynja { virtual const std::string& getParticipantIdByTrackId(const std::string& trackId) = 0; virtual void enableVideoForTrack(const std::string& trackId, bool enable) = 0; virtual void onFatalError() = 0; + virtual void notifyRemoveRemoteRenderers() = 0; protected: ConductorObserver* _observer; diff --git a/src/core/conductor/webrtc/PeerConnectionConductor.cpp b/src/core/conductor/webrtc/PeerConnectionConductor.cpp index 14779708..7dfcd4ee 100644 --- a/src/core/conductor/webrtc/PeerConnectionConductor.cpp +++ b/src/core/conductor/webrtc/PeerConnectionConductor.cpp @@ -1055,6 +1055,44 @@ namespace nynja { _dispatcher->dispatch(task); } + void PeerConnectionConductor::notifyRemoveRemoteRenderers() { + if (_observer == NULL) { + return; + } + + for (auto& kv : _remoteRenderers) { + rtc::scoped_refptr media_track = remoteVideoTrack(kv.first); + if (media_track != nullptr) { + RTC_LOG(LS_INFO) << __FUNCTION__ << " [remoteRenderer] notify removal of video sink for track id: " << media_track->id(); + rtc::scoped_refptr video_track((webrtc::VideoTrackInterface*) media_track.release()); + std::string participantId; + + if (isUnifiedPlan()) { + rtc::scoped_refptr t = findTransceiver(video_track); + if ( t != nullptr && t->mid().has_value() ) { + const TrackInfoPtr& ti = mediaContentTypeFor(_remoteTrackInfo, t->mid().value()); + if (ti != nullptr) { + nynjacoin::nccs::def::MediaContentType mct = ti->media_content_type(); + participantId = ti->participant_id(); + switch (mct) { + case nynjacoin::nccs::def::VIDEO: + _observer->onRemoteVideoTrackRemoved(this, video_track, participantId); + break; + case nynjacoin::nccs::def::SCREEN: + _observer->onRemoteScreenShareTrackRemoved(this, video_track, participantId); + break; + default: + break; + } + } + } + } else { + _observer->onRemoteVideoTrackRemoved(this, video_track, participantId); + } + } + } + } + bool PeerConnectionConductor::createPeerConnection(bool dtls, bool p2p) { // Thread: [MediaControl] diff --git a/src/core/conductor/webrtc/PeerConnectionConductor.h b/src/core/conductor/webrtc/PeerConnectionConductor.h index e7717c0d..037f4829 100644 --- a/src/core/conductor/webrtc/PeerConnectionConductor.h +++ b/src/core/conductor/webrtc/PeerConnectionConductor.h @@ -159,6 +159,7 @@ namespace nynja { const std::string& getParticipantIdByTrackId(const std::string& trackId) override; void enableVideoForTrack(const std::string& trackId, bool enable) override; void onFatalError() override; + void notifyRemoveRemoteRenderers() override; bool createPeerConnection(bool dtls, bool p2p); void deletePeerConnection(); -- GitLab From 838213d29219c9b80532eb71a103a8b0414cc280 Mon Sep 17 00:00:00 2001 From: Angel Terziev Date: Mon, 1 Jun 2020 16:08:23 +0300 Subject: [PATCH 10/11] Do not mark grpcclient as hunged up if teh hung up scope does not include this participant --- src/core/grpc/voice/GRPClient.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/core/grpc/voice/GRPClient.cpp b/src/core/grpc/voice/GRPClient.cpp index 6a7ae56f..537f2fba 100644 --- a/src/core/grpc/voice/GRPClient.cpp +++ b/src/core/grpc/voice/GRPClient.cpp @@ -80,6 +80,8 @@ namespace nynja { cleanupThread(); _fQuitThread = false; + _fHungUp = false; + fRunning = true; { @@ -145,9 +147,12 @@ namespace nynja { RTC_LOG(LS_INFO) << "Already hung up"; return; } - - RTC_LOG(LS_INFO) << "_fHungUp = true"; - _fHungUp = true; + + // Do not mark the channel as hungup if the scope does not inlude myself + if ( scope != ::nynjacoin::nccs::csp::HangupRequest_Scope_MY_OTHER_PARTICIPANTS ) { + RTC_LOG(LS_INFO) << "_fHungUp = true"; + _fHungUp = true; + } ::grpc::ClientContext context; ::nynjacoin::nccs::csp::HangupRequest request; -- GitLab From 3239af0e61a7fa08f17e97af62d5d440b3528158 Mon Sep 17 00:00:00 2001 From: Angel Terziev Date: Mon, 1 Jun 2020 16:23:04 +0300 Subject: [PATCH 11/11] Bumped up version to 1.22 --- src/sdk/android/gradle.properties | 2 +- src/sdk/ios/NynjaSDK.podspec | 4 ++-- src/sdk/ios/sdk/Info.plist | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sdk/android/gradle.properties b/src/sdk/android/gradle.properties index 89c9a132..d37ec7e0 100644 --- a/src/sdk/android/gradle.properties +++ b/src/sdk/android/gradle.properties @@ -18,5 +18,5 @@ org.gradle.jvmargs=-Xmx1536m artifactory_user= artifactory_password= -artifactory_version=1.21.5 +artifactory_version=1.22 artifactory_contextUrl=https://nynjagroup.jfrog.io/nynjagroup diff --git a/src/sdk/ios/NynjaSDK.podspec b/src/sdk/ios/NynjaSDK.podspec index 8abd5e33..2136a73d 100644 --- a/src/sdk/ios/NynjaSDK.podspec +++ b/src/sdk/ios/NynjaSDK.podspec @@ -16,7 +16,7 @@ Pod::Spec.new do |s| # s.name = "NynjaSDK" - s.version = "1.21.6" + s.version = "1.22" s.summary = "Nynja Mobile SDK" s.homepage = "https://github.com/NYNJA-MC/Mobile-SDK/blob/master/README.md" @@ -59,7 +59,7 @@ Pod::Spec.new do |s| # Supports git, hg, bzr, svn and HTTP. # - s.source = { :http => "https://nynjagroup.jfrog.io/nynjagroup/cocoapods-local/NynjaSDK/NynjaSDK-1.21.6.tar.gz", :type => 'tgz'} + s.source = { :http => "https://nynjagroup.jfrog.io/nynjagroup/cocoapods-local/NynjaSDK/NynjaSDK-1.22.tar.gz", :type => 'tgz'} # ――― Vendored Frameworks ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # # diff --git a/src/sdk/ios/sdk/Info.plist b/src/sdk/ios/sdk/Info.plist index 3e8780ec..4fe0b1c2 100644 --- a/src/sdk/ios/sdk/Info.plist +++ b/src/sdk/ios/sdk/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.21.6 + 1.22 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass -- GitLab