message.proto 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848
  1. syntax = "proto3";
  2. package hbb;
  3. message EncodedVideoFrame {
  4. bytes data = 1;
  5. bool key = 2;
  6. int64 pts = 3;
  7. }
  8. message EncodedVideoFrames { repeated EncodedVideoFrame frames = 1; }
  9. message RGB { bool compress = 1; }
  10. // planes data send directly in binary for better use arraybuffer on web
  11. message YUV {
  12. bool compress = 1;
  13. int32 stride = 2;
  14. }
  15. enum Chroma {
  16. I420 = 0;
  17. I444 = 1;
  18. }
  19. message VideoFrame {
  20. oneof union {
  21. EncodedVideoFrames vp9s = 6;
  22. RGB rgb = 7;
  23. YUV yuv = 8;
  24. EncodedVideoFrames h264s = 10;
  25. EncodedVideoFrames h265s = 11;
  26. EncodedVideoFrames vp8s = 12;
  27. EncodedVideoFrames av1s = 13;
  28. }
  29. int32 display = 14;
  30. }
  31. message IdPk {
  32. string id = 1;
  33. bytes pk = 2;
  34. }
  35. message DisplayInfo {
  36. sint32 x = 1;
  37. sint32 y = 2;
  38. int32 width = 3;
  39. int32 height = 4;
  40. string name = 5;
  41. bool online = 6;
  42. bool cursor_embedded = 7;
  43. Resolution original_resolution = 8;
  44. double scale = 9;
  45. }
  46. message PortForward {
  47. string host = 1;
  48. int32 port = 2;
  49. }
  50. message FileTransfer {
  51. string dir = 1;
  52. bool show_hidden = 2;
  53. }
  54. message OSLogin {
  55. string username = 1;
  56. string password = 2;
  57. }
  58. message LoginRequest {
  59. string username = 1;
  60. bytes password = 2;
  61. string my_id = 4;
  62. string my_name = 5;
  63. OptionMessage option = 6;
  64. oneof union {
  65. FileTransfer file_transfer = 7;
  66. PortForward port_forward = 8;
  67. }
  68. bool video_ack_required = 9;
  69. uint64 session_id = 10;
  70. string version = 11;
  71. OSLogin os_login = 12;
  72. string my_platform = 13;
  73. bytes hwid = 14;
  74. }
  75. message Auth2FA {
  76. string code = 1;
  77. bytes hwid = 2;
  78. }
  79. message ChatMessage { string text = 1; }
  80. message Features {
  81. bool privacy_mode = 1;
  82. }
  83. message CodecAbility {
  84. bool vp8 = 1;
  85. bool vp9 = 2;
  86. bool av1 = 3;
  87. bool h264 = 4;
  88. bool h265 = 5;
  89. }
  90. message SupportedEncoding {
  91. bool h264 = 1;
  92. bool h265 = 2;
  93. bool vp8 = 3;
  94. bool av1 = 4;
  95. CodecAbility i444 = 5;
  96. }
  97. message PeerInfo {
  98. string username = 1;
  99. string hostname = 2;
  100. string platform = 3;
  101. repeated DisplayInfo displays = 4;
  102. int32 current_display = 5;
  103. bool sas_enabled = 6;
  104. string version = 7;
  105. Features features = 9;
  106. SupportedEncoding encoding = 10;
  107. SupportedResolutions resolutions = 11;
  108. // Use JSON's key-value format which is friendly for peer to handle.
  109. // NOTE: Only support one-level dictionaries (for peer to update), and the key is of type string.
  110. string platform_additions = 12;
  111. WindowsSessions windows_sessions = 13;
  112. }
  113. message WindowsSession {
  114. uint32 sid = 1;
  115. string name = 2;
  116. }
  117. message LoginResponse {
  118. oneof union {
  119. string error = 1;
  120. PeerInfo peer_info = 2;
  121. }
  122. bool enable_trusted_devices = 3;
  123. }
  124. message TouchScaleUpdate {
  125. // The delta scale factor relative to the previous scale.
  126. // delta * 1000
  127. // 0 means scale end
  128. int32 scale = 1;
  129. }
  130. message TouchPanStart {
  131. int32 x = 1;
  132. int32 y = 2;
  133. }
  134. message TouchPanUpdate {
  135. // The delta x position relative to the previous position.
  136. int32 x = 1;
  137. // The delta y position relative to the previous position.
  138. int32 y = 2;
  139. }
  140. message TouchPanEnd {
  141. int32 x = 1;
  142. int32 y = 2;
  143. }
  144. message TouchEvent {
  145. oneof union {
  146. TouchScaleUpdate scale_update = 1;
  147. TouchPanStart pan_start = 2;
  148. TouchPanUpdate pan_update = 3;
  149. TouchPanEnd pan_end = 4;
  150. }
  151. }
  152. message PointerDeviceEvent {
  153. oneof union {
  154. TouchEvent touch_event = 1;
  155. }
  156. repeated ControlKey modifiers = 2;
  157. }
  158. message MouseEvent {
  159. int32 mask = 1;
  160. sint32 x = 2;
  161. sint32 y = 3;
  162. repeated ControlKey modifiers = 4;
  163. }
  164. enum KeyboardMode{
  165. Legacy = 0;
  166. Map = 1;
  167. Translate = 2;
  168. Auto = 3;
  169. }
  170. enum ControlKey {
  171. Unknown = 0;
  172. Alt = 1;
  173. Backspace = 2;
  174. CapsLock = 3;
  175. Control = 4;
  176. Delete = 5;
  177. DownArrow = 6;
  178. End = 7;
  179. Escape = 8;
  180. F1 = 9;
  181. F10 = 10;
  182. F11 = 11;
  183. F12 = 12;
  184. F2 = 13;
  185. F3 = 14;
  186. F4 = 15;
  187. F5 = 16;
  188. F6 = 17;
  189. F7 = 18;
  190. F8 = 19;
  191. F9 = 20;
  192. Home = 21;
  193. LeftArrow = 22;
  194. /// meta key (also known as "windows"; "super"; and "command")
  195. Meta = 23;
  196. /// option key on macOS (alt key on Linux and Windows)
  197. Option = 24; // deprecated, use Alt instead
  198. PageDown = 25;
  199. PageUp = 26;
  200. Return = 27;
  201. RightArrow = 28;
  202. Shift = 29;
  203. Space = 30;
  204. Tab = 31;
  205. UpArrow = 32;
  206. Numpad0 = 33;
  207. Numpad1 = 34;
  208. Numpad2 = 35;
  209. Numpad3 = 36;
  210. Numpad4 = 37;
  211. Numpad5 = 38;
  212. Numpad6 = 39;
  213. Numpad7 = 40;
  214. Numpad8 = 41;
  215. Numpad9 = 42;
  216. Cancel = 43;
  217. Clear = 44;
  218. Menu = 45; // deprecated, use Alt instead
  219. Pause = 46;
  220. Kana = 47;
  221. Hangul = 48;
  222. Junja = 49;
  223. Final = 50;
  224. Hanja = 51;
  225. Kanji = 52;
  226. Convert = 53;
  227. Select = 54;
  228. Print = 55;
  229. Execute = 56;
  230. Snapshot = 57;
  231. Insert = 58;
  232. Help = 59;
  233. Sleep = 60;
  234. Separator = 61;
  235. Scroll = 62;
  236. NumLock = 63;
  237. RWin = 64;
  238. Apps = 65;
  239. Multiply = 66;
  240. Add = 67;
  241. Subtract = 68;
  242. Decimal = 69;
  243. Divide = 70;
  244. Equals = 71;
  245. NumpadEnter = 72;
  246. RShift = 73;
  247. RControl = 74;
  248. RAlt = 75;
  249. VolumeMute = 76; // mainly used on mobile devices as controlled side
  250. VolumeUp = 77;
  251. VolumeDown = 78;
  252. Power = 79; // mainly used on mobile devices as controlled side
  253. CtrlAltDel = 100;
  254. LockScreen = 101;
  255. }
  256. message KeyEvent {
  257. bool down = 1;
  258. bool press = 2;
  259. oneof union {
  260. ControlKey control_key = 3;
  261. // position key code. win: scancode, linux: key code, macos: key code
  262. uint32 chr = 4;
  263. uint32 unicode = 5;
  264. string seq = 6;
  265. // high word. virtual keycode
  266. // low word. unicode
  267. uint32 win2win_hotkey = 7;
  268. }
  269. repeated ControlKey modifiers = 8;
  270. KeyboardMode mode = 9;
  271. }
  272. message CursorData {
  273. uint64 id = 1;
  274. sint32 hotx = 2;
  275. sint32 hoty = 3;
  276. int32 width = 4;
  277. int32 height = 5;
  278. bytes colors = 6;
  279. }
  280. message CursorPosition {
  281. sint32 x = 1;
  282. sint32 y = 2;
  283. }
  284. message Hash {
  285. string salt = 1;
  286. string challenge = 2;
  287. }
  288. enum ClipboardFormat {
  289. Text = 0;
  290. Rtf = 1;
  291. Html = 2;
  292. ImageRgba = 21;
  293. ImagePng = 22;
  294. ImageSvg = 23;
  295. Special = 31;
  296. }
  297. message Clipboard {
  298. bool compress = 1;
  299. bytes content = 2;
  300. int32 width = 3;
  301. int32 height = 4;
  302. ClipboardFormat format = 5;
  303. // Special format name, only used when format is Special.
  304. string special_name = 6;
  305. }
  306. message MultiClipboards { repeated Clipboard clipboards = 1; }
  307. enum FileType {
  308. Dir = 0;
  309. DirLink = 2;
  310. DirDrive = 3;
  311. File = 4;
  312. FileLink = 5;
  313. }
  314. message FileEntry {
  315. FileType entry_type = 1;
  316. string name = 2;
  317. bool is_hidden = 3;
  318. uint64 size = 4;
  319. uint64 modified_time = 5;
  320. }
  321. message FileDirectory {
  322. int32 id = 1;
  323. string path = 2;
  324. repeated FileEntry entries = 3;
  325. }
  326. message ReadDir {
  327. string path = 1;
  328. bool include_hidden = 2;
  329. }
  330. message ReadAllFiles {
  331. int32 id = 1;
  332. string path = 2;
  333. bool include_hidden = 3;
  334. }
  335. message FileRename {
  336. int32 id = 1;
  337. string path = 2;
  338. string new_name = 3;
  339. }
  340. message FileAction {
  341. oneof union {
  342. ReadDir read_dir = 1;
  343. FileTransferSendRequest send = 2;
  344. FileTransferReceiveRequest receive = 3;
  345. FileDirCreate create = 4;
  346. FileRemoveDir remove_dir = 5;
  347. FileRemoveFile remove_file = 6;
  348. ReadAllFiles all_files = 7;
  349. FileTransferCancel cancel = 8;
  350. FileTransferSendConfirmRequest send_confirm = 9;
  351. FileRename rename = 10;
  352. }
  353. }
  354. message FileTransferCancel { int32 id = 1; }
  355. message FileResponse {
  356. oneof union {
  357. FileDirectory dir = 1;
  358. FileTransferBlock block = 2;
  359. FileTransferError error = 3;
  360. FileTransferDone done = 4;
  361. FileTransferDigest digest = 5;
  362. }
  363. }
  364. message FileTransferDigest {
  365. int32 id = 1;
  366. sint32 file_num = 2;
  367. uint64 last_modified = 3;
  368. uint64 file_size = 4;
  369. bool is_upload = 5;
  370. bool is_identical = 6;
  371. }
  372. message FileTransferBlock {
  373. int32 id = 1;
  374. sint32 file_num = 2;
  375. bytes data = 3;
  376. bool compressed = 4;
  377. uint32 blk_id = 5;
  378. }
  379. message FileTransferError {
  380. int32 id = 1;
  381. string error = 2;
  382. sint32 file_num = 3;
  383. }
  384. message FileTransferSendRequest {
  385. int32 id = 1;
  386. string path = 2;
  387. bool include_hidden = 3;
  388. int32 file_num = 4;
  389. }
  390. message FileTransferSendConfirmRequest {
  391. int32 id = 1;
  392. sint32 file_num = 2;
  393. oneof union {
  394. bool skip = 3;
  395. uint32 offset_blk = 4;
  396. }
  397. }
  398. message FileTransferDone {
  399. int32 id = 1;
  400. sint32 file_num = 2;
  401. }
  402. message FileTransferReceiveRequest {
  403. int32 id = 1;
  404. string path = 2; // path written to
  405. repeated FileEntry files = 3;
  406. int32 file_num = 4;
  407. uint64 total_size = 5;
  408. }
  409. message FileRemoveDir {
  410. int32 id = 1;
  411. string path = 2;
  412. bool recursive = 3;
  413. }
  414. message FileRemoveFile {
  415. int32 id = 1;
  416. string path = 2;
  417. sint32 file_num = 3;
  418. }
  419. message FileDirCreate {
  420. int32 id = 1;
  421. string path = 2;
  422. }
  423. // main logic from freeRDP
  424. message CliprdrMonitorReady {
  425. }
  426. message CliprdrFormat {
  427. int32 id = 2;
  428. string format = 3;
  429. }
  430. message CliprdrServerFormatList {
  431. repeated CliprdrFormat formats = 2;
  432. }
  433. message CliprdrServerFormatListResponse {
  434. int32 msg_flags = 2;
  435. }
  436. message CliprdrServerFormatDataRequest {
  437. int32 requested_format_id = 2;
  438. }
  439. message CliprdrServerFormatDataResponse {
  440. int32 msg_flags = 2;
  441. bytes format_data = 3;
  442. }
  443. message CliprdrFileContentsRequest {
  444. int32 stream_id = 2;
  445. int32 list_index = 3;
  446. int32 dw_flags = 4;
  447. int32 n_position_low = 5;
  448. int32 n_position_high = 6;
  449. int32 cb_requested = 7;
  450. bool have_clip_data_id = 8;
  451. int32 clip_data_id = 9;
  452. }
  453. message CliprdrFileContentsResponse {
  454. int32 msg_flags = 3;
  455. int32 stream_id = 4;
  456. bytes requested_data = 5;
  457. }
  458. message Cliprdr {
  459. oneof union {
  460. CliprdrMonitorReady ready = 1;
  461. CliprdrServerFormatList format_list = 2;
  462. CliprdrServerFormatListResponse format_list_response = 3;
  463. CliprdrServerFormatDataRequest format_data_request = 4;
  464. CliprdrServerFormatDataResponse format_data_response = 5;
  465. CliprdrFileContentsRequest file_contents_request = 6;
  466. CliprdrFileContentsResponse file_contents_response = 7;
  467. }
  468. }
  469. message Resolution {
  470. int32 width = 1;
  471. int32 height = 2;
  472. }
  473. message DisplayResolution {
  474. int32 display = 1;
  475. Resolution resolution = 2;
  476. }
  477. message SupportedResolutions { repeated Resolution resolutions = 1; }
  478. message SwitchDisplay {
  479. int32 display = 1;
  480. sint32 x = 2;
  481. sint32 y = 3;
  482. int32 width = 4;
  483. int32 height = 5;
  484. bool cursor_embedded = 6;
  485. SupportedResolutions resolutions = 7;
  486. // Do not care about the origin point for now.
  487. Resolution original_resolution = 8;
  488. }
  489. message CaptureDisplays {
  490. repeated int32 add = 1;
  491. repeated int32 sub = 2;
  492. repeated int32 set = 3;
  493. }
  494. message ToggleVirtualDisplay {
  495. int32 display = 1;
  496. bool on = 2;
  497. }
  498. message TogglePrivacyMode {
  499. string impl_key = 1;
  500. bool on = 2;
  501. }
  502. message PermissionInfo {
  503. enum Permission {
  504. Keyboard = 0;
  505. Clipboard = 2;
  506. Audio = 3;
  507. File = 4;
  508. Restart = 5;
  509. Recording = 6;
  510. BlockInput = 7;
  511. }
  512. Permission permission = 1;
  513. bool enabled = 2;
  514. }
  515. enum ImageQuality {
  516. NotSet = 0;
  517. Low = 2;
  518. Balanced = 3;
  519. Best = 4;
  520. }
  521. message SupportedDecoding {
  522. enum PreferCodec {
  523. Auto = 0;
  524. VP9 = 1;
  525. H264 = 2;
  526. H265 = 3;
  527. VP8 = 4;
  528. AV1 = 5;
  529. }
  530. int32 ability_vp9 = 1;
  531. int32 ability_h264 = 2;
  532. int32 ability_h265 = 3;
  533. PreferCodec prefer = 4;
  534. int32 ability_vp8 = 5;
  535. int32 ability_av1 = 6;
  536. CodecAbility i444 = 7;
  537. Chroma prefer_chroma = 8;
  538. }
  539. message OptionMessage {
  540. enum BoolOption {
  541. NotSet = 0;
  542. No = 1;
  543. Yes = 2;
  544. }
  545. ImageQuality image_quality = 1;
  546. BoolOption lock_after_session_end = 2;
  547. BoolOption show_remote_cursor = 3;
  548. BoolOption privacy_mode = 4;
  549. BoolOption block_input = 5;
  550. int32 custom_image_quality = 6;
  551. BoolOption disable_audio = 7;
  552. BoolOption disable_clipboard = 8;
  553. BoolOption enable_file_transfer = 9;
  554. SupportedDecoding supported_decoding = 10;
  555. int32 custom_fps = 11;
  556. BoolOption disable_keyboard = 12;
  557. // Position 13 is used for Resolution. Remove later.
  558. // Resolution custom_resolution = 13;
  559. // BoolOption support_windows_specific_session = 14;
  560. // starting from 15 please, do not use removed fields
  561. BoolOption follow_remote_cursor = 15;
  562. BoolOption follow_remote_window = 16;
  563. }
  564. message TestDelay {
  565. int64 time = 1;
  566. bool from_client = 2;
  567. uint32 last_delay = 3;
  568. uint32 target_bitrate = 4;
  569. }
  570. message PublicKey {
  571. bytes asymmetric_value = 1;
  572. bytes symmetric_value = 2;
  573. }
  574. message SignedId { bytes id = 1; }
  575. message AudioFormat {
  576. uint32 sample_rate = 1;
  577. uint32 channels = 2;
  578. }
  579. message AudioFrame {
  580. bytes data = 1;
  581. }
  582. // Notify peer to show message box.
  583. message MessageBox {
  584. // Message type. Refer to flutter/lib/common.dart/msgBox().
  585. string msgtype = 1;
  586. string title = 2;
  587. // English
  588. string text = 3;
  589. // If not empty, msgbox provides a button to following the link.
  590. // The link here can't be directly http url.
  591. // It must be the key of http url configed in peer side or "rustdesk://*" (jump in app).
  592. string link = 4;
  593. }
  594. message BackNotification {
  595. // no need to consider block input by someone else
  596. enum BlockInputState {
  597. BlkStateUnknown = 0;
  598. BlkOnSucceeded = 2;
  599. BlkOnFailed = 3;
  600. BlkOffSucceeded = 4;
  601. BlkOffFailed = 5;
  602. }
  603. enum PrivacyModeState {
  604. PrvStateUnknown = 0;
  605. // Privacy mode on by someone else
  606. PrvOnByOther = 2;
  607. // Privacy mode is not supported on the remote side
  608. PrvNotSupported = 3;
  609. // Privacy mode on by self
  610. PrvOnSucceeded = 4;
  611. // Privacy mode on by self, but denied
  612. PrvOnFailedDenied = 5;
  613. // Some plugins are not found
  614. PrvOnFailedPlugin = 6;
  615. // Privacy mode on by self, but failed
  616. PrvOnFailed = 7;
  617. // Privacy mode off by self
  618. PrvOffSucceeded = 8;
  619. // Ctrl + P
  620. PrvOffByPeer = 9;
  621. // Privacy mode off by self, but failed
  622. PrvOffFailed = 10;
  623. PrvOffUnknown = 11;
  624. }
  625. oneof union {
  626. PrivacyModeState privacy_mode_state = 1;
  627. BlockInputState block_input_state = 2;
  628. }
  629. // Supplementary message, for "PrvOnFailed" and "PrvOffFailed"
  630. string details = 3;
  631. // The key of the implementation
  632. string impl_key = 4;
  633. }
  634. message ElevationRequestWithLogon {
  635. string username = 1;
  636. string password = 2;
  637. }
  638. message ElevationRequest {
  639. oneof union {
  640. bool direct = 1;
  641. ElevationRequestWithLogon logon = 2;
  642. }
  643. }
  644. message SwitchSidesRequest {
  645. bytes uuid = 1;
  646. }
  647. message SwitchSidesResponse {
  648. bytes uuid = 1;
  649. LoginRequest lr = 2;
  650. }
  651. message SwitchBack {}
  652. message PluginRequest {
  653. string id = 1;
  654. bytes content = 2;
  655. }
  656. message PluginFailure {
  657. string id = 1;
  658. string name = 2;
  659. string msg = 3;
  660. }
  661. message WindowsSessions {
  662. repeated WindowsSession sessions = 1;
  663. uint32 current_sid = 2;
  664. }
  665. // Query messages from peer.
  666. message MessageQuery {
  667. // The SwitchDisplay message of the target display.
  668. // If the target display is not found, the message will be ignored.
  669. int32 switch_display = 1;
  670. }
  671. message Misc {
  672. oneof union {
  673. ChatMessage chat_message = 4;
  674. SwitchDisplay switch_display = 5;
  675. PermissionInfo permission_info = 6;
  676. OptionMessage option = 7;
  677. AudioFormat audio_format = 8;
  678. string close_reason = 9;
  679. bool refresh_video = 10;
  680. bool video_received = 12;
  681. BackNotification back_notification = 13;
  682. bool restart_remote_device = 14;
  683. bool uac = 15;
  684. bool foreground_window_elevated = 16;
  685. bool stop_service = 17;
  686. ElevationRequest elevation_request = 18;
  687. string elevation_response = 19;
  688. bool portable_service_running = 20;
  689. SwitchSidesRequest switch_sides_request = 21;
  690. SwitchBack switch_back = 22;
  691. // Deprecated since 1.2.4, use `change_display_resolution` (36) instead.
  692. // But we must keep it for compatibility when peer version < 1.2.4.
  693. Resolution change_resolution = 24;
  694. PluginRequest plugin_request = 25;
  695. PluginFailure plugin_failure = 26;
  696. uint32 full_speed_fps = 27; // deprecated
  697. uint32 auto_adjust_fps = 28;
  698. bool client_record_status = 29;
  699. CaptureDisplays capture_displays = 30;
  700. int32 refresh_video_display = 31;
  701. ToggleVirtualDisplay toggle_virtual_display = 32;
  702. TogglePrivacyMode toggle_privacy_mode = 33;
  703. SupportedEncoding supported_encoding = 34;
  704. uint32 selected_sid = 35;
  705. DisplayResolution change_display_resolution = 36;
  706. MessageQuery message_query = 37;
  707. int32 follow_current_display = 38;
  708. }
  709. }
  710. message VoiceCallRequest {
  711. int64 req_timestamp = 1;
  712. // Indicates whether the request is a connect action or a disconnect action.
  713. bool is_connect = 2;
  714. }
  715. message VoiceCallResponse {
  716. bool accepted = 1;
  717. int64 req_timestamp = 2; // Should copy from [VoiceCallRequest::req_timestamp].
  718. int64 ack_timestamp = 3;
  719. }
  720. message Message {
  721. oneof union {
  722. SignedId signed_id = 3;
  723. PublicKey public_key = 4;
  724. TestDelay test_delay = 5;
  725. VideoFrame video_frame = 6;
  726. LoginRequest login_request = 7;
  727. LoginResponse login_response = 8;
  728. Hash hash = 9;
  729. MouseEvent mouse_event = 10;
  730. AudioFrame audio_frame = 11;
  731. CursorData cursor_data = 12;
  732. CursorPosition cursor_position = 13;
  733. uint64 cursor_id = 14;
  734. KeyEvent key_event = 15;
  735. Clipboard clipboard = 16;
  736. FileAction file_action = 17;
  737. FileResponse file_response = 18;
  738. Misc misc = 19;
  739. Cliprdr cliprdr = 20;
  740. MessageBox message_box = 21;
  741. SwitchSidesResponse switch_sides_response = 22;
  742. VoiceCallRequest voice_call_request = 23;
  743. VoiceCallResponse voice_call_response = 24;
  744. PeerInfo peer_info = 25;
  745. PointerDeviceEvent pointer_device_event = 26;
  746. Auth2FA auth_2fa = 27;
  747. MultiClipboards multi_clipboards = 28;
  748. }
  749. }