Skip to content

Commit

Permalink
feature: added lua codec parameter to awg
Browse files Browse the repository at this point in the history
  • Loading branch information
Nethius committed Feb 23, 2025
1 parent 0bca78e commit d241c82
Show file tree
Hide file tree
Showing 15 changed files with 55 additions and 4 deletions.
1 change: 1 addition & 0 deletions client/configurators/awg_configurator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
5 changes: 4 additions & 1 deletion client/core/controllers/serverController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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) } });
Expand Down
3 changes: 3 additions & 0 deletions client/daemon/daemon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
3 changes: 3 additions & 0 deletions client/daemon/interfaceconfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,9 @@ QString InterfaceConfig::toWgConf(const QMap<QString, QString>& 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()) {
Expand Down
1 change: 1 addition & 0 deletions client/daemon/interfaceconfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ class InterfaceConfig {
QString m_responsePacketMagicHeader;
QString m_underloadPacketMagicHeader;
QString m_transportPacketMagicHeader;
QString m_luaCodec;

QJsonObject toJson() const;
QString toWgConf(
Expand Down
5 changes: 4 additions & 1 deletion client/mozilla/localsocketcontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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));
Expand All @@ -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);
Expand Down
3 changes: 3 additions & 0 deletions client/platforms/linux/daemon/wireguardutilslinux.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
3 changes: 3 additions & 0 deletions client/platforms/macos/daemon/wireguardutilsmacos.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
2 changes: 2 additions & 0 deletions client/protocols/protocols_defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -216,6 +217,7 @@ namespace amnezia
constexpr char defaultResponsePacketMagicHeader[] = "3288052141";
constexpr char defaultTransportPacketMagicHeader[] = "2528465083";
constexpr char defaultUnderloadPacketMagicHeader[] = "1766607858";
constexpr char defaultLuaCodec[] = "";
}

namespace socks5Proxy
Expand Down
1 change: 1 addition & 0 deletions client/server_scripts/awg/configure_container.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
1 change: 1 addition & 0 deletions client/server_scripts/awg/template.conf
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions client/ui/controllers/installController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
11 changes: 10 additions & 1 deletion client/ui/models/protocols/awgConfigModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 });
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -188,6 +194,7 @@ QHash<int, QByteArray> AwgConfigModel::roleNames() const
roles[ServerResponsePacketMagicHeaderRole] = "serverResponsePacketMagicHeader";
roles[ServerUnderloadPacketMagicHeaderRole] = "serverUnderloadPacketMagicHeader";
roles[ServerTransportPacketMagicHeaderRole] = "serverTransportPacketMagicHeader";
roles[ServerLuaCodecRole] = "serverLuaCodec";

return roles;
}
Expand Down Expand Up @@ -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
Expand All @@ -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;
Expand Down
4 changes: 3 additions & 1 deletion client/ui/models/protocols/awgConfigModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -60,7 +61,8 @@ class AwgConfigModel : public QAbstractListModel
ServerInitPacketMagicHeaderRole,
ServerResponsePacketMagicHeaderRole,
ServerUnderloadPacketMagicHeaderRole,
ServerTransportPacketMagicHeaderRole
ServerTransportPacketMagicHeaderRole,
ServerLuaCodecRole
};

explicit AwgConfigModel(QObject *parent = nullptr);
Expand Down
15 changes: 15 additions & 0 deletions client/ui/qml/Pages2/PageProtocolAwgSettings.qml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down

0 comments on commit d241c82

Please sign in to comment.