mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-07-23 10:54:26 +02:00
Handle _unfilteredHandlers first upon processing datagrams
This commit is contained in:
parent
4392b3c2a8
commit
bf839ca291
2 changed files with 27 additions and 18 deletions
|
@ -344,7 +344,7 @@ void Socket::readPendingDatagrams() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
_incomingDatagrams.push({ senderAddress, senderPort, packetSizeWithHeader,
|
_incomingDatagrams.push_back({ senderAddress, senderPort, packetSizeWithHeader,
|
||||||
std::move(buffer), receiveTime });
|
std::move(buffer), receiveTime });
|
||||||
++packetsRead;
|
++packetsRead;
|
||||||
|
|
||||||
|
@ -361,6 +361,28 @@ void Socket::processPendingDatagrams(int) {
|
||||||
// setup a HifiSockAddr to read into
|
// setup a HifiSockAddr to read into
|
||||||
HifiSockAddr senderSockAddr;
|
HifiSockAddr senderSockAddr;
|
||||||
|
|
||||||
|
// Process unfiltered packets first.
|
||||||
|
for (auto datagramIter = _incomingDatagrams.begin(); datagramIter != _incomingDatagrams.end(); ++datagramIter) {
|
||||||
|
senderSockAddr.setAddress(datagramIter->_senderAddress);
|
||||||
|
senderSockAddr.setPort(datagramIter->_senderPort);
|
||||||
|
auto it = _unfilteredHandlers.find(senderSockAddr);
|
||||||
|
if (it != _unfilteredHandlers.end()) {
|
||||||
|
// we have a registered unfiltered handler for this HifiSockAddr (eg. STUN packet) - call that and return
|
||||||
|
if (it->second) {
|
||||||
|
auto basePacket = BasePacket::fromReceivedPacket(std::move(datagramIter->_datagram),
|
||||||
|
datagramIter->_datagramLength,
|
||||||
|
senderSockAddr);
|
||||||
|
basePacket->setReceiveTime(datagramIter->_receiveTime);
|
||||||
|
it->second(std::move(basePacket));
|
||||||
|
}
|
||||||
|
|
||||||
|
datagramIter = _incomingDatagrams.erase(datagramIter);
|
||||||
|
if (datagramIter == _incomingDatagrams.end()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while (!_incomingDatagrams.empty()) {
|
while (!_incomingDatagrams.empty()) {
|
||||||
auto& datagram = _incomingDatagrams.front();
|
auto& datagram = _incomingDatagrams.front();
|
||||||
senderSockAddr.setAddress(datagram._senderAddress);
|
senderSockAddr.setAddress(datagram._senderAddress);
|
||||||
|
@ -370,19 +392,6 @@ void Socket::processPendingDatagrams(int) {
|
||||||
|
|
||||||
auto it = _unfilteredHandlers.find(senderSockAddr);
|
auto it = _unfilteredHandlers.find(senderSockAddr);
|
||||||
|
|
||||||
if (it != _unfilteredHandlers.end()) {
|
|
||||||
// we have a registered unfiltered handler for this HifiSockAddr (eg. STUN packet) - call that and return
|
|
||||||
if (it->second) {
|
|
||||||
auto basePacket = BasePacket::fromReceivedPacket(std::move(datagram._datagram), datagramSize,
|
|
||||||
senderSockAddr);
|
|
||||||
basePacket->setReceiveTime(datagram._receiveTime);
|
|
||||||
it->second(std::move(basePacket));
|
|
||||||
}
|
|
||||||
|
|
||||||
_incomingDatagrams.pop();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// we're reading a packet so re-start the readyRead backup timer
|
// we're reading a packet so re-start the readyRead backup timer
|
||||||
_readyReadBackupTimer->start();
|
_readyReadBackupTimer->start();
|
||||||
|
|
||||||
|
@ -427,7 +436,7 @@ void Socket::processPendingDatagrams(int) {
|
||||||
qCDebug(networking) << "Can't process packet: version" << (unsigned int)NLPacket::versionInHeader(*packet)
|
qCDebug(networking) << "Can't process packet: version" << (unsigned int)NLPacket::versionInHeader(*packet)
|
||||||
<< ", type" << NLPacket::typeInHeader(*packet);
|
<< ", type" << NLPacket::typeInHeader(*packet);
|
||||||
#endif
|
#endif
|
||||||
_incomingDatagrams.pop();
|
_incomingDatagrams.pop_front();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -444,7 +453,7 @@ void Socket::processPendingDatagrams(int) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_incomingDatagrams.pop();
|
_incomingDatagrams.pop_front();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <queue>
|
#include <list>
|
||||||
|
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
#include <QtCore/QTimer>
|
#include <QtCore/QTimer>
|
||||||
|
@ -156,7 +156,7 @@ private:
|
||||||
p_high_resolution_clock::time_point _receiveTime;
|
p_high_resolution_clock::time_point _receiveTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::queue<Datagram> _incomingDatagrams;
|
std::list<Datagram> _incomingDatagrams;
|
||||||
int _maxDatagramsRead { 0 };
|
int _maxDatagramsRead { 0 };
|
||||||
|
|
||||||
friend UDTTest;
|
friend UDTTest;
|
||||||
|
|
Loading…
Reference in a new issue