fix(rdpeusb)!: add the capability exchange on each per-device channel - #1711
fix(rdpeusb)!: add the capability exchange on each per-device channel#1711uchouT (uchouT) wants to merge 1 commit into
Conversation
BREAKING CHANGE: `UrbdrcServerDevicePdu` and `UrbdrcClientDevicePdu` are public and not `#[non_exhaustive]`, so the new `Caps` variant breaks exhaustive matches. Signed-off-by: uchouT <i@uchout.moe>
|
Thanks for picking this up, uchouT (@uchouT) — and for the credit. macrdp carries the server-direction per-device handshake as our divergence 16, so I can confirm the core of your fix: having the per-device One sequencing detail worth double-checking against mstsc, since it's strict about the per-device handshake order and I can't be 100% sure from the diff alone. macrdp's mstsc-verified sequence after the caps response is: i.e. we send Happy to settle it definitively: I have an mstsc + entitled-macrdp rig with a real redirected device (the path that found this gap), so if you point me at your branch I'll run your actual code against mstsc and report whether the device enumerates end-to-end (gamepad / mass-storage). That's the one check neither the spec nor FreeRDP can stand in for here. |
Thanks for your remind. On the sequencing: the So the shape you verified is all present; the only delta is that I release the capabilities interface before CHANNEL_CREATED.
Thanks, that's the confirmation I couldn't get myself. Branch: Branch: https://github.com/uchouT/IronRDP/tree/fix/caps-exchange |
Reported by clintcan in #1417:
Changes
UrbdrcDeviceServer::start()emitsRIM_EXCHANGE_CAPABILITY_REQUEST; on the response it releases the capabilities interface and sendsCHANNEL_CREATED, mirroringUrbdrcControlServer.UrbdrcDeviceClientanswers a capability request on the per-device channel.AwaitingCaps → AwaitingChanCreated → AwaitingDevice → Ready, soADD_DEVICEis processed only after the handshake completes per 3.2.5.2.2.BREAKING CHANGE:
UrbdrcServerDevicePduandUrbdrcClientDevicePduare public and not#[non_exhaustive], so the newCapsvariant breaks exhaustive matches.