| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| |
|
|
|
|
|
|
| |
loop on CTRL_CLOSE_EVENT handler causes pause occurs when the user
closes the console by clicking the 'X' button, which degrades user
experience.
This change terminates program immediately if no error occurs.
|
| |
|
|
| |
This makes windows users able to see the error message.
|
| | |
|
| |
|
|
|
|
|
|
| |
- Remove global RUNNING, trap_exit, EnsureCleanup, MESSAGE_AT_RUN from main.rs
- Move each into platform-specific modules (linux.rs, windows.rs)
- Move MESSAGE_AT_RUN to platform.rs
- Inline cleanup logic into run() instead of separate cleanup() fn
- Remove service_run_1() indirection in windows.rs
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
set_opt() was logging each option as it set them, which created a
tight coupling between option initialization and log output timing.
This was particularly problematic for daemon mode: daemonize must
happen after set_opt() (to know whether -D was passed) but before
logging (so output goes to the log file, not stdout).
Split into set_opt() -> InitializedOpts and InitializedOpts::log(),
using a typestate pattern to enforce at compile time that log() cannot
be called before set_opt(). This lets each platform's bootstrap()
handle daemonization between the two steps:
let initialized = opt.set_opt()?;
platform::bootstrap()?; // daemonize here if needed
initialized.log(); // now safe to log
Also:
- Move daemonize_1() into platform::bootstrap() on both platforms
- Make daemonize_1() / service_main() private to their platform modules
- Fix the long-standing TODO about using log_println in daemonize()
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
The bootstrap/run separation was unnecessary. Move all initialization
(cleanup + nftables setup): into run() and skip bootstrap in daemon
mode. We repurpose the bootstrap() function to only run in non-daemon
mode for future foreground-only initialization.
- Add OPT_DAEMON option to detect daemon mode
- Move cleanup() and install_rules() from bootstrap() to run()
- Make bootstrap() a no-op (only called in non-daemon mode)
|
| | |
|
| |
|
|
|
| |
Move option parsing to opt.rs and packet handling to pkt.rs from
main.rs
|
| |
|
|
|
|
| |
- Extend split_packet_0 to optionally override TCP checksum.
- Compute L3 header length for IPv4/IPv6 and patch checksum field when requested.
- Wire fake_clienthello to set checksum to 0 when fake_badsum() is enabled.
|
| | |
|
| |
|
|
| |
Fake was enabled by default.....
|
| |
|
|
| |
Log runtime options on startup
|
| |
|
|
|
| |
- Add --fake flag to enable fake ClientHello injection
- Add --fake-ttl option to override TTL of fake packets
|
| |
|
|
| |
Introduce send_segment abstraction
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
* Extracted: repeated split/send/sleep logic from `handle_packet` into
new `split_packet_1` function for clarity and reuse.
* Simplifies: `handle_packet` by replacing manual steps with a single
call.
|
| |
|
|
| |
This removes unnecessary allocations per packet handling.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
* Introduce: `splash!` macro in `log.rs` to print startup messages
conditionally, based on `--no-splash` flag.
* Move: `NO_SPLASH` management into `log.rs` with helper
functions: (`set_no_splash`, `no_splash`).
* Remove: old `splash()` function in `main.rs` and replace with
`splash!` macro usage.
* Set: default `LogLevel` according to build profile (Debug → Debug,
Release → Warning).
* Print: unified startup messages across Linux and Windows, including
`MESSAGE_AT_RUN`.
|
| | |
|
| | |
|
| |
|
|
| |
* Use: Cargo.toml inside on program
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Introduce: `DEFAULT_LOG_LEVEL` and `LOG_LEVEL_OVERRIDE` (OnceLock)
in log.rs.
* Add: `set_log_level()` and `current_log_level()`; gate defaults by
`debug_assertions`.
* Implement: `FromStr` for `LogLevel` with a proper error
type (`ParseLogLevelError`).
* Update: `log_println!` to respect `current_log_level()` and use
`format_args!`.
* Extend: CLI: `--loglevel <debug|info|warning|error>` and reflect it
in `usage()`.
* Replace: ad-hoc prints with `log_println!` and plumb parsed level
into `set_log_level`.
|
| |
|
|
|
|
| |
* Remove: unused `Fatal` variant from `LogLevel`.
* Update: comment on `Error` to indicate it represents unrecoverable
errors.
|
| |
|
|
|
|
|
|
|
| |
* Set: `LOG_LEVEL` to `Debug` in debug builds and `Warning` in release
builds via `#[cfg(debug_assertions)]`.
* Replace: direct `println!` calls with `log_println!` for packet
handling, warning messages, and argument parsing errors.
* Ensures: consistent log formatting and respects the global log level
configuration across the codebase.
|
| |
|
|
|
|
|
|
|
| |
Introduce `EnsureCleanup` struct with a `Drop` implementation that
calls `platform::cleanup()`. This guarantees cleanup is always
performed after a successful bootstrap, regardless of how execution
exits. Error handling is centralized in `main()`, where errors are
logged once with their cause chain, and the process exits with the
appropriate status code.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
| |
* Remove: wildcard import from platform and top-level TLSMsg import.
* Add: local use of TLSMsg inside is_client_hello().
* Add: local use of send_to_raw() inside handle_packet().
* Qualify: IS_U32_SUPPORTED, QUEUE_NUM, bootstrap(), run(), and
cleanup() with platform::.
|
| |
|
|
|
|
| |
* Remove nested TLSMsg::new() invocation.
* Introduce fragment variable for readability.
* Simplify control flow by flattening record parsing.
|
| |
|
|
|
|
|
| |
* Remove Arc<AtomicBool> indirection and introduce global RUNNING.
* Rename plant_handler() to trap_exit() for clarity.
* Update run() implementations on Linux and Windows to use RUNNING directly.
* Drop unused imports in main.rs, linux.rs, and windows.rs.
|
| | |
|
| |
|
|
|
|
|
| |
Previously split_packet used truncate() after writing, which could
leave stale data from earlier writes. This patch calls clear() before
builder.write() to ensure the buffer only contains the current packet
contents.
|
| |
|
|
|
|
|
|
|
|
|
| |
This change introduces basic CLI parsing for --delay-ms,
--queue-num (Linux only), and -h/--help. A usage() function was added,
and error/help output now goes to stdout for consistency.
Global constants DELAY_MS and QUEUE_NUM are replaced with
OnceLock-based initialization, with helper accessors delay_ms() and
queue_num(). The Linux platform code is updated accordingly to use
queue_num() instead of a constant.
|
| |
|
|
|
| |
Extracted common args.next() + parse logic into take_value() to remove
duplication in --delay-ms and --queue-num handling.
|
| | |
|
| | |
|
| | |
|
| | |
|