From 6fa60949c1dcf8af134988219f7947d73f3b3464 Mon Sep 17 00:00:00 2001 From: Johann Latocha Date: Thu, 26 Aug 2010 22:18:48 +0200 Subject: Defect #746 --- src/net/pvsServiceBroadcast.cpp | 19 +++++++++++++++++-- src/net/pvsServiceBroadcast.h | 2 +- 2 files changed, 18 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/net/pvsServiceBroadcast.cpp b/src/net/pvsServiceBroadcast.cpp index cf15b5b..f68db56 100644 --- a/src/net/pvsServiceBroadcast.cpp +++ b/src/net/pvsServiceBroadcast.cpp @@ -20,12 +20,26 @@ #include #include "src/util/serviceDiscoveryUtil.h" +#include +#include + PVSServiceBroadcast::PVSServiceBroadcast() { _announce = NULL; _timer = 0; _broadcaster.bind(SD_PORT_CONSOLE); - _everyone = QHostAddress(QHostAddress::Broadcast); + + QList interfaces = QNetworkInterface::allInterfaces (); + foreach (QNetworkInterface interface, interfaces) + { + QList entries = interface.addressEntries(); + foreach (QNetworkAddressEntry entry, entries) { + if (!entry.broadcast().isNull() && entry.broadcast().toString() != "127.255.255.255") + _everyone.append(entry.broadcast()); + } + } + if (_everyone.isEmpty()) + qDebug("ERROR: No broadcast address found"); } PVSServiceBroadcast::~PVSServiceBroadcast() @@ -47,5 +61,6 @@ void PVSServiceBroadcast::setFingerprint(QByteArray sha1) void PVSServiceBroadcast::timerEvent(QTimerEvent *event) { if (_announce == NULL) return; - _broadcaster.writeDatagram(*_announce, _everyone, SD_PORT_CLIENT); + foreach (QHostAddress bcast, _everyone) + _broadcaster.writeDatagram(*_announce, bcast, SD_PORT_CLIENT); } diff --git a/src/net/pvsServiceBroadcast.h b/src/net/pvsServiceBroadcast.h index cf3f63d..a23370f 100644 --- a/src/net/pvsServiceBroadcast.h +++ b/src/net/pvsServiceBroadcast.h @@ -39,7 +39,7 @@ protected: private: QByteArray *_announce; QUdpSocket _broadcaster; - QHostAddress _everyone; + QList _everyone; int _timer; }; -- cgit v1.2.3-55-g7522