From 220f67dfdf577ecda84fe830b16d6fac4008ccec Mon Sep 17 00:00:00 2001
From: Christian Kandeler <christian.kandeler@nokia.com>
Date: Fri, 10 Feb 2012 10:39:48 +0100
Subject: [PATCH] SSH: Export information about the underlying TCP connection.

Change-Id: I62bce3b563b6aba481642fac0d427c0f0d3b2ddd
Reviewed-by: hjk <qthjk@ovi.com>
---
 src/libs/utils/ssh/sshconnection.cpp            |  7 +++++--
 src/libs/utils/ssh/sshconnection.h              | 17 +++++++++++++++--
 src/plugins/remotelinux/remotelinux.pro         |  1 +
 .../remotelinuxusedportsgatherer.cpp            |  2 +-
 4 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/src/libs/utils/ssh/sshconnection.cpp b/src/libs/utils/ssh/sshconnection.cpp
index 459ce0aa80d..8dbfead8d2b 100644
--- a/src/libs/utils/ssh/sshconnection.cpp
+++ b/src/libs/utils/ssh/sshconnection.cpp
@@ -167,9 +167,12 @@ SshConnectionParameters SshConnection::connectionParameters() const
     return d->m_connParams;
 }
 
-QAbstractSocket::NetworkLayerProtocol SshConnection::ipProtocolVersion() const
+SshConnectionInfo SshConnection::connectionInfo() const
 {
-    return d->m_socket->localAddress().protocol();
+    QTC_ASSERT(state() == Connected, return SshConnectionInfo());
+
+    return SshConnectionInfo(d->m_socket->localAddress(), d->m_socket->localPort(),
+        d->m_socket->peerAddress(), d->m_socket->peerPort());
 }
 
 SshConnection::~SshConnection()
diff --git a/src/libs/utils/ssh/sshconnection.h b/src/libs/utils/ssh/sshconnection.h
index 083ae67cd01..a9aa532c189 100644
--- a/src/libs/utils/ssh/sshconnection.h
+++ b/src/libs/utils/ssh/sshconnection.h
@@ -41,7 +41,7 @@
 #include <QtCore/QObject>
 #include <QtCore/QSharedPointer>
 #include <QtCore/QString>
-#include <QtNetwork/QAbstractSocket>
+#include <QtNetwork/QHostAddress>
 
 namespace Utils {
 class SftpChannel;
@@ -71,6 +71,19 @@ public:
 QTCREATOR_UTILS_EXPORT bool operator==(const SshConnectionParameters &p1, const SshConnectionParameters &p2);
 QTCREATOR_UTILS_EXPORT bool operator!=(const SshConnectionParameters &p1, const SshConnectionParameters &p2);
 
+class QTCREATOR_UTILS_EXPORT SshConnectionInfo
+{
+public:
+    SshConnectionInfo() : localPort(0), peerPort(0) {}
+    SshConnectionInfo(const QHostAddress &la, quint16 lp, const QHostAddress &pa, quint16 pp)
+        : localAddress(la), localPort(lp), peerAddress(pa), peerPort(pp) {}
+
+    QHostAddress localAddress;
+    quint16 localPort;
+    QHostAddress peerAddress;
+    quint16 peerPort;
+};
+
 class QTCREATOR_UTILS_EXPORT SshConnection : public QObject
 {
     Q_OBJECT
@@ -87,7 +100,7 @@ public:
     SshError errorState() const;
     QString errorString() const;
     SshConnectionParameters connectionParameters() const;
-    QAbstractSocket::NetworkLayerProtocol ipProtocolVersion() const;
+    SshConnectionInfo connectionInfo() const;
     ~SshConnection();
 
     QSharedPointer<SshRemoteProcess> createRemoteProcess(const QByteArray &command);
diff --git a/src/plugins/remotelinux/remotelinux.pro b/src/plugins/remotelinux/remotelinux.pro
index 6d2349ea4db..8feab7f75df 100644
--- a/src/plugins/remotelinux/remotelinux.pro
+++ b/src/plugins/remotelinux/remotelinux.pro
@@ -1,5 +1,6 @@
 TEMPLATE = lib
 TARGET = RemoteLinux
+QT += network
 
 include(../../qtcreatorplugin.pri)
 include(remotelinux_dependencies.pri)
diff --git a/src/plugins/remotelinux/remotelinuxusedportsgatherer.cpp b/src/plugins/remotelinux/remotelinuxusedportsgatherer.cpp
index 4dc6b4339b2..2b7dd0b80bb 100644
--- a/src/plugins/remotelinux/remotelinuxusedportsgatherer.cpp
+++ b/src/plugins/remotelinux/remotelinuxusedportsgatherer.cpp
@@ -86,7 +86,7 @@ void RemoteLinuxUsedPortsGatherer::start(const Utils::SshConnection::Ptr &connec
         SLOT(handleRemoteStdErr(QByteArray)));
     QString procFilePath;
     int addressLength;
-    if (connection->ipProtocolVersion() == QAbstractSocket::IPv4Protocol) {
+    if (connection->connectionInfo().localAddress.protocol() == QAbstractSocket::IPv4Protocol) {
         procFilePath = QLatin1String("/proc/net/tcp");
         addressLength = 8;
     } else {
-- 
GitLab