// utun_node.h — C++ wrapper for embedded uTun node (runs in dedicated thread) #ifndef UTUN_NODE_H #define UTUN_NODE_H #include #include #include #include #include #include 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 stop(); bool isRunning() const { return m_running; } void setDebugFile(const QString& path); void setDbPath(const QString& path); void setDebugLevel(const QString& level); void setDebugCategories(const QString& categories); void send(uint64_t dstNodeId, const QByteArray& data); QString nodeIdHex() const; QString pubKeyHex() const; QList getInviteAddresses(DbManager* db); 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; std::thread m_thread; std::atomic m_running{false}; std::atomic m_stop{false}; QString m_configPath; QString m_debugFile; QString m_dbPath; QString m_debugLevel; QString m_debugCategories; }; #endif // UTUN_NODE_H