Skip to content

Commit e1d0396

Browse files
committed
docs(connector): clarify MultitransportPending state vs wire behavior
The doc-comment on MultitransportPending described the connector as "paused waiting for the application to establish UDP transport," which reads as a spec-mandated TCP gate on UDP completion. Per review feedback, real RDP traffic shows TCP and UDP negotiating in parallel, with UDP completion functioning as a DVC migration signal rather than a TCP gate. Rewrite the comment to describe the state as the connector's API yield point (what it is) and add a paragraph describing the actual wire behavior. State machine semantics unchanged. Signed-off-by: Greg Lamberson <greg@lamco.io>
1 parent c790f31 commit e1d0396

1 file changed

Lines changed: 12 additions & 3 deletions

File tree

crates/ironrdp-connector/src/connection.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,21 @@ pub enum ClientConnectorState {
9696
/// Multitransport requests received from the server so far.
9797
requests: Vec<rdp::multitransport::MultitransportRequestPdu>,
9898
},
99-
/// The server sent multitransport request(s) and the connector is paused
100-
/// waiting for the application to establish UDP transport or decline.
99+
/// State the connector enters after the server has sent multitransport
100+
/// request(s) and before resuming with the Demand Active PDU. The
101+
/// connector surfaces this as an API yield point so the caller can run
102+
/// UDP transport setup and report the outcome.
101103
///
102104
/// Call [`ClientConnector::complete_multitransport()`] or
103105
/// [`ClientConnector::skip_multitransport()`] to advance. The buffered
104-
/// Demand Active PDU is replayed internally — no re-feeding needed.
106+
/// Demand Active PDU is replayed internally on resume; the caller does
107+
/// not need to re-feed it.
108+
///
109+
/// On the wire, TCP and UDP negotiation happen in parallel: the UDP
110+
/// transport is established alongside the ongoing TCP handshake, and
111+
/// its completion is a signal to the dynamic-channel layer that
112+
/// subsequent channels may migrate to UDP. The connector's suspension
113+
/// here is a Rust-API affordance, not a spec-mandated TCP pause.
105114
MultitransportPending {
106115
io_channel_id: u16,
107116
user_channel_id: u16,

0 commit comments

Comments
 (0)