diff --git a/src/sensor/ping360helperservice.cpp b/src/sensor/ping360helperservice.cpp index a1372789e..cd8791b99 100644 --- a/src/sensor/ping360helperservice.cpp +++ b/src/sensor/ping360helperservice.cpp @@ -51,9 +51,33 @@ void Ping360HelperService::doBroadcast() { const QByteArray datagram = Ping360AsciiProtocol::discoveryMessage(); - // Send discovery message as broadcast and for companion ip subnet - for (const QHostAddress& address : {QHostAddress {QHostAddress::Broadcast}, QHostAddress {"192.168.2.255"}}) { - _broadcastSocket.writeDatagram(datagram, address, Ping360AsciiProtocol::udpPort()); + // Retrieve the IP addresses and their associated broadcast addresses + QList> ipBroadcastAddresses; + QList interfaces = QNetworkInterface::allInterfaces(); + for (const QNetworkInterface& interface : interfaces) { + if (interface.flags().testFlag(QNetworkInterface::IsUp) && + !interface.flags().testFlag(QNetworkInterface::IsLoopBack)) { + QList entries = interface.addressEntries(); + for (const QNetworkAddressEntry& entry : entries) { + if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol) { + ipBroadcastAddresses.append(qMakePair(entry.ip(), entry.broadcast())); + } + } + } + } + + // Send discovery message as broadcast for each interface's associated broadcast address + for (const QPair& addressPair : ipBroadcastAddresses) { + const QHostAddress& ipAddress = addressPair.first; + const QHostAddress& broadcastAddress = addressPair.second; + + if (_broadcastSocket.writeDatagram(datagram, broadcastAddress, Ping360AsciiProtocol::udpPort()) == -1) { + qDebug() << "Failed to send datagram to broadcast address:" << broadcastAddress.toString() + << "for IP address:" << ipAddress.toString(); + } else { + qDebug() << "Datagram sent successfully to broadcast address:" << broadcastAddress.toString() + << "for IP address:" << ipAddress.toString(); + } } }