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();
}
diff --git a/src/voip/CallManager.h b/src/voip/CallManager.h
index a505e995..16bd9a37 100644
--- a/src/voip/CallManager.h
+++ b/src/voip/CallManager.h
@@ -67,15 +67,16 @@ public slots:
void toggleMicMute();
void toggleLocalPiP() { session_.toggleLocalPiP(); }
void acceptInvite();
- void hangUp(mtx::events::msg::CallHangUp::Reason = mtx::events::msg::CallHangUp::Reason::User);
+ void
+ hangUp(mtx::events::voip::CallHangUp::Reason = mtx::events::voip::CallHangUp::Reason::User);
QStringList windowList();
void previewWindow(unsigned int windowIndex) const;
signals:
- void newMessage(const QString &roomid, const mtx::events::msg::CallInvite &);
- void newMessage(const QString &roomid, const mtx::events::msg::CallCandidates &);
- void newMessage(const QString &roomid, const mtx::events::msg::CallAnswer &);
- void newMessage(const QString &roomid, const mtx::events::msg::CallHangUp &);
+ void newMessage(const QString &roomid, const mtx::events::voip::CallInvite &);
+ void newMessage(const QString &roomid, const mtx::events::voip::CallCandidates &);
+ void newMessage(const QString &roomid, const mtx::events::voip::CallAnswer &);
+ void newMessage(const QString &roomid, const mtx::events::voip::CallHangUp &);
void newInviteState();
void newCallState();
void micMuteChanged();
@@ -92,11 +93,13 @@ 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;
std::string inviteSDP_;
- std::vector<mtx::events::msg::CallCandidates::Candidate> remoteICECandidates_;
+ std::vector<mtx::events::voip::CallCandidates::Candidate> remoteICECandidates_;
std::vector<std::string> turnURIs_;
QTimer turnServerTimer_;
QMediaPlayer player_;
@@ -104,11 +107,11 @@ private:
template<typename T>
bool handleEvent(const mtx::events::collections::TimelineEvents &event);
- void handleEvent(const mtx::events::RoomEvent<mtx::events::msg::CallInvite> &);
- void handleEvent(const mtx::events::RoomEvent<mtx::events::msg::CallCandidates> &);
- void handleEvent(const mtx::events::RoomEvent<mtx::events::msg::CallAnswer> &);
- void handleEvent(const mtx::events::RoomEvent<mtx::events::msg::CallHangUp> &);
- void answerInvite(const mtx::events::msg::CallInvite &, bool isVideo);
+ void handleEvent(const mtx::events::RoomEvent<mtx::events::voip::CallInvite> &);
+ void handleEvent(const mtx::events::RoomEvent<mtx::events::voip::CallCandidates> &);
+ void handleEvent(const mtx::events::RoomEvent<mtx::events::voip::CallAnswer> &);
+ void handleEvent(const mtx::events::RoomEvent<mtx::events::voip::CallHangUp> &);
+ void answerInvite(const mtx::events::voip::CallInvite &, bool isVideo);
void generateCallID();
QStringList devices(bool isVideo) const;
void clear();
diff --git a/src/voip/WebRTCSession.cpp b/src/voip/WebRTCSession.cpp
index 31174500..48e878e8 100644
--- a/src/voip/WebRTCSession.cpp
+++ b/src/voip/WebRTCSession.cpp
@@ -105,7 +105,7 @@ WebRTCSession::init(std::string *errorMessage)
namespace {
std::string localsdp_;
-std::vector<mtx::events::msg::CallCandidates::Candidate> localcandidates_;
+std::vector<mtx::events::voip::CallCandidates::Candidate> localcandidates_;
bool haveAudioStream_ = false;
bool haveVideoStream_ = false;
GstPad *localPiPSinkPad_ = nullptr;
@@ -726,7 +726,7 @@ WebRTCSession::acceptAnswer(const std::string &sdp)
void
WebRTCSession::acceptICECandidates(
- const std::vector<mtx::events::msg::CallCandidates::Candidate> &candidates)
+ const std::vector<mtx::events::voip::CallCandidates::Candidate> &candidates)
{
if (state_ >= State::INITIATED) {
for (const auto &c : candidates) {
@@ -1151,7 +1151,8 @@ WebRTCSession::acceptAnswer(const std::string &)
}
void
-WebRTCSession::acceptICECandidates(const std::vector<mtx::events::msg::CallCandidates::Candidate> &)
+WebRTCSession::acceptICECandidates(
+ const std::vector<mtx::events::voip::CallCandidates::Candidate> &)
{}
bool
diff --git a/src/voip/WebRTCSession.h b/src/voip/WebRTCSession.h
index 04383679..ac1845c7 100644
--- a/src/voip/WebRTCSession.h
+++ b/src/voip/WebRTCSession.h
@@ -64,7 +64,7 @@ public:
bool createOffer(webrtc::CallType, uint32_t shareWindowId);
bool acceptOffer(const std::string &sdp);
bool acceptAnswer(const std::string &sdp);
- void acceptICECandidates(const std::vector<mtx::events::msg::CallCandidates::Candidate> &);
+ void acceptICECandidates(const std::vector<mtx::events::voip::CallCandidates::Candidate> &);
bool isMicMuted() const;
bool toggleMicMute();
@@ -78,10 +78,10 @@ public:
signals:
void offerCreated(const std::string &sdp,
- const std::vector<mtx::events::msg::CallCandidates::Candidate> &);
+ const std::vector<mtx::events::voip::CallCandidates::Candidate> &);
void answerCreated(const std::string &sdp,
- const std::vector<mtx::events::msg::CallCandidates::Candidate> &);
- void newICECandidate(const mtx::events::msg::CallCandidates::Candidate &);
+ const std::vector<mtx::events::voip::CallCandidates::Candidate> &);
+ void newICECandidate(const mtx::events::voip::CallCandidates::Candidate &);
void stateChanged(webrtc::State);
private slots:
|