refactoring: all protocol models now work with c++ classes

This commit is contained in:
vladimir.kuznetsov 2025-07-03 10:20:01 +08:00
parent 65f60ab922
commit d766a001e3
25 changed files with 301 additions and 295 deletions

View file

@ -40,4 +40,19 @@ QJsonObject CloakProtocolConfig::toJson() const
}
return json;
}
bool CloakProtocolConfig::hasEqualServerSettings(const CloakProtocolConfig &other) const
{
if (serverProtocolConfig.port != other.serverProtocolConfig.port ||
serverProtocolConfig.cipher != other.serverProtocolConfig.cipher ||
serverProtocolConfig.site != other.serverProtocolConfig.site) {
return false;
}
return true;
}
void CloakProtocolConfig::clearClientSettings()
{
clientProtocolConfig = cloak::ClientProtocolConfig();
}

View file

@ -28,6 +28,9 @@ public:
QJsonObject toJson() const override;
bool hasEqualServerSettings(const CloakProtocolConfig &other) const;
void clearClientSettings();
cloak::ServerProtocolConfig serverProtocolConfig;
cloak::ClientProtocolConfig clientProtocolConfig;
};

View file

@ -1,20 +1,22 @@
#include "openvpnProtocolConfig.h"
#include <QJsonDocument>
#include "protocols/protocols_defs.h"
#include <QJsonDocument>
using namespace amnezia;
OpenVpnProtocolConfig::OpenVpnProtocolConfig(const QJsonObject &protocolConfigObject, const QString &protocolName) : ProtocolConfig(protocolName)
OpenVpnProtocolConfig::OpenVpnProtocolConfig(const QJsonObject &protocolConfigObject, const QString &protocolName)
: ProtocolConfig(protocolName)
{
serverProtocolConfig.subnetAddress = protocolConfigObject.value(config_key::subnet_address).toString();
serverProtocolConfig.transportProto = protocolConfigObject.value(config_key::transport_proto).toString();
serverProtocolConfig.port = protocolConfigObject.value(config_key::port).toString();
serverProtocolConfig.ncpDisable = protocolConfigObject.value(config_key::ncp_disable).toString();
serverProtocolConfig.ncpDisable = protocolConfigObject.value(config_key::ncp_disable).toBool(protocols::openvpn::defaultNcpDisable);
serverProtocolConfig.hash = protocolConfigObject.value(config_key::hash).toString();
serverProtocolConfig.cipher = protocolConfigObject.value(config_key::cipher).toString();
serverProtocolConfig.tlsAuth = protocolConfigObject.value(config_key::tls_auth).toString();
serverProtocolConfig.blockOutsideDns = protocolConfigObject.value(config_key::block_outside_dns).toString();
serverProtocolConfig.tlsAuth = protocolConfigObject.value(config_key::tls_auth).toBool(protocols::openvpn::defaultTlsAuth);
serverProtocolConfig.blockOutsideDns =
protocolConfigObject.value(config_key::block_outside_dns).toBool(protocols::openvpn::defaultBlockOutsideDns);
serverProtocolConfig.additionalClientConfig = protocolConfigObject.value(config_key::additional_client_config).toString();
serverProtocolConfig.additionalServerConfig = protocolConfigObject.value(config_key::additional_server_config).toString();
@ -42,21 +44,15 @@ QJsonObject OpenVpnProtocolConfig::toJson() const
if (!serverProtocolConfig.port.isEmpty()) {
json[config_key::port] = serverProtocolConfig.port;
}
if (!serverProtocolConfig.ncpDisable.isEmpty()) {
json[config_key::ncp_disable] = serverProtocolConfig.ncpDisable;
}
json[config_key::ncp_disable] = serverProtocolConfig.ncpDisable;
if (!serverProtocolConfig.hash.isEmpty()) {
json[config_key::hash] = serverProtocolConfig.hash;
}
if (!serverProtocolConfig.cipher.isEmpty()) {
json[config_key::cipher] = serverProtocolConfig.cipher;
}
if (!serverProtocolConfig.tlsAuth.isEmpty()) {
json[config_key::tls_auth] = serverProtocolConfig.tlsAuth;
}
if (!serverProtocolConfig.blockOutsideDns.isEmpty()) {
json[config_key::block_outside_dns] = serverProtocolConfig.blockOutsideDns;
}
json[config_key::tls_auth] = serverProtocolConfig.tlsAuth;
json[config_key::block_outside_dns] = serverProtocolConfig.blockOutsideDns;
if (!serverProtocolConfig.additionalClientConfig.isEmpty()) {
json[config_key::additional_client_config] = serverProtocolConfig.additionalClientConfig;
}
@ -80,4 +76,25 @@ QJsonObject OpenVpnProtocolConfig::toJson() const
}
return json;
}
}
bool OpenVpnProtocolConfig::hasEqualServerSettings(const OpenVpnProtocolConfig &other) const
{
if (serverProtocolConfig.subnetAddress != other.serverProtocolConfig.subnetAddress
|| serverProtocolConfig.transportProto != other.serverProtocolConfig.transportProto
|| serverProtocolConfig.port != other.serverProtocolConfig.port
|| serverProtocolConfig.ncpDisable != other.serverProtocolConfig.ncpDisable
|| serverProtocolConfig.hash != other.serverProtocolConfig.hash || serverProtocolConfig.cipher != other.serverProtocolConfig.cipher
|| serverProtocolConfig.tlsAuth != other.serverProtocolConfig.tlsAuth
|| serverProtocolConfig.blockOutsideDns != other.serverProtocolConfig.blockOutsideDns
|| serverProtocolConfig.additionalClientConfig != other.serverProtocolConfig.additionalClientConfig
|| serverProtocolConfig.additionalServerConfig != other.serverProtocolConfig.additionalServerConfig) {
return false;
}
return true;
}
void OpenVpnProtocolConfig::clearClientSettings()
{
clientProtocolConfig = openvpn::ClientProtocolConfig();
}

View file

@ -13,11 +13,11 @@ namespace openvpn
QString subnetAddress;
QString transportProto;
QString port;
QString ncpDisable;
bool ncpDisable;
QString hash;
QString cipher;
QString tlsAuth;
QString blockOutsideDns;
bool tlsAuth;
bool blockOutsideDns;
QString additionalClientConfig;
QString additionalServerConfig;
};
@ -39,6 +39,9 @@ public:
QJsonObject toJson() const override;
bool hasEqualServerSettings(const OpenVpnProtocolConfig &other) const;
void clearClientSettings();
openvpn::ServerProtocolConfig serverProtocolConfig;
openvpn::ClientProtocolConfig clientProtocolConfig;
};

View file

@ -5,6 +5,7 @@
#include "core/models/protocols/openvpnProtocolConfig.h"
#include "core/models/protocols/protocolConfig.h"
#include "core/models/protocols/shadowsocksProtocolConfig.h"
#include "core/models/protocols/wireguardProtocolConfig.h"
#include "core/models/protocols/xrayProtocolConfig.h"
#include "protocols/protocols_defs.h"
@ -38,27 +39,27 @@ bool ProtocolConfig::isServerSettingsEqual(const QSharedPointer<ProtocolConfig>
case Proto::OpenVpn: {
auto thisConfig = qSharedPointerCast<OpenVpnProtocolConfig>(QSharedPointer<ProtocolConfig>(this));
auto otherConfig = qSharedPointerCast<OpenVpnProtocolConfig>(other);
return false;
return thisConfig->hasEqualServerSettings(*otherConfig.data());
}
case Proto::WireGuard: {
auto thisConfig = qSharedPointerCast<WireGuardProtocolConfig>(QSharedPointer<ProtocolConfig>(this));
auto otherConfig = qSharedPointerCast<WireGuardProtocolConfig>(other);
return false;
return thisConfig->hasEqualServerSettings(*otherConfig.data());
}
case Proto::ShadowSocks: {
auto thisConfig = qSharedPointerCast<ShadowsocksProtocolConfig>(QSharedPointer<ProtocolConfig>(this));
auto otherConfig = qSharedPointerCast<ShadowsocksProtocolConfig>(other);
return false;
return thisConfig->hasEqualServerSettings(*otherConfig.data());
}
case Proto::Cloak: {
auto thisConfig = qSharedPointerCast<CloakProtocolConfig>(QSharedPointer<ProtocolConfig>(this));
auto otherConfig = qSharedPointerCast<CloakProtocolConfig>(other);
return false;
return thisConfig->hasEqualServerSettings(*otherConfig.data());
}
case Proto::Xray: {
auto thisConfig = qSharedPointerCast<XrayProtocolConfig>(QSharedPointer<ProtocolConfig>(this));
auto otherConfig = qSharedPointerCast<XrayProtocolConfig>(other);
return false;
return thisConfig->hasEqualServerSettings(*otherConfig.data());
}
case Proto::Awg: {
auto thisConfig = qSharedPointerCast<AwgProtocolConfig>(QSharedPointer<ProtocolConfig>(this));

View file

@ -36,4 +36,18 @@ QJsonObject ShadowsocksProtocolConfig::toJson() const
}
return json;
}
bool ShadowsocksProtocolConfig::hasEqualServerSettings(const ShadowsocksProtocolConfig &other) const
{
if (serverProtocolConfig.port != other.serverProtocolConfig.port ||
serverProtocolConfig.cipher != other.serverProtocolConfig.cipher) {
return false;
}
return true;
}
void ShadowsocksProtocolConfig::clearClientSettings()
{
clientProtocolConfig = shadowsocks::ClientProtocolConfig();
}

View file

@ -27,6 +27,9 @@ public:
QJsonObject toJson() const override;
bool hasEqualServerSettings(const ShadowsocksProtocolConfig &other) const;
void clearClientSettings();
shadowsocks::ServerProtocolConfig serverProtocolConfig;
shadowsocks::ClientProtocolConfig clientProtocolConfig;
};

View file

@ -118,3 +118,17 @@ QJsonObject WireGuardProtocolConfig::toJson() const
return json;
}
bool WireGuardProtocolConfig::hasEqualServerSettings(const WireGuardProtocolConfig &other) const
{
if (serverProtocolConfig.subnetAddress != other.serverProtocolConfig.subnetAddress ||
serverProtocolConfig.port != other.serverProtocolConfig.port) {
return false;
}
return true;
}
void WireGuardProtocolConfig::clearClientSettings()
{
clientProtocolConfig = wireguard::ClientProtocolConfig();
}

View file

@ -51,6 +51,9 @@ public:
QJsonObject toJson() const override;
bool hasEqualServerSettings(const WireGuardProtocolConfig &other) const;
void clearClientSettings();
wireguard::ServerProtocolConfig serverProtocolConfig;
wireguard::ClientProtocolConfig clientProtocolConfig;
};

View file

@ -40,4 +40,19 @@ QJsonObject XrayProtocolConfig::toJson() const
}
return json;
}
bool XrayProtocolConfig::hasEqualServerSettings(const XrayProtocolConfig &other) const
{
if (serverProtocolConfig.site != other.serverProtocolConfig.site ||
serverProtocolConfig.port != other.serverProtocolConfig.port ||
serverProtocolConfig.transportProto != other.serverProtocolConfig.transportProto) {
return false;
}
return true;
}
void XrayProtocolConfig::clearClientSettings()
{
clientProtocolConfig = xray::ClientProtocolConfig();
}

View file

@ -28,6 +28,9 @@ public:
QJsonObject toJson() const override;
bool hasEqualServerSettings(const XrayProtocolConfig &other) const;
void clearClientSettings();
xray::ServerProtocolConfig serverProtocolConfig;
xray::ClientProtocolConfig clientProtocolConfig;
};