postgres: peek at header then take whole message

This commit is contained in:
rich-murphey 2021-02-11 22:12:35 -06:00 committed by Ryan Leckey
parent 499bc33e41
commit 902114b756

View File

@ -53,13 +53,14 @@ macro_rules! read_packet {
loop {
read_packet!($(@$blocking)? @stream $self, 0, 5);
let mut header: Bytes = $self.stream.take(5);
// peek at the messaage type and payload size
let r#type = MessageType::try_from(*$self.stream.get(0,1))?;
let size = (u32::from_le_bytes($self.stream.get(1,4)) - 4) as usize;
let r#type = MessageType::try_from(header.get_u8())?;
let size = (header.get_u32() - 4) as usize;
read_packet!($(@$blocking)? @stream $self, 4, size);
read_packet!($(@$blocking)? @stream $self, 5, size);
// take the whole packet
let header = $self.stream.take(5);
let contents = $self.stream.take(size);
let message = Message { r#type, contents };