fix hash replacement in PacketHeaders

This commit is contained in:
Stephen Birarda 2015-05-06 14:24:11 -07:00
parent c5e189bbf2
commit ff676958e8
4 changed files with 17 additions and 15 deletions

View file

@ -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;
}

View file

@ -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

View file

@ -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) {

View file

@ -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);