In progress

This mapping has 29 multi-map groups: several pairings are equally correct there. The code view shows one arbitrary valid pairing, not the only one.

Before

…lines 1–165 unchanged (165 lines)
166#[derive(Debug, Copy, Clone, Eq, PartialEq)]
167pub enum AuthConnType {
168 Remote,
169 FileTransfer,
170 PortForward,
171 ViewCamera,
172}
173
174pub struct Connection {
175 inner: ConnInner,
176 display_idx: usize,
177 stream: super::Stream,
178 server: super::ServerPtrWeak,
179 hash: Hash,
180 read_jobs: Vec<fs::TransferJob>,
181 timer: crate::RustDeskInterval,
182 file_timer: crate::RustDeskInterval,
183 file_transfer: Option<(String, bool)>,
184 view_camera: bool,
185 port_forward_socket: Option<Framed<TcpStream, BytesCodec>>,
186 port_forward_address: String,
187 tx_to_cm: mpsc::UnboundedSender<ipc::Data>,
188 authorized: bool,
189 require_2fa: Option<totp_rs::TOTP>,
190 keyboard: bool,
191 clipboard: bool,
…lines 192–246 unchanged (55 lines)
247 multi_ui_session: bool,
248 tx_from_authed: mpsc::UnboundedSender<ipc::Data>,
249 printer_data: Vec<(Instant, String, Vec<u8>)>,
250 // For post requests that need to be sent sequentially.
251 // eg. post_conn_audit
252 tx_post_seq: mpsc::UnboundedSender<(String, Value)>,
253}
254
255impl ConnInner {
256 pub fn new(id: i32, tx: Option<Sender>, tx_video: Option<Sender>) -> Self {
257 Self { id, tx, tx_video }
258 }
259}
…lines 260–343 unchanged (84 lines)
344 hash,
345 read_jobs: Vec::new(),
346 timer: crate::rustdesk_interval(time::interval(SEC30)),
347 file_timer: crate::rustdesk_interval(time::interval(SEC30)),
348 file_transfer: None,
349 view_camera: false,
350 port_forward_socket: None,
351 port_forward_address: "".to_owned(),
352 tx_to_cm,
353 authorized: false,
354 keyboard: Connection::permission("enable-keyboard"),
355 clipboard: Connection::permission("enable-clipboard"),
356 audio: Connection::permission("enable-audio"),
…lines 357–406 unchanged (50 lines)
407 delayed_read_dir: None,
408 #[cfg(target_os = "macos")]
409 retina: Retina::default(),
410 tx_from_authed,
411 printer_data: Vec::new(),
412 tx_post_seq,
413 };
414 let addr = hbb_common::try_into_v4(addr);
415 if !conn.on_open(addr).await {
416 conn.closed = true;
417 // sleep to ensure msg got received.
418 sleep(1.).await;
419 return;
…lines 420–446 unchanged (27 lines)
447 }
448 let mut test_delay_timer =
449 crate::rustdesk_interval(time::interval_at(Instant::now(), TEST_DELAY_TIMEOUT));
450 let mut last_recv_time = Instant::now();
451
452 conn.stream.set_send_timeout(
453 if conn.file_transfer.is_some() || conn.port_forward_socket.is_some() {
454 SEND_TIMEOUT_OTHER
455 } else {
456 SEND_TIMEOUT_VIDEO
457 },
458 );
459
460 #[cfg(not(any(target_os = "android", target_os = "ios")))]
461 std::thread::spawn(move || Self::handle_input(_rx_input, tx_cloned));
…lines 462–1249 unchanged (788 lines)
1250 let (conn_type, auth_conn_type) = if self.file_transfer.is_some() {
1251 (1, AuthConnType::FileTransfer)
1252 } else if self.port_forward_socket.is_some() {
1253 (2, AuthConnType::PortForward)
1254 } else if self.view_camera {
1255 (3, AuthConnType::ViewCamera)
1256 } else {
1257 (0, AuthConnType::Remote)
1258 };
1259 self.authed_conn_id = Some(self::raii::AuthedConnID::new(
1260 self.inner.id(),
1261 auth_conn_type,
1262 self.session_key(),
…lines 1263–1357 unchanged (95 lines)
1358 res.set_peer_info(pi);
1359 msg_out.set_login_response(res);
1360 self.send(msg_out).await;
1361 return;
1362 }
1363 #[cfg(target_os = "linux")]
1364 if !self.file_transfer.is_some() && !self.port_forward_socket.is_some() && !self.view_camera
1365 {
1366 let mut msg = "".to_string();
1367 if crate::platform::linux::is_login_screen_wayland() {
1368 msg = crate::client::LOGIN_SCREEN_WAYLAND.to_owned()
1369 } else {
1370 let dtype = crate::platform::linux::get_display_server();
1371 if dtype != crate::platform::linux::DISPLAY_SERVER_X11
1372 && dtype != crate::platform::linux::DISPLAY_SERVER_WAYLAND
1373 {
1374 msg = format!(
1375 "Unsupported display server type \"{}\", x11 or wayland expected",
1376 dtype
1377 );
1378 }
1379 }
1380 if !msg.is_empty() {
1381 res.set_error(msg);
1382 let mut msg_out = Message::new();
1383 msg_out.set_login_response(res);
1384 self.send(msg_out).await;
1385 return;
1386 }
1387 }
1388 #[allow(unused_mut)]
1389 let mut sas_enabled = false;
1390 #[cfg(windows)]
1391 if crate::platform::is_root() {
1392 sas_enabled = true;
1393 }
…lines 1394–1404 unchanged (11 lines)
1405 .insert(self.lr.my_id.clone(), self.tx_input.clone());
1406
1407 pi.username = username;
1408 pi.sas_enabled = sas_enabled;
1409 pi.features = Some(Features {
1410 privacy_mode: privacy_mode::is_privacy_mode_supported(),
1411 ..Default::default()
1412 })
1413 .into();
1414
1415 let mut sub_service = false;
1416 #[allow(unused_mut)]
1417 let mut wait_session_id_confirm = false;
1418 #[cfg(windows)]
1419 self.handle_windows_specific_session(&mut pi, &mut wait_session_id_confirm);
1420 if self.file_transfer.is_some() {
1421 res.set_peer_info(pi);
1422 } else if self.view_camera {
1423 let supported_encoding = scrap::codec::Encoder::supported_encoding();
1424 self.last_supported_encoding = Some(supported_encoding.clone());
1425 log::info!("peer info supported_encoding: {:?}", supported_encoding);
1426 pi.encoding = Some(supported_encoding).into();
1427
1428 pi.displays = camera::Cameras::all_info().unwrap_or(Vec::new());
…lines 1429–1505 unchanged (77 lines)
1506 };
1507 if !wait_session_id_confirm {
1508 self.read_dir(dir, show_hidden);
1509 } else {
1510 self.delayed_read_dir = Some((dir.to_owned(), show_hidden));
1511 }
1512 } else if self.view_camera {
1513 if !wait_session_id_confirm {
1514 self.try_sub_camera_displays();
1515 }
1516 self.keyboard = false;
1517 self.send_permission(Permission::Keyboard, false).await;
1518 } else if sub_service {
…lines 1519–1526 unchanged (8 lines)
1527 let mut s = s.write().unwrap();
1528
1529 s.try_add_primary_camera_service();
1530 s.add_camera_connection(self.inner.clone());
1531 }
1532 }
1533
1534 fn try_sub_monitor_services(&mut self) {
1535 let is_remote =
1536 self.file_transfer.is_none() && self.port_forward_socket.is_none() && !self.view_camera;
1537 if is_remote && !self.services_subed {
1538 self.services_subed = true;
1539 if let Some(s) = self.server.upgrade() {
1540 let mut noperms = Vec::new();
1541 if !self.peer_keyboard_enabled() && !self.show_remote_cursor {
1542 noperms.push(NAME_CURSOR);
…lines 1543–1647 unchanged (105 lines)
1648
1649 fn try_start_cm(&mut self, peer_id: String, name: String, authorized: bool) {
1650 self.send_to_cm(ipc::Data::Login {
1651 id: self.inner.id(),
1652 is_file_transfer: self.file_transfer.is_some(),
1653 is_view_camera: self.view_camera,
1654 port_forward: self.port_forward_address.clone(),
1655 peer_id,
1656 name,
1657 authorized,
1658 keyboard: self.keyboard,
1659 clipboard: self.clipboard,
1660 audio: self.audio,
…lines 1661–1898 unchanged (238 lines)
1899 .await;
1900 sleep(1.).await;
1901 return false;
1902 }
1903 self.view_camera = true;
1904 }
1905 Some(login_request::Union::PortForward(mut pf)) => {
1906 if !Connection::permission("enable-tunnel") {
1907 self.send_login_error("No permission of IP tunneling").await;
1908 sleep(1.).await;
1909 return false;
1910 }
1911 let mut is_rdp = false;
…lines 1912–2787 unchanged (876 lines)
2788 if self.file_transfer.is_some() {
2789 if let Some((dir, show_hidden)) = self.delayed_read_dir.take() {
2790 self.read_dir(&dir, show_hidden);
2791 }
2792 } else if self.view_camera {
2793 self.try_sub_camera_displays();
2794 } else {
2795 self.try_sub_monitor_services();
2796 }
2797 }
2798 }
2799 Some(misc::Union::MessageQuery(mq)) => {
2800 if let Some(msg_out) = video_service::make_display_changed_msg(
2801 mq.switch_display as _,
2802 None,
…lines 2803–2839 unchanged (37 lines)
2840 request.sid.clone(),
2841 tx,
2842 );
2843 self.refresh_video_display(Some(request.display as usize));
2844 }
2845 }
2846 _ => {}
2847 }
2848 }
2849 true
2850 }
2851
2852 fn update_failure(&self, (mut failure, time): ((i32, i32, i32), i32), remove: bool, i: usize) {
…lines 2853–3367 unchanged (515 lines)
3368 if let Some(tx) = &self.inner.tx {
3369 Self::send_block_input_error(tx, state, "No permission".to_string());
3370 }
3371 }
3372 }
3373 }
3374 }
3375
3376 async fn turn_on_privacy(&mut self, impl_key: String) {
3377 let msg_out = if !privacy_mode::is_privacy_mode_supported() {
3378 crate::common::make_privacy_mode_msg_with_details(
3379 back_notification::PrivacyModeState::PrvNotSupported,
3380 "Unsupported. 1 Multi-screen is not supported. 2 Please confirm the license is activated.".to_string(),
…lines 3381–3559 unchanged (179 lines)
3560 ALIVE_CONNS.lock().unwrap().clone()
3561 }
3562
3563 #[cfg(windows)]
3564 fn portable_check(&mut self) {
3565 if self.portable.is_installed
3566 || self.file_transfer.is_some()
3567 || self.view_camera
3568 || self.port_forward_socket.is_some()
3569 || !self.keyboard
3570 {
3571 return;
3572 }
3573 let running = portable_client::running();
3574 let show_elevation = !running;
3575 self.send_to_cm(ipc::Data::DataPortableService(
3576 ipc::DataPortableService::CmShowElevation(show_elevation),
3577 ));
3578 if self.authorized {
…lines 3579–3775 unchanged (197 lines)
3776 link: "".to_owned(),
3777 ..Default::default()
3778 };
3779 msg_out.set_message_box(res);
3780 self.send(msg_out).await;
3781 }
3782}
3783
3784pub fn insert_switch_sides_uuid(id: String, uuid: uuid::Uuid) {
3785 SWITCH_SIDES_UUID
3786 .lock()
3787 .unwrap()
3788 .insert(id, (tokio::time::Instant::now(), uuid));
…lines 3789–4147 unchanged (359 lines)
4148}
4149
4150impl Drop for Connection {
4151 fn drop(&mut self) {
4152 #[cfg(not(any(target_os = "android", target_os = "ios")))]
4153 self.release_pressed_modifiers();
4154 }
4155}
4156
4157#[cfg(target_os = "linux")]
4158struct LinuxHeadlessHandle {
4159 pub is_headless_allowed: bool,
4160 pub is_headless: bool,
…lines 4161–4496 unchanged (336 lines)

After

…lines 1–165 unchanged (165 lines)
166#[derive(Debug, Copy, Clone, Eq, PartialEq)]
167pub enum AuthConnType {
168 Remote,
169 FileTransfer,
170 PortForward,
171 ViewCamera,
172 Terminal,
173}
174
175pub struct Connection {
176 inner: ConnInner,
177 display_idx: usize,
178 stream: super::Stream,
179 server: super::ServerPtrWeak,
180 hash: Hash,
181 read_jobs: Vec<fs::TransferJob>,
182 timer: crate::RustDeskInterval,
183 file_timer: crate::RustDeskInterval,
184 file_transfer: Option<(String, bool)>,
185 view_camera: bool,
186 terminal: bool,
187 port_forward_socket: Option<Framed<TcpStream, BytesCodec>>,
188 port_forward_address: String,
189 tx_to_cm: mpsc::UnboundedSender<ipc::Data>,
190 authorized: bool,
191 require_2fa: Option<totp_rs::TOTP>,
192 keyboard: bool,
…lines 193–248 unchanged (56 lines)
249 multi_ui_session: bool,
250 tx_from_authed: mpsc::UnboundedSender<ipc::Data>,
251 printer_data: Vec<(Instant, String, Vec<u8>)>,
252 // For post requests that need to be sent sequentially.
253 // eg. post_conn_audit
254 tx_post_seq: mpsc::UnboundedSender<(String, Value)>,
255 terminal_service_id: String,
256 terminal_persistent: bool,
257 terminal_generic_service: Option<Box<GenericService>>,
258}
259
260impl ConnInner {
261 pub fn new(id: i32, tx: Option<Sender>, tx_video: Option<Sender>) -> Self {
262 Self { id, tx, tx_video }
263 }
…lines 264–348 unchanged (85 lines)
349 hash,
350 read_jobs: Vec::new(),
351 timer: crate::rustdesk_interval(time::interval(SEC30)),
352 file_timer: crate::rustdesk_interval(time::interval(SEC30)),
353 file_transfer: None,
354 view_camera: false,
355 terminal: false,
356 port_forward_socket: None,
357 port_forward_address: "".to_owned(),
358 tx_to_cm,
359 authorized: false,
360 keyboard: Connection::permission("enable-keyboard"),
361 clipboard: Connection::permission("enable-clipboard"),
…lines 362–412 unchanged (51 lines)
413 delayed_read_dir: None,
414 #[cfg(target_os = "macos")]
415 retina: Retina::default(),
416 tx_from_authed,
417 printer_data: Vec::new(),
418 tx_post_seq,
419 terminal_service_id: "".to_owned(),
420 terminal_persistent: false,
421 terminal_generic_service: None,
422 };
423 let addr = hbb_common::try_into_v4(addr);
424 if !conn.on_open(addr).await {
425 conn.closed = true;
426 // sleep to ensure msg got received.
427 sleep(1.).await;
…lines 428–455 unchanged (28 lines)
456 }
457 let mut test_delay_timer =
458 crate::rustdesk_interval(time::interval_at(Instant::now(), TEST_DELAY_TIMEOUT));
459 let mut last_recv_time = Instant::now();
460
461 conn.stream.set_send_timeout(
462 if conn.file_transfer.is_some() || conn.port_forward_socket.is_some() || conn.terminal {
463 SEND_TIMEOUT_OTHER
464 } else {
465 SEND_TIMEOUT_VIDEO
466 },
467 );
468
469 #[cfg(not(any(target_os = "android", target_os = "ios")))]
470 std::thread::spawn(move || Self::handle_input(_rx_input, tx_cloned));
…lines 471–1258 unchanged (788 lines)
1259 let (conn_type, auth_conn_type) = if self.file_transfer.is_some() {
1260 (1, AuthConnType::FileTransfer)
1261 } else if self.port_forward_socket.is_some() {
1262 (2, AuthConnType::PortForward)
1263 } else if self.view_camera {
1264 (3, AuthConnType::ViewCamera)
1265 } else if self.terminal {
1266 (4, AuthConnType::Terminal)
1267 } else {
1268 (0, AuthConnType::Remote)
1269 };
1270 self.authed_conn_id = Some(self::raii::AuthedConnID::new(
1271 self.inner.id(),
1272 auth_conn_type,
1273 self.session_key(),
…lines 1274–1368 unchanged (95 lines)
1369 res.set_peer_info(pi);
1370 msg_out.set_login_response(res);
1371 self.send(msg_out).await;
1372 return;
1373 }
1374 #[cfg(target_os = "linux")]
1375 if self.is_remote() {
1376 let mut msg = "".to_string();
1377 if crate::platform::linux::is_login_screen_wayland() {
1378 msg = crate::client::LOGIN_SCREEN_WAYLAND.to_owned()
1379 } else {
1380 let dtype = crate::platform::linux::get_display_server();
1381 if dtype != crate::platform::linux::DISPLAY_SERVER_X11
1382 && dtype != crate::platform::linux::DISPLAY_SERVER_WAYLAND
1383 {
1384 msg = format!(
1385 "Unsupported display server type \"{}\", x11 or wayland expected",
1386 dtype
1387 );
1388 }
1389 }
1390 if !msg.is_empty() {
1391 res.set_error(msg);
1392 let mut msg_out = Message::new();
1393 msg_out.set_login_response(res);
1394 self.send(msg_out).await;
1395 return;
1396 }
1397 }
1398 #[allow(unused_mut)]
1399 let mut sas_enabled = false;
1400 #[cfg(windows)]
1401 if crate::platform::is_root() {
1402 sas_enabled = true;
1403 }
…lines 1404–1415 unchanged (12 lines)
1416 .insert(self.lr.my_id.clone(), self.tx_input.clone());
1417
1418 pi.username = username;
1419 pi.sas_enabled = sas_enabled;
1420 pi.features = Some(Features {
1421 privacy_mode: privacy_mode::is_privacy_mode_supported(),
1422 #[cfg(not(any(target_os = "android", target_os = "ios")))]
1423 terminal: true, // Terminal feature is supported on desktop only
1424 ..Default::default()
1425 })
1426 .into();
1427
1428 let mut sub_service = false;
1429 #[allow(unused_mut)]
1430 let mut wait_session_id_confirm = false;
1431 #[cfg(windows)]
1432 self.handle_windows_specific_session(&mut pi, &mut wait_session_id_confirm);
1433 if self.file_transfer.is_some() || self.terminal {
1434 res.set_peer_info(pi);
1435 } else if self.view_camera {
1436 let supported_encoding = scrap::codec::Encoder::supported_encoding();
1437 self.last_supported_encoding = Some(supported_encoding.clone());
1438 log::info!("peer info supported_encoding: {:?}", supported_encoding);
1439 pi.encoding = Some(supported_encoding).into();
1440
1441 pi.displays = camera::Cameras::all_info().unwrap_or(Vec::new());
…lines 1442–1518 unchanged (77 lines)
1519 };
1520 if !wait_session_id_confirm {
1521 self.read_dir(dir, show_hidden);
1522 } else {
1523 self.delayed_read_dir = Some((dir.to_owned(), show_hidden));
1524 }
1525 } else if self.terminal {
1526 self.keyboard = false;
1527 #[cfg(not(any(target_os = "android", target_os = "ios")))]
1528 self.init_terminal_service().await;
1529 } else if self.view_camera {
1530 if !wait_session_id_confirm {
1531 self.try_sub_camera_displays();
1532 }
1533 self.keyboard = false;
1534 self.send_permission(Permission::Keyboard, false).await;
1535 } else if sub_service {
…lines 1536–1544 unchanged (9 lines)
1545
1546 s.try_add_primary_camera_service();
1547 s.add_camera_connection(self.inner.clone());
1548 }
1549 }
1550
1551 #[inline]
1552 fn is_remote(&self) -> bool {
1553 self.file_transfer.is_none()
1554 && self.port_forward_socket.is_none()
1555 && !self.view_camera
1556 && !self.terminal
1557 }
1558
1559 fn try_sub_monitor_services(&mut self) {
1560 let is_remote = self.is_remote();
1561 if is_remote && !self.services_subed {
1562 self.services_subed = true;
1563 if let Some(s) = self.server.upgrade() {
1564 let mut noperms = Vec::new();
1565 if !self.peer_keyboard_enabled() && !self.show_remote_cursor {
1566 noperms.push(NAME_CURSOR);
…lines 1567–1671 unchanged (105 lines)
1672
1673 fn try_start_cm(&mut self, peer_id: String, name: String, authorized: bool) {
1674 self.send_to_cm(ipc::Data::Login {
1675 id: self.inner.id(),
1676 is_file_transfer: self.file_transfer.is_some(),
1677 is_view_camera: self.view_camera,
1678 is_terminal: self.terminal,
1679 port_forward: self.port_forward_address.clone(),
1680 peer_id,
1681 name,
1682 authorized,
1683 keyboard: self.keyboard,
1684 clipboard: self.clipboard,
…lines 1685–1923 unchanged (239 lines)
1924 .await;
1925 sleep(1.).await;
1926 return false;
1927 }
1928 self.view_camera = true;
1929 }
1930 Some(login_request::Union::Terminal(terminal)) => {
1931 if !Connection::permission(keys::OPTION_ENABLE_TERMINAL) {
1932 self.send_login_error("No permission of terminal").await;
1933 sleep(1.).await;
1934 return false;
1935 }
1936 self.terminal = true;
1937 if let Some(o) = self.options_in_login.as_ref() {
1938 self.terminal_persistent =
1939 o.terminal_persistent.enum_value() == Ok(BoolOption::Yes);
1940 }
1941 self.terminal_service_id = terminal.service_id;
1942 }
1943 Some(login_request::Union::PortForward(mut pf)) => {
1944 if !Connection::permission("enable-tunnel") {
1945 self.send_login_error("No permission of IP tunneling").await;
1946 sleep(1.).await;
1947 return false;
1948 }
…lines 1949–2825 unchanged (877 lines)
2826 if self.file_transfer.is_some() {
2827 if let Some((dir, show_hidden)) = self.delayed_read_dir.take() {
2828 self.read_dir(&dir, show_hidden);
2829 }
2830 } else if self.view_camera {
2831 self.try_sub_camera_displays();
2832 } else if !self.terminal {
2833 self.try_sub_monitor_services();
2834 }
2835 }
2836 }
2837 Some(misc::Union::MessageQuery(mq)) => {
2838 if let Some(msg_out) = video_service::make_display_changed_msg(
2839 mq.switch_display as _,
2840 None,
…lines 2841–2877 unchanged (37 lines)
2878 request.sid.clone(),
2879 tx,
2880 );
2881 self.refresh_video_display(Some(request.display as usize));
2882 }
2883 }
2884 Some(message::Union::TerminalAction(action)) => {
2885 #[cfg(not(any(target_os = "android", target_os = "ios")))]
2886 allow_err!(self.handle_terminal_action(action).await);
2887 #[cfg(any(target_os = "android", target_os = "ios"))]
2888 log::warn!("Terminal action received but not supported on this platform");
2889 }
2890 _ => {}
2891 }
2892 }
2893 true
2894 }
2895
…lines 2896–3411 unchanged (516 lines)
3412 if let Some(tx) = &self.inner.tx {
3413 Self::send_block_input_error(tx, state, "No permission".to_string());
3414 }
3415 }
3416 }
3417 }
3418 #[cfg(not(any(target_os = "android", target_os = "ios")))]
3419 if let Ok(q) = o.terminal_persistent.enum_value() {
3420 if q != BoolOption::NotSet {
3421 self.update_terminal_persistence(q == BoolOption::Yes).await;
3422 }
3423 }
3424 }
3425
3426 async fn turn_on_privacy(&mut self, impl_key: String) {
3427 let msg_out = if !privacy_mode::is_privacy_mode_supported() {
3428 crate::common::make_privacy_mode_msg_with_details(
3429 back_notification::PrivacyModeState::PrvNotSupported,
…lines 3430–3608 unchanged (179 lines)
3609 pub fn alive_conns() -> Vec<i32> {
3610 ALIVE_CONNS.lock().unwrap().clone()
3611 }
3612
3613 #[cfg(windows)]
3614 fn portable_check(&mut self) {
3615 if self.portable.is_installed || !self.is_remote() || !self.keyboard {
3616 return;
3617 }
3618 let running = portable_client::running();
3619 let show_elevation = !running;
3620 self.send_to_cm(ipc::Data::DataPortableService(
3621 ipc::DataPortableService::CmShowElevation(show_elevation),
3622 ));
3623 if self.authorized {
…lines 3624–3821 unchanged (198 lines)
3822 ..Default::default()
3823 };
3824 msg_out.set_message_box(res);
3825 self.send(msg_out).await;
3826 }
3827
3828 #[cfg(not(any(target_os = "android", target_os = "ios")))]
3829 async fn update_terminal_persistence(&mut self, persistent: bool) {
3830 self.terminal_persistent = persistent;
3831 terminal_service::set_persistent(&self.terminal_service_id, persistent).ok();
3832 }
3833
3834 #[cfg(not(any(target_os = "android", target_os = "ios")))]
3835 async fn init_terminal_service(&mut self) {
3836 if self.terminal_service_id.is_empty() {
3837 self.terminal_service_id = terminal_service::generate_service_id();
3838 }
3839 let s = Box::new(terminal_service::new(
3840 self.terminal_service_id.clone(),
3841 self.terminal_persistent,
3842 ));
3843 s.on_subscribe(self.inner.clone());
3844 self.terminal_generic_service = Some(s);
3845 }
3846
3847 #[cfg(not(any(target_os = "android", target_os = "ios")))]
3848 async fn handle_terminal_action(&mut self, action: TerminalAction) -> ResultType<()> {
3849 let mut proxy = terminal_service::TerminalServiceProxy::new(
3850 self.terminal_service_id.clone(),
3851 Some(self.terminal_persistent),
3852 );
3853
3854 match proxy.handle_action(&action) {
3855 Ok(Some(response)) => {
3856 let mut msg_out = Message::new();
3857 msg_out.set_terminal_response(response);
3858 self.send(msg_out).await;
3859 }
3860 Ok(None) => {
3861 // No response needed
3862 }
3863 Err(err) => {
3864 let mut response = TerminalResponse::new();
3865 let mut error = TerminalError::new();
3866 error.message = format!("Failed to handle action: {}", err);
3867 response.set_error(error);
3868 let mut msg_out = Message::new();
3869 msg_out.set_terminal_response(response);
3870 self.send(msg_out).await;
3871 }
3872 }
3873
3874 Ok(())
3875 }
3876}
3877
3878pub fn insert_switch_sides_uuid(id: String, uuid: uuid::Uuid) {
3879 SWITCH_SIDES_UUID
3880 .lock()
3881 .unwrap()
…lines 3882–4242 unchanged (361 lines)
4243
4244impl Drop for Connection {
4245 fn drop(&mut self) {
4246 #[cfg(not(any(target_os = "android", target_os = "ios")))]
4247 self.release_pressed_modifiers();
4248
4249 if let Some(s) = self.terminal_generic_service.as_ref() {
4250 s.join();
4251 }
4252 }
4253}
4254
4255#[cfg(target_os = "linux")]
4256struct LinuxHeadlessHandle {
4257 pub is_headless_allowed: bool,
…lines 4258–4594 unchanged (337 lines)

Before

source_file
use_declaration
use "use"
scoped_use_list
super "super"
:: "::"
use_list
{ "{"
use_wildcard
identifier "input_service"
:: "::"
* "*"
, ","
use_wildcard
* "*"
} "}"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
] "]"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "clipboard"
:: "::"
identifier "try_empty_clipboard_files"
; ";"
attribute_item (+30 nodes collapsed)
use_declaration
use "use"
scoped_use_list
scoped_identifier
crate "crate"
:: "::"
identifier "clipboard"
:: "::"
use_list
{ "{"
identifier "update_clipboard"
, ","
identifier "ClipboardSide"
} "}"
; ";"
attribute_item (+33 nodes collapsed)
use_declaration
use "use"
use_wildcard
scoped_identifier
crate "crate"
:: "::"
identifier "clipboard_file"
:: "::"
* "*"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
) ")"
] "]"
use_declaration
use "use"
scoped_identifier
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "keyboard"
:: "::"
identifier "client"
:: "::"
identifier "map_key_to_control_key"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "platform"
:: "::"
identifier "linux_desktop_manager"
; ";"
attribute_item (+26 nodes collapsed)
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "platform"
:: "::"
identifier "WallPaperRemover"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
use_declaration
use "use"
use_as_clause
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "portable_service"
:: "::"
identifier "client"
as "as"
identifier "portable_client"
; ";"
use_declaration (+36 nodes collapsed)
attribute_item (+26 nodes collapsed)
use_declaration (+21 nodes collapsed)
use_declaration
use "use"
scoped_identifier
scoped_identifier
identifier "cidr_utils"
:: "::"
identifier "cidr"
:: "::"
identifier "IpCidr"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
use_declaration
use "use"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "hbb_common"
:: "::"
identifier "platform"
:: "::"
identifier "linux"
:: "::"
identifier "run_cmds"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
) ")"
] "]"
use_declaration
use "use"
scoped_identifier
scoped_identifier
identifier "hbb_common"
:: "::"
identifier "protobuf"
:: "::"
identifier "EnumOrUnknown"
; ";"
use_declaration (+134 nodes collapsed)
attribute_item (+26 nodes collapsed)
use_declaration
use "use"
scoped_use_list
scoped_identifier
identifier "scrap"
:: "::"
identifier "android"
:: "::"
use_list
{ "{"
identifier "call_main_service_key_event"
, ","
identifier "call_main_service_pointer_input"
} "}"
; ";"
use_declaration
use "use"
scoped_identifier
identifier "scrap"
:: "::"
identifier "camera"
; ";"
use_declaration
use "use"
scoped_identifier
identifier "serde_derive"
:: "::"
identifier "Serialize"
; ";"
use_declaration
use "use"
scoped_use_list
identifier "serde_json"
:: "::"
use_list
{ "{"
identifier "json"
, ","
scoped_identifier
identifier "value"
:: "::"
identifier "Value"
} "}"
; ";"
attribute_item (+30 nodes collapsed)
use_declaration
use "use"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "std"
:: "::"
identifier "sync"
:: "::"
identifier "atomic"
:: "::"
identifier "Ordering"
; ";"
use_declaration (+35 nodes collapsed)
attribute_item (+30 nodes collapsed)
use_declaration
use "use"
identifier "system_shutdown"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
use_declaration
use "use"
scoped_identifier
crate "crate"
:: "::"
identifier "virtual_display_manager"
; ";"
attribute_item (+23 nodes collapsed)
use_declaration
use "use"
scoped_identifier
scoped_identifier
identifier "std"
:: "::"
identifier "collections"
:: "::"
identifier "HashSet"
; ";"
type_item (+26 nodes collapsed)
macro_invocation (+188 nodes collapsed)
attribute_item (+26 nodes collapsed)
macro_invocation (+30 nodes collapsed)
static_item
visibility_modifier
pub "pub"
static "static"
identifier "CLICK_TIME"
: ":"
type_identifier "AtomicI64"
= "="
call_expression
scoped_identifier
identifier "AtomicI64"
:: "::"
identifier "new"
arguments
( "("
integer_literal "0"
) ")"
; ";"
attribute_item (+30 nodes collapsed)
static_item
visibility_modifier
pub "pub"
static "static"
identifier "MOUSE_MOVE_TIME"
: ":"
type_identifier "AtomicI64"
= "="
call_expression
scoped_identifier
identifier "AtomicI64"
:: "::"
identifier "new"
arguments
( "("
integer_literal "0"
) ")"
; ";"
attribute_item (+26 nodes collapsed)
attribute_item (+30 nodes collapsed)
macro_invocation (+116 nodes collapsed)
line_comment
// "//"
attribute_item (+26 nodes collapsed)
attribute_item (+30 nodes collapsed)
function_item (+212 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Clone"
, ","
identifier "Default"
) ")"
] "]"
struct_item (+33 nodes collapsed)
enum_item (+264 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Clone"
, ","
identifier "Debug"
, ","
identifier "Hash"
, ","
identifier "Eq"
, ","
identifier "PartialEq"
) ")"
] "]"
struct_item (+23 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Clone"
, ","
identifier "Debug"
) ")"
] "]"
struct_item (+31 nodes collapsed)
attribute_item (+30 nodes collapsed)
struct_item (+68 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Copy"
, ","
identifier "Clone"
, ","
identifier "Eq"
, ","
identifier "PartialEq"
) ")"
] "]"
enum_item
visibility_modifier
pub "pub"
enum "enum"
type_identifier "AuthConnType"
enum_variant_list
{ "{"
enum_variant
identifier "Remote"
, ","
enum_variant
identifier "FileTransfer"
, ","
enum_variant
identifier "PortForward"
, ","
enum_variant
identifier "ViewCamera"
, ","
} "}"
struct_item
visibility_modifier
pub "pub"
struct "struct"
type_identifier "Connection"
field_declaration_list
{ "{"
field_declaration
field_identifier "inner"
: ":"
type_identifier "ConnInner"
, ","
field_declaration
field_identifier "display_idx"
: ":"
primitive_type "usize"
, ","
field_declaration
field_identifier "stream"
: ":"
scoped_type_identifier
super "super"
:: "::"
type_identifier "Stream"
, ","
field_declaration
field_identifier "server"
: ":"
scoped_type_identifier
super "super"
:: "::"
type_identifier "ServerPtrWeak"
, ","
field_declaration
field_identifier "hash"
: ":"
type_identifier "Hash"
, ","
field_declaration
field_identifier "read_jobs"
: ":"
generic_type
type_identifier "Vec"
type_arguments
< "<"
scoped_type_identifier
identifier "fs"
:: "::"
type_identifier "TransferJob"
> ">"
, ","
field_declaration
field_identifier "timer"
: ":"
scoped_type_identifier
crate "crate"
:: "::"
type_identifier "RustDeskInterval"
, ","
field_declaration
field_identifier "file_timer"
: ":"
scoped_type_identifier
crate "crate"
:: "::"
type_identifier "RustDeskInterval"
, ","
field_declaration
field_identifier "file_transfer"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
tuple_type
( "("
type_identifier "String"
, ","
primitive_type "bool"
) ")"
> ">"
, ","
field_declaration
field_identifier "view_camera"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "port_forward_socket"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
generic_type
type_identifier "Framed"
type_arguments
< "<"
type_identifier "TcpStream"
, ","
type_identifier "BytesCodec"
> ">"
> ">"
, ","
field_declaration
field_identifier "port_forward_address"
: ":"
type_identifier "String"
, ","
field_declaration
field_identifier "tx_to_cm"
: ":"
generic_type
scoped_type_identifier
identifier "mpsc"
:: "::"
type_identifier "UnboundedSender"
type_arguments
< "<"
scoped_type_identifier
identifier "ipc"
:: "::"
type_identifier "Data"
> ">"
, ","
field_declaration
field_identifier "authorized"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "require_2fa"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
scoped_type_identifier
identifier "totp_rs"
:: "::"
type_identifier "TOTP"
> ">"
, ","
field_declaration
field_identifier "keyboard"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "clipboard"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "audio"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "file"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "restart"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "recording"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "block_input"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "last_test_delay"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
type_identifier "Instant"
> ">"
, ","
field_declaration
field_identifier "network_delay"
: ":"
primitive_type "u32"
, ","
field_declaration
field_identifier "lock_after_session_end"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "show_remote_cursor"
: ":"
primitive_type "bool"
, ","
line_comment
// "//"
field_declaration
field_identifier "ip"
: ":"
type_identifier "String"
, ","
line_comment
// "//"
field_declaration
field_identifier "disable_keyboard"
: ":"
primitive_type "bool"
, ","
line_comment
// "//"
field_declaration
field_identifier "disable_clipboard"
: ":"
primitive_type "bool"
, ","
line_comment
// "//"
field_declaration
field_identifier "disable_audio"
: ":"
primitive_type "bool"
, ","
line_comment
// "//"
attribute_item (+33 nodes collapsed)
field_declaration
field_identifier "enable_file_transfer"
: ":"
primitive_type "bool"
, ","
line_comment
// "//"
field_declaration
field_identifier "audio_sender"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
type_identifier "MediaSender"
> ">"
, ","
line_comment
// "//"
field_declaration
field_identifier "tx_input"
: ":"
generic_type
scoped_type_identifier
identifier "std_mpsc"
:: "::"
type_identifier "Sender"
type_arguments
< "<"
type_identifier "MessageInput"
> ">"
, ","
line_comment
// "//"
field_declaration
field_identifier "video_ack_required"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "server_audit_conn"
: ":"
type_identifier "String"
, ","
field_declaration
field_identifier "server_audit_file"
: ":"
type_identifier "String"
, ","
field_declaration
field_identifier "lr"
: ":"
type_identifier "LoginRequest"
, ","
field_declaration
field_identifier "session_last_recv_time"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
generic_type
type_identifier "Arc"
type_arguments
< "<"
generic_type
type_identifier "Mutex"
type_arguments
< "<"
type_identifier "Instant"
> ">"
> ">"
> ">"
, ","
field_declaration
field_identifier "chat_unanswered"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "file_transferred"
: ":"
primitive_type "bool"
, ","
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
field_declaration
field_identifier "portable"
: ":"
type_identifier "PortableState"
, ","
field_declaration
field_identifier "from_switch"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "voice_call_request_timestamp"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
type_identifier "NonZeroI64"
> ">"
, ","
field_declaration
field_identifier "voice_calling"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "options_in_login"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
type_identifier "OptionMessage"
> ">"
, ","
attribute_item (+23 nodes collapsed)
field_declaration
field_identifier "pressed_modifiers"
: ":"
generic_type
type_identifier "HashSet"
type_arguments
< "<"
scoped_type_identifier
identifier "rdev"
:: "::"
type_identifier "Key"
> ">"
, ","
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
field_declaration
field_identifier "linux_headless_handle"
: ":"
type_identifier "LinuxHeadlessHandle"
, ","
field_declaration
field_identifier "closed"
: ":"
primitive_type "bool"
, ","
attribute_item (+30 nodes collapsed)
field_declaration
field_identifier "start_cm_ipc_para"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
type_identifier "StartCmIpcPara"
> ">"
, ","
field_declaration
field_identifier "auto_disconnect_timer"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
tuple_type
( "("
type_identifier "Instant"
, ","
primitive_type "u64"
) ")"
> ">"
, ","
field_declaration
field_identifier "authed_conn_id"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
scoped_type_identifier
scoped_identifier
self "self"
:: "::"
identifier "raii"
:: "::"
type_identifier "AuthedConnID"
> ">"
, ","
field_declaration
field_identifier "file_remove_log_control"
: ":"
type_identifier "FileRemoveLogControl"
, ","
field_declaration
field_identifier "last_supported_encoding"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
type_identifier "SupportedEncoding"
> ">"
, ","
field_declaration
field_identifier "services_subed"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "delayed_read_dir"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
tuple_type
( "("
type_identifier "String"
, ","
primitive_type "bool"
) ")"
> ">"
, ","
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "macos"
" "\""
) ")"
] "]"
field_declaration
field_identifier "retina"
: ":"
type_identifier "Retina"
, ","
field_declaration
field_identifier "follow_remote_cursor"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "follow_remote_window"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "multi_ui_session"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "tx_from_authed"
: ":"
generic_type
scoped_type_identifier
identifier "mpsc"
:: "::"
type_identifier "UnboundedSender"
type_arguments
< "<"
scoped_type_identifier
identifier "ipc"
:: "::"
type_identifier "Data"
> ">"
, ","
field_declaration (+21 nodes collapsed)
, ","
line_comment
// "//"
line_comment
// "//"
field_declaration
field_identifier "tx_post_seq"
: ":"
generic_type
scoped_type_identifier
identifier "mpsc"
:: "::"
type_identifier "UnboundedSender"
type_arguments
< "<"
tuple_type
( "("
type_identifier "String"
, ","
type_identifier "Value"
) ")"
> ">"
, ","
} "}"
impl_item (+56 nodes collapsed)
impl_item (+246 nodes collapsed)
const_item
const "const"
identifier "TEST_DELAY_TIMEOUT"
: ":"
type_identifier "Duration"
= "="
call_expression
scoped_identifier
identifier "Duration"
:: "::"
identifier "from_secs"
arguments
( "("
integer_literal "1"
) ")"
; ";"
const_item
const "const"
identifier "SEC30"
: ":"
type_identifier "Duration"
= "="
call_expression
scoped_identifier
identifier "Duration"
:: "::"
identifier "from_secs"
arguments
( "("
integer_literal "30"
) ")"
; ";"
const_item
const "const"
identifier "H1"
: ":"
type_identifier "Duration"
= "="
call_expression
scoped_identifier
identifier "Duration"
:: "::"
identifier "from_secs"
arguments
( "("
integer_literal "3600"
) ")"
; ";"
const_item
const "const"
identifier "MILLI1"
: ":"
type_identifier "Duration"
= "="
call_expression
scoped_identifier
identifier "Duration"
:: "::"
identifier "from_millis"
arguments
( "("
integer_literal "1"
) ")"
; ";"
const_item
const "const"
identifier "SEND_TIMEOUT_VIDEO"
: ":"
primitive_type "u64"
= "="
integer_literal "12_000"
; ";"
const_item
const "const"
identifier "SEND_TIMEOUT_OTHER"
: ":"
primitive_type "u64"
= "="
binary_expression
identifier "SEND_TIMEOUT_VIDEO"
* "*"
integer_literal "10"
; ";"
const_item
const "const"
identifier "SESSION_TIMEOUT"
: ":"
type_identifier "Duration"
= "="
call_expression
scoped_identifier
identifier "Duration"
:: "::"
identifier "from_secs"
arguments
( "("
integer_literal "30"
) ")"
; ";"
impl_item
impl "impl"
type_identifier "Connection"
declaration_list
{ "{"
function_item
visibility_modifier
pub "pub"
function_modifiers
async "async"
fn "fn"
identifier "start"
parameters (+29 nodes collapsed)
block
{ "{"
let_declaration
let "let"
identifier "_raii_id"
= "="
call_expression
scoped_identifier
scoped_identifier
identifier "raii"
:: "::"
identifier "ConnectionID"
:: "::"
identifier "new"
arguments
( "("
identifier "id"
) ")"
; ";"
let_declaration (+45 nodes collapsed)
let_declaration (+29 nodes collapsed)
line_comment
// "//"
let_declaration
let "let"
identifier "tx_from_cm"
= "="
call_expression
field_expression
identifier "tx_from_cm_holder"
. "."
field_identifier "clone"
arguments
( "("
) ")"
; ";"
let_declaration (+27 nodes collapsed)
let_declaration (+36 nodes collapsed)
let_declaration (+36 nodes collapsed)
let_declaration
let "let"
tuple_pattern
( "("
identifier "tx_input"
, ","
identifier "_rx_input"
) ")"
= "="
call_expression
scoped_identifier
identifier "std_mpsc"
:: "::"
identifier "channel"
arguments
( "("
) ")"
; ";"
let_declaration (+29 nodes collapsed)
let_declaration
let "let"
mutable_specifier "mut"
identifier "hbbs_rx"
= "="
call_expression
scoped_identifier
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "hbbs_http"
:: "::"
identifier "sync"
:: "::"
identifier "signal_receiver"
arguments
( "("
) ")"
; ";"
attribute_item (+30 nodes collapsed)
let_declaration
let "let"
tuple_pattern
( "("
identifier "tx_cm_stream_ready"
, ","
identifier "_rx_cm_stream_ready"
) ")"
= "="
call_expression
scoped_identifier
identifier "mpsc"
:: "::"
identifier "channel"
arguments
( "("
integer_literal "1"
) ")"
; ";"
attribute_item (+30 nodes collapsed)
let_declaration
let "let"
tuple_pattern
( "("
identifier "_tx_desktop_ready"
, ","
identifier "rx_desktop_ready"
) ")"
= "="
call_expression
scoped_identifier
identifier "mpsc"
:: "::"
identifier "channel"
arguments
( "("
integer_literal "1"
) ")"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
let_declaration
let "let"
identifier "linux_headless_handle"
= "="
call_expression
scoped_identifier
identifier "LinuxHeadlessHandle"
:: "::"
identifier "new"
arguments
( "("
identifier "_rx_cm_stream_ready"
, ","
identifier "_tx_desktop_ready"
) ")"
; ";"
let_declaration
let "let"
tuple_pattern
( "("
identifier "tx_post_seq"
, ","
identifier "rx_post_seq"
) ")"
= "="
call_expression
scoped_identifier
identifier "mpsc"
:: "::"
identifier "unbounded_channel"
arguments
( "("
) ")"
; ";"
expression_statement (+30 nodes collapsed)
attribute_item (+30 nodes collapsed)
let_declaration
let "let"
identifier "tx_cloned"
= "="
call_expression
field_expression
identifier "tx"
. "."
field_identifier "clone"
arguments
( "("
) ")"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "conn"
= "="
struct_expression
type_identifier "Self"
field_initializer_list
{ "{"
field_initializer (+31 nodes collapsed)
, ","
field_initializer
field_identifier "require_2fa"
: ":"
call_expression
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "auth_2fa"
:: "::"
identifier "get_2fa"
arguments
( "("
identifier "None"
) ")"
, ","
field_initializer
field_identifier "display_idx"
: ":"
unary_expression
* "*"
scoped_identifier
identifier "display_service"
:: "::"
identifier "PRIMARY_DISPLAY_IDX"
, ","
shorthand_field_initializer
identifier "stream"
, ","
shorthand_field_initializer
identifier "server"
, ","
shorthand_field_initializer
identifier "hash"
, ","
field_initializer
field_identifier "read_jobs"
: ":"
call_expression
scoped_identifier
identifier "Vec"
:: "::"
identifier "new"
arguments
( "("
) ")"
, ","
field_initializer
field_identifier "timer"
: ":"
call_expression
scoped_identifier
crate "crate"
:: "::"
identifier "rustdesk_interval"
arguments
( "("
call_expression
scoped_identifier
identifier "time"
:: "::"
identifier "interval"
arguments
( "("
identifier "SEC30"
) ")"
) ")"
, ","
field_initializer
field_identifier "file_timer"
: ":"
call_expression
scoped_identifier
crate "crate"
:: "::"
identifier "rustdesk_interval"
arguments
( "("
call_expression
scoped_identifier
identifier "time"
:: "::"
identifier "interval"
arguments
( "("
identifier "SEC30"
) ")"
) ")"
, ","
field_initializer
field_identifier "file_transfer"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "view_camera"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "port_forward_socket"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "port_forward_address"
: ":"
call_expression
field_expression
string_literal
" "\""
" "\""
. "."
field_identifier "to_owned"
arguments
( "("
) ")"
, ","
shorthand_field_initializer
identifier "tx_to_cm"
, ","
field_initializer
field_identifier "authorized"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "keyboard"
: ":"
call_expression
scoped_identifier
identifier "Connection"
:: "::"
identifier "permission"
arguments
( "("
string_literal
" "\""
string_content "enable-keyboard"
" "\""
) ")"
, ","
field_initializer
field_identifier "clipboard"
: ":"
call_expression
scoped_identifier
identifier "Connection"
:: "::"
identifier "permission"
arguments
( "("
string_literal
" "\""
string_content "enable-clipboard"
" "\""
) ")"
, ","
field_initializer
field_identifier "audio"
: ":"
call_expression
scoped_identifier
identifier "Connection"
:: "::"
identifier "permission"
arguments
( "("
string_literal
" "\""
string_content "enable-audio"
" "\""
) ")"
, ","
line_comment
// "//"
field_initializer
field_identifier "file"
: ":"
call_expression
scoped_identifier
identifier "Connection"
:: "::"
identifier "permission"
arguments
( "("
scoped_identifier
identifier "keys"
:: "::"
identifier "OPTION_ENABLE_FILE_TRANSFER"
) ")"
, ","
field_initializer
field_identifier "restart"
: ":"
call_expression
scoped_identifier
identifier "Connection"
:: "::"
identifier "permission"
arguments
( "("
string_literal
" "\""
string_content "enable-remote-restart"
" "\""
) ")"
, ","
field_initializer
field_identifier "recording"
: ":"
call_expression
scoped_identifier
identifier "Connection"
:: "::"
identifier "permission"
arguments
( "("
string_literal
" "\""
string_content "enable-record-session"
" "\""
) ")"
, ","
field_initializer
field_identifier "block_input"
: ":"
call_expression
scoped_identifier
identifier "Connection"
:: "::"
identifier "permission"
arguments
( "("
string_literal
" "\""
string_content "enable-block-input"
" "\""
) ")"
, ","
field_initializer
field_identifier "last_test_delay"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "network_delay"
: ":"
integer_literal "0"
, ","
field_initializer
field_identifier "lock_after_session_end"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "show_remote_cursor"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "follow_remote_cursor"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "follow_remote_window"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "multi_ui_session"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "ip"
: ":"
call_expression
field_expression
string_literal
" "\""
" "\""
. "."
field_identifier "to_owned"
arguments
( "("
) ")"
, ","
field_initializer
field_identifier "disable_audio"
: ":"
boolean_literal
false "false"
, ","
field_initializer (+38 nodes collapsed)
, ","
field_initializer
field_identifier "disable_clipboard"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "disable_keyboard"
: ":"
boolean_literal
false "false"
, ","
shorthand_field_initializer
identifier "tx_input"
, ","
field_initializer
field_identifier "video_ack_required"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "server_audit_conn"
: ":"
call_expression
field_expression
string_literal
" "\""
" "\""
. "."
field_identifier "to_owned"
arguments
( "("
) ")"
, ","
field_initializer
field_identifier "server_audit_file"
: ":"
call_expression
field_expression
string_literal
" "\""
" "\""
. "."
field_identifier "to_owned"
arguments
( "("
) ")"
, ","
field_initializer
field_identifier "lr"
: ":"
call_expression
scoped_identifier
identifier "Default"
:: "::"
identifier "default"
arguments
( "("
) ")"
, ","
field_initializer
field_identifier "session_last_recv_time"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "chat_unanswered"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "file_transferred"
: ":"
boolean_literal
false "false"
, ","
field_initializer (+21 nodes collapsed)
, ","
field_initializer
field_identifier "from_switch"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "audio_sender"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "voice_call_request_timestamp"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "voice_calling"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "options_in_login"
: ":"
identifier "None"
, ","
field_initializer (+34 nodes collapsed)
, ","
shorthand_field_initializer
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
identifier "linux_headless_handle"
, ","
field_initializer
field_identifier "closed"
: ":"
boolean_literal
false "false"
, ","
field_initializer (+55 nodes collapsed)
, ","
field_initializer
field_identifier "auto_disconnect_timer"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "authed_conn_id"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "file_remove_log_control"
: ":"
call_expression
scoped_identifier
identifier "FileRemoveLogControl"
:: "::"
identifier "new"
arguments
( "("
identifier "id"
) ")"
, ","
field_initializer
field_identifier "last_supported_encoding"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "services_subed"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "delayed_read_dir"
: ":"
identifier "None"
, ","
field_initializer (+26 nodes collapsed)
, ","
shorthand_field_initializer
identifier "tx_from_authed"
, ","
field_initializer
field_identifier "printer_data"
: ":"
call_expression
scoped_identifier
identifier "Vec"
:: "::"
identifier "new"
arguments
( "("
) ")"
, ","
shorthand_field_initializer
identifier "tx_post_seq"
, ","
} "}"
; ";"
let_declaration
let "let"
identifier "addr"
= "="
call_expression
scoped_identifier
identifier "hbb_common"
:: "::"
identifier "try_into_v4"
arguments
( "("
identifier "addr"
) ")"
; ";"
expression_statement (+47 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
) ")"
] "]"
expression_statement
call_expression
identifier "start_channel"
arguments
( "("
identifier "rx_to_cm"
, ","
identifier "tx_from_cm"
) ")"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
) ")"
] "]"
expression_statement (+22 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "not"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
) ")"
) ")"
] "]"
expression_statement (+32 nodes collapsed)
expression_statement (+32 nodes collapsed)
expression_statement (+32 nodes collapsed)
expression_statement (+32 nodes collapsed)
expression_statement (+32 nodes collapsed)
expression_statement (+32 nodes collapsed)
expression_statement (+32 nodes collapsed)
let_declaration (+32 nodes collapsed)
let_declaration
let "let"
mutable_specifier "mut"
identifier "last_recv_time"
= "="
call_expression
scoped_identifier
identifier "Instant"
:: "::"
identifier "now"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
field_expression
field_expression
identifier "conn"
. "."
field_identifier "stream"
. "."
field_identifier "set_send_timeout"
arguments
( "("
if_expression
if "if"
binary_expression any 1:2
call_expression
field_expression
field_expression
identifier "conn"
. "."
field_identifier "file_transfer"
. "."
field_identifier "is_some"
arguments
( "("
) ")"
|| "||"
call_expression
field_expression
field_expression
identifier "conn"
. "."
field_identifier "port_forward_socket"
. "."
field_identifier "is_some"
arguments
( "("
) ")"
block
{ "{"
identifier "SEND_TIMEOUT_OTHER"
} "}"
else_clause
else "else"
block
{ "{"
identifier "SEND_TIMEOUT_VIDEO"
} "}"
, ","
) ")"
; ";"
attribute_item (+30 nodes collapsed)
expression_statement (+29 nodes collapsed)
let_declaration (+31 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
] "]"
let_declaration
let "let"
identifier "rx_clip_holder"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "rx_clip"
; ";"
let_declaration
let "let"
identifier "_tx_clip"
: ":"
generic_type
scoped_type_identifier
identifier "mpsc"
:: "::"
type_identifier "UnboundedSender"
type_arguments
< "<"
primitive_type "i32"
> ">"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
] "]"
expression_statement (+87 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "not"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
) ")"
] "]"
expression_statement (+28 nodes collapsed)
expression_statement (+3010 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
] "]"
expression_statement
block
{ "{"
expression_statement
call_expression
field_expression
identifier "conn"
. "."
field_identifier "try_empty_file_clipboard"
arguments
( "("
) ")"
; ";"
} "}"
expression_statement (+46 nodes collapsed)
attribute_item (+26 nodes collapsed)
attribute_item (+30 nodes collapsed)
expression_statement (+43 nodes collapsed)
expression_statement
call_expression
scoped_identifier
identifier "video_service"
:: "::"
identifier "notify_video_frame_fetched"
arguments
( "("
identifier "id"
, ","
identifier "None"
) ")"
; ";"
expression_statement
if_expression
if "if"
field_expression
identifier "conn"
. "."
field_identifier "authorized"
block
{ "{"
expression_statement
call_expression
scoped_identifier
identifier "password"
:: "::"
identifier "update_temporary_password"
arguments
( "("
) ")"
; ";"
} "}"
expression_statement (+88 nodes collapsed)
expression_statement (+29 nodes collapsed)
expression_statement (+99 nodes collapsed)
expression_statement
await_expression
call_expression
field_expression
identifier "conn"
. "."
field_identifier "on_close"
arguments
( "("
string_literal
" "\""
string_content "End"
" "\""
, ","
boolean_literal
true "true"
) ")"
. "."
await "await"
; ";"
expression_statement
macro_invocation
scoped_identifier
identifier "log"
:: "::"
identifier "info"
! "!"
token_tree
( "("
string_literal
" "\""
string_content "#{} connection loop exited"
" "\""
, ","
identifier "id"
) ")"
; ";"
} "}"
attribute_item (+30 nodes collapsed)
function_item (+864 nodes collapsed)
function_item (+93 nodes collapsed)
function_item (+449 nodes collapsed)
function_item (+118 nodes collapsed)
function_item (+57 nodes collapsed)
function_item (+308 nodes collapsed)
function_item (+318 nodes collapsed)
function_item (+121 nodes collapsed)
function_item (+183 nodes collapsed)
function_item (+118 nodes collapsed)
function_item (+424 nodes collapsed)
function_item (+244 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+52 nodes collapsed)
function_item
function_modifiers
async "async"
fn "fn"
identifier "send_logon_response"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
) ")"
block
{ "{"
expression_statement
if_expression
if "if"
field_expression
self "self"
. "."
field_identifier "authorized"
block
{ "{"
expression_statement
return_expression
return "return"
; ";"
} "}"
expression_statement (+300 nodes collapsed)
expression_statement
assignment_expression
field_expression
self "self"
. "."
field_identifier "authorized"
= "="
boolean_literal
true "true"
; ";"
let_declaration
let "let"
tuple_pattern
( "("
identifier "conn_type"
, ","
identifier "auth_conn_type"
) ")"
= "="
if_expression
if "if"
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "file_transfer"
. "."
field_identifier "is_some"
arguments
( "("
) ")"
block
{ "{"
tuple_expression
( "("
integer_literal "1"
, ","
scoped_identifier
identifier "AuthConnType"
:: "::"
identifier "FileTransfer"
) ")"
} "}"
else_clause
else "else"
if_expression
if "if"
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "port_forward_socket"
. "."
field_identifier "is_some"
arguments
( "("
) ")"
block
{ "{"
tuple_expression
( "("
integer_literal "2"
, ","
scoped_identifier
identifier "AuthConnType"
:: "::"
identifier "PortForward"
) ")"
} "}"
else_clause
else "else"
if_expression
if "if"
field_expression
self "self"
. "."
field_identifier "view_camera"
block
{ "{"
tuple_expression
( "("
integer_literal "3"
, ","
scoped_identifier
identifier "AuthConnType"
:: "::"
identifier "ViewCamera"
) ")"
} "}"
else_clause any 1:2
else "else" any 1:2
block
{ "{"
tuple_expression
( "("
integer_literal "0"
, ","
scoped_identifier
identifier "AuthConnType"
:: "::"
identifier "Remote"
) ")"
} "}"
; ";"
expression_statement (+74 nodes collapsed)
expression_statement (+63 nodes collapsed)
expression_statement (+51 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "allow"
token_tree
( "("
identifier "unused_mut"
) ")"
] "]"
let_declaration
let "let"
mutable_specifier "mut"
identifier "username"
= "="
call_expression
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "platform"
:: "::"
identifier "get_active_username"
arguments
( "("
) ")"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "res"
= "="
call_expression
scoped_identifier
identifier "LoginResponse"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
let_declaration (+45 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "not"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
) ")"
) ")"
] "]"
expression_statement (+49 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
) ")"
] "]"
expression_statement (+53 nodes collapsed)
attribute_item (+30 nodes collapsed)
let_declaration
let "let"
identifier "platform_additions"
= "="
call_expression
scoped_identifier
scoped_identifier
identifier "serde_json"
:: "::"
identifier "Map"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
attribute_item (+44 nodes collapsed)
let_declaration
let "let"
mutable_specifier "mut"
identifier "platform_additions"
= "="
call_expression
scoped_identifier
scoped_identifier
identifier "serde_json"
:: "::"
identifier "Map"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
expression_statement (+127 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "windows"
" "\""
) ")"
] "]"
expression_statement (+111 nodes collapsed)
attribute_item (+26 nodes collapsed)
expression_statement (+231 nodes collapsed)
attribute_item (+26 nodes collapsed)
expression_statement (+34 nodes collapsed)
attribute_item (+33 nodes collapsed)
expression_statement (+52 nodes collapsed)
expression_statement (+71 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
expression_statement
if_expression
if "if"
binary_expression
binary_expression
unary_expression
! "!"
call_expression any 2:1
field_expression any 5:1
field_expression any 5:1
self "self" any 3:1
. "." any 5:1
field_identifier "file_transfer" any 5:1
. "." any 5:1
field_identifier "is_some" any 5:1
arguments any 2:1
( "(" any 2:1
) ")" any 2:1
&& "&&"
unary_expression
! "!"
call_expression any 2:1
field_expression any 5:1
field_expression any 5:1
self "self" any 3:1
. "." any 5:1
field_identifier "port_forward_socket" any 5:1
. "." any 5:1
field_identifier "is_some" any 5:1
arguments any 2:1
( "(" any 2:1
) ")" any 2:1
&& "&&"
unary_expression
! "!"
field_expression any 5:1
self "self" any 3:1
. "." any 5:1
field_identifier "view_camera" any 5:1
block (+205 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "allow"
token_tree
( "("
identifier "unused_mut"
) ")"
] "]"
let_declaration
let "let"
mutable_specifier "mut"
identifier "sas_enabled"
= "="
boolean_literal
false "false"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
expression_statement (+24 nodes collapsed)
attribute_item (+30 nodes collapsed)
expression_statement (+51 nodes collapsed)
attribute_item (+26 nodes collapsed)
attribute_item (+30 nodes collapsed)
expression_statement (+50 nodes collapsed)
expression_statement
assignment_expression
field_expression
identifier "pi"
. "."
field_identifier "username"
= "="
identifier "username"
; ";"
expression_statement
assignment_expression
field_expression
identifier "pi"
. "."
field_identifier "sas_enabled"
= "="
identifier "sas_enabled"
; ";"
expression_statement
assignment_expression
field_expression
identifier "pi"
. "."
field_identifier "features"
= "="
call_expression
field_expression
call_expression
identifier "Some"
arguments
( "("
struct_expression
type_identifier "Features"
field_initializer_list
{ "{"
field_initializer
field_identifier "privacy_mode"
: ":"
call_expression
scoped_identifier
identifier "privacy_mode"
:: "::"
identifier "is_privacy_mode_supported"
arguments
( "("
) ")"
, ","
base_field_initializer
.. ".."
call_expression
scoped_identifier
identifier "Default"
:: "::"
identifier "default"
arguments
( "("
) ")"
} "}"
) ")"
. "."
field_identifier "into"
arguments
( "("
) ")"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "sub_service"
= "="
boolean_literal
false "false"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "allow"
token_tree
( "("
identifier "unused_mut"
) ")"
] "]"
let_declaration
let "let"
mutable_specifier "mut"
identifier "wait_session_id_confirm"
= "="
boolean_literal
false "false"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "handle_windows_specific_session"
arguments
( "("
reference_expression
& "&"
mutable_specifier "mut"
identifier "pi"
, ","
reference_expression
& "&"
mutable_specifier "mut"
identifier "wait_session_id_confirm"
) ")"
; ";"
expression_statement
if_expression
if "if"
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "file_transfer"
. "."
field_identifier "is_some"
arguments
( "("
) ")"
block
{ "{"
expression_statement
call_expression
field_expression
identifier "res"
. "."
field_identifier "set_peer_info"
arguments
( "("
identifier "pi"
) ")"
; ";"
} "}"
else_clause (+734 nodes collapsed)
let_declaration
let "let"
mutable_specifier "mut"
identifier "msg_out"
= "="
call_expression
scoped_identifier
identifier "Message"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
field_expression
identifier "msg_out"
. "."
field_identifier "set_login_response"
arguments
( "("
identifier "res"
) ")"
; ";"
expression_statement
await_expression
call_expression
field_expression
self "self"
. "."
field_identifier "send"
arguments
( "("
identifier "msg_out"
) ")"
. "."
await "await"
; ";"
expression_statement (+41 nodes collapsed)
expression_statement
if_expression
if "if"
let_condition (+24 nodes collapsed)
block (+113 nodes collapsed)
else_clause any 1:2
else "else" any 1:2
if_expression (+85 nodes collapsed)
} "}"
function_item (+90 nodes collapsed)
function_item
fn "fn"
identifier "try_sub_monitor_services"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
) ")"
block
{ "{"
let_declaration
let "let"
identifier "is_remote"
= "="
binary_expression
binary_expression
call_expression any 2:1
field_expression any 5:1
field_expression any 5:1
self "self" any 3:1
. "." any 5:1
field_identifier "file_transfer" any 5:1
. "." any 5:1
field_identifier "is_none" any 5:1
arguments any 2:1
( "(" any 2:1
) ")" any 2:1
&& "&&"
call_expression any 2:1
field_expression any 5:1
field_expression any 5:1
self "self" any 3:1
. "." any 5:1
field_identifier "port_forward_socket" any 5:1
. "." any 5:1
field_identifier "is_none" any 5:1
arguments any 2:1
( "(" any 2:1
) ")" any 2:1
&& "&&"
unary_expression
! "!"
field_expression any 5:1
self "self" any 3:1
. "." any 5:1
field_identifier "view_camera" any 5:1
; ";"
expression_statement (+371 nodes collapsed)
} "}"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
function_item (+238 nodes collapsed)
function_item (+191 nodes collapsed)
function_item (+26 nodes collapsed)
function_item (+26 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+52 nodes collapsed)
function_item (+26 nodes collapsed)
attribute_item (+26 nodes collapsed)
function_item (+24 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
] "]"
function_item (+52 nodes collapsed)
function_item
fn "fn"
identifier "try_start_cm"
parameters (+22 nodes collapsed)
block
{ "{"
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "send_to_cm"
arguments
( "("
struct_expression
scoped_type_identifier
scoped_identifier
identifier "ipc"
:: "::"
identifier "Data"
:: "::"
type_identifier "Login"
field_initializer_list
{ "{"
field_initializer
field_identifier "id"
: ":"
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "inner"
. "."
field_identifier "id"
arguments
( "("
) ")"
, ","
field_initializer
field_identifier "is_file_transfer"
: ":"
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "file_transfer"
. "."
field_identifier "is_some"
arguments
( "("
) ")"
, ","
field_initializer
field_identifier "is_view_camera"
: ":"
field_expression
self "self"
. "."
field_identifier "view_camera"
, ","
field_initializer
field_identifier "port_forward"
: ":"
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "port_forward_address"
. "."
field_identifier "clone"
arguments
( "("
) ")"
, ","
shorthand_field_initializer
identifier "peer_id"
, ","
shorthand_field_initializer
identifier "name"
, ","
shorthand_field_initializer
identifier "authorized"
, ","
field_initializer
field_identifier "keyboard"
: ":"
field_expression
self "self"
. "."
field_identifier "keyboard"
, ","
field_initializer
field_identifier "clipboard"
: ":"
field_expression
self "self"
. "."
field_identifier "clipboard"
, ","
field_initializer
field_identifier "audio"
: ":"
field_expression
self "self"
. "."
field_identifier "audio"
, ","
field_initializer
field_identifier "file"
: ":"
field_expression
self "self"
. "."
field_identifier "file"
, ","
field_initializer
field_identifier "file_transfer_enabled"
: ":"
field_expression
self "self"
. "."
field_identifier "file"
, ","
field_initializer
field_identifier "restart"
: ":"
field_expression
self "self"
. "."
field_identifier "restart"
, ","
field_initializer
field_identifier "recording"
: ":"
field_expression
self "self"
. "."
field_identifier "recording"
, ","
field_initializer
field_identifier "block_input"
: ":"
field_expression
self "self"
. "."
field_identifier "block_input"
, ","
field_initializer
field_identifier "from_switch"
: ":"
field_expression
self "self"
. "."
field_identifier "from_switch"
, ","
} "}"
) ")"
; ";"
} "}"
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+42 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+43 nodes collapsed)
function_item (+144 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+154 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
attribute_item (+30 nodes collapsed)
function_item (+56 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
attribute_item (+30 nodes collapsed)
function_item (+56 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
attribute_item (+30 nodes collapsed)
function_item (+60 nodes collapsed)
function_item (+171 nodes collapsed)
function_item (+151 nodes collapsed)
function_item (+236 nodes collapsed)
function_item (+146 nodes collapsed)
function_item (+187 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+39 nodes collapsed)
function_item (+271 nodes collapsed)
attribute_item (+30 nodes collapsed)
function_item (+345 nodes collapsed)
function_item
function_modifiers
async "async"
fn "fn"
identifier "on_message"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
, ","
parameter
identifier "msg"
: ":"
type_identifier "Message"
) ")"
-> "->"
primitive_type "bool"
block
{ "{"
expression_statement
if_expression
if "if"
let_condition (+22 nodes collapsed)
block
{ "{"
expression_statement
await_expression
call_expression
field_expression
self "self"
. "."
field_identifier "handle_login_request_without_validation"
arguments
( "("
reference_expression
& "&"
identifier "lr"
) ")"
. "."
await "await"
; ";"
expression_statement
if_expression
if "if"
field_expression
self "self"
. "."
field_identifier "authorized"
block
{ "{"
expression_statement
return_expression
return "return"
boolean_literal
true "true"
; ";"
} "}"
expression_statement
match_expression
match "match"
field_expression
identifier "lr"
. "."
field_identifier "union"
match_block
{ "{"
match_arm (+100 nodes collapsed)
match_arm (+85 nodes collapsed)
match_arm (+355 nodes collapsed)
match_arm (+32 nodes collapsed)
} "}"
attribute_item (+30 nodes collapsed)
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "try_start_cm_ipc"
arguments
( "("
) ")"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "not"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
) ")"
] "]"
let_declaration
let "let"
identifier "err_msg"
= "="
call_expression
field_expression
string_literal
" "\""
" "\""
. "."
field_identifier "to_owned"
arguments
( "("
) ")"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
let_declaration (+27 nodes collapsed)
line_comment
// "//"
expression_statement (+48 nodes collapsed)
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "windows"
" "\""
) ")"
] "]"
let_declaration (+85 nodes collapsed)
attribute_item (+26 nodes collapsed)
let_declaration (+33 nodes collapsed)
attribute_item (+26 nodes collapsed)
let_declaration
let "let"
identifier "is_logon"
= "="
closure_expression
closure_parameters
| "|"
| "|"
call_expression
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "platform"
:: "::"
identifier "is_prelogin"
arguments
( "("
) ")"
; ";"
expression_statement (+738 nodes collapsed)
} "}"
else_clause
else "else"
if_expression
if "if"
let_condition (+22 nodes collapsed)
block (+367 nodes collapsed)
else_clause
else "else"
if_expression
if "if"
let_condition (+22 nodes collapsed)
block (+163 nodes collapsed)
else_clause
else "else"
if_expression
if "if"
let_condition (+22 nodes collapsed)
block (+327 nodes collapsed)
else_clause
else "else"
if_expression
if "if"
field_expression
self "self"
. "."
field_identifier "authorized"
block
{ "{"
expression_statement (+23 nodes collapsed)
expression_statement
match_expression
match "match"
field_expression
identifier "msg"
. "."
field_identifier "union"
match_block
{ "{"
match_arm (+307 nodes collapsed)
match_arm (+386 nodes collapsed)
match_arm (+41 nodes collapsed)
match_arm (+495 nodes collapsed)
match_arm (+544 nodes collapsed)
match_arm (+293 nodes collapsed)
match_arm (+106 nodes collapsed)
match_arm (+436 nodes collapsed)
match_arm (+2257 nodes collapsed)
match_arm (+309 nodes collapsed)
match_arm
match_pattern
tuple_struct_pattern
identifier "Some"
( "("
tuple_struct_pattern
scoped_identifier
scoped_identifier
identifier "message"
:: "::"
identifier "Union"
:: "::"
identifier "Misc"
( "("
identifier "misc"
) ")"
) ")"
=> "=>"
match_expression
match "match"
field_expression
identifier "misc"
. "."
field_identifier "union"
match_block
{ "{"
match_arm (+35 nodes collapsed)
match_arm (+201 nodes collapsed)
match_arm (+45 nodes collapsed)
match_arm (+35 nodes collapsed)
match_arm (+69 nodes collapsed)
match_arm (+37 nodes collapsed)
match_arm (+53 nodes collapsed)
match_arm (+50 nodes collapsed)
match_arm (+60 nodes collapsed)
match_arm (+81 nodes collapsed)
match_arm (+235 nodes collapsed)
match_arm (+141 nodes collapsed)
match_arm (+124 nodes collapsed)
match_arm (+157 nodes collapsed)
match_arm (+62 nodes collapsed)
match_arm (+78 nodes collapsed)
match_arm (+130 nodes collapsed)
match_arm (+57 nodes collapsed)
match_arm (+57 nodes collapsed)
match_arm
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
match_pattern
tuple_struct_pattern
identifier "Some"
( "("
tuple_struct_pattern
scoped_identifier
scoped_identifier
identifier "misc"
:: "::"
identifier "Union"
:: "::"
identifier "SelectedSid"
( "("
identifier "sid"
) ")"
) ")"
=> "=>"
block
{ "{"
expression_statement
if_expression
if "if"
let_condition
let "let"
tuple_struct_pattern
identifier "Some"
( "("
identifier "current_process_sid"
) ")"
= "="
call_expression
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "platform"
:: "::"
identifier "get_current_process_session_id"
arguments
( "("
) ")"
block
{ "{"
let_declaration
let "let"
identifier "sessions"
= "="
call_expression
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "platform"
:: "::"
identifier "get_available_sessions"
arguments
( "("
boolean_literal
false "false"
) ")"
; ";"
expression_statement (+140 nodes collapsed)
expression_statement
if_expression
if "if"
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "file_transfer"
. "."
field_identifier "is_some"
arguments
( "("
) ")"
block (+48 nodes collapsed)
else_clause
else "else"
if_expression
if "if"
field_expression
self "self"
. "."
field_identifier "view_camera"
block
{ "{"
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "try_sub_camera_displays"
arguments
( "("
) ")"
; ";"
} "}"
else_clause
else "else"
block
{ "{"
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "try_sub_monitor_services"
arguments
( "("
) ")"
; ";"
} "}"
} "}"
} "}"
match_arm (+76 nodes collapsed)
match_arm
match_pattern
_ "_"
=> "=>"
block
{ "{"
} "}"
} "}"
, ","
match_arm (+100 nodes collapsed)
match_arm (+118 nodes collapsed)
match_arm (+23 nodes collapsed)
match_arm (+106 nodes collapsed)
match_arm
match_pattern
_ "_"
=> "=>"
block
{ "{"
} "}"
} "}"
} "}"
boolean_literal
true "true"
} "}"
function_item (+208 nodes collapsed)
function_item (+358 nodes collapsed)
function_item (+124 nodes collapsed)
function_item (+247 nodes collapsed)
function_item (+37 nodes collapsed)
function_item (+271 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
function_item (+234 nodes collapsed)
function_item (+482 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
function_item (+362 nodes collapsed)
function_item (+69 nodes collapsed)
attribute_item (+30 nodes collapsed)
function_item (+447 nodes collapsed)
function_item (+284 nodes collapsed)
function_item (+159 nodes collapsed)
function_item
function_modifiers
async "async"
fn "fn"
identifier "update_options"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
, ","
parameter
identifier "o"
: ":"
reference_type
& "&"
type_identifier "OptionMessage"
) ")"
block
{ "{"
expression_statement
macro_invocation
scoped_identifier
identifier "log"
:: "::"
identifier "info"
! "!"
token_tree
( "("
string_literal
" "\""
string_content "Option update: {:?}"
" "\""
, ","
identifier "o"
) ")"
; ";"
expression_statement (+146 nodes collapsed)
expression_statement (+59 nodes collapsed)
expression_statement (+75 nodes collapsed)
expression_statement (+53 nodes collapsed)
attribute_item (+30 nodes collapsed)
expression_statement (+174 nodes collapsed)
attribute_item (+30 nodes collapsed)
expression_statement (+53 nodes collapsed)
expression_statement (+121 nodes collapsed)
expression_statement (+225 nodes collapsed)
attribute_item (+26 nodes collapsed)
expression_statement (+228 nodes collapsed)
expression_statement (+131 nodes collapsed)
expression_statement (+252 nodes collapsed)
line_comment
// "//"
expression_statement (+152 nodes collapsed)
expression_statement (+225 nodes collapsed)
} "}"
function_item (+542 nodes collapsed)
function_item (+109 nodes collapsed)
function_item (+183 nodes collapsed)
function_item (+326 nodes collapsed)
line_comment
// "//"
function_item (+166 nodes collapsed)
function_item (+65 nodes collapsed)
function_item (+65 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+40 nodes collapsed)
function_item (+40 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
function_item
fn "fn"
identifier "portable_check"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
) ")"
block
{ "{"
expression_statement
if_expression
if "if"
binary_expression
binary_expression
binary_expression
binary_expression
field_expression
field_expression
self "self"
. "."
field_identifier "portable"
. "."
field_identifier "is_installed"
|| "||"
call_expression any 2:1
field_expression any 5:1
field_expression any 5:1
self "self" any 3:1
. "." any 5:1
field_identifier "file_transfer" any 5:1
. "." any 5:1
field_identifier "is_some" any 5:1
arguments any 2:1
( "(" any 2:1
) ")" any 2:1
|| "||"
field_expression any 5:1
self "self" any 3:1
. "." any 5:1
field_identifier "view_camera" any 5:1
|| "||"
call_expression any 2:1
field_expression any 5:1
field_expression any 5:1
self "self" any 3:1
. "." any 5:1
field_identifier "port_forward_socket" any 5:1
. "." any 5:1
field_identifier "is_some" any 5:1
arguments any 2:1
( "(" any 2:1
) ")" any 2:1
|| "||"
unary_expression
! "!"
field_expression
self "self"
. "."
field_identifier "keyboard"
block
{ "{"
expression_statement
return_expression
return "return"
; ";"
} "}"
let_declaration
let "let"
identifier "running"
= "="
call_expression
scoped_identifier
identifier "portable_client"
:: "::"
identifier "running"
arguments
( "("
) ")"
; ";"
let_declaration
let "let"
identifier "show_elevation"
= "="
unary_expression
! "!"
identifier "running"
; ";"
expression_statement (+34 nodes collapsed)
expression_statement (+405 nodes collapsed)
} "}"
attribute_item (+30 nodes collapsed)
function_item (+78 nodes collapsed)
function_item (+120 nodes collapsed)
function_item (+52 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "hwcodec"
" "\""
) ")"
] "]"
function_item (+290 nodes collapsed)
attribute_item (+30 nodes collapsed)
function_item (+264 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+66 nodes collapsed)
function_item (+59 nodes collapsed)
function_item (+59 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
] "]"
function_item (+190 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
] "]"
function_item (+36 nodes collapsed)
attribute_item (+26 nodes collapsed)
function_item (+168 nodes collapsed)
attribute_item (+26 nodes collapsed)
function_item (+133 nodes collapsed)
} "}"
function_item (+68 nodes collapsed)
attribute_item (+30 nodes collapsed)
function_item (+1305 nodes collapsed)
line_comment
// "//"
function_item (+91 nodes collapsed)
enum_item (+23 nodes collapsed)
enum_item
visibility_modifier
pub "pub"
enum "enum"
type_identifier "FileAuditType"
enum_variant_list
{ "{"
enum_variant
identifier "RemoteSend"
= "="
integer_literal "0"
, ","
enum_variant
identifier "RemoteReceive"
= "="
integer_literal "1"
, ","
} "}"
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Serialize"
) ")"
] "]"
attribute_item
# "#"
[ "["
attribute
identifier "serde"
token_tree
( "("
identifier "rename_all"
= "="
string_literal
" "\""
string_content "camelCase"
" "\""
) ")"
] "]"
struct_item (+26 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Serialize"
) ")"
] "]"
attribute_item
# "#"
[ "["
attribute
identifier "serde"
token_tree
( "("
identifier "rename_all"
= "="
string_literal
" "\""
string_content "camelCase"
" "\""
) ")"
] "]"
struct_item (+21 nodes collapsed)
struct_item (+36 nodes collapsed)
impl_item (+896 nodes collapsed)
function_item (+403 nodes collapsed)
attribute_item (+26 nodes collapsed)
function_item (+117 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
struct_item (+41 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
impl_item (+75 nodes collapsed)
impl_item
impl "impl"
type_identifier "Drop"
for "for"
type_identifier "Connection"
declaration_list
{ "{"
function_item
fn "fn"
identifier "drop"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
) ")"
block
{ "{"
attribute_item (+30 nodes collapsed)
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "release_pressed_modifiers"
arguments
( "("
) ")"
; ";"
} "}"
} "}"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
struct_item (+61 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
impl_item (+307 nodes collapsed)
function_item (+72 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "macos"
" "\""
) ")"
] "]"
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Default"
) ")"
] "]"
struct_item
struct "struct"
type_identifier "Retina"
field_declaration_list
{ "{"
field_declaration
field_identifier "displays"
: ":"
generic_type
type_identifier "Vec"
type_arguments
< "<"
type_identifier "DisplayInfo"
> ">"
, ","
} "}"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "macos"
" "\""
) ")"
] "]"
impl_item (+604 nodes collapsed)
struct_item (+51 nodes collapsed)
mod_item (+1639 nodes collapsed)
mod_item (+274 nodes collapsed)

After

source_file
use_declaration
use "use"
scoped_use_list
super "super"
:: "::"
use_list
{ "{"
use_wildcard
identifier "input_service"
:: "::"
* "*"
, ","
use_wildcard
* "*"
} "}"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
] "]"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "clipboard"
:: "::"
identifier "try_empty_clipboard_files"
; ";"
attribute_item (+30 nodes collapsed)
use_declaration
use "use"
scoped_use_list
scoped_identifier
crate "crate"
:: "::"
identifier "clipboard"
:: "::"
use_list
{ "{"
identifier "update_clipboard"
, ","
identifier "ClipboardSide"
} "}"
; ";"
attribute_item (+33 nodes collapsed)
use_declaration
use "use"
use_wildcard
scoped_identifier
crate "crate"
:: "::"
identifier "clipboard_file"
:: "::"
* "*"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
) ")"
] "]"
use_declaration
use "use"
scoped_identifier
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "keyboard"
:: "::"
identifier "client"
:: "::"
identifier "map_key_to_control_key"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "platform"
:: "::"
identifier "linux_desktop_manager"
; ";"
attribute_item (+26 nodes collapsed)
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "platform"
:: "::"
identifier "WallPaperRemover"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
use_declaration
use "use"
use_as_clause
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "portable_service"
:: "::"
identifier "client"
as "as"
identifier "portable_client"
; ";"
use_declaration (+36 nodes collapsed)
attribute_item (+26 nodes collapsed)
use_declaration (+21 nodes collapsed)
use_declaration
use "use"
scoped_identifier
scoped_identifier
identifier "cidr_utils"
:: "::"
identifier "cidr"
:: "::"
identifier "IpCidr"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
use_declaration
use "use"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "hbb_common"
:: "::"
identifier "platform"
:: "::"
identifier "linux"
:: "::"
identifier "run_cmds"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
) ")"
] "]"
use_declaration
use "use"
scoped_identifier
scoped_identifier
identifier "hbb_common"
:: "::"
identifier "protobuf"
:: "::"
identifier "EnumOrUnknown"
; ";"
use_declaration (+134 nodes collapsed)
attribute_item (+26 nodes collapsed)
use_declaration
use "use"
scoped_use_list
scoped_identifier
identifier "scrap"
:: "::"
identifier "android"
:: "::"
use_list
{ "{"
identifier "call_main_service_key_event"
, ","
identifier "call_main_service_pointer_input"
} "}"
; ";"
use_declaration
use "use"
scoped_identifier
identifier "scrap"
:: "::"
identifier "camera"
; ";"
use_declaration
use "use"
scoped_identifier
identifier "serde_derive"
:: "::"
identifier "Serialize"
; ";"
use_declaration
use "use"
scoped_use_list
identifier "serde_json"
:: "::"
use_list
{ "{"
identifier "json"
, ","
scoped_identifier
identifier "value"
:: "::"
identifier "Value"
} "}"
; ";"
attribute_item (+30 nodes collapsed)
use_declaration
use "use"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "std"
:: "::"
identifier "sync"
:: "::"
identifier "atomic"
:: "::"
identifier "Ordering"
; ";"
use_declaration (+35 nodes collapsed)
attribute_item (+30 nodes collapsed)
use_declaration
use "use"
identifier "system_shutdown"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
use_declaration
use "use"
scoped_identifier
crate "crate"
:: "::"
identifier "virtual_display_manager"
; ";"
attribute_item (+23 nodes collapsed)
use_declaration
use "use"
scoped_identifier
scoped_identifier
identifier "std"
:: "::"
identifier "collections"
:: "::"
identifier "HashSet"
; ";"
type_item (+26 nodes collapsed)
macro_invocation (+188 nodes collapsed)
attribute_item (+26 nodes collapsed)
macro_invocation (+30 nodes collapsed)
static_item
visibility_modifier
pub "pub"
static "static"
identifier "CLICK_TIME"
: ":"
type_identifier "AtomicI64"
= "="
call_expression
scoped_identifier
identifier "AtomicI64"
:: "::"
identifier "new"
arguments
( "("
integer_literal "0"
) ")"
; ";"
attribute_item (+30 nodes collapsed)
static_item
visibility_modifier
pub "pub"
static "static"
identifier "MOUSE_MOVE_TIME"
: ":"
type_identifier "AtomicI64"
= "="
call_expression
scoped_identifier
identifier "AtomicI64"
:: "::"
identifier "new"
arguments
( "("
integer_literal "0"
) ")"
; ";"
attribute_item (+26 nodes collapsed)
attribute_item (+30 nodes collapsed)
macro_invocation (+116 nodes collapsed)
line_comment
// "//"
attribute_item (+26 nodes collapsed)
attribute_item (+30 nodes collapsed)
function_item (+212 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Clone"
, ","
identifier "Default"
) ")"
] "]"
struct_item (+33 nodes collapsed)
enum_item (+264 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Clone"
, ","
identifier "Debug"
, ","
identifier "Hash"
, ","
identifier "Eq"
, ","
identifier "PartialEq"
) ")"
] "]"
struct_item (+23 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Clone"
, ","
identifier "Debug"
) ")"
] "]"
struct_item (+31 nodes collapsed)
attribute_item (+30 nodes collapsed)
struct_item (+68 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Copy"
, ","
identifier "Clone"
, ","
identifier "Eq"
, ","
identifier "PartialEq"
) ")"
] "]"
enum_item
visibility_modifier
pub "pub"
enum "enum"
type_identifier "AuthConnType"
enum_variant_list
{ "{"
enum_variant
identifier "Remote"
, ","
enum_variant
identifier "FileTransfer"
, ","
enum_variant
identifier "PortForward"
, ","
enum_variant
identifier "ViewCamera"
, ","
enum_variant
identifier "Terminal"
, ","
} "}"
struct_item
visibility_modifier
pub "pub"
struct "struct"
type_identifier "Connection"
field_declaration_list
{ "{"
field_declaration
field_identifier "inner"
: ":"
type_identifier "ConnInner"
, ","
field_declaration
field_identifier "display_idx"
: ":"
primitive_type "usize"
, ","
field_declaration
field_identifier "stream"
: ":"
scoped_type_identifier
super "super"
:: "::"
type_identifier "Stream"
, ","
field_declaration
field_identifier "server"
: ":"
scoped_type_identifier
super "super"
:: "::"
type_identifier "ServerPtrWeak"
, ","
field_declaration
field_identifier "hash"
: ":"
type_identifier "Hash"
, ","
field_declaration
field_identifier "read_jobs"
: ":"
generic_type
type_identifier "Vec"
type_arguments
< "<"
scoped_type_identifier
identifier "fs"
:: "::"
type_identifier "TransferJob"
> ">"
, ","
field_declaration
field_identifier "timer"
: ":"
scoped_type_identifier
crate "crate"
:: "::"
type_identifier "RustDeskInterval"
, ","
field_declaration
field_identifier "file_timer"
: ":"
scoped_type_identifier
crate "crate"
:: "::"
type_identifier "RustDeskInterval"
, ","
field_declaration
field_identifier "file_transfer"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
tuple_type
( "("
type_identifier "String"
, ","
primitive_type "bool"
) ")"
> ">"
, ","
field_declaration
field_identifier "view_camera"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "terminal"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "port_forward_socket"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
generic_type
type_identifier "Framed"
type_arguments
< "<"
type_identifier "TcpStream"
, ","
type_identifier "BytesCodec"
> ">"
> ">"
, ","
field_declaration
field_identifier "port_forward_address"
: ":"
type_identifier "String"
, ","
field_declaration
field_identifier "tx_to_cm"
: ":"
generic_type
scoped_type_identifier
identifier "mpsc"
:: "::"
type_identifier "UnboundedSender"
type_arguments
< "<"
scoped_type_identifier
identifier "ipc"
:: "::"
type_identifier "Data"
> ">"
, ","
field_declaration
field_identifier "authorized"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "require_2fa"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
scoped_type_identifier
identifier "totp_rs"
:: "::"
type_identifier "TOTP"
> ">"
, ","
field_declaration
field_identifier "keyboard"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "clipboard"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "audio"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "file"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "restart"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "recording"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "block_input"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "last_test_delay"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
type_identifier "Instant"
> ">"
, ","
field_declaration
field_identifier "network_delay"
: ":"
primitive_type "u32"
, ","
field_declaration
field_identifier "lock_after_session_end"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "show_remote_cursor"
: ":"
primitive_type "bool"
, ","
line_comment
// "//"
field_declaration
field_identifier "ip"
: ":"
type_identifier "String"
, ","
line_comment
// "//"
field_declaration
field_identifier "disable_keyboard"
: ":"
primitive_type "bool"
, ","
line_comment
// "//"
field_declaration
field_identifier "disable_clipboard"
: ":"
primitive_type "bool"
, ","
line_comment
// "//"
field_declaration
field_identifier "disable_audio"
: ":"
primitive_type "bool"
, ","
line_comment
// "//"
attribute_item (+33 nodes collapsed)
field_declaration
field_identifier "enable_file_transfer"
: ":"
primitive_type "bool"
, ","
line_comment
// "//"
field_declaration
field_identifier "audio_sender"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
type_identifier "MediaSender"
> ">"
, ","
line_comment
// "//"
field_declaration
field_identifier "tx_input"
: ":"
generic_type
scoped_type_identifier
identifier "std_mpsc"
:: "::"
type_identifier "Sender"
type_arguments
< "<"
type_identifier "MessageInput"
> ">"
, ","
line_comment
// "//"
field_declaration
field_identifier "video_ack_required"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "server_audit_conn"
: ":"
type_identifier "String"
, ","
field_declaration
field_identifier "server_audit_file"
: ":"
type_identifier "String"
, ","
field_declaration
field_identifier "lr"
: ":"
type_identifier "LoginRequest"
, ","
field_declaration
field_identifier "session_last_recv_time"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
generic_type
type_identifier "Arc"
type_arguments
< "<"
generic_type
type_identifier "Mutex"
type_arguments
< "<"
type_identifier "Instant"
> ">"
> ">"
> ">"
, ","
field_declaration
field_identifier "chat_unanswered"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "file_transferred"
: ":"
primitive_type "bool"
, ","
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
field_declaration
field_identifier "portable"
: ":"
type_identifier "PortableState"
, ","
field_declaration
field_identifier "from_switch"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "voice_call_request_timestamp"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
type_identifier "NonZeroI64"
> ">"
, ","
field_declaration
field_identifier "voice_calling"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "options_in_login"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
type_identifier "OptionMessage"
> ">"
, ","
attribute_item (+23 nodes collapsed)
field_declaration
field_identifier "pressed_modifiers"
: ":"
generic_type
type_identifier "HashSet"
type_arguments
< "<"
scoped_type_identifier
identifier "rdev"
:: "::"
type_identifier "Key"
> ">"
, ","
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
field_declaration
field_identifier "linux_headless_handle"
: ":"
type_identifier "LinuxHeadlessHandle"
, ","
field_declaration
field_identifier "closed"
: ":"
primitive_type "bool"
, ","
attribute_item (+30 nodes collapsed)
field_declaration
field_identifier "start_cm_ipc_para"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
type_identifier "StartCmIpcPara"
> ">"
, ","
field_declaration
field_identifier "auto_disconnect_timer"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
tuple_type
( "("
type_identifier "Instant"
, ","
primitive_type "u64"
) ")"
> ">"
, ","
field_declaration
field_identifier "authed_conn_id"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
scoped_type_identifier
scoped_identifier
self "self"
:: "::"
identifier "raii"
:: "::"
type_identifier "AuthedConnID"
> ">"
, ","
field_declaration
field_identifier "file_remove_log_control"
: ":"
type_identifier "FileRemoveLogControl"
, ","
field_declaration
field_identifier "last_supported_encoding"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
type_identifier "SupportedEncoding"
> ">"
, ","
field_declaration
field_identifier "services_subed"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "delayed_read_dir"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
tuple_type
( "("
type_identifier "String"
, ","
primitive_type "bool"
) ")"
> ">"
, ","
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "macos"
" "\""
) ")"
] "]"
field_declaration
field_identifier "retina"
: ":"
type_identifier "Retina"
, ","
field_declaration
field_identifier "follow_remote_cursor"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "follow_remote_window"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "multi_ui_session"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "tx_from_authed"
: ":"
generic_type
scoped_type_identifier
identifier "mpsc"
:: "::"
type_identifier "UnboundedSender"
type_arguments
< "<"
scoped_type_identifier
identifier "ipc"
:: "::"
type_identifier "Data"
> ">"
, ","
field_declaration (+21 nodes collapsed)
, ","
line_comment
// "//"
line_comment
// "//"
field_declaration
field_identifier "tx_post_seq"
: ":"
generic_type
scoped_type_identifier
identifier "mpsc"
:: "::"
type_identifier "UnboundedSender"
type_arguments
< "<"
tuple_type
( "("
type_identifier "String"
, ","
type_identifier "Value"
) ")"
> ">"
, ","
field_declaration
field_identifier "terminal_service_id"
: ":"
type_identifier "String"
, ","
field_declaration
field_identifier "terminal_persistent"
: ":"
primitive_type "bool"
, ","
field_declaration
field_identifier "terminal_generic_service"
: ":"
generic_type
type_identifier "Option"
type_arguments
< "<"
generic_type
type_identifier "Box"
type_arguments
< "<"
type_identifier "GenericService"
> ">"
> ">"
, ","
} "}"
impl_item (+56 nodes collapsed)
impl_item (+246 nodes collapsed)
const_item
const "const"
identifier "TEST_DELAY_TIMEOUT"
: ":"
type_identifier "Duration"
= "="
call_expression
scoped_identifier
identifier "Duration"
:: "::"
identifier "from_secs"
arguments
( "("
integer_literal "1"
) ")"
; ";"
const_item
const "const"
identifier "SEC30"
: ":"
type_identifier "Duration"
= "="
call_expression
scoped_identifier
identifier "Duration"
:: "::"
identifier "from_secs"
arguments
( "("
integer_literal "30"
) ")"
; ";"
const_item
const "const"
identifier "H1"
: ":"
type_identifier "Duration"
= "="
call_expression
scoped_identifier
identifier "Duration"
:: "::"
identifier "from_secs"
arguments
( "("
integer_literal "3600"
) ")"
; ";"
const_item
const "const"
identifier "MILLI1"
: ":"
type_identifier "Duration"
= "="
call_expression
scoped_identifier
identifier "Duration"
:: "::"
identifier "from_millis"
arguments
( "("
integer_literal "1"
) ")"
; ";"
const_item
const "const"
identifier "SEND_TIMEOUT_VIDEO"
: ":"
primitive_type "u64"
= "="
integer_literal "12_000"
; ";"
const_item
const "const"
identifier "SEND_TIMEOUT_OTHER"
: ":"
primitive_type "u64"
= "="
binary_expression
identifier "SEND_TIMEOUT_VIDEO"
* "*"
integer_literal "10"
; ";"
const_item
const "const"
identifier "SESSION_TIMEOUT"
: ":"
type_identifier "Duration"
= "="
call_expression
scoped_identifier
identifier "Duration"
:: "::"
identifier "from_secs"
arguments
( "("
integer_literal "30"
) ")"
; ";"
impl_item
impl "impl"
type_identifier "Connection"
declaration_list
{ "{"
function_item
visibility_modifier
pub "pub"
function_modifiers
async "async"
fn "fn"
identifier "start"
parameters (+29 nodes collapsed)
block
{ "{"
let_declaration
let "let"
identifier "_raii_id"
= "="
call_expression
scoped_identifier
scoped_identifier
identifier "raii"
:: "::"
identifier "ConnectionID"
:: "::"
identifier "new"
arguments
( "("
identifier "id"
) ")"
; ";"
let_declaration (+45 nodes collapsed)
let_declaration (+29 nodes collapsed)
line_comment
// "//"
let_declaration
let "let"
identifier "tx_from_cm"
= "="
call_expression
field_expression
identifier "tx_from_cm_holder"
. "."
field_identifier "clone"
arguments
( "("
) ")"
; ";"
let_declaration (+27 nodes collapsed)
let_declaration (+36 nodes collapsed)
let_declaration (+36 nodes collapsed)
let_declaration
let "let"
tuple_pattern
( "("
identifier "tx_input"
, ","
identifier "_rx_input"
) ")"
= "="
call_expression
scoped_identifier
identifier "std_mpsc"
:: "::"
identifier "channel"
arguments
( "("
) ")"
; ";"
let_declaration (+29 nodes collapsed)
let_declaration
let "let"
mutable_specifier "mut"
identifier "hbbs_rx"
= "="
call_expression
scoped_identifier
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "hbbs_http"
:: "::"
identifier "sync"
:: "::"
identifier "signal_receiver"
arguments
( "("
) ")"
; ";"
attribute_item (+30 nodes collapsed)
let_declaration
let "let"
tuple_pattern
( "("
identifier "tx_cm_stream_ready"
, ","
identifier "_rx_cm_stream_ready"
) ")"
= "="
call_expression
scoped_identifier
identifier "mpsc"
:: "::"
identifier "channel"
arguments
( "("
integer_literal "1"
) ")"
; ";"
attribute_item (+30 nodes collapsed)
let_declaration
let "let"
tuple_pattern
( "("
identifier "_tx_desktop_ready"
, ","
identifier "rx_desktop_ready"
) ")"
= "="
call_expression
scoped_identifier
identifier "mpsc"
:: "::"
identifier "channel"
arguments
( "("
integer_literal "1"
) ")"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
let_declaration
let "let"
identifier "linux_headless_handle"
= "="
call_expression
scoped_identifier
identifier "LinuxHeadlessHandle"
:: "::"
identifier "new"
arguments
( "("
identifier "_rx_cm_stream_ready"
, ","
identifier "_tx_desktop_ready"
) ")"
; ";"
let_declaration
let "let"
tuple_pattern
( "("
identifier "tx_post_seq"
, ","
identifier "rx_post_seq"
) ")"
= "="
call_expression
scoped_identifier
identifier "mpsc"
:: "::"
identifier "unbounded_channel"
arguments
( "("
) ")"
; ";"
expression_statement (+30 nodes collapsed)
attribute_item (+30 nodes collapsed)
let_declaration
let "let"
identifier "tx_cloned"
= "="
call_expression
field_expression
identifier "tx"
. "."
field_identifier "clone"
arguments
( "("
) ")"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "conn"
= "="
struct_expression
type_identifier "Self"
field_initializer_list
{ "{"
field_initializer (+31 nodes collapsed)
, ","
field_initializer
field_identifier "require_2fa"
: ":"
call_expression
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "auth_2fa"
:: "::"
identifier "get_2fa"
arguments
( "("
identifier "None"
) ")"
, ","
field_initializer
field_identifier "display_idx"
: ":"
unary_expression
* "*"
scoped_identifier
identifier "display_service"
:: "::"
identifier "PRIMARY_DISPLAY_IDX"
, ","
shorthand_field_initializer
identifier "stream"
, ","
shorthand_field_initializer
identifier "server"
, ","
shorthand_field_initializer
identifier "hash"
, ","
field_initializer
field_identifier "read_jobs"
: ":"
call_expression
scoped_identifier
identifier "Vec"
:: "::"
identifier "new"
arguments
( "("
) ")"
, ","
field_initializer
field_identifier "timer"
: ":"
call_expression
scoped_identifier
crate "crate"
:: "::"
identifier "rustdesk_interval"
arguments
( "("
call_expression
scoped_identifier
identifier "time"
:: "::"
identifier "interval"
arguments
( "("
identifier "SEC30"
) ")"
) ")"
, ","
field_initializer
field_identifier "file_timer"
: ":"
call_expression
scoped_identifier
crate "crate"
:: "::"
identifier "rustdesk_interval"
arguments
( "("
call_expression
scoped_identifier
identifier "time"
:: "::"
identifier "interval"
arguments
( "("
identifier "SEC30"
) ")"
) ")"
, ","
field_initializer
field_identifier "file_transfer"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "view_camera"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "terminal"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "port_forward_socket"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "port_forward_address"
: ":"
call_expression
field_expression
string_literal
" "\""
" "\""
. "."
field_identifier "to_owned"
arguments
( "("
) ")"
, ","
shorthand_field_initializer
identifier "tx_to_cm"
, ","
field_initializer
field_identifier "authorized"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "keyboard"
: ":"
call_expression
scoped_identifier
identifier "Connection"
:: "::"
identifier "permission"
arguments
( "("
string_literal
" "\""
string_content "enable-keyboard"
" "\""
) ")"
, ","
field_initializer
field_identifier "clipboard"
: ":"
call_expression
scoped_identifier
identifier "Connection"
:: "::"
identifier "permission"
arguments
( "("
string_literal
" "\""
string_content "enable-clipboard"
" "\""
) ")"
, ","
field_initializer
field_identifier "audio"
: ":"
call_expression
scoped_identifier
identifier "Connection"
:: "::"
identifier "permission"
arguments
( "("
string_literal
" "\""
string_content "enable-audio"
" "\""
) ")"
, ","
line_comment
// "//"
field_initializer
field_identifier "file"
: ":"
call_expression
scoped_identifier
identifier "Connection"
:: "::"
identifier "permission"
arguments
( "("
scoped_identifier
identifier "keys"
:: "::"
identifier "OPTION_ENABLE_FILE_TRANSFER"
) ")"
, ","
field_initializer
field_identifier "restart"
: ":"
call_expression
scoped_identifier
identifier "Connection"
:: "::"
identifier "permission"
arguments
( "("
string_literal
" "\""
string_content "enable-remote-restart"
" "\""
) ")"
, ","
field_initializer
field_identifier "recording"
: ":"
call_expression
scoped_identifier
identifier "Connection"
:: "::"
identifier "permission"
arguments
( "("
string_literal
" "\""
string_content "enable-record-session"
" "\""
) ")"
, ","
field_initializer
field_identifier "block_input"
: ":"
call_expression
scoped_identifier
identifier "Connection"
:: "::"
identifier "permission"
arguments
( "("
string_literal
" "\""
string_content "enable-block-input"
" "\""
) ")"
, ","
field_initializer
field_identifier "last_test_delay"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "network_delay"
: ":"
integer_literal "0"
, ","
field_initializer
field_identifier "lock_after_session_end"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "show_remote_cursor"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "follow_remote_cursor"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "follow_remote_window"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "multi_ui_session"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "ip"
: ":"
call_expression
field_expression
string_literal
" "\""
" "\""
. "."
field_identifier "to_owned"
arguments
( "("
) ")"
, ","
field_initializer
field_identifier "disable_audio"
: ":"
boolean_literal
false "false"
, ","
field_initializer (+38 nodes collapsed)
, ","
field_initializer
field_identifier "disable_clipboard"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "disable_keyboard"
: ":"
boolean_literal
false "false"
, ","
shorthand_field_initializer
identifier "tx_input"
, ","
field_initializer
field_identifier "video_ack_required"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "server_audit_conn"
: ":"
call_expression
field_expression
string_literal
" "\""
" "\""
. "."
field_identifier "to_owned"
arguments
( "("
) ")"
, ","
field_initializer
field_identifier "server_audit_file"
: ":"
call_expression
field_expression
string_literal
" "\""
" "\""
. "."
field_identifier "to_owned"
arguments
( "("
) ")"
, ","
field_initializer
field_identifier "lr"
: ":"
call_expression
scoped_identifier
identifier "Default"
:: "::"
identifier "default"
arguments
( "("
) ")"
, ","
field_initializer
field_identifier "session_last_recv_time"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "chat_unanswered"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "file_transferred"
: ":"
boolean_literal
false "false"
, ","
field_initializer (+21 nodes collapsed)
, ","
field_initializer
field_identifier "from_switch"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "audio_sender"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "voice_call_request_timestamp"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "voice_calling"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "options_in_login"
: ":"
identifier "None"
, ","
field_initializer (+34 nodes collapsed)
, ","
shorthand_field_initializer
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
identifier "linux_headless_handle"
, ","
field_initializer
field_identifier "closed"
: ":"
boolean_literal
false "false"
, ","
field_initializer (+55 nodes collapsed)
, ","
field_initializer
field_identifier "auto_disconnect_timer"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "authed_conn_id"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "file_remove_log_control"
: ":"
call_expression
scoped_identifier
identifier "FileRemoveLogControl"
:: "::"
identifier "new"
arguments
( "("
identifier "id"
) ")"
, ","
field_initializer
field_identifier "last_supported_encoding"
: ":"
identifier "None"
, ","
field_initializer
field_identifier "services_subed"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "delayed_read_dir"
: ":"
identifier "None"
, ","
field_initializer (+26 nodes collapsed)
, ","
shorthand_field_initializer
identifier "tx_from_authed"
, ","
field_initializer
field_identifier "printer_data"
: ":"
call_expression
scoped_identifier
identifier "Vec"
:: "::"
identifier "new"
arguments
( "("
) ")"
, ","
shorthand_field_initializer
identifier "tx_post_seq"
, ","
field_initializer
field_identifier "terminal_service_id"
: ":"
call_expression
field_expression
string_literal
" "\""
" "\""
. "."
field_identifier "to_owned"
arguments
( "("
) ")"
, ","
field_initializer
field_identifier "terminal_persistent"
: ":"
boolean_literal
false "false"
, ","
field_initializer
field_identifier "terminal_generic_service"
: ":"
identifier "None"
, ","
} "}"
; ";"
let_declaration
let "let"
identifier "addr"
= "="
call_expression
scoped_identifier
identifier "hbb_common"
:: "::"
identifier "try_into_v4"
arguments
( "("
identifier "addr"
) ")"
; ";"
expression_statement (+47 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
) ")"
] "]"
expression_statement
call_expression
identifier "start_channel"
arguments
( "("
identifier "rx_to_cm"
, ","
identifier "tx_from_cm"
) ")"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
) ")"
] "]"
expression_statement (+22 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "not"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
) ")"
) ")"
] "]"
expression_statement (+32 nodes collapsed)
expression_statement (+32 nodes collapsed)
expression_statement (+32 nodes collapsed)
expression_statement (+32 nodes collapsed)
expression_statement (+32 nodes collapsed)
expression_statement (+32 nodes collapsed)
expression_statement (+32 nodes collapsed)
let_declaration (+32 nodes collapsed)
let_declaration
let "let"
mutable_specifier "mut"
identifier "last_recv_time"
= "="
call_expression
scoped_identifier
identifier "Instant"
:: "::"
identifier "now"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
field_expression
field_expression
identifier "conn"
. "."
field_identifier "stream"
. "."
field_identifier "set_send_timeout"
arguments
( "("
if_expression
if "if"
binary_expression any 1:2
binary_expression any 1:2
call_expression
field_expression
field_expression
identifier "conn"
. "."
field_identifier "file_transfer"
. "."
field_identifier "is_some"
arguments
( "("
) ")"
|| "||"
call_expression
field_expression
field_expression
identifier "conn"
. "."
field_identifier "port_forward_socket"
. "."
field_identifier "is_some"
arguments
( "("
) ")"
|| "||"
field_expression
identifier "conn"
. "."
field_identifier "terminal"
block
{ "{"
identifier "SEND_TIMEOUT_OTHER"
} "}"
else_clause
else "else"
block
{ "{"
identifier "SEND_TIMEOUT_VIDEO"
} "}"
, ","
) ")"
; ";"
attribute_item (+30 nodes collapsed)
expression_statement (+29 nodes collapsed)
let_declaration (+31 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
] "]"
let_declaration
let "let"
identifier "rx_clip_holder"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "rx_clip"
; ";"
let_declaration
let "let"
identifier "_tx_clip"
: ":"
generic_type
scoped_type_identifier
identifier "mpsc"
:: "::"
type_identifier "UnboundedSender"
type_arguments
< "<"
primitive_type "i32"
> ">"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
] "]"
expression_statement (+87 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "not"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
) ")"
] "]"
expression_statement (+28 nodes collapsed)
expression_statement (+3010 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
] "]"
expression_statement
block
{ "{"
expression_statement
call_expression
field_expression
identifier "conn"
. "."
field_identifier "try_empty_file_clipboard"
arguments
( "("
) ")"
; ";"
} "}"
expression_statement (+46 nodes collapsed)
attribute_item (+26 nodes collapsed)
attribute_item (+30 nodes collapsed)
expression_statement (+43 nodes collapsed)
expression_statement
call_expression
scoped_identifier
identifier "video_service"
:: "::"
identifier "notify_video_frame_fetched"
arguments
( "("
identifier "id"
, ","
identifier "None"
) ")"
; ";"
expression_statement
if_expression
if "if"
field_expression
identifier "conn"
. "."
field_identifier "authorized"
block
{ "{"
expression_statement
call_expression
scoped_identifier
identifier "password"
:: "::"
identifier "update_temporary_password"
arguments
( "("
) ")"
; ";"
} "}"
expression_statement (+88 nodes collapsed)
expression_statement (+29 nodes collapsed)
expression_statement (+99 nodes collapsed)
expression_statement
await_expression
call_expression
field_expression
identifier "conn"
. "."
field_identifier "on_close"
arguments
( "("
string_literal
" "\""
string_content "End"
" "\""
, ","
boolean_literal
true "true"
) ")"
. "."
await "await"
; ";"
expression_statement
macro_invocation
scoped_identifier
identifier "log"
:: "::"
identifier "info"
! "!"
token_tree
( "("
string_literal
" "\""
string_content "#{} connection loop exited"
" "\""
, ","
identifier "id"
) ")"
; ";"
} "}"
attribute_item (+30 nodes collapsed)
function_item (+864 nodes collapsed)
function_item (+93 nodes collapsed)
function_item (+449 nodes collapsed)
function_item (+118 nodes collapsed)
function_item (+57 nodes collapsed)
function_item (+308 nodes collapsed)
function_item (+318 nodes collapsed)
function_item (+121 nodes collapsed)
function_item (+183 nodes collapsed)
function_item (+118 nodes collapsed)
function_item (+424 nodes collapsed)
function_item (+244 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+52 nodes collapsed)
function_item
function_modifiers
async "async"
fn "fn"
identifier "send_logon_response"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
) ")"
block
{ "{"
expression_statement
if_expression
if "if"
field_expression
self "self"
. "."
field_identifier "authorized"
block
{ "{"
expression_statement
return_expression
return "return"
; ";"
} "}"
expression_statement (+300 nodes collapsed)
expression_statement
assignment_expression
field_expression
self "self"
. "."
field_identifier "authorized"
= "="
boolean_literal
true "true"
; ";"
let_declaration
let "let"
tuple_pattern
( "("
identifier "conn_type"
, ","
identifier "auth_conn_type"
) ")"
= "="
if_expression
if "if"
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "file_transfer"
. "."
field_identifier "is_some"
arguments
( "("
) ")"
block
{ "{"
tuple_expression
( "("
integer_literal "1"
, ","
scoped_identifier
identifier "AuthConnType"
:: "::"
identifier "FileTransfer"
) ")"
} "}"
else_clause
else "else"
if_expression
if "if"
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "port_forward_socket"
. "."
field_identifier "is_some"
arguments
( "("
) ")"
block
{ "{"
tuple_expression
( "("
integer_literal "2"
, ","
scoped_identifier
identifier "AuthConnType"
:: "::"
identifier "PortForward"
) ")"
} "}"
else_clause
else "else"
if_expression
if "if"
field_expression
self "self"
. "."
field_identifier "view_camera"
block
{ "{"
tuple_expression
( "("
integer_literal "3"
, ","
scoped_identifier
identifier "AuthConnType"
:: "::"
identifier "ViewCamera"
) ")"
} "}"
else_clause any 1:2
else "else" any 1:2
if_expression
if "if"
field_expression
self "self"
. "."
field_identifier "terminal"
block
{ "{"
tuple_expression
( "("
integer_literal "4"
, ","
scoped_identifier
identifier "AuthConnType"
:: "::"
identifier "Terminal"
) ")"
} "}"
else_clause any 1:2
else "else" any 1:2
block
{ "{"
tuple_expression
( "("
integer_literal "0"
, ","
scoped_identifier
identifier "AuthConnType"
:: "::"
identifier "Remote"
) ")"
} "}"
; ";"
expression_statement (+74 nodes collapsed)
expression_statement (+63 nodes collapsed)
expression_statement (+51 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "allow"
token_tree
( "("
identifier "unused_mut"
) ")"
] "]"
let_declaration
let "let"
mutable_specifier "mut"
identifier "username"
= "="
call_expression
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "platform"
:: "::"
identifier "get_active_username"
arguments
( "("
) ")"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "res"
= "="
call_expression
scoped_identifier
identifier "LoginResponse"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
let_declaration (+45 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "not"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
) ")"
) ")"
] "]"
expression_statement (+49 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
) ")"
] "]"
expression_statement (+53 nodes collapsed)
attribute_item (+30 nodes collapsed)
let_declaration
let "let"
identifier "platform_additions"
= "="
call_expression
scoped_identifier
scoped_identifier
identifier "serde_json"
:: "::"
identifier "Map"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
attribute_item (+44 nodes collapsed)
let_declaration
let "let"
mutable_specifier "mut"
identifier "platform_additions"
= "="
call_expression
scoped_identifier
scoped_identifier
identifier "serde_json"
:: "::"
identifier "Map"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
expression_statement (+127 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "windows"
" "\""
) ")"
] "]"
expression_statement (+111 nodes collapsed)
attribute_item (+26 nodes collapsed)
expression_statement (+231 nodes collapsed)
attribute_item (+26 nodes collapsed)
expression_statement (+34 nodes collapsed)
attribute_item (+33 nodes collapsed)
expression_statement (+52 nodes collapsed)
expression_statement (+71 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
expression_statement
if_expression
if "if"
call_expression any 2:1
field_expression any 5:1
self "self" any 3:1
. "." any 5:1
field_identifier "is_remote" any 5:1
arguments any 2:1
( "(" any 2:1
) ")" any 2:1
block (+205 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "allow"
token_tree
( "("
identifier "unused_mut"
) ")"
] "]"
let_declaration
let "let"
mutable_specifier "mut"
identifier "sas_enabled"
= "="
boolean_literal
false "false"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
expression_statement (+24 nodes collapsed)
attribute_item (+30 nodes collapsed)
expression_statement (+51 nodes collapsed)
attribute_item (+26 nodes collapsed)
attribute_item (+30 nodes collapsed)
expression_statement (+50 nodes collapsed)
expression_statement
assignment_expression
field_expression
identifier "pi"
. "."
field_identifier "username"
= "="
identifier "username"
; ";"
expression_statement
assignment_expression
field_expression
identifier "pi"
. "."
field_identifier "sas_enabled"
= "="
identifier "sas_enabled"
; ";"
expression_statement
assignment_expression
field_expression
identifier "pi"
. "."
field_identifier "features"
= "="
call_expression
field_expression
call_expression
identifier "Some"
arguments
( "("
struct_expression
type_identifier "Features"
field_initializer_list
{ "{"
field_initializer
field_identifier "privacy_mode"
: ":"
call_expression
scoped_identifier
identifier "privacy_mode"
:: "::"
identifier "is_privacy_mode_supported"
arguments
( "("
) ")"
, ","
field_initializer
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "not"
token_tree
( "("
identifier "any"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
, ","
identifier "target_os"
= "="
string_literal
" "\""
string_content "ios"
" "\""
) ")"
) ")"
) ")"
] "]"
field_identifier "terminal"
: ":"
boolean_literal
true "true"
, ","
line_comment
// "//"
base_field_initializer
.. ".."
call_expression
scoped_identifier
identifier "Default"
:: "::"
identifier "default"
arguments
( "("
) ")"
} "}"
) ")"
. "."
field_identifier "into"
arguments
( "("
) ")"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "sub_service"
= "="
boolean_literal
false "false"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "allow"
token_tree
( "("
identifier "unused_mut"
) ")"
] "]"
let_declaration
let "let"
mutable_specifier "mut"
identifier "wait_session_id_confirm"
= "="
boolean_literal
false "false"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "handle_windows_specific_session"
arguments
( "("
reference_expression
& "&"
mutable_specifier "mut"
identifier "pi"
, ","
reference_expression
& "&"
mutable_specifier "mut"
identifier "wait_session_id_confirm"
) ")"
; ";"
expression_statement
if_expression
if "if"
binary_expression
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "file_transfer"
. "."
field_identifier "is_some"
arguments
( "("
) ")"
|| "||"
field_expression
self "self"
. "."
field_identifier "terminal"
block
{ "{"
expression_statement
call_expression
field_expression
identifier "res"
. "."
field_identifier "set_peer_info"
arguments
( "("
identifier "pi"
) ")"
; ";"
} "}"
else_clause (+734 nodes collapsed)
let_declaration
let "let"
mutable_specifier "mut"
identifier "msg_out"
= "="
call_expression
scoped_identifier
identifier "Message"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
field_expression
identifier "msg_out"
. "."
field_identifier "set_login_response"
arguments
( "("
identifier "res"
) ")"
; ";"
expression_statement
await_expression
call_expression
field_expression
self "self"
. "."
field_identifier "send"
arguments
( "("
identifier "msg_out"
) ")"
. "."
await "await"
; ";"
expression_statement (+41 nodes collapsed)
expression_statement
if_expression
if "if"
let_condition (+24 nodes collapsed)
block (+113 nodes collapsed)
else_clause any 1:2
else "else" any 1:2
if_expression
if "if"
field_expression
self "self"
. "."
field_identifier "terminal"
block
{ "{"
expression_statement
assignment_expression
field_expression
self "self"
. "."
field_identifier "keyboard"
= "="
boolean_literal
false "false"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "not"
token_tree
( "("
identifier "any"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
, ","
identifier "target_os"
= "="
string_literal
" "\""
string_content "ios"
" "\""
) ")"
) ")"
) ")"
] "]"
expression_statement
await_expression
call_expression
field_expression
self "self"
. "."
field_identifier "init_terminal_service"
arguments
( "("
) ")"
. "."
await "await"
; ";"
} "}"
else_clause any 1:2
else "else" any 1:2
if_expression (+85 nodes collapsed)
} "}"
function_item (+90 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item
fn "fn"
identifier "is_remote"
parameters
( "("
self_parameter
& "&"
self "self"
) ")"
-> "->"
primitive_type "bool"
block
{ "{"
binary_expression
binary_expression
binary_expression
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "file_transfer"
. "."
field_identifier "is_none"
arguments
( "("
) ")"
&& "&&"
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "port_forward_socket"
. "."
field_identifier "is_none"
arguments
( "("
) ")"
&& "&&"
unary_expression
! "!"
field_expression
self "self"
. "."
field_identifier "view_camera"
&& "&&"
unary_expression
! "!"
field_expression
self "self"
. "."
field_identifier "terminal"
} "}"
function_item
fn "fn"
identifier "try_sub_monitor_services"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
) ")"
block
{ "{"
let_declaration
let "let"
identifier "is_remote"
= "="
call_expression any 2:1
field_expression any 5:1
self "self" any 3:1
. "." any 5:1
field_identifier "is_remote" any 5:1
arguments any 2:1
( "(" any 2:1
) ")" any 2:1
; ";"
expression_statement (+371 nodes collapsed)
} "}"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
function_item (+238 nodes collapsed)
function_item (+191 nodes collapsed)
function_item (+26 nodes collapsed)
function_item (+26 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+52 nodes collapsed)
function_item (+26 nodes collapsed)
attribute_item (+26 nodes collapsed)
function_item (+24 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
] "]"
function_item (+52 nodes collapsed)
function_item
fn "fn"
identifier "try_start_cm"
parameters (+22 nodes collapsed)
block
{ "{"
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "send_to_cm"
arguments
( "("
struct_expression
scoped_type_identifier
scoped_identifier
identifier "ipc"
:: "::"
identifier "Data"
:: "::"
type_identifier "Login"
field_initializer_list
{ "{"
field_initializer
field_identifier "id"
: ":"
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "inner"
. "."
field_identifier "id"
arguments
( "("
) ")"
, ","
field_initializer
field_identifier "is_file_transfer"
: ":"
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "file_transfer"
. "."
field_identifier "is_some"
arguments
( "("
) ")"
, ","
field_initializer
field_identifier "is_view_camera"
: ":"
field_expression
self "self"
. "."
field_identifier "view_camera"
, ","
field_initializer
field_identifier "is_terminal"
: ":"
field_expression
self "self"
. "."
field_identifier "terminal"
, ","
field_initializer
field_identifier "port_forward"
: ":"
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "port_forward_address"
. "."
field_identifier "clone"
arguments
( "("
) ")"
, ","
shorthand_field_initializer
identifier "peer_id"
, ","
shorthand_field_initializer
identifier "name"
, ","
shorthand_field_initializer
identifier "authorized"
, ","
field_initializer
field_identifier "keyboard"
: ":"
field_expression
self "self"
. "."
field_identifier "keyboard"
, ","
field_initializer
field_identifier "clipboard"
: ":"
field_expression
self "self"
. "."
field_identifier "clipboard"
, ","
field_initializer
field_identifier "audio"
: ":"
field_expression
self "self"
. "."
field_identifier "audio"
, ","
field_initializer
field_identifier "file"
: ":"
field_expression
self "self"
. "."
field_identifier "file"
, ","
field_initializer
field_identifier "file_transfer_enabled"
: ":"
field_expression
self "self"
. "."
field_identifier "file"
, ","
field_initializer
field_identifier "restart"
: ":"
field_expression
self "self"
. "."
field_identifier "restart"
, ","
field_initializer
field_identifier "recording"
: ":"
field_expression
self "self"
. "."
field_identifier "recording"
, ","
field_initializer
field_identifier "block_input"
: ":"
field_expression
self "self"
. "."
field_identifier "block_input"
, ","
field_initializer
field_identifier "from_switch"
: ":"
field_expression
self "self"
. "."
field_identifier "from_switch"
, ","
} "}"
) ")"
; ";"
} "}"
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+42 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+43 nodes collapsed)
function_item (+144 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+154 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
attribute_item (+30 nodes collapsed)
function_item (+56 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
attribute_item (+30 nodes collapsed)
function_item (+56 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
attribute_item (+30 nodes collapsed)
function_item (+60 nodes collapsed)
function_item (+171 nodes collapsed)
function_item (+151 nodes collapsed)
function_item (+236 nodes collapsed)
function_item (+146 nodes collapsed)
function_item (+187 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+39 nodes collapsed)
function_item (+271 nodes collapsed)
attribute_item (+30 nodes collapsed)
function_item (+345 nodes collapsed)
function_item
function_modifiers
async "async"
fn "fn"
identifier "on_message"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
, ","
parameter
identifier "msg"
: ":"
type_identifier "Message"
) ")"
-> "->"
primitive_type "bool"
block
{ "{"
expression_statement
if_expression
if "if"
let_condition (+22 nodes collapsed)
block
{ "{"
expression_statement
await_expression
call_expression
field_expression
self "self"
. "."
field_identifier "handle_login_request_without_validation"
arguments
( "("
reference_expression
& "&"
identifier "lr"
) ")"
. "."
await "await"
; ";"
expression_statement
if_expression
if "if"
field_expression
self "self"
. "."
field_identifier "authorized"
block
{ "{"
expression_statement
return_expression
return "return"
boolean_literal
true "true"
; ";"
} "}"
expression_statement
match_expression
match "match"
field_expression
identifier "lr"
. "."
field_identifier "union"
match_block
{ "{"
match_arm (+100 nodes collapsed)
match_arm (+85 nodes collapsed)
match_arm
match_pattern
tuple_struct_pattern
identifier "Some"
( "("
tuple_struct_pattern
scoped_identifier
scoped_identifier
identifier "login_request"
:: "::"
identifier "Union"
:: "::"
identifier "Terminal"
( "("
identifier "terminal"
) ")"
) ")"
=> "=>"
block
{ "{"
expression_statement
if_expression
if "if"
unary_expression
! "!"
call_expression
scoped_identifier
identifier "Connection"
:: "::"
identifier "permission"
arguments
( "("
scoped_identifier
identifier "keys"
:: "::"
identifier "OPTION_ENABLE_TERMINAL"
) ")"
block
{ "{"
expression_statement
await_expression
call_expression
field_expression
self "self"
. "."
field_identifier "send_login_error"
arguments
( "("
string_literal
" "\""
string_content "No permission of terminal"
" "\""
) ")"
. "."
await "await"
; ";"
expression_statement
await_expression
call_expression
identifier "sleep"
arguments
( "("
float_literal "1."
) ")"
. "."
await "await"
; ";"
expression_statement
return_expression
return "return"
boolean_literal
false "false"
; ";"
} "}"
expression_statement
assignment_expression
field_expression
self "self"
. "."
field_identifier "terminal"
= "="
boolean_literal
true "true"
; ";"
expression_statement
if_expression
if "if"
let_condition
let "let"
tuple_struct_pattern
identifier "Some"
( "("
identifier "o"
) ")"
= "="
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "options_in_login"
. "."
field_identifier "as_ref"
arguments
( "("
) ")"
block
{ "{"
expression_statement
assignment_expression
field_expression
self "self"
. "."
field_identifier "terminal_persistent"
= "="
binary_expression
call_expression
field_expression
field_expression
identifier "o"
. "."
field_identifier "terminal_persistent"
. "."
field_identifier "enum_value"
arguments
( "("
) ")"
== "=="
call_expression
identifier "Ok"
arguments
( "("
scoped_identifier
identifier "BoolOption"
:: "::"
identifier "Yes"
) ")"
; ";"
} "}"
expression_statement
assignment_expression
field_expression
self "self"
. "."
field_identifier "terminal_service_id"
= "="
field_expression
identifier "terminal"
. "."
field_identifier "service_id"
; ";"
} "}"
match_arm (+355 nodes collapsed)
match_arm (+32 nodes collapsed)
} "}"
attribute_item (+30 nodes collapsed)
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "try_start_cm_ipc"
arguments
( "("
) ")"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "not"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
) ")"
] "]"
let_declaration
let "let"
identifier "err_msg"
= "="
call_expression
field_expression
string_literal
" "\""
" "\""
. "."
field_identifier "to_owned"
arguments
( "("
) ")"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
let_declaration (+27 nodes collapsed)
line_comment
// "//"
expression_statement (+48 nodes collapsed)
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "windows"
" "\""
) ")"
] "]"
let_declaration (+85 nodes collapsed)
attribute_item (+26 nodes collapsed)
let_declaration (+33 nodes collapsed)
attribute_item (+26 nodes collapsed)
let_declaration
let "let"
identifier "is_logon"
= "="
closure_expression
closure_parameters
| "|"
| "|"
call_expression
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "platform"
:: "::"
identifier "is_prelogin"
arguments
( "("
) ")"
; ";"
expression_statement (+738 nodes collapsed)
} "}"
else_clause
else "else"
if_expression
if "if"
let_condition (+22 nodes collapsed)
block (+367 nodes collapsed)
else_clause
else "else"
if_expression
if "if"
let_condition (+22 nodes collapsed)
block (+163 nodes collapsed)
else_clause
else "else"
if_expression
if "if"
let_condition (+22 nodes collapsed)
block (+327 nodes collapsed)
else_clause
else "else"
if_expression
if "if"
field_expression
self "self"
. "."
field_identifier "authorized"
block
{ "{"
expression_statement (+23 nodes collapsed)
expression_statement
match_expression
match "match"
field_expression
identifier "msg"
. "."
field_identifier "union"
match_block
{ "{"
match_arm (+307 nodes collapsed)
match_arm (+386 nodes collapsed)
match_arm (+41 nodes collapsed)
match_arm (+495 nodes collapsed)
match_arm (+544 nodes collapsed)
match_arm (+293 nodes collapsed)
match_arm (+106 nodes collapsed)
match_arm (+436 nodes collapsed)
match_arm (+2257 nodes collapsed)
match_arm (+309 nodes collapsed)
match_arm
match_pattern
tuple_struct_pattern
identifier "Some"
( "("
tuple_struct_pattern
scoped_identifier
scoped_identifier
identifier "message"
:: "::"
identifier "Union"
:: "::"
identifier "Misc"
( "("
identifier "misc"
) ")"
) ")"
=> "=>"
match_expression
match "match"
field_expression
identifier "misc"
. "."
field_identifier "union"
match_block
{ "{"
match_arm (+35 nodes collapsed)
match_arm (+201 nodes collapsed)
match_arm (+45 nodes collapsed)
match_arm (+35 nodes collapsed)
match_arm (+69 nodes collapsed)
match_arm (+37 nodes collapsed)
match_arm (+53 nodes collapsed)
match_arm (+50 nodes collapsed)
match_arm (+60 nodes collapsed)
match_arm (+81 nodes collapsed)
match_arm (+235 nodes collapsed)
match_arm (+141 nodes collapsed)
match_arm (+124 nodes collapsed)
match_arm (+157 nodes collapsed)
match_arm (+62 nodes collapsed)
match_arm (+78 nodes collapsed)
match_arm (+130 nodes collapsed)
match_arm (+57 nodes collapsed)
match_arm (+57 nodes collapsed)
match_arm
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
match_pattern
tuple_struct_pattern
identifier "Some"
( "("
tuple_struct_pattern
scoped_identifier
scoped_identifier
identifier "misc"
:: "::"
identifier "Union"
:: "::"
identifier "SelectedSid"
( "("
identifier "sid"
) ")"
) ")"
=> "=>"
block
{ "{"
expression_statement
if_expression
if "if"
let_condition
let "let"
tuple_struct_pattern
identifier "Some"
( "("
identifier "current_process_sid"
) ")"
= "="
call_expression
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "platform"
:: "::"
identifier "get_current_process_session_id"
arguments
( "("
) ")"
block
{ "{"
let_declaration
let "let"
identifier "sessions"
= "="
call_expression
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "platform"
:: "::"
identifier "get_available_sessions"
arguments
( "("
boolean_literal
false "false"
) ")"
; ";"
expression_statement (+140 nodes collapsed)
expression_statement
if_expression
if "if"
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "file_transfer"
. "."
field_identifier "is_some"
arguments
( "("
) ")"
block (+48 nodes collapsed)
else_clause
else "else"
if_expression
if "if"
field_expression
self "self"
. "."
field_identifier "view_camera"
block
{ "{"
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "try_sub_camera_displays"
arguments
( "("
) ")"
; ";"
} "}"
else_clause
else "else"
if_expression
if "if"
unary_expression
! "!"
field_expression
self "self"
. "."
field_identifier "terminal"
block
{ "{"
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "try_sub_monitor_services"
arguments
( "("
) ")"
; ";"
} "}"
} "}"
} "}"
match_arm (+76 nodes collapsed)
match_arm
match_pattern
_ "_"
=> "=>"
block
{ "{"
} "}"
} "}"
, ","
match_arm (+100 nodes collapsed)
match_arm (+118 nodes collapsed)
match_arm (+23 nodes collapsed)
match_arm (+106 nodes collapsed)
match_arm
match_pattern
tuple_struct_pattern
identifier "Some"
( "("
tuple_struct_pattern
scoped_identifier
scoped_identifier
identifier "message"
:: "::"
identifier "Union"
:: "::"
identifier "TerminalAction"
( "("
identifier "action"
) ")"
) ")"
=> "=>"
block
{ "{"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "not"
token_tree
( "("
identifier "any"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
, ","
identifier "target_os"
= "="
string_literal
" "\""
string_content "ios"
" "\""
) ")"
) ")"
) ")"
] "]"
expression_statement
macro_invocation
identifier "allow_err"
! "!"
token_tree
( "("
self "self"
. "."
identifier "handle_terminal_action"
token_tree
( "("
identifier "action"
) ")"
. "."
await "await"
) ")"
; ";"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "any"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
, ","
identifier "target_os"
= "="
string_literal
" "\""
string_content "ios"
" "\""
) ")"
) ")"
] "]"
expression_statement
macro_invocation
scoped_identifier
identifier "log"
:: "::"
identifier "warn"
! "!"
token_tree
( "("
string_literal
" "\""
string_content "Terminal action received but not supported on this platform"
" "\""
) ")"
; ";"
} "}"
match_arm
match_pattern
_ "_"
=> "=>"
block
{ "{"
} "}"
} "}"
} "}"
boolean_literal
true "true"
} "}"
function_item (+208 nodes collapsed)
function_item (+358 nodes collapsed)
function_item (+124 nodes collapsed)
function_item (+247 nodes collapsed)
function_item (+37 nodes collapsed)
function_item (+271 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
function_item (+234 nodes collapsed)
function_item (+482 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
function_item (+362 nodes collapsed)
function_item (+69 nodes collapsed)
attribute_item (+30 nodes collapsed)
function_item (+447 nodes collapsed)
function_item (+284 nodes collapsed)
function_item (+159 nodes collapsed)
function_item
function_modifiers
async "async"
fn "fn"
identifier "update_options"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
, ","
parameter
identifier "o"
: ":"
reference_type
& "&"
type_identifier "OptionMessage"
) ")"
block
{ "{"
expression_statement
macro_invocation
scoped_identifier
identifier "log"
:: "::"
identifier "info"
! "!"
token_tree
( "("
string_literal
" "\""
string_content "Option update: {:?}"
" "\""
, ","
identifier "o"
) ")"
; ";"
expression_statement (+146 nodes collapsed)
expression_statement (+59 nodes collapsed)
expression_statement (+75 nodes collapsed)
expression_statement (+53 nodes collapsed)
attribute_item (+30 nodes collapsed)
expression_statement (+174 nodes collapsed)
attribute_item (+30 nodes collapsed)
expression_statement (+53 nodes collapsed)
expression_statement (+121 nodes collapsed)
expression_statement (+225 nodes collapsed)
attribute_item (+26 nodes collapsed)
expression_statement (+228 nodes collapsed)
expression_statement (+131 nodes collapsed)
expression_statement (+252 nodes collapsed)
line_comment
// "//"
expression_statement (+152 nodes collapsed)
expression_statement (+225 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "not"
token_tree
( "("
identifier "any"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
, ","
identifier "target_os"
= "="
string_literal
" "\""
string_content "ios"
" "\""
) ")"
) ")"
) ")"
] "]"
expression_statement
if_expression
if "if"
let_condition
let "let"
tuple_struct_pattern
identifier "Ok"
( "("
identifier "q"
) ")"
= "="
call_expression
field_expression
field_expression
identifier "o"
. "."
field_identifier "terminal_persistent"
. "."
field_identifier "enum_value"
arguments
( "("
) ")"
block
{ "{"
expression_statement
if_expression
if "if"
binary_expression
identifier "q"
!= "!="
scoped_identifier
identifier "BoolOption"
:: "::"
identifier "NotSet"
block
{ "{"
expression_statement
await_expression
call_expression
field_expression
self "self"
. "."
field_identifier "update_terminal_persistence"
arguments
( "("
binary_expression
identifier "q"
== "=="
scoped_identifier
identifier "BoolOption"
:: "::"
identifier "Yes"
) ")"
. "."
await "await"
; ";"
} "}"
} "}"
} "}"
function_item (+542 nodes collapsed)
function_item (+109 nodes collapsed)
function_item (+183 nodes collapsed)
function_item (+326 nodes collapsed)
line_comment
// "//"
function_item (+166 nodes collapsed)
function_item (+65 nodes collapsed)
function_item (+65 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+40 nodes collapsed)
function_item (+40 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
function_item
fn "fn"
identifier "portable_check"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
) ")"
block
{ "{"
expression_statement
if_expression
if "if"
binary_expression
binary_expression
field_expression
field_expression
self "self"
. "."
field_identifier "portable"
. "."
field_identifier "is_installed"
|| "||"
unary_expression
! "!"
call_expression any 2:1
field_expression any 5:1
self "self" any 3:1
. "." any 5:1
field_identifier "is_remote" any 5:1
arguments any 2:1
( "(" any 2:1
) ")" any 2:1
|| "||"
unary_expression
! "!"
field_expression
self "self"
. "."
field_identifier "keyboard"
block
{ "{"
expression_statement
return_expression
return "return"
; ";"
} "}"
let_declaration
let "let"
identifier "running"
= "="
call_expression
scoped_identifier
identifier "portable_client"
:: "::"
identifier "running"
arguments
( "("
) ")"
; ";"
let_declaration
let "let"
identifier "show_elevation"
= "="
unary_expression
! "!"
identifier "running"
; ";"
expression_statement (+34 nodes collapsed)
expression_statement (+405 nodes collapsed)
} "}"
attribute_item (+30 nodes collapsed)
function_item (+78 nodes collapsed)
function_item (+120 nodes collapsed)
function_item (+52 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "hwcodec"
" "\""
) ")"
] "]"
function_item (+290 nodes collapsed)
attribute_item (+30 nodes collapsed)
function_item (+264 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
function_item (+66 nodes collapsed)
function_item (+59 nodes collapsed)
function_item (+59 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
] "]"
function_item (+190 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "inline"
] "]"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "feature"
= "="
string_literal
" "\""
string_content "unix-file-copy-paste"
" "\""
) ")"
] "]"
function_item (+36 nodes collapsed)
attribute_item (+26 nodes collapsed)
function_item (+168 nodes collapsed)
attribute_item (+26 nodes collapsed)
function_item (+133 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "not"
token_tree
( "("
identifier "any"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
, ","
identifier "target_os"
= "="
string_literal
" "\""
string_content "ios"
" "\""
) ")"
) ")"
) ")"
] "]"
function_item
function_modifiers
async "async"
fn "fn"
identifier "update_terminal_persistence"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
, ","
parameter
identifier "persistent"
: ":"
primitive_type "bool"
) ")"
block
{ "{"
expression_statement
assignment_expression
field_expression
self "self"
. "."
field_identifier "terminal_persistent"
= "="
identifier "persistent"
; ";"
expression_statement
call_expression
field_expression
call_expression
scoped_identifier
identifier "terminal_service"
:: "::"
identifier "set_persistent"
arguments
( "("
reference_expression
& "&"
field_expression
self "self"
. "."
field_identifier "terminal_service_id"
, ","
identifier "persistent"
) ")"
. "."
field_identifier "ok"
arguments
( "("
) ")"
; ";"
} "}"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "not"
token_tree
( "("
identifier "any"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
, ","
identifier "target_os"
= "="
string_literal
" "\""
string_content "ios"
" "\""
) ")"
) ")"
) ")"
] "]"
function_item
function_modifiers
async "async"
fn "fn"
identifier "init_terminal_service"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
) ")"
block
{ "{"
expression_statement
if_expression
if "if"
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "terminal_service_id"
. "."
field_identifier "is_empty"
arguments
( "("
) ")"
block
{ "{"
expression_statement
assignment_expression
field_expression
self "self"
. "."
field_identifier "terminal_service_id"
= "="
call_expression
scoped_identifier
identifier "terminal_service"
:: "::"
identifier "generate_service_id"
arguments
( "("
) ")"
; ";"
} "}"
let_declaration
let "let"
identifier "s"
= "="
call_expression
scoped_identifier
identifier "Box"
:: "::"
identifier "new"
arguments
( "("
call_expression
scoped_identifier
identifier "terminal_service"
:: "::"
identifier "new"
arguments
( "("
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "terminal_service_id"
. "."
field_identifier "clone"
arguments
( "("
) ")"
, ","
field_expression
self "self"
. "."
field_identifier "terminal_persistent"
, ","
) ")"
) ")"
; ";"
expression_statement
call_expression
field_expression
identifier "s"
. "."
field_identifier "on_subscribe"
arguments
( "("
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "inner"
. "."
field_identifier "clone"
arguments
( "("
) ")"
) ")"
; ";"
expression_statement
assignment_expression
field_expression
self "self"
. "."
field_identifier "terminal_generic_service"
= "="
call_expression
identifier "Some"
arguments
( "("
identifier "s"
) ")"
; ";"
} "}"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "not"
token_tree
( "("
identifier "any"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "android"
" "\""
, ","
identifier "target_os"
= "="
string_literal
" "\""
string_content "ios"
" "\""
) ")"
) ")"
) ")"
] "]"
function_item
function_modifiers
async "async"
fn "fn"
identifier "handle_terminal_action"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
, ","
parameter
identifier "action"
: ":"
type_identifier "TerminalAction"
) ")"
-> "->"
generic_type
type_identifier "ResultType"
type_arguments
< "<"
unit_type
( "("
) ")"
> ">"
block
{ "{"
let_declaration
let "let"
mutable_specifier "mut"
identifier "proxy"
= "="
call_expression
scoped_identifier
scoped_identifier
identifier "terminal_service"
:: "::"
identifier "TerminalServiceProxy"
:: "::"
identifier "new"
arguments
( "("
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "terminal_service_id"
. "."
field_identifier "clone"
arguments
( "("
) ")"
, ","
call_expression
identifier "Some"
arguments
( "("
field_expression
self "self"
. "."
field_identifier "terminal_persistent"
) ")"
, ","
) ")"
; ";"
expression_statement
match_expression
match "match"
call_expression
field_expression
identifier "proxy"
. "."
field_identifier "handle_action"
arguments
( "("
reference_expression
& "&"
identifier "action"
) ")"
match_block
{ "{"
match_arm
match_pattern
tuple_struct_pattern
identifier "Ok"
( "("
tuple_struct_pattern
identifier "Some"
( "("
identifier "response"
) ")"
) ")"
=> "=>"
block
{ "{"
let_declaration
let "let"
mutable_specifier "mut"
identifier "msg_out"
= "="
call_expression
scoped_identifier
identifier "Message"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
field_expression
identifier "msg_out"
. "."
field_identifier "set_terminal_response"
arguments
( "("
identifier "response"
) ")"
; ";"
expression_statement
await_expression
call_expression
field_expression
self "self"
. "."
field_identifier "send"
arguments
( "("
identifier "msg_out"
) ")"
. "."
await "await"
; ";"
} "}"
match_arm
match_pattern
tuple_struct_pattern
identifier "Ok"
( "("
identifier "None"
) ")"
=> "=>"
block
{ "{"
line_comment
// "//"
} "}"
match_arm
match_pattern
tuple_struct_pattern
identifier "Err"
( "("
identifier "err"
) ")"
=> "=>"
block
{ "{"
let_declaration
let "let"
mutable_specifier "mut"
identifier "response"
= "="
call_expression
scoped_identifier
identifier "TerminalResponse"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "error"
= "="
call_expression
scoped_identifier
identifier "TerminalError"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
expression_statement
assignment_expression
field_expression
identifier "error"
. "."
field_identifier "message"
= "="
macro_invocation
identifier "format"
! "!"
token_tree
( "("
string_literal
" "\""
string_content "Failed to handle action: {}"
" "\""
, ","
identifier "err"
) ")"
; ";"
expression_statement
call_expression
field_expression
identifier "response"
. "."
field_identifier "set_error"
arguments
( "("
identifier "error"
) ")"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "msg_out"
= "="
call_expression
scoped_identifier
identifier "Message"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
field_expression
identifier "msg_out"
. "."
field_identifier "set_terminal_response"
arguments
( "("
identifier "response"
) ")"
; ";"
expression_statement
await_expression
call_expression
field_expression
self "self"
. "."
field_identifier "send"
arguments
( "("
identifier "msg_out"
) ")"
. "."
await "await"
; ";"
} "}"
} "}"
call_expression
identifier "Ok"
arguments
( "("
unit_expression
( "("
) ")"
) ")"
} "}"
} "}"
function_item (+68 nodes collapsed)
attribute_item (+30 nodes collapsed)
function_item (+1305 nodes collapsed)
line_comment
// "//"
function_item (+91 nodes collapsed)
enum_item (+23 nodes collapsed)
enum_item
visibility_modifier
pub "pub"
enum "enum"
type_identifier "FileAuditType"
enum_variant_list
{ "{"
enum_variant
identifier "RemoteSend"
= "="
integer_literal "0"
, ","
enum_variant
identifier "RemoteReceive"
= "="
integer_literal "1"
, ","
} "}"
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Serialize"
) ")"
] "]"
attribute_item
# "#"
[ "["
attribute
identifier "serde"
token_tree
( "("
identifier "rename_all"
= "="
string_literal
" "\""
string_content "camelCase"
" "\""
) ")"
] "]"
struct_item (+26 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Serialize"
) ")"
] "]"
attribute_item
# "#"
[ "["
attribute
identifier "serde"
token_tree
( "("
identifier "rename_all"
= "="
string_literal
" "\""
string_content "camelCase"
" "\""
) ")"
] "]"
struct_item (+21 nodes collapsed)
struct_item (+36 nodes collapsed)
impl_item (+896 nodes collapsed)
function_item (+403 nodes collapsed)
attribute_item (+26 nodes collapsed)
function_item (+117 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
struct_item (+41 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "windows"
) ")"
] "]"
impl_item (+75 nodes collapsed)
impl_item
impl "impl"
type_identifier "Drop"
for "for"
type_identifier "Connection"
declaration_list
{ "{"
function_item
fn "fn"
identifier "drop"
parameters
( "("
self_parameter
& "&"
mutable_specifier "mut"
self "self"
) ")"
block
{ "{"
attribute_item (+30 nodes collapsed)
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "release_pressed_modifiers"
arguments
( "("
) ")"
; ";"
expression_statement
if_expression
if "if"
let_condition
let "let"
tuple_struct_pattern
identifier "Some"
( "("
identifier "s"
) ")"
= "="
call_expression
field_expression
field_expression
self "self"
. "."
field_identifier "terminal_generic_service"
. "."
field_identifier "as_ref"
arguments
( "("
) ")"
block
{ "{"
expression_statement
call_expression
field_expression
identifier "s"
. "."
field_identifier "join"
arguments
( "("
) ")"
; ";"
} "}"
} "}"
} "}"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
struct_item (+61 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "linux"
" "\""
) ")"
] "]"
impl_item (+307 nodes collapsed)
function_item (+72 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "macos"
" "\""
) ")"
] "]"
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Default"
) ")"
] "]"
struct_item
struct "struct"
type_identifier "Retina"
field_declaration_list
{ "{"
field_declaration
field_identifier "displays"
: ":"
generic_type
type_identifier "Vec"
type_arguments
< "<"
type_identifier "DisplayInfo"
> ">"
, ","
} "}"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_os"
= "="
string_literal
" "\""
string_content "macos"
" "\""
) ")"
] "]"
impl_item (+604 nodes collapsed)
struct_item (+51 nodes collapsed)
mod_item (+1639 nodes collapsed)
mod_item (+274 nodes collapsed)