add get seq num, cleanup PacketHeaders methods

This commit is contained in:
Stephen Birarda 2015-05-06 11:34:58 -07:00
parent b0c7af1714
commit e2986f5702
2 changed files with 48 additions and 21 deletions

View file

@ -227,33 +227,55 @@ QByteArray hashForPacketAndConnectionUUID(const QByteArray& packet, const QUuid&
QCryptographicHash::Md5);
}
void replaceHashInPacketGivenType(QByteArray& packet, PacketType packetType, const QUuid& connectionUUID) {
PacketSequenceNumber sequenceNumberFromHeader(const QByteArray& packet, PacketType packetType) {
if (packetType == PacketTypeUnknown) {
packetType = packetTypeForPacket(packet);
}
if (SEQUENCE_NUMBERED_PACKETS.contains(packetType)) {
bool converted = false;
PacketSequenceNumber sequenceNumber = packet.mid(sequenceNumberOffsetForPacketType(packetType),
sizeof(PacketSequenceNumber)).toShort(&converted);
if (converted) {
return sequenceNumber;
}
}
return DEFAULT_SEQUENCE_NUMBER;
}
void replaceHashInPacket(QByteArray& packet, const QUuid& connectionUUID, PacketType packetType) {
if (packetType == PacketTypeUnknown) {
packetType = packetTypeForPacket(packet);
}
packet.replace(hashOffsetForPacketType(packetType), NUM_BYTES_MD5_HASH,
hashForPacketAndConnectionUUID(packet, connectionUUID));
hashForPacketAndConnectionUUID(packet, connectionUUID));
}
void replaceHashInPacket(QByteArray& packet, const QUuid& connectionUUID) {
replaceHashInPacketGivenType(packet, packetTypeForPacket(packet), connectionUUID);
}
void replaceSequenceNumberInPacket(QByteArray& packet, PacketSequenceNumber sequenceNumber, PacketType packetType) {
if (packetType == PacketTypeUnknown) {
packetType = packetTypeForPacket(packet);
}
void replaceSequenceNumberInPacketGivenType(QByteArray& packet, PacketType packetType, PacketSequenceNumber sequenceNumber) {
packet.replace(sequenceNumberOffsetForPacketType(packetType),
sizeof(PacketSequenceNumber), reinterpret_cast<char*>(&sequenceNumber));
}
void replaceSequenceNumberInPacket(QByteArray& packet, PacketSequenceNumber sequenceNumber) {
replaceSequenceNumberInPacketGivenType(packet, packetTypeForPacket(packet), sequenceNumber);
}
void replaceHashAndSequenceNumberInPacketGivenType(QByteArray& packet, PacketType packetType,
const QUuid& connectionUUID, PacketSequenceNumber sequenceNumber) {
replaceHashInPacketGivenType(packet, packetType, connectionUUID);
replaceSequenceNumberInPacketGivenType(packet, packetType, sequenceNumber);
}
void replaceHashAndSequenceNumberInPacket(QByteArray& packet, const QUuid& connectionUUID, PacketSequenceNumber sequenceNumber,
PacketType packetType) {
if (packetType == PacketTypeUnknown) {
packetType = packetTypeForPacket(packet);
}
void replaceHashAndSequenceNumberInPacket(QByteArray& packet, const QUuid& connectionUUID, PacketSequenceNumber sequenceNumber) {
replaceHashAndSequenceNumberInPacketGivenType(packet, packetTypeForPacket(packet), connectionUUID, sequenceNumber);
replaceHashInPacket(packet, connectionUUID, packetType);
replaceSequenceNumberInPacket(packet, sequenceNumber, packetType);
}
PacketType packetTypeForPacket(const QByteArray& packet) {

View file

@ -83,7 +83,9 @@ enum PacketType {
};
typedef char PacketVersion;
typedef uint16_t PacketSequenceNumber;
const PacketSequenceNumber DEFAULT_SEQUENCE_NUMBER = 0;
typedef std::map<PacketType, PacketSequenceNumber> PacketTypeSequenceMap;
@ -130,15 +132,18 @@ int sequenceNumberOffsetForPacketType(PacketType packetType);
QByteArray hashFromPacketHeader(const QByteArray& packet);
QByteArray hashForPacketAndConnectionUUID(const QByteArray& packet, const QUuid& connectionUUID);
void replaceHashInPacketGivenType(QByteArray& packet, PacketType packetType, const QUuid& connectionUUID);
void replaceHashInPacket(QByteArray& packet, const QUuid& connectionUUID);
// NOTE: The following four methods accept a PacketType which defaults to PacketTypeUnknown.
// If the caller has already looked at the packet type and can provide it then the methods below won't have to look it up.
void replaceSequenceNumberInPacketGivenType(QByteArray& packet, PacketType packetType, PacketSequenceNumber sequenceNumber);
void replaceSequenceNumberInPacket(QByteArray& packet, PacketSequenceNumber sequenceNumber);
PacketSequenceNumber sequenceNumberFromHeader(const QByteArray& packet, PacketType packetType = PacketTypeUnknown);
void replaceHashAndSequenceNumberInPacketGivenType(QByteArray& packet, PacketType packetType,
const QUuid& connectionUUID, PacketSequenceNumber sequenceNumber);
void replaceHashAndSequenceNumberInPacket(QByteArray& packet, const QUuid& connectionUUID, PacketSequenceNumber sequenceNumber);
void replaceHashInPacket(QByteArray& packet, const QUuid& connectionUUID, PacketType packetType = PacketTypeUnknown);
void replaceSequenceNumberInPacket(QByteArray& packet, PacketSequenceNumber sequenceNumber,
PacketType packetType = PacketTypeUnknown);
void replaceHashAndSequenceNumberInPacket(QByteArray& packet, const QUuid& connectionUUID, PacketSequenceNumber sequenceNumber,
PacketType packetType = PacketTypeUnknown);
int arithmeticCodingValueFromBuffer(const char* checkValue);
int numBytesArithmeticCodingFromBuffer(const char* checkValue);