Changeset 11128 in ntrip for trunk/BNC/src/bncnetqueryudp0.cpp
- Timestamp:
- Oct 24, 2026, 11:37:52 PM (33 hours ago)
- File:
-
- 1 edited
-
trunk/BNC/src/bncnetqueryudp0.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/src/bncnetqueryudp0.cpp
r6787 r11128 14 14 * 15 15 * -----------------------------------------------------------------------*/ 16 17 #include <QHostInfo> 16 18 17 19 #include "bncnetqueryudp0.h" … … 47 49 void bncNetQueryUdp0::waitForReadyRead(QByteArray& outData) { 48 50 49 // Wait Loop 50 // --------- 51 if (!_udpSocket->hasPendingDatagrams()) { 52 _eventLoop->exec(); 51 if (!_udpSocket) { 52 return; 53 53 } 54 54 55 // Append Data 56 // ----------- 57 QByteArray datagram; 58 datagram.resize(_udpSocket->pendingDatagramSize()); 59 _udpSocket->readDatagram(datagram.data(), datagram.size()); 55 while (true) { 60 56 61 outData.append(datagram); 57 // Wait Loop 58 // --------- 59 if (!_udpSocket->hasPendingDatagrams()) { 60 _eventLoop->exec(); 61 if (!_udpSocket->hasPendingDatagrams()) { // stopped 62 return; 63 } 64 } 65 66 // Append Data, only from the accepted senders 67 // ------------------------------------------- 68 QByteArray datagram; 69 QHostAddress sender; 70 datagram.resize(_udpSocket->pendingDatagramSize()); 71 _udpSocket->readDatagram(datagram.data(), datagram.size(), &sender); 72 bool accepted = _senders.isEmpty(); 73 for (int ii = 0; !accepted && ii < _senders.size(); ii++) { 74 accepted = sender.isEqual(_senders[ii], QHostAddress::ConvertV4MappedToIPv4); 75 } 76 if (accepted) { 77 outData.append(datagram); 78 return; 79 } 80 } 62 81 } 63 82 … … 67 86 68 87 _status = running; 88 89 // Host of the URL: sender whose datagrams are accepted; 127.0.0.1 (as 90 // written by the 'Add Stream - Coming from UDP Port' dialog), localhost 91 // or 0.0.0.0: datagrams from any sender 92 _senders.clear(); 93 QString host = url.host(); 94 if (!host.isEmpty() && host != "127.0.0.1" && host != "localhost" && host != "0.0.0.0") { 95 QHostAddress address; 96 if (address.setAddress(host)) { 97 _senders << address; 98 } 99 else { 100 _senders = QHostInfo::fromName(host).addresses(); 101 if (_senders.isEmpty()) { 102 emit newMessage(url.path().toLatin1().replace(0,1,"") + 103 ": Cannot resolve UDP sender " + host.toLatin1(), true); 104 _status = error; 105 return; 106 } 107 } 108 } 69 109 70 110 delete _udpSocket;
Note:
See TracChangeset
for help on using the changeset viewer.
