summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorr0hit05 <rohitsutradhar311@gmail.com>2022-06-27 22:08:02 +0530
committerr0hit05 <rohitsutradhar311@gmail.com>2022-07-15 17:20:05 +0530
commita7bfaa4ef68a599ccaf09491c59b98959d5ae8cd (patch)
tree5ff1c91e6a5ac01988c275cfce2db862dcc63b56 /src
parentUpdated call event namespaces to voip (diff)
downloadnheko-a7bfaa4ef68a599ccaf09491c59b98959d5ae8cd.tar.xz
Updated call struct definitions
Diffstat (limited to 'src')
-rw-r--r--src/EventAccessors.cpp2
-rw-r--r--src/voip/CallManager.cpp31
-rw-r--r--src/voip/CallManager.h2
3 files changed, 24 insertions, 11 deletions
diff --git a/src/EventAccessors.cpp b/src/EventAccessors.cpp
index f3cb4f99..659338a0 100644
--- a/src/EventAccessors.cpp
+++ b/src/EventAccessors.cpp
@@ -77,7 +77,7 @@ struct CallType
     {
         if constexpr (std::is_same_v<mtx::events::RoomEvent<mtx::events::voip::CallInvite>, T>) {
             const char video[]     = "m=video";
-            const std::string &sdp = e.content.sdp;
+            const std::string &sdp = e.content.offer.sdp;
             return std::search(sdp.cbegin(),
                                sdp.cend(),
                                std::cbegin(video),
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();
         }
diff --git a/src/voip/CallManager.h b/src/voip/CallManager.h
index c17182f0..52d33739 100644
--- a/src/voip/CallManager.h
+++ b/src/voip/CallManager.h
@@ -92,6 +92,8 @@ private:
     QString callPartyDisplayName_;
     QString callPartyAvatarUrl_;
     std::string callid_;
+    std::string partyid_ = "";
+    std::string invitee_ = "";
     const uint32_t timeoutms_  = 120000;
     webrtc::CallType callType_ = webrtc::CallType::VOICE;
     bool haveCallInvite_       = false;