Skip to content

[ironrdp-rdpeusb] Client-side protocol state machine #1137

@CBenoit

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:

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-virtual-channelArea: Static or dynamic virtual channelenhancementNew feature or request

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions