diff options
Diffstat (limited to 'src/voip/CallManager.cpp')
-rw-r--r-- | src/voip/CallManager.cpp | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/voip/CallManager.cpp b/src/voip/CallManager.cpp index 617f687c..d479a937 100644 --- a/src/voip/CallManager.cpp +++ b/src/voip/CallManager.cpp @@ -44,6 +44,7 @@ using namespace mtx::events; using namespace mtx::events::voip; using webrtc::CallType; +typedef RTCSessionDescriptionInit SDO; namespace { std::vector<std::string> @@ -65,8 +66,8 @@ CallManager::CallManager(QObject *parent) this, [this](const std::string &sdp, const std::vector<CallCandidates::Candidate> &candidates) { nhlog::ui()->debug("WebRTC: call id: {} - sending offer", callid_); - emit newMessage(roomid_, CallInvite{callid_, sdp, "0", timeoutms_}); - emit newMessage(roomid_, CallCandidates{callid_, candidates, "0"}); + emit newMessage(roomid_, CallInvite{callid_, partyid_, SDO{sdp, SDO::Type::Offer}, "0", timeoutms_, invitee_}); + emit newMessage(roomid_, CallCandidates{callid_, partyid_, candidates, "0"}); std::string callid(callid_); QTimer::singleShot(timeoutms_, this, [this, callid]() { if (session_.state() == webrtc::State::OFFERSENT && callid == callid_) { @@ -83,8 +84,8 @@ CallManager::CallManager(QObject *parent) this, [this](const std::string &sdp, const std::vector<CallCandidates::Candidate> &candidates) { nhlog::ui()->debug("WebRTC: call id: {} - sending answer", callid_); - emit newMessage(roomid_, CallAnswer{callid_, sdp, "0"}); - emit newMessage(roomid_, CallCandidates{callid_, candidates, "0"}); + emit newMessage(roomid_, CallAnswer{callid_, partyid_, "0", SDO{sdp, SDO::Type::Answer}}); + emit newMessage(roomid_, CallCandidates{callid_, partyid_, candidates, "0"}); }); connect(&session_, @@ -92,7 +93,7 @@ CallManager::CallManager(QObject *parent) this, [this](const CallCandidates::Candidate &candidate) { nhlog::ui()->debug("WebRTC: call id: {} - sending ice candidate", callid_); - emit newMessage(roomid_, CallCandidates{callid_, {candidate}, "0"}); + emit newMessage(roomid_, CallCandidates{callid_, partyid_, {candidate}, "0"}); }); connect(&turnServerTimer_, &QTimer::timeout, this, &CallManager::retrieveTurnServer); @@ -223,6 +224,16 @@ callHangUpReasonString(CallHangUp::Reason reason) return "ICE failed"; case CallHangUp::Reason::InviteTimeOut: return "Invite time out"; + case CallHangUp::Reason::ICETimeOut: + return "ICE time out"; + case CallHangUp::Reason::UserHangUp: + return "User hung up"; + case CallHangUp::Reason::UserMediaFailed: + return "User media failed"; + case CallHangUp::Reason::UserBusy: + return "User busy"; + case CallHangUp::Reason::UnknownError: + return "Unknown error"; default: return "User"; } @@ -235,7 +246,7 @@ CallManager::hangUp(CallHangUp::Reason reason) if (!callid_.empty()) { nhlog::ui()->debug( "WebRTC: call id: {} - hanging up ({})", callid_, callHangUpReasonString(reason)); - emit newMessage(roomid_, CallHangUp{callid_, "0", reason}); + emit newMessage(roomid_, CallHangUp{callid_, partyid_, "0", reason}); endCall(); } } @@ -267,7 +278,7 @@ void CallManager::handleEvent(const RoomEvent<CallInvite> &callInviteEvent) { const char video[] = "m=video"; - const std::string &sdp = callInviteEvent.content.sdp; + const std::string &sdp = callInviteEvent.content.offer.sdp; bool isVideo = std::search(sdp.cbegin(), sdp.cend(), std::cbegin(video), @@ -288,7 +299,7 @@ CallManager::handleEvent(const RoomEvent<CallInvite> &callInviteEvent) if (isOnCall() || roomInfo.member_count != 2) { emit newMessage( QString::fromStdString(callInviteEvent.room_id), - CallHangUp{callInviteEvent.content.call_id, "0", CallHangUp::Reason::InviteTimeOut}); + CallHangUp{callInviteEvent.content.call_id, partyid_, "0", CallHangUp::Reason::InviteTimeOut}); return; } @@ -311,7 +322,7 @@ CallManager::handleEvent(const RoomEvent<CallInvite> &callInviteEvent) haveCallInvite_ = true; callType_ = isVideo ? CallType::VIDEO : CallType::VOICE; - inviteSDP_ = callInviteEvent.content.sdp; + inviteSDP_ = callInviteEvent.content.offer.sdp; emit newInviteState(); } @@ -385,7 +396,7 @@ CallManager::handleEvent(const RoomEvent<CallAnswer> &callAnswerEvent) if (isOnCall() && callid_ == callAnswerEvent.content.call_id) { stopRingtone(); - if (!session_.acceptAnswer(callAnswerEvent.content.sdp)) { + if (!session_.acceptAnswer(callAnswerEvent.content.answer.sdp)) { emit ChatPage::instance()->showNotification(QStringLiteral("Problem setting up call.")); hangUp(); } |