diff --git a/client/daemon/daemon.cpp b/client/daemon/daemon.cpp index 133109510..63a5c7f69 100644 --- a/client/daemon/daemon.cpp +++ b/client/daemon/daemon.cpp @@ -360,15 +360,17 @@ bool Daemon::parseConfig(const QJsonObject& obj, InterfaceConfig& config) { return false; } - config.m_junkPacketCount = obj.value("Jc").toString(); - config.m_junkPacketMinSize = obj.value("Jmin").toString(); - config.m_junkPacketMaxSize = obj.value("Jmax").toString(); - config.m_initPacketJunkSize = obj.value("S1").toString(); - config.m_responsePacketJunkSize = obj.value("S2").toString(); - config.m_initPacketMagicHeader = obj.value("H1").toString(); - config.m_responsePacketMagicHeader = obj.value("H2").toString(); - config.m_underloadPacketMagicHeader = obj.value("H3").toString(); - config.m_transportPacketMagicHeader = obj.value("H4").toString(); + if (!obj.value("Jc").isNull()) { + config.m_junkPacketCount = obj.value("Jc").toString(); + config.m_junkPacketMinSize = obj.value("Jmin").toString(); + config.m_junkPacketMaxSize = obj.value("Jmax").toString(); + config.m_initPacketJunkSize = obj.value("S1").toString(); + config.m_responsePacketJunkSize = obj.value("S2").toString(); + config.m_initPacketMagicHeader = obj.value("H1").toString(); + config.m_responsePacketMagicHeader = obj.value("H2").toString(); + config.m_underloadPacketMagicHeader = obj.value("H3").toString(); + config.m_transportPacketMagicHeader = obj.value("H4").toString(); + } return true; } diff --git a/client/platforms/linux/daemon/wireguardutilslinux.cpp b/client/platforms/linux/daemon/wireguardutilslinux.cpp index dbb92f618..792120a7a 100644 --- a/client/platforms/linux/daemon/wireguardutilslinux.cpp +++ b/client/platforms/linux/daemon/wireguardutilslinux.cpp @@ -100,6 +100,19 @@ bool WireguardUtilsLinux::addInterface(const InterfaceConfig& config) { QTextStream out(&message); out << "private_key=" << QString(privateKey.toHex()) << "\n"; out << "replace_peers=true\n"; + + if (config.m_junkPacketCount != "") { + out << "jc=" << config.m_junkPacketCount << "\n"; + out << "jmin=" << config.m_junkPacketMinSize << "\n"; + out << "jmax=" << config.m_junkPacketMaxSize << "\n"; + out << "s1=" << config.m_initPacketJunkSize << "\n"; + out << "s2=" << config.m_responsePacketJunkSize << "\n"; + out << "h1=" << config.m_initPacketMagicHeader << "\n"; + out << "h2=" << config.m_responsePacketMagicHeader << "\n"; + out << "h3=" << config.m_underloadPacketMagicHeader << "\n"; + out << "h4=" << config.m_transportPacketMagicHeader << "\n"; + } + int err = uapiErrno(uapiCommand(message)); if (err != 0) { logger.error() << "Interface configuration failed:" << strerror(err); @@ -161,16 +174,6 @@ bool WireguardUtilsLinux::updatePeer(const InterfaceConfig& config) { out << "allowed_ip=" << ip.toString() << "\n"; } - out << "jc=" << config.m_junkPacketCount << "\n"; - out << "jmin=" << config.m_junkPacketMinSize << "\n"; - out << "jmax=" << config.m_junkPacketMaxSize << "\n"; - out << "s1=" << config.m_initPacketJunkSize << "\n"; - out << "s2=" << config.m_responsePacketJunkSize << "\n"; - out << "h1=" << config.m_initPacketMagicHeader << "\n"; - out << "h2=" << config.m_responsePacketMagicHeader << "\n"; - out << "h3=" << config.m_underloadPacketMagicHeader << "\n"; - out << "h4=" << config.m_transportPacketMagicHeader << "\n"; - // Exclude the server address, except for multihop exit servers. if ((config.m_hopType != InterfaceConfig::MultiHopExit) && (m_rtmonitor != nullptr)) { diff --git a/client/platforms/macos/daemon/wireguardutilsmacos.cpp b/client/platforms/macos/daemon/wireguardutilsmacos.cpp index 2170d69e7..ef13f4c78 100644 --- a/client/platforms/macos/daemon/wireguardutilsmacos.cpp +++ b/client/platforms/macos/daemon/wireguardutilsmacos.cpp @@ -100,6 +100,19 @@ bool WireguardUtilsMacos::addInterface(const InterfaceConfig& config) { QTextStream out(&message); out << "private_key=" << QString(privateKey.toHex()) << "\n"; out << "replace_peers=true\n"; + + if (config.m_junkPacketCount != "") { + out << "jc=" << config.m_junkPacketCount << "\n"; + out << "jmin=" << config.m_junkPacketMinSize << "\n"; + out << "jmax=" << config.m_junkPacketMaxSize << "\n"; + out << "s1=" << config.m_initPacketJunkSize << "\n"; + out << "s2=" << config.m_responsePacketJunkSize << "\n"; + out << "h1=" << config.m_initPacketMagicHeader << "\n"; + out << "h2=" << config.m_responsePacketMagicHeader << "\n"; + out << "h3=" << config.m_underloadPacketMagicHeader << "\n"; + out << "h4=" << config.m_transportPacketMagicHeader << "\n"; + } + int err = uapiErrno(uapiCommand(message)); if (err != 0) { logger.error() << "Interface configuration failed:" << strerror(err); @@ -163,17 +176,6 @@ bool WireguardUtilsMacos::updatePeer(const InterfaceConfig& config) { out << "allowed_ip=" << ip.toString() << "\n"; } - - out << "jc=" << config.m_junkPacketCount << "\n"; - out << "jmin=" << config.m_junkPacketMinSize << "\n"; - out << "jmax=" << config.m_junkPacketMaxSize << "\n"; - out << "s1=" << config.m_initPacketJunkSize << "\n"; - out << "s2=" << config.m_responsePacketJunkSize << "\n"; - out << "h1=" << config.m_initPacketMagicHeader << "\n"; - out << "h2=" << config.m_responsePacketMagicHeader << "\n"; - out << "h3=" << config.m_underloadPacketMagicHeader << "\n"; - out << "h4=" << config.m_transportPacketMagicHeader << "\n"; - // Exclude the server address, except for multihop exit servers. if ((config.m_hopType != InterfaceConfig::MultiHopExit) && (m_rtmonitor != nullptr)) { diff --git a/client/platforms/windows/daemon/wireguardutilswindows.cpp b/client/platforms/windows/daemon/wireguardutilswindows.cpp index 21df2611a..1e0a47526 100644 --- a/client/platforms/windows/daemon/wireguardutilswindows.cpp +++ b/client/platforms/windows/daemon/wireguardutilswindows.cpp @@ -165,16 +165,6 @@ bool WireguardUtilsWindows::updatePeer(const InterfaceConfig& config) { out << "allowed_ip=" << ip.toString() << "\n"; } - out << "jc=" << config.m_junkPacketCount << "\n"; - out << "jmin=" << config.m_junkPacketMinSize << "\n"; - out << "jmax=" << config.m_junkPacketMaxSize << "\n"; - out << "s1=" << config.m_initPacketJunkSize << "\n"; - out << "s2=" << config.m_responsePacketJunkSize << "\n"; - out << "h1=" << config.m_initPacketMagicHeader << "\n"; - out << "h2=" << config.m_responsePacketMagicHeader << "\n"; - out << "h3=" << config.m_underloadPacketMagicHeader << "\n"; - out << "h4=" << config.m_transportPacketMagicHeader << "\n"; - // Exclude the server address, except for multihop exit servers. if (config.m_hopType != InterfaceConfig::MultiHopExit) { m_routeMonitor.addExclusionRoute(IPAddress(config.m_serverIpv4AddrIn));