Hi
Just to let you know that I started a usbredir binding to Rust: https://gitlab.freedesktop.org/elmarco/usbredir-rs
Atm, it compiles with a custom rusb. I have some MR there (https://github.com/a1ien/rusb/pull/97 & https://github.com/a1ien/rusb/pull/101)
See the example: https://gitlab.freedesktop.org/elmarco/usbredir-rs/-/blob/main/usbredirhost/examples/usbredir.rs
Atm, I pass an open fd with bash for testing, ex:
exec 3<>/dev/tcp/localhost/7777
target/debug/examples/usbredir '1050:0407' --fd 3
Next, it could be extended this with [--tcp host:port], [--unix path], [-l|--listen]. Then I suppose it will be close to https://gitlab.freedesktop.org/spice/usbredir/-/blob/master/tools/usbredirect.c
(Note that the Rust code doesn't use poll(), since it isn't portable. See https://libusb.sourceforge.io/api-1.0/group__libusb__poll.html#libusb_pollmain. The libusb/usbredir APIs don't make it easy to handle events..)
--
Marc-André Lureau