фича: имя веб-сервера
This commit is contained in:
@@ -70,10 +70,17 @@ static const char* boolAsStr(bool value) {
|
||||
|
||||
class TerminalNetworkSettings {
|
||||
public:
|
||||
std::string managementIp, managementGateway, dataIp;
|
||||
std::string managementIp, managementGateway, dataIp, serverName;
|
||||
bool isL2 = true;
|
||||
unsigned int dataMtu = 1500;
|
||||
|
||||
#ifdef MODEM_IS_SCPC
|
||||
static constexpr const char* DEFAULT_SERVER_NAME = "RCSM-101";
|
||||
#endif
|
||||
#ifdef MODEM_IS_TDMA
|
||||
static constexpr const char* DEFAULT_SERVER_NAME = "RCSM-101 TDMA";
|
||||
#endif
|
||||
|
||||
TerminalNetworkSettings() = default;
|
||||
TerminalNetworkSettings(const TerminalNetworkSettings& src) = default;
|
||||
~TerminalNetworkSettings() = default;
|
||||
@@ -86,6 +93,7 @@ public:
|
||||
isL2 = true;
|
||||
dataIp = "0.0.0.0";
|
||||
dataMtu = 1500;
|
||||
serverName = DEFAULT_SERVER_NAME;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -113,6 +121,21 @@ static std::ostream& operator<<(std::ostream& out, CP_Result result) {
|
||||
return out;
|
||||
}
|
||||
|
||||
std::string makeTimepointFromMillis(int64_t unix_time_ms) {
|
||||
// Преобразуем миллисекунды в микросекунды для std::chrono
|
||||
auto time_point = std::chrono::time_point<std::chrono::system_clock,
|
||||
std::chrono::microseconds>(std::chrono::microseconds(unix_time_ms * 1000));
|
||||
|
||||
auto tp = std::chrono::system_clock::to_time_t(time_point);
|
||||
tm* t = std::localtime(&tp);
|
||||
|
||||
std::stringstream ss;
|
||||
ss << std::put_time(t, "%y-%m-%d %H:%M:%S");
|
||||
auto ms = (unix_time_ms % 1000);
|
||||
ss << '.' << std::setw(3) << std::setfill('0') << ms;
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
class api_driver::StatisticsLogger {
|
||||
public:
|
||||
StatisticsLogger(): timeStart(TIME_NOW()) {}
|
||||
@@ -172,7 +195,7 @@ public:
|
||||
if (!logEn) return;
|
||||
if (this->logFile.is_open()) {
|
||||
std::stringstream res;
|
||||
res << TIME_NOW() - this->timeStart << '\t';
|
||||
res << makeTimepointFromMillis(TIME_NOW()) << '\t';
|
||||
res << item.cnt_ok << '\t';
|
||||
res << item.cnt_bad << '\t';
|
||||
res << item.fine_freq_dem << '\t';
|
||||
@@ -295,26 +318,47 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
void unsafeLoadNetworkSettings(TerminalNetworkSettings& s) {
|
||||
s.loadDefaults();
|
||||
logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_GetNetwork(addr)", CP_GetNetwork(sid, "addr", &s.managementIp));
|
||||
// logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_GetNetwork(mask)", CP_GetNetwork(sid, "mask", &tmp));
|
||||
// s.managementIp += "/";
|
||||
// s.managementIp += std::to_string(calculateSubnetMask(tmp));
|
||||
logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_GetNetwork(gateway)", CP_GetNetwork(sid, "gateway", &s.managementGateway));
|
||||
std::string nm; logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_GetNetwork(mode)", CP_GetNetwork(sid, "mode", &nm));
|
||||
if (nm == "tun") {
|
||||
s.isL2 = false;
|
||||
logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_GetNetwork(addr_data)", CP_GetNetwork(sid, "addr_data", &s.dataIp));
|
||||
} else {
|
||||
s.isL2 = true;
|
||||
}
|
||||
logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_GetNetwork(mode)", CP_GetNetwork(sid, "mode", &nm));
|
||||
s.dataMtu = 1500;
|
||||
logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_GetNetwork(name_serv)", CP_GetNetwork(sid, "name_serv", &s.serverName));
|
||||
if (s.serverName.empty()) {
|
||||
s.serverName = TerminalNetworkSettings::DEFAULT_SERVER_NAME;
|
||||
}
|
||||
}
|
||||
void unsafStoreNetworkSettings(TerminalNetworkSettings& s) {
|
||||
logCpApiError("api_driver::TerminalApiDaemon::unsafStoreNetworkSettings()->CP_SetNetwork(mode)", CP_SetNetwork(sid, "mode", s.isL2 ? "tap" : "tun"));
|
||||
logCpApiError("api_driver::TerminalApiDaemon::unsafStoreNetworkSettings()->CP_SetNetwork(addr)", CP_SetNetwork(sid, "addr", s.managementIp.c_str()));
|
||||
if (!s.isL2) {
|
||||
logCpApiError("api_driver::TerminalApiDaemon::unsafStoreNetworkSettings()->CP_SetNetwork(addr_data)", CP_SetNetwork(sid, "addr_data", s.dataIp.c_str()));
|
||||
// TODO маска не устанавливается, потому что в API этого нет
|
||||
}
|
||||
logCpApiError("api_driver::TerminalApiDaemon::unsafStoreNetworkSettings()->CP_SetNetwork(mask)", CP_SetNetwork(sid, "mask", "255.255.255.0"));
|
||||
logCpApiError("api_driver::TerminalApiDaemon::unsafStoreNetworkSettings()->CP_SetNetwork(gateway)", CP_SetNetwork(sid, "gateway", s.managementGateway.c_str()));
|
||||
|
||||
// TODO MTU не устанавливается, потому что в API этого нет
|
||||
|
||||
logCpApiError("api_driver::TerminalApiDaemon::unsafeLoadNetworkSettings()->CP_SetNetwork(name_serv)", CP_SetNetwork(sid, "name_serv", s.serverName.c_str()));
|
||||
}
|
||||
|
||||
void updateNetworkSettings() {
|
||||
TerminalNetworkSettings s;
|
||||
|
||||
std::lock_guard lock(this->cpApiMutex);
|
||||
logCpApiError("api_driver::TerminalApiDaemon::updateNetworkSettings()->CP_GetNetwork(addr)", CP_GetNetwork(sid, "addr", &s.managementIp));
|
||||
// s.managementIp = tmp + "/";
|
||||
// tmp.clear(); logCpApiError("api_driver::TerminalApiDaemon::updateNetworkSettings()->CP_GetNetwork(mask)", CP_GetNetwork(sid, "mask", &tmp));
|
||||
// s.managementIp += std::to_string(calculateSubnetMask(tmp));
|
||||
logCpApiError("api_driver::TerminalApiDaemon::updateNetworkSettings()->CP_GetNetwork(gateway)", CP_GetNetwork(sid, "gateway", &s.managementGateway));
|
||||
std::string nm; logCpApiError("api_driver::TerminalApiDaemon::updateNetworkSettings()->CP_GetNetwork(mode)", CP_GetNetwork(sid, "mode", &nm));
|
||||
if (nm == "tun") {
|
||||
s.isL2 = false;
|
||||
logCpApiError("api_driver::TerminalApiDaemon::updateNetworkSettings()->CP_GetNetwork(addr_data)", CP_GetNetwork(sid, "addr_data", &s.dataIp));
|
||||
// s.dataIp += "/24";
|
||||
} else {
|
||||
s.isL2 = true;
|
||||
// s.dataIp = "0.0.0.0/24";
|
||||
s.dataIp = "0.0.0.0";
|
||||
}
|
||||
s.dataMtu = 1500;
|
||||
unsafeLoadNetworkSettings(s);
|
||||
|
||||
{
|
||||
std::lock_guard lock2(this->networkSettingsMutex);
|
||||
@@ -337,6 +381,7 @@ private:
|
||||
{
|
||||
std::lock_guard _lock(this->stateMutex);
|
||||
this->deviceInitState = "Not connected to API";
|
||||
this->networkSettings.loadDefaults();
|
||||
}
|
||||
|
||||
unsigned int access{};
|
||||
@@ -705,34 +750,10 @@ public:
|
||||
|
||||
std::lock_guard lock(this->cpApiMutex);
|
||||
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_SetDmaDebug(begin_save_config)", CP_SetDmaDebug(sid, "begin_save_config", ""));
|
||||
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_SetNetwork(mode)", CP_SetNetwork(sid, "mode", s.isL2 ? "tap" : "tun"));
|
||||
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_SetNetwork(addr)", CP_SetNetwork(sid, "addr", s.managementIp.c_str()));
|
||||
if (!s.isL2) {
|
||||
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_SetNetwork(addr_data)", CP_SetNetwork(sid, "addr_data", s.dataIp.c_str()));
|
||||
// TODO маска не устанавливается, потому что в API этого нет
|
||||
}
|
||||
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_SetNetwork(mask)", CP_SetNetwork(sid, "mask", "255.255.255.0"));
|
||||
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_SetNetwork(gateway)", CP_SetNetwork(sid, "gateway", s.managementGateway.c_str()));
|
||||
|
||||
// TODO MTU не устанавливается, потому что в API этого нет
|
||||
unsafStoreNetworkSettings(s);
|
||||
|
||||
if (readback) {
|
||||
s.loadDefaults();
|
||||
s.managementIp.clear();
|
||||
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_GetNetwork(addr)", CP_GetNetwork(sid, "addr", &s.managementIp));
|
||||
// logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_GetNetwork(mask)", CP_GetNetwork(sid, "mask", &tmp));
|
||||
// s.managementIp += "/";
|
||||
// s.managementIp += std::to_string(calculateSubnetMask(tmp));
|
||||
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_GetNetwork(gateway)", CP_GetNetwork(sid, "gateway", &s.managementGateway));
|
||||
std::string nm; logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_GetNetwork(mode)", CP_GetNetwork(sid, "mode", &nm));
|
||||
if (nm == "tun") {
|
||||
s.isL2 = false;
|
||||
logCpApiError("api_driver::TerminalApiDaemon::setNetworkSettings()->CP_GetNetwork(addr_data)", CP_GetNetwork(sid, "addr_data", &s.dataIp));
|
||||
} else {
|
||||
s.isL2 = true;
|
||||
s.dataIp = "0.0.0.0";
|
||||
}
|
||||
s.dataMtu = 1500;
|
||||
unsafeLoadNetworkSettings(s);
|
||||
{
|
||||
std::lock_guard lock2(this->networkSettingsMutex);
|
||||
this->networkSettings = s;
|
||||
@@ -1085,11 +1106,12 @@ std::string api_driver::ApiDriver::loadSettings() const {
|
||||
result << ",\"qosProfile\":" << qosClasses;
|
||||
|
||||
// сеть
|
||||
result << ",\"netManagementIp\":\n" << buildEscapedString(network.managementIp);
|
||||
result << ",\"netIsL2\":\n" << boolAsStr(network.isL2);
|
||||
result << ",\"netManagementGateway\":\n" << buildEscapedString(network.managementGateway);
|
||||
result << ",\"netDataIp\":\n" << buildEscapedString(network.dataIp);
|
||||
result << ",\"netDataMtu\":\n" << network.dataMtu;
|
||||
result << "\n,\"netManagementIp\":" << buildEscapedString(network.managementIp);
|
||||
result << ",\"netIsL2\":" << boolAsStr(network.isL2);
|
||||
result << ",\"netManagementGateway\":" << buildEscapedString(network.managementGateway);
|
||||
result << ",\"netDataIp\":" << buildEscapedString(network.dataIp);
|
||||
result << ",\"netDataMtu\":" << network.dataMtu;
|
||||
result << ",\"netServerName\":" << buildEscapedString(network.serverName);
|
||||
|
||||
result << "}";
|
||||
return result.str();
|
||||
@@ -1275,6 +1297,7 @@ void api_driver::ApiDriver::setNetworkSettings(boost::property_tree::ptree &pt)
|
||||
s.isL2 = pt.get<bool>("netIsL2");
|
||||
s.dataIp = pt.get<std::string>("netDataIp");
|
||||
s.dataMtu = pt.get<unsigned int>("netDataMtu");
|
||||
s.serverName = pt.get<std::string>("netServerName");
|
||||
|
||||
daemon->setNetworkSettings(s);
|
||||
}
|
||||
|
Reference in New Issue
Block a user