#ifndef IPCSERVER_H #define IPCSERVER_H #include #include #include #include #include #include #include #include #include #include "../client/daemon/interfaceconfig.h" #include "../client/mozilla/pinghelper.h" #include "ipc.h" #include "ipcserverprocess.h" #include "rep_ipc_interface_source.h" class IpcServer : public IpcInterfaceSource { public: explicit IpcServer(QObject *parent = nullptr); virtual int createPrivilegedProcess() override; virtual int routeAddList(const QString &gw, const QStringList &ips) override; virtual int routeAddListVia(const QString &ifname, const QString &gw, const QStringList &ips) override; virtual bool clearSavedRoutes() override; virtual bool routeDeleteList(const QString &gw, const QStringList &ips) override; virtual bool addExclusionRoute(const QString &ifname, const QString &addr) override; virtual bool delExclusionRoute(const QString &ifname, const QString &addr) override; virtual bool addAllowedIp(const QString &ifname, const QString &prefix) override; virtual bool delAllowedIp(const QString &ifname, const QString &prefix) override; virtual bool setTunnelResolvers(const QString &ifname, const QStringList &resolvers) override; virtual bool restoreTunnelResolvers() override; virtual bool flushDns() override; virtual void resetIpStack() override; virtual bool checkAndInstallDriver() override; virtual QStringList getTapList() override; virtual void cleanUp() override; virtual void clearLogs() override; virtual void setLogsEnabled(bool enabled) override; virtual bool createTun(const QString &dev, const QString &subnet) override; virtual bool deleteTun(const QString &dev) override; virtual QString reserveUtunName() override; virtual bool applyAdapterAddress(const QString &ifname, const QString &ipv4, const QString &ipv6) override; virtual bool removeAdapterAddress(const QString &ifname, const QString &ipv4, const QString &ipv6) override; virtual bool StartRoutingIpv6() override; virtual bool StopRoutingIpv6() override; virtual bool disableAllTraffic() override; virtual bool addKillSwitchAllowedRange(const QString &ifname, QStringList ranges) override; virtual bool resetKillSwitchAllowedRange(QStringList ranges) override; virtual bool enablePeerTraffic(const QJsonObject &configStr) override; virtual bool enableKillSwitch(const QJsonObject &excludeAddr, int vpnAdapterIndex) override; virtual bool disableKillSwitch() override; virtual bool disableKillSwitchForTunnel(const QString &ifname, const QStringList &remainingRanges) override; virtual bool refreshKillSwitch( bool enabled ) override; virtual bool updateResolvers(const QString& ifname, const QList& resolvers) override; virtual bool restoreResolvers() override; virtual bool xrayStart(const QString& ifname, const QString& cfg) override; virtual bool xrayStop(const QString& ifname) override; virtual bool xrayAddUplinkRoutes(const QString& uplinkIface, const QString& uplinkGateway) override; virtual bool xrayRemoveUplinkRoutes(const QString& uplinkIface, const QString& uplinkGateway) override; virtual bool startNetworkCheck(const QString& serverIpv4Gateway, const QString& deviceIpv4Address) override; virtual bool stopNetworkCheck() override; private: int m_localpid = 0; struct ProcessDescriptor { ProcessDescriptor (QObject *parent = nullptr) { serverNode = QSharedPointer(new QRemoteObjectHost(parent)); ipcProcess = QSharedPointer(new IpcServerProcess(parent)); localServer = QSharedPointer(new QLocalServer(parent)); } QSharedPointer ipcProcess; QSharedPointer serverNode; QSharedPointer localServer; }; QMap m_processes; PingHelper m_pingHelper; struct XrayWorker { QSharedPointer process; QByteArray stdoutBuf; QPointer startLoop; bool startResult = false; }; QHash m_xrayWorkers; void onXrayWorkerLine(const QString& ifname, const QByteArray& line); }; #endif // IPCSERVER_H