refactor(server): factor out UpdateEncoder::encode_pdu()

The function is reusable.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
Marc-André Lureau
2024-04-03 11:59:10 -04:00
committed by Benoît Cortier
parent f2ee34ffc2
commit 2cef7e56fd
+23 -16
View File
@@ -52,6 +52,26 @@ impl UpdateEncoder {
}
}
fn encode_pdu(&mut self, pdu: impl PduEncode) -> Option<usize> {
loop {
let mut cursor = WriteCursor::new(self.buffer.as_mut_slice());
match pdu.encode(&mut cursor) {
Err(e) => match e.kind() {
ironrdp_pdu::PduErrorKind::NotEnoughBytes { .. } => {
self.buffer.resize(self.buffer.len() * 2, 0);
debug!("encoder buffer resized to: {}", self.buffer.len() * 2);
}
_ => {
debug!("encode error: {:?}", e);
return None;
}
},
Ok(()) => return Some(cursor.pos()),
}
}
}
pub(crate) fn bitmap(&mut self, bitmap: BitmapUpdate) -> Option<UpdateFragmenter<'_>> {
let update = self.update;
@@ -99,23 +119,10 @@ impl UpdateEncoder {
extended_bitmap_data,
};
let cmd = SurfaceCommand::SetSurfaceBits(pdu);
let len = loop {
let mut cursor = WriteCursor::new(self.buffer.as_mut_slice());
match cmd.encode(&mut cursor) {
Err(e) => match e.kind() {
ironrdp_pdu::PduErrorKind::NotEnoughBytes { .. } => {
self.buffer.resize(self.buffer.len() * 2, 0);
debug!("encoder buffer resized to: {}", self.buffer.len() * 2);
}
_ => {
debug!("bitmap encode error: {:?}", e);
return None;
}
},
Ok(()) => break cursor.pos(),
}
let Some(len) = self.encode_pdu(cmd) else {
return None;
};
Some(UpdateFragmenter::new(UpdateCode::SurfaceCommands, &self.buffer[..len]))
}