From 6ea8a76e449f9c0e36be62f5464d1c151f84c561 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 12 May 2022 08:42:51 +0200 Subject: [PATCH] Utils: Consolidate port parsing methods Change-Id: I137e9faa2c5f18e9ade0e2c59d73811d682abf13 Reviewed-by: Jarek Kobus Reviewed-by: --- src/libs/utils/port.cpp | 38 +++++++++++++++++++ src/libs/utils/port.h | 4 ++ src/plugins/docker/dockerdevice.cpp | 20 +--------- .../devicesupport/desktopdevice.cpp | 12 +----- src/plugins/qnx/qnxdevice.cpp | 12 +----- src/plugins/remotelinux/linuxdevice.cpp | 19 +--------- 6 files changed, 46 insertions(+), 59 deletions(-) diff --git a/src/libs/utils/port.cpp b/src/libs/utils/port.cpp index c4f3af18888..a1308103165 100644 --- a/src/libs/utils/port.cpp +++ b/src/libs/utils/port.cpp @@ -25,8 +25,46 @@ #include "port.h" +#include "stringutils.h" + /*! \class Utils::Port \brief The Port class implements a wrapper around a 16 bit port number to be used in conjunction with IP addresses. */ + +namespace Utils { + +QList Port::parseFromSedOutput(const QByteArray &output) +{ + QList ports; + const QList portStrings = output.split('\n'); + for (const QByteArray &portString : portStrings) { + if (portString.size() != 4) + continue; + bool ok; + const Utils::Port port(portString.toInt(&ok, 16)); + if (ok) { + if (!ports.contains(port)) + ports << port; + } else { + qWarning("%s: Unexpected string '%s' is not a port.", + Q_FUNC_INFO, portString.data()); + } + } + return ports; +} + +QList Port::parseFromNetstatOutput(const QByteArray &output) +{ + QList ports; + const QList lines = output.split('\n'); + for (const QByteArray &line : lines) { + const Port port(Utils::parseUsedPortFromNetstatOutput(line)); + if (port.isValid() && !ports.contains(port)) + ports.append(port); + } + return ports; +} + +} // Utils diff --git a/src/libs/utils/port.h b/src/libs/utils/port.h index 56d0b646dc0..a22673bd18a 100644 --- a/src/libs/utils/port.h +++ b/src/libs/utils/port.h @@ -29,6 +29,7 @@ #include "qtcassert.h" #include +#include #include #include @@ -55,6 +56,9 @@ public: QString toString() const { return QString::number(m_port); } + static QList parseFromSedOutput(const QByteArray &output); + static QList parseFromNetstatOutput(const QByteArray &output); + private: int m_port = -1; }; diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index 4b8adc44638..952005a99d9 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -62,7 +62,6 @@ #include #include #include -#include #include #include #include @@ -587,24 +586,7 @@ PortsGatheringMethod DockerDevice::portsGatheringMethod() const CommandLine::Raw}; }, - [](const QByteArray &output) { - QList ports; - const QList portStrings = output.split('\n'); - for (const QByteArray &portString : portStrings) { - if (portString.size() != 4) - continue; - bool ok; - const Utils::Port port(portString.toInt(&ok, 16)); - if (ok) { - if (!ports.contains(port)) - ports << port; - } else { - qWarning("%s: Unexpected string '%s' is not a port.", - Q_FUNC_INFO, portString.data()); - } - } - return ports; - } + &Port::parseFromSedOutput }; }; diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp index 50efbb2dffb..b3ac272e78a 100644 --- a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp @@ -39,7 +39,6 @@ #include #include #include -#include #include #include @@ -139,16 +138,7 @@ PortsGatheringMethod DesktopDevice::portsGatheringMethod() const return {}; }, - [](const QByteArray &output) { - QList ports; - const QList lines = output.split('\n'); - for (const QByteArray &line : lines) { - const Port port(Utils::parseUsedPortFromNetstatOutput(line)); - if (port.isValid() && !ports.contains(port)) - ports.append(port); - } - return ports; - } + &Port::parseFromNetstatOutput }; } diff --git a/src/plugins/qnx/qnxdevice.cpp b/src/plugins/qnx/qnxdevice.cpp index b28262d501a..c354739dc48 100644 --- a/src/plugins/qnx/qnxdevice.cpp +++ b/src/plugins/qnx/qnxdevice.cpp @@ -37,7 +37,6 @@ #include #include #include -#include #include @@ -168,16 +167,7 @@ PortsGatheringMethod QnxDevice::portsGatheringMethod() const return {filePath("netstat"), {"-na"}}; }, - [](const QByteArray &output) { - QList ports; - const QList lines = output.split('\n'); - for (const QByteArray &line : lines) { - const Port port(Utils::parseUsedPortFromNetstatOutput(line)); - if (port.isValid() && !ports.contains(port)) - ports.append(port); - } - return ports; - } + &Port::parseFromNetstatOutput }; } diff --git a/src/plugins/remotelinux/linuxdevice.cpp b/src/plugins/remotelinux/linuxdevice.cpp index 1612c824e36..bdaf8a7d4f5 100644 --- a/src/plugins/remotelinux/linuxdevice.cpp +++ b/src/plugins/remotelinux/linuxdevice.cpp @@ -1035,24 +1035,7 @@ PortsGatheringMethod LinuxDevice::portsGatheringMethod() const CommandLine::Raw}; }, - [](const QByteArray &output) { - QList ports; - const QList portStrings = output.split('\n'); - for (const QByteArray &portString : portStrings) { - if (portString.size() != 4) - continue; - bool ok; - const Utils::Port port(portString.toInt(&ok, 16)); - if (ok) { - if (!ports.contains(port)) - ports << port; - } else { - qWarning("%s: Unexpected string '%s' is not a port.", - Q_FUNC_INFO, portString.data()); - } - } - return ports; - } + &Port::parseFromSedOutput }; }