From d2714dca029e922f84ce20b4f6ff2516f5c45cd0 Mon Sep 17 00:00:00 2001 From: arcan1s Date: Thu, 20 Aug 2015 00:13:09 +0300 Subject: [PATCH] some library refactoring --- sources/3rdparty/task | 2 +- sources/gui/docs/netctl-gui-dbus-api.html | 6 +- sources/gui/src/calls.cpp | 4 +- sources/helper/src/netctladaptor.cpp | 16 +- sources/helper/src/netctladaptor.h | 6 +- .../include/netctlgui/netctlinteract.h | 112 +++-- .../include/netctlgui/netctlinterface.h | 28 +- .../include/netctlgui/netctlprofile.h | 20 +- .../include/netctlgui/wpasupinteract.h | 45 +- sources/netctlgui/src/netctlinteract.cpp | 444 +++++++----------- sources/netctlgui/src/netctlinterface.cpp | 41 +- sources/netctlgui/src/netctlprofile.cpp | 110 ++--- sources/netctlgui/src/wpasupinteract.cpp | 212 ++++----- sources/test/testnetctl.cpp | 2 +- 14 files changed, 448 insertions(+), 600 deletions(-) diff --git a/sources/3rdparty/task b/sources/3rdparty/task index d279820..dd52af0 160000 --- a/sources/3rdparty/task +++ b/sources/3rdparty/task @@ -1 +1 @@ -Subproject commit d2798204a1a84a23a9510aeda73d5b9b75d2c8eb +Subproject commit dd52af08c9d6a2c8652d2d5e21bc2a433efb497a diff --git a/sources/gui/docs/netctl-gui-dbus-api.html b/sources/gui/docs/netctl-gui-dbus-api.html index 09de81a..888d85f 100644 --- a/sources/gui/docs/netctl-gui-dbus-api.html +++ b/sources/gui/docs/netctl-gui-dbus-api.html @@ -290,12 +290,12 @@ small { - QString ActiveProfile() + QStringList ActiveProfile() returns active profile from netctl or netctl-auto no - QString ActiveProfileStatus() + QStringList ActiveProfileStatus() returns active profile status from netctl or netctl-auto. May be netctl-auto, active (enabled), active (static), inactive (enabled), inactive (static) no @@ -305,7 +305,7 @@ small { no - QString netctlActiveProfile() + QStringList netctlActiveProfile() returns active profile from netctl even if netctl-auto is running no diff --git a/sources/gui/src/calls.cpp b/sources/gui/src/calls.cpp index 5f1f7ff..0edb9d7 100644 --- a/sources/gui/src/calls.cpp +++ b/sources/gui/src/calls.cpp @@ -177,7 +177,7 @@ InterfaceAnswer connectToEssid(const QString essid, QMap settin } -netctlInformation generalInformation(NetctlInterface* interface, const bool useHelper, +netctlInformation generalInformation(NetctlInterface *interface, const bool useHelper, const bool debug) { if (debug) qDebug() << PDEBUG; @@ -204,7 +204,7 @@ netctlInformation generalInformation(NetctlInterface* interface, const bool useH } -QMap profileInformation(const QString profile, NetctlInterface* interface, +QMap profileInformation(const QString profile, NetctlInterface *interface, const bool useHelper, const bool debug) { if (!useHelper) return interface->profileSettings(profile); diff --git a/sources/helper/src/netctladaptor.cpp b/sources/helper/src/netctladaptor.cpp index 6c3ebd6..2ba1f53 100644 --- a/sources/helper/src/netctladaptor.cpp +++ b/sources/helper/src/netctladaptor.cpp @@ -39,25 +39,25 @@ NetctlAdaptor::~NetctlAdaptor() // netctlCommand -QString NetctlAdaptor::ActiveProfile() +QStringList NetctlAdaptor::ActiveProfile() { if (isNetctlAutoActive()) return netctlCommand->autoGetActiveProfile(); else - return netctlCommand->getActiveProfile().join(QChar('|')); + return netctlCommand->getActiveProfile(); } -QString NetctlAdaptor::ActiveProfileStatus() +QStringList NetctlAdaptor::ActiveProfileStatus() { if (isNetctlAutoActive()) - return QString("netctl-auto"); + return QStringList() << QString("netctl-auto"); else { QStringList status; - QStringList profiles = ActiveProfile().split(QChar('|')); + QStringList profiles = ActiveProfile(); for (int i=0; igetProfileStatus(profiles[i])); - return status.join(QChar('|')); + return status; } } @@ -108,9 +108,9 @@ bool NetctlAdaptor::isProfileEnabled(const QString profile) } -QString NetctlAdaptor::netctlActiveProfile() +QStringList NetctlAdaptor::netctlActiveProfile() { - return netctlCommand->getActiveProfile().join(QChar('|')); + return netctlCommand->getActiveProfile(); } diff --git a/sources/helper/src/netctladaptor.h b/sources/helper/src/netctladaptor.h index 5fe3c93..1d07f6a 100644 --- a/sources/helper/src/netctladaptor.h +++ b/sources/helper/src/netctladaptor.h @@ -37,8 +37,8 @@ public: public slots: // netctlCommand - QString ActiveProfile(); - QString ActiveProfileStatus(); + QStringList ActiveProfile(); + QStringList ActiveProfileStatus(); bool autoIsProfileActive(const QString profile); bool autoIsProfileEnabled(const QString profile); QStringList Information(); @@ -46,7 +46,7 @@ public slots: bool isNetctlAutoEnabled(); bool isProfileActive(const QString profile); bool isProfileEnabled(const QString profile); - QString netctlActiveProfile(); + QStringList netctlActiveProfile(); QStringList netctlProfileList(); QStringList netctlVerboseProfileList(); QStringList ProfileList(); diff --git a/sources/netctlgui/include/netctlgui/netctlinteract.h b/sources/netctlgui/include/netctlgui/netctlinteract.h index 8744bc2..9f6324c 100644 --- a/sources/netctlgui/include/netctlgui/netctlinteract.h +++ b/sources/netctlgui/include/netctlgui/netctlinteract.h @@ -30,10 +30,9 @@ #include #include -#include "version.h" - class NetctlProfile; +struct TaskResult; /** * @struct netctlProfileInfo @@ -94,81 +93,75 @@ public: /** * @brief Netctl class destructor */ - ~Netctl(); + virtual ~Netctl(); // general information /** * @brief method which returns active profile name - * @return profile name or "" + * @return Netctl::getActiveProfileTemplate() */ - QStringList getActiveProfile(); + QStringList getActiveProfile() const; /** * @brief method which returns active profile name from netctl-auto - * @return profile name or "" + * @return Netctl::getActiveProfileTemplate() */ - QString autoGetActiveProfile(); + QStringList autoGetActiveProfile() const; /** * @brief method which returns profile informations from netctl - * @return list of profiles + * @return Netctl::getProfileListTemplate() */ - QList getProfileList(); + QList getProfileList() const; /** * @brief method which returns profile informations from netctl-auto - * @return list of profiles from netctl-auto + * @return Netctl::getProfileListTemplate() */ - QList getProfileListFromNetctlAuto(); - /** - * @brief method which gets description from profile - * @param profile profile name - * @return profile description or "" - */ - Q_DECL_DEPRECATED QString getProfileDescription(const QString profile); + QList getProfileListFromNetctlAuto() const; /** * @brief method which gets profile status * @param profile profile name * @return profile status. It may be "active (enabled)", "active (static)", * "inactive (enabled)", "inactive (static)" */ - QString getProfileStatus(const QString profile); + QString getProfileStatus(const QString profile) const; /** * @brief method which checks if profile is active * @param profile profile name * @return false if profile is inactive * @return true if profile is active */ - bool isProfileActive(const QString profile); + bool isProfileActive(const QString profile) const; /** * @brief method which checks if profile is enabled * @param profile profile name * @return false if profile is disabled * @return true if profile is enabled */ - bool isProfileEnabled(const QString profile); + bool isProfileEnabled(const QString profile) const; /** * @brief method which checks if profile is active (netctl-auto) * @param profile profile name * @return false if profile is inactive * @return true if profile is active */ - bool autoIsProfileActive(const QString profile); + bool autoIsProfileActive(const QString profile) const; /** * @brief method which checks if profile is enabled (netctl-auto) * @param profile profile name * @return false if profile is disabled * @return true if profile is enabled */ - bool autoIsProfileEnabled(const QString profile); + bool autoIsProfileEnabled(const QString profile) const; /** * @brief method which checks netctl-auto autoload status * @return false if netctl-auto is disabled * @return true if netctl-auto is enabled */ - bool isNetctlAutoEnabled(); + bool isNetctlAutoEnabled() const; /** * @brief method which checks netctl-auto status * @return false if netctl-auto is inactive * @return true if netctl-auto is active */ - bool isNetctlAutoRunning(); + bool isNetctlAutoRunning() const; /** * @brief method which check system configuration and return recommended values to keys * @return recommended parametrs @@ -178,7 +171,7 @@ public: * @brief method which gets wireless interface list from PREFERED_IFACE and IFACE_DIR * @return interface list. If PREFERED_IFACE is not empty it will be first element */ - QStringList getWirelessInterfaceList(); + QStringList getWirelessInterfaceList() const; public slots: // functions @@ -189,101 +182,101 @@ public slots: * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool enableProfile(const QString profile); + bool enableProfile(const QString profile) const; /** * @brief method which force starts profile * @param profile profile name * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool forceStartProfile(const QString profile); + bool forceStartProfile(const QString profile) const; /** * @brief method which force stops profile * @param profile profile name * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool forceStopProfile(const QString profile); + bool forceStopProfile(const QString profile) const; /** * @brief method which reenables profile * @param profile profile name * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool reenableProfile(const QString profile); + bool reenableProfile(const QString profile) const; /** * @brief method which restarts profile * @param profile profile name * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool restartProfile(const QString profile); + bool restartProfile(const QString profile) const; /** * @brief method which starts or stops profile * @param profile profile name * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool startProfile(const QString profile); + bool startProfile(const QString profile) const; /** * @brief method which stops all profiles * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool stopAllProfiles(); + bool stopAllProfiles() const; /** * @brief method which starts another profile * @param profile profile name * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool switchToProfile(const QString profile); + bool switchToProfile(const QString profile) const; // netctl-auto /** * @brief method which sets all profiles disabled (netctl-auto) * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool autoDisableAllProfiles(); + bool autoDisableAllProfiles() const; /** * @brief method which sets profile disabled or enabled (netctl-auto) * @param profile profile name * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool autoEnableProfile(const QString profile); + bool autoEnableProfile(const QString profile) const; /** * @brief method which sets all profiles enabled (netctl-auto) * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool autoEnableAllProfiles(); + bool autoEnableAllProfiles() const; /** * @brief method which switchs to profile (netctl-auto) * @param profile profile name * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool autoStartProfile(const QString profile); + bool autoStartProfile(const QString profile) const; // netctl-auto service /** * @brief method which sets netctl-auto service enabled or disabled * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool autoEnableService(); + bool autoEnableService() const; /** * @brief method which restarted netctl-auto service * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool autoRestartService(); + bool autoRestartService() const; /** * @brief method which starts or stops netctl-auto service * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool autoStartService(); + bool autoStartService() const; private: /** @@ -297,7 +290,7 @@ private: /** * @brief use RootProcess instead of QProcess. Default is true */ - bool useSuid = true; + bool useSuid; /** * @brief directory with interfaces. Default is "/sys/class/net/" */ @@ -305,27 +298,27 @@ private: /** * @brief prefered interface for WiFi. Default is "" */ - QString mainInterface = QString(PREFERED_IFACE); + QString mainInterface; /** * @brief path to netctl command. Default is "netctl" */ - QString netctlCommand = QString(NETCTL_PATH); + QString netctlCommand; /** * @brief path to netctl-auto command. Default is "netctl-auto" */ - QString netctlAutoCommand = QString(NETCTLAUTO_PATH); + QString netctlAutoCommand; /** * @brief netctl-auto service name. Default is "netctl-auto" */ - QString netctlAutoService = QString(NETCTLAUTO_SERVICE); + QString netctlAutoService; /** * @brief path to sudo command. Default is "kdesu" */ - QString sudoCommand = QString(SUDO_PATH); + QString sudoCommand; /** * @brief path to systemctl command. Default is "systemctl" */ - QString systemctlCommand = QString(SYSTEMCTL_PATH); + QString systemctlCommand; // functions /** * @brief method which calls command @@ -333,21 +326,22 @@ private: * @param command command which will be called * @param commandLine command which will be passed to command * @param argument argument which will be passed to commandLine - * @return false if components are not found or command exit code is not equal to 0 - * @return true if the method was completed without errors + * @return process object */ - bool cmdCall(const bool sudo, const QString command, - const QString commandLine, const QString argument = 0); + TaskResult cmdCall(const bool sudo, const QString command, + const QString commandLine, const QString argument = QString()) const; /** - * @brief method which calls command and returns its output - * @param sudo set true if sudo is needed - * @param command command which will be called - * @param commandLine command which will be passed to command - * @param argument argument which will be passed to commandLine - * @return command output + * @brief method which parse output for profile data + * @param data profile list data + * @return list of active profiles if any */ - QString getCmdOutput(const bool sudo, const QString command, - const QString commandLine, const QString argument = 0); + QStringList getActiveProfileTemplate(const QList data) const; + /** + * @brief get profile list from sources + * @param isAuto use netctl-auto instead of netctl + * @return profile list + */ + QList getProfileListTemplate(const bool isAuto) const; }; diff --git a/sources/netctlgui/include/netctlgui/netctlinterface.h b/sources/netctlgui/include/netctlgui/netctlinterface.h index 09660a9..3cf7dad 100644 --- a/sources/netctlgui/include/netctlgui/netctlinterface.h +++ b/sources/netctlgui/include/netctlgui/netctlinterface.h @@ -109,7 +109,7 @@ public: /** * @brief NetctlInterface class destructor */ - ~NetctlInterface(); + virtual ~NetctlInterface(); // control methods /** * @brief method which creates and copies profile @@ -120,7 +120,7 @@ public: * @return InterfaceAnswer::True if profile is created * @return InterfaceAnswer::Error if an error occurs */ - InterfaceAnswer createProfile(const QString profile, const QMap settings); + InterfaceAnswer createProfile(const QString profile, const QMap settings) const; /** * @brief method which connects to ESSID * @remark netctl independ @@ -130,7 +130,7 @@ public: * @return InterfaceAnswer::True if profile is active * @return InterfaceAnswer::Error if an error occurs */ - InterfaceAnswer connectToEssid(const QString essid, QMap settings); + InterfaceAnswer connectToEssid(const QString essid, QMap settings) const; /** * @brief method which connects to existent profile by ESSID * @remark netctl independ @@ -139,7 +139,7 @@ public: * @return InterfaceAnswer::True if profile is active * @return InterfaceAnswer::Error if an error occurs */ - InterfaceAnswer connectToKnownEssid(const QString essid); + InterfaceAnswer connectToKnownEssid(const QString essid) const; /** * @brief method which creates wireless profile and connects to it * @remark netctl independ @@ -149,7 +149,7 @@ public: * @return InterfaceAnswer::True if profile is active * @return InterfaceAnswer::Error if an error occurs */ - InterfaceAnswer connectToUnknownEssid(const QString essid, QMap settings); + InterfaceAnswer connectToUnknownEssid(const QString essid, QMap settings) const; /** * @brief method which enables or disables selected profile and returns its status * @remark netctl only @@ -158,7 +158,7 @@ public: * @return InterfaceAnswer::True if profile is enabled * @return InterfaceAnswer::Error if an error occurs */ - InterfaceAnswer enableProfile(const QString profile); + InterfaceAnswer enableProfile(const QString profile) const; /** * @brief method which removes selected profile * @remark netctl independ @@ -166,7 +166,7 @@ public: * @return InterfaceAnswer::True if profile does not exists anymore * @return InterfaceAnswer::Error if an error occurs */ - InterfaceAnswer removeProfile(const QString profile); + InterfaceAnswer removeProfile(const QString profile) const; /** * @brief method which restarts selected profile and returns its status * @remark netctl only @@ -175,7 +175,7 @@ public: * @return InterfaceAnswer::True if profile is active * @return InterfaceAnswer::Error if an error occurs */ - InterfaceAnswer restartProfile(const QString profile); + InterfaceAnswer restartProfile(const QString profile) const; /** * @brief method which starts/stops or switchs to selected profile and returns its status * @remark netctl only @@ -184,14 +184,14 @@ public: * @return InterfaceAnswer::True if profile is active * @return InterfaceAnswer::Error if an error occurs */ - InterfaceAnswer startProfile(const QString profile); + InterfaceAnswer startProfile(const QString profile) const; /** * @brief method which stops all profiles * @remark netctl only * @return InterfaceAnswer::True if there are no errors * @return InterfaceAnswer::Error if an error occurs */ - InterfaceAnswer stopAllProfiles(); + InterfaceAnswer stopAllProfiles() const; /** * @brief method which switchs to selected profile and returns its status * @remark both netctl and netctl-auto @@ -200,26 +200,26 @@ public: * @return InterfaceAnswer::True if profile is active * @return InterfaceAnswer::Error if an error occurs */ - InterfaceAnswer switchToProfile(const QString profile); + InterfaceAnswer switchToProfile(const QString profile) const; // information /** * @brief method which returns general information * @remark both netctl and netctl-auto * @return netctlInformation structure */ - netctlInformation information(); + netctlInformation information() const; /** * @brief method which reads settings from profile * @param profile profile name * @return settings from profile */ - QMap profileSettings(const QString profile); + QMap profileSettings(const QString profile) const; /** * @brief method which returns current status * @remark both netctl and netctl-auto * @return netctlCurrent structure */ - netctlCurrent status(); + netctlCurrent status() const; private: /** diff --git a/sources/netctlgui/include/netctlgui/netctlprofile.h b/sources/netctlgui/include/netctlgui/netctlprofile.h index 9ed35a2..8bbf97f 100644 --- a/sources/netctlgui/include/netctlgui/netctlprofile.h +++ b/sources/netctlgui/include/netctlgui/netctlprofile.h @@ -30,8 +30,6 @@ #include #include -#include "version.h" - /** * @brief The NetctlProfile class interacts with netctl profiles @@ -54,21 +52,21 @@ public: /** * @brief Netctl class destructor */ - ~NetctlProfile(); + virtual ~NetctlProfile(); /** * @brief method which copies temporary profile to PROFILE_DIR * @param oldPath path to temprorary profile * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool copyProfile(const QString oldPath); + bool copyProfile(const QString oldPath) const; /** * @brief method which creates temporary profile * @param profile profile name * @param settings profile configuration. All available keys will be printed to the profile * @return temporary profile name */ - QString createProfile(const QString profile, const QMap settings); + QString createProfile(const QString profile, const QMap settings) const; /** * @brief method which check system configuration and return recommended values to keys * @return recommended parametrs @@ -79,28 +77,28 @@ public: * @param profile profile name * @return settings from profile */ - QMap getSettingsFromProfile(const QString profile); + QMap getSettingsFromProfile(const QString profile) const; /** * @brief method which return value from profile by key * @param profile profile name * @param key required key * @return value by key */ - QString getValueFromProfile(const QString profile, const QString key); + QString getValueFromProfile(const QString profile, const QString key) const; /** * @brief method which return values from profile by keys * @param profile profile name * @param keys required keys * @return values by keys */ - QStringList getValuesFromProfile(const QString profile, const QStringList keys); + QStringList getValuesFromProfile(const QString profile, const QStringList keys) const; /** * @brief method which removes profile * @param profile profile name * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool removeProfile(const QString profile); + bool removeProfile(const QString profile) const; private: /** @@ -110,7 +108,7 @@ private: /** * @brief use RootProcess instead of QProcess. Default is true */ - bool useSuid = true; + bool useSuid; /** * @brief directory which contains profiles. Default is "/etc/netctl" */ @@ -118,7 +116,7 @@ private: /** * @brief path to sudo command. Default is "kdesu" */ - QString sudoCommand = QString(SUDO_PATH); + QString sudoCommand; }; diff --git a/sources/netctlgui/include/netctlgui/wpasupinteract.h b/sources/netctlgui/include/netctlgui/wpasupinteract.h index 8375bf1..d1e8903 100644 --- a/sources/netctlgui/include/netctlgui/wpasupinteract.h +++ b/sources/netctlgui/include/netctlgui/wpasupinteract.h @@ -30,8 +30,6 @@ #include #include -#include "version.h" - class Netctl; class NetctlProfile; @@ -113,14 +111,14 @@ public: /** * @brief WpaSup class destructor */ - ~WpaSup(); + virtual ~WpaSup(); // general information /** * @brief method which gets profile name by ESSID * @param essid ESSID name * @return profile name */ - QString existentProfile(const QString essid); + QString existentProfile(const QString essid) const; /** * @brief method which check system configuration and return recommended values to keys * @return recommended parametrs @@ -132,14 +130,7 @@ public: * @return false if profile is inactive * @return true if profile is active */ - bool isProfileActive(const QString essid); - /** - * @brief method which checks profile existence by ESSID - * @param essid ESSID name - * @return false if profile does not exist - * @return true if profile exists - */ - Q_DECL_DEPRECATED bool isProfileExists(const QString essid); + bool isProfileActive(const QString essid) const; public slots: // functions @@ -147,24 +138,24 @@ public slots: * @brief method which returns active point information * @return current point information */ - netctlWifiInfo current(); + netctlWifiInfo current() const; /** * @brief method which scans WiFi networks * @return list of essids */ - QList scanWifi(); + QList scanWifi() const; /** * @brief method which calls wpa_supplicant * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool startWpaSupplicant(); + bool startWpaSupplicant() const; /** * @brief method which send TERMINATE signal to wpa_supplicant * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool stopWpaSupplicant(); + bool stopWpaSupplicant() const; private: /** @@ -182,54 +173,54 @@ private: /** * @brief use RootProcess instead of QProcess. Default is true */ - bool useSuid = true; + bool useSuid; /** * @brief path to ctrl_directory. Defaults is "/run/wpa_supplicant" */ - QString ctrlDir = QString(CTRL_DIR); + QString ctrlDir; /** * @brief group which is owner of CTRL_DIR. Default is "users" */ - QString ctrlGroup = QString(CTRL_GROUP); + QString ctrlGroup; /** * @brief wpa_supplicant PID file. $i is interface. Default is "/run/wpa_supplicant_$i.pid" */ - QString pidFile = QString(PID_FILE); + QString pidFile; /** * @brief path to sudo command. Default is "kdesu" */ - QString sudoCommand = QString(SUDO_PATH); + QString sudoCommand; /** * @brief path to wpa_cli command. Default is "wpa_cli" */ - QString wpaCliPath = QString(WPACLI_PATH); + QString wpaCliPath; /** * @brief wpa_supplicant drivers comma separated. Default is "nl80211,wext" */ - QString wpaDrivers = QString(WPA_DRIVERS); + QString wpaDrivers; /** * @brief path to wpa_supplicant command. Default is "wpa_supplicant" */ - QString wpaSupPath = QString(WPASUP_PATH); + QString wpaSupPath; // functions /** * @brief method which calls wpa_cli and returns its output * @param commandLine command which will be passed to wpa_cli * @return wpa_cli output */ - QString getWpaCliOutput(const QString commandLine); + QString getWpaCliOutput(const QString commandLine) const; /** * @brief method which will be called to sleep thread * @param sec time interval, seconds */ - bool waitForProcess(const int sec); + bool waitForProcess(const int sec) const; /** * @brief method which calls wpa_cli * @param commandLine command which will be passed to wpa_cli * @return false if components are not found or command exit code is not equal to 0 * @return true if the method was completed without errors */ - bool wpaCliCall(const QString commandLine); + bool wpaCliCall(const QString commandLine) const; }; diff --git a/sources/netctlgui/src/netctlinteract.cpp b/sources/netctlgui/src/netctlinteract.cpp index 89234c5..b1a6294 100644 --- a/sources/netctlgui/src/netctlinteract.cpp +++ b/sources/netctlgui/src/netctlinteract.cpp @@ -30,6 +30,8 @@ #include #include +#include "version.h" + /** * @class Netctl @@ -42,27 +44,16 @@ Netctl::Netctl(const bool debugCmd, const QMap settings) { netctlProfile = new NetctlProfile(debug, settings); - if (settings.contains(QString("IFACE_DIR"))) - ifaceDirectory = new QDir(settings[QString("IFACE_DIR")]); - else - ifaceDirectory = new QDir(QString(IFACE_DIR)); - if (settings.contains(QString("PREFERED_IFACE"))) - mainInterface = settings[QString("PREFERED_IFACE")]; - if (settings.contains(QString("NETCTL_PATH"))) - netctlCommand = settings[QString("NETCTL_PATH")]; - if (settings.contains(QString("NETCTLAUTO_PATH"))) - netctlAutoCommand = settings[QString("NETCTLAUTO_PATH")]; - if (settings.contains(QString("NETCTLAUTO_SERVICE"))) - netctlAutoService = settings[QString("NETCTLAUTO_SERVICE")]; - if (settings.contains(QString("SUDO_PATH"))) - sudoCommand = settings[QString("SUDO_PATH")]; - if (settings.contains(QString("SYSTEMCTL_PATH"))) - systemctlCommand = settings[QString("SYSTEMCTL_PATH")]; - if (settings.contains(QString("FORCE_SUDO"))) - useSuid = (settings[QString("FORCE_SUDO")] != QString("true")); + ifaceDirectory = new QDir(settings.value(QString("IFACE_DIR"), QString(IFACE_DIR))); + mainInterface = settings.value(QString("PREFERED_IFACE"), QString(PREFERED_IFACE)); + netctlCommand = settings.value(QString("NETCTL_PATH"), QString(NETCTL_PATH)); + netctlAutoCommand = settings.value(QString("NETCTLAUTO_PATH"), QString(NETCTLAUTO_PATH)); + netctlAutoService = settings.value(QString("NETCTLAUTO_SERVICE"), QString(NETCTLAUTO_SERVICE)); + sudoCommand = settings.value(QString("SUDO_PATH"), QString(SUDO_PATH)); + systemctlCommand = settings.value(QString("SYSTEMCTL_PATH"), QString(SYSTEMCTL_PATH)); + useSuid = (settings.value(QString("FORCE_SUDO"), QString("true")) != QString("true")); - if (useSuid) - sudoCommand = QString(""); + if (useSuid) sudoCommand = QString(""); } @@ -78,207 +69,61 @@ Netctl::~Netctl() } -// functions -/** - * @fn cmdCall - */ -bool Netctl::cmdCall(const bool sudo, const QString command, const QString commandLine, const QString argument) -{ - if (debug) qDebug() << PDEBUG; - if (debug) qDebug() << PDEBUG << ":" << "Command" << command; - if (debug) qDebug() << PDEBUG << ":" << "Command line" << commandLine; - if (debug) qDebug() << PDEBUG << ":" << "Argument" << argument; - if (command.isEmpty()) { - if (debug) qDebug() << PDEBUG << ":" << "Could not find command"; - return false; - } - - QString cmd = QString(""); - if (sudo) - cmd = QString("%1 ").arg(sudoCommand); - cmd += QString("%1 %2").arg(command).arg(commandLine); - if (!argument.isEmpty()) - cmd += QString(" \"%1\"").arg(argument); - if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; - TaskResult process = runTask(cmd, (useSuid && sudo)); - if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; - - return (process.exitCode == 0); -} - - -/** - * @fn getCmdOutput - */ -QString Netctl::getCmdOutput(const bool sudo, const QString command, const QString commandLine, const QString argument) -{ - if (debug) qDebug() << PDEBUG; - if (debug) qDebug() << PDEBUG << ":" << "Command" << command; - if (debug) qDebug() << PDEBUG << ":" << "Command line" << commandLine; - if (debug) qDebug() << PDEBUG << ":" << "Argument" << argument; - if (command.isEmpty()) { - if (debug) qDebug() << PDEBUG << ":" << "Could not find command"; - return QString(); - } - - QString cmd = QString(""); - if (sudo) - cmd = QString("%1 ").arg(sudoCommand); - cmd += QString("%1 %2").arg(command).arg(commandLine); - if (!argument.isEmpty()) - cmd += QString(" \"%1\"").arg(argument); - if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; - TaskResult process = runTask(cmd, (useSuid && sudo)); - if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; - - return process.output; -} - - // general information /** * @fn getActiveProfile */ -QStringList Netctl::getActiveProfile() +QStringList Netctl::getActiveProfile() const { if (debug) qDebug() << PDEBUG; - QStringList profile; - QList fullProfilesInfo = getProfileList(); - for (int i=0; i fullProfilesInfo = getProfileListFromNetctlAuto(); - for (int i=0; i Netctl::getProfileList() +QList Netctl::getProfileList() const { if (debug) qDebug() << PDEBUG; - QList fullProfilesInfo; - QStringList output = getCmdOutput(false, netctlCommand, QString("list")) - .split(QChar('\n'), QString::SkipEmptyParts); - for (int i=0; igetValuesFromProfile(profileInfo.name, - keys); - profileInfo.description = profileValues[1]; - profileInfo.essid = profileValues[2]; - profileInfo.interface = profileValues[3]; - profileInfo.type = profileValues[0]; - profileInfo.netctlAuto = false; - fullProfilesInfo.append(profileInfo); - } - - return fullProfilesInfo; + return getProfileListTemplate(false); } /** * @fn getProfileListFromNetctlAuto */ -QList Netctl::getProfileListFromNetctlAuto() +QList Netctl::getProfileListFromNetctlAuto() const { if (debug) qDebug() << PDEBUG; - QList fullProfilesInfo; - QStringList output = getCmdOutput(false, netctlAutoCommand, QString("list")) - .split(QChar('\n'), QString::SkipEmptyParts); - for (int i=0; igetValuesFromProfile(profileInfo.name, - keys); - profileInfo.description = profileValues[1]; - profileInfo.essid = profileValues[2]; - profileInfo.interface = profileValues[3]; - profileInfo.type = profileValues[0]; - profileInfo.netctlAuto = true; - fullProfilesInfo.append(profileInfo); - } - - return fullProfilesInfo; -} - - -/** - * @fn getProfileDescription - */ -QString Netctl::getProfileDescription(const QString profile) -{ - if (debug) qDebug() << PDEBUG; - if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; - if (netctlProfile == 0) { - if (debug) qDebug() << PDEBUG << ":" << "Could not find library"; - return QString(); - } - - return netctlProfile->getValueFromProfile(profile, QString("Description")); + return getProfileListTemplate(true); } /** * @fn getProfileStatus */ -QString Netctl::getProfileStatus(const QString profile) +QString Netctl::getProfileStatus(const QString profile) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; - QString status; - if (isProfileActive(profile)) - status = QString("active"); - else - status = QString("inactive"); - if (isProfileEnabled(profile)) - status += QString(" (enabled)"); - else - status += QString(" (static)"); + QString status = isProfileActive(profile) ? QString("active") : QString("inactive"); + status += isProfileEnabled(profile) ? QString(" (enabled)") : QString(" (static)"); return status; } @@ -287,42 +132,40 @@ QString Netctl::getProfileStatus(const QString profile) /** * @fn isProfileActive */ -bool Netctl::isProfileActive(const QString profile) +bool Netctl::isProfileActive(const QString profile) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; - QString output = getCmdOutput(false, netctlCommand, QString("status"), profile); - - return (output.contains(QString("Active: active"))); + return cmdCall(false, netctlCommand, QString("status"), profile).status(); } /** * @fn isProfileEnabled */ -bool Netctl::isProfileEnabled(const QString profile) +bool Netctl::isProfileEnabled(const QString profile) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; - return cmdCall(false, netctlCommand, QString("is-enabled"), profile); + return cmdCall(false, netctlCommand, QString("is-enabled"), profile).status(); } /** * @fn autoIsProfileActive */ -bool Netctl::autoIsProfileActive(const QString profile) +bool Netctl::autoIsProfileActive(const QString profile) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; bool status = false; QList profiles = getProfileListFromNetctlAuto(); - for (int i=0; i profiles = getProfileListFromNetctlAuto(); - for (int i=0; i Netctl::getRecommendedConfiguration() recommended.clear(); recommended.append(QString("netctlgui-helper")); recommended.append(QString("netctlgui-helper-suid")); - for (int i=0; i Netctl::getRecommendedConfiguration() settings[QString("NETCTL_PATH")] = QString(""); recommended.clear(); recommended.append("netctl"); - for (int i=0; i Netctl::getRecommendedConfiguration() settings[QString("NETCTLAUTO_PATH")] = QString(""); recommended.clear(); recommended.append("netctl-auto"); - for (int i=0; i Netctl::getRecommendedConfiguration() recommended.append("sudo"); recommended.append("kdesu"); recommended.append("gksu"); - for (int i=0; i Netctl::getRecommendedConfiguration() settings[QString("SYSTEMCTL_PATH")] = QString(""); recommended.clear(); recommended.append("systemctl"); - for (int i=0; i Netctl::getRecommendedConfiguration() /** * @fn getWirelessInterfaceList */ -QStringList Netctl::getWirelessInterfaceList() +QStringList Netctl::getWirelessInterfaceList() const { if (debug) qDebug() << PDEBUG; if (ifaceDirectory == nullptr) { @@ -517,11 +360,11 @@ QStringList Netctl::getWirelessInterfaceList() if (!mainInterface.isEmpty()) interfaces.append(mainInterface); QStringList allInterfaces = ifaceDirectory->entryList(QDir::Dirs | QDir::NoDotAndDotDot); - for (int i=0; ipath()).arg(allInterfaces[i]); + foreach(QString interface, allInterfaces) { + QString dir = QString("%1/%2/wireless").arg(ifaceDirectory->path()).arg(interface); if (debug) qDebug() << PDEBUG << ":" << "Check directory" << dir; if (QDir(dir).exists()) - interfaces.append(allInterfaces[i]); + interfaces.append(interface); } return interfaces; @@ -532,159 +375,156 @@ QStringList Netctl::getWirelessInterfaceList() /** * @fn enableProfile */ -bool Netctl::enableProfile(const QString profile) +bool Netctl::enableProfile(const QString profile) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; - if (isProfileEnabled(profile)) - return cmdCall(true, netctlCommand, QString("disable"), profile); - else - return cmdCall(true, netctlCommand, QString("enable"), profile); + return cmdCall(true, netctlCommand, + isProfileEnabled(profile) ? QString("disable") : QString("enable"), + profile).status(); } /** * @fn forceStartProfile */ -bool Netctl::forceStartProfile(const QString profile) +bool Netctl::forceStartProfile(const QString profile) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; - return cmdCall(true, netctlCommand, QString("start"), profile); + return cmdCall(true, netctlCommand, QString("start"), profile).status(); } /** * @fn forceStopProfile */ -bool Netctl::forceStopProfile(const QString profile) +bool Netctl::forceStopProfile(const QString profile) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; - return cmdCall(true, netctlCommand, QString("stop"), profile); + return cmdCall(true, netctlCommand, QString("stop"), profile).status(); } /** * @fn reenableProfile */ -bool Netctl::reenableProfile(const QString profile) +bool Netctl::reenableProfile(const QString profile) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; - return cmdCall(true, netctlCommand, QString("reenable"), profile); + return cmdCall(true, netctlCommand, QString("reenable"), profile).status(); } /** * @fn restartProfile */ -bool Netctl::restartProfile(const QString profile) +bool Netctl::restartProfile(const QString profile) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; - return cmdCall(true, netctlCommand, QString("restart"), profile); + return cmdCall(true, netctlCommand, QString("restart"), profile).status(); } /** * @fn startProfile */ -bool Netctl::startProfile(const QString profile) +bool Netctl::startProfile(const QString profile) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; - if (isProfileActive(profile)) - return cmdCall(true, netctlCommand, QString("stop"), profile); - else - return cmdCall(true, netctlCommand, QString("start"), profile); + return cmdCall(true, netctlCommand, + isProfileActive(profile) ? QString("stop") : QString("start"), + profile).status(); } /** * @fn stopAllProfiles */ -bool Netctl::stopAllProfiles() +bool Netctl::stopAllProfiles() const { if (debug) qDebug() << PDEBUG; - return cmdCall(true, netctlCommand, QString("stop-all")); + return cmdCall(true, netctlCommand, QString("stop-all")).status(); } /** * @fn switchToProfile */ -bool Netctl::switchToProfile(const QString profile) +bool Netctl::switchToProfile(const QString profile) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; return ((isProfileActive(profile)) || - (cmdCall(true, netctlCommand, QString("switch-to"), profile))); + (cmdCall(true, netctlCommand, QString("switch-to"), profile)).status()); } /** * @fn autoDisableAllProfiles */ -bool Netctl::autoDisableAllProfiles() +bool Netctl::autoDisableAllProfiles() const { if (debug) qDebug() << PDEBUG; - return cmdCall(false, netctlAutoCommand, QString("disable-all")); + return cmdCall(false, netctlAutoCommand, QString("disable-all")).status(); } /** * @fn autoEnableProfile */ -bool Netctl::autoEnableProfile(const QString profile) +bool Netctl::autoEnableProfile(const QString profile) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; - if (autoIsProfileEnabled(profile)) - return cmdCall(false, netctlAutoCommand, QString("disable"), profile); - else - return cmdCall(false, netctlAutoCommand, QString("enable"), profile); + return cmdCall(false, netctlAutoCommand, + autoIsProfileEnabled(profile) ? QString("disable") : QString("enable"), + profile).status(); } /** * @fn autoEnableAllProfiles */ -bool Netctl::autoEnableAllProfiles() +bool Netctl::autoEnableAllProfiles() const { if (debug) qDebug() << PDEBUG; - return cmdCall(false, netctlAutoCommand, QString("enable-all")); + return cmdCall(false, netctlAutoCommand, QString("enable-all")).status(); } /** * @fn autoStartProfile */ -bool Netctl::autoStartProfile(const QString profile) +bool Netctl::autoStartProfile(const QString profile) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; return ((autoIsProfileActive(profile)) || - (cmdCall(false, netctlAutoCommand, QString("switch-to"), profile))); + (cmdCall(false, netctlAutoCommand, QString("switch-to"), profile)).status()); } /** * @fn autoEnableService */ -bool Netctl::autoEnableService() +bool Netctl::autoEnableService() const { if (debug) qDebug() << PDEBUG; if (netctlAutoService.isEmpty()) { @@ -697,19 +537,18 @@ bool Netctl::autoEnableService() return false; } - QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces[0]); + QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces.first()); - if (isNetctlAutoEnabled()) - return cmdCall(true, systemctlCommand, QString("disable"), argument); - else - return cmdCall(true, systemctlCommand, QString("enable"), argument); + return cmdCall(true, systemctlCommand, + isNetctlAutoEnabled() ? QString("disable") : QString("enable"), + argument).status(); } /** * @fn autoRestartService */ -bool Netctl::autoRestartService() +bool Netctl::autoRestartService() const { if (debug) qDebug() << PDEBUG; if (netctlAutoService.isEmpty()) { @@ -722,17 +561,17 @@ bool Netctl::autoRestartService() return false; } - QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces[0]); + QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces.first()); return ((!isNetctlAutoRunning()) || - (cmdCall(true, systemctlCommand, QString("restart"), argument))); + (cmdCall(true, systemctlCommand, QString("restart"), argument)).status()); } /** * @fn autoStartService */ -bool Netctl::autoStartService() +bool Netctl::autoStartService() const { if (debug) qDebug() << PDEBUG; if (netctlAutoService.isEmpty()) { @@ -745,10 +584,87 @@ bool Netctl::autoStartService() return false; } - QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces[0]); + QString argument = QString("%1@%2.service").arg(netctlAutoService).arg(interfaces.first()); - if (isNetctlAutoRunning()) - return cmdCall(true, systemctlCommand, QString("stop"), argument); - else - return cmdCall(true, systemctlCommand, QString("start"), argument); + return cmdCall(true, systemctlCommand, + isNetctlAutoRunning() ? QString("stop") : QString("start"), + argument).status(); +} + + +// functions +/** + * @fn cmdCall + */ +TaskResult Netctl::cmdCall(const bool sudo, const QString command, + const QString commandLine, const QString argument) const +{ + if (debug) qDebug() << PDEBUG; + if (debug) qDebug() << PDEBUG << ":" << "Command" << command; + if (debug) qDebug() << PDEBUG << ":" << "Command line" << commandLine; + if (debug) qDebug() << PDEBUG << ":" << "Argument" << argument; + + QString cmd = QString(""); + if (sudo) cmd = QString("%1 ").arg(sudoCommand); + cmd += QString("%1 %2").arg(command).arg(commandLine); + if (!argument.isEmpty()) cmd += QString(" \"%1\"").arg(argument); + if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; + TaskResult process = runTask(cmd, (useSuid && sudo)); + if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; + if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; + + return process; +}; + + +/** + * @fn getActiveProfileTemplate + */ +QStringList Netctl::getActiveProfileTemplate(const QList data) const +{ + if (debug) qDebug() << PDEBUG; + + QStringList profiles; + foreach(netctlProfileInfo profile, data) { + if (!profile.active) continue; + profiles.append(profile.name); + } + + return profiles; +} + + +/** + * @fn getProfileListTemplate + */ +QList Netctl::getProfileListTemplate(const bool isAuto) const +{ + if (debug) qDebug() << PDEBUG; + + QList fullProfilesInfo; + QStringList output = QString(cmdCall(false, isAuto ? netctlAutoCommand : netctlCommand, + QString("list")).output) + .split(QChar('\n'), QString::SkipEmptyParts); + foreach(QString profile, output) { + netctlProfileInfo profileInfo; + profileInfo.name = profile.mid(2, -1); + profileInfo.active = (profile[0] == QChar('*')); + profileInfo.enabled = isAuto ? (profile[0] != QChar('!')) : isProfileEnabled(profileInfo.name); + // external + QStringList keys; + keys.append(QString("Connection")); + keys.append(QString("Description")); + keys.append(QString("ESSID")); + keys.append(QString("Interface")); + QStringList profileValues = netctlProfile->getValuesFromProfile(profileInfo.name, + keys); + profileInfo.description = profileValues[1]; + profileInfo.essid = profileValues[2]; + profileInfo.interface = profileValues[3]; + profileInfo.type = profileValues[0]; + profileInfo.netctlAuto = isAuto; + fullProfilesInfo.append(profileInfo); + } + + return fullProfilesInfo; } diff --git a/sources/netctlgui/src/netctlinterface.cpp b/sources/netctlgui/src/netctlinterface.cpp index 3f6539c..7c62f96 100644 --- a/sources/netctlgui/src/netctlinterface.cpp +++ b/sources/netctlgui/src/netctlinterface.cpp @@ -60,7 +60,8 @@ NetctlInterface::~NetctlInterface() /** * @fn connectToEssid */ -InterfaceAnswer NetctlInterface::connectToEssid(const QString essid, QMap settings) +InterfaceAnswer NetctlInterface::connectToEssid(const QString essid, + QMap settings) const { if (debug) qDebug() << PDEBUG; if (netctlCommand == nullptr) { @@ -83,7 +84,7 @@ InterfaceAnswer NetctlInterface::connectToEssid(const QString essid, QMap settings) +InterfaceAnswer NetctlInterface::connectToUnknownEssid(const QString essid, + QMap settings) const { if (debug) qDebug() << PDEBUG; if (netctlCommand == nullptr) { @@ -121,7 +123,7 @@ InterfaceAnswer NetctlInterface::connectToUnknownEssid(const QString essid, QMap QStringList interfaces = netctlCommand->getWirelessInterfaceList(); if (interfaces.isEmpty()) return InterfaceAnswer::Error; settings[QString("Description")] = QString("'Automatically generated profile by Netctl GUI'"); - settings[QString("Interface")] = interfaces[0]; + settings[QString("Interface")] = interfaces.first(); settings[QString("Connection")] = QString("wireless"); settings[QString("ESSID")] = QString("'%1'").arg(essid); settings[QString("IP")] = QString("dhcp"); @@ -139,7 +141,8 @@ InterfaceAnswer NetctlInterface::connectToUnknownEssid(const QString essid, QMap /** * @fn createProfile */ -InterfaceAnswer NetctlInterface::createProfile(const QString profile, const QMap settings) +InterfaceAnswer NetctlInterface::createProfile(const QString profile, + const QMap settings) const { if (debug) qDebug() << PDEBUG; if (netctlCommand == nullptr) { @@ -157,7 +160,7 @@ InterfaceAnswer NetctlInterface::createProfile(const QString profile, const QMap /** * @fn enableProfile */ -InterfaceAnswer NetctlInterface::enableProfile(const QString profile) +InterfaceAnswer NetctlInterface::enableProfile(const QString profile) const { if (debug) qDebug() << PDEBUG; if (netctlCommand == nullptr) { @@ -174,7 +177,7 @@ InterfaceAnswer NetctlInterface::enableProfile(const QString profile) /** * @fn removeProfile */ -InterfaceAnswer NetctlInterface::removeProfile(const QString profile) +InterfaceAnswer NetctlInterface::removeProfile(const QString profile) const { if (debug) qDebug() << PDEBUG; if (netctlProfile == nullptr) { @@ -189,7 +192,7 @@ InterfaceAnswer NetctlInterface::removeProfile(const QString profile) /** * @fn restartProfile */ -InterfaceAnswer NetctlInterface::restartProfile(const QString profile) +InterfaceAnswer NetctlInterface::restartProfile(const QString profile) const { if (debug) qDebug() << PDEBUG; if (netctlCommand == nullptr) { @@ -206,7 +209,7 @@ InterfaceAnswer NetctlInterface::restartProfile(const QString profile) /** * @fn startProfile */ -InterfaceAnswer NetctlInterface::startProfile(const QString profile) +InterfaceAnswer NetctlInterface::startProfile(const QString profile) const { if (debug) qDebug() << PDEBUG; if (netctlCommand == nullptr) { @@ -227,7 +230,7 @@ InterfaceAnswer NetctlInterface::startProfile(const QString profile) /** * @fn stopAllProfiles */ -InterfaceAnswer NetctlInterface::stopAllProfiles() +InterfaceAnswer NetctlInterface::stopAllProfiles() const { if (debug) qDebug() << PDEBUG; if (netctlCommand == nullptr) { @@ -242,7 +245,7 @@ InterfaceAnswer NetctlInterface::stopAllProfiles() /** * @fn switchToProfile */ -InterfaceAnswer NetctlInterface::switchToProfile(const QString profile) +InterfaceAnswer NetctlInterface::switchToProfile(const QString profile) const { if (debug) qDebug() << PDEBUG; if (netctlCommand == nullptr) { @@ -267,7 +270,7 @@ InterfaceAnswer NetctlInterface::switchToProfile(const QString profile) /** * @fn information */ -netctlInformation NetctlInterface::information() +netctlInformation NetctlInterface::information() const { if (debug) qDebug() << PDEBUG; if (netctlCommand == nullptr) { @@ -288,7 +291,7 @@ netctlInformation NetctlInterface::information() /** * @fn profileSettings */ -QMap NetctlInterface::profileSettings(const QString profile) +QMap NetctlInterface::profileSettings(const QString profile) const { if (debug) qDebug() << PDEBUG; if (netctlProfile == nullptr) { @@ -303,7 +306,7 @@ QMap NetctlInterface::profileSettings(const QString profile) /** * @fn status */ -netctlCurrent NetctlInterface::status() +netctlCurrent NetctlInterface::status() const { if (debug) qDebug() << PDEBUG; if (netctlCommand == nullptr) { @@ -318,11 +321,11 @@ netctlCurrent NetctlInterface::status() profiles = netctlCommand->getProfileListFromNetctlAuto(); else profiles = netctlCommand->getProfileList(); - for (int i=0; i #include +#include "version.h" + /** * @class NetctlProfile @@ -43,17 +45,11 @@ NetctlProfile::NetctlProfile(const bool debugCmd, const QMap settings) : debug(debugCmd) { - if (settings.contains(QString("PROFILE_DIR"))) - profileDirectory = new QDir(settings[QString("PROFILE_DIR")]); - else - profileDirectory = new QDir(QString(PROFILE_DIR)); - if (settings.contains(QString("SUDO_PATH"))) - sudoCommand = settings[QString("SUDO_PATH")]; - if (settings.contains(QString("FORCE_SUDO"))) - useSuid = (settings[QString("FORCE_SUDO")] != QString("true")); + profileDirectory = new QDir(settings.value(QString("PROFILE_DIR"), QString(PROFILE_DIR))); + sudoCommand = settings.value(QString("SUDO_PATH"), QString(SUDO_PATH)); + useSuid = (settings.value(QString("FORCE_SUDO"), QString("true")) != QString("true")); - if (useSuid) - sudoCommand = QString(""); + if (useSuid) sudoCommand = QString(""); } @@ -71,7 +67,7 @@ NetctlProfile::~NetctlProfile() /** * @fn copyProfile */ -bool NetctlProfile::copyProfile(const QString oldPath) +bool NetctlProfile::copyProfile(const QString oldPath) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Path" << oldPath; @@ -87,17 +83,16 @@ bool NetctlProfile::copyProfile(const QString oldPath) if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; TaskResult process = runTask(cmd, useSuid); if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; + if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; - return (process.exitCode == 0); + return process.status(); } /** * @fn createProfile */ -QString NetctlProfile::createProfile(const QString profile, const QMap settings) +QString NetctlProfile::createProfile(const QString profile, const QMap settings) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; @@ -108,22 +103,22 @@ QString NetctlProfile::createProfile(const QString profile, const QMap NetctlProfile::getRecommendedConfiguration() recommended.clear(); recommended.append(QString("netctlgui-helper")); recommended.append(QString("netctlgui-helper-suid")); - for (int i=0; i NetctlProfile::getRecommendedConfiguration() recommended.append("sudo"); recommended.append("kdesu"); recommended.append("gksu"); - for (int i=0; i NetctlProfile::getRecommendedConfiguration() /** * @fn getSettingsFromProfile */ -QMap NetctlProfile::getSettingsFromProfile(const QString profile) +QMap NetctlProfile::getSettingsFromProfile(const QString profile) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; @@ -202,13 +197,12 @@ QMap NetctlProfile::getSettingsFromProfile(const QString profi if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; TaskResult process = runTask(cmd, false); if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; + if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; QStringList output = QString(process.output).trimmed().split(QChar('\n')); QStringList systemVariables; systemVariables.append(QString("PIPESTATUS")); - for (int i=0; i settings; QString profileUrl = QString("%1/%2").arg(profileDirectory->absolutePath()).arg(QFileInfo(profile).fileName()); @@ -216,20 +210,19 @@ QMap NetctlProfile::getSettingsFromProfile(const QString profi if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; process = runTask(cmd, false); if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; + if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; output = QString(process.output).trimmed().split(QChar('\n')); // read variables QStringList keys; - for (int i=0; i settings = getSettingsFromProfile(profile); QStringList values; - for (int i=0; i #include +#include "version.h" + /** * @class WpaSup @@ -43,25 +45,16 @@ WpaSup::WpaSup(const bool debugCmd, const QMap settings) netctlCommand = new Netctl(debug, settings); netctlProfile = new NetctlProfile(debug, settings); - if (settings.contains(QString("CTRL_DIR"))) - ctrlDir = settings[QString("CTRL_DIR")]; - if (settings.contains(QString("CTRL_GROUP"))) - ctrlGroup = settings[QString("CTRL_GROUP")]; - if (settings.contains(QString("PID_FILE"))) - pidFile = settings[QString("PID_FILE")]; - if (settings.contains(QString("SUDO_PATH"))) - sudoCommand = settings[QString("SUDO_PATH")]; - if (settings.contains(QString("WPACLI_PATH"))) - wpaCliPath = settings[QString("WPACLI_PATH")]; - if (settings.contains(QString("WPA_DRIVERS"))) - wpaDrivers = settings[QString("WPA_DRIVERS")]; - if (settings.contains(QString("WPASUP_PATH"))) - wpaSupPath = settings[QString("WPASUP_PATH")]; - if (settings.contains(QString("FORCE_SUDO"))) - useSuid = (settings[QString("FORCE_SUDO")] != QString("true")); + ctrlDir = settings.value(QString("CTRL_DIR"), QString(CTRL_DIR)); + ctrlGroup = settings.value(QString("CTRL_GROUP"), QString(CTRL_GROUP)); + pidFile = settings.value(QString("PID_FILE"), QString(PID_FILE)); + sudoCommand = settings.value(QString("SUDO_PATH"), QString(SUDO_PATH)); + wpaCliPath = settings.value(QString("WPACLI_PATH"), QString(WPACLI_PATH)); + wpaDrivers = settings.value(QString("WPA_DRIVERS"), QString(WPA_DRIVERS)); + wpaSupPath = settings.value(QString("WPASUP_PATH"), QString(WPASUP_PATH)); + useSuid = (settings.value(QString("FORCE_SUDO"), QString("true")) != QString("true")); - if (useSuid) - sudoCommand = QString(""); + if (useSuid) sudoCommand = QString(""); } @@ -81,7 +74,7 @@ WpaSup::~WpaSup() /** * @fn existentProfile */ -QString WpaSup::existentProfile(const QString essid) +QString WpaSup::existentProfile(const QString essid) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "ESSID" << essid; @@ -94,11 +87,11 @@ QString WpaSup::existentProfile(const QString essid) return QString(); } - QString profileFile = QString(""); + QString profileFile; QList profileList = netctlCommand->getProfileList(); - for (int i=0; i WpaSup::getRecommendedConfiguration() // ctrl group // check group list and find out 'network', 'users', 'root' settings[QString("CTRL_GROUP")] = QString(""); - gid_t gtpList[99]; + gid_t gtpList[size]; int grpSize = getgroups(size, gtpList); recommended.clear(); recommended.append("network"); recommended.append("users"); recommended.append("root"); - for (int i=0; igr_name)) { - settings[QString("CTRL_GROUP")] = recommended[i]; + foreach(QString rec, recommended) { + for (int i=0; igr_name)) { + settings[QString("CTRL_GROUP")] = rec; break; } if (!settings[QString("CTRL_GROUP")].isEmpty()) break; @@ -141,9 +134,9 @@ QMap WpaSup::getRecommendedConfiguration() recommended.clear(); recommended.append(QString("netctlgui-helper")); recommended.append(QString("netctlgui-helper-suid")); - for (int i=0; i WpaSup::getRecommendedConfiguration() recommended.append("sudo"); recommended.append("kdesu"); recommended.append("gksu"); - for (int i=0; i WpaSup::getRecommendedConfiguration() settings[QString("WPACLI_PATH")] = QString("true"); recommended.clear(); recommended.append("wpa_cli"); - for (int i=0; i WpaSup::getRecommendedConfiguration() settings[QString("WPASUP_PATH")] = QString("true"); recommended.clear(); recommended.append("wpa_supplicant"); - for (int i=0; i WpaSup::getRecommendedConfiguration() /** * @fn isProfileActive */ -bool WpaSup::isProfileActive(const QString essid) +bool WpaSup::isProfileActive(const QString essid) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "ESSID" << essid; @@ -213,50 +206,14 @@ bool WpaSup::isProfileActive(const QString essid) return false; } - QString profileFile; - QList profileList = netctlCommand->getProfileList(); - for (int i=0; iisProfileActive(profileFile); -} - - -/** - * @fn isProfileExists - */ -bool WpaSup::isProfileExists(const QString essid) -{ - if (debug) qDebug() << PDEBUG; - if (debug) qDebug() << PDEBUG << ":" << "ESSID" << essid; - if (netctlCommand == nullptr) { - if (debug) qDebug() << PDEBUG << ":" << "Could not find library"; - return false; - } - if (netctlProfile == nullptr) { - if (debug) qDebug() << PDEBUG << ":" << "Could not find library"; - return false; - } - - bool exists = false; - QList profileList = netctlCommand->getProfileList(); - for (int i=0; iisProfileActive(existentProfile(essid)); } /** * @fn current */ -netctlWifiInfo WpaSup::current() +netctlWifiInfo WpaSup::current() const { if (debug) qDebug() << PDEBUG; if (pidFile.isEmpty()) { @@ -269,7 +226,7 @@ netctlWifiInfo WpaSup::current() return netctlWifiInfo(); } QString _pidFile = pidFile; - _pidFile.replace(QString("$i"), interfaces[0]); + _pidFile.replace(QString("$i"), interfaces.first()); if (debug) qDebug() << PDEBUG << ":" << "PID file" << _pidFile << QFile(_pidFile).exists(); netctlWifiInfo current; @@ -278,21 +235,21 @@ netctlWifiInfo WpaSup::current() if (!rawText.contains(QString("wpa_state=COMPLETED\n"))) return current; QStringList rawList = rawText.split(QChar('\n'), QString::SkipEmptyParts); - for (int i=0; i= 5000) && (line[1].toInt() < 6000)) + if (line.at(0) == QString("bssid")) + current.macs.append(line.at(1)); + else if (line.at(0) == QString("freq")) { + if ((line.at(1).toInt() >= 5000) && (line.at(1).toInt() < 6000)) current.type = PointType::FiveG; - else if ((line[1].toInt() < 5000) && (line[1].toInt() > 2000)) + else if ((line.at(1).toInt() < 5000) && (line.at(1).toInt() > 2000)) current.type = PointType::TwoG; - current.frequencies.append(line[1].toInt()); - } else if (line[0] == QString("ssid")) - current.name = line[1]; - else if (line[0] == QString("key_mgmt")) { - QString security = line[1]; + current.frequencies.append(line.at(1).toInt()); + } else if (line.at(0) == QString("ssid")) + current.name = line.at(1); + else if (line.at(0) == QString("key_mgmt")) { + QString security = line.at(1); if (security.contains(QString("WPA2"))) security = QString("WPA2"); else if (security.contains(QString("WPA"))) @@ -316,7 +273,7 @@ netctlWifiInfo WpaSup::current() /** * @fn scanWifi */ -QList WpaSup::scanWifi() +QList WpaSup::scanWifi() const { if (debug) qDebug() << PDEBUG; if (pidFile.isEmpty()) { @@ -329,7 +286,7 @@ QList WpaSup::scanWifi() return QList(); } QString _pidFile = pidFile; - _pidFile.replace(QString("$i"), interfaces[0]); + _pidFile.replace(QString("$i"), interfaces.first()); if (debug) qDebug() << PDEBUG << ":" << "PID file" << _pidFile << QFile(_pidFile).exists(); bool terminateOnExit = (!QFile(_pidFile).exists()); @@ -353,25 +310,25 @@ QList WpaSup::scanWifi() else profiles = netctlCommand->getProfileList(); // iterate by wifi output - for (int i=0; i"); // append mac and frequency if exists int index = names.indexOf(name); if ((name != QString("")) && (index > -1)) { - scanResults[index].frequencies.append(line[1].toInt()); - scanResults[index].macs.append(line[0]); - if (scanResults[index].signal < line[2].toInt()) - scanResults[index].signal = line[2].toInt(); + scanResults[index].frequencies.append(line.at(1).toInt()); + scanResults[index].macs.append(line.at(0)); + if (scanResults[index].signal < line.at(2).toInt()) + scanResults[index].signal = line.at(2).toInt(); // check type - if ((line[1].toInt() >= 5000) && (line[1].toInt() < 6000)) { + if ((line.at(1).toInt() >= 5000) && (line.at(1).toInt() < 6000)) { if (scanResults[index].type == PointType::None) scanResults[index].type = PointType::FiveG; else if (scanResults[index].type == PointType::TwoG) scanResults[index].type = PointType::TwoAndFiveG; - } else if ((line[1].toInt() < 5000) && (line[1].toInt() > 2000)) { + } else if ((line.at(1).toInt() < 5000) && (line.at(1).toInt() > 2000)) { if (scanResults[index].type == PointType::None) scanResults[index].type = PointType::TwoG; else if (scanResults[index].type == PointType::FiveG) @@ -388,28 +345,28 @@ QList WpaSup::scanWifi() netctlProfileInfo profile; profile.name = QString(""); profile.active = false; - for (int j=0; j= 5000) && (line[1].toInt() < 6000)) { + if ((line.at(1).toInt() >= 5000) && (line.at(1).toInt() < 6000)) { wifiPoint.type = PointType::FiveG; - } else if ((line[1].toInt() < 5000) && (line[1].toInt() > 2000)) { + } else if ((line.at(1).toInt() < 5000) && (line.at(1).toInt() > 2000)) { wifiPoint.type = PointType::TwoG; } // point signal - wifiPoint.signal = line[2].toInt(); + wifiPoint.signal = line.at(2).toInt(); // point security - QString security = line[3]; + QString security = line.at(3); if (security.contains(QString("WPA2"))) security = QString("WPA2"); else if (security.contains(QString("WPA"))) @@ -433,7 +390,7 @@ QList WpaSup::scanWifi() /** * @fn startWpaSupplicant */ -bool WpaSup::startWpaSupplicant() +bool WpaSup::startWpaSupplicant() const { if (debug) qDebug() << PDEBUG; if (ctrlDir.isEmpty()) { @@ -466,28 +423,27 @@ bool WpaSup::startWpaSupplicant() return false; } QString _pidFile = pidFile; - _pidFile.replace(QString("$i"), interfaces[0]); + _pidFile.replace(QString("$i"), interfaces.first()); if (debug) qDebug() << PDEBUG << ":" << "PID file" << _pidFile << QFile(_pidFile).exists(); if (QFile(_pidFile).exists()) return (QFileInfo(ctrlDir).group() == ctrlGroup); QString cmd = QString("%1 %2 -B -P \"%3\" -i %4 -D %5 -C \"DIR=%6 GROUP=%7\"") - .arg(sudoCommand).arg(wpaSupPath).arg(_pidFile).arg(interfaces[0]) + .arg(sudoCommand).arg(wpaSupPath).arg(_pidFile).arg(interfaces.first()) .arg(wpaDrivers).arg(ctrlDir).arg(ctrlGroup); if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; TaskResult process = runTask(cmd, useSuid); waitForProcess(1); if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; + if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; - return (process.exitCode == 0); + return process.status(); } /** * @fn stopWpaSupplicant */ -bool WpaSup::stopWpaSupplicant() +bool WpaSup::stopWpaSupplicant() const { if (debug) qDebug() << PDEBUG; @@ -499,7 +455,7 @@ bool WpaSup::stopWpaSupplicant() /** * @fn getWpaCliOutput */ -QString WpaSup::getWpaCliOutput(const QString commandLine) +QString WpaSup::getWpaCliOutput(const QString commandLine) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Command" << commandLine; @@ -517,12 +473,11 @@ QString WpaSup::getWpaCliOutput(const QString commandLine) return QString(); } - QString cmd = QString("%1 -i %2 -p %3 %4").arg(wpaCliPath).arg(interfaces[0]).arg(ctrlDir).arg(commandLine); + QString cmd = QString("%1 -i %2 -p %3 %4").arg(wpaCliPath).arg(interfaces.first()).arg(ctrlDir).arg(commandLine); if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; TaskResult process = runTask(cmd); if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; + if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; return process.output; } @@ -531,7 +486,7 @@ QString WpaSup::getWpaCliOutput(const QString commandLine) /** * @fn waitForProcess */ -bool WpaSup::waitForProcess(const int sec) +bool WpaSup::waitForProcess(const int sec) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Interval" << sec; @@ -546,7 +501,7 @@ bool WpaSup::waitForProcess(const int sec) /** * @fn wpaCliCall */ -bool WpaSup::wpaCliCall(const QString commandLine) +bool WpaSup::wpaCliCall(const QString commandLine) const { if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Command" << commandLine; @@ -564,13 +519,12 @@ bool WpaSup::wpaCliCall(const QString commandLine) return false; } - QString cmd = QString("%1 -i %2 -p %3 %4").arg(wpaCliPath).arg(interfaces[0]).arg(ctrlDir).arg(commandLine); + QString cmd = QString("%1 -i %2 -p %3 %4").arg(wpaCliPath).arg(interfaces.first()).arg(ctrlDir).arg(commandLine); if (debug) qDebug() << PDEBUG << ":" << "Run cmd" << cmd; TaskResult process = runTask(cmd); waitForProcess(1); if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - if (process.exitCode != 0) - if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; + if (debug) qDebug() << PDEBUG << ":" << "Error" << process.error; - return (process.exitCode == 0); + return process.status(); } diff --git a/sources/test/testnetctl.cpp b/sources/test/testnetctl.cpp index a0be812..03e67ca 100644 --- a/sources/test/testnetctl.cpp +++ b/sources/test/testnetctl.cpp @@ -133,7 +133,7 @@ void TestNetctl::test_getActiveProfile() QStringList result = netctl->getActiveProfile(); QStringList dbus; if (helper) - dbus = sendDBusRequest(QString("/netctl"), QString("netctlActiveProfile"))[0].toString().split(QChar('|')); + dbus = sendDBusRequest(QString("/netctl"), QString("netctlActiveProfile"))[0].toStringList(); netctl->startProfile(QString("netctlgui-test-dummy")); delete netctl;