добавил все настройки в веб, сделал cleanup интерфейса
This commit is contained in:
@@ -87,7 +87,11 @@ namespace http::server {
|
||||
}
|
||||
|
||||
void SslConnection::stop() {
|
||||
stream_.shutdown();
|
||||
try {
|
||||
stream_.shutdown();
|
||||
} catch (std::exception& e) {
|
||||
BOOST_LOG_TRIVIAL(warning) << "SslConnection::stop(): Can't shutdown ssl socket: " << e.what();
|
||||
}
|
||||
}
|
||||
|
||||
SslConnection::~SslConnection() = default;
|
||||
|
@@ -15,6 +15,33 @@ typedef boost::property_tree::ptree::path_type json_path;
|
||||
|
||||
static constexpr const char* DEFAULT_QOS_CLASSES = R"({"rt1":[],"rt2":[],"rt3":[],"cd":[]})";
|
||||
|
||||
static int calculateSubnetMask(const std::string& subnet_mask) {
|
||||
int mask = 0;
|
||||
std::istringstream iss(subnet_mask);
|
||||
std::string octet;
|
||||
while (std::getline(iss, octet, '.')) {
|
||||
int octet_value = std::stoi(octet);
|
||||
for (int i = 7; i >= 0; i--) {
|
||||
if (octet_value & (1 << i)) {
|
||||
mask++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return mask;
|
||||
}
|
||||
|
||||
class TerminalNetworkSettings {
|
||||
public:
|
||||
std::string managementIp, managementGateway, mode, dataIp;
|
||||
unsigned int dataMtu = 1500;
|
||||
|
||||
TerminalNetworkSettings() = default;
|
||||
TerminalNetworkSettings(const TerminalNetworkSettings& src) = default;
|
||||
~TerminalNetworkSettings() = default;
|
||||
|
||||
TerminalNetworkSettings& operator= (const TerminalNetworkSettings& src) = default;
|
||||
};
|
||||
|
||||
/**
|
||||
* Этот демон нужен для того, чтобы получать статистику из API, а так же корректно сохранять настройки
|
||||
*/
|
||||
@@ -67,6 +94,31 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
void updateNetworkSettings() {
|
||||
TerminalNetworkSettings s;
|
||||
std::string tmp;
|
||||
std::lock_guard lock(this->cpApiMutex);
|
||||
CP_GetNetwork(sid, "addr", &s.managementIp);
|
||||
CP_GetNetwork(sid, "mask", &tmp);
|
||||
s.managementIp += "/";
|
||||
s.managementIp += std::to_string(calculateSubnetMask(tmp));
|
||||
CP_GetNetwork(sid, "gateway", &s.managementGateway);
|
||||
tmp.clear(); CP_GetNetwork(sid, "mode", &tmp);
|
||||
if (tmp == "tun") {
|
||||
s.mode = "l3";
|
||||
CP_GetNetwork(sid, "addr_data", &s.dataIp);
|
||||
} else {
|
||||
s.mode = "l2";
|
||||
s.dataIp = "0.0.0.0/24";
|
||||
}
|
||||
s.dataMtu = 1500;
|
||||
|
||||
{
|
||||
std::lock_guard lock2(this->networkSettingsMutex);
|
||||
this->networkSettings = s;
|
||||
}
|
||||
}
|
||||
|
||||
void updateQos() {
|
||||
bool tmp1; std::string tmp2;
|
||||
std::scoped_lock lock{this->cpApiMutex};
|
||||
@@ -120,6 +172,15 @@ private:
|
||||
BOOST_LOG_TRIVIAL(error) << "api_driver::TerminalApiDaemon::updateSettings(): " << e.what();
|
||||
}
|
||||
}},
|
||||
// обновление кеша настроек сети (делается отдельно)
|
||||
{.lastUpdate = 0, .periodMs = CACHE_SETTINGS_UPDATE_MS, .callback = [this]() {
|
||||
try {
|
||||
this->updateSettings();
|
||||
BOOST_LOG_TRIVIAL(debug) << "api_driver::TerminalApiDaemon::updateSettings(): success update!";
|
||||
} catch (std::exception& e) {
|
||||
BOOST_LOG_TRIVIAL(error) << "api_driver::TerminalApiDaemon::updateSettings(): " << e.what();
|
||||
}
|
||||
}},
|
||||
// обновление кеша QoS
|
||||
{.lastUpdate = 0, .periodMs = CACHE_QOS_UPDATE_MS, .callback = [this]() {
|
||||
try {
|
||||
@@ -164,6 +225,9 @@ private:
|
||||
DPDI_parmeters dpdiSettings{};
|
||||
buc_lnb_settings bucLnbSettings{};
|
||||
|
||||
std::shared_mutex networkSettingsMutex;
|
||||
TerminalNetworkSettings networkSettings;
|
||||
|
||||
std::shared_mutex qosSettingsMutex;
|
||||
bool qosEnabled;
|
||||
std::string qosClassesJson;
|
||||
@@ -202,6 +266,11 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void getNetworkSettings(TerminalNetworkSettings& dest) {
|
||||
std::shared_lock lock(this->networkSettingsMutex);
|
||||
dest = this->networkSettings;
|
||||
}
|
||||
|
||||
void getQosSettings(bool& isEnabled, std::string& json) {
|
||||
std::shared_lock lock(this->settingsMutex);
|
||||
isEnabled = this->qosEnabled;
|
||||
@@ -454,7 +523,9 @@ std::string api_driver::ApiDriver::loadSettings() const {
|
||||
ACM_parameters_serv_ acmSettings{};
|
||||
DPDI_parmeters dpdiSettings{};
|
||||
buc_lnb_settings bucLnb{};
|
||||
TerminalNetworkSettings network;
|
||||
daemon->getSettings(&modSettings, &demodSettings, &acmSettings, &dpdiSettings, &bucLnb);
|
||||
daemon->getNetworkSettings(network);
|
||||
|
||||
// uint32_t modulatorModcod;
|
||||
// {
|
||||
@@ -528,6 +599,13 @@ std::string api_driver::ApiDriver::loadSettings() const {
|
||||
result << ",\n\"qos.enabled\":" << boolAsStr(qosEnabled);
|
||||
result << ",\"qos.profile\":" << qosClasses;
|
||||
|
||||
// сеть
|
||||
result << ",\"network.managementIp\":\n" << buildEscapedString(network.managementIp);
|
||||
result << ",\"network.managementGateway\":\n" << buildEscapedString(network.managementGateway);
|
||||
result << ",\"network.mode\":\n" << buildEscapedString(network.mode);
|
||||
result << ",\"network.dataIp\":\n" << buildEscapedString(network.dataIp);
|
||||
result << ",\"network.dataMtu\":\n" << network.dataMtu;
|
||||
|
||||
result << "}";
|
||||
return result.str();
|
||||
}
|
||||
|
Reference in New Issue
Block a user