mirror of
https://github.com/Devolutions/IronRDP.git
synced 2025-08-04 15:18:17 +00:00
refactor(pdu): add X224 newtype
This allows to implement external Encode/Decode traits in following change. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
parent
fda9530ef6
commit
ab5760d47b
17 changed files with 152 additions and 82 deletions
|
@ -2,7 +2,7 @@ use std::collections::HashSet;
|
|||
use std::mem;
|
||||
|
||||
use ironrdp_core::WriteBuf;
|
||||
use ironrdp_pdu::{mcs, PduHint};
|
||||
use ironrdp_pdu::{mcs, x224::X224, PduHint};
|
||||
|
||||
use crate::{ConnectorError, ConnectorErrorExt as _, ConnectorResult, Sequence, State, Written};
|
||||
|
||||
|
@ -108,7 +108,8 @@ impl Sequence for ChannelConnectionSequence {
|
|||
|
||||
debug!(message = ?erect_domain_request, "Send");
|
||||
|
||||
let written = ironrdp_pdu::encode_buf(&erect_domain_request, output).map_err(ConnectorError::encode)?;
|
||||
let written =
|
||||
ironrdp_pdu::encode_buf(&X224(erect_domain_request), output).map_err(ConnectorError::encode)?;
|
||||
|
||||
(
|
||||
Written::from_size(written)?,
|
||||
|
@ -121,7 +122,8 @@ impl Sequence for ChannelConnectionSequence {
|
|||
|
||||
debug!(message = ?attach_user_request, "Send");
|
||||
|
||||
let written = ironrdp_pdu::encode_buf(&attach_user_request, output).map_err(ConnectorError::encode)?;
|
||||
let written =
|
||||
ironrdp_pdu::encode_buf(&X224(attach_user_request), output).map_err(ConnectorError::encode)?;
|
||||
|
||||
(
|
||||
Written::from_size(written)?,
|
||||
|
@ -130,8 +132,9 @@ impl Sequence for ChannelConnectionSequence {
|
|||
}
|
||||
|
||||
ChannelConnectionState::WaitAttachUserConfirm => {
|
||||
let attach_user_confirm =
|
||||
ironrdp_pdu::decode::<mcs::AttachUserConfirm>(input).map_err(ConnectorError::decode)?;
|
||||
let attach_user_confirm = ironrdp_pdu::decode::<X224<mcs::AttachUserConfirm>>(input)
|
||||
.map_err(ConnectorError::decode)
|
||||
.map(|p| p.0)?;
|
||||
|
||||
let user_channel_id = attach_user_confirm.initiator_id;
|
||||
|
||||
|
@ -177,7 +180,7 @@ impl Sequence for ChannelConnectionSequence {
|
|||
debug!(message = ?channel_join_request, "Send");
|
||||
|
||||
let written =
|
||||
ironrdp_pdu::encode_buf(&channel_join_request, output).map_err(ConnectorError::encode)?;
|
||||
ironrdp_pdu::encode_buf(&X224(channel_join_request), output).map_err(ConnectorError::encode)?;
|
||||
|
||||
total_written = total_written.checked_add(written).expect("small join request PDUs");
|
||||
}
|
||||
|
@ -195,8 +198,9 @@ impl Sequence for ChannelConnectionSequence {
|
|||
user_channel_id,
|
||||
mut remaining_channel_ids,
|
||||
} => {
|
||||
let channel_join_confirm =
|
||||
ironrdp_pdu::decode::<mcs::ChannelJoinConfirm>(input).map_err(ConnectorError::decode)?;
|
||||
let channel_join_confirm = ironrdp_pdu::decode::<X224<mcs::ChannelJoinConfirm>>(input)
|
||||
.map_err(ConnectorError::decode)
|
||||
.map(|p| p.0)?;
|
||||
|
||||
debug!(message = ?channel_join_confirm, "Received");
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ use std::net::SocketAddr;
|
|||
|
||||
use ironrdp_core::WriteBuf;
|
||||
use ironrdp_pdu::rdp::client_info::{OptionalSystemTime, TimezoneInfo};
|
||||
use ironrdp_pdu::x224::X224;
|
||||
use ironrdp_pdu::{decode, encode_vec, gcc, mcs, nego, rdp, Encode, PduHint};
|
||||
use ironrdp_svc::{StaticChannelSet, StaticVirtualChannel, SvcClientProcessor};
|
||||
|
||||
|
@ -259,7 +260,8 @@ impl Sequence for ClientConnector {
|
|||
|
||||
debug!(message = ?connection_request, "Send");
|
||||
|
||||
let written = ironrdp_pdu::encode_buf(&connection_request, output).map_err(ConnectorError::encode)?;
|
||||
let written =
|
||||
ironrdp_pdu::encode_buf(&X224(connection_request), output).map_err(ConnectorError::encode)?;
|
||||
|
||||
(
|
||||
Written::from_size(written)?,
|
||||
|
@ -269,7 +271,9 @@ impl Sequence for ClientConnector {
|
|||
)
|
||||
}
|
||||
ClientConnectorState::ConnectionInitiationWaitConfirm { requested_protocol } => {
|
||||
let connection_confirm = decode::<nego::ConnectionConfirm>(input).map_err(ConnectorError::decode)?;
|
||||
let connection_confirm = decode::<X224<nego::ConnectionConfirm>>(input)
|
||||
.map_err(ConnectorError::decode)
|
||||
.map(|p| p.0)?;
|
||||
|
||||
debug!(message = ?connection_confirm, "Received");
|
||||
|
||||
|
@ -339,7 +343,9 @@ impl Sequence for ClientConnector {
|
|||
)
|
||||
}
|
||||
ClientConnectorState::BasicSettingsExchangeWaitResponse { connect_initial } => {
|
||||
let x224_payload = decode::<crate::x224::X224Data<'_>>(input).map_err(ConnectorError::decode)?;
|
||||
let x224_payload = decode::<X224<crate::x224::X224Data<'_>>>(input)
|
||||
.map_err(ConnectorError::decode)
|
||||
.map(|p| p.0)?;
|
||||
let connect_response =
|
||||
decode::<mcs::ConnectResponse>(x224_payload.data.as_ref()).map_err(ConnectorError::decode)?;
|
||||
|
||||
|
@ -596,7 +602,7 @@ pub fn encode_send_data_request<T: Encode>(
|
|||
user_data: Cow::Owned(user_data),
|
||||
};
|
||||
|
||||
let written = ironrdp_pdu::encode_buf(&pdu, buf).map_err(ConnectorError::encode)?;
|
||||
let written = ironrdp_pdu::encode_buf(&X224(pdu), buf).map_err(ConnectorError::encode)?;
|
||||
|
||||
Ok(written)
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ use std::borrow::Cow;
|
|||
|
||||
use ironrdp_core::WriteBuf;
|
||||
use ironrdp_pdu::rdp::headers::ServerDeactivateAll;
|
||||
use ironrdp_pdu::x224::X224;
|
||||
use ironrdp_pdu::{decode, encode_vec, rdp, Decode, Encode};
|
||||
|
||||
use crate::{ConnectorError, ConnectorErrorExt as _, ConnectorResult};
|
||||
|
@ -23,7 +24,7 @@ where
|
|||
user_data: Cow::Owned(user_data),
|
||||
};
|
||||
|
||||
let written = ironrdp_pdu::encode_buf(&pdu, buf).map_err(ConnectorError::encode)?;
|
||||
let written = ironrdp_pdu::encode_buf(&X224(pdu), buf).map_err(ConnectorError::encode)?;
|
||||
|
||||
Ok(written)
|
||||
}
|
||||
|
@ -49,9 +50,9 @@ impl<'a> SendDataIndicationCtx<'a> {
|
|||
pub fn decode_send_data_indication(src: &[u8]) -> ConnectorResult<SendDataIndicationCtx<'_>> {
|
||||
use ironrdp_pdu::mcs::McsMessage;
|
||||
|
||||
let mcs_msg = decode::<McsMessage<'_>>(src).map_err(ConnectorError::decode)?;
|
||||
let mcs_msg = decode::<X224<McsMessage<'_>>>(src).map_err(ConnectorError::decode)?;
|
||||
|
||||
match mcs_msg {
|
||||
match mcs_msg.0 {
|
||||
McsMessage::SendDataIndication(msg) => {
|
||||
let Cow::Borrowed(user_data) = msg.user_data else {
|
||||
unreachable!()
|
||||
|
@ -68,10 +69,10 @@ pub fn decode_send_data_indication(src: &[u8]) -> ConnectorResult<SendDataIndica
|
|||
"received disconnect provider ultimatum: {:?}",
|
||||
msg.reason
|
||||
)),
|
||||
unexpected => Err(reason_err!(
|
||||
_ => Err(reason_err!(
|
||||
"decode_send_data_indication",
|
||||
"unexpected MCS message: {}",
|
||||
ironrdp_pdu::name(&unexpected)
|
||||
ironrdp_pdu::name(&mcs_msg)
|
||||
)),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ pub use connection_finalization::{ConnectionFinalizationSequence, ConnectionFina
|
|||
use ironrdp_core::WriteBuf;
|
||||
use ironrdp_pdu::rdp::capability_sets;
|
||||
use ironrdp_pdu::rdp::client_info::PerformanceFlags;
|
||||
use ironrdp_pdu::x224::X224;
|
||||
use ironrdp_pdu::{encode_buf, encode_vec, gcc, x224, Encode, PduHint};
|
||||
pub use license_exchange::{LicenseExchangeSequence, LicenseExchangeState};
|
||||
pub use server_name::ServerName;
|
||||
|
@ -357,7 +358,7 @@ where
|
|||
data: std::borrow::Cow::Owned(x224_msg_buf),
|
||||
};
|
||||
|
||||
let written = encode_buf(&pdu, buf).map_err(ConnectorError::encode)?;
|
||||
let written = encode_buf(&X224(pdu), buf).map_err(ConnectorError::encode)?;
|
||||
|
||||
Ok(written)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue