Add a helper for sub-packet deserialisation

This commit is contained in:
Jonathan G Rennison
2023-06-14 19:55:46 +01:00
parent f9f1cb2190
commit 120f0e8a81
2 changed files with 26 additions and 0 deletions

View File

@@ -198,3 +198,12 @@ size_t Packet::RemainingBytesToTransfer() const
return this->Size() - this->pos; return this->Size() - this->pos;
} }
bool SubPacketDeserialiser::CanDeserialiseBytes(size_t bytes_to_read, bool raise_error)
{
if (this->pos + bytes_to_read > this->size) {
if (raise_error) this->cs->NetworkSocketHandler::MarkClosed();
return false;
}
return true;
}

View File

@@ -187,6 +187,23 @@ public:
if (bytes > 0) this->pos += bytes; if (bytes > 0) this->pos += bytes;
return bytes; return bytes;
} }
NetworkSocketHandler *GetParentSocket() { return this->cs; }
};
struct SubPacketDeserialiser : public BufferDeserialisationHelper<SubPacketDeserialiser> {
NetworkSocketHandler *cs;
const byte *data;
size_t size;
PacketSize pos;
SubPacketDeserialiser(Packet *p, const byte *data, size_t size, PacketSize pos = 0) : cs(p->GetParentSocket()), data(data), size(size), pos(pos) {}
SubPacketDeserialiser(Packet *p, const std::vector<byte> &buffer, PacketSize pos = 0) : cs(p->GetParentSocket()), data(buffer.data()), size(buffer.size()), pos(pos) {}
const byte *GetDeserialisationBuffer() const { return this->data; }
size_t GetDeserialisationBufferSize() const { return this->size; }
PacketSize &GetDeserialisationPosition() { return this->pos; }
bool CanDeserialiseBytes(size_t bytes_to_read, bool raise_error);
}; };
#endif /* NETWORK_CORE_PACKET_H */ #endif /* NETWORK_CORE_PACKET_H */