Newer
Older
#include "mtx/events/voip.hpp"
#include <nlohmann/json.hpp>
using json = nlohmann::json;
namespace {
uint16_t
version(const json &obj)
{
auto v = obj.at("version");
try {
return v.get<uint16_t>();
} catch (const json::type_error &) {
return std::atoi(v.get<std::string>().c_str());
}
}
}
namespace mtx::events::msg {
// m.call.invite
void
from_json(const json &obj, CallInvite &content)
{
content.call_id = obj.at("call_id").get<std::string>();
content.sdp = obj.at("offer").at("sdp").get<std::string>();
}
void
to_json(json &obj, const CallInvite &content)
{
obj["call_id"] = content.call_id;
obj["offer"] = {{"sdp", content.sdp}, {"type", "offer"}};
obj["version"] = content.version;
obj["lifetime"] = content.lifetime;
}
// m.call.candidates
void
from_json(const json &obj, CallCandidates::Candidate &content)
{
content.sdpMLineIndex = obj.at("sdpMLineIndex").get<uint16_t>();
}
void
to_json(json &obj, const CallCandidates::Candidate &content)
{
}
void
from_json(const json &obj, CallCandidates &content)
{
content.candidates = obj.at("candidates").get<std::vector<CallCandidates::Candidate>>();
}
void
to_json(json &obj, const CallCandidates &content)
{
}
// m.call.answer
void
from_json(const json &obj, CallAnswer &content)
{
content.call_id = obj.at("call_id").get<std::string>();
content.sdp = obj.at("answer").at("sdp").get<std::string>();
}
void
to_json(json &obj, const CallAnswer &content)
{
obj["call_id"] = content.call_id;
obj["version"] = content.version;
}
// m.call.hangup
void
from_json(const json &obj, CallHangUp &content)
{
content.call_id = obj.at("call_id").get<std::string>();
if (obj.count("reason") == 0) {
content.reason = CallHangUp::Reason::User;
else if (obj.at("reason").get<std::string>() == "invite_timeout")
}
}
void
to_json(json &obj, const CallHangUp &content)
{
obj["call_id"] = content.call_id;
obj["version"] = content.version;
if (content.reason == CallHangUp::Reason::ICEFailed)