summary refs log tree commit diff
path: root/src/voip/CallManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/voip/CallManager.cpp')
-rw-r--r--src/voip/CallManager.cpp45
1 files changed, 30 insertions, 15 deletions
diff --git a/src/voip/CallManager.cpp b/src/voip/CallManager.cpp

index 54d86620..14f3adf8 100644 --- a/src/voip/CallManager.cpp +++ b/src/voip/CallManager.cpp
@@ -36,14 +36,16 @@ extern "C" } #endif -Q_DECLARE_METATYPE(std::vector<mtx::events::msg::CallCandidates::Candidate>) -Q_DECLARE_METATYPE(mtx::events::msg::CallCandidates::Candidate) +Q_DECLARE_METATYPE(std::vector<mtx::events::voip::CallCandidates::Candidate>) +Q_DECLARE_METATYPE(mtx::events::voip::CallCandidates::Candidate) Q_DECLARE_METATYPE(mtx::responses::TurnServer) using namespace mtx::events; -using namespace mtx::events::msg; +using namespace mtx::events::voip; using webrtc::CallType; +//! Session Description Object +typedef RTCSessionDescriptionInit SDO; namespace { std::vector<std::string> @@ -55,8 +57,8 @@ CallManager::CallManager(QObject *parent) , session_(WebRTCSession::instance()) , turnServerTimer_(this) { - qRegisterMetaType<std::vector<mtx::events::msg::CallCandidates::Candidate>>(); - qRegisterMetaType<mtx::events::msg::CallCandidates::Candidate>(); + qRegisterMetaType<std::vector<mtx::events::voip::CallCandidates::Candidate>>(); + qRegisterMetaType<mtx::events::voip::CallCandidates::Candidate>(); qRegisterMetaType<mtx::responses::TurnServer>(); connect( @@ -65,8 +67,10 @@ 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 +87,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 +96,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 +227,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 +249,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 +281,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 +302,8 @@ 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 +326,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 +400,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(); }