From 4e7238578ce6e2e00682f98ca998918bd991d98c Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Fri, 2 Mar 2018 13:10:50 +0100 Subject: [PATCH] monitor network devices and reconfigure upnp server --- .../upnp/upnpdiscoveryimplementation.cpp | 23 ++++++++++++++++++- .../upnp/upnpdiscoveryimplementation.h | 2 ++ libnymea-core/servermanager.cpp | 3 --- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/libnymea-core/hardware/network/upnp/upnpdiscoveryimplementation.cpp b/libnymea-core/hardware/network/upnp/upnpdiscoveryimplementation.cpp index a93cb911..cdbd6b7c 100644 --- a/libnymea-core/hardware/network/upnp/upnpdiscoveryimplementation.cpp +++ b/libnymea-core/hardware/network/upnp/upnpdiscoveryimplementation.cpp @@ -52,6 +52,8 @@ #include #include #include +#include +#include namespace nymeaserver { @@ -65,6 +67,11 @@ UpnpDiscoveryImplementation::UpnpDiscoveryImplementation(QNetworkAccessManager * m_notificationTimer->setSingleShot(false); connect(m_notificationTimer, &QTimer::timeout, this, &UpnpDiscoveryImplementation::notificationTimeout); + QNetworkConfigurationManager *configManager = new QNetworkConfigurationManager(this); + connect(configManager, &QNetworkConfigurationManager::configurationAdded, this, &UpnpDiscoveryImplementation::networkConfigurationChanged); + connect(configManager, &QNetworkConfigurationManager::configurationRemoved, this, &UpnpDiscoveryImplementation::networkConfigurationChanged); + connect(configManager, &QNetworkConfigurationManager::configurationChanged, this, &UpnpDiscoveryImplementation::networkConfigurationChanged); + m_available = true; qCDebug(dcHardware()) << "-->" << name() << "created successfully."; @@ -168,7 +175,7 @@ void UpnpDiscoveryImplementation::respondToSearchRequest(QHostAddress host, int "USN:uuid:" + uuid + "::urn:schemas-upnp-org:device:Basic:1\r\n" "\r\n"); - //qCDebug(dcHardware) << QString("Sending response to %1:%2\n").arg(host.toString()).arg(port); + qCDebug(dcUpnp()) << QString("Sending response to %1:%2").arg(host.toString()).arg(port); m_socket->writeDatagram(rootdeviceResponseMessage, host, port); } } @@ -200,6 +207,7 @@ void UpnpDiscoveryImplementation::setEnabled(bool enabled) if (m_enabled == enabled) return; + qCDebug(dcUpnp()) << "Enabling UPnP server"; m_enabled = enabled; emit enabledChanged(m_enabled); @@ -230,6 +238,7 @@ void UpnpDiscoveryImplementation::readData() } if (data.contains("M-SEARCH") && !QNetworkInterface::allAddresses().contains(hostAddress)) { + qCDebug(dcUpnp()) << "UPnP discovery request received"; respondToSearchRequest(hostAddress, port); return; } @@ -455,6 +464,15 @@ void UpnpDiscoveryImplementation::discoverTimeout() delete discoveryRequest; } +void UpnpDiscoveryImplementation::networkConfigurationChanged(const QNetworkConfiguration &config) +{ + Q_UNUSED(config) + if (m_enabled) { + disable(); + enable(); + } +} + bool UpnpDiscoveryImplementation::enable() { // Clean up @@ -506,6 +524,9 @@ bool UpnpDiscoveryImplementation::enable() bool UpnpDiscoveryImplementation::disable() { + if (!m_socket) { + return false; + } sendByeByeMessage(); m_socket->waitForBytesWritten(); m_socket->close(); diff --git a/libnymea-core/hardware/network/upnp/upnpdiscoveryimplementation.h b/libnymea-core/hardware/network/upnp/upnpdiscoveryimplementation.h index 75c8c359..8ef42502 100644 --- a/libnymea-core/hardware/network/upnp/upnpdiscoveryimplementation.h +++ b/libnymea-core/hardware/network/upnp/upnpdiscoveryimplementation.h @@ -86,6 +86,8 @@ private slots: void sendAliveMessage(); void discoverTimeout(); + void networkConfigurationChanged(const QNetworkConfiguration &config); + public slots: bool enable(); bool disable(); diff --git a/libnymea-core/servermanager.cpp b/libnymea-core/servermanager.cpp index 7da6364f..d84ddc28 100644 --- a/libnymea-core/servermanager.cpp +++ b/libnymea-core/servermanager.cpp @@ -48,9 +48,6 @@ ServerManager::ServerManager(NymeaConfiguration *configuration, QObject *parent) QObject(parent), m_sslConfiguration(QSslConfiguration()) { - // TODO: check this - - if (!QSslSocket::supportsSsl()) { qCWarning(dcConnection) << "SSL is not supported/installed on this platform."; } else {