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