Skip to main content

rmux_server/
lib.rs

1#![forbid(unsafe_code)]
2#![deny(missing_docs)]
3#![deny(clippy::await_holding_lock)]
4
5//! Tokio-based detached RPC server for RMUX.
6
7#[cfg(any(unix, windows))]
8#[cfg_attr(windows, allow(dead_code))]
9mod automatic_rename;
10#[cfg(any(unix, windows))]
11mod buffer_file_io;
12#[cfg(any(unix, windows))]
13#[cfg_attr(windows, allow(dead_code))]
14mod client_flags;
15#[cfg(any(unix, windows))]
16mod clipboard_protocol;
17#[cfg(any(unix, windows))]
18#[cfg_attr(windows, allow(dead_code))]
19mod clock_mode;
20#[cfg(any(unix, windows))]
21#[cfg_attr(windows, allow(dead_code))]
22mod control;
23#[cfg(any(unix, windows))]
24#[cfg_attr(windows, allow(dead_code))]
25mod control_mode;
26#[cfg(any(unix, windows))]
27#[cfg_attr(windows, allow(dead_code))]
28mod control_notifications;
29#[cfg(any(unix, windows))]
30#[cfg_attr(windows, allow(dead_code))]
31mod copy_mode;
32mod daemon;
33#[cfg(any(unix, windows))]
34mod diagnostic_log;
35#[cfg(any(unix, windows))]
36mod foreground_probe;
37#[cfg(any(unix, windows))]
38#[cfg_attr(windows, allow(dead_code))]
39mod format_runtime;
40#[cfg(any(unix, windows))]
41#[cfg_attr(windows, allow(dead_code))]
42mod handler;
43#[cfg(any(unix, windows))]
44#[cfg_attr(windows, allow(dead_code))]
45mod handler_support;
46#[cfg(any(unix, windows))]
47#[cfg_attr(windows, allow(dead_code))]
48mod hook_compat;
49#[cfg(any(unix, windows))]
50#[cfg_attr(windows, allow(dead_code))]
51mod hook_runtime;
52#[cfg(any(unix, windows))]
53mod host_name;
54#[cfg(any(unix, windows))]
55mod input_keys;
56#[cfg(any(unix, windows))]
57#[cfg_attr(windows, allow(dead_code))]
58mod key_table;
59#[cfg(any(unix, windows))]
60#[cfg_attr(windows, allow(dead_code))]
61mod keys;
62#[cfg(any(unix, windows))]
63#[cfg_attr(windows, allow(dead_code))]
64mod legacy_command;
65#[cfg(any(unix, windows))]
66mod lifecycle_commit_order;
67#[cfg(any(unix, windows))]
68mod limits;
69#[cfg(any(unix, windows))]
70#[cfg_attr(windows, allow(dead_code))]
71mod listener;
72#[cfg(any(unix, windows))]
73#[cfg_attr(windows, allow(dead_code))]
74mod listener_options;
75#[cfg(any(unix, windows))]
76#[cfg_attr(windows, allow(dead_code))]
77mod listener_signals;
78#[cfg(any(unix, windows))]
79mod mouse;
80#[cfg(any(unix, windows))]
81#[cfg_attr(windows, allow(dead_code))]
82mod outer_terminal;
83#[cfg(any(unix, windows))]
84#[cfg_attr(windows, allow(dead_code))]
85mod pane_indices;
86#[cfg(any(unix, windows))]
87#[cfg_attr(windows, allow(dead_code))]
88mod pane_io;
89#[cfg(unix)]
90mod pane_reader_runtime;
91#[cfg(any(unix, windows))]
92#[cfg_attr(windows, allow(dead_code))]
93mod pane_screen_state;
94#[cfg(any(unix, windows))]
95#[cfg_attr(windows, allow(dead_code))]
96mod pane_scrollbar;
97#[cfg(any(unix, windows))]
98mod pane_state_journal;
99#[cfg(any(unix, windows))]
100#[cfg_attr(windows, allow(dead_code))]
101mod pane_terminal_lookup;
102#[cfg(any(unix, windows))]
103#[cfg_attr(windows, allow(dead_code))]
104mod pane_terminal_process;
105#[cfg(any(unix, windows))]
106#[cfg_attr(windows, allow(dead_code))]
107mod pane_terminals;
108#[cfg(any(unix, windows))]
109#[cfg_attr(windows, allow(dead_code))]
110mod pane_transcript;
111#[cfg(any(unix, windows))]
112#[cfg_attr(windows, allow(dead_code))]
113mod pane_visible_geometry;
114#[cfg(any(unix, windows))]
115mod perf_instrument;
116#[cfg(any(unix, windows))]
117#[cfg_attr(windows, allow(dead_code))]
118mod renderer;
119#[cfg(any(unix, windows))]
120#[cfg_attr(windows, allow(dead_code))]
121mod server_access;
122mod signals;
123#[cfg(any(unix, windows))]
124#[cfg_attr(windows, allow(dead_code))]
125mod socket_cleanup;
126#[cfg(any(unix, windows))]
127mod status_jobs;
128#[cfg(any(unix, windows))]
129mod status_lines;
130#[cfg(any(unix, windows))]
131#[cfg_attr(windows, allow(dead_code))]
132mod status_ranges;
133#[cfg(any(unix, windows))]
134#[cfg_attr(windows, allow(dead_code))]
135mod terminal;
136#[cfg(test)]
137mod test_env;
138#[cfg(test)]
139mod test_shell;
140#[cfg(any(unix, windows))]
141mod tmux_shim;
142#[cfg(unix)]
143mod unix_socket;
144#[cfg(unix)]
145mod unix_socket_access;
146#[cfg(any(unix, windows))]
147#[cfg_attr(windows, allow(dead_code))]
148mod wait_for;
149#[cfg(all(any(unix, windows), feature = "web"))]
150mod web;
151#[cfg(windows)]
152mod windows_console_input;
153
154/// Fuzzing entry points for protocol parsers.
155#[cfg(all(any(unix, windows), feature = "web", feature = "fuzzing"))]
156#[doc(hidden)]
157pub mod fuzzing {
158    /// Feeds arbitrary bytes into the server-side share client-frame parser.
159    pub fn websocket_client_frame(data: &[u8]) {
160        crate::web::fuzz_client_frame(data);
161    }
162}
163
164pub use daemon::{
165    default_socket_path, ConfigFileSelection, ConfigLoadOptions, DaemonConfig, ServerDaemon,
166    ServerHandle,
167};
168
169/// Runs the private platform FIFO reader helper when its hidden invocation flag is present.
170///
171/// This is an implementation detail shared by the full `rmux` and `rmux-daemon`
172/// entrypoints. Normal invocations return `None`; helper invocations write the
173/// FIFO payload to standard output and return the process exit code. Calling
174/// this function during normal process startup also advertises the current
175/// executable as a helper host for embedded [`ServerDaemon`] instances.
176#[cfg(unix)]
177#[doc(hidden)]
178pub fn run_internal_fifo_reader_helper<I>(arguments: I) -> Option<i32>
179where
180    I: IntoIterator<Item = std::ffi::OsString>,
181{
182    buffer_file_io::run_internal_fifo_reader_helper(arguments)
183}