#ifndef VPNCONNECTION_H #define VPNCONNECTION_H #include #include #include #include #include "protocols/vpnprotocol.h" #include "core/defs.h" #include "core/ipcclient.h" #include "settings.h" using namespace amnezia; class VpnConnection : public QObject { Q_OBJECT public: explicit VpnConnection(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, Protocol proto, ErrorCode *errorCode = nullptr); ErrorCode createVpnConfiguration(int serverIndex, const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig); ErrorCode connectToVpn(int serverIndex, const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig); void disconnectFromVpn(); bool isConnected() const; bool isDisconnected() const; VpnProtocol::ConnectionState connectionState(); QSharedPointer vpnProtocol() const; signals: void bytesChanged(quint64 receivedBytes, quint64 sentBytes); void connectionStateChanged(VpnProtocol::ConnectionState state); void vpnProtocolError(amnezia::ErrorCode error); void serviceIsNotReady(); protected slots: void onBytesChanged(quint64 receivedBytes, quint64 sentBytes); void onConnectionStateChanged(VpnProtocol::ConnectionState state); protected: QSharedPointer m_vpnProtocol; private: Settings m_settings; QJsonObject m_vpnConfiguration; }; #endif // VPNCONNECTION_H