-
Notifications
You must be signed in to change notification settings - Fork 170
Open
Labels
A-virtual-channelArea: Static or dynamic virtual channelArea: Static or dynamic virtual channelenhancementNew feature or requestNew feature or request
Description
Implement the client-side RDPEUSB protocol logic in ironrdp-rdpeusb. The client holds the physical USB device and responds to the server's IO requests.
Depends on:
- [ironrdp-dvc] Support multiple DVC channel instances with the same name #1135
- [ironrdp-rdpeusb] PDU encoding/decoding #1136
Tasks
- UrbdrcListener: implements DvcChannelListener; produces either a control channel or device channel processor depending on whether this is the first instance of "URBDRC" for the session
- UrbdrcControlChannel: implements DvcClientProcessor
- On start(): sends CHANNEL_CREATED, then RIM_EXCHANGE_CAPABILITY_REQUEST response
- On ADD_VIRTUAL_CHANNEL received: calls into the registered UsbClientBackend to detect available devices; queues device channel creation (surfaces via the listener factory on the next DYNVC_CREATE_REQ)
- UsbDeviceChannel: implements DvcClientProcessor
- On start(): sends CHANNEL_CREATED, then ADD_DEVICE
- Dispatches incoming server requests (IO_CONTROL, TRANSFER_IN_REQUEST, etc.) to UsbClientBackend
- Returns completions (URB_COMPLETION, IOCONTROL_COMPLETION) as DvcMessage
- On CANCEL_REQUEST: forwards cancellation to backend
- On RETRACT_DEVICE / channel close: teardown
Acceptance criteria
- Successful channel setup sequence (control channel up, capability exchange done)
- Successful new device sequence (device channel up, ADD_DEVICE sent)
- IO request dispatched to backend and completion returned correctly
- Protocol-level unit tests with mock backend
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
A-virtual-channelArea: Static or dynamic virtual channelArea: Static or dynamic virtual channelenhancementNew feature or requestNew feature or request