// 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 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; } QString nodeIdHex() const; QString pubKeyHex() const; int64_t ntpOffsetUs() const; bool ntpSynced() const; bool ntpEnabled() const; signals: void started(); void stopped(); void error(const QString& msg); private: void runLoop(); UTUN_INSTANCE* m_instance = nullptr; struct UASYNC* m_ua = 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