chatgui: add Status page in settings (NTP + connections status)

This commit is contained in:
Evgeny committed 2026-07-17 16:25:55 +03:00
1 parent f0bb03c2cf
commit 960cde3eda
15 files changed
+651 -62

No files matched your search

+28 -7
View File
@@ -807,6 +807,7 @@ static struct utun_config* parse_config_internal(FILE *fp, const char *filename)
cfg->global.db_sync_enabled = 0;
cfg->global.db_sync_ttl = 86400;
cfg->global.ntp_enabled = 0;
cfg->global.ntp_servers = NULL;
cfg->global.ntp_server_count = 0;
cfg->global.ntp_resync_interval = 3600;
@@ -983,13 +984,15 @@ static struct utun_config* parse_config_internal(FILE *fp, const char *filename)
if (strcmp(key, "enabled") == 0) {
cfg->global.ntp_enabled = strcasecmp(value, "yes") == 0 || strcasecmp(value, "1") == 0 || strcasecmp(value, "true") == 0;
} else if (strcmp(key, "server") == 0) {
if (cfg->global.ntp_server_count >= 5) {
DEBUG_ERROR(DEBUG_CATEGORY_CONFIG, "%s:%d: Too many NTP servers (max 5)", filename, line_num);
} else {
int idx = cfg->global.ntp_server_count;
strncpy(cfg->global.ntp_servers[idx], value, sizeof(cfg->global.ntp_servers[idx]) - 1);
cfg->global.ntp_servers[idx][sizeof(cfg->global.ntp_servers[idx]) - 1] = '\0';
struct CFG_NTP_SERVER *ns = u_calloc(1, sizeof(struct CFG_NTP_SERVER));
if (ns) {
strncpy(ns->name, value, sizeof(ns->name) - 1);
ns->name[sizeof(ns->name) - 1] = '\0';
ns->next = cfg->global.ntp_servers;
cfg->global.ntp_servers = ns;
cfg->global.ntp_server_count++;
} else {
DEBUG_ERROR(DEBUG_CATEGORY_MEMORY, "%s:%d: Failed to allocate NTP server entry", filename, line_num);
}
} else if (strcmp(key, "interval") == 0) {
cfg->global.ntp_resync_interval = atoi(value);
@@ -1078,6 +1081,7 @@ struct utun_config* parse_config_from_buf(const char *buf, size_t len, const cha
cfg->global.db_sync_enabled = 0;
cfg->global.db_sync_ttl = 86400;
cfg->global.ntp_enabled = 0;
cfg->global.ntp_servers = NULL;
cfg->global.ntp_server_count = 0;
cfg->global.ntp_resync_interval = 3600;
@@ -1120,7 +1124,7 @@ struct utun_config* parse_config_from_buf(const char *buf, size_t len, const cha
case SECTION_TCP_PROXY_SERVER: cfg->global.tcp_proxy_server_enabled = 1; if (strcmp(key, "tcp_recv_buf") == 0) cfg->global.tcp_recv_buf = atoi(value); break;
case SECTION_MSG_TRANSPORT: parse_msg_transport(key, value, &cfg->global, filename, line_num); break;
case SECTION_NETWORK: if (cur_network) parse_network(key, value, cur_network, filename, line_num); break;
case SECTION_NTP: if (strcmp(key, "enabled") == 0) cfg->global.ntp_enabled = strcasecmp(value, "yes") == 0 || strcasecmp(value, "1") == 0 || strcasecmp(value, "true") == 0; else if (strcmp(key, "server") == 0 && cfg->global.ntp_server_count < 5) { int idx = cfg->global.ntp_server_count; strncpy(cfg->global.ntp_servers[idx], value, sizeof(cfg->global.ntp_servers[idx]) - 1); cfg->global.ntp_servers[idx][sizeof(cfg->global.ntp_servers[idx]) - 1] = '\0'; cfg->global.ntp_server_count++; } else if (strcmp(key, "interval") == 0) { cfg->global.ntp_resync_interval = atoi(value); if (cfg->global.ntp_resync_interval < 60) cfg->global.ntp_resync_interval = 60; } else DEBUG_ERROR(DEBUG_CATEGORY_CONFIG, "%s:%d: Unknown ntp option '%s'", filename, line_num, key); break;
case SECTION_NTP: if (strcmp(key, "enabled") == 0) cfg->global.ntp_enabled = strcasecmp(value, "yes") == 0 || strcasecmp(value, "1") == 0 || strcasecmp(value, "true") == 0; else if (strcmp(key, "server") == 0) { struct CFG_NTP_SERVER *ns = u_calloc(1, sizeof(struct CFG_NTP_SERVER)); if (ns) { strncpy(ns->name, value, sizeof(ns->name) - 1); ns->name[sizeof(ns->name) - 1] = '\0'; ns->next = cfg->global.ntp_servers; cfg->global.ntp_servers = ns; cfg->global.ntp_server_count++; } } else if (strcmp(key, "interval") == 0) { cfg->global.ntp_resync_interval = atoi(value); if (cfg->global.ntp_resync_interval < 60) cfg->global.ntp_resync_interval = 60; } else DEBUG_ERROR(DEBUG_CATEGORY_CONFIG, "%s:%d: Unknown ntp option '%s'", filename, line_num, key); break;
case SECTION_GUI: break;
default: DEBUG_WARN(DEBUG_CATEGORY_CONFIG, "%s:%d: Key outside section: %s", filename, line_num, key); break;
}
@@ -1198,6 +1202,14 @@ void free_config(struct utun_config *config) {
ak = next;
}
// Free NTP servers
struct CFG_NTP_SERVER *ns = config->global.ntp_servers;
while (ns) {
struct CFG_NTP_SERVER *next = ns->next;
u_free(ns);
ns = next;
}
u_free(config);
}
@@ -1304,6 +1316,15 @@ void print_config(const struct utun_config *cfg) {
ak = ak->next;
}
}
DEBUG_INFO(DEBUG_CATEGORY_CONFIG, "NTP: enabled=%d, servers=%d, interval=%ds", g->ntp_enabled, g->ntp_server_count, g->ntp_resync_interval);
if (g->ntp_server_count > 0) {
struct CFG_NTP_SERVER *ns = g->ntp_servers;
while (ns) {
DEBUG_INFO(DEBUG_CATEGORY_CONFIG, " server=%s", ns->name);
ns = ns->next;
}
}
}
int update_config_keys(const char *filename, const char *priv_key, const char *pub_key) {