mirror of
https://github.com/cfal/shoes.git
synced 2026-11-07 00:13:35 +00:00
* Add network and protocol predicates to routing conditions Accept scalar or list values for logical TCP/UDP transport and STUN/DTLS protocol conditions, including the legacy masks form. Propagate traffic dependencies through composites and rule source groups while preserving destination-only evaluation. Cover parsing, serialization, negation, unknown values, and empty-set semantics. * Route UDP flows using initial STUN and DTLS detection Use sing-box detection and fixtures as references, with bounded STUN attribute and classic DTLS record validation. Classify the first inner datagram across packet routers, TUN/WireGuard, QUIC associations, and fixed-target UDP streams, then keep the selected route for later packets. Preserve captured datagrams and partial framing, flush required success replies before capture, and terminate failed optimistic AnyTLS streams reliably under backpressure. Keep traffic-dependent decisions out of destination-only caches and expose sniffProtocol metadata. Test classification, fallback, cache isolation, replay, transport response ordering, flow pinning, and sing-box interoperability. * Document UDP call routing conditions and detection limits Add a complete calls-versus-default outbound example and document automatic classification, first-packet route pinning, fixed-target response timing, fallback behavior, and detected-protocol metadata in both languages. Distinguish STUN/DTLS routing hints from complete WebRTC identification, NAT mapping reuse, and call-wide exit affinity. * Simplify UDP setup and error handling Share AnyTLS failure reporting while preserving separate route and dial deadlines, policy error mapping, and bounded optimistic FIN cleanup. Add regression coverage for non-optimistic policy and dial permission failures. Remove redundant stream allocations and duplicate test connection plumbing. Build adapter fixtures from typed conditions and clarify traffic-dependent cache behavior. * Fix UDP detection notes and strengthen traffic-rule coverage Suppress protocol notes when classification is disabled instead of reporting an unknown protocol without inspecting a datagram. Keep enabled UDP labels and unknown results, and document the distinction in both languages. Add regression coverage for note emission and positive TCP, UDP, and mixed transport conditions through the selector. Verify the note test fails before the guard fix. * test(routing): strengthen UDP classification and lifecycle contracts * test(routing): cover AnyTLS and h2mux protocol routing with real clients
85 lines
3.0 KiB
Rust
85 lines
3.0 KiB
Rust
#[path = "cases/integration/anytls_integration.rs"]
|
|
mod anytls;
|
|
#[path = "cases/integration/anytls_uot_integration.rs"]
|
|
mod anytls_uot;
|
|
#[path = "cases/integration/fake_dns.rs"]
|
|
mod fake_dns;
|
|
#[path = "cases/integration/h2mux_integration.rs"]
|
|
mod h2mux;
|
|
#[path = "cases/integration/h2mux_backpressure.rs"]
|
|
mod h2mux_backpressure;
|
|
#[path = "cases/integration/h2mux_singbox.rs"]
|
|
mod h2mux_singbox;
|
|
#[path = "cases/integration/hostname_sniffing.rs"]
|
|
mod hostname_sniffing;
|
|
#[path = "cases/integration/http2_proxy.rs"]
|
|
mod http2_proxy;
|
|
#[path = "cases/integration/http_host_sniffing.rs"]
|
|
mod http_host_sniffing;
|
|
#[path = "cases/integration/hysteria2_integration.rs"]
|
|
mod hysteria2;
|
|
#[path = "cases/integration/hysteria2_udp_integration.rs"]
|
|
mod hysteria2_udp;
|
|
#[path = "cases/integration/naiveproxy_integration.rs"]
|
|
mod naiveproxy;
|
|
#[path = "cases/integration/plain_tcp_relay.rs"]
|
|
mod plain_tcp_relay;
|
|
#[path = "cases/integration/quic_udp_routing_test.rs"]
|
|
mod quic_udp_routing;
|
|
#[path = "cases/integration/reality_integration.rs"]
|
|
mod reality;
|
|
#[path = "cases/integration/resource_lifecycle_test.rs"]
|
|
mod resource_lifecycle;
|
|
#[path = "cases/integration/shadowsocks_integration.rs"]
|
|
mod shadowsocks;
|
|
#[path = "cases/integration/shadowsocks_client_udp_test.rs"]
|
|
mod shadowsocks_client_udp;
|
|
#[path = "cases/integration/shadowsocks_cross_protocol_udp_test.rs"]
|
|
mod shadowsocks_cross_protocol_udp;
|
|
#[path = "cases/integration/shadowsocks_uot_integration.rs"]
|
|
mod shadowsocks_uot;
|
|
#[path = "cases/integration/shadowsocks_uot_edge_cases.rs"]
|
|
mod shadowsocks_uot_edge_cases;
|
|
#[path = "cases/integration/shadowtls_integration.rs"]
|
|
mod shadowtls;
|
|
#[path = "cases/integration/snell_integration.rs"]
|
|
mod snell;
|
|
#[path = "cases/integration/socks_integration.rs"]
|
|
mod socks;
|
|
#[path = "cases/integration/socks5_udp_associate_test.rs"]
|
|
mod socks5_udp_associate;
|
|
#[path = "cases/integration/socks_uot_integration.rs"]
|
|
mod socks_uot;
|
|
#[path = "cases/integration/tls_hybrid.rs"]
|
|
mod tls_hybrid;
|
|
#[path = "cases/integration/tuic_integration.rs"]
|
|
mod tuic;
|
|
#[path = "cases/integration/tuic_udp_integration.rs"]
|
|
mod tuic_udp;
|
|
#[path = "cases/integration/udp_protocol_routing.rs"]
|
|
mod udp_protocol_routing;
|
|
#[path = "cases/integration/vless_integration.rs"]
|
|
mod vless;
|
|
#[path = "cases/integration/vless_xudp_integration.rs"]
|
|
mod vless_xudp;
|
|
#[path = "cases/integration/vless_xudp_edge_cases.rs"]
|
|
mod vless_xudp_edge_cases;
|
|
#[path = "cases/integration/vless_xudp_hostname_test.rs"]
|
|
mod vless_xudp_hostname;
|
|
#[path = "cases/integration/vless_xudp_multiip_response_test.rs"]
|
|
mod vless_xudp_multiip_response;
|
|
#[path = "cases/integration/vless_xudp_realistic_mosh_test.rs"]
|
|
mod vless_xudp_realistic_mosh;
|
|
#[path = "cases/integration/vless_xudp_true_multiplexing.rs"]
|
|
mod vless_xudp_true_multiplexing;
|
|
#[path = "cases/integration/vmess_integration.rs"]
|
|
mod vmess;
|
|
#[path = "cases/integration/vmess_xudp_integration.rs"]
|
|
mod vmess_xudp;
|
|
#[cfg(unix)]
|
|
#[path = "cases/integration/wireguard_integration.rs"]
|
|
mod wireguard;
|
|
#[cfg(unix)]
|
|
#[path = "cases/wireguard_support.rs"]
|
|
mod wireguard_support;
|