Ikev2 support
This commit is contained in:
parent
a5bcf1a02d
commit
fa151cd320
27 changed files with 626 additions and 90 deletions
57
client/protocols/ikev2_vpn_protocol.cpp
Normal file
57
client/protocols/ikev2_vpn_protocol.cpp
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
#include <QCoreApplication>
|
||||
#include <QFileInfo>
|
||||
#include <QProcess>
|
||||
#include <QRegularExpression>
|
||||
#include <QTcpSocket>
|
||||
#include <QThread>
|
||||
|
||||
#include "debug.h"
|
||||
#include "ikev2_vpn_protocol.h"
|
||||
#include "utils.h"
|
||||
|
||||
Ikev2Protocol::Ikev2Protocol(const QJsonObject &configuration, QObject* parent) :
|
||||
VpnProtocol(configuration, parent)
|
||||
{
|
||||
//m_configFile.setFileTemplate(QDir::tempPath() + QDir::separator() + serviceName() + ".conf");
|
||||
readIkev2Configuration(configuration);
|
||||
}
|
||||
|
||||
Ikev2Protocol::~Ikev2Protocol()
|
||||
{
|
||||
qDebug() << "IpsecProtocol::~IpsecProtocol()";
|
||||
Ikev2Protocol::stop();
|
||||
QThread::msleep(200);
|
||||
}
|
||||
|
||||
void Ikev2Protocol::stop()
|
||||
{
|
||||
#ifndef Q_OS_IOS
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
void Ikev2Protocol::readIkev2Configuration(const QJsonObject &configuration)
|
||||
{
|
||||
m_config = configuration.value(config::key_ikev2_config_data).toObject();
|
||||
}
|
||||
|
||||
|
||||
|
||||
ErrorCode Ikev2Protocol::start()
|
||||
{
|
||||
#ifndef Q_OS_IOS
|
||||
|
||||
QByteArray cert = QByteArray::fromBase64(m_config[config_key::cert].toString().toUtf8());
|
||||
qDebug() << "Ikev2Protocol::start()" << cert;
|
||||
|
||||
QTemporaryFile certFile;
|
||||
certFile.open();
|
||||
certFile.write(cert);
|
||||
certFile.close();
|
||||
|
||||
|
||||
return ErrorCode::NoError;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
32
client/protocols/ikev2_vpn_protocol.h
Normal file
32
client/protocols/ikev2_vpn_protocol.h
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
#ifndef IPSEC_PROTOCOL_H
|
||||
#define IPSEC_PROTOCOL_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QProcess>
|
||||
#include <QString>
|
||||
#include <QTemporaryFile>
|
||||
#include <QTimer>
|
||||
|
||||
#include "vpnprotocol.h"
|
||||
#include "core/ipcclient.h"
|
||||
|
||||
class Ikev2Protocol : public VpnProtocol
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit Ikev2Protocol(const QJsonObject& configuration, QObject* parent = nullptr);
|
||||
virtual ~Ikev2Protocol() override;
|
||||
|
||||
ErrorCode start() override;
|
||||
void stop() override;
|
||||
|
||||
private:
|
||||
void readIkev2Configuration(const QJsonObject &configuration);
|
||||
|
||||
|
||||
private:
|
||||
QJsonObject m_config;
|
||||
};
|
||||
|
||||
#endif // IPSEC_PROTOCOL_H
|
||||
|
|
@ -57,7 +57,7 @@ void OpenVpnProtocol::stop()
|
|||
}
|
||||
}
|
||||
|
||||
ErrorCode OpenVpnProtocol::checkAndSetupTapDriver()
|
||||
ErrorCode OpenVpnProtocol::prepare()
|
||||
{
|
||||
if (!IpcClient::Interface()) {
|
||||
return ErrorCode::AmneziaServiceConnectionFailed;
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ public:
|
|||
ErrorCode start() override;
|
||||
void stop() override;
|
||||
|
||||
ErrorCode checkAndSetupTapDriver();
|
||||
ErrorCode prepare() override;
|
||||
static QString defaultConfigFileName();
|
||||
static QString defaultConfigPath();
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ constexpr char port[] = "port";
|
|||
constexpr char local_port[] = "local_port";
|
||||
|
||||
constexpr char description[] = "description";
|
||||
constexpr char cert[] = "cert";
|
||||
|
||||
|
||||
constexpr char containers[] = "containers";
|
||||
|
|
@ -23,7 +24,6 @@ constexpr char container[] = "container";
|
|||
constexpr char defaultContainer[] = "defaultContainer";
|
||||
|
||||
constexpr char protocols[] = "protocols";
|
||||
//constexpr char protocol[] = "protocol";
|
||||
|
||||
constexpr char remote[] = "remote";
|
||||
constexpr char transport_proto[] = "transport_proto";
|
||||
|
|
|
|||
|
|
@ -4,6 +4,13 @@
|
|||
#include "vpnprotocol.h"
|
||||
#include "core/errorstrings.h"
|
||||
|
||||
#include "openvpnprotocol.h"
|
||||
#include "shadowsocksvpnprotocol.h"
|
||||
#include "openvpnovercloakprotocol.h"
|
||||
#include "wireguardprotocol.h"
|
||||
#include "ikev2_vpn_protocol.h"
|
||||
|
||||
|
||||
VpnProtocol::VpnProtocol(const QJsonObject &configuration, QObject* parent)
|
||||
: QObject(parent),
|
||||
m_connectionState(ConnectionState::Unknown),
|
||||
|
|
@ -88,6 +95,19 @@ QString VpnProtocol::vpnGateway() const
|
|||
return m_vpnGateway;
|
||||
}
|
||||
|
||||
VpnProtocol *VpnProtocol::factory(DockerContainer container, const QJsonObject& configuration)
|
||||
{
|
||||
switch (container) {
|
||||
case DockerContainer::OpenVpn: return new OpenVpnProtocol(configuration);
|
||||
case DockerContainer::Cloak: return new OpenVpnOverCloakProtocol(configuration);
|
||||
case DockerContainer::ShadowSocks: return new ShadowSocksVpnProtocol(configuration);
|
||||
case DockerContainer::WireGuard: return new WireguardProtocol(configuration);
|
||||
case DockerContainer::Ipsec: return new Ikev2Protocol(configuration);
|
||||
|
||||
default: return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
QString VpnProtocol::routeGateway() const
|
||||
{
|
||||
return m_routeGateway;
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@
|
|||
#include <QJsonObject>
|
||||
|
||||
#include "core/defs.h"
|
||||
#include "containers/containers_defs.h"
|
||||
|
||||
using namespace amnezia;
|
||||
|
||||
class QTimer;
|
||||
|
|
@ -23,6 +25,7 @@ public:
|
|||
|
||||
static QString textConnectionState(ConnectionState connectionState);
|
||||
|
||||
virtual ErrorCode prepare() { return ErrorCode::NoError; }
|
||||
|
||||
virtual bool isConnected() const;
|
||||
virtual bool isDisconnected() const;
|
||||
|
|
@ -37,6 +40,8 @@ public:
|
|||
QString routeGateway() const;
|
||||
QString vpnGateway() const;
|
||||
|
||||
static VpnProtocol* factory(amnezia::DockerContainer container, const QJsonObject &configuration);
|
||||
|
||||
signals:
|
||||
void bytesChanged(quint64 receivedBytes, quint64 sentBytes);
|
||||
void connectionStateChanged(VpnProtocol::ConnectionState state);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue