Files
utun2/tools/chatgui/transport/utun_node.h
T
evgeny 38c9f229bc stcp: ed25519 pubkey exchange in handshake, fix instance destroy segfault, fix chat_tcp_test
- u_async.c: process immediate_queue BEFORE epoll_wait in uasync_poll
- stcp_link.c: defensive NULL etcp_conn/etcp_link in stcp_link_close
- utun_instance.c: move stcp_server_list_destroy_all to Phase J (before ETCP),
  add deferred drain in both Phase J and L
- stcp.h/c: STCP_HS_ENC_CLIENT 6→38, STCP_HS_ENC_SERVER 7→39,
  exchange ed25519_pubkey in both handshake directions
- etcp_connections.c: copy peer_ed25519 from STCP to ETCP_CONN in
  etcp_link_enter_ready_tcp; guard link->etcp in tcp_link_close_cb
- chat_sync.c: fix lk->conn NULL dereference for TCP links
- test_stcp.c: update stcp_server_create/stcp_client_connect callsites
- tools/chat_tcp_test: change transport udp→tcp
2026-08-07 00:48:27 +03:00

67 lines
1.7 KiB
C++

// utun_node.h — C++ wrapper for embedded uTun node (runs in dedicated thread)
#ifndef UTUN_NODE_H
#define UTUN_NODE_H
#include <QObject>
#include <QByteArray>
#include <QString>
#include <QList>
#include <atomic>
#include <cstdint>
#include <thread>
struct UTUN_INSTANCE;
class DbManager;
struct NodeAddr;
class UtunNode : public QObject {
Q_OBJECT
public:
explicit UtunNode(QObject* parent = nullptr);
~UtunNode();
bool start(const QString& configPath);
void requestStop();
void stop();
bool isRunning() const { return m_running; }
void finalize();
void setDebugFile(const QString& path);
void setDbPath(const QString& path);
void setDebugLevel(const QString& level);
void setDebugCategories(const QString& categories);
struct UTUN_INSTANCE* instance() const { return m_instance; }
void send(uint64_t dstNodeId, const QByteArray& data);
QString nodeIdHex() const;
QString pubKeyHex() const;
QList<NodeAddr> getInviteAddresses(DbManager* db);
int64_t ntpOffsetUs() const;
bool ntpSynced() const;
bool ntpEnabled() const;
signals:
void started();
void stopped();
void error(const QString& msg);
void messageReceived(uint64_t src, const QByteArray& data);
private:
void runLoop();
static void recvCallback(struct ETCP_CONN* conn, struct ll_entry* entry);
UTUN_INSTANCE* m_instance = nullptr;
struct UASYNC* m_ua = nullptr;
std::thread m_thread;
std::atomic<bool> m_running{false};
std::atomic<bool> m_stop{false};
QString m_configPath;
QString m_debugFile;
QString m_dbPath;
QString m_debugLevel;
QString m_debugCategories;
};
#endif // UTUN_NODE_H