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.cpp31
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();
         }