refactor(server): factor out deactivate_reactivate()

This makes code slightly nicer and allow further code reuse.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
Marc-André Lureau 2025-01-21 23:30:29 +04:00 committed by Benoît Cortier
parent a0fccf8d1a
commit e21c5568a4

View file

@ -436,20 +436,7 @@ impl RdpServer {
DisplayUpdate::PointerPosition(pos) => encoder.pointer_position(pos),
DisplayUpdate::Resize(desktop_size) => {
debug!(?desktop_size, "Display resize");
let pdu = ShareControlPdu::ServerDeactivateAll(ServerDeactivateAll);
let pdu = rdp::headers::ShareControlHeader {
share_id: 0,
pdu_source: io_channel_id,
share_control_pdu: pdu,
};
let user_data = encode_vec(&pdu)?.into();
let pdu = SendDataIndication {
initiator_id: user_channel_id,
channel_id: io_channel_id,
user_data,
};
let msg = encode_vec(&X224(pdu))?;
writer.write_all(&msg).await?;
deactivate_all(io_channel_id, user_channel_id, writer).await?;
return Ok((RunState::DeactivationReactivation { desktop_size }, encoder));
}
DisplayUpdate::RGBAPointer(ptr) => encoder.rgba_pointer(ptr),
@ -940,6 +927,28 @@ impl RdpServer {
}
}
async fn deactivate_all(
io_channel_id: u16,
user_channel_id: u16,
writer: &mut impl FramedWrite,
) -> Result<(), anyhow::Error> {
let pdu = ShareControlPdu::ServerDeactivateAll(ServerDeactivateAll);
let pdu = rdp::headers::ShareControlHeader {
share_id: 0,
pdu_source: io_channel_id,
share_control_pdu: pdu,
};
let user_data = encode_vec(&pdu)?.into();
let pdu = SendDataIndication {
initiator_id: user_channel_id,
channel_id: io_channel_id,
user_data,
};
let msg = encode_vec(&X224(pdu))?;
writer.write_all(&msg).await?;
Ok(())
}
struct SharedWriter<'w, W: FramedWrite> {
writer: Rc<Mutex<&'w mut W>>,
}