#ifndef ROUTERWIN_H #define ROUTERWIN_H #include #include #include #include #include #include #include #include "../client/platforms/windows/daemon/dnsutilswindows.h" #include //includes Windows.h #include #include #include #include #include #include //typedef uint8_t u8_t ; //#ifndef WIN32_LEAN_AND_MEAN //#define WIN32_LEAN_AND_MEAN //#endif /** * @brief The Router class - General class for handling ip routing */ class RouterWin : public QObject { Q_OBJECT public: static RouterWin& Instance(); int routeAddList(const QString &gw, const QStringList &ips); bool clearSavedRoutes(); int routeDeleteList(const QString &gw, const QStringList &ips); bool flushDns(); void resetIpStack(); bool StartRoutingIpv6(); bool StopRoutingIpv6(); bool createTun(const QString &dev, const QString &subnet); void suspendWcmSvc(bool suspend); bool updateResolvers(const QString& ifname, const QList& resolvers); bool restoreResolvers(); private: static QList kIpv6Subnets; RouterWin(RouterWin const &) = delete; RouterWin& operator= (RouterWin const&) = delete; DWORD GetServicePid(LPCWSTR serviceName); BOOL ListProcessThreads(DWORD dwOwnerPID); BOOL EnableDebugPrivilege(); BOOL InitNtFunctions(); BOOL SuspendProcess(BOOL fSuspend, DWORD dwProcessId); QNetworkInterface findLoopbackIface(); private: RouterWin() {m_dnsUtil = new DnsUtilsWindows(this);} QMultiMap m_ipForwardRows; bool m_suspended = false; DnsUtilsWindows *m_dnsUtil; }; #endif // ROUTERWIN_H