// ───────────────────────────────────────── proto/lesavka.proto syntax = "proto3"; package lesavka; message KeyboardReport { bytes data = 1; } message MouseReport { bytes data = 1; } message MonitorRequest { uint32 id = 1; uint32 max_bitrate = 2; } message VideoPacket { uint32 id = 1; uint64 pts = 2; bytes data = 3; } message AudioPacket { uint32 id = 1; uint64 pts = 2; bytes data = 3; } message ResetUsbReply { bool ok = 1; } // true = success message PasteRequest { bytes nonce = 1; bytes data = 2; bool encrypted = 3; } message PasteReply { bool ok = 1; string error = 2; } message HandshakeSet { bool camera = 1; bool microphone = 2; string camera_output = 3; string camera_codec = 4; uint32 camera_width = 5; uint32 camera_height = 6; uint32 camera_fps = 7; } message Empty {} service Relay { rpc StreamKeyboard (stream KeyboardReport) returns (stream KeyboardReport); rpc StreamMouse (stream MouseReport) returns (stream MouseReport); rpc CaptureVideo (MonitorRequest) returns (stream VideoPacket); rpc CaptureAudio (MonitorRequest) returns (stream AudioPacket); rpc StreamMicrophone (stream AudioPacket) returns (stream Empty); rpc StreamCamera (stream VideoPacket) returns (stream Empty); rpc PasteText (PasteRequest) returns (PasteReply); rpc ResetUsb (Empty) returns (ResetUsbReply); } service Handshake { rpc GetCapabilities (Empty) returns (HandshakeSet); }