MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / read_framed

Function read_framed

nodedb-cluster/src/mirror/handshake.rs:198–223  ·  view source on GitHub ↗

Read a framed message: `[discriminant u8][len u32 BE][payload bytes]`.

(reader: &mut R)

Source from the content-addressed store, hash-verified

196
197/// Read a framed message: `[discriminant u8][len u32 BE][payload bytes]`.
198async fn read_framed<R: AsyncRead + Unpin>(reader: &mut R) -> Result<(u8, Vec<u8>), MirrorError> {
199 let mut header = [0u8; 5];
200 reader
201 .read_exact(&mut header)
202 .await
203 .map_err(|e| MirrorError::Transport {
204 detail: format!("read framed header: {e}"),
205 })?;
206 let discriminant = header[0];
207 let len = u32::from_be_bytes([header[1], header[2], header[3], header[4]]) as usize;
208
209 if len > MAX_HANDSHAKE_PAYLOAD {
210 return Err(MirrorError::HandshakeCodec {
211 detail: format!("handshake payload {len} bytes exceeds max {MAX_HANDSHAKE_PAYLOAD}"),
212 });
213 }
214
215 let mut payload = vec![0u8; len];
216 reader
217 .read_exact(&mut payload)
218 .await
219 .map_err(|e| MirrorError::Transport {
220 detail: format!("read framed payload: {e}"),
221 })?;
222 Ok((discriminant, payload))
223}
224
225#[cfg(test)]
226mod tests {

Callers 2

recv_helloFunction · 0.70
recv_ackFunction · 0.70

Calls 1

read_exactMethod · 0.45

Tested by

no test coverage detected