Commit Graph
466 Commits
Author SHA1 Message Date
cfal cd79e3d26d Align Sudoku read/write ownership with TLS
Make Sudoku reads input-only and remove the shared readiness dispatcher. Keep write-side buffering and draining unchanged, with explicit flush ownership documented for streams and session handoffs.

Cover independent reader/writer readiness, sticky failures, stacked masks, protocol handoffs, and TLS/REALITY over Sudoku under backpressure.
2026-10-30 09:48:42 +00:00
cfal b6534d8293 Batch Sudoku codecs while preserving stream semantics 2026-10-30 08:40:16 +00:00
cfal 469f9e518f Update Xray interoperability peers to v26.10.29 2026-10-30 08:40:16 +00:00
cfal 33f88432c0 Simplify Sudoku carrier wrapping and interoperability cases 2026-10-30 08:40:16 +00:00
cfal 46ca1246d9 Restrict Sudoku masks to outer protocol layers 2026-10-30 08:40:15 +00:00
cfal 2f22647038 Simplify Sudoku mask integration and strengthen control regression tests 2026-10-30 08:40:15 +00:00
cfal 1816f06ad8 Verify and document Sudoku TCP interoperability
Exercise both pinned Xray roles, layouts, padding, stack order and supported TCP carriers. Add Shoes-only inner placements, pooled and later-hop XHTTP/H2MUX routes, bidirectional Vision DIRECT wire captures, UDP over streams and split-task AnyTLS backpressure coverage.

Run the matrix and cross-language wire fixtures in the existing interop workflow with nonempty-test guards. Document literal wrapper placement, 32 KiB directional buffers, wire expansion, TCP-only scope and the lack of encryption or authentication guarantees.
2026-10-30 08:37:56 +00:00
cfal 218970478e Integrate composable Sudoku masks into TCP handlers and XHTTP
Expose the nested sudoku_mask wrapper on client and server TCP hops. Recurse through configuration, certificate, rule and control walkers while preserving default SNI and immediate-child Vision and NaiveProxy constraints. Reject masks anywhere in native UDP or QUIC protocol trees.

Apply XHTTP carrier masks once per dial on either side of TLS or REALITY, keeping logical-session masks in the inner handler and existing pool isolation intact. Preserve ALPN discovery through consecutive masks and shared server-service scopes across listeners. Add validation, walker, carrier-security and service-lifetime regressions.
2026-10-30 08:37:56 +00:00
cfal 3cc1762707 Preserve split-task readiness while draining Sudoku writes
Reads opportunistically drain buffered output, so transport write readiness must wake both halves of a split stream. Keep separate reader and writer registrations behind one transport waker, and notify the writer when read-side draining progresses or fails.

Exercise distinct task wakers, reader cancellation, synchronous and partial drains, sticky write errors, and pending write, flush, shutdown and ping operations.
2026-10-30 08:37:56 +00:00
cfal 257b6bbff3 Implement and cross-check the Sudoku TCP codec
Build password-independent canonical grids and hint bitsets, retain the Go legacy shuffle contract with BSD-attributed constants, and implement the asymmetric classic/packed profile independently in Rust.

Use bounded 32 KiB wire buffers with cancellation-safe acceptance, deferred errors, half-close and no splice. Test mathematical equivalence, Go permutations, Xray wire fixtures and asynchronous edge cases. Keep the module test-only until protocol integration is complete.
2026-10-30 08:37:56 +00:00
cfal 829625ad2c Simplify TLS read/write ownership (#245)
* Make TLS protocol handoff flushes explicit

* Keep TLS reads independent of writes
2026-10-30 16:19:52 +08:00
cfal 7460f5d046 Add managed Linux desktop TUN capture (#241)
Add managed Linux TUN and REDIRECT capture with independent DNS interception, protected bootstrap and outbound sockets, best-effort systemd-resolved integration, and retained-ingress reload and recovery. Include configuration documentation, service integration, and kernel coverage.
2026-10-30 15:07:46 +08:00
cfal 09f09bf611 Fix lost TLS writer wakeups (#244)
* Fix split-task readiness during TLS read-driven flushes

Preserve original reader and writer registrations behind a shared readiness dispatcher. Keep internal receive, drain and flush helpers non-registering, and wake parked writers on read-driven progress or fatal receive errors without adding write-side self-wakes.

Cover ordinary TLS, REALITY, raw handoff, vectored writes, control-operation readiness, reader cancellation and terminal errors. Extract the fix and later TLS test cleanups from 5f475063 and f83bc0f1 without the Sudoku-only test cases.

* Simplify TLS readiness regression tests
2026-10-30 11:55:41 +08:00
cfal 4fcbd7c776 Fix resolver refresh after DNS transport failures (#242)
Preserve Hickory transport error kinds during hostname lookups so the existing resolver refresh and retry policy handles timeouts and unavailable connections. Reuse the shared error conversion and cover transport recovery, cached success, and NXDOMAIN responses without unnecessary refresh.
2026-10-29 15:20:08 +08:00
cfal e4db054f9f Use 8 MiB UDP buffers across QUIC endpoints (#240)
Raise the configurable QUIC socket-buffer default to 8 MiB and apply it consistently to listeners, outbound proxies, and DNS-over-HTTP/3. Keep tuning best-effort under OS limits, normalize Linux readbacks, suppress repeated warnings, and document kernel settings and reload behavior.
2026-10-28 23:25:51 +08:00
cfal c3453ef1ab Add ARMv7 release builds and verified artifact packaging (#239)
Add Linux ARMv7 hard-float GNU and static musl binaries so 32-bit ARMv7 systems can use prebuilt Shoes releases. Retain the six existing targets, pin build tooling and cross images, and validate each packaged binary with native or QEMU checks before uploading it. Harden future releases with version and tag validation, SHA-256 checksums, and GitHub build-provenance attestations, and document platform requirements and artifact verification.
2026-10-28 12:29:58 +08:00
cfal 201ba24ca8 Refresh smoltcp fork to current upstream (#238) 2026-10-28 10:12:44 +08:00
cfal 3737e07467 Prepare v0.3.6 release v0.3.6 2026-10-27 03:18:26 +00:00
cfal 33bbea93e4 Refresh dependencies and build tooling (#235)
Refresh eligible Rust dependencies and build tooling, including notify 8.2.1, Web PKI roots 1.0.11 and the ctutils constant-time fix. Handle macOS watcher restart failures, update Unicode-domain data, and require Rust 1.99.1 while preserving maintained fork pins and protocol baselines. Retain parking_lot 0.12 and the upstream nix pin for Android/iOS compatibility.
2026-10-27 10:43:07 +08:00
cfal c05f92d65b Fix REALITY handshakes with minimal EncryptedExtensions (#236)
REALITY connections fail when the cover target uses a minimal 28-byte EncryptedExtensions record because rustls adds an SNI acknowledgement that no longer fits. Pin the stable-release rustls fork that omits this acknowledgement only for REALITY, update the cover fixtures to use minimal records, and add regression coverage for successful handshakes and rejection of undersized records. Ordinary TLS behavior and strict record-capacity checks remain unchanged.
2026-10-27 09:42:50 +08:00
cfal 739e2ea91e Extract large unit-test suites into adjacent modules (#234)
Move 37 large unit-test suites into adjacent child modules to keep production files easier to navigate while preserving access to private implementation details. Small suites remain inline and integration tests stay separate. Remove unused fixture parameters and duplicate helpers, and clarify configuration test setup without changing test coverage or behavior.
2026-10-26 22:27:54 +08:00
cfal 881b0472ab Prepare version 0.3.5 v0.3.5 2026-10-26 13:45:46 +00:00
cfal 2401917d0e Add ordered health-checked fallback groups (#232)
Add opt-in fallback groups that route new flows through the first healthy eligible path and fail closed when no path remains, without overriding manual selections or replaying traffic. Reuse the shared probe engine with bounded generation-owned scheduling, resolver-aware path identity and reload cleanup, and reject transport combinations that cannot reliably attribute health to a concrete path.
2026-10-26 19:26:28 +08:00
cfal 8f52f98103 Support SS2022 client identity key chains (#233)
Support server-key:user-key and longer identity chains for Shadowsocks 2022 AES clients, allowing connections to multi-user servers and identity relays. Add the required identity headers, configuration validation, and usage documentation while preserving existing single-key and legacy configurations. This is client-only support; native SS2022 UDP and server-side multi-user support remain out of scope.
2026-10-26 18:39:44 +08:00
cfal 38523d65ed Add performance reports, Linux coverage, and rule property tests (#228)
Add advisory selector/reload performance reports, optional Linux unit/process coverage with changed-line summaries, and bounded rule-parser property tests to make regressions and verification gaps easier to spot. Reports reject invalid measurements and account for timing noise without introducing hard performance gates; existing tests and production behavior remain unchanged.
2026-10-26 16:50:44 +08:00
cfal f94fa61e36 Make native DNS cache freshness explicit (#227)
Add a system-only native_cache_secs option for configurable OS/NSS application memoization while preserving the existing 60-second implicit default and uncached explicit system behavior. Disable completed-cache reads and writes for zero windows, reject invalid DNS options, and document freshness and lookup-sharing semantics.
2026-10-26 14:56:33 +07:00
cfal b821c56f86 Add opt-in connection notes (#226)
Expose bounded setup, routing, and DNS notes in existing `/connections` responses so dashboards can explain active connections without a separate debug API or retained history. Add the default-off `connection_notes` controller setting and bounded per-connection storage while preserving existing connection metadata and forwarding behavior.
2026-10-26 14:56:33 +07:00
cfal 51fbd24ceb Improve strict configuration diagnostics (#225)
Make configuration failures easier to locate without weakening validation: add configuration-entry and rule context, preserve native YAML error locations, and identify input files in validation errors. Reject previously ignored unknown fields in named PEM entries and TCP settings, clarify diagnostic limits and upgrade requirements, and add coverage for strict parsing, representative configurations, and offline validation behavior.
2026-10-26 14:56:33 +07:00
cfal 4ab9e8714c Add bounded background file logging (#224)
Move file I/O onto dedicated per-sink workers so slow storage does not stall relay threads. Bound pending records and escaped bytes, drop newest records on overload with health counters, and preserve FIFO ordering and flush barriers. Integrate bounded shutdown and reusable file-sink ownership with CLI and mobile FFI while preserving sanitization and existing log formatting.
2026-10-25 23:26:11 -04:00
cfal c112f00ea9 Fix fixture startup flakes and DNS connection-close failover (#222)
Retain fixture ports until listener handoff, await Shoes readiness before starting dependent peers, and settle native watcher setup notifications before activation assertions. Pin Hickory 0.26.3 to a connection-close recovery backport that preserves typed H3 errors and healthy-upstream failover without widening retry limits.
2026-10-25 11:13:14 -04:00
cfal 5fdbe696c5 Make reload rollback safe and release TCP setup state (#219)
* Release setup-only routing owners before TCP relay

* Restore failed reloads and retain unchanged TCP listener sockets

* Simplify reload activation and listener lifecycle code

* Reject duplicate fixed TCP addresses during direct startup

* Preserve inherited TUN descriptors across rejected reloads

* Defer overlapping TCP listeners until retirement

* Document reload rollback and listener retention

* Exercise retained TCP sockets in lifecycle retention regression
2026-10-25 07:50:31 -04:00
cfal b0b30617a2 Add automatic URL-test upstream groups (#221)
Add URL-scoped health and delay-based upstream selection so new connections can use healthy, transport-compatible proxies without requiring a controller listener. This introduces strict client_group.type configuration in place of strategy, bounded automatic probes with lazy activity tracking and reload fencing, controller reporting, and configuration documentation. It also preserves local failure attribution through outbound HTTP/2 adapters so local resource limits do not incorrectly penalize proxy health.
2026-10-24 23:52:28 -04:00
cfal 1e02a9887b Add retention and reload lifetime regressions (#218)
Catch resource retention across failed setup, cancellation, reloads, and owner destruction with allocation, task, descriptor, and permit regressions, alongside deterministic matcher invariants. Strengthen reload measurements with committed-upstream verification, exact-byte live-session checks, bounded cleanup, and byte-exact provenance, and add the coverage to CI.
2026-10-24 22:53:56 -04:00
cfal a40aae55cc Improve native DNS caching and coalesce concurrent lookups (#220)
Share native resolver cache entries across destination ports and coalesce concurrent misses with bounded, cancellation-safe ownership. Preserve ordered address candidates, caller ports, and error details while using a conservative 60-second result-age policy rather than a DNS record TTL. Cover cancellation, expiry, failure, and capacity limits with deterministic tests and document the default behavior and trade-offs.
2026-10-24 20:44:33 -04:00
cfal f6abcd8245 Add ACME certificates and live TLS/QUIC rotation (#217)
Add shared file and ACME certificate sources for automatic issuance, renewal, and live TLS/QUIC rotation without interrupting existing connections. Support HTTP-01 and TLS-ALPN-01, durable retry and account state, and CLI/FFI lifecycle handoffs. Extend live rotation to existing file-backed identities and document stricter certificate validation requirements.
2026-10-24 06:17:31 -04:00
cfal fb1fa5b8bb Upgrade Tokio to fix Interval timer race (#216) v0.3.4 2026-10-24 04:33:18 -04:00
cfal aa20a6cffd Finalize version 0.3.4 release notes 2026-10-24 07:05:35 +00:00
cfal a361e69b77 Publish multiarchitecture Shoes images to GHCR (#215)
Add a non-root Docker image for the Shoes binary and publish native amd64 and arm64 images to GHCR on master pushes and published releases. Reuse commit images by digest, gate branch and release tags on container smoke checks, and guard against stale promotions. Include the full license bundle and document configuration, writable state, and image tags.
2026-10-23 22:30:44 -04:00
cfal 38db23f27d Log Clash controller startup and allow wildcard CORS (#214)
Make Clash controller endpoints visible at startup and allow dashboards from any origin when explicitly configured with `cors_origins: ["*"]`. Startup messages include TCP addresses or Unix socket paths, while wildcard CORS preserves authentication and preflight restrictions; controller configuration changes still require a restart.
2026-10-23 21:29:52 -04:00
cfal fbcc5f9d46 Add Clash API and runtime proxy selectors (#213)
Expose runtime proxy selection and connection visibility without restarting Shoes. This adds an opt-in authenticated Clash-compatible TCP/Unix API, persistent selector choices, traffic and connection statistics, delay probes, live logs, and per-flow cancellation, with reload-aware integration across proxy protocols, DNS, and TUN.
2026-10-23 17:50:36 -04:00
cfal a72cc7f0bb Expand test coverage and fix the protocol bugs it exposed (#212)
Broadens unit and integration coverage of WebSocket framing, ShadowTLS and REALITY ClientHello parsing, VLESS fallback, Hysteria2 and TUIC authentication, DNS, and connection budgets across reloads, and fixes the defects it exposed: WebSocket streams now accept control frames up to RFC 6455's 125-byte limit, no longer report EOF into partly filled read buffers, and flush buffered frames before shutting down; the shared ClientHello parser reassembles hellos split across TLS records, as Go TLS stacks do; and message-stream shutdown after EOF is bounded like the stream relay's. It also builds the binary on the library crate instead of compiling every module twice, removes the unused UdpMessageStream, moves ShadowTLS interop tests to local handshake servers, makes filtered CI test steps fail when they select no tests, consolidates the WebSocket payload-reading code, and documents how to measure coverage along with the remaining gaps, including why WebSocket Close frames stay unanswered.
2026-10-23 06:18:10 -04:00
cfal c24bdf8be5 Organize REALITY modules and tests (#211)
Clarifies the fork-backed REALITY code layout by naming modules after their responsibilities, colocating client and server handlers, and grouping shared fixtures and handshake tests under src/reality/tests. Keeps the reality_ filename prefixes and preserves protocol behavior while reusing existing helpers and simplifying imports.
2026-10-22 19:34:05 -04:00
cfal 4e0bd96a34 Replace the custom REALITY TLS stack with rustls (#209)
Replace the bespoke REALITY TLS engine with a pinned rustls fork while retaining Shoes authentication, ML-DSA policy, transparent fallback, and Vision support. Stage and validate target-mirrored handshake flights before sending synthetic bytes, consolidate TLS connection handling, and remove obsolete connection layers and helpers. Outbound handshakes use the native rustls fingerprint; unsupported target layouts fall back transparently, and unclean TLS closure reports UnexpectedEof.
2026-10-22 06:40:20 -04:00
cfal b10c100288 Simplify XHTTP rejections and allow matching_headers value lists (#208)
XHTTP required-header support still carried leftovers from its earlier connection-closing design. This removes `close_on_http1_error` entirely (configs that set it now fail to load), so header and path mismatches return the same plain 404 on every HTTP version, and makes every XHTTP error response a bare status with an empty body. `matching_headers` values can now be lists so secrets can rotate without downtime, and client `headers` now reject names that differ only in case and values with leading or trailing whitespace, neither of which could ever match. Redundant H2/H3 reset handling is removed while the ordering and H3 upload-reset handling that prevent session closures and held request slots are kept, documented and covered by a regression test; new interop tests cover Xray and Mihomo clients sending required headers, and the README explains that Xray clients using `extra` must put `headers` inside it.
2026-10-22 04:41:27 -04:00
cfal abf24533a9 remove unused mobile SDK wrappers (#207)
* build: remove distributable mobile SDK wrappers

Remove the Android Kotlin/Gradle wrapper, AAR and XCFramework packaging, and mobile SDK release publishing.

Preserve Rust JNI/C embedding and native cross-compilation CI, with checks for library outputs and the generated C header. Document app-owned integration and retain desktop release-notice verification.

* ci: verify mobile header after locked native builds

cbindgen resolves Cargo metadata without --locked and can update Cargo.lock. Run it after the native builds so it cannot hide a stale lockfile from their checks.

* docs: remove obsolete mobile wrapper examples

Remove examples referencing nonexistent JNI wrapper methods and clarify the app-owned callback contract. Keep native mobile support unchanged.

* docs: clarify native mobile CI coverage
2026-10-22 03:08:57 -04:00
cfal b586e8c654 Fix stream byte loss and expand lifecycle coverage (#206)
Preserve payload bytes across fragmented VLESS response headers, nonempty WebSocket Ping frames, and ShadowTLS authentication fallback. Expand authentication, buffering, half-close, flow-control, and TUN reload coverage; harden isolated test selection, enable macOS process-watcher tests, and document suite boundaries and remaining gaps.
2026-10-22 02:20:03 -04:00
cfal de1e827922 Update dependencies and refresh BLAKE3 fork (#204)
Update Rust dependencies for current fixes, including ML-KEM's removal of secret-dependent table lookups, and refresh the BLAKE3 fork while retaining binary-context key derivation. Allow wildcard GotaTun updates with source-notice validation, replace unmaintained test-only PEM parsing, and update Android and CI tooling with current AGP source-set APIs. Preserve Web PKI protections and required fork patches; defer YAML parser migration.
2026-10-21 22:00:13 -04:00
cfal b5371552ae Fix TUN lifecycle and Naive HTTP/2 stalls (#203)
Prevent TUN startup resets and orphaned connections by deferring inbound TCP publication until handshakes complete, bounding half-open admission, and propagating worker failures while preserving Linux link-down and Apple queue-backpressure recovery. Fix Naive HTTP/2 writes that stall despite available credit and improve transfer diagnostics. Preserve full-payload and clean-EOF Mihomo REALITY coverage with reply-first sequencing, retaining early half-close as an opt-in peer regression. Upgrade Xray test peers to the 26.10.21 security release after upstream withdrew the previous releases.
2026-10-21 16:58:17 -04:00
cfal 0b7363bdde Prepare version 0.3.4 2026-10-21 04:03:06 +00:00
cfal 14b4df6cc4 Update Web PKI dependencies for eMudhra CA compromise (#202)
Update rustls-webpki to 0.103.16 and webpki-roots/webpki-root-certs to 1.0.10 for CVE-2026-111943. Remove emSign ECC Root CA - G3 from bundled roots and reject the eight compromised intermediate keys, including cross-signed chains. Refresh dependency notices and document the certificate-chain impact and rebuild requirement.
2026-10-20 23:30:28 -04:00