#define MS_CLASS "RTC::RtpHeaderExtensionParameters"
#include "Logger.hpp"
#include "MediaSoupErrors.hpp"
#include "Utils.hpp"
#include "RTC/RtpDictionaries.hpp"
namespace RTC
{
RtpHeaderExtensionParameters::RtpHeaderExtensionParameters(json& data)
{
MS_TRACE();
if (!data.is_object())
MS_THROW_TYPE_ERROR("data is not an object");
auto jsonUriIt = data.find("uri");
auto jsonIdIt = data.find("id");
auto jsonEncryptIt = data.find("encrypt");
auto jsonParametersIt = data.find("parameters");
if (jsonUriIt == data.end() || !jsonUriIt->is_string())
MS_THROW_TYPE_ERROR("missing uri");
this->uri = jsonUriIt->get<std::string>();
if (this->uri.empty())
MS_THROW_TYPE_ERROR("empty uri");
this->type = RTC::RtpHeaderExtensionUri::GetType(this->uri);
if (jsonIdIt == data.end() || !Utils::Json::IsPositiveInteger(*jsonIdIt))
MS_THROW_TYPE_ERROR("missing id");
this->id = jsonIdIt->get<uint8_t>();
if (this->id == 0u)
MS_THROW_TYPE_ERROR("invalid id 0");
if (jsonEncryptIt != data.end() && jsonEncryptIt->is_boolean())
this->encrypt = jsonEncryptIt->get<bool>();
if (jsonParametersIt != data.end() && jsonParametersIt->is_object())
this->parameters.Set(*jsonParametersIt);
}
void RtpHeaderExtensionParameters::FillJson(json& jsonObject) const
{
MS_TRACE();
jsonObject["uri"] = this->uri;
jsonObject["id"] = this->id;
jsonObject["encrypt"] = this->encrypt;
this->parameters.FillJson(jsonObject["parameters"]);
}
}