#ifndef MS_SETTINGS_HPP
#define MS_SETTINGS_HPP
#include "common.hpp"
#include "Channel/ChannelRequest.hpp"
#include "LogLevel.hpp"
#include <ankerl/unordered_dense.h>
#include <string>
#include <vector>
class Settings
{
public:
struct LogTags
{
bool info{ false };
bool ice{ false };
bool dtls{ false };
bool rtp{ false };
bool srtp{ false };
bool rtcp{ false };
bool rtx{ false };
bool bwe{ false };
bool score{ false };
bool simulcast{ false };
bool svc{ false };
bool sctp{ false };
bool message{ false };
};
public:
struct Configuration
{
LogLevel logLevel{ LogLevel::LOG_ERROR };
struct LogTags logTags;
uint16_t rtcMinPort{ 10000u };
uint16_t rtcMaxPort{ 59999u };
std::string dtlsCertificateFile;
std::string dtlsPrivateKeyFile;
std::string libwebrtcFieldTrials{ "WebRTC-Bwe-AlrLimitedBackoff/Enabled/" };
bool disableLiburing{ false };
};
public:
static void SetConfiguration(int argc, char* argv[]);
static void SetLogLevel(std::string& level);
static void SetLogTags(const std::vector<std::string>& tags);
static void PrintConfiguration();
static void HandleRequest(Channel::ChannelRequest* request);
private:
static void SetDtlsCertificateAndPrivateKeyFiles();
public:
static thread_local struct Configuration configuration;
private:
static const ankerl::unordered_dense::map<std::string, LogLevel> String2LogLevel;
static const ankerl::unordered_dense::map<LogLevel, std::string> LogLevel2String;
};
#endif