mirror of
https://github.com/overte-org/overte.git
synced 2025-08-04 21:18:43 +02:00
fix hash replacement in PacketHeaders
This commit is contained in:
parent
c5e189bbf2
commit
ff676958e8
4 changed files with 17 additions and 15 deletions
|
@ -259,12 +259,17 @@ void AvatarMixer::broadcastAvatarData() {
|
|||
|
||||
PacketSequenceNumber lastSeqToReceiver = nodeData->getLastBroadcastSequenceNumber(otherNode->getUUID());
|
||||
PacketSequenceNumber lastSeqFromSender = otherNode->getLastSequenceNumberForPacketType(PacketTypeAvatarData);
|
||||
|
||||
qDebug() << "Last sent to receiver" << node->getUUID() << "was" << lastSeqToReceiver;
|
||||
qDebug() << "Last sent from sender" << otherNode->getUUID() << "was" << lastSeqFromSender;
|
||||
|
||||
assert(lastSeqToReceiver <= lastSeqFromSender);
|
||||
|
||||
// make sure we haven't already sent this data from this sender to this receiver
|
||||
// or that somehow we haven't sent
|
||||
if (lastSeqToReceiver == lastSeqFromSender) {
|
||||
qDebug() << "Not sending a data for" << otherNode->getUUID() << "to" << node->getUUID()
|
||||
<< "since it has already been sent.";
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -267,15 +267,14 @@ qint64 LimitedNodeList::writeDatagram(const QByteArray& datagram,
|
|||
PacketType packetType = packetTypeForPacket(datagramCopy);
|
||||
|
||||
// perform replacement of hash and optionally also sequence number in the header
|
||||
if (SEQUENCE_NUMBERED_PACKETS.contains(packetType)) {
|
||||
if (SEQUENCE_NUMBERED_PACKETS.contains(packetType)) {
|
||||
PacketSequenceNumber sequenceNumber = getNextSequenceNumberForPacket(destinationNode->getUUID(), packetType);
|
||||
qDebug() << "Sequence number for this packet is" << sequenceNumber;
|
||||
replaceHashAndSequenceNumberInPacket(datagramCopy, destinationNode->getConnectionSecret(),
|
||||
sequenceNumber, packetType);
|
||||
} else {
|
||||
replaceHashInPacket(datagramCopy, destinationNode->getConnectionSecret(), packetType);
|
||||
}
|
||||
|
||||
|
||||
emit dataSent(destinationNode->getType(), datagram.size());
|
||||
auto bytesWritten = writeDatagram(datagramCopy, *destinationSockAddr, destinationNode->getConnectionSecret());
|
||||
// Keep track of per-destination-node bandwidth
|
||||
|
|
|
@ -55,7 +55,7 @@ PacketVersion versionForPacketType(PacketType packetType) {
|
|||
case PacketTypeInjectAudio:
|
||||
return 1;
|
||||
case PacketTypeAvatarData:
|
||||
return 5;
|
||||
return 6;
|
||||
case PacketTypeAvatarIdentity:
|
||||
return 1;
|
||||
case PacketTypeEnvironmentData:
|
||||
|
@ -188,8 +188,12 @@ int numBytesForPacketHeader(const char* packet) {
|
|||
return numBytesForPacketHeaderGivenPacketType(packetType);
|
||||
}
|
||||
|
||||
int numBytesForArithmeticCodedPacketType(PacketType packetType) {
|
||||
return (int) ceilf((float) packetType / 255);
|
||||
}
|
||||
|
||||
int numBytesForPacketHeaderGivenPacketType(PacketType packetType) {
|
||||
return (int) ceilf((float) packetType / 255)
|
||||
return numBytesForArithmeticCodedPacketType(packetType)
|
||||
+ numHashBytesForType(packetType)
|
||||
+ numSequenceNumberBytesForType(packetType)
|
||||
+ NUM_STATIC_HEADER_BYTES;
|
||||
|
@ -209,9 +213,7 @@ QUuid uuidFromPacketHeader(const QByteArray& packet) {
|
|||
}
|
||||
|
||||
int hashOffsetForPacketType(PacketType packetType) {
|
||||
return numBytesForPacketHeaderGivenPacketType(packetType)
|
||||
- (SEQUENCE_NUMBERED_PACKETS.contains(packetType) ? sizeof(PacketSequenceNumber) : 0)
|
||||
- NUM_BYTES_RFC4122_UUID;
|
||||
return numBytesForArithmeticCodedPacketType(packetType) + NUM_STATIC_HEADER_BYTES;
|
||||
}
|
||||
|
||||
int sequenceNumberOffsetForPacketType(PacketType packetType) {
|
||||
|
@ -249,7 +251,7 @@ void replaceHashInPacket(QByteArray& packet, const QUuid& connectionUUID, Packet
|
|||
if (packetType == PacketTypeUnknown) {
|
||||
packetType = packetTypeForPacket(packet);
|
||||
}
|
||||
|
||||
|
||||
packet.replace(hashOffsetForPacketType(packetType), NUM_BYTES_MD5_HASH,
|
||||
hashForPacketAndConnectionUUID(packet, connectionUUID));
|
||||
}
|
||||
|
@ -260,14 +262,9 @@ void replaceSequenceNumberInPacket(QByteArray& packet, PacketSequenceNumber sequ
|
|||
}
|
||||
|
||||
packet.replace(sequenceNumberOffsetForPacketType(packetType),
|
||||
sizeof(PacketSequenceNumber), reinterpret_cast<char*>(&sequenceNumber));
|
||||
sizeof(PacketSequenceNumber), reinterpret_cast<char*>(&sequenceNumber), sizeof(PacketSequenceNumber));
|
||||
}
|
||||
|
||||
void replaceHashAndSequenceNumberInPacketGivenType(QByteArray& packet, PacketType packetType,
|
||||
const QUuid& connectionUUID, PacketSequenceNumber sequenceNumber) {
|
||||
|
||||
}
|
||||
|
||||
void replaceHashAndSequenceNumberInPacket(QByteArray& packet, const QUuid& connectionUUID, PacketSequenceNumber sequenceNumber,
|
||||
PacketType packetType) {
|
||||
if (packetType == PacketTypeUnknown) {
|
||||
|
|
|
@ -122,6 +122,7 @@ int numSequenceNumberBytesForType(PacketType packetType);
|
|||
|
||||
int numBytesForPacketHeader(const QByteArray& packet);
|
||||
int numBytesForPacketHeader(const char* packet);
|
||||
int numBytesForArithmeticCodedPacketType(PacketType packetType);
|
||||
int numBytesForPacketHeaderGivenPacketType(PacketType packetType);
|
||||
|
||||
QUuid uuidFromPacketHeader(const QByteArray& packet);
|
||||
|
|
Loading…
Reference in a new issue