From 48a09745297a0c26e73b547f4b21c848a717abfe Mon Sep 17 00:00:00 2001 From: Aaron Rainbolt Date: Wed, 25 Oct 2023 22:58:07 -0500 Subject: [PATCH] add MTU load/save for Ethernet, reorganize yet more stuff --- connectionsettingsengine.cpp | 50 ++++++++++++++++++++++++++---------- connectionsettingsengine.h | 15 ++++++++--- 2 files changed, 48 insertions(+), 17 deletions(-) diff --git a/connectionsettingsengine.cpp b/connectionsettingsengine.cpp index 0b8fb8b..344ef94 100644 --- a/connectionsettingsengine.cpp +++ b/connectionsettingsengine.cpp @@ -1,6 +1,9 @@ #include "connectionsettingsengine.h" #include +bool ConnectionSettingsEngine::wipeClonedMacAddress = false; +QString ConnectionSettingsEngine::targetConnUuidStr = QString(); + /* * The configuration map: * @@ -80,8 +83,10 @@ QVariantMap ConnectionSettingsEngine::readConnectionSettings(QString connUuidStr if (!connWiredSetting.isNull()) { result.insert("clonedMacAddress", NetworkManager::macAddressAsString(connWiredSetting->clonedMacAddress())); + result.insert("mtu", connWiredSetting->mtu()); } else if (!connWirelessSetting.isNull()) { result.insert("clonedMacAddress", NetworkManager::macAddressAsString(connWirelessSetting->clonedMacAddress())); + result.insert("mtu", connWirelessSetting->mtu()); } // TODO: pick up here @@ -91,8 +96,7 @@ QVariantMap ConnectionSettingsEngine::readConnectionSettings(QString connUuidStr void ConnectionSettingsEngine::modifyConnectionSettings(QString connUuidStr, QVariantMap settings) { // Contains adapted code from plasma-nm - bool wipeClonedMacAddress = false; - + wipeClonedMacAddress = false; NetworkManager::Connection::Ptr conn = NetworkManager::findConnectionByUuid(connUuidStr); NetworkManager::ConnectionSettings::Ptr connSettings = conn->settings(); NetworkManager::WiredSetting::Ptr connWiredSetting = connSettings->setting(NetworkManager::Setting::Wired).dynamicCast(); @@ -138,23 +142,43 @@ void ConnectionSettingsEngine::modifyConnectionSettings(QString connUuidStr, QVa connSettings->setInterfaceName(settings["device"].toString()); } - if (settings["clonedMacAddress"].isValid()) { - QByteArray macBin = NetworkManager::macAddressFromString(settings["clonedMacAddress"].toString()); - if (settings["clonedMacAddress"].toString().length() != 17) { - wipeClonedMacAddress = true; - } else { - if (!connWiredSetting.isNull()) { - connWiredSetting->setClonedMacAddress(macBin); - } else if (!connWirelessSetting.isNull()) { - connWirelessSetting->setClonedMacAddress(macBin); - } + QByteArray macBin = NetworkManager::macAddressFromString(settings["clonedMacAddress"].toString()); + if (settings["clonedMacAddress"].toString().length() != 17) { + wipeClonedMacAddress = true; + } + + if (!connWiredSetting.isNull()) { + if (!wipeClonedMacAddress) { + connWiredSetting->setClonedMacAddress(macBin); + } + + if (settings["mtu"].isValid()) { + connWiredSetting->setMtu(settings["mtu"].toUInt()); + } + } else if (!connWirelessSetting.isNull()) { + if (!wipeClonedMacAddress) { + connWirelessSetting->setClonedMacAddress(macBin); + } + + if (settings["mtu"].isValid()) { + connWirelessSetting->setMtu(settings["mtu"].toUInt()); } } // TODO: pick up here - conn->update(connSettings->toMap()); + targetConnUuidStr = connUuidStr; + QDBusPendingReply<> reply = conn->update(connSettings->toMap()); + auto watcher = new QDBusPendingCallWatcher(reply); + QObject::connect(watcher, &QDBusPendingCallWatcher::finished, saveReplyFinished); +} +void ConnectionSettingsEngine::saveReplyFinished() +{ + NetworkManager::Connection::Ptr conn = NetworkManager::findConnectionByUuid(targetConnUuidStr); + NetworkManager::ConnectionSettings::Ptr connSettings = conn->settings(); + NetworkManager::WiredSetting::Ptr connWiredSetting = connSettings->setting(NetworkManager::Setting::Wired).dynamicCast(); + NetworkManager::WirelessSetting::Ptr connWirelessSetting = connSettings->setting(NetworkManager::Setting::Wireless).dynamicCast(); if (wipeClonedMacAddress) { // Wiping a MAC address with NetworkManagerQt is surprisingly difficult, so we do it with nmcli instead. QProcess clonedMacWiper; diff --git a/connectionsettingsengine.h b/connectionsettingsengine.h index f931c53..f32ff5f 100644 --- a/connectionsettingsengine.h +++ b/connectionsettingsengine.h @@ -1,10 +1,6 @@ #ifndef CONNECTIONSETTINGSENGINE_H #define CONNECTIONSETTINGSENGINE_H -#include -#include -#include -#include #include #include #include @@ -13,6 +9,12 @@ #include #include #include +#include +#include +#include +#include +#include +#include class ConnectionSettingsEngine { @@ -39,8 +41,13 @@ public: static QVariantMap readConnectionSettings(QString connUuidStr); static void modifyConnectionSettings(QString connUuidStr, QVariantMap settings); +private slots: + static void saveReplyFinished(); + private: static QString userName(); + static QString targetConnUuidStr; + static bool wipeClonedMacAddress; }; #endif // CONNECTIONSETTINGSENGINE_H