RemoteLinux: Rename and export MaemoUsedPortsGatherer.

Class is not Maemo-specific.

Change-Id: I14473cb329e4955d24dae1a1a4961eb6ebff869c
Reviewed-on: http://codereview.qt.nokia.com/2042
Reviewed-by: Christian Kandeler <christian.kandeler@nokia.com>
This commit is contained in:
Christian Kandeler
2011-07-22 16:04:55 +02:00
parent 9d5f420f4d
commit bbbda740c3
11 changed files with 107 additions and 87 deletions

View File

@@ -32,7 +32,7 @@
#include "linuxdevicetester.h" #include "linuxdevicetester.h"
#include "linuxdeviceconfiguration.h" #include "linuxdeviceconfiguration.h"
#include "maemousedportsgatherer.h" #include "remotelinuxusedportsgatherer.h"
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/ssh/sshremoteprocess.h> #include <utils/ssh/sshremoteprocess.h>
@@ -56,7 +56,7 @@ public:
LinuxDeviceConfiguration::ConstPtr deviceConfiguration; LinuxDeviceConfiguration::ConstPtr deviceConfiguration;
SshConnection::Ptr connection; SshConnection::Ptr connection;
SshRemoteProcess::Ptr process; SshRemoteProcess::Ptr process;
MaemoUsedPortsGatherer portsGatherer; RemoteLinuxUsedPortsGatherer portsGatherer;
QByteArray remoteStdout; QByteArray remoteStdout;
QByteArray remoteStderr; QByteArray remoteStderr;
State state; State state;

View File

@@ -34,9 +34,10 @@
#include "maemoglobal.h" #include "maemoglobal.h"
#include "maemoremotemounter.h" #include "maemoremotemounter.h"
#include "maemousedportsgatherer.h"
#include <qt4projectmanager/qt4buildconfiguration.h> #include <qt4projectmanager/qt4buildconfiguration.h>
#include <remotelinux/linuxdeviceconfiguration.h>
#include <remotelinux/remotelinuxusedportsgatherer.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/ssh/sshconnection.h> #include <utils/ssh/sshconnection.h>
@@ -50,7 +51,7 @@ MaemoDeploymentMounter::MaemoDeploymentMounter(QObject *parent)
: QObject(parent), : QObject(parent),
m_state(Inactive), m_state(Inactive),
m_mounter(new MaemoRemoteMounter(this)), m_mounter(new MaemoRemoteMounter(this)),
m_portsGatherer(new MaemoUsedPortsGatherer(this)) m_portsGatherer(new RemoteLinuxUsedPortsGatherer(this))
{ {
connect(m_mounter, SIGNAL(error(QString)), SLOT(handleMountError(QString))); connect(m_mounter, SIGNAL(error(QString)), SLOT(handleMountError(QString)));
connect(m_mounter, SIGNAL(mounted()), SLOT(handleMounted())); connect(m_mounter, SIGNAL(mounted()), SLOT(handleMounted()));

View File

@@ -45,10 +45,10 @@ namespace Qt4ProjectManager { class Qt4BuildConfiguration; }
namespace RemoteLinux { namespace RemoteLinux {
class LinuxDeviceConfiguration; class LinuxDeviceConfiguration;
class RemoteLinuxUsedPortsGatherer;
namespace Internal { namespace Internal {
class MaemoRemoteMounter; class MaemoRemoteMounter;
class MaemoUsedPortsGatherer;
class MaemoDeploymentMounter : public QObject class MaemoDeploymentMounter : public QObject
{ {
@@ -93,7 +93,7 @@ private:
QSharedPointer<Utils::SshConnection> m_connection; QSharedPointer<Utils::SshConnection> m_connection;
QSharedPointer<const LinuxDeviceConfiguration> m_devConf; QSharedPointer<const LinuxDeviceConfiguration> m_devConf;
MaemoRemoteMounter * const m_mounter; MaemoRemoteMounter * const m_mounter;
MaemoUsedPortsGatherer * const m_portsGatherer; RemoteLinuxUsedPortsGatherer * const m_portsGatherer;
PortList m_freePorts; PortList m_freePorts;
QList<MaemoMountSpecification> m_mountSpecs; QList<MaemoMountSpecification> m_mountSpecs;
const Qt4ProjectManager::Qt4BuildConfiguration *m_buildConfig; const Qt4ProjectManager::Qt4BuildConfiguration *m_buildConfig;

View File

@@ -33,13 +33,14 @@
#include "maemoremotemounter.h" #include "maemoremotemounter.h"
#include "maemoglobal.h" #include "maemoglobal.h"
#include "maemousedportsgatherer.h"
#include "qt4maemotarget.h" #include "qt4maemotarget.h"
#include <utils/ssh/sshconnection.h> #include <utils/ssh/sshconnection.h>
#include <utils/ssh/sshremoteprocess.h> #include <utils/ssh/sshremoteprocess.h>
#include <qt4projectmanager/qt4buildconfiguration.h> #include <qt4projectmanager/qt4buildconfiguration.h>
#include <qtsupport/baseqtversion.h> #include <qtsupport/baseqtversion.h>
#include <remotelinux/linuxdeviceconfiguration.h>
#include <remotelinux/remotelinuxusedportsgatherer.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <QtCore/QTimer> #include <QtCore/QTimer>
@@ -98,7 +99,7 @@ bool MaemoRemoteMounter::hasValidMountSpecifications() const
} }
void MaemoRemoteMounter::mount(PortList *freePorts, void MaemoRemoteMounter::mount(PortList *freePorts,
const MaemoUsedPortsGatherer *portsGatherer) const RemoteLinuxUsedPortsGatherer *portsGatherer)
{ {
QTC_ASSERT(m_state == Inactive, return); QTC_ASSERT(m_state == Inactive, return);

View File

@@ -54,9 +54,9 @@ namespace Qt4ProjectManager { class Qt4BuildConfiguration; }
namespace RemoteLinux { namespace RemoteLinux {
class LinuxDeviceConfiguration; class LinuxDeviceConfiguration;
class PortList; class PortList;
class RemoteLinuxUsedPortsGatherer;
namespace Internal { namespace Internal {
class MaemoUsedPortsGatherer;
class MaemoRemoteMounter : public QObject class MaemoRemoteMounter : public QObject
{ {
@@ -75,7 +75,7 @@ public:
bool hasValidMountSpecifications() const; bool hasValidMountSpecifications() const;
void resetMountSpecifications() { m_mountSpecs.clear(); } void resetMountSpecifications() { m_mountSpecs.clear(); }
void mount(PortList *freePorts, void mount(PortList *freePorts,
const MaemoUsedPortsGatherer *portsGatherer); const RemoteLinuxUsedPortsGatherer *portsGatherer);
void unmount(); void unmount();
void stop(); void stop();
@@ -135,7 +135,7 @@ private:
QByteArray m_utfsClientStderr; QByteArray m_utfsClientStderr;
QByteArray m_umountStderr; QByteArray m_umountStderr;
PortList *m_freePorts; PortList *m_freePorts;
const MaemoUsedPortsGatherer *m_portsGatherer; const RemoteLinuxUsedPortsGatherer *m_portsGatherer;
bool m_remoteMountsAllowed; bool m_remoteMountsAllowed;
QString m_maddeRoot; QString m_maddeRoot;

View File

@@ -25,7 +25,6 @@ HEADERS += \
maemomountspecification.h \ maemomountspecification.h \
maemoremotemounter.h \ maemoremotemounter.h \
maemoprofilesupdatedialog.h \ maemoprofilesupdatedialog.h \
maemousedportsgatherer.h \
maemopublishingwizardfactories.h \ maemopublishingwizardfactories.h \
maemopublishingbuildsettingspagefremantlefree.h \ maemopublishingbuildsettingspagefremantlefree.h \
maemopublishingfileselectiondialog.h \ maemopublishingfileselectiondialog.h \
@@ -96,7 +95,8 @@ HEADERS += \
remotelinuxenvironmentreader.h \ remotelinuxenvironmentreader.h \
sshkeydeployer.h \ sshkeydeployer.h \
typespecificdeviceconfigurationlistmodel.h \ typespecificdeviceconfigurationlistmodel.h \
sshkeycreationdialog.h sshkeycreationdialog.h \
remotelinuxusedportsgatherer.h
SOURCES += \ SOURCES += \
remotelinuxplugin.cpp \ remotelinuxplugin.cpp \
@@ -117,7 +117,6 @@ SOURCES += \
maemomountspecification.cpp \ maemomountspecification.cpp \
maemoremotemounter.cpp \ maemoremotemounter.cpp \
maemoprofilesupdatedialog.cpp \ maemoprofilesupdatedialog.cpp \
maemousedportsgatherer.cpp \
maemopublishingwizardfactories.cpp \ maemopublishingwizardfactories.cpp \
maemopublishingbuildsettingspagefremantlefree.cpp \ maemopublishingbuildsettingspagefremantlefree.cpp \
maemopublishingfileselectiondialog.cpp \ maemopublishingfileselectiondialog.cpp \
@@ -185,7 +184,8 @@ SOURCES += \
remotelinuxenvironmentreader.cpp \ remotelinuxenvironmentreader.cpp \
sshkeydeployer.cpp \ sshkeydeployer.cpp \
typespecificdeviceconfigurationlistmodel.cpp \ typespecificdeviceconfigurationlistmodel.cpp \
sshkeycreationdialog.cpp sshkeycreationdialog.cpp \
remotelinuxusedportsgatherer.cpp
FORMS += \ FORMS += \
maemopackagecreationwidget.ui \ maemopackagecreationwidget.ui \

View File

@@ -33,7 +33,7 @@
#include "linuxdeviceconfiguration.h" #include "linuxdeviceconfiguration.h"
#include "remotelinuxrunconfiguration.h" #include "remotelinuxrunconfiguration.h"
#include "maemousedportsgatherer.h" #include "remotelinuxusedportsgatherer.h"
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/ssh/sshconnection.h> #include <utils/ssh/sshconnection.h>
@@ -71,7 +71,7 @@ public:
{ {
} }
MaemoUsedPortsGatherer portsGatherer; RemoteLinuxUsedPortsGatherer portsGatherer;
const LinuxDeviceConfiguration::ConstPtr devConfig; const LinuxDeviceConfiguration::ConstPtr devConfig;
const QString remoteExecutable; const QString remoteExecutable;
const QString appArguments; const QString appArguments;
@@ -116,7 +116,7 @@ LinuxDeviceConfiguration::ConstPtr AbstractRemoteLinuxApplicationRunner::devConf
return m_d->devConfig; return m_d->devConfig;
} }
const MaemoUsedPortsGatherer *AbstractRemoteLinuxApplicationRunner::usedPortsGatherer() const const RemoteLinuxUsedPortsGatherer *AbstractRemoteLinuxApplicationRunner::usedPortsGatherer() const
{ {
return &m_d->portsGatherer; return &m_d->portsGatherer;
} }

View File

@@ -47,10 +47,10 @@ class SshRemoteProcess;
namespace RemoteLinux { namespace RemoteLinux {
class LinuxDeviceConfiguration; class LinuxDeviceConfiguration;
class RemoteLinuxRunConfiguration; class RemoteLinuxRunConfiguration;
class RemoteLinuxUsedPortsGatherer;
namespace Internal { namespace Internal {
class AbstractRemoteLinuxApplicationRunnerPrivate; class AbstractRemoteLinuxApplicationRunnerPrivate;
class MaemoUsedPortsGatherer;
} }
class REMOTELINUX_EXPORT AbstractRemoteLinuxApplicationRunner : public QObject class REMOTELINUX_EXPORT AbstractRemoteLinuxApplicationRunner : public QObject
@@ -68,7 +68,7 @@ public:
QSharedPointer<Utils::SshConnection> connection() const; QSharedPointer<Utils::SshConnection> connection() const;
QSharedPointer<const LinuxDeviceConfiguration> devConfig() const; QSharedPointer<const LinuxDeviceConfiguration> devConfig() const;
const Internal::MaemoUsedPortsGatherer *usedPortsGatherer() const; const RemoteLinuxUsedPortsGatherer *usedPortsGatherer() const;
PortList *freePorts(); PortList *freePorts();
QString remoteExecutable() const; QString remoteExecutable() const;
QString arguments() const; QString arguments() const;

View File

@@ -32,9 +32,9 @@
#include "remotelinuxdebugsupport.h" #include "remotelinuxdebugsupport.h"
#include "linuxdeviceconfiguration.h" #include "linuxdeviceconfiguration.h"
#include "maemousedportsgatherer.h"
#include "qt4maemotarget.h" #include "qt4maemotarget.h"
#include "remotelinuxapplicationrunner.h" #include "remotelinuxapplicationrunner.h"
#include "remotelinuxusedportsgatherer.h"
#include <debugger/debuggerengine.h> #include <debugger/debuggerengine.h>
#include <projectexplorer/abi.h> #include <projectexplorer/abi.h>

View File

@@ -28,82 +28,103 @@
** Nokia at info@qt.nokia.com. ** Nokia at info@qt.nokia.com.
** **
**************************************************************************/ **************************************************************************/
#include "remotelinuxusedportsgatherer.h"
#include "maemousedportsgatherer.h" #include "linuxdeviceconfiguration.h"
#include "maemoglobal.h"
#include <utils/ssh/sshremoteprocessrunner.h> #include <utils/ssh/sshremoteprocessrunner.h>
#include <QtCore/QString>
using namespace Utils; using namespace Utils;
namespace RemoteLinux { namespace RemoteLinux {
namespace Internal { namespace Internal {
MaemoUsedPortsGatherer::MaemoUsedPortsGatherer(QObject *parent) : class RemoteLinuxUsedPortsGathererPrivate
QObject(parent), m_running(false) {
public:
RemoteLinuxUsedPortsGathererPrivate() : running(false) {}
SshRemoteProcessRunner::Ptr procRunner;
QList<int> usedPorts;
QByteArray remoteStdout;
QByteArray remoteStderr;
bool running;
};
} // namespace Internal
using namespace Internal;
RemoteLinuxUsedPortsGatherer::RemoteLinuxUsedPortsGatherer(QObject *parent) :
QObject(parent), m_d(new RemoteLinuxUsedPortsGathererPrivate)
{ {
} }
MaemoUsedPortsGatherer::~MaemoUsedPortsGatherer() {} RemoteLinuxUsedPortsGatherer::~RemoteLinuxUsedPortsGatherer()
{
delete m_d;
}
void MaemoUsedPortsGatherer::start(const Utils::SshConnection::Ptr &connection, void RemoteLinuxUsedPortsGatherer::start(const Utils::SshConnection::Ptr &connection,
const LinuxDeviceConfiguration::ConstPtr &devConf) const LinuxDeviceConfiguration::ConstPtr &devConf)
{ {
if (m_running) if (m_d->running)
qWarning("Unexpected call of %s in running state", Q_FUNC_INFO); qWarning("Unexpected call of %s in running state", Q_FUNC_INFO);
m_usedPorts.clear(); m_d->usedPorts.clear();
m_remoteStdout.clear(); m_d->remoteStdout.clear();
m_remoteStderr.clear(); m_d->remoteStderr.clear();
m_procRunner = SshRemoteProcessRunner::create(connection); m_d->procRunner = SshRemoteProcessRunner::create(connection);
connect(m_procRunner.data(), SIGNAL(connectionError(Utils::SshError)), connect(m_d->procRunner.data(), SIGNAL(connectionError(Utils::SshError)),
SLOT(handleConnectionError())); SLOT(handleConnectionError()));
connect(m_procRunner.data(), SIGNAL(processClosed(int)), connect(m_d->procRunner.data(), SIGNAL(processClosed(int)),
SLOT(handleProcessClosed(int))); SLOT(handleProcessClosed(int)));
connect(m_procRunner.data(), SIGNAL(processOutputAvailable(QByteArray)), connect(m_d->procRunner.data(), SIGNAL(processOutputAvailable(QByteArray)),
SLOT(handleRemoteStdOut(QByteArray))); SLOT(handleRemoteStdOut(QByteArray)));
connect(m_procRunner.data(), SIGNAL(processErrorOutputAvailable(QByteArray)), connect(m_d->procRunner.data(), SIGNAL(processErrorOutputAvailable(QByteArray)),
SLOT(handleRemoteStdErr(QByteArray))); SLOT(handleRemoteStdErr(QByteArray)));
QString command = QLatin1String("lsof -nPi4tcp:") + devConf->freePorts().toString() const QString command = QLatin1String("lsof -nPi4tcp:") + devConf->freePorts().toString()
+ QLatin1String(" -F n |grep '^n' |sed -r 's/[^:]*:([[:digit:]]+).*/\\1/g' |sort -n |uniq"); + QLatin1String(" -F n |grep '^n' |sed -r 's/[^:]*:([[:digit:]]+).*/\\1/g' |sort -n |uniq");
if (devConf->osType() != LinuxDeviceConfiguration::HarmattanOsType) { // devrootsh is broken on Harmattan m_d->procRunner->run(command.toUtf8());
command.prepend(MaemoGlobal::remoteSudo(devConf->osType(), m_d->running = true;
devConf->sshParameters().userName) + QLatin1Char(' '));
}
m_procRunner->run(command.toUtf8());
m_running = true;
} }
void MaemoUsedPortsGatherer::stop() void RemoteLinuxUsedPortsGatherer::stop()
{ {
if (!m_running) if (!m_d->running)
return; return;
m_running = false; m_d->running = false;
disconnect(m_procRunner->connection().data(), 0, this, 0); disconnect(m_d->procRunner->connection().data(), 0, this, 0);
if (m_procRunner->process()) if (m_d->procRunner->process())
m_procRunner->process()->closeChannel(); m_d->procRunner->process()->closeChannel();
} }
int MaemoUsedPortsGatherer::getNextFreePort(PortList *freePorts) const int RemoteLinuxUsedPortsGatherer::getNextFreePort(PortList *freePorts) const
{ {
while (freePorts->hasMore()) { while (freePorts->hasMore()) {
const int port = freePorts->getNext(); const int port = freePorts->getNext();
if (!m_usedPorts.contains(port)) if (!m_d->usedPorts.contains(port))
return port; return port;
} }
return -1; return -1;
} }
void MaemoUsedPortsGatherer::setupUsedPorts() QList<int> RemoteLinuxUsedPortsGatherer::usedPorts() const
{ {
const QList<QByteArray> &portStrings = m_remoteStdout.split('\n'); return m_d->usedPorts;
}
void RemoteLinuxUsedPortsGatherer::setupUsedPorts()
{
const QList<QByteArray> &portStrings = m_d->remoteStdout.split('\n');
foreach (const QByteArray &portString, portStrings) { foreach (const QByteArray &portString, portStrings) {
if (portString.isEmpty()) if (portString.isEmpty())
continue; continue;
bool ok; bool ok;
const int port = portString.toInt(&ok); const int port = portString.toInt(&ok);
if (ok) { if (ok) {
m_usedPorts << port; m_d->usedPorts << port;
} else { } else {
qWarning("%s: Unexpected string '%s' is not a port.", qWarning("%s: Unexpected string '%s' is not a port.",
Q_FUNC_INFO, portString.data()); Q_FUNC_INFO, portString.data());
@@ -112,35 +133,35 @@ void MaemoUsedPortsGatherer::setupUsedPorts()
emit portListReady(); emit portListReady();
} }
void MaemoUsedPortsGatherer::handleConnectionError() void RemoteLinuxUsedPortsGatherer::handleConnectionError()
{ {
if (!m_running) if (!m_d->running)
return; return;
emit error(tr("Connection error: %1"). emit error(tr("Connection error: %1").
arg(m_procRunner->connection()->errorString())); arg(m_d->procRunner->connection()->errorString()));
stop(); stop();
} }
void MaemoUsedPortsGatherer::handleProcessClosed(int exitStatus) void RemoteLinuxUsedPortsGatherer::handleProcessClosed(int exitStatus)
{ {
if (!m_running) if (!m_d->running)
return; return;
QString errMsg; QString errMsg;
switch (exitStatus) { switch (exitStatus) {
case SshRemoteProcess::FailedToStart: case SshRemoteProcess::FailedToStart:
errMsg = tr("Could not start remote process: %1") errMsg = tr("Could not start remote process: %1")
.arg(m_procRunner->process()->errorString()); .arg(m_d->procRunner->process()->errorString());
break; break;
case SshRemoteProcess::KilledBySignal: case SshRemoteProcess::KilledBySignal:
errMsg = tr("Remote process crashed: %1") errMsg = tr("Remote process crashed: %1")
.arg(m_procRunner->process()->errorString()); .arg(m_d->procRunner->process()->errorString());
break; break;
case SshRemoteProcess::ExitedNormally: case SshRemoteProcess::ExitedNormally:
if (m_procRunner->process()->exitCode() == 0) { if (m_d->procRunner->process()->exitCode() == 0) {
setupUsedPorts(); setupUsedPorts();
} else { } else {
errMsg = tr("Remote process failed: %1") errMsg = tr("Remote process failed: %1")
.arg(m_procRunner->process()->errorString()); .arg(m_d->procRunner->process()->errorString());
} }
break; break;
default: default:
@@ -148,24 +169,23 @@ void MaemoUsedPortsGatherer::handleProcessClosed(int exitStatus)
} }
if (!errMsg.isEmpty()) { if (!errMsg.isEmpty()) {
if (!m_remoteStderr.isEmpty()) { if (!m_d->remoteStderr.isEmpty()) {
errMsg += tr("\nRemote error output was: %1") errMsg += tr("\nRemote error output was: %1")
.arg(QString::fromUtf8(m_remoteStderr)); .arg(QString::fromUtf8(m_d->remoteStderr));
} }
emit error(errMsg); emit error(errMsg);
} }
stop(); stop();
} }
void MaemoUsedPortsGatherer::handleRemoteStdOut(const QByteArray &output) void RemoteLinuxUsedPortsGatherer::handleRemoteStdOut(const QByteArray &output)
{ {
m_remoteStdout += output; m_d->remoteStdout += output;
} }
void MaemoUsedPortsGatherer::handleRemoteStdErr(const QByteArray &output) void RemoteLinuxUsedPortsGatherer::handleRemoteStdErr(const QByteArray &output)
{ {
m_remoteStderr += output; m_d->remoteStderr += output;
} }
} // namespace Internal
} // namespace RemoteLinux } // namespace RemoteLinux

View File

@@ -28,37 +28,40 @@
** Nokia at info@qt.nokia.com. ** Nokia at info@qt.nokia.com.
** **
**************************************************************************/ **************************************************************************/
#ifndef REMOTELINUXUSEDPORTSGATHERER_H
#define REMOTELINUXUSEDPORTSGATHERER_H
#ifndef MAEMOUSEDPORTSGATHERER_H #include "remotelinux_export.h"
#define MAEMOUSEDPORTSGATHERER_H
#include <QtCore/QList> #include <QtCore/QList>
#include <QtCore/QObject> #include <QtCore/QObject>
#include <QtCore/QSharedPointer> #include <QtCore/QSharedPointer>
#include <QtCore/QString>
QT_FORWARD_DECLARE_CLASS(QString)
namespace Utils { namespace Utils {
class SshConnection; class SshConnection;
class SshRemoteProcessRunner; } // namespace Utils
}
namespace RemoteLinux { namespace RemoteLinux {
class LinuxDeviceConfiguration; class LinuxDeviceConfiguration;
class PortList; class PortList;
namespace Internal { namespace Internal {
class RemoteLinuxUsedPortsGathererPrivate;
} // namespace Internal
class MaemoUsedPortsGatherer : public QObject class REMOTELINUX_EXPORT RemoteLinuxUsedPortsGatherer : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit MaemoUsedPortsGatherer(QObject *parent = 0); explicit RemoteLinuxUsedPortsGatherer(QObject *parent = 0);
~MaemoUsedPortsGatherer(); ~RemoteLinuxUsedPortsGatherer();
void start(const QSharedPointer<Utils::SshConnection> &connection, void start(const QSharedPointer<Utils::SshConnection> &connection,
const QSharedPointer<const LinuxDeviceConfiguration> &devConf); const QSharedPointer<const LinuxDeviceConfiguration> &devConf);
void stop(); void stop();
int getNextFreePort(PortList *freePorts) const; // returns -1 if no more are left int getNextFreePort(PortList *freePorts) const; // returns -1 if no more are left
QList<int> usedPorts() const { return m_usedPorts; } QList<int> usedPorts() const;
signals: signals:
void error(const QString &errMsg); void error(const QString &errMsg);
@@ -73,14 +76,9 @@ private slots:
private: private:
void setupUsedPorts(); void setupUsedPorts();
QSharedPointer<Utils::SshRemoteProcessRunner> m_procRunner; Internal::RemoteLinuxUsedPortsGathererPrivate * const m_d;
QList<int> m_usedPorts;
QByteArray m_remoteStdout;
QByteArray m_remoteStderr;
bool m_running;
}; };
} // namespace Internal
} // namespace RemoteLinux } // namespace RemoteLinux
#endif // MAEMOUSEDPORTSGATHERER_H #endif // REMOTELINUXUSEDPORTSGATHERER_H