refactoring: removed s3 s4 fileds from ui part

This commit is contained in:
vladimir.kuznetsov 2025-07-06 21:32:15 +08:00
parent 7a8d8d5c7f
commit 90aa63d9c9
16 changed files with 375 additions and 645 deletions

View file

@ -36,21 +36,24 @@ QString AwgConfigurator::createConfig(const ServerCredentials &credentials, Dock
jsonConfig[config_key::junkPacketMaxSize] = configMap.value(config_key::junkPacketMaxSize); jsonConfig[config_key::junkPacketMaxSize] = configMap.value(config_key::junkPacketMaxSize);
jsonConfig[config_key::initPacketJunkSize] = configMap.value(config_key::initPacketJunkSize); jsonConfig[config_key::initPacketJunkSize] = configMap.value(config_key::initPacketJunkSize);
jsonConfig[config_key::responsePacketJunkSize] = configMap.value(config_key::responsePacketJunkSize); jsonConfig[config_key::responsePacketJunkSize] = configMap.value(config_key::responsePacketJunkSize);
jsonConfig[config_key::cookieReplyPacketJunkSize] = configMap.value(config_key::cookieReplyPacketJunkSize);
jsonConfig[config_key::transportPacketJunkSize] = configMap.value(config_key::transportPacketJunkSize);
jsonConfig[config_key::initPacketMagicHeader] = configMap.value(config_key::initPacketMagicHeader); jsonConfig[config_key::initPacketMagicHeader] = configMap.value(config_key::initPacketMagicHeader);
jsonConfig[config_key::responsePacketMagicHeader] = configMap.value(config_key::responsePacketMagicHeader); jsonConfig[config_key::responsePacketMagicHeader] = configMap.value(config_key::responsePacketMagicHeader);
jsonConfig[config_key::underloadPacketMagicHeader] = configMap.value(config_key::underloadPacketMagicHeader); jsonConfig[config_key::underloadPacketMagicHeader] = configMap.value(config_key::underloadPacketMagicHeader);
jsonConfig[config_key::transportPacketMagicHeader] = configMap.value(config_key::transportPacketMagicHeader); jsonConfig[config_key::transportPacketMagicHeader] = configMap.value(config_key::transportPacketMagicHeader);
jsonConfig[config_key::specialJunk1] = configMap.value(amnezia::config_key::specialJunk1);
jsonConfig[config_key::specialJunk2] = configMap.value(amnezia::config_key::specialJunk2); // jsonConfig[config_key::cookieReplyPacketJunkSize] = configMap.value(config_key::cookieReplyPacketJunkSize);
jsonConfig[config_key::specialJunk3] = configMap.value(amnezia::config_key::specialJunk3); // jsonConfig[config_key::transportPacketJunkSize] = configMap.value(config_key::transportPacketJunkSize);
jsonConfig[config_key::specialJunk4] = configMap.value(amnezia::config_key::specialJunk4);
jsonConfig[config_key::specialJunk5] = configMap.value(amnezia::config_key::specialJunk5); // jsonConfig[config_key::specialJunk1] = configMap.value(amnezia::config_key::specialJunk1);
jsonConfig[config_key::controlledJunk1] = configMap.value(amnezia::config_key::controlledJunk1); // jsonConfig[config_key::specialJunk2] = configMap.value(amnezia::config_key::specialJunk2);
jsonConfig[config_key::controlledJunk2] = configMap.value(amnezia::config_key::controlledJunk2); // jsonConfig[config_key::specialJunk3] = configMap.value(amnezia::config_key::specialJunk3);
jsonConfig[config_key::controlledJunk3] = configMap.value(amnezia::config_key::controlledJunk3); // jsonConfig[config_key::specialJunk4] = configMap.value(amnezia::config_key::specialJunk4);
jsonConfig[config_key::specialHandshakeTimeout] = configMap.value(amnezia::config_key::specialHandshakeTimeout); // jsonConfig[config_key::specialJunk5] = configMap.value(amnezia::config_key::specialJunk5);
// jsonConfig[config_key::controlledJunk1] = configMap.value(amnezia::config_key::controlledJunk1);
// jsonConfig[config_key::controlledJunk2] = configMap.value(amnezia::config_key::controlledJunk2);
// jsonConfig[config_key::controlledJunk3] = configMap.value(amnezia::config_key::controlledJunk3);
// jsonConfig[config_key::specialHandshakeTimeout] = configMap.value(amnezia::config_key::specialHandshakeTimeout);
jsonConfig[config_key::mtu] = jsonConfig[config_key::mtu] =
containerConfig.value(ProtocolProps::protoToString(Proto::Awg)).toObject().value(config_key::mtu).toString(protocols::awg::defaultMtu); containerConfig.value(ProtocolProps::protoToString(Proto::Awg)).toObject().value(config_key::mtu).toString(protocols::awg::defaultMtu);

View file

@ -360,10 +360,6 @@ bool ServerController::isReinstallContainerRequired(DockerContainer container, c
!= newProtoConfig.value(config_key::initPacketJunkSize).toString(protocols::awg::defaultInitPacketJunkSize)) != newProtoConfig.value(config_key::initPacketJunkSize).toString(protocols::awg::defaultInitPacketJunkSize))
|| (oldProtoConfig.value(config_key::responsePacketJunkSize).toString(protocols::awg::defaultResponsePacketJunkSize) || (oldProtoConfig.value(config_key::responsePacketJunkSize).toString(protocols::awg::defaultResponsePacketJunkSize)
!= newProtoConfig.value(config_key::responsePacketJunkSize).toString(protocols::awg::defaultResponsePacketJunkSize)) != newProtoConfig.value(config_key::responsePacketJunkSize).toString(protocols::awg::defaultResponsePacketJunkSize))
|| (oldProtoConfig.value(config_key::cookieReplyPacketJunkSize).toString(protocols::awg::defaultCookieReplyPacketJunkSize)
!= newProtoConfig.value(config_key::cookieReplyPacketJunkSize).toString(protocols::awg::defaultCookieReplyPacketJunkSize))
|| (oldProtoConfig.value(config_key::transportPacketJunkSize).toString(protocols::awg::defaultTransportPacketJunkSize)
!= newProtoConfig.value(config_key::transportPacketJunkSize).toString(protocols::awg::defaultTransportPacketJunkSize))
|| (oldProtoConfig.value(config_key::initPacketMagicHeader).toString(protocols::awg::defaultInitPacketMagicHeader) || (oldProtoConfig.value(config_key::initPacketMagicHeader).toString(protocols::awg::defaultInitPacketMagicHeader)
!= newProtoConfig.value(config_key::initPacketMagicHeader).toString(protocols::awg::defaultInitPacketMagicHeader)) != newProtoConfig.value(config_key::initPacketMagicHeader).toString(protocols::awg::defaultInitPacketMagicHeader))
|| (oldProtoConfig.value(config_key::responsePacketMagicHeader).toString(protocols::awg::defaultResponsePacketMagicHeader) || (oldProtoConfig.value(config_key::responsePacketMagicHeader).toString(protocols::awg::defaultResponsePacketMagicHeader)
@ -372,24 +368,10 @@ bool ServerController::isReinstallContainerRequired(DockerContainer container, c
!= newProtoConfig.value(config_key::underloadPacketMagicHeader).toString(protocols::awg::defaultUnderloadPacketMagicHeader)) != newProtoConfig.value(config_key::underloadPacketMagicHeader).toString(protocols::awg::defaultUnderloadPacketMagicHeader))
|| (oldProtoConfig.value(config_key::transportPacketMagicHeader).toString(protocols::awg::defaultTransportPacketMagicHeader)) || (oldProtoConfig.value(config_key::transportPacketMagicHeader).toString(protocols::awg::defaultTransportPacketMagicHeader))
!= newProtoConfig.value(config_key::transportPacketMagicHeader).toString(protocols::awg::defaultTransportPacketMagicHeader)) != newProtoConfig.value(config_key::transportPacketMagicHeader).toString(protocols::awg::defaultTransportPacketMagicHeader))
// || (oldProtoConfig.value(config_key::specialJunk1).toString(protocols::awg::defaultSpecialJunk1)) // || (oldProtoConfig.value(config_key::cookieReplyPacketJunkSize).toString(protocols::awg::defaultCookieReplyPacketJunkSize)
// != newProtoConfig.value(config_key::specialJunk1).toString(protocols::awg::defaultSpecialJunk1) // != newProtoConfig.value(config_key::cookieReplyPacketJunkSize).toString(protocols::awg::defaultCookieReplyPacketJunkSize))
// || (oldProtoConfig.value(config_key::specialJunk2).toString(protocols::awg::defaultSpecialJunk2)) // || (oldProtoConfig.value(config_key::transportPacketJunkSize).toString(protocols::awg::defaultTransportPacketJunkSize)
// != newProtoConfig.value(config_key::specialJunk2).toString(protocols::awg::defaultSpecialJunk2) // != newProtoConfig.value(config_key::transportPacketJunkSize).toString(protocols::awg::defaultTransportPacketJunkSize))
// || (oldProtoConfig.value(config_key::specialJunk3).toString(protocols::awg::defaultSpecialJunk3))
// != newProtoConfig.value(config_key::specialJunk3).toString(protocols::awg::defaultSpecialJunk3)
// || (oldProtoConfig.value(config_key::specialJunk4).toString(protocols::awg::defaultSpecialJunk4))
// != newProtoConfig.value(config_key::specialJunk4).toString(protocols::awg::defaultSpecialJunk4)
// || (oldProtoConfig.value(config_key::specialJunk5).toString(protocols::awg::defaultSpecialJunk5))
// != newProtoConfig.value(config_key::specialJunk5).toString(protocols::awg::defaultSpecialJunk5)
// || (oldProtoConfig.value(config_key::controlledJunk1).toString(protocols::awg::defaultControlledJunk1))
// != newProtoConfig.value(config_key::controlledJunk1).toString(protocols::awg::defaultControlledJunk1)
// || (oldProtoConfig.value(config_key::controlledJunk2).toString(protocols::awg::defaultControlledJunk2))
// != newProtoConfig.value(config_key::controlledJunk2).toString(protocols::awg::defaultControlledJunk2)
// || (oldProtoConfig.value(config_key::controlledJunk3).toString(protocols::awg::defaultControlledJunk3))
// != newProtoConfig.value(config_key::controlledJunk3).toString(protocols::awg::defaultControlledJunk3)
// || (oldProtoConfig.value(config_key::specialHandshakeTimeout).toString(protocols::awg::defaultSpecialHandshakeTimeout))
// != newProtoConfig.value(config_key::specialHandshakeTimeout).toString(protocols::awg::defaultSpecialHandshakeTimeout))
return true; return true;
} }
@ -659,21 +641,13 @@ ServerController::Vars ServerController::genVarsForScript(const ServerCredential
vars.append({ { "$JUNK_PACKET_MAX_SIZE", amneziaWireguarConfig.value(config_key::junkPacketMaxSize).toString() } }); vars.append({ { "$JUNK_PACKET_MAX_SIZE", amneziaWireguarConfig.value(config_key::junkPacketMaxSize).toString() } });
vars.append({ { "$INIT_PACKET_JUNK_SIZE", amneziaWireguarConfig.value(config_key::initPacketJunkSize).toString() } }); vars.append({ { "$INIT_PACKET_JUNK_SIZE", amneziaWireguarConfig.value(config_key::initPacketJunkSize).toString() } });
vars.append({ { "$RESPONSE_PACKET_JUNK_SIZE", amneziaWireguarConfig.value(config_key::responsePacketJunkSize).toString() } }); vars.append({ { "$RESPONSE_PACKET_JUNK_SIZE", amneziaWireguarConfig.value(config_key::responsePacketJunkSize).toString() } });
vars.append({ { "$COOKIE_REPLY_PACKET_JUNK_SIZE", amneziaWireguarConfig.value(config_key::cookieReplyPacketJunkSize).toString() } });
vars.append({ { "$TRANSPORT_PACKET_JUNK_SIZE", amneziaWireguarConfig.value(config_key::transportPacketJunkSize).toString() } });
vars.append({ { "$INIT_PACKET_MAGIC_HEADER", amneziaWireguarConfig.value(config_key::initPacketMagicHeader).toString() } }); vars.append({ { "$INIT_PACKET_MAGIC_HEADER", amneziaWireguarConfig.value(config_key::initPacketMagicHeader).toString() } });
vars.append({ { "$RESPONSE_PACKET_MAGIC_HEADER", amneziaWireguarConfig.value(config_key::responsePacketMagicHeader).toString() } }); vars.append({ { "$RESPONSE_PACKET_MAGIC_HEADER", amneziaWireguarConfig.value(config_key::responsePacketMagicHeader).toString() } });
vars.append({ { "$UNDERLOAD_PACKET_MAGIC_HEADER", amneziaWireguarConfig.value(config_key::underloadPacketMagicHeader).toString() } }); vars.append({ { "$UNDERLOAD_PACKET_MAGIC_HEADER", amneziaWireguarConfig.value(config_key::underloadPacketMagicHeader).toString() } });
vars.append({ { "$TRANSPORT_PACKET_MAGIC_HEADER", amneziaWireguarConfig.value(config_key::transportPacketMagicHeader).toString() } }); vars.append({ { "$TRANSPORT_PACKET_MAGIC_HEADER", amneziaWireguarConfig.value(config_key::transportPacketMagicHeader).toString() } });
// vars.append({ { "$SPECIAL_JUNK_1", amneziaWireguarConfig.value(config_key::specialJunk1).toString() } });
// vars.append({ { "$SPECIAL_JUNK_2", amneziaWireguarConfig.value(config_key::specialJunk2).toString() } }); vars.append({ { "$COOKIE_REPLY_PACKET_JUNK_SIZE", amneziaWireguarConfig.value(config_key::cookieReplyPacketJunkSize).toString() } });
// vars.append({ { "$SPECIAL_JUNK_3", amneziaWireguarConfig.value(config_key::specialJunk3).toString() } }); vars.append({ { "$TRANSPORT_PACKET_JUNK_SIZE", amneziaWireguarConfig.value(config_key::transportPacketJunkSize).toString() } });
// vars.append({ { "$SPECIAL_JUNK_4", amneziaWireguarConfig.value(config_key::specialJunk4).toString() } });
// vars.append({ { "$SPECIAL_JUNK_5", amneziaWireguarConfig.value(config_key::specialJunk5).toString() } });
// vars.append({ { "$CONTROLLED_JUNK_1", amneziaWireguarConfig.value(config_key::controlledJunk1).toString() } });
// vars.append({ { "$CONTROLLED_JUNK_2", amneziaWireguarConfig.value(config_key::controlledJunk2).toString() } });
// vars.append({ { "$CONTROLLED_JUNK_3", amneziaWireguarConfig.value(config_key::controlledJunk3).toString() } });
// vars.append({ { "$SPECIAL_HANDSHAKE_TIMEOUT", amneziaWireguarConfig.value(config_key::specialHandshakeTimeout).toString() } });
// Socks5 proxy vars // Socks5 proxy vars
vars.append({ { "$SOCKS5_PROXY_PORT", socks5ProxyConfig.value(config_key::port).toString(protocols::socks5Proxy::defaultPort) } }); vars.append({ { "$SOCKS5_PROXY_PORT", socks5ProxyConfig.value(config_key::port).toString(protocols::socks5Proxy::defaultPort) } });

View file

@ -138,6 +138,16 @@ bool WireguardUtilsMacos::addInterface(const InterfaceConfig& config) {
out << "h4=" << config.m_transportPacketMagicHeader << "\n"; out << "h4=" << config.m_transportPacketMagicHeader << "\n";
} }
for (const QString& key : config.m_specialJunk.keys()) {
out << key.toLower() << "=" << config.m_specialJunk.value(key) << "\n";
}
for (const QString& key : config.m_controlledJunk.keys()) {
out << key.toLower() << "=" << config.m_controlledJunk.value(key) << "\n";
}
if (!config.m_specialHandshakeTimeout.isEmpty()) {
out << "itime=" << config.m_specialHandshakeTimeout << "\n";
}
int err = uapiErrno(uapiCommand(message)); int err = uapiErrno(uapiCommand(message));
if (err != 0) { if (err != 0) {
logger.error() << "Interface configuration failed:" << strerror(err); logger.error() << "Interface configuration failed:" << strerror(err);

View file

@ -242,7 +242,7 @@ namespace amnezia
constexpr char defaultControlledJunk1[] = ""; constexpr char defaultControlledJunk1[] = "";
constexpr char defaultControlledJunk2[] = ""; constexpr char defaultControlledJunk2[] = "";
constexpr char defaultControlledJunk3[] = ""; constexpr char defaultControlledJunk3[] = "";
constexpr char defaultSpecialHandshakeTimeout[] = "0"; constexpr char defaultSpecialHandshakeTimeout[] = "";
} }
namespace socks5Proxy namespace socks5Proxy

View file

@ -239,6 +239,7 @@
<file>ui/qml/Components/ApiPremV1MigrationDrawer.qml</file> <file>ui/qml/Components/ApiPremV1MigrationDrawer.qml</file>
<file>ui/qml/Components/ApiPremV1SubListDrawer.qml</file> <file>ui/qml/Components/ApiPremV1SubListDrawer.qml</file>
<file>ui/qml/Components/OtpCodeDrawer.qml</file> <file>ui/qml/Components/OtpCodeDrawer.qml</file>
<file>ui/qml/Components/AwgTextField.qml</file>
</qresource> </qresource>
<qresource prefix="/countriesFlags"> <qresource prefix="/countriesFlags">
<file>images/flagKit/ZW.svg</file> <file>images/flagKit/ZW.svg</file>

View file

@ -1,4 +1,4 @@
FROM marko1777/awg:latest FROM amneziavpn/amnezia-wg:latest
LABEL maintainer="AmneziaVPN" LABEL maintainer="AmneziaVPN"

View file

@ -19,8 +19,6 @@ Jmin = $JUNK_PACKET_MIN_SIZE
Jmax = $JUNK_PACKET_MAX_SIZE Jmax = $JUNK_PACKET_MAX_SIZE
S1 = $INIT_PACKET_JUNK_SIZE S1 = $INIT_PACKET_JUNK_SIZE
S2 = $RESPONSE_PACKET_JUNK_SIZE S2 = $RESPONSE_PACKET_JUNK_SIZE
S3 = $COOKIE_REPLY_PACKET_JUNK_SIZE
S4 = $TRANSPORT_PACKET_JUNK_SIZE
H1 = $INIT_PACKET_MAGIC_HEADER H1 = $INIT_PACKET_MAGIC_HEADER
H2 = $RESPONSE_PACKET_MAGIC_HEADER H2 = $RESPONSE_PACKET_MAGIC_HEADER
H3 = $UNDERLOAD_PACKET_MAGIC_HEADER H3 = $UNDERLOAD_PACKET_MAGIC_HEADER

View file

@ -7,8 +7,6 @@ Jmin = $JUNK_PACKET_MIN_SIZE
Jmax = $JUNK_PACKET_MAX_SIZE Jmax = $JUNK_PACKET_MAX_SIZE
S1 = $INIT_PACKET_JUNK_SIZE S1 = $INIT_PACKET_JUNK_SIZE
S2 = $RESPONSE_PACKET_JUNK_SIZE S2 = $RESPONSE_PACKET_JUNK_SIZE
S3 = $COOKIE_REPLY_PACKET_JUNK_SIZE
S4 = $TRANSPORT_PACKET_JUNK_SIZE
H1 = $INIT_PACKET_MAGIC_HEADER H1 = $INIT_PACKET_MAGIC_HEADER
H2 = $RESPONSE_PACKET_MAGIC_HEADER H2 = $RESPONSE_PACKET_MAGIC_HEADER
H3 = $UNDERLOAD_PACKET_MAGIC_HEADER H3 = $UNDERLOAD_PACKET_MAGIC_HEADER

View file

@ -162,6 +162,9 @@ namespace
auto serverProtocolConfig = container.value(containerName).toObject(); auto serverProtocolConfig = container.value(containerName).toObject();
auto clientProtocolConfig = auto clientProtocolConfig =
QJsonDocument::fromJson(serverProtocolConfig.value(config_key::last_config).toString().toUtf8()).object(); QJsonDocument::fromJson(serverProtocolConfig.value(config_key::last_config).toString().toUtf8()).object();
//TODO looks like this block can be removed after v1 configs EOL
serverProtocolConfig[config_key::junkPacketCount] = clientProtocolConfig.value(config_key::junkPacketCount); serverProtocolConfig[config_key::junkPacketCount] = clientProtocolConfig.value(config_key::junkPacketCount);
serverProtocolConfig[config_key::junkPacketMinSize] = clientProtocolConfig.value(config_key::junkPacketMinSize); serverProtocolConfig[config_key::junkPacketMinSize] = clientProtocolConfig.value(config_key::junkPacketMinSize);
serverProtocolConfig[config_key::junkPacketMaxSize] = clientProtocolConfig.value(config_key::junkPacketMaxSize); serverProtocolConfig[config_key::junkPacketMaxSize] = clientProtocolConfig.value(config_key::junkPacketMaxSize);
@ -184,6 +187,8 @@ namespace
serverProtocolConfig[config_key::controlledJunk3] = clientProtocolConfig.value(config_key::controlledJunk3); serverProtocolConfig[config_key::controlledJunk3] = clientProtocolConfig.value(config_key::controlledJunk3);
serverProtocolConfig[config_key::specialHandshakeTimeout] = clientProtocolConfig.value(config_key::specialHandshakeTimeout); serverProtocolConfig[config_key::specialHandshakeTimeout] = clientProtocolConfig.value(config_key::specialHandshakeTimeout);
//
container[containerName] = serverProtocolConfig; container[containerName] = serverProtocolConfig;
containers.replace(0, container); containers.replace(0, container);
newServerConfig[config_key::containers] = containers; newServerConfig[config_key::containers] = containers;

View file

@ -52,8 +52,7 @@ namespace
|| (config.contains(amneziaConfigPatternHostName) && config.contains(amneziaConfigPatternUserName) || (config.contains(amneziaConfigPatternHostName) && config.contains(amneziaConfigPatternUserName)
&& config.contains(amneziaConfigPatternPassword))) { && config.contains(amneziaConfigPatternPassword))) {
return ConfigTypes::Amnezia; return ConfigTypes::Amnezia;
} else if (config.contains(wireguardConfigPatternSectionInterface) } else if (config.contains(wireguardConfigPatternSectionInterface) && config.contains(wireguardConfigPatternSectionPeer)) {
&& config.contains(wireguardConfigPatternSectionPeer)) {
return ConfigTypes::WireGuard; return ConfigTypes::WireGuard;
} else if ((config.contains(xrayConfigPatternInbound)) && (config.contains(xrayConfigPatternOutbound))) { } else if ((config.contains(xrayConfigPatternInbound)) && (config.contains(xrayConfigPatternOutbound))) {
return ConfigTypes::Xray; return ConfigTypes::Xray;
@ -69,8 +68,7 @@ namespace
#endif #endif
} // namespace } // namespace
ImportController::ImportController(const QSharedPointer<ServersModel> &serversModel, ImportController::ImportController(const QSharedPointer<ServersModel> &serversModel, const QSharedPointer<ContainersModel> &containersModel,
const QSharedPointer<ContainersModel> &containersModel,
const std::shared_ptr<Settings> &settings, QObject *parent) const std::shared_ptr<Settings> &settings, QObject *parent)
: QObject(parent), m_serversModel(serversModel), m_containersModel(containersModel), m_settings(settings) : QObject(parent), m_serversModel(serversModel), m_containersModel(containersModel), m_settings(settings)
{ {
@ -105,42 +103,40 @@ bool ImportController::extractConfigFromData(QString data)
if (config.startsWith("vless://")) { if (config.startsWith("vless://")) {
m_configType = ConfigTypes::Xray; m_configType = ConfigTypes::Xray;
m_config = extractXrayConfig(Utils::JsonToString(serialization::vless::Deserialize(config, &prefix, &errormsg), m_config = extractXrayConfig(
QJsonDocument::JsonFormat::Compact), Utils::JsonToString(serialization::vless::Deserialize(config, &prefix, &errormsg), QJsonDocument::JsonFormat::Compact),
prefix); prefix);
return m_config.empty() ? false : true; return m_config.empty() ? false : true;
} }
if (config.startsWith("vmess://") && config.contains("@")) { if (config.startsWith("vmess://") && config.contains("@")) {
m_configType = ConfigTypes::Xray; m_configType = ConfigTypes::Xray;
m_config = m_config = extractXrayConfig(
extractXrayConfig(Utils::JsonToString(serialization::vmess_new::Deserialize(config, &prefix, &errormsg), Utils::JsonToString(serialization::vmess_new::Deserialize(config, &prefix, &errormsg), QJsonDocument::JsonFormat::Compact),
QJsonDocument::JsonFormat::Compact),
prefix); prefix);
return m_config.empty() ? false : true; return m_config.empty() ? false : true;
} }
if (config.startsWith("vmess://")) { if (config.startsWith("vmess://")) {
m_configType = ConfigTypes::Xray; m_configType = ConfigTypes::Xray;
m_config = extractXrayConfig(Utils::JsonToString(serialization::vmess::Deserialize(config, &prefix, &errormsg), m_config = extractXrayConfig(
QJsonDocument::JsonFormat::Compact), Utils::JsonToString(serialization::vmess::Deserialize(config, &prefix, &errormsg), QJsonDocument::JsonFormat::Compact),
prefix); prefix);
return m_config.empty() ? false : true; return m_config.empty() ? false : true;
} }
if (config.startsWith("trojan://")) { if (config.startsWith("trojan://")) {
m_configType = ConfigTypes::Xray; m_configType = ConfigTypes::Xray;
m_config = extractXrayConfig(Utils::JsonToString(serialization::trojan::Deserialize(config, &prefix, &errormsg), m_config = extractXrayConfig(
QJsonDocument::JsonFormat::Compact), Utils::JsonToString(serialization::trojan::Deserialize(config, &prefix, &errormsg), QJsonDocument::JsonFormat::Compact),
prefix); prefix);
return m_config.empty() ? false : true; return m_config.empty() ? false : true;
} }
if (config.startsWith("ss://") && !config.contains("plugin=")) { if (config.startsWith("ss://") && !config.contains("plugin=")) {
m_configType = ConfigTypes::ShadowSocks; m_configType = ConfigTypes::ShadowSocks;
m_config = extractXrayConfig(Utils::JsonToString(serialization::ss::Deserialize(config, &prefix, &errormsg), m_config = extractXrayConfig(
QJsonDocument::JsonFormat::Compact), Utils::JsonToString(serialization::ss::Deserialize(config, &prefix, &errormsg), QJsonDocument::JsonFormat::Compact), prefix);
prefix);
return m_config.empty() ? false : true; return m_config.empty() ? false : true;
} }
@ -158,8 +154,7 @@ bool ImportController::extractConfigFromData(QString data)
m_configType = checkConfigFormat(config); m_configType = checkConfigFormat(config);
if (m_configType == ConfigTypes::Invalid) { if (m_configType == ConfigTypes::Invalid) {
config.replace("vpn://", ""); config.replace("vpn://", "");
QByteArray ba = QByteArray ba = QByteArray::fromBase64(config.toUtf8(), QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals);
QByteArray::fromBase64(config.toUtf8(), QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals);
QByteArray baUncompressed = qUncompress(ba); QByteArray baUncompressed = qUncompress(ba);
if (!baUncompressed.isEmpty()) { if (!baUncompressed.isEmpty()) {
ba = baUncompressed; ba = baUncompressed;
@ -276,10 +271,8 @@ void ImportController::processNativeWireGuardConfig()
auto containers = m_config.value(config_key::containers).toArray(); auto containers = m_config.value(config_key::containers).toArray();
if (!containers.isEmpty()) { if (!containers.isEmpty()) {
auto container = containers.at(0).toObject(); auto container = containers.at(0).toObject();
auto serverProtocolConfig = auto serverProtocolConfig = container.value(ContainerProps::containerTypeToString(DockerContainer::WireGuard)).toObject();
container.value(ContainerProps::containerTypeToString(DockerContainer::WireGuard)).toObject(); auto clientProtocolConfig = QJsonDocument::fromJson(serverProtocolConfig.value(config_key::last_config).toString().toUtf8()).object();
auto clientProtocolConfig =
QJsonDocument::fromJson(serverProtocolConfig.value(config_key::last_config).toString().toUtf8()).object();
QString junkPacketCount = QString::number(QRandomGenerator::global()->bounded(2, 5)); QString junkPacketCount = QString::number(QRandomGenerator::global()->bounded(2, 5));
QString junkPacketMinSize = QString::number(10); QString junkPacketMinSize = QString::number(10);
@ -289,21 +282,23 @@ void ImportController::processNativeWireGuardConfig()
clientProtocolConfig[config_key::junkPacketMaxSize] = junkPacketMaxSize; clientProtocolConfig[config_key::junkPacketMaxSize] = junkPacketMaxSize;
clientProtocolConfig[config_key::initPacketJunkSize] = "0"; clientProtocolConfig[config_key::initPacketJunkSize] = "0";
clientProtocolConfig[config_key::responsePacketJunkSize] = "0"; clientProtocolConfig[config_key::responsePacketJunkSize] = "0";
clientProtocolConfig[config_key::cookieReplyPacketJunkSize] = "0";
clientProtocolConfig[config_key::transportPacketJunkSize] = "0";
clientProtocolConfig[config_key::initPacketMagicHeader] = "1"; clientProtocolConfig[config_key::initPacketMagicHeader] = "1";
clientProtocolConfig[config_key::responsePacketMagicHeader] = "2"; clientProtocolConfig[config_key::responsePacketMagicHeader] = "2";
clientProtocolConfig[config_key::underloadPacketMagicHeader] = "3"; clientProtocolConfig[config_key::underloadPacketMagicHeader] = "3";
clientProtocolConfig[config_key::transportPacketMagicHeader] = "4"; clientProtocolConfig[config_key::transportPacketMagicHeader] = "4";
clientProtocolConfig[config_key::specialJunk1] = "";
clientProtocolConfig[config_key::specialJunk2] = ""; // clientProtocolConfig[config_key::cookieReplyPacketJunkSize] = "0";
clientProtocolConfig[config_key::specialJunk3] = ""; // clientProtocolConfig[config_key::transportPacketJunkSize] = "0";
clientProtocolConfig[config_key::specialJunk4] = "";
clientProtocolConfig[config_key::specialJunk5] = ""; // clientProtocolConfig[config_key::specialJunk1] = "";
clientProtocolConfig[config_key::controlledJunk1] = ""; // clientProtocolConfig[config_key::specialJunk2] = "";
clientProtocolConfig[config_key::controlledJunk2] = ""; // clientProtocolConfig[config_key::specialJunk3] = "";
clientProtocolConfig[config_key::controlledJunk3] = ""; // clientProtocolConfig[config_key::specialJunk4] = "";
clientProtocolConfig[config_key::specialHandshakeTimeout] = "0"; // clientProtocolConfig[config_key::specialJunk5] = "";
// clientProtocolConfig[config_key::controlledJunk1] = "";
// clientProtocolConfig[config_key::controlledJunk2] = "";
// clientProtocolConfig[config_key::controlledJunk3] = "";
// clientProtocolConfig[config_key::specialHandshakeTimeout] = "0";
clientProtocolConfig[config_key::isObfuscationEnabled] = true; clientProtocolConfig[config_key::isObfuscationEnabled] = true;
@ -427,8 +422,7 @@ QJsonObject ImportController::extractWireGuardConfig(const QString &data)
lastConfig[config_key::hostName] = hostName; lastConfig[config_key::hostName] = hostName;
lastConfig[config_key::port] = port.toInt(); lastConfig[config_key::port] = port.toInt();
if (!configMap.value("PrivateKey").isEmpty() && !configMap.value("Address").isEmpty() if (!configMap.value("PrivateKey").isEmpty() && !configMap.value("Address").isEmpty() && !configMap.value("PublicKey").isEmpty()) {
&& !configMap.value("PublicKey").isEmpty()) {
lastConfig[config_key::client_priv_key] = configMap.value("PrivateKey"); lastConfig[config_key::client_priv_key] = configMap.value("PrivateKey");
lastConfig[config_key::client_ip] = configMap.value("Address"); lastConfig[config_key::client_ip] = configMap.value("Address");
@ -465,17 +459,12 @@ QJsonObject ImportController::extractWireGuardConfig(const QString &data)
config_key::responsePacketMagicHeader, config_key::underloadPacketMagicHeader, config_key::responsePacketMagicHeader, config_key::underloadPacketMagicHeader,
config_key::transportPacketMagicHeader }; config_key::transportPacketMagicHeader };
const QStringList optionalJunkFields = { config_key::cookieReplyPacketJunkSize, const QStringList optionalJunkFields = { // config_key::cookieReplyPacketJunkSize,
config_key::transportPacketJunkSize, // config_key::transportPacketJunkSize,
config_key::specialJunk1, config_key::specialJunk1, config_key::specialJunk2, config_key::specialJunk3,
config_key::specialJunk2, config_key::specialJunk4, config_key::specialJunk5, config_key::controlledJunk1,
config_key::specialJunk3, config_key::controlledJunk2, config_key::controlledJunk3, config_key::specialHandshakeTimeout
config_key::specialJunk4, };
config_key::specialJunk5,
config_key::controlledJunk1,
config_key::controlledJunk2,
config_key::controlledJunk3,
config_key::specialHandshakeTimeout };
bool hasAllRequiredFields = std::all_of(requiredJunkFields.begin(), requiredJunkFields.end(), bool hasAllRequiredFields = std::all_of(requiredJunkFields.begin(), requiredJunkFields.end(),
[&configMap](const QString &field) { return !configMap.value(field).isEmpty(); }); [&configMap](const QString &field) { return !configMap.value(field).isEmpty(); });
@ -497,8 +486,7 @@ QJsonObject ImportController::extractWireGuardConfig(const QString &data)
if (!configMap.value("MTU").isEmpty()) { if (!configMap.value("MTU").isEmpty()) {
lastConfig[config_key::mtu] = configMap.value("MTU"); lastConfig[config_key::mtu] = configMap.value("MTU");
} else { } else {
lastConfig[config_key::mtu] = lastConfig[config_key::mtu] = protocolName == "awg" ? protocols::awg::defaultMtu : protocols::wireguard::defaultMtu;
protocolName == "awg" ? protocols::awg::defaultMtu : protocols::wireguard::defaultMtu;
} }
QJsonObject wireguardConfig; QJsonObject wireguardConfig;
@ -699,23 +687,14 @@ void ImportController::checkForMaliciousStrings(const QJsonObject &serverConfig)
|| (containerName == ContainerProps::containerToString(DockerContainer::Cloak)) || (containerName == ContainerProps::containerToString(DockerContainer::Cloak))
|| (containerName == ContainerProps::containerToString(DockerContainer::ShadowSocks))) { || (containerName == ContainerProps::containerToString(DockerContainer::ShadowSocks))) {
QString protocolConfig = containerConfig[ProtocolProps::protoToString(Proto::OpenVpn)] QString protocolConfig =
.toObject()[config_key::last_config] containerConfig[ProtocolProps::protoToString(Proto::OpenVpn)].toObject()[config_key::last_config].toString();
.toString(); QString protocolConfigJson = QJsonDocument::fromJson(protocolConfig.toUtf8()).object()[config_key::config].toString();
QString protocolConfigJson =
QJsonDocument::fromJson(protocolConfig.toUtf8()).object()[config_key::config].toString();
// https://github.com/OpenVPN/openvpn/blob/master/doc/man-sections/script-options.rst // https://github.com/OpenVPN/openvpn/blob/master/doc/man-sections/script-options.rst
QStringList dangerousTags { "up", QStringList dangerousTags {
"tls-verify", "up", "tls-verify", "ipchange", "client-connect", "route-up", "route-pre-down", "client-disconnect", "down", "learn-address", "auth-user-pass-verify"
"ipchange", };
"client-connect",
"route-up",
"route-pre-down",
"client-disconnect",
"down",
"learn-address",
"auth-user-pass-verify" };
QStringList maliciousStrings; QStringList maliciousStrings;
QStringList lines = protocolConfigJson.split('\n', Qt::SkipEmptyParts); QStringList lines = protocolConfigJson.split('\n', Qt::SkipEmptyParts);
@ -729,13 +708,11 @@ void ImportController::checkForMaliciousStrings(const QJsonObject &serverConfig)
} }
} }
m_maliciousWarningText = m_maliciousWarningText = tr("This configuration contains an OpenVPN setup. OpenVPN configurations can include malicious "
tr("This configuration contains an OpenVPN setup. OpenVPN configurations can include malicious "
"scripts, so only add it if you fully trust the provider of this config. "); "scripts, so only add it if you fully trust the provider of this config. ");
if (!maliciousStrings.isEmpty()) { if (!maliciousStrings.isEmpty()) {
m_maliciousWarningText.push_back( m_maliciousWarningText.push_back(tr("<br>In the imported configuration, potentially dangerous lines were found:"));
tr("<br>In the imported configuration, potentially dangerous lines were found:"));
for (const auto &string : maliciousStrings) { for (const auto &string : maliciousStrings) {
m_maliciousWarningText.push_back(QString("<br><i>%1</i>").arg(string)); m_maliciousWarningText.push_back(QString("<br><i>%1</i>").arg(string));
} }
@ -758,8 +735,8 @@ void ImportController::processAmneziaConfig(QJsonObject &config)
} }
QJsonObject jsonConfig = QJsonDocument::fromJson(protocolConfig.toUtf8()).object(); QJsonObject jsonConfig = QJsonDocument::fromJson(protocolConfig.toUtf8()).object();
jsonConfig[config_key::mtu] = dockerContainer == DockerContainer::Awg ? protocols::awg::defaultMtu jsonConfig[config_key::mtu] =
: protocols::wireguard::defaultMtu; dockerContainer == DockerContainer::Awg ? protocols::awg::defaultMtu : protocols::wireguard::defaultMtu;
containerConfig[config_key::last_config] = QString(QJsonDocument(jsonConfig).toJson()); containerConfig[config_key::last_config] = QString(QJsonDocument(jsonConfig).toJson());

View file

@ -37,8 +37,7 @@ namespace
} }
} }
InstallController::InstallController(const QSharedPointer<ServersModel> &serversModel, InstallController::InstallController(const QSharedPointer<ServersModel> &serversModel, const QSharedPointer<ContainersModel> &containersModel,
const QSharedPointer<ContainersModel> &containersModel,
const QSharedPointer<ProtocolsModel> &protocolsModel, const QSharedPointer<ProtocolsModel> &protocolsModel,
const QSharedPointer<ClientManagementModel> &clientManagementModel, const QSharedPointer<ClientManagementModel> &clientManagementModel,
const std::shared_ptr<Settings> &settings, QObject *parent) const std::shared_ptr<Settings> &settings, QObject *parent)
@ -71,8 +70,7 @@ void InstallController::install(DockerContainer container, int port, TransportPr
if (protocol == mainProto) { if (protocol == mainProto) {
containerConfig.insert(config_key::port, QString::number(port)); containerConfig.insert(config_key::port, QString::number(port));
containerConfig.insert(config_key::transport_proto, containerConfig.insert(config_key::transport_proto, ProtocolProps::transportProtoToString(transportProto, protocol));
ProtocolProps::transportProtoToString(transportProto, protocol));
if (container == DockerContainer::Awg) { if (container == DockerContainer::Awg) {
QString junkPacketCount = QString::number(QRandomGenerator::global()->bounded(2, 5)); QString junkPacketCount = QString::number(QRandomGenerator::global()->bounded(2, 5));
@ -81,37 +79,36 @@ void InstallController::install(DockerContainer container, int port, TransportPr
int s1 = QRandomGenerator::global()->bounded(15, 150); int s1 = QRandomGenerator::global()->bounded(15, 150);
int s2 = QRandomGenerator::global()->bounded(15, 150); int s2 = QRandomGenerator::global()->bounded(15, 150);
int s3 = QRandomGenerator::global()->bounded(15, 150); // int s3 = QRandomGenerator::global()->bounded(15, 150);
int s4 = QRandomGenerator::global()->bounded(15, 150); // int s4 = QRandomGenerator::global()->bounded(15, 150);
// Ensure all values are unique and don't create equal packet sizes // Ensure all values are unique and don't create equal packet sizes
QSet<int> usedValues; QSet<int> usedValues;
usedValues.insert(s1); usedValues.insert(s1);
while (usedValues.contains(s2) while (usedValues.contains(s2) || s1 + AwgConstant::messageInitiationSize == s2 + AwgConstant::messageResponseSize) {
|| s1 + AwgConstant::messageInitiationSize == s2 + AwgConstant::messageResponseSize) {
s2 = QRandomGenerator::global()->bounded(15, 150); s2 = QRandomGenerator::global()->bounded(15, 150);
} }
usedValues.insert(s2); usedValues.insert(s2);
while (usedValues.contains(s3) // while (usedValues.contains(s3)
|| s1 + AwgConstant::messageInitiationSize == s3 + AwgConstant::messageCookieReplySize // || s1 + AwgConstant::messageInitiationSize == s3 + AwgConstant::messageCookieReplySize
|| s2 + AwgConstant::messageResponseSize == s3 + AwgConstant::messageCookieReplySize) { // || s2 + AwgConstant::messageResponseSize == s3 + AwgConstant::messageCookieReplySize) {
s3 = QRandomGenerator::global()->bounded(15, 150); // s3 = QRandomGenerator::global()->bounded(15, 150);
} // }
usedValues.insert(s3); // usedValues.insert(s3);
while (usedValues.contains(s4) // while (usedValues.contains(s4)
|| s1 + AwgConstant::messageInitiationSize == s4 + AwgConstant::messageTransportSize // || s1 + AwgConstant::messageInitiationSize == s4 + AwgConstant::messageTransportSize
|| s2 + AwgConstant::messageResponseSize == s4 + AwgConstant::messageTransportSize // || s2 + AwgConstant::messageResponseSize == s4 + AwgConstant::messageTransportSize
|| s3 + AwgConstant::messageCookieReplySize == s4 + AwgConstant::messageTransportSize) { // || s3 + AwgConstant::messageCookieReplySize == s4 + AwgConstant::messageTransportSize) {
s4 = QRandomGenerator::global()->bounded(15, 150); // s4 = QRandomGenerator::global()->bounded(15, 150);
} // }
QString initPacketJunkSize = QString::number(s1); QString initPacketJunkSize = QString::number(s1);
QString responsePacketJunkSize = QString::number(s2); QString responsePacketJunkSize = QString::number(s2);
QString cookieReplyPacketJunkSize = QString::number(s3); // QString cookieReplyPacketJunkSize = QString::number(s3);
QString transportPacketJunkSize = QString::number(s4); // QString transportPacketJunkSize = QString::number(s4);
QSet<QString> headersValue; QSet<QString> headersValue;
while (headersValue.size() != 4) { while (headersValue.size() != 4) {
@ -131,14 +128,15 @@ void InstallController::install(DockerContainer container, int port, TransportPr
containerConfig[config_key::junkPacketMaxSize] = junkPacketMaxSize; containerConfig[config_key::junkPacketMaxSize] = junkPacketMaxSize;
containerConfig[config_key::initPacketJunkSize] = initPacketJunkSize; containerConfig[config_key::initPacketJunkSize] = initPacketJunkSize;
containerConfig[config_key::responsePacketJunkSize] = responsePacketJunkSize; containerConfig[config_key::responsePacketJunkSize] = responsePacketJunkSize;
containerConfig[config_key::cookieReplyPacketJunkSize] = cookieReplyPacketJunkSize;
containerConfig[config_key::transportPacketJunkSize] = transportPacketJunkSize;
containerConfig[config_key::initPacketMagicHeader] = initPacketMagicHeader; containerConfig[config_key::initPacketMagicHeader] = initPacketMagicHeader;
containerConfig[config_key::responsePacketMagicHeader] = responsePacketMagicHeader; containerConfig[config_key::responsePacketMagicHeader] = responsePacketMagicHeader;
containerConfig[config_key::underloadPacketMagicHeader] = underloadPacketMagicHeader; containerConfig[config_key::underloadPacketMagicHeader] = underloadPacketMagicHeader;
containerConfig[config_key::transportPacketMagicHeader] = transportPacketMagicHeader; containerConfig[config_key::transportPacketMagicHeader] = transportPacketMagicHeader;
// TODO: // TODO:
// containerConfig[config_key::cookieReplyPacketJunkSize] = cookieReplyPacketJunkSize;
// containerConfig[config_key::transportPacketJunkSize] = transportPacketJunkSize;
// containerConfig[config_key::specialJunk1] = specialJunk1; // containerConfig[config_key::specialJunk1] = specialJunk1;
// containerConfig[config_key::specialJunk2] = specialJunk2; // containerConfig[config_key::specialJunk2] = specialJunk2;
// containerConfig[config_key::specialJunk3] = specialJunk3; // containerConfig[config_key::specialJunk3] = specialJunk3;
@ -170,8 +168,7 @@ void InstallController::install(DockerContainer container, int port, TransportPr
serverCredentials = m_processedServerCredentials; serverCredentials = m_processedServerCredentials;
} else { } else {
int serverIndex = m_serversModel->getProcessedServerIndex(); int serverIndex = m_serversModel->getProcessedServerIndex();
serverCredentials = serverCredentials = qvariant_cast<ServerCredentials>(m_serversModel->data(serverIndex, ServersModel::Roles::CredentialsRole));
qvariant_cast<ServerCredentials>(m_serversModel->data(serverIndex, ServersModel::Roles::CredentialsRole));
} }
QSharedPointer<ServerController> serverController(new ServerController(m_settings)); QSharedPointer<ServerController> serverController(new ServerController(m_settings));
@ -197,8 +194,7 @@ void InstallController::install(DockerContainer container, int port, TransportPr
installedContainers.insert(container, config); installedContainers.insert(container, config);
finishMessage = tr("%1 installed successfully. ").arg(ContainerProps::containerHumanNames().value(container)); finishMessage = tr("%1 installed successfully. ").arg(ContainerProps::containerHumanNames().value(container));
} else { } else {
finishMessage = finishMessage = tr("%1 is already installed on the server. ").arg(ContainerProps::containerHumanNames().value(container));
tr("%1 is already installed on the server. ").arg(ContainerProps::containerHumanNames().value(container));
} }
if (errorCode) { if (errorCode) {
@ -213,10 +209,9 @@ void InstallController::install(DockerContainer container, int port, TransportPr
} }
} }
void InstallController::installServer(const DockerContainer container, void InstallController::installServer(const DockerContainer container, const QMap<DockerContainer, QJsonObject> &installedContainers,
const QMap<DockerContainer, QJsonObject> &installedContainers, const ServerCredentials &serverCredentials, const QSharedPointer<ServerController> &serverController,
const ServerCredentials &serverCredentials, QString &finishMessage)
const QSharedPointer<ServerController> &serverController, QString &finishMessage)
{ {
if (installedContainers.size() > 1) { if (installedContainers.size() > 1) {
finishMessage += tr("\nAdded containers that were already installed on the server"); finishMessage += tr("\nAdded containers that were already installed on the server");
@ -235,8 +230,8 @@ void InstallController::installServer(const DockerContainer container,
auto containerConfig = iterator.value(); auto containerConfig = iterator.value();
if (ContainerProps::isSupportedByCurrentPlatform(container)) { if (ContainerProps::isSupportedByCurrentPlatform(container)) {
auto errorCode = vpnConfigurationController.createProtocolConfigForContainer( auto errorCode = vpnConfigurationController.createProtocolConfigForContainer(m_processedServerCredentials, iterator.key(),
m_processedServerCredentials, iterator.key(), containerConfig); containerConfig);
if (errorCode) { if (errorCode) {
emit installationErrorOccurred(errorCode); emit installationErrorOccurred(errorCode);
return; return;
@ -244,8 +239,7 @@ void InstallController::installServer(const DockerContainer container,
containerConfigs.append(containerConfig); containerConfigs.append(containerConfig);
errorCode = m_clientManagementModel->appendClient(iterator.key(), serverCredentials, containerConfig, errorCode = m_clientManagementModel->appendClient(iterator.key(), serverCredentials, containerConfig,
QString("Admin [%1]").arg(QSysInfo::prettyProductName()), QString("Admin [%1]").arg(QSysInfo::prettyProductName()), serverController);
serverController);
if (errorCode) { if (errorCode) {
emit installationErrorOccurred(errorCode); emit installationErrorOccurred(errorCode);
return; return;
@ -263,8 +257,7 @@ void InstallController::installServer(const DockerContainer container,
emit installServerFinished(finishMessage); emit installServerFinished(finishMessage);
} }
void InstallController::installContainer(const DockerContainer container, void InstallController::installContainer(const DockerContainer container, const QMap<DockerContainer, QJsonObject> &installedContainers,
const QMap<DockerContainer, QJsonObject> &installedContainers,
const ServerCredentials &serverCredentials, const ServerCredentials &serverCredentials,
const QSharedPointer<ServerController> &serverController, QString &finishMessage) const QSharedPointer<ServerController> &serverController, QString &finishMessage)
{ {
@ -277,16 +270,15 @@ void InstallController::installContainer(const DockerContainer container,
containerConfig = iterator.value(); containerConfig = iterator.value();
if (ContainerProps::isSupportedByCurrentPlatform(container)) { if (ContainerProps::isSupportedByCurrentPlatform(container)) {
auto errorCode = vpnConfigurationController.createProtocolConfigForContainer( auto errorCode =
serverCredentials, iterator.key(), containerConfig); vpnConfigurationController.createProtocolConfigForContainer(serverCredentials, iterator.key(), containerConfig);
if (errorCode) { if (errorCode) {
emit installationErrorOccurred(errorCode); emit installationErrorOccurred(errorCode);
return; return;
} }
m_serversModel->addContainerConfig(iterator.key(), containerConfig); m_serversModel->addContainerConfig(iterator.key(), containerConfig);
errorCode = m_clientManagementModel->appendClient( errorCode = m_clientManagementModel->appendClient(iterator.key(), serverCredentials, containerConfig,
iterator.key(), serverCredentials, containerConfig,
QString("Admin [%1]").arg(QSysInfo::prettyProductName()), serverController); QString("Admin [%1]").arg(QSysInfo::prettyProductName()), serverController);
if (errorCode) { if (errorCode) {
emit installationErrorOccurred(errorCode); emit installationErrorOccurred(errorCode);
@ -315,8 +307,7 @@ bool InstallController::isServerAlreadyExists()
auto modelIndex = m_serversModel->index(i); auto modelIndex = m_serversModel->index(i);
const ServerCredentials credentials = const ServerCredentials credentials =
qvariant_cast<ServerCredentials>(m_serversModel->data(modelIndex, ServersModel::Roles::CredentialsRole)); qvariant_cast<ServerCredentials>(m_serversModel->data(modelIndex, ServersModel::Roles::CredentialsRole));
if (m_processedServerCredentials.hostName == credentials.hostName if (m_processedServerCredentials.hostName == credentials.hostName && m_processedServerCredentials.port == credentials.port) {
&& m_processedServerCredentials.port == credentials.port) {
emit serverAlreadyExists(i); emit serverAlreadyExists(i);
return true; return true;
} }
@ -345,17 +336,17 @@ void InstallController::scanServerForInstalledContainers()
containerConfig = iterator.value(); containerConfig = iterator.value();
if (ContainerProps::isSupportedByCurrentPlatform(container)) { if (ContainerProps::isSupportedByCurrentPlatform(container)) {
auto errorCode = vpnConfigurationController.createProtocolConfigForContainer( auto errorCode =
serverCredentials, container, containerConfig); vpnConfigurationController.createProtocolConfigForContainer(serverCredentials, container, containerConfig);
if (errorCode) { if (errorCode) {
emit installationErrorOccurred(errorCode); emit installationErrorOccurred(errorCode);
return; return;
} }
m_serversModel->addContainerConfig(container, containerConfig); m_serversModel->addContainerConfig(container, containerConfig);
errorCode = m_clientManagementModel->appendClient( errorCode = m_clientManagementModel->appendClient(container, serverCredentials, containerConfig,
container, serverCredentials, containerConfig, QString("Admin [%1]").arg(QSysInfo::prettyProductName()),
QString("Admin [%1]").arg(QSysInfo::prettyProductName()), serverController); serverController);
if (errorCode) { if (errorCode) {
emit installationErrorOccurred(errorCode); emit installationErrorOccurred(errorCode);
return; return;
@ -419,8 +410,8 @@ ErrorCode InstallController::getAlreadyInstalledContainers(const ServerCredentia
containerConfig.insert(config_key::transport_proto, transportProto); containerConfig.insert(config_key::transport_proto, transportProto);
if (protocol == Proto::Awg) { if (protocol == Proto::Awg) {
QString serverConfig = serverController->getTextFileFromContainer( QString serverConfig = serverController->getTextFileFromContainer(container, credentials,
container, credentials, protocols::awg::serverConfigPath, errorCode); protocols::awg::serverConfigPath, errorCode);
QMap<QString, QString> serverConfigMap; QMap<QString, QString> serverConfigMap;
auto serverConfigLines = serverConfig.split("\n"); auto serverConfigLines = serverConfig.split("\n");
@ -438,40 +429,33 @@ ErrorCode InstallController::getAlreadyInstalledContainers(const ServerCredentia
containerConfig[config_key::subnet_address] = serverConfigMap.value("Address").remove("/24"); containerConfig[config_key::subnet_address] = serverConfigMap.value("Address").remove("/24");
containerConfig[config_key::junkPacketCount] = serverConfigMap.value(config_key::junkPacketCount); containerConfig[config_key::junkPacketCount] = serverConfigMap.value(config_key::junkPacketCount);
containerConfig[config_key::junkPacketMinSize] = containerConfig[config_key::junkPacketMinSize] = serverConfigMap.value(config_key::junkPacketMinSize);
serverConfigMap.value(config_key::junkPacketMinSize); containerConfig[config_key::junkPacketMaxSize] = serverConfigMap.value(config_key::junkPacketMaxSize);
containerConfig[config_key::junkPacketMaxSize] = containerConfig[config_key::initPacketJunkSize] = serverConfigMap.value(config_key::initPacketJunkSize);
serverConfigMap.value(config_key::junkPacketMaxSize); containerConfig[config_key::responsePacketJunkSize] = serverConfigMap.value(config_key::responsePacketJunkSize);
containerConfig[config_key::initPacketJunkSize] = containerConfig[config_key::initPacketMagicHeader] = serverConfigMap.value(config_key::initPacketMagicHeader);
serverConfigMap.value(config_key::initPacketJunkSize); containerConfig[config_key::responsePacketMagicHeader] = serverConfigMap.value(config_key::responsePacketMagicHeader);
containerConfig[config_key::responsePacketJunkSize] =
serverConfigMap.value(config_key::responsePacketJunkSize);
containerConfig[config_key::cookieReplyPacketJunkSize] =
serverConfigMap.value(config_key::cookieReplyPacketJunkSize);
containerConfig[config_key::transportPacketJunkSize] =
serverConfigMap.value(config_key::transportPacketJunkSize);
containerConfig[config_key::initPacketMagicHeader] =
serverConfigMap.value(config_key::initPacketMagicHeader);
containerConfig[config_key::responsePacketMagicHeader] =
serverConfigMap.value(config_key::responsePacketMagicHeader);
containerConfig[config_key::underloadPacketMagicHeader] = containerConfig[config_key::underloadPacketMagicHeader] =
serverConfigMap.value(config_key::underloadPacketMagicHeader); serverConfigMap.value(config_key::underloadPacketMagicHeader);
containerConfig[config_key::transportPacketMagicHeader] = containerConfig[config_key::transportPacketMagicHeader] =
serverConfigMap.value(config_key::transportPacketMagicHeader); serverConfigMap.value(config_key::transportPacketMagicHeader);
containerConfig[config_key::specialJunk1] = serverConfigMap.value(config_key::specialJunk1);
containerConfig[config_key::specialJunk2] = serverConfigMap.value(config_key::specialJunk2); // containerConfig[config_key::cookieReplyPacketJunkSize] = serverConfigMap.value(config_key::cookieReplyPacketJunkSize);
containerConfig[config_key::specialJunk3] = serverConfigMap.value(config_key::specialJunk3); // containerConfig[config_key::transportPacketJunkSize] = serverConfigMap.value(config_key::transportPacketJunkSize);
containerConfig[config_key::specialJunk4] = serverConfigMap.value(config_key::specialJunk4);
containerConfig[config_key::specialJunk5] = serverConfigMap.value(config_key::specialJunk5); // containerConfig[config_key::specialJunk1] = serverConfigMap.value(config_key::specialJunk1);
containerConfig[config_key::controlledJunk1] = serverConfigMap.value(config_key::controlledJunk1); // containerConfig[config_key::specialJunk2] = serverConfigMap.value(config_key::specialJunk2);
containerConfig[config_key::controlledJunk2] = serverConfigMap.value(config_key::controlledJunk2); // containerConfig[config_key::specialJunk3] = serverConfigMap.value(config_key::specialJunk3);
containerConfig[config_key::controlledJunk3] = serverConfigMap.value(config_key::controlledJunk3); // containerConfig[config_key::specialJunk4] = serverConfigMap.value(config_key::specialJunk4);
containerConfig[config_key::specialHandshakeTimeout] = // containerConfig[config_key::specialJunk5] = serverConfigMap.value(config_key::specialJunk5);
serverConfigMap.value(config_key::specialHandshakeTimeout); // containerConfig[config_key::controlledJunk1] = serverConfigMap.value(config_key::controlledJunk1);
// containerConfig[config_key::controlledJunk2] = serverConfigMap.value(config_key::controlledJunk2);
// containerConfig[config_key::controlledJunk3] = serverConfigMap.value(config_key::controlledJunk3);
// containerConfig[config_key::specialHandshakeTimeout] = serverConfigMap.value(config_key::specialHandshakeTimeout);
} else if (protocol == Proto::WireGuard) { } else if (protocol == Proto::WireGuard) {
QString serverConfig = serverController->getTextFileFromContainer( QString serverConfig = serverController->getTextFileFromContainer(container, credentials,
container, credentials, protocols::wireguard::serverConfigPath, errorCode); protocols::wireguard::serverConfigPath, errorCode);
QMap<QString, QString> serverConfigMap; QMap<QString, QString> serverConfigMap;
auto serverConfigLines = serverConfig.split("\n"); auto serverConfigLines = serverConfig.split("\n");
@ -491,8 +475,7 @@ ErrorCode InstallController::getAlreadyInstalledContainers(const ServerCredentia
stdOut.clear(); stdOut.clear();
script = QString("sudo docker inspect --format '{{.Config.Cmd}}' %1").arg(name); script = QString("sudo docker inspect --format '{{.Config.Cmd}}' %1").arg(name);
ErrorCode errorCode = ErrorCode errorCode = serverController->runScript(credentials, script, cbReadStdOut, cbReadStdErr);
serverController->runScript(credentials, script, cbReadStdOut, cbReadStdErr);
if (errorCode != ErrorCode::NoError) { if (errorCode != ErrorCode::NoError) {
return errorCode; return errorCode;
} }
@ -509,8 +492,8 @@ ErrorCode InstallController::getAlreadyInstalledContainers(const ServerCredentia
containerConfig.insert(config_key::userName, userName); containerConfig.insert(config_key::userName, userName);
containerConfig.insert(config_key::password, password); containerConfig.insert(config_key::password, password);
} else if (protocol == Proto::Socks5Proxy) { } else if (protocol == Proto::Socks5Proxy) {
QString proxyConfig = serverController->getTextFileFromContainer( QString proxyConfig = serverController->getTextFileFromContainer(container, credentials,
container, credentials, protocols::socks5Proxy::proxyConfigPath, errorCode); protocols::socks5Proxy::proxyConfigPath, errorCode);
const static QRegularExpression usernameAndPasswordRegExp("users (\\w+):CL:(\\w+)"); const static QRegularExpression usernameAndPasswordRegExp("users (\\w+):CL:(\\w+)");
QRegularExpressionMatch usernameAndPasswordMatch = usernameAndPasswordRegExp.match(proxyConfig); QRegularExpressionMatch usernameAndPasswordMatch = usernameAndPasswordRegExp.match(proxyConfig);
@ -595,8 +578,7 @@ ErrorCode InstallController::getAlreadyInstalledContainers(const ServerCredentia
stdOut.clear(); stdOut.clear();
script = QString("sudo docker exec -i %1 sh -c 'cat /var/lib/tor/hidden_service/hostname'").arg(name); script = QString("sudo docker exec -i %1 sh -c 'cat /var/lib/tor/hidden_service/hostname'").arg(name);
ErrorCode errorCode = ErrorCode errorCode = serverController->runScript(credentials, script, cbReadStdOut, cbReadStdErr);
serverController->runScript(credentials, script, cbReadStdOut, cbReadStdErr);
if (errorCode != ErrorCode::NoError) { if (errorCode != ErrorCode::NoError) {
return errorCode; return errorCode;
} }
@ -635,8 +617,7 @@ void InstallController::updateContainer(QJsonObject config)
if (isUpdateDockerContainerRequired(container, oldContainerConfig, config)) { if (isUpdateDockerContainerRequired(container, oldContainerConfig, config)) {
QSharedPointer<ServerController> serverController(new ServerController(m_settings)); QSharedPointer<ServerController> serverController(new ServerController(m_settings));
connect(serverController.get(), &ServerController::serverIsBusy, this, &InstallController::serverIsBusy); connect(serverController.get(), &ServerController::serverIsBusy, this, &InstallController::serverIsBusy);
connect(this, &InstallController::cancelInstallation, serverController.get(), connect(this, &InstallController::cancelInstallation, serverController.get(), &ServerController::cancelInstallation);
&ServerController::cancelInstallation);
errorCode = serverController->updateContainer(serverCredentials, container, oldContainerConfig, config); errorCode = serverController->updateContainer(serverCredentials, container, oldContainerConfig, config);
clearCachedProfile(serverController); clearCachedProfile(serverController);
@ -646,8 +627,7 @@ void InstallController::updateContainer(QJsonObject config)
m_serversModel->updateContainerConfig(container, config); m_serversModel->updateContainerConfig(container, config);
m_protocolModel->updateModel(config); m_protocolModel->updateModel(config);
auto defaultContainer = qvariant_cast<DockerContainer>( auto defaultContainer = qvariant_cast<DockerContainer>(m_serversModel->data(serverIndex, ServersModel::Roles::DefaultContainerRole));
m_serversModel->data(serverIndex, ServersModel::Roles::DefaultContainerRole));
if ((serverIndex == m_serversModel->getDefaultServerIndex()) && (container == defaultContainer)) { if ((serverIndex == m_serversModel->getDefaultServerIndex()) && (container == defaultContainer)) {
emit currentContainerUpdated(); emit currentContainerUpdated();
} else { } else {
@ -709,8 +689,7 @@ void InstallController::removeProcessedContainer()
ErrorCode errorCode = m_serversModel->removeContainer(serverController, container); ErrorCode errorCode = m_serversModel->removeContainer(serverController, container);
if (errorCode == ErrorCode::NoError) { if (errorCode == ErrorCode::NoError) {
emit removeProcessedContainerFinished( emit removeProcessedContainerFinished(tr("%1 has been removed from the server '%2'").arg(containerName, serverName));
tr("%1 has been removed from the server '%2'").arg(containerName, serverName));
return; return;
} }
emit installationErrorOccurred(errorCode); emit installationErrorOccurred(errorCode);
@ -754,8 +733,7 @@ QRegularExpression InstallController::ipAddressRegExp()
return NetworkUtilities::ipAddressRegExp(); return NetworkUtilities::ipAddressRegExp();
} }
void InstallController::setProcessedServerCredentials(const QString &hostName, const QString &userName, void InstallController::setProcessedServerCredentials(const QString &hostName, const QString &userName, const QString &secretData)
const QString &secretData)
{ {
m_processedServerCredentials.hostName = hostName; m_processedServerCredentials.hostName = hostName;
if (m_processedServerCredentials.hostName.contains(":")) { if (m_processedServerCredentials.hostName.contains(":")) {
@ -790,8 +768,7 @@ void InstallController::mountSftpDrive(const QString &port, const QString &passw
cmd = "C:\\Program Files\\SSHFS-Win\\bin\\sshfs.exe"; cmd = "C:\\Program Files\\SSHFS-Win\\bin\\sshfs.exe";
#elif defined AMNEZIA_DESKTOP #elif defined AMNEZIA_DESKTOP
mountPath = mountPath = QString("%1/sftp:%2:%3").arg(QStandardPaths::writableLocation(QStandardPaths::HomeLocation), hostname, port);
QString("%1/sftp:%2:%3").arg(QStandardPaths::writableLocation(QStandardPaths::HomeLocation), hostname, port);
QDir dir(mountPath); QDir dir(mountPath);
if (!dir.exists()) { if (!dir.exists()) {
dir.mkpath(mountPath); dir.mkpath(mountPath);
@ -855,8 +832,7 @@ bool InstallController::checkSshConnection(QSharedPointer<ServerController> serv
ErrorCode errorCode = ErrorCode::NoError; ErrorCode errorCode = ErrorCode::NoError;
m_privateKeyPassphrase = ""; m_privateKeyPassphrase = "";
if (m_processedServerCredentials.secretData.contains("BEGIN") if (m_processedServerCredentials.secretData.contains("BEGIN") && m_processedServerCredentials.secretData.contains("PRIVATE KEY")) {
&& m_processedServerCredentials.secretData.contains("PRIVATE KEY")) {
auto passphraseCallback = [this]() { auto passphraseCallback = [this]() {
emit passphraseRequestStarted(); emit passphraseRequestStarted();
QEventLoop loop; QEventLoop loop;
@ -867,8 +843,7 @@ bool InstallController::checkSshConnection(QSharedPointer<ServerController> serv
}; };
QString decryptedPrivateKey; QString decryptedPrivateKey;
errorCode = serverController->getDecryptedPrivateKey(m_processedServerCredentials, decryptedPrivateKey, errorCode = serverController->getDecryptedPrivateKey(m_processedServerCredentials, decryptedPrivateKey, passphraseCallback);
passphraseCallback);
if (errorCode == ErrorCode::NoError) { if (errorCode == ErrorCode::NoError) {
m_processedServerCredentials.secretData = decryptedPrivateKey; m_processedServerCredentials.secretData = decryptedPrivateKey;
} else { } else {
@ -929,8 +904,7 @@ bool InstallController::isConfigValid()
return false; return false;
} }
DockerContainer container = DockerContainer container = qvariant_cast<DockerContainer>(m_serversModel->data(serverIndex, ServersModel::Roles::DefaultContainerRole));
qvariant_cast<DockerContainer>(m_serversModel->data(serverIndex, ServersModel::Roles::DefaultContainerRole));
if (container == DockerContainer::None) { if (container == DockerContainer::None) {
emit installationErrorOccurred(ErrorCode::NoInstalledContainersError); emit installationErrorOccurred(ErrorCode::NoInstalledContainersError);
@ -950,10 +924,8 @@ bool InstallController::isConfigValid()
auto isProtocolConfigExists = [](const QJsonObject &containerConfig, const DockerContainer container) { auto isProtocolConfigExists = [](const QJsonObject &containerConfig, const DockerContainer container) {
for (Proto protocol : ContainerProps::protocolsForContainer(container)) { for (Proto protocol : ContainerProps::protocolsForContainer(container)) {
QString protocolConfig = containerConfig.value(ProtocolProps::protoToString(protocol)) QString protocolConfig =
.toObject() containerConfig.value(ProtocolProps::protoToString(protocol)).toObject().value(config_key::last_config).toString();
.value(config_key::last_config)
.toString();
if (protocolConfig.isEmpty()) { if (protocolConfig.isEmpty()) {
return false; return false;
@ -964,16 +936,14 @@ bool InstallController::isConfigValid()
if (!isProtocolConfigExists(containerConfig, container)) { if (!isProtocolConfigExists(containerConfig, container)) {
VpnConfigurationsController vpnConfigurationController(m_settings, serverController); VpnConfigurationsController vpnConfigurationController(m_settings, serverController);
errorCode = errorCode = vpnConfigurationController.createProtocolConfigForContainer(credentials, container, containerConfig);
vpnConfigurationController.createProtocolConfigForContainer(credentials, container, containerConfig);
if (errorCode != ErrorCode::NoError) { if (errorCode != ErrorCode::NoError) {
return errorCode; return errorCode;
} }
m_serversModel->updateContainerConfig(container, containerConfig); m_serversModel->updateContainerConfig(container, containerConfig);
errorCode = m_clientManagementModel->appendClient(container, credentials, containerConfig, errorCode = m_clientManagementModel->appendClient(container, credentials, containerConfig,
QString("Admin [%1]").arg(QSysInfo::prettyProductName()), QString("Admin [%1]").arg(QSysInfo::prettyProductName()), serverController);
serverController);
if (errorCode != ErrorCode::NoError) { if (errorCode != ErrorCode::NoError) {
return errorCode; return errorCode;
} }

View file

@ -25,67 +25,34 @@ bool AwgConfigModel::setData(const QModelIndex &index, const QVariant &value, in
case Roles::PortRole: m_serverProtocolConfig.insert(config_key::port, value.toString()); break; case Roles::PortRole: m_serverProtocolConfig.insert(config_key::port, value.toString()); break;
case Roles::ClientMtuRole: m_clientProtocolConfig.insert(config_key::mtu, value.toString()); break; case Roles::ClientMtuRole: m_clientProtocolConfig.insert(config_key::mtu, value.toString()); break;
case Roles::ClientJunkPacketCountRole: case Roles::ClientJunkPacketCountRole: m_clientProtocolConfig.insert(config_key::junkPacketCount, value.toString()); break;
m_clientProtocolConfig.insert(config_key::junkPacketCount, value.toString()); case Roles::ClientJunkPacketMinSizeRole: m_clientProtocolConfig.insert(config_key::junkPacketMinSize, value.toString()); break;
break; case Roles::ClientJunkPacketMaxSizeRole: m_clientProtocolConfig.insert(config_key::junkPacketMaxSize, value.toString()); break;
case Roles::ClientJunkPacketMinSizeRole: case Roles::ClientSpecialJunk1Role: m_clientProtocolConfig.insert(config_key::specialJunk1, value.toString()); break;
m_clientProtocolConfig.insert(config_key::junkPacketMinSize, value.toString()); case Roles::ClientSpecialJunk2Role: m_clientProtocolConfig.insert(config_key::specialJunk2, value.toString()); break;
break; case Roles::ClientSpecialJunk3Role: m_clientProtocolConfig.insert(config_key::specialJunk3, value.toString()); break;
case Roles::ClientJunkPacketMaxSizeRole: case Roles::ClientSpecialJunk4Role: m_clientProtocolConfig.insert(config_key::specialJunk4, value.toString()); break;
m_clientProtocolConfig.insert(config_key::junkPacketMaxSize, value.toString()); case Roles::ClientSpecialJunk5Role: m_clientProtocolConfig.insert(config_key::specialJunk5, value.toString()); break;
break; case Roles::ClientControlledJunk1Role: m_clientProtocolConfig.insert(config_key::controlledJunk1, value.toString()); break;
case Roles::ClientSpecialJunk1Role: case Roles::ClientControlledJunk2Role: m_clientProtocolConfig.insert(config_key::controlledJunk2, value.toString()); break;
m_clientProtocolConfig.insert(config_key::specialJunk1, value.toString()); case Roles::ClientControlledJunk3Role: m_clientProtocolConfig.insert(config_key::controlledJunk3, value.toString()); break;
break;
case Roles::ClientSpecialJunk2Role:
m_clientProtocolConfig.insert(config_key::specialJunk2, value.toString());
break;
case Roles::ClientSpecialJunk3Role:
m_clientProtocolConfig.insert(config_key::specialJunk3, value.toString());
break;
case Roles::ClientSpecialJunk4Role:
m_clientProtocolConfig.insert(config_key::specialJunk4, value.toString());
break;
case Roles::ClientSpecialJunk5Role:
m_clientProtocolConfig.insert(config_key::specialJunk5, value.toString());
break;
case Roles::ClientControlledJunk1Role:
m_clientProtocolConfig.insert(config_key::controlledJunk1, value.toString());
break;
case Roles::ClientControlledJunk2Role:
m_clientProtocolConfig.insert(config_key::controlledJunk2, value.toString());
break;
case Roles::ClientControlledJunk3Role:
m_clientProtocolConfig.insert(config_key::controlledJunk3, value.toString());
break;
case Roles::ClientSpecialHandshakeTimeoutRole: case Roles::ClientSpecialHandshakeTimeoutRole:
m_clientProtocolConfig.insert(config_key::specialHandshakeTimeout, value.toString()); m_clientProtocolConfig.insert(config_key::specialHandshakeTimeout, value.toString());
break; break;
case Roles::ServerJunkPacketCountRole: m_serverProtocolConfig.insert(config_key::junkPacketCount, value.toString()); break;
case Roles::ServerJunkPacketCountRole: case Roles::ServerJunkPacketMinSizeRole: m_serverProtocolConfig.insert(config_key::junkPacketMinSize, value.toString()); break;
m_serverProtocolConfig.insert(config_key::junkPacketCount, value.toString()); case Roles::ServerJunkPacketMaxSizeRole: m_serverProtocolConfig.insert(config_key::junkPacketMaxSize, value.toString()); break;
break; case Roles::ServerInitPacketJunkSizeRole: m_serverProtocolConfig.insert(config_key::initPacketJunkSize, value.toString()); break;
case Roles::ServerJunkPacketMinSizeRole:
m_serverProtocolConfig.insert(config_key::junkPacketMinSize, value.toString());
break;
case Roles::ServerJunkPacketMaxSizeRole:
m_serverProtocolConfig.insert(config_key::junkPacketMaxSize, value.toString());
break;
case Roles::ServerInitPacketJunkSizeRole:
m_serverProtocolConfig.insert(config_key::initPacketJunkSize, value.toString());
break;
case Roles::ServerResponsePacketJunkSizeRole: case Roles::ServerResponsePacketJunkSizeRole:
m_serverProtocolConfig.insert(config_key::responsePacketJunkSize, value.toString()); m_serverProtocolConfig.insert(config_key::responsePacketJunkSize, value.toString());
break; break;
case Roles::ServerCookieReplyPacketJunkSizeRole: // case Roles::ServerCookieReplyPacketJunkSizeRole:
m_serverProtocolConfig.insert(config_key::cookieReplyPacketJunkSize, value.toString()); // m_serverProtocolConfig.insert(config_key::cookieReplyPacketJunkSize, value.toString());
break; // break;
case Roles::ServerTransportPacketJunkSizeRole: // case Roles::ServerTransportPacketJunkSizeRole:
m_serverProtocolConfig.insert(config_key::transportPacketJunkSize, value.toString()); // m_serverProtocolConfig.insert(config_key::transportPacketJunkSize, value.toString());
break; // break;
case Roles::ServerInitPacketMagicHeaderRole: case Roles::ServerInitPacketMagicHeaderRole: m_serverProtocolConfig.insert(config_key::initPacketMagicHeader, value.toString()); break;
m_serverProtocolConfig.insert(config_key::initPacketMagicHeader, value.toString());
break;
case Roles::ServerResponsePacketMagicHeaderRole: case Roles::ServerResponsePacketMagicHeaderRole:
m_serverProtocolConfig.insert(config_key::responsePacketMagicHeader, value.toString()); m_serverProtocolConfig.insert(config_key::responsePacketMagicHeader, value.toString());
break; break;
@ -123,26 +90,19 @@ QVariant AwgConfigModel::data(const QModelIndex &index, int role) const
case Roles::ClientControlledJunk1Role: return m_clientProtocolConfig.value(config_key::controlledJunk1); case Roles::ClientControlledJunk1Role: return m_clientProtocolConfig.value(config_key::controlledJunk1);
case Roles::ClientControlledJunk2Role: return m_clientProtocolConfig.value(config_key::controlledJunk2); case Roles::ClientControlledJunk2Role: return m_clientProtocolConfig.value(config_key::controlledJunk2);
case Roles::ClientControlledJunk3Role: return m_clientProtocolConfig.value(config_key::controlledJunk3); case Roles::ClientControlledJunk3Role: return m_clientProtocolConfig.value(config_key::controlledJunk3);
case Roles::ClientSpecialHandshakeTimeoutRole: case Roles::ClientSpecialHandshakeTimeoutRole: return m_clientProtocolConfig.value(config_key::specialHandshakeTimeout);
return m_clientProtocolConfig.value(config_key::specialHandshakeTimeout);
case Roles::ServerJunkPacketCountRole: return m_serverProtocolConfig.value(config_key::junkPacketCount); case Roles::ServerJunkPacketCountRole: return m_serverProtocolConfig.value(config_key::junkPacketCount);
case Roles::ServerJunkPacketMinSizeRole: return m_serverProtocolConfig.value(config_key::junkPacketMinSize); case Roles::ServerJunkPacketMinSizeRole: return m_serverProtocolConfig.value(config_key::junkPacketMinSize);
case Roles::ServerJunkPacketMaxSizeRole: return m_serverProtocolConfig.value(config_key::junkPacketMaxSize); case Roles::ServerJunkPacketMaxSizeRole: return m_serverProtocolConfig.value(config_key::junkPacketMaxSize);
case Roles::ServerInitPacketJunkSizeRole: return m_serverProtocolConfig.value(config_key::initPacketJunkSize); case Roles::ServerInitPacketJunkSizeRole: return m_serverProtocolConfig.value(config_key::initPacketJunkSize);
case Roles::ServerResponsePacketJunkSizeRole: case Roles::ServerResponsePacketJunkSizeRole: return m_serverProtocolConfig.value(config_key::responsePacketJunkSize);
return m_serverProtocolConfig.value(config_key::responsePacketJunkSize); // case Roles::ServerCookieReplyPacketJunkSizeRole: return m_serverProtocolConfig.value(config_key::cookieReplyPacketJunkSize);
case Roles::ServerCookieReplyPacketJunkSizeRole: // case Roles::ServerTransportPacketJunkSizeRole: return m_serverProtocolConfig.value(config_key::transportPacketJunkSize);
return m_serverProtocolConfig.value(config_key::cookieReplyPacketJunkSize);
case Roles::ServerTransportPacketJunkSizeRole:
return m_serverProtocolConfig.value(config_key::transportPacketJunkSize);
case Roles::ServerInitPacketMagicHeaderRole: return m_serverProtocolConfig.value(config_key::initPacketMagicHeader); case Roles::ServerInitPacketMagicHeaderRole: return m_serverProtocolConfig.value(config_key::initPacketMagicHeader);
case Roles::ServerResponsePacketMagicHeaderRole: case Roles::ServerResponsePacketMagicHeaderRole: return m_serverProtocolConfig.value(config_key::responsePacketMagicHeader);
return m_serverProtocolConfig.value(config_key::responsePacketMagicHeader); case Roles::ServerUnderloadPacketMagicHeaderRole: return m_serverProtocolConfig.value(config_key::underloadPacketMagicHeader);
case Roles::ServerUnderloadPacketMagicHeaderRole: case Roles::ServerTransportPacketMagicHeaderRole: return m_serverProtocolConfig.value(config_key::transportPacketMagicHeader);
return m_serverProtocolConfig.value(config_key::underloadPacketMagicHeader);
case Roles::ServerTransportPacketMagicHeaderRole:
return m_serverProtocolConfig.value(config_key::transportPacketMagicHeader);
} }
return QVariant(); return QVariant();
@ -157,15 +117,13 @@ void AwgConfigModel::updateModel(const QJsonObject &config)
QJsonObject serverProtocolConfig = config.value(config_key::awg).toObject(); QJsonObject serverProtocolConfig = config.value(config_key::awg).toObject();
auto defaultTransportProto = auto defaultTransportProto = ProtocolProps::transportProtoToString(ProtocolProps::defaultTransportProto(Proto::Awg), Proto::Awg);
ProtocolProps::transportProtoToString(ProtocolProps::defaultTransportProto(Proto::Awg), Proto::Awg);
m_serverProtocolConfig.insert(config_key::transport_proto, m_serverProtocolConfig.insert(config_key::transport_proto,
serverProtocolConfig.value(config_key::transport_proto).toString(defaultTransportProto)); serverProtocolConfig.value(config_key::transport_proto).toString(defaultTransportProto));
m_serverProtocolConfig[config_key::last_config] = serverProtocolConfig.value(config_key::last_config); m_serverProtocolConfig[config_key::last_config] = serverProtocolConfig.value(config_key::last_config);
m_serverProtocolConfig[config_key::subnet_address] = m_serverProtocolConfig[config_key::subnet_address] =
serverProtocolConfig.value(config_key::subnet_address).toString(protocols::wireguard::defaultSubnetAddress); serverProtocolConfig.value(config_key::subnet_address).toString(protocols::wireguard::defaultSubnetAddress);
m_serverProtocolConfig[config_key::port] = m_serverProtocolConfig[config_key::port] = serverProtocolConfig.value(config_key::port).toString(protocols::awg::defaultPort);
serverProtocolConfig.value(config_key::port).toString(protocols::awg::defaultPort);
m_serverProtocolConfig[config_key::junkPacketCount] = m_serverProtocolConfig[config_key::junkPacketCount] =
serverProtocolConfig.value(config_key::junkPacketCount).toString(protocols::awg::defaultJunkPacketCount); serverProtocolConfig.value(config_key::junkPacketCount).toString(protocols::awg::defaultJunkPacketCount);
m_serverProtocolConfig[config_key::junkPacketMinSize] = m_serverProtocolConfig[config_key::junkPacketMinSize] =
@ -175,39 +133,29 @@ void AwgConfigModel::updateModel(const QJsonObject &config)
m_serverProtocolConfig[config_key::initPacketJunkSize] = m_serverProtocolConfig[config_key::initPacketJunkSize] =
serverProtocolConfig.value(config_key::initPacketJunkSize).toString(protocols::awg::defaultInitPacketJunkSize); serverProtocolConfig.value(config_key::initPacketJunkSize).toString(protocols::awg::defaultInitPacketJunkSize);
m_serverProtocolConfig[config_key::responsePacketJunkSize] = m_serverProtocolConfig[config_key::responsePacketJunkSize] =
serverProtocolConfig.value(config_key::responsePacketJunkSize) serverProtocolConfig.value(config_key::responsePacketJunkSize).toString(protocols::awg::defaultResponsePacketJunkSize);
.toString(protocols::awg::defaultResponsePacketJunkSize); // m_serverProtocolConfig[config_key::cookieReplyPacketJunkSize] =
m_serverProtocolConfig[config_key::cookieReplyPacketJunkSize] = // serverProtocolConfig.value(config_key::cookieReplyPacketJunkSize).toString(protocols::awg::defaultCookieReplyPacketJunkSize);
serverProtocolConfig.value(config_key::cookieReplyPacketJunkSize) // m_serverProtocolConfig[config_key::transportPacketJunkSize] =
.toString(protocols::awg::defaultCookieReplyPacketJunkSize); // serverProtocolConfig.value(config_key::transportPacketJunkSize).toString(protocols::awg::defaultTransportPacketJunkSize);
m_serverProtocolConfig[config_key::transportPacketJunkSize] =
serverProtocolConfig.value(config_key::transportPacketJunkSize)
.toString(protocols::awg::defaultTransportPacketJunkSize);
m_serverProtocolConfig[config_key::initPacketMagicHeader] = m_serverProtocolConfig[config_key::initPacketMagicHeader] =
serverProtocolConfig.value(config_key::initPacketMagicHeader) serverProtocolConfig.value(config_key::initPacketMagicHeader).toString(protocols::awg::defaultInitPacketMagicHeader);
.toString(protocols::awg::defaultInitPacketMagicHeader);
m_serverProtocolConfig[config_key::responsePacketMagicHeader] = m_serverProtocolConfig[config_key::responsePacketMagicHeader] =
serverProtocolConfig.value(config_key::responsePacketMagicHeader) serverProtocolConfig.value(config_key::responsePacketMagicHeader).toString(protocols::awg::defaultResponsePacketMagicHeader);
.toString(protocols::awg::defaultResponsePacketMagicHeader);
m_serverProtocolConfig[config_key::underloadPacketMagicHeader] = m_serverProtocolConfig[config_key::underloadPacketMagicHeader] =
serverProtocolConfig.value(config_key::underloadPacketMagicHeader) serverProtocolConfig.value(config_key::underloadPacketMagicHeader).toString(protocols::awg::defaultUnderloadPacketMagicHeader);
.toString(protocols::awg::defaultUnderloadPacketMagicHeader);
m_serverProtocolConfig[config_key::transportPacketMagicHeader] = m_serverProtocolConfig[config_key::transportPacketMagicHeader] =
serverProtocolConfig.value(config_key::transportPacketMagicHeader) serverProtocolConfig.value(config_key::transportPacketMagicHeader).toString(protocols::awg::defaultTransportPacketMagicHeader);
.toString(protocols::awg::defaultTransportPacketMagicHeader);
auto lastConfig = m_serverProtocolConfig.value(config_key::last_config).toString(); auto lastConfig = m_serverProtocolConfig.value(config_key::last_config).toString();
QJsonObject clientProtocolConfig = QJsonDocument::fromJson(lastConfig.toUtf8()).object(); QJsonObject clientProtocolConfig = QJsonDocument::fromJson(lastConfig.toUtf8()).object();
m_clientProtocolConfig[config_key::mtu] = clientProtocolConfig[config_key::mtu].toString(protocols::awg::defaultMtu); m_clientProtocolConfig[config_key::mtu] = clientProtocolConfig[config_key::mtu].toString(protocols::awg::defaultMtu);
m_clientProtocolConfig[config_key::junkPacketCount] = m_clientProtocolConfig[config_key::junkPacketCount] =
clientProtocolConfig.value(config_key::junkPacketCount) clientProtocolConfig.value(config_key::junkPacketCount).toString(m_serverProtocolConfig[config_key::junkPacketCount].toString());
.toString(m_serverProtocolConfig[config_key::junkPacketCount].toString());
m_clientProtocolConfig[config_key::junkPacketMinSize] = m_clientProtocolConfig[config_key::junkPacketMinSize] =
clientProtocolConfig.value(config_key::junkPacketMinSize) clientProtocolConfig.value(config_key::junkPacketMinSize).toString(m_serverProtocolConfig[config_key::junkPacketMinSize].toString());
.toString(m_serverProtocolConfig[config_key::junkPacketMinSize].toString());
m_clientProtocolConfig[config_key::junkPacketMaxSize] = m_clientProtocolConfig[config_key::junkPacketMaxSize] =
clientProtocolConfig.value(config_key::junkPacketMaxSize) clientProtocolConfig.value(config_key::junkPacketMaxSize).toString(m_serverProtocolConfig[config_key::junkPacketMaxSize].toString());
.toString(m_serverProtocolConfig[config_key::junkPacketMaxSize].toString());
m_clientProtocolConfig[config_key::specialJunk1] = m_clientProtocolConfig[config_key::specialJunk1] =
clientProtocolConfig.value(config_key::specialJunk1).toString(protocols::awg::defaultSpecialJunk1); clientProtocolConfig.value(config_key::specialJunk1).toString(protocols::awg::defaultSpecialJunk1);
m_clientProtocolConfig[config_key::specialJunk2] = m_clientProtocolConfig[config_key::specialJunk2] =
@ -225,8 +173,7 @@ void AwgConfigModel::updateModel(const QJsonObject &config)
m_clientProtocolConfig[config_key::controlledJunk3] = m_clientProtocolConfig[config_key::controlledJunk3] =
clientProtocolConfig.value(config_key::controlledJunk3).toString(protocols::awg::defaultControlledJunk3); clientProtocolConfig.value(config_key::controlledJunk3).toString(protocols::awg::defaultControlledJunk3);
m_clientProtocolConfig[config_key::specialHandshakeTimeout] = m_clientProtocolConfig[config_key::specialHandshakeTimeout] =
clientProtocolConfig.value(config_key::specialHandshakeTimeout) clientProtocolConfig.value(config_key::specialHandshakeTimeout).toString(protocols::awg::defaultSpecialHandshakeTimeout);
.toString(protocols::awg::defaultSpecialHandshakeTimeout);
endResetModel(); endResetModel();
} }
@ -266,17 +213,22 @@ bool AwgConfigModel::isHeadersEqual(const QString &h1, const QString &h2, const
return (h1 == h2) || (h1 == h3) || (h1 == h4) || (h2 == h3) || (h2 == h4) || (h3 == h4); return (h1 == h2) || (h1 == h3) || (h1 == h4) || (h2 == h3) || (h2 == h4) || (h3 == h4);
} }
bool AwgConfigModel::isPacketSizeEqual(const int s1, const int s2, const int s3, const int s4) bool AwgConfigModel::isPacketSizeEqual(const int s1, const int s2)
{ {
int initSize = AwgConstant::messageInitiationSize + s1; return (AwgConstant::messageInitiationSize + s1 == AwgConstant::messageResponseSize + s2);
int responseSize = AwgConstant::messageResponseSize + s2;
int cookieSize = AwgConstant::messageCookieReplySize + s3;
int transportSize = AwgConstant::messageTransportSize + s4;
return (initSize == responseSize || initSize == cookieSize || initSize == transportSize
|| responseSize == cookieSize || responseSize == transportSize || cookieSize == transportSize);
} }
// bool AwgConfigModel::isPacketSizeEqual(const int s1, const int s2, const int s3, const int s4)
// {
// int initSize = AwgConstant::messageInitiationSize + s1;
// int responseSize = AwgConstant::messageResponseSize + s2;
// int cookieSize = AwgConstant::messageCookieReplySize + s3;
// int transportSize = AwgConstant::messageTransportSize + s4;
// return (initSize == responseSize || initSize == cookieSize || initSize == transportSize || responseSize == cookieSize
// || responseSize == transportSize || cookieSize == transportSize);
// }
bool AwgConfigModel::isServerSettingsEqual() bool AwgConfigModel::isServerSettingsEqual()
{ {
const AwgConfig oldConfig(m_fullConfig.value(config_key::awg).toObject()); const AwgConfig oldConfig(m_fullConfig.value(config_key::awg).toObject());
@ -327,67 +279,49 @@ AwgConfig::AwgConfig(const QJsonObject &serverProtocolConfig)
auto lastConfig = serverProtocolConfig.value(config_key::last_config).toString(); auto lastConfig = serverProtocolConfig.value(config_key::last_config).toString();
QJsonObject clientProtocolConfig = QJsonDocument::fromJson(lastConfig.toUtf8()).object(); QJsonObject clientProtocolConfig = QJsonDocument::fromJson(lastConfig.toUtf8()).object();
clientMtu = clientProtocolConfig[config_key::mtu].toString(protocols::awg::defaultMtu); clientMtu = clientProtocolConfig[config_key::mtu].toString(protocols::awg::defaultMtu);
clientJunkPacketCount = clientJunkPacketCount = clientProtocolConfig.value(config_key::junkPacketCount).toString(protocols::awg::defaultJunkPacketCount);
clientProtocolConfig.value(config_key::junkPacketCount).toString(protocols::awg::defaultJunkPacketCount); clientJunkPacketMinSize = clientProtocolConfig.value(config_key::junkPacketMinSize).toString(protocols::awg::defaultJunkPacketMinSize);
clientJunkPacketMinSize = clientJunkPacketMaxSize = clientProtocolConfig.value(config_key::junkPacketMaxSize).toString(protocols::awg::defaultJunkPacketMaxSize);
clientProtocolConfig.value(config_key::junkPacketMinSize).toString(protocols::awg::defaultJunkPacketMinSize); clientSpecialJunk1 = clientProtocolConfig.value(config_key::specialJunk1).toString(protocols::awg::defaultSpecialJunk1);
clientJunkPacketMaxSize = clientSpecialJunk2 = clientProtocolConfig.value(config_key::specialJunk2).toString(protocols::awg::defaultSpecialJunk2);
clientProtocolConfig.value(config_key::junkPacketMaxSize).toString(protocols::awg::defaultJunkPacketMaxSize); clientSpecialJunk3 = clientProtocolConfig.value(config_key::specialJunk3).toString(protocols::awg::defaultSpecialJunk3);
clientSpecialJunk1 = clientSpecialJunk4 = clientProtocolConfig.value(config_key::specialJunk4).toString(protocols::awg::defaultSpecialJunk4);
clientProtocolConfig.value(config_key::specialJunk1).toString(protocols::awg::defaultSpecialJunk1); clientSpecialJunk5 = clientProtocolConfig.value(config_key::specialJunk5).toString(protocols::awg::defaultSpecialJunk5);
clientSpecialJunk2 = clientControlledJunk1 = clientProtocolConfig.value(config_key::controlledJunk1).toString(protocols::awg::defaultControlledJunk1);
clientProtocolConfig.value(config_key::specialJunk2).toString(protocols::awg::defaultSpecialJunk2); clientControlledJunk2 = clientProtocolConfig.value(config_key::controlledJunk2).toString(protocols::awg::defaultControlledJunk2);
clientSpecialJunk3 = clientControlledJunk3 = clientProtocolConfig.value(config_key::controlledJunk3).toString(protocols::awg::defaultControlledJunk3);
clientProtocolConfig.value(config_key::specialJunk3).toString(protocols::awg::defaultSpecialJunk3); clientSpecialHandshakeTimeout =
clientSpecialJunk4 = clientProtocolConfig.value(config_key::specialHandshakeTimeout).toString(protocols::awg::defaultSpecialHandshakeTimeout);
clientProtocolConfig.value(config_key::specialJunk4).toString(protocols::awg::defaultSpecialJunk4);
clientSpecialJunk5 =
clientProtocolConfig.value(config_key::specialJunk5).toString(protocols::awg::defaultSpecialJunk5);
clientControlledJunk1 =
clientProtocolConfig.value(config_key::controlledJunk1).toString(protocols::awg::defaultControlledJunk1);
clientControlledJunk2 =
clientProtocolConfig.value(config_key::controlledJunk2).toString(protocols::awg::defaultControlledJunk2);
clientControlledJunk3 =
clientProtocolConfig.value(config_key::controlledJunk3).toString(protocols::awg::defaultControlledJunk3);
clientSpecialHandshakeTimeout = clientProtocolConfig.value(config_key::specialHandshakeTimeout)
.toString(protocols::awg::defaultSpecialHandshakeTimeout);
subnetAddress = subnetAddress = serverProtocolConfig.value(config_key::subnet_address).toString(protocols::wireguard::defaultSubnetAddress);
serverProtocolConfig.value(config_key::subnet_address).toString(protocols::wireguard::defaultSubnetAddress);
port = serverProtocolConfig.value(config_key::port).toString(protocols::awg::defaultPort); port = serverProtocolConfig.value(config_key::port).toString(protocols::awg::defaultPort);
serverJunkPacketCount = serverJunkPacketCount = serverProtocolConfig.value(config_key::junkPacketCount).toString(protocols::awg::defaultJunkPacketCount);
serverProtocolConfig.value(config_key::junkPacketCount).toString(protocols::awg::defaultJunkPacketCount); serverJunkPacketMinSize = serverProtocolConfig.value(config_key::junkPacketMinSize).toString(protocols::awg::defaultJunkPacketMinSize);
serverJunkPacketMinSize = serverJunkPacketMaxSize = serverProtocolConfig.value(config_key::junkPacketMaxSize).toString(protocols::awg::defaultJunkPacketMaxSize);
serverProtocolConfig.value(config_key::junkPacketMinSize).toString(protocols::awg::defaultJunkPacketMinSize); serverInitPacketJunkSize = serverProtocolConfig.value(config_key::initPacketJunkSize).toString(protocols::awg::defaultInitPacketJunkSize);
serverJunkPacketMaxSize = serverResponsePacketJunkSize =
serverProtocolConfig.value(config_key::junkPacketMaxSize).toString(protocols::awg::defaultJunkPacketMaxSize); serverProtocolConfig.value(config_key::responsePacketJunkSize).toString(protocols::awg::defaultResponsePacketJunkSize);
serverInitPacketJunkSize = // serverCookieReplyPacketJunkSize =
serverProtocolConfig.value(config_key::initPacketJunkSize).toString(protocols::awg::defaultInitPacketJunkSize); // serverProtocolConfig.value(config_key::cookieReplyPacketJunkSize).toString(protocols::awg::defaultCookieReplyPacketJunkSize);
serverResponsePacketJunkSize = serverProtocolConfig.value(config_key::responsePacketJunkSize) // serverTransportPacketJunkSize =
.toString(protocols::awg::defaultResponsePacketJunkSize); // serverProtocolConfig.value(config_key::transportPacketJunkSize).toString(protocols::awg::defaultTransportPacketJunkSize);
serverCookieReplyPacketJunkSize = serverProtocolConfig.value(config_key::responsePacketJunkSize) serverInitPacketMagicHeader =
.toString(protocols::awg::defaultCookieReplyPacketJunkSize); serverProtocolConfig.value(config_key::initPacketMagicHeader).toString(protocols::awg::defaultInitPacketMagicHeader);
serverTransportPacketJunkSize = serverProtocolConfig.value(config_key::responsePacketJunkSize) serverResponsePacketMagicHeader =
.toString(protocols::awg::defaultTransportPacketJunkSize); serverProtocolConfig.value(config_key::responsePacketMagicHeader).toString(protocols::awg::defaultResponsePacketMagicHeader);
serverInitPacketMagicHeader = serverProtocolConfig.value(config_key::initPacketMagicHeader) serverUnderloadPacketMagicHeader =
.toString(protocols::awg::defaultInitPacketMagicHeader); serverProtocolConfig.value(config_key::underloadPacketMagicHeader).toString(protocols::awg::defaultUnderloadPacketMagicHeader);
serverResponsePacketMagicHeader = serverProtocolConfig.value(config_key::responsePacketMagicHeader) serverTransportPacketMagicHeader =
.toString(protocols::awg::defaultResponsePacketMagicHeader); serverProtocolConfig.value(config_key::transportPacketMagicHeader).toString(protocols::awg::defaultTransportPacketMagicHeader);
serverUnderloadPacketMagicHeader = serverProtocolConfig.value(config_key::underloadPacketMagicHeader)
.toString(protocols::awg::defaultUnderloadPacketMagicHeader);
serverTransportPacketMagicHeader = serverProtocolConfig.value(config_key::transportPacketMagicHeader)
.toString(protocols::awg::defaultTransportPacketMagicHeader);
} }
bool AwgConfig::hasEqualServerSettings(const AwgConfig &other) const bool AwgConfig::hasEqualServerSettings(const AwgConfig &other) const
{ {
if (subnetAddress != other.subnetAddress || port != other.port || serverJunkPacketCount != other.serverJunkPacketCount if (subnetAddress != other.subnetAddress || port != other.port || serverJunkPacketCount != other.serverJunkPacketCount
|| serverJunkPacketMinSize != other.serverJunkPacketMinSize || serverJunkPacketMinSize != other.serverJunkPacketMinSize || serverJunkPacketMaxSize != other.serverJunkPacketMaxSize
|| serverJunkPacketMaxSize != other.serverJunkPacketMaxSize || serverInitPacketJunkSize != other.serverInitPacketJunkSize || serverResponsePacketJunkSize != other.serverResponsePacketJunkSize
|| serverInitPacketJunkSize != other.serverInitPacketJunkSize // || serverCookieReplyPacketJunkSize != other.serverCookieReplyPacketJunkSize
|| serverResponsePacketJunkSize != other.serverResponsePacketJunkSize // || serverTransportPacketJunkSize != other.serverTransportPacketJunkSize
|| serverCookieReplyPacketJunkSize != other.serverCookieReplyPacketJunkSize
|| serverTransportPacketJunkSize != other.serverTransportPacketJunkSize
|| serverInitPacketMagicHeader != other.serverInitPacketMagicHeader || serverInitPacketMagicHeader != other.serverInitPacketMagicHeader
|| serverResponsePacketMagicHeader != other.serverResponsePacketMagicHeader || serverResponsePacketMagicHeader != other.serverResponsePacketMagicHeader
|| serverUnderloadPacketMagicHeader != other.serverUnderloadPacketMagicHeader || serverUnderloadPacketMagicHeader != other.serverUnderloadPacketMagicHeader
@ -400,12 +334,11 @@ bool AwgConfig::hasEqualServerSettings(const AwgConfig &other) const
bool AwgConfig::hasEqualClientSettings(const AwgConfig &other) const bool AwgConfig::hasEqualClientSettings(const AwgConfig &other) const
{ {
if (clientMtu != other.clientMtu || clientJunkPacketCount != other.clientJunkPacketCount if (clientMtu != other.clientMtu || clientJunkPacketCount != other.clientJunkPacketCount
|| clientJunkPacketMinSize != other.clientJunkPacketMinSize || clientJunkPacketMinSize != other.clientJunkPacketMinSize || clientJunkPacketMaxSize != other.clientJunkPacketMaxSize
|| clientJunkPacketMaxSize != other.clientJunkPacketMaxSize || clientSpecialJunk1 != other.clientSpecialJunk1 || clientSpecialJunk1 != other.clientSpecialJunk1 || clientSpecialJunk2 != other.clientSpecialJunk2
|| clientSpecialJunk2 != other.clientSpecialJunk2 || clientSpecialJunk3 != other.clientSpecialJunk3 || clientSpecialJunk3 != other.clientSpecialJunk3 || clientSpecialJunk4 != other.clientSpecialJunk4
|| clientSpecialJunk4 != other.clientSpecialJunk4 || clientSpecialJunk5 != other.clientSpecialJunk5 || clientSpecialJunk5 != other.clientSpecialJunk5 || clientControlledJunk1 != other.clientControlledJunk1
|| clientControlledJunk1 != other.clientControlledJunk1 || clientControlledJunk2 != other.clientControlledJunk2 || clientControlledJunk2 != other.clientControlledJunk2 || clientControlledJunk3 != other.clientControlledJunk3
|| clientControlledJunk3 != other.clientControlledJunk3
|| clientSpecialHandshakeTimeout != other.clientSpecialHandshakeTimeout) { || clientSpecialHandshakeTimeout != other.clientSpecialHandshakeTimeout) {
return false; return false;
} }

View file

@ -100,7 +100,7 @@ public slots:
QJsonObject getConfig(); QJsonObject getConfig();
bool isHeadersEqual(const QString &h1, const QString &h2, const QString &h3, const QString &h4); bool isHeadersEqual(const QString &h1, const QString &h2, const QString &h3, const QString &h4);
bool isPacketSizeEqual(const int s1, const int s2, const int s3, const int s4); bool isPacketSizeEqual(const int s1, const int s2/*, const int s3, const int s4*/);
bool isServerSettingsEqual(); bool isServerSettingsEqual();

View file

@ -0,0 +1,15 @@
pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Layouts
import "../Controls2"
TextFieldWithHeaderType {
Layout.fillWidth: true
Layout.topMargin: 16
textField.validator: IntValidator { bottom: 0 }
checkEmptyText: true
}

View file

@ -115,14 +115,10 @@ PageType {
KeyNavigation.tab: junkPacketCountTextField.textField KeyNavigation.tab: junkPacketCountTextField.textField
} }
TextFieldWithHeaderType { AwgTextField {
id: junkPacketCountTextField id: junkPacketCountTextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: "Jc - Junk packet count" headerText: "Jc - Junk packet count"
textField.text: clientJunkPacketCount textField.text: clientJunkPacketCount
textField.validator: IntValidator { bottom: 0 }
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== clientJunkPacketCount) { if (textField.text !== clientJunkPacketCount) {
@ -130,19 +126,13 @@ PageType {
} }
} }
checkEmptyText: true
KeyNavigation.tab: junkPacketMinSizeTextField.textField KeyNavigation.tab: junkPacketMinSizeTextField.textField
} }
TextFieldWithHeaderType { AwgTextField {
id: junkPacketMinSizeTextField id: junkPacketMinSizeTextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: "Jmin - Junk packet minimum size" headerText: "Jmin - Junk packet minimum size"
textField.text: clientJunkPacketMinSize textField.text: clientJunkPacketMinSize
textField.validator: IntValidator { bottom: 0 }
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== clientJunkPacketMinSize) { if (textField.text !== clientJunkPacketMinSize) {
@ -150,36 +140,27 @@ PageType {
} }
} }
checkEmptyText: true
KeyNavigation.tab: junkPacketMaxSizeTextField.textField KeyNavigation.tab: junkPacketMaxSizeTextField.textField
} }
TextFieldWithHeaderType { AwgTextField {
id: junkPacketMaxSizeTextField id: junkPacketMaxSizeTextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: "Jmax - Junk packet maximum size" headerText: "Jmax - Junk packet maximum size"
textField.text: clientJunkPacketMaxSize textField.text: clientJunkPacketMaxSize
textField.validator: IntValidator { bottom: 0 }
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== clientJunkPacketMaxSize) { if (textField.text !== clientJunkPacketMaxSize) {
clientJunkPacketMaxSize = textField.text clientJunkPacketMaxSize = textField.text
} }
} }
checkEmptyText: true
} }
TextFieldWithHeaderType { AwgTextField {
id: specialJunk1TextField id: specialJunk1TextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("I1 - First special junk packet") headerText: qsTr("I1 - First special junk packet")
textField.text: clientSpecialJunk1 textField.text: clientSpecialJunk1
textField.validator: null
checkEmptyText: false
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== clientSpecialJunk1) { if (textField.text !== clientSpecialJunk1) {
@ -188,13 +169,12 @@ PageType {
} }
} }
TextFieldWithHeaderType { AwgTextField {
id: specialJunk2TextField id: specialJunk2TextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("I2 - Second special junk packet") headerText: qsTr("I2 - Second special junk packet")
textField.text: clientSpecialJunk2 textField.text: clientSpecialJunk2
textField.validator: null
checkEmptyText: false
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== clientSpecialJunk2) { if (textField.text !== clientSpecialJunk2) {
@ -203,13 +183,12 @@ PageType {
} }
} }
TextFieldWithHeaderType { AwgTextField {
id: specialJunk3TextField id: specialJunk3TextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("I3 - Third special junk packet") headerText: qsTr("I3 - Third special junk packet")
textField.text: clientSpecialJunk3 textField.text: clientSpecialJunk3
textField.validator: null
checkEmptyText: false
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== clientSpecialJunk3) { if (textField.text !== clientSpecialJunk3) {
@ -218,13 +197,12 @@ PageType {
} }
} }
TextFieldWithHeaderType { AwgTextField {
id: specialJunk4TextField id: specialJunk4TextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("I4 - Fourth special junk packet") headerText: qsTr("I4 - Fourth special junk packet")
textField.text: clientSpecialJunk4 textField.text: clientSpecialJunk4
textField.validator: null
checkEmptyText: false
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== clientSpecialJunk4) { if (textField.text !== clientSpecialJunk4) {
@ -233,13 +211,12 @@ PageType {
} }
} }
TextFieldWithHeaderType { AwgTextField {
id: specialJunk5TextField id: specialJunk5TextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("I5 - Fifth special junk packet") headerText: qsTr("I5 - Fifth special junk packet")
textField.text: clientSpecialJunk5 textField.text: clientSpecialJunk5
textField.validator: null
checkEmptyText: false
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== clientSpecialJunk5 ) { if (textField.text !== clientSpecialJunk5 ) {
@ -248,13 +225,12 @@ PageType {
} }
} }
TextFieldWithHeaderType { AwgTextField {
id: controlledJunk1TextField id: controlledJunk1TextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("J1 - First controlled junk packet") headerText: qsTr("J1 - First controlled junk packet")
textField.text: clientControlledJunk1 textField.text: clientControlledJunk1
textField.validator: null
checkEmptyText: false
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== clientControlledJunk1) { if (textField.text !== clientControlledJunk1) {
@ -263,13 +239,12 @@ PageType {
} }
} }
TextFieldWithHeaderType { AwgTextField {
id: controlledJunk2TextField id: controlledJunk2TextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("J2 - Second controlled junk packet") headerText: qsTr("J2 - Second controlled junk packet")
textField.text: clientControlledJunk2 textField.text: clientControlledJunk2
textField.validator: null
checkEmptyText: false
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== clientControlledJunk2) { if (textField.text !== clientControlledJunk2) {
@ -278,13 +253,12 @@ PageType {
} }
} }
TextFieldWithHeaderType { AwgTextField {
id: controlledJunk3TextField id: controlledJunk3TextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("J3 - Third controlled junk packet") headerText: qsTr("J3 - Third controlled junk packet")
textField.text: clientControlledJunk3 textField.text: clientControlledJunk3
textField.validator: null
checkEmptyText: false
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== clientControlledJunk3) { if (textField.text !== clientControlledJunk3) {
@ -293,14 +267,11 @@ PageType {
} }
} }
TextFieldWithHeaderType { AwgTextField {
id: iTimeTextField id: iTimeTextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("Itime - Special handshake timeout") headerText: qsTr("Itime - Special handshake timeout")
textField.text: clientSpecialHandshakeTimeout textField.text: clientSpecialHandshakeTimeout
textField.validator: IntValidator { bottom: 0 } checkEmptyText: false
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== clientSpecialHandshakeTimeout) { if (textField.text !== clientSpecialHandshakeTimeout) {
@ -316,99 +287,72 @@ PageType {
text: qsTr("Server settings") text: qsTr("Server settings")
} }
TextFieldWithHeaderType { AwgTextField {
id: portTextField id: portTextField
Layout.fillWidth: true
Layout.topMargin: 8
enabled: false enabled: false
headerText: qsTr("Port") headerText: qsTr("Port")
textField.text: port textField.text: port
} }
TextFieldWithHeaderType { AwgTextField {
id: initPacketJunkSizeTextField id: initPacketJunkSizeTextField
Layout.fillWidth: true
Layout.topMargin: 16
enabled: false enabled: false
headerText: "S1 - Init packet junk size" headerText: "S1 - Init packet junk size"
textField.text: serverInitPacketJunkSize textField.text: serverInitPacketJunkSize
} }
TextFieldWithHeaderType { AwgTextField {
id: responsePacketJunkSizeTextField id: responsePacketJunkSizeTextField
Layout.fillWidth: true
Layout.topMargin: 16
enabled: false enabled: false
headerText: "S2 - Response packet junk size" headerText: "S2 - Response packet junk size"
textField.text: serverResponsePacketJunkSize textField.text: serverResponsePacketJunkSize
} }
TextFieldWithHeaderType { // AwgTextField {
id: cookieReplyPacketJunkSizeTextField // id: cookieReplyPacketJunkSizeTextField
Layout.fillWidth: true // enabled: false
Layout.topMargin: 16
enabled: false // headerText: "S3 - Cookie Reply packet junk size"
// textField.text: serverCookieReplyPacketJunkSize
// }
headerText: "S3 - Cookie Reply packet junk size" // AwgTextField {
textField.text: serverCookieReplyPacketJunkSize // id: transportPacketJunkSizeTextField
} // enabled: false
TextFieldWithHeaderType { // headerText: "S4 - Transport packet junk size"
id: transportPacketJunkSizeTextField // textField.text: serverTransportPacketJunkSize
Layout.fillWidth: true // }
Layout.topMargin: 16
enabled: false AwgTextField {
headerText: "S4 - Transport packet junk size"
textField.text: serverTransportPacketJunkSize
}
TextFieldWithHeaderType {
id: initPacketMagicHeaderTextField id: initPacketMagicHeaderTextField
Layout.fillWidth: true
Layout.topMargin: 16
enabled: false enabled: false
headerText: "H1 - Init packet magic header" headerText: "H1 - Init packet magic header"
textField.text: serverInitPacketMagicHeader textField.text: serverInitPacketMagicHeader
} }
TextFieldWithHeaderType { AwgTextField {
id: responsePacketMagicHeaderTextField id: responsePacketMagicHeaderTextField
Layout.fillWidth: true
Layout.topMargin: 16
enabled: false enabled: false
headerText: "H2 - Response packet magic header" headerText: "H2 - Response packet magic header"
textField.text: serverResponsePacketMagicHeader textField.text: serverResponsePacketMagicHeader
} }
TextFieldWithHeaderType { AwgTextField {
id: underloadPacketMagicHeaderTextField id: underloadPacketMagicHeaderTextField
Layout.fillWidth: true
Layout.topMargin: 16
enabled: false enabled: false
headerText: "H3 - Underload packet magic header" headerText: "H3 - Underload packet magic header"
textField.text: serverUnderloadPacketMagicHeader textField.text: serverUnderloadPacketMagicHeader
} }
TextFieldWithHeaderType { AwgTextField {
id: transportPacketMagicHeaderTextField id: transportPacketMagicHeaderTextField
Layout.fillWidth: true
Layout.topMargin: 16
enabled: false enabled: false
headerText: "H4 - Transport packet magic header" headerText: "H4 - Transport packet magic header"

View file

@ -138,230 +138,136 @@ PageType {
checkEmptyText: true checkEmptyText: true
} }
TextFieldWithHeaderType { AwgTextField {
id: junkPacketCountTextField id: junkPacketCountTextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("Jc - Junk packet count") headerText: qsTr("Jc - Junk packet count")
textField.text: serverJunkPacketCount textField.text: serverJunkPacketCount
textField.validator: IntValidator { bottom: 0 }
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text === "") {
textField.text = "0"
}
if (textField.text !== serverJunkPacketCount) { if (textField.text !== serverJunkPacketCount) {
serverJunkPacketCount = textField.text serverJunkPacketCount = textField.text
} }
} }
checkEmptyText: true
} }
TextFieldWithHeaderType { AwgTextField {
id: junkPacketMinSizeTextField id: junkPacketMinSizeTextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("Jmin - Junk packet minimum size") headerText: qsTr("Jmin - Junk packet minimum size")
textField.text: serverJunkPacketMinSize textField.text: serverJunkPacketMinSize
textField.validator: IntValidator { bottom: 0 }
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== serverJunkPacketMinSize) { if (textField.text !== serverJunkPacketMinSize) {
serverJunkPacketMinSize = textField.text serverJunkPacketMinSize = textField.text
} }
} }
checkEmptyText: true
} }
TextFieldWithHeaderType { AwgTextField {
id: junkPacketMaxSizeTextField id: junkPacketMaxSizeTextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("Jmax - Junk packet maximum size") headerText: qsTr("Jmax - Junk packet maximum size")
textField.text: serverJunkPacketMaxSize textField.text: serverJunkPacketMaxSize
textField.validator: IntValidator { bottom: 0 }
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== serverJunkPacketMaxSize) { if (textField.text !== serverJunkPacketMaxSize) {
serverJunkPacketMaxSize = textField.text serverJunkPacketMaxSize = textField.text
} }
} }
checkEmptyText: true
} }
TextFieldWithHeaderType { AwgTextField {
id: initPacketJunkSizeTextField id: initPacketJunkSizeTextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("S1 - Init packet junk size") headerText: qsTr("S1 - Init packet junk size")
textField.text: serverInitPacketJunkSize textField.text: serverInitPacketJunkSize
textField.validator: IntValidator { bottom: 0 }
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== serverInitPacketJunkSize) { if (textField.text !== serverInitPacketJunkSize) {
serverInitPacketJunkSize = textField.text serverInitPacketJunkSize = textField.text
} }
} }
checkEmptyText: true
onActiveFocusChanged: {
if(activeFocus) {
listview.positionViewAtEnd()
}
}
} }
TextFieldWithHeaderType { AwgTextField {
id: responsePacketJunkSizeTextField id: responsePacketJunkSizeTextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("S2 - Response packet junk size") headerText: qsTr("S2 - Response packet junk size")
textField.text: serverResponsePacketJunkSize textField.text: serverResponsePacketJunkSize
textField.validator: IntValidator { bottom: 0 }
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== serverResponsePacketJunkSize) { if (textField.text !== serverResponsePacketJunkSize) {
serverResponsePacketJunkSize = textField.text serverResponsePacketJunkSize = textField.text
} }
} }
checkEmptyText: true
onActiveFocusChanged: {
if(activeFocus) {
listview.positionViewAtEnd()
}
}
} }
TextFieldWithHeaderType { // AwgTextField {
id: cookieReplyPacketJunkSizeTextField // id: cookieReplyPacketJunkSizeTextField
Layout.fillWidth: true // headerText: qsTr("S3 - Cookie reply packet junk size")
Layout.topMargin: 16 // textField.text: serverCookieReplyPacketJunkSize
headerText: qsTr("S3 - Cookie reply packet junk size") // textField.onEditingFinished: {
textField.text: serverCookieReplyPacketJunkSize // if (textField.text !== serverCookieReplyPacketJunkSize) {
textField.validator: IntValidator { bottom: 0 } // serverCookieReplyPacketJunkSize = textField.text
// }
// }
// }
textField.onEditingFinished: { // AwgTextField {
if (textField.text !== serverCookieReplyPacketJunkSize) { // id: transportPacketJunkSizeTextField
serverCookieReplyPacketJunkSize = textField.text // headerText: qsTr("S4 - Transport packet junk size")
} // textField.text: serverTransportPacketJunkSize
}
checkEmptyText: true // textField.onEditingFinished: {
// if (textField.text !== serverTransportPacketJunkSize) {
// serverTransportPacketJunkSize = textField.text
// }
// }
// }
onActiveFocusChanged: { AwgTextField {
if(activeFocus) {
listview.positionViewAtEnd()
}
}
}
TextFieldWithHeaderType {
id: transportPacketJunkSizeTextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("S4 - Transport packet junk size")
textField.text: serverTransportPacketJunkSize
textField.validator: IntValidator { bottom: 0 }
textField.onEditingFinished: {
if (textField.text !== serverTransportPacketJunkSize) {
serverTransportPacketJunkSize = textField.text
}
}
checkEmptyText: true
onActiveFocusChanged: {
if(activeFocus) {
listview.positionViewAtEnd()
}
}
}
TextFieldWithHeaderType {
id: initPacketMagicHeaderTextField id: initPacketMagicHeaderTextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("H1 - Init packet magic header") headerText: qsTr("H1 - Init packet magic header")
textField.text: serverInitPacketMagicHeader textField.text: serverInitPacketMagicHeader
textField.validator: IntValidator { bottom: 0 }
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== serverInitPacketMagicHeader) { if (textField.text !== serverInitPacketMagicHeader) {
serverInitPacketMagicHeader = textField.text serverInitPacketMagicHeader = textField.text
} }
} }
checkEmptyText: true
} }
TextFieldWithHeaderType { AwgTextField {
id: responsePacketMagicHeaderTextField id: responsePacketMagicHeaderTextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("H2 - Response packet magic header") headerText: qsTr("H2 - Response packet magic header")
textField.text: serverResponsePacketMagicHeader textField.text: serverResponsePacketMagicHeader
textField.validator: IntValidator { bottom: 0 }
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== serverResponsePacketMagicHeader) { if (textField.text !== serverResponsePacketMagicHeader) {
serverResponsePacketMagicHeader = textField.text serverResponsePacketMagicHeader = textField.text
} }
} }
checkEmptyText: true
} }
TextFieldWithHeaderType { AwgTextField {
id: underloadPacketMagicHeaderTextField id: underloadPacketMagicHeaderTextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("H3 - Underload packet magic header") headerText: qsTr("H3 - Underload packet magic header")
textField.text: serverUnderloadPacketMagicHeader textField.text: serverUnderloadPacketMagicHeader
textField.validator: IntValidator { bottom: 0 }
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== serverUnderloadPacketMagicHeader) { if (textField.text !== serverUnderloadPacketMagicHeader) {
serverUnderloadPacketMagicHeader = textField.text serverUnderloadPacketMagicHeader = textField.text
} }
} }
checkEmptyText: true
} }
TextFieldWithHeaderType { AwgTextField {
id: transportPacketMagicHeaderTextField id: transportPacketMagicHeaderTextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("H4 - Transport packet magic header") headerText: qsTr("H4 - Transport packet magic header")
textField.text: serverTransportPacketMagicHeader textField.text: serverTransportPacketMagicHeader
textField.validator: IntValidator { bottom: 0 }
textField.onEditingFinished: { textField.onEditingFinished: {
if (textField.text !== serverTransportPacketMagicHeader) { if (textField.text !== serverTransportPacketMagicHeader) {
serverTransportPacketMagicHeader = textField.text serverTransportPacketMagicHeader = textField.text
} }
} }
checkEmptyText: true
} }
@ -377,21 +283,12 @@ PageType {
responsePacketMagicHeaderTextField.errorText === "" && responsePacketMagicHeaderTextField.errorText === "" &&
initPacketMagicHeaderTextField.errorText === "" && initPacketMagicHeaderTextField.errorText === "" &&
responsePacketJunkSizeTextField.errorText === "" && responsePacketJunkSizeTextField.errorText === "" &&
cookieReplyHeaderJunkTextField.errorText === "" && // cookieReplyHeaderJunkTextField.errorText === "" &&
transportHeaderJunkTextField.errorText === "" && // transportHeaderJunkTextField.errorText === "" &&
initPacketJunkSizeTextField.errorText === "" && initPacketJunkSizeTextField.errorText === "" &&
junkPacketMaxSizeTextField.errorText === "" && junkPacketMaxSizeTextField.errorText === "" &&
junkPacketMinSizeTextField.errorText === "" && junkPacketMinSizeTextField.errorText === "" &&
junkPacketCountTextField.errorText === "" && junkPacketCountTextField.errorText === "" &&
// specialJunk1TextField.errorText === "" &&
// specialJunk2TextField.errorText === "" &&
// specialJunk3TextField.errorText === "" &&
// specialJunk4TextField.errorText === "" &&
// specialJunk5TextField.errorText === "" &&
// controlledJunk1TextField.errorText === "" &&
// controlledJunk2TextField.errorText === "" &&
// controlledJunk3TextField.errorText === "" &&
// iTimeTextField.errorText === "" &&
portTextField.errorText === "" && portTextField.errorText === "" &&
vpnAddressSubnetTextField.errorText === "" vpnAddressSubnetTextField.errorText === ""
@ -416,12 +313,17 @@ PageType {
} }
if (AwgConfigModel.isPacketSizeEqual(parseInt(initPacketJunkSizeTextField.textField.text), if (AwgConfigModel.isPacketSizeEqual(parseInt(initPacketJunkSizeTextField.textField.text),
parseInt(responsePacketJunkSizeTextField.textField.text), parseInt(responsePacketJunkSizeTextField.textField.text))) {
parseInt(cookieReplyPacketJunkSizeTextField.textField.text), PageController.showErrorMessage(qsTr("The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92)"))
parseInt(transportPacketJunkSizeTextField.textField.text))) {
PageController.showErrorMessage(qsTr("The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + S3 + cookie reply size (64) + S4 + transport packet size (32)"))
return return
} }
// if (AwgConfigModel.isPacketSizeEqual(parseInt(initPacketJunkSizeTextField.textField.text),
// parseInt(responsePacketJunkSizeTextField.textField.text),
// parseInt(cookieReplyPacketJunkSizeTextField.textField.text),
// parseInt(transportPacketJunkSizeTextField.textField.text))) {
// PageController.showErrorMessage(qsTr("The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + S3 + cookie reply size (64) + S4 + transport packet size (32)"))
// return
// }
} }
var headerText = qsTr("Save settings?") var headerText = qsTr("Save settings?")