You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.7 KiB
66 lines
1.7 KiB
// 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
|
|
|