From e70894dd592b240b00ecb6f291f2b29dfde977e7 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sat, 12 Apr 2014 02:48:53 +0200 Subject: [PATCH] refs #205, renamed to CNetworkUtils as more methods for IP-addresses are introduced, added CNetworkUtils::getKnownIpAddresses() --- samples/blackgui/mainwindow_settings.cpp | 12 ++--- src/blackcore/context_network_impl.cpp | 4 +- .../{networkchecks.cpp => networkutils.cpp} | 44 +++++++++++++------ .../{networkchecks.h => networkutils.h} | 25 ++++++----- 4 files changed, 52 insertions(+), 33 deletions(-) rename src/blackmisc/{networkchecks.cpp => networkutils.cpp} (66%) rename src/blackmisc/{networkchecks.h => networkutils.h} (77%) diff --git a/samples/blackgui/mainwindow_settings.cpp b/samples/blackgui/mainwindow_settings.cpp index 7a7b93b06..d992a0858 100644 --- a/samples/blackgui/mainwindow_settings.cpp +++ b/samples/blackgui/mainwindow_settings.cpp @@ -4,7 +4,7 @@ #include "blackcore/dbus_server.h" #include "blackcore/context_network.h" #include "blackmisc/hwkeyboardkey.h" -#include "blackmisc/networkchecks.h" +#include "blackmisc/networkutils.h" #include "blacksim/fsx/simconnectutilities.h" using namespace BlackCore; @@ -160,19 +160,19 @@ void MainWindow::testSimConnectConnection() this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "no address or port")); return; } - if (!CNetworkChecks::isValidIPv4Address(address)) + if (!CNetworkUtils::isValidIPv4Address(address)) { this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "IPv4 address invalid")); return; } - if (!CNetworkChecks::isValidPort(port)) + if (!CNetworkUtils::isValidPort(port)) { this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "invalid port")); return; } quint16 p = port.toUInt(); QString msg; - if (!CNetworkChecks::canConnect(address, p, msg)) + if (!CNetworkUtils::canConnect(address, p, msg)) { this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, msg)); return; @@ -192,12 +192,12 @@ void MainWindow::saveSimConnectCfg() this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "no address or port")); return; } - if (!CNetworkChecks::isValidIPv4Address(address)) + if (!CNetworkUtils::isValidIPv4Address(address)) { this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "IPv4 address invalid")); return; } - if (!CNetworkChecks::isValidPort(port)) + if (!CNetworkUtils::isValidPort(port)) { this->displayStatusMessage(CStatusMessage(CStatusMessage::TypeTrafficNetwork, CStatusMessage::SeverityWarning, "invalid port")); return; diff --git a/src/blackcore/context_network_impl.cpp b/src/blackcore/context_network_impl.cpp index e3e4de50a..018fa7c2b 100644 --- a/src/blackcore/context_network_impl.cpp +++ b/src/blackcore/context_network_impl.cpp @@ -11,7 +11,7 @@ #include "vatsimbookingreader.h" #include "vatsimdatafilereader.h" -#include "blackmisc/networkchecks.h" +#include "blackmisc/networkutils.h" #include "blackmisc/avatcstationlist.h" #include @@ -128,7 +128,7 @@ namespace BlackCore else { QString msg; - if (CNetworkChecks::canConnect(currentServer, msg, 2000)) + if (CNetworkUtils::canConnect(currentServer, msg, 2000)) { INetwork::LoginMode mode = static_cast(loginMode); this->m_ownAircraft.setPilot(currentServer.getUser()); // still needed? diff --git a/src/blackmisc/networkchecks.cpp b/src/blackmisc/networkutils.cpp similarity index 66% rename from src/blackmisc/networkchecks.cpp rename to src/blackmisc/networkutils.cpp index 5be9a99d4..4d7b140a8 100644 --- a/src/blackmisc/networkchecks.cpp +++ b/src/blackmisc/networkutils.cpp @@ -3,7 +3,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "networkchecks.h" +#include "networkutils.h" #include #include #include @@ -15,7 +15,7 @@ namespace BlackMisc /* * Connected interface? */ - bool CNetworkChecks::hasConnectedInterface(bool withDebugOutput) + bool CNetworkUtils::hasConnectedInterface(bool withDebugOutput) { // http://stackoverflow.com/questions/2475266/verfiying-the-network-connection-using-qt-4-4 QList interfaces = QNetworkInterface::allInterfaces(); @@ -24,12 +24,11 @@ namespace BlackMisc for (int i = 0; i < interfaces.count(); i++) { QNetworkInterface iface = interfaces.at(i); + + // details of connection + if (withDebugOutput) qDebug() << "name:" << iface.name() << endl << "ip addresses:" << endl << "mac:" << iface.hardwareAddress() << endl; if (iface.flags().testFlag(QNetworkInterface::IsUp) && !iface.flags().testFlag(QNetworkInterface::IsLoopBack)) { - - // details of connection - if (withDebugOutput) qDebug() << "name:" << iface.name() << endl << "ip addresses:" << endl << "mac:" << iface.hardwareAddress() << endl; - // this loop is important for (int j = 0; j < iface.addressEntries().count(); j++) { @@ -48,12 +47,31 @@ namespace BlackMisc return result; } + /* + * my IP + */ + QStringList CNetworkUtils::getKnownIpAddresses() + { + QStringList ips; + if (!CNetworkUtils::hasConnectedInterface(false)) return ips; + foreach(const QHostAddress & address, QNetworkInterface::allAddresses()) + { + if (address.isLoopback() || address.isNull()) continue; + if (address.protocol() == QAbstractSocket::IPv4Protocol && address != QHostAddress(QHostAddress::LocalHost)) + { + QString a = address.toString(); + if (CNetworkUtils::isValidIPv4Address(a)) ips.append(a); + } + } + return ips; + } + /* * Can connect to IP/port? */ - bool CNetworkChecks::canConnect(const QString &hostAddress, quint16 port, QString &message, int timeoutMs) + bool CNetworkUtils::canConnect(const QString &hostAddress, quint16 port, QString &message, int timeoutMs) { - if (!CNetworkChecks::hasConnectedInterface(false)) + if (!CNetworkUtils::hasConnectedInterface(false)) { message = QObject::tr("No connected network interface", "BlackMisc"); return false; @@ -80,15 +98,15 @@ namespace BlackMisc /* * Can connect server? */ - bool CNetworkChecks::canConnect(const Network::CServer &server, QString &message, int timeoutMs) + bool CNetworkUtils::canConnect(const Network::CServer &server, QString &message, int timeoutMs) { - return CNetworkChecks::canConnect(server.getAddress(), server.getPort(), message, timeoutMs); + return CNetworkUtils::canConnect(server.getAddress(), server.getPort(), message, timeoutMs); } /* * Valid IPv4 address */ - bool CNetworkChecks::isValidIPv4Address(const QString &candidate) + bool CNetworkUtils::isValidIPv4Address(const QString &candidate) { QHostAddress address(candidate); return (QAbstractSocket::IPv4Protocol == address.protocol()); @@ -97,7 +115,7 @@ namespace BlackMisc /* * Valid IPv6 address */ - bool CNetworkChecks::isValidIPv6Address(const QString &candidate) + bool CNetworkUtils::isValidIPv6Address(const QString &candidate) { QHostAddress address(candidate); return (QAbstractSocket::IPv6Protocol == address.protocol()); @@ -106,7 +124,7 @@ namespace BlackMisc /* * Valid port? */ - bool CNetworkChecks::isValidPort(const QString &port) + bool CNetworkUtils::isValidPort(const QString &port) { bool success; int p = port.toInt(&success); diff --git a/src/blackmisc/networkchecks.h b/src/blackmisc/networkutils.h similarity index 77% rename from src/blackmisc/networkchecks.h rename to src/blackmisc/networkutils.h index 422b64384..69e4948b2 100644 --- a/src/blackmisc/networkchecks.h +++ b/src/blackmisc/networkutils.h @@ -3,25 +3,23 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef BLACKMISC_NETWORKCHECKS_H -#define BLACKMISC_NETWORKCHECKS_H +#ifndef BLACKMISC_NETWORKUTILS_H +#define BLACKMISC_NETWORKUTILS_H #include "nwserver.h" -#include +#include namespace BlackMisc { /*! - * \brief Utilities checking whether a network connection can be established + * \brief Utilities, e.g. checking whether a network connection can be established */ - class CNetworkChecks + class CNetworkUtils { private: - /*! - * \brief Constructor - */ - CNetworkChecks() {} + // Constructor + CNetworkUtils() {} public: /*! @@ -50,13 +48,16 @@ namespace BlackMisc */ static bool canConnect(const BlackMisc::Network::CServer &server, QString &message, int timeoutMs = 1500); - //! \brief Valid IPv4 address + //! Find out my IPv4 address, empty if not possible + static QStringList getKnownIpAddresses(); + + //! Valid IPv4 address static bool isValidIPv4Address(const QString &candidate); - //! \brief Valid IPv6 address + //! Valid IPv6 address static bool isValidIPv6Address(const QString &candidate); - //! \brief Valid port + //! Valid port static bool isValidPort(const QString &port); };