Files
utun2/tools/chatgui/transport/node_config.h
T
evgeny 5c2501b4f3 chat: BGP-driven address sync, member identity verify, join_sig fix
- Адреса узлов вынесены из wire-протокола member_sync/merkle/join/welcome
  в BGP/topo_group: node_addresses теперь пишет только topo_node_sqlite_addrs_put
  (источник истины ni->v4/v6_addrs), классификация config_type/nat_type в sockmeta
- Жёсткая анти-подделка: node_id=derive(x25519), ed25519 сверяется с доверенной
  таблицей nodes, NODEINFO node_id/pubkey mismatch отклоняется как forgery
- Единые member_sync_build_join_msg (112Б) и member_sync_build_update_msg:
  устранён баг _verify_join_sig (join_ts по смещению 80 вместо 104, длина 104→112),
  который рушил приём мемберов; все 7 мест подписи/проверки join_sig через хелпер
- Единое обновление своего мембера chat_core_update_my_member (вместо sync_my_addresses)
- Android standby: пауза таймеров (broadcast/db_sync/merkle_sync/chat_sync) через standby_wait
- name[16] → name[MAX_CONN_NAME_LEN] с truncation-warning в парсере
- conn_mgr: etcp_connect_cancel_by_node (use-after-free при отмене invite),
  промоушен conn в ncd после успешного invite
- Android GUI: foreground-gating опросов, сохранение портов интерфейсов, фикс udp-log flush
- chatgui: персистентный db_path; мелкие DEBUG-логи epoll/pool
2026-08-15 12:36:05 +03:00

80 lines
2.3 KiB
C++

// node_config.h — Simplified INI config manager for embedded uTun node
#ifndef NODE_CONFIG_H
#define NODE_CONFIG_H
#include <QString>
#include <QStringList>
#include <QList>
#include <QPair>
struct NodeClient {
QString name;
QString pubKeyHex;
QString serverName;
QString remoteAddr;
};
class NodeConfig {
public:
explicit NodeConfig(const QString& path);
bool exists() const;
bool create(const QString& nodeName, quint16 listenPort);
bool load();
bool save();
bool saveFull();
QString nodeName() const { return m_nodeName; }
void setNodeName(const QString& n) { m_nodeName = n; }
QString nodeId() const { return m_nodeId; }
QString pubKey() const { return m_pubKey; }
QString privKey() const { return m_privKey; }
uint64_t nodeIdU64() const;
QList<QPair<QString,QString>> servers() const { return m_servers; }
QList<NodeClient> clients() const { return m_clients; }
QString controlAddr() const { return m_controlAddr; }
void setControlAddr(const QString& a) { m_controlAddr = a; }
quint16 controlPort() const;
void setControlPort(quint16 p);
bool autoSockets() const { return m_autoSockets; }
void setAutoSockets(bool v) { m_autoSockets = v; }
QString filePath() const { return m_path; }
/* GUI settings (from [gui] section) */
QString dbPath() const { return m_dbPath; }
void setDbPath(const QString& p) { m_dbPath = p; }
QString debugFile() const { return m_debugFile; }
QString debugLevel() const { return m_debugLevel; }
QString debugCategories() const { return m_debugCategories; }
/* Config validation errors (collected during load()) */
bool hasErrors() const { return !m_errors.isEmpty(); }
const QStringList& errors() const { return m_errors; }
/* Identity generation (public for fixing invalid keys) */
void generateIdentity();
private:
QString m_path;
QString m_nodeName;
QString m_nodeId;
QString m_pubKey;
QString m_privKey;
QList<QPair<QString,QString>> m_servers;
QList<NodeClient> m_clients;
QString m_controlAddr;
bool m_autoSockets = true;
QString m_dbPath;
QString m_debugFile;
QString m_debugLevel;
QString m_debugCategories;
QStringList m_errors;
};
#endif // NODE_CONFIG_H