#ifndef VPNCONNECTION_H #define VPNCONNECTION_H #include #include #include #include #include "protocols/vpnprotocol.h" #include "core/defs.h" #include "settings.h" #ifdef Q_OS_IOS #include "protocols/ios_vpnprotocol.h" #endif #ifdef AMNEZIA_DESKTOP #include "core/ipcclient.h" #endif class VpnConfigurator; class ServerController; using namespace amnezia; class VpnConnection : public QObject { Q_OBJECT public: explicit VpnConnection(std::shared_ptr settings, std::shared_ptr configurator, std::shared_ptr serverController, QObject* parent = nullptr); ~VpnConnection() override; static QString bytesPerSecToText(quint64 bytes); ErrorCode lastError() const; static QMap getLastVpnConfig(const QJsonObject &containerConfig); QString createVpnConfigurationForProto(int serverIndex, const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig, Proto proto, ErrorCode *errorCode = nullptr); QJsonObject createVpnConfiguration(int serverIndex, const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig, ErrorCode *errorCode = nullptr); bool isConnected() const; bool isDisconnected() const; VpnProtocol::VpnConnectionState connectionState(); QSharedPointer vpnProtocol() const; void addRoutes(const QStringList &ips); void deleteRoutes(const QStringList &ips); void flushDns(); const QString &remoteAddress() const; void addSitesRoutes(const QString &gw, Settings::RouteMode mode); public slots: void connectToVpn(int serverIndex, const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig); void disconnectFromVpn(); signals: void bytesChanged(quint64 receivedBytes, quint64 sentBytes); void connectionStateChanged(VpnProtocol::VpnConnectionState state); void vpnProtocolError(amnezia::ErrorCode error); void serviceIsNotReady(); protected slots: void onBytesChanged(quint64 receivedBytes, quint64 sentBytes); void onConnectionStateChanged(VpnProtocol::VpnConnectionState state); #ifdef Q_OS_IOS void checkIOSStatus(); #endif protected: QSharedPointer m_vpnProtocol; private: std::shared_ptr m_settings; std::shared_ptr m_configurator; std::shared_ptr m_serverController; QJsonObject m_vpnConfiguration; QJsonObject m_routeMode; QString m_remoteAddress; quint64 m_receivedBytes; quint64 m_sentBytes; bool m_isIOSConnected; //remove later move to isConnected, #ifdef AMNEZIA_DESKTOP IpcClient *m_IpcClient {nullptr}; #endif #ifdef Q_OS_IOS IOSVpnProtocol * iosVpnProtocol{nullptr}; #endif }; #endif // VPNCONNECTION_H