mirror of
https://github.com/Astatin3/unshell.git
synced 2026-06-09 06:47:59 -06:00
Optimize framed packet encoding
This commit is contained in:
+9
-16
@@ -93,16 +93,15 @@ where
|
|||||||
let payload_start = align_up(header_start + header_bytes.len(), SECTION_ALIGN);
|
let payload_start = align_up(header_start + header_bytes.len(), SECTION_ALIGN);
|
||||||
let total_len = payload_start + payload_bytes.len();
|
let total_len = payload_start + payload_bytes.len();
|
||||||
|
|
||||||
let mut frame = FrameBytes::with_capacity(total_len);
|
let header_end = header_start + header_bytes.len();
|
||||||
frame.extend_from_slice(&header_len.to_be_bytes());
|
let payload_end = payload_start + payload_bytes.len();
|
||||||
frame.extend_from_slice(&payload_len.to_be_bytes());
|
|
||||||
append_padding(&mut frame, header_start - 8usize);
|
let mut frame = FrameBytes::new();
|
||||||
frame.extend_from_slice(&header_bytes);
|
frame.resize(total_len, 0);
|
||||||
append_padding(
|
frame[0..4].copy_from_slice(&header_len.to_be_bytes());
|
||||||
&mut frame,
|
frame[4..8].copy_from_slice(&payload_len.to_be_bytes());
|
||||||
payload_start - (header_start + header_bytes.len()),
|
frame[header_start..header_end].copy_from_slice(&header_bytes);
|
||||||
);
|
frame[payload_start..payload_end].copy_from_slice(&payload_bytes);
|
||||||
frame.extend_from_slice(&payload_bytes);
|
|
||||||
Ok(frame)
|
Ok(frame)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,12 +162,6 @@ fn read_u32(bytes: &[u8], start: usize) -> Result<u32, FrameError> {
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn append_padding(frame: &mut AlignedVec, padding: usize) {
|
|
||||||
if padding > 0 {
|
|
||||||
frame.resize(frame.len() + padding, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn align_up(offset: usize, alignment: usize) -> usize {
|
fn align_up(offset: usize, alignment: usize) -> usize {
|
||||||
let mask = alignment - 1;
|
let mask = alignment - 1;
|
||||||
(offset + mask) & !mask
|
(offset + mask) & !mask
|
||||||
|
|||||||
Reference in New Issue
Block a user