mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 19:01:14 +02:00
verify replicated packets in packet filter
This commit is contained in:
parent
ea45e341ee
commit
6da5a63152
2 changed files with 36 additions and 2 deletions
|
@ -257,8 +257,41 @@ bool LimitedNodeList::packetSourceAndHashMatchAndTrackBandwidth(const udt::Packe
|
||||||
PacketType headerType = NLPacket::typeInHeader(packet);
|
PacketType headerType = NLPacket::typeInHeader(packet);
|
||||||
|
|
||||||
if (NON_SOURCED_PACKETS.contains(headerType)) {
|
if (NON_SOURCED_PACKETS.contains(headerType)) {
|
||||||
emit dataReceived(NodeType::Unassigned, packet.getPayloadSize());
|
if (REPLICATED_PACKET_MAPPING.key(headerType) != PacketType::Unknown) {
|
||||||
return true;
|
// this is a replicated packet type - make sure the socket that sent it to us matches
|
||||||
|
// one from one of our current upstream nodes
|
||||||
|
|
||||||
|
NodeType_t sendingNodeType { NodeType::Unassigned };
|
||||||
|
|
||||||
|
eachNodeBreakable([&packet, &sendingNodeType](const SharedNodePointer& node){
|
||||||
|
if (node->getType() == NodeType::upstreamType(node->getType())
|
||||||
|
&& node->getPublicSocket() == packet.getSenderSockAddr()) {
|
||||||
|
sendingNodeType = node->getType();
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (sendingNodeType != NodeType::Unassigned) {
|
||||||
|
emit dataReceived(sendingNodeType, packet.getPayloadSize());
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
static const QString UNSOLICITED_REPLICATED_REGEX =
|
||||||
|
"Replicated packet of type \\d+ \\([\\sa-zA-Z:]+\\) received from unknown upstream";
|
||||||
|
static QString repeatedMessage
|
||||||
|
= LogHandler::getInstance().addRepeatedMessageRegex(UNSOLICITED_REPLICATED_REGEX);
|
||||||
|
|
||||||
|
qCDebug(networking) << "Replicated packet of type" << headerType
|
||||||
|
<< "received from unknown upstream" << packet.getSenderSockAddr();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
emit dataReceived(NodeType::Unassigned, packet.getPayloadSize());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
QUuid sourceID = NLPacket::sourceIDInHeader(packet);
|
QUuid sourceID = NLPacket::sourceIDInHeader(packet);
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@ const QHash<PacketType, PacketType> REPLICATED_PACKET_MAPPING {
|
||||||
{ PacketType::SilentAudioFrame, PacketType::ReplicatedSilentAudioFrame },
|
{ PacketType::SilentAudioFrame, PacketType::ReplicatedSilentAudioFrame },
|
||||||
{ PacketType::AvatarIdentity, PacketType::ReplicatedAvatarIdentity },
|
{ PacketType::AvatarIdentity, PacketType::ReplicatedAvatarIdentity },
|
||||||
{ PacketType::KillAvatar, PacketType::ReplicatedKillAvatar },
|
{ PacketType::KillAvatar, PacketType::ReplicatedKillAvatar },
|
||||||
|
{ PacketType::BulkAvatarData, PacketType::ReplicatedBulkAvatarData }
|
||||||
};
|
};
|
||||||
|
|
||||||
PacketVersion versionForPacketType(PacketType packetType) {
|
PacketVersion versionForPacketType(PacketType packetType) {
|
||||||
|
|
Loading…
Reference in a new issue