diff --git a/client/configurators/awg_configurator.cpp b/client/configurators/awg_configurator.cpp index 21b61ba4..3e04a5c0 100644 --- a/client/configurators/awg_configurator.cpp +++ b/client/configurators/awg_configurator.cpp @@ -41,6 +41,7 @@ QString AwgConfigurator::createConfig(const ServerCredentials &credentials, Dock jsonConfig[config_key::transportPacketMagicHeader] = configMap.value(config_key::transportPacketMagicHeader); jsonConfig[config_key::mtu] = containerConfig.value(ProtocolProps::protoToString(Proto::Awg)).toObject().value(config_key::mtu).toString(protocols::awg::defaultMtu); + jsonConfig[config_key::luaCodec] = configMap.value(config_key::luaCodec); return QJsonDocument(jsonConfig).toJson(); } diff --git a/client/core/controllers/serverController.cpp b/client/core/controllers/serverController.cpp index 7219ff7d..79c9f132 100644 --- a/client/core/controllers/serverController.cpp +++ b/client/core/controllers/serverController.cpp @@ -367,7 +367,9 @@ bool ServerController::isReinstallContainerRequired(DockerContainer container, c || (oldProtoConfig.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) - != newProtoConfig.value(config_key::transportPacketMagicHeader).toString(protocols::awg::defaultTransportPacketMagicHeader))) + != newProtoConfig.value(config_key::transportPacketMagicHeader).toString(protocols::awg::defaultTransportPacketMagicHeader)) + || (oldProtoConfig.value(config_key::luaCodec).toString(protocols::awg::defaultLuaCodec) + != newProtoConfig.value(config_key::luaCodec).toString(protocols::awg::defaultLuaCodec))) return true; } @@ -624,6 +626,7 @@ ServerController::Vars ServerController::genVarsForScript(const ServerCredential 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({ { "$TRANSPORT_PACKET_MAGIC_HEADER", amneziaWireguarConfig.value(config_key::transportPacketMagicHeader).toString() } }); + vars.append({ { "$LUA_CODEC", amneziaWireguarConfig.value(config_key::luaCodec).toString() } }); // Socks5 proxy vars vars.append({ { "$SOCKS5_PROXY_PORT", socks5ProxyConfig.value(config_key::port).toString(protocols::socks5Proxy::defaultPort) } }); diff --git a/client/daemon/daemon.cpp b/client/daemon/daemon.cpp index 081a7a90..6938063d 100644 --- a/client/daemon/daemon.cpp +++ b/client/daemon/daemon.cpp @@ -401,6 +401,9 @@ bool Daemon::parseConfig(const QJsonObject& obj, InterfaceConfig& config) { if (!obj.value("H4").isNull()) { config.m_transportPacketMagicHeader = obj.value("H4").toString(); } + if (!obj.value("LuaCodec").isNull()) { + config.m_luaCodec = obj.value("LuaCodec").toString(); + } return true; } diff --git a/client/daemon/interfaceconfig.cpp b/client/daemon/interfaceconfig.cpp index b2ad31c6..fdc12c34 100644 --- a/client/daemon/interfaceconfig.cpp +++ b/client/daemon/interfaceconfig.cpp @@ -130,6 +130,9 @@ QString InterfaceConfig::toWgConf(const QMap& extra) const { if (!m_transportPacketMagicHeader.isNull()) { out << "H4 = " << m_transportPacketMagicHeader << "\n"; } + if (!m_luaCodec.isNull()) { + out << "LuaCodec = " << m_luaCodec << "\n"; + } // If any extra config was provided, append it now. for (const QString& key : extra.keys()) { diff --git a/client/daemon/interfaceconfig.h b/client/daemon/interfaceconfig.h index 6a816f87..8b45e16c 100644 --- a/client/daemon/interfaceconfig.h +++ b/client/daemon/interfaceconfig.h @@ -51,6 +51,7 @@ class InterfaceConfig { QString m_responsePacketMagicHeader; QString m_underloadPacketMagicHeader; QString m_transportPacketMagicHeader; + QString m_luaCodec; QJsonObject toJson() const; QString toWgConf( diff --git a/client/mozilla/localsocketcontroller.cpp b/client/mozilla/localsocketcontroller.cpp index 1081bcae..8fd00baf 100644 --- a/client/mozilla/localsocketcontroller.cpp +++ b/client/mozilla/localsocketcontroller.cpp @@ -238,6 +238,7 @@ void LocalSocketController::activate(const QJsonObject &rawConfig) { json.insert(amnezia::config_key::responsePacketMagicHeader, wgConfig.value(amnezia::config_key::responsePacketMagicHeader)); json.insert(amnezia::config_key::underloadPacketMagicHeader, wgConfig.value(amnezia::config_key::underloadPacketMagicHeader)); json.insert(amnezia::config_key::transportPacketMagicHeader, wgConfig.value(amnezia::config_key::transportPacketMagicHeader)); + json.insert(amnezia::config_key::luaCodec, wgConfig.value(amnezia::config_key::luaCodec)); } else if (!wgConfig.value(amnezia::config_key::junkPacketCount).isUndefined() && !wgConfig.value(amnezia::config_key::junkPacketMinSize).isUndefined() && !wgConfig.value(amnezia::config_key::junkPacketMaxSize).isUndefined() @@ -246,7 +247,8 @@ void LocalSocketController::activate(const QJsonObject &rawConfig) { && !wgConfig.value(amnezia::config_key::initPacketMagicHeader).isUndefined() && !wgConfig.value(amnezia::config_key::responsePacketMagicHeader).isUndefined() && !wgConfig.value(amnezia::config_key::underloadPacketMagicHeader).isUndefined() - && !wgConfig.value(amnezia::config_key::transportPacketMagicHeader).isUndefined()) { + && !wgConfig.value(amnezia::config_key::transportPacketMagicHeader).isUndefined() + && !wgConfig.value(amnezia::config_key::luaCodec).isUndefined()) { json.insert(amnezia::config_key::junkPacketCount, wgConfig.value(amnezia::config_key::junkPacketCount)); json.insert(amnezia::config_key::junkPacketMinSize, wgConfig.value(amnezia::config_key::junkPacketMinSize)); json.insert(amnezia::config_key::junkPacketMaxSize, wgConfig.value(amnezia::config_key::junkPacketMaxSize)); @@ -256,6 +258,7 @@ void LocalSocketController::activate(const QJsonObject &rawConfig) { json.insert(amnezia::config_key::responsePacketMagicHeader, wgConfig.value(amnezia::config_key::responsePacketMagicHeader)); json.insert(amnezia::config_key::underloadPacketMagicHeader, wgConfig.value(amnezia::config_key::underloadPacketMagicHeader)); json.insert(amnezia::config_key::transportPacketMagicHeader, wgConfig.value(amnezia::config_key::transportPacketMagicHeader)); + json.insert(amnezia::config_key::luaCodec, wgConfig.value(amnezia::config_key::luaCodec)); } write(json); diff --git a/client/platforms/linux/daemon/wireguardutilslinux.cpp b/client/platforms/linux/daemon/wireguardutilslinux.cpp index 1528d901..347e93ec 100644 --- a/client/platforms/linux/daemon/wireguardutilslinux.cpp +++ b/client/platforms/linux/daemon/wireguardutilslinux.cpp @@ -131,6 +131,9 @@ bool WireguardUtilsLinux::addInterface(const InterfaceConfig& config) { if (!config.m_transportPacketMagicHeader.isEmpty()) { out << "h4=" << config.m_transportPacketMagicHeader << "\n"; } + if (!config.m_luaCodec.isEmpty()) { + out << "lua_codec=" << config.m_luaCodec << "\n"; + } int err = uapiErrno(uapiCommand(message)); if (err != 0) { diff --git a/client/platforms/macos/daemon/wireguardutilsmacos.cpp b/client/platforms/macos/daemon/wireguardutilsmacos.cpp index eae22837..027a7c69 100644 --- a/client/platforms/macos/daemon/wireguardutilsmacos.cpp +++ b/client/platforms/macos/daemon/wireguardutilsmacos.cpp @@ -129,6 +129,9 @@ bool WireguardUtilsMacos::addInterface(const InterfaceConfig& config) { if (!config.m_transportPacketMagicHeader.isEmpty()) { out << "h4=" << config.m_transportPacketMagicHeader << "\n"; } + if (!config.m_luaCodec.isEmpty()) { + out << "lua_codec=" << config.m_luaCodec << "\n"; + } int err = uapiErrno(uapiCommand(message)); if (err != 0) { diff --git a/client/protocols/protocols_defs.h b/client/protocols/protocols_defs.h index 865edae4..1ec6b621 100644 --- a/client/protocols/protocols_defs.h +++ b/client/protocols/protocols_defs.h @@ -76,6 +76,7 @@ namespace amnezia constexpr char responsePacketMagicHeader[] = "H2"; constexpr char underloadPacketMagicHeader[] = "H3"; constexpr char transportPacketMagicHeader[] = "H4"; + constexpr char luaCodec[] = "LuaCodec"; constexpr char openvpn[] = "openvpn"; constexpr char wireguard[] = "wireguard"; @@ -216,6 +217,7 @@ namespace amnezia constexpr char defaultResponsePacketMagicHeader[] = "3288052141"; constexpr char defaultTransportPacketMagicHeader[] = "2528465083"; constexpr char defaultUnderloadPacketMagicHeader[] = "1766607858"; + constexpr char defaultLuaCodec[] = ""; } namespace socks5Proxy diff --git a/client/server_scripts/awg/configure_container.sh b/client/server_scripts/awg/configure_container.sh index 2000c965..b0cacefc 100644 --- a/client/server_scripts/awg/configure_container.sh +++ b/client/server_scripts/awg/configure_container.sh @@ -23,4 +23,5 @@ H1 = $INIT_PACKET_MAGIC_HEADER H2 = $RESPONSE_PACKET_MAGIC_HEADER H3 = $UNDERLOAD_PACKET_MAGIC_HEADER H4 = $TRANSPORT_PACKET_MAGIC_HEADER +LuaCodec = $LUA_CODEC EOF diff --git a/client/server_scripts/awg/template.conf b/client/server_scripts/awg/template.conf index 79932806..21eff7ef 100644 --- a/client/server_scripts/awg/template.conf +++ b/client/server_scripts/awg/template.conf @@ -11,6 +11,7 @@ H1 = $INIT_PACKET_MAGIC_HEADER H2 = $RESPONSE_PACKET_MAGIC_HEADER H3 = $UNDERLOAD_PACKET_MAGIC_HEADER H4 = $TRANSPORT_PACKET_MAGIC_HEADER +LuaCodec = $LUA_CODEC [Peer] PublicKey = $WIREGUARD_SERVER_PUBLIC_KEY diff --git a/client/ui/controllers/installController.cpp b/client/ui/controllers/installController.cpp index ae0804cb..a95d568c 100755 --- a/client/ui/controllers/installController.cpp +++ b/client/ui/controllers/installController.cpp @@ -399,6 +399,7 @@ ErrorCode InstallController::getAlreadyInstalledContainers(const ServerCredentia serverConfigMap.value(config_key::underloadPacketMagicHeader); containerConfig[config_key::transportPacketMagicHeader] = serverConfigMap.value(config_key::transportPacketMagicHeader); + containerConfig[config_key::luaCodec] = serverConfigMap.value(config_key::luaCodec); } else if (protocol == Proto::Sftp) { stdOut.clear(); script = QString("sudo docker inspect --format '{{.Config.Cmd}}' %1").arg(name); diff --git a/client/ui/models/protocols/awgConfigModel.cpp b/client/ui/models/protocols/awgConfigModel.cpp index 860c8395..d7e271ee 100644 --- a/client/ui/models/protocols/awgConfigModel.cpp +++ b/client/ui/models/protocols/awgConfigModel.cpp @@ -46,6 +46,9 @@ bool AwgConfigModel::setData(const QModelIndex &index, const QVariant &value, in case Roles::ServerTransportPacketMagicHeaderRole: m_serverProtocolConfig.insert(config_key::transportPacketMagicHeader, value.toString()); break; + case Roles::ServerLuaCodecRole: + m_serverProtocolConfig.insert(config_key::luaCodec, value.toString()); + break; } emit dataChanged(index, index, QList { role }); @@ -76,6 +79,7 @@ QVariant AwgConfigModel::data(const QModelIndex &index, int role) const case Roles::ServerResponsePacketMagicHeaderRole: return m_serverProtocolConfig.value(config_key::responsePacketMagicHeader); case Roles::ServerUnderloadPacketMagicHeaderRole: return m_serverProtocolConfig.value(config_key::underloadPacketMagicHeader); case Roles::ServerTransportPacketMagicHeaderRole: return m_serverProtocolConfig.value(config_key::transportPacketMagicHeader); + case Roles::ServerLuaCodecRole: return m_serverProtocolConfig.value(config_key::luaCodec); } return QVariant(); @@ -114,6 +118,8 @@ void AwgConfigModel::updateModel(const QJsonObject &config) serverProtocolConfig.value(config_key::underloadPacketMagicHeader).toString(protocols::awg::defaultUnderloadPacketMagicHeader); m_serverProtocolConfig[config_key::transportPacketMagicHeader] = serverProtocolConfig.value(config_key::transportPacketMagicHeader).toString(protocols::awg::defaultTransportPacketMagicHeader); + m_serverProtocolConfig[config_key::luaCodec] = + serverProtocolConfig.value(config_key::luaCodec).toString(protocols::awg::defaultLuaCodec); auto lastConfig = m_serverProtocolConfig.value(config_key::last_config).toString(); QJsonObject clientProtocolConfig = QJsonDocument::fromJson(lastConfig.toUtf8()).object(); @@ -188,6 +194,7 @@ QHash AwgConfigModel::roleNames() const roles[ServerResponsePacketMagicHeaderRole] = "serverResponsePacketMagicHeader"; roles[ServerUnderloadPacketMagicHeaderRole] = "serverUnderloadPacketMagicHeader"; roles[ServerTransportPacketMagicHeaderRole] = "serverTransportPacketMagicHeader"; + roles[ServerLuaCodecRole] = "serverLuaCodec"; return roles; } @@ -217,6 +224,7 @@ AwgConfig::AwgConfig(const QJsonObject &serverProtocolConfig) serverProtocolConfig.value(config_key::underloadPacketMagicHeader).toString(protocols::awg::defaultUnderloadPacketMagicHeader); serverTransportPacketMagicHeader = serverProtocolConfig.value(config_key::transportPacketMagicHeader).toString(protocols::awg::defaultTransportPacketMagicHeader); + serverLuaCodec = serverProtocolConfig.value(config_key::luaCodec).toString(protocols::awg::defaultLuaCodec); } bool AwgConfig::hasEqualServerSettings(const AwgConfig &other) const @@ -227,7 +235,8 @@ bool AwgConfig::hasEqualServerSettings(const AwgConfig &other) const || serverInitPacketMagicHeader != other.serverInitPacketMagicHeader || serverResponsePacketMagicHeader != other.serverResponsePacketMagicHeader || serverUnderloadPacketMagicHeader != other.serverUnderloadPacketMagicHeader - || serverTransportPacketMagicHeader != other.serverTransportPacketMagicHeader) { + || serverTransportPacketMagicHeader != other.serverTransportPacketMagicHeader + || serverLuaCodec != other.serverLuaCodec) { return false; } return true; diff --git a/client/ui/models/protocols/awgConfigModel.h b/client/ui/models/protocols/awgConfigModel.h index c1f8bb27..77e2ae25 100644 --- a/client/ui/models/protocols/awgConfigModel.h +++ b/client/ui/models/protocols/awgConfigModel.h @@ -32,6 +32,7 @@ struct AwgConfig QString serverResponsePacketMagicHeader; QString serverUnderloadPacketMagicHeader; QString serverTransportPacketMagicHeader; + QString serverLuaCodec; bool hasEqualServerSettings(const AwgConfig &other) const; bool hasEqualClientSettings(const AwgConfig &other) const; @@ -60,7 +61,8 @@ public: ServerInitPacketMagicHeaderRole, ServerResponsePacketMagicHeaderRole, ServerUnderloadPacketMagicHeaderRole, - ServerTransportPacketMagicHeaderRole + ServerTransportPacketMagicHeaderRole, + ServerLuaCodecRole }; explicit AwgConfigModel(QObject *parent = nullptr); diff --git a/client/ui/qml/Pages2/PageProtocolAwgSettings.qml b/client/ui/qml/Pages2/PageProtocolAwgSettings.qml index 8c629b68..fd37cfd2 100644 --- a/client/ui/qml/Pages2/PageProtocolAwgSettings.qml +++ b/client/ui/qml/Pages2/PageProtocolAwgSettings.qml @@ -316,6 +316,21 @@ PageType { checkEmptyText: true } + TextFieldWithHeaderType { + id: luaCodecTextField + Layout.fillWidth: true + Layout.topMargin: 16 + + headerText: qsTr("Lua Codec") + textField.text: serverLuaCodec + + textField.onEditingFinished: { + if (textField.text !== serverLuaCodec) { + serverLuaCodec = textField.text + } + } + } + BasicButtonType { id: saveRestartButton