[INFO] cloning repository https://github.com/igroykt/cheburproxy
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/igroykt/cheburproxy" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Figroykt%2Fcheburproxy", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Figroykt%2Fcheburproxy'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 8e28af58aed056c42fbf956c32e6e8e200935458
[INFO] testing igroykt/cheburproxy against 1.95.0 for beta-1.96-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Figroykt%2Fcheburproxy" "/workspace/builds/worker-7-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/igroykt/cheburproxy
[INFO] finished tweaking git repo https://github.com/igroykt/cheburproxy
[INFO] tweaked toml for git repo https://github.com/igroykt/cheburproxy written to /workspace/builds/worker-7-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/igroykt/cheburproxy on toolchain 1.95.0
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.95.0" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/igroykt/cheburproxy already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.95.0" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded unicode-ident v1.0.20
[INFO] [stderr]   Downloaded prost-derive v0.13.5
[INFO] [stderr]   Downloaded geosite-rs v0.1.6
[INFO] [stderr]   Downloaded prost v0.13.5
[INFO] [stderr]   Downloaded iana-time-zone v0.1.64
[INFO] [stderr]   Downloaded arc-swap v1.8.1
[INFO] [stderr]   Downloaded humantime v2.3.0
[INFO] [stderr]   Downloaded openssl-sys v0.9.110
[INFO] [stderr]   Downloaded resolv-conf v0.7.5
[INFO] [stderr]   Downloaded ipnetwork v0.18.0
[INFO] [stderr]   Downloaded rustls-native-certs v0.7.3
[INFO] [stderr]   Downloaded maxminddb v0.23.0
[INFO] [stderr]   Downloaded patricia_tree v0.6.3
[INFO] [stderr]   Downloaded widestring v1.2.1
[INFO] [stderr]   Downloaded cc v1.2.43
[INFO] [stderr]   Downloaded openssl v0.10.74
[INFO] [stderr]   Downloaded chrono v0.4.42
[INFO] [stderr]   Downloaded openssl-src v300.5.4+3.5.4
[INFO] [stderr]   Downloaded aws-lc-sys v0.32.3
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.95.0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 753e9cdeb3ba48090c27c75cfe070f1e4a454acdd4acebe74387c452ee062125
[INFO] running `Command { std: "docker" "start" "-a" "753e9cdeb3ba48090c27c75cfe070f1e4a454acdd4acebe74387c452ee062125", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "753e9cdeb3ba48090c27c75cfe070f1e4a454acdd4acebe74387c452ee062125", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "753e9cdeb3ba48090c27c75cfe070f1e4a454acdd4acebe74387c452ee062125", kill_on_drop: false }`
[INFO] [stdout] 753e9cdeb3ba48090c27c75cfe070f1e4a454acdd4acebe74387c452ee062125
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.95.0" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] dd3f3b151ccc02fa1d690e7258e0c6d38a811fbce3ddf6a55bace524cbf7ded7
[INFO] running `Command { std: "docker" "start" "-a" "dd3f3b151ccc02fa1d690e7258e0c6d38a811fbce3ddf6a55bace524cbf7ded7", kill_on_drop: false }`
[INFO] [stderr]    Compiling unicode-ident v1.0.20
[INFO] [stderr]    Compiling libc v0.2.182
[INFO] [stderr]    Compiling memchr v2.7.6
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling futures-io v0.3.31
[INFO] [stderr]    Compiling futures-task v0.3.31
[INFO] [stderr]    Compiling futures-channel v0.3.31
[INFO] [stderr]    Compiling proc-macro2 v1.0.103
[INFO] [stderr]    Compiling tracing-core v0.1.34
[INFO] [stderr]    Compiling rustls v0.21.12
[INFO] [stderr]    Compiling zerocopy v0.8.27
[INFO] [stderr]    Compiling indexmap v2.12.0
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling quote v1.0.41
[INFO] [stderr]    Compiling anyhow v1.0.100
[INFO] [stderr]    Compiling syn v2.0.108
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling crc32fast v1.5.0
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling aho-corasick v1.1.3
[INFO] [stderr]    Compiling memoffset v0.9.1
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]    Compiling adler2 v2.0.1
[INFO] [stderr]    Compiling simd-adler32 v0.3.7
[INFO] [stderr]    Compiling jobserver v0.1.34
[INFO] [stderr]    Compiling rustls v0.23.34
[INFO] [stderr]    Compiling regex-syntax v0.8.8
[INFO] [stderr]    Compiling tinyvec_macros v0.1.1
[INFO] [stderr]    Compiling tinyvec v1.10.0
[INFO] [stderr]    Compiling cc v1.2.43
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling getrandom v0.2.16
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling signal-hook-registry v1.4.6
[INFO] [stderr]    Compiling mio v1.1.0
[INFO] [stderr]    Compiling socket2 v0.6.1
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling cmake v0.1.54
[INFO] [stderr]    Compiling openssl-src v300.5.4+3.5.4
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling socket2 v0.5.10
[INFO] [stderr]    Compiling regex-automata v0.4.13
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling aws-lc-sys v0.32.3
[INFO] [stderr]    Compiling openssl-sys v0.9.110
[INFO] [stderr]    Compiling winnow v0.7.13
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling serde_json v1.0.145
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling data-encoding v2.9.0
[INFO] [stderr]    Compiling geosite-rs v0.1.6
[INFO] [stderr]    Compiling linked-hash-map v0.5.6
[INFO] [stderr]    Compiling openssl v0.10.74
[INFO] [stderr]    Compiling bitflags v2.10.0
[INFO] [stderr]    Compiling lru-cache v0.1.2
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling regex v1.12.2
[INFO] [stderr]    Compiling flate2 v1.1.5
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.0
[INFO] [stderr]    Compiling zerovec-derive v0.11.1
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling tokio v1.48.0
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling yoke v0.8.0
[INFO] [stderr]    Compiling tracing-attributes v0.1.30
[INFO] [stderr]    Compiling zerovec v0.11.4
[INFO] [stderr]    Compiling futures-util v0.3.31
[INFO] [stderr]    Compiling zerotrie v0.2.2
[INFO] [stderr]    Compiling tinystr v0.8.1
[INFO] [stderr]    Compiling potential_utf v0.1.3
[INFO] [stderr]    Compiling icu_locale_core v2.0.0
[INFO] [stderr]    Compiling icu_collections v2.0.0
[INFO] [stderr]    Compiling sct v0.7.1
[INFO] [stderr]    Compiling icu_provider v2.0.0
[INFO] [stderr]    Compiling rustls-webpki v0.101.7
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling icu_properties v2.0.1
[INFO] [stderr]    Compiling icu_normalizer v2.0.0
[INFO] [stderr]    Compiling tracing v0.1.41
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling enum-as-inner v0.6.1
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling url v2.5.7
[INFO] [stderr]    Compiling prost-derive v0.13.5
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling tokio-socks v0.5.2
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling futures-executor v0.3.31
[INFO] [stderr]    Compiling tokio-rustls v0.24.1
[INFO] [stderr]    Compiling h2 v0.3.27
[INFO] [stderr]    Compiling hickory-proto v0.24.4
[INFO] [stderr]    Compiling prost v0.13.5
[INFO] [stderr]    Compiling ipnetwork v0.18.0
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling webpki v0.22.4
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling is-terminal v0.4.17
[INFO] [stderr]    Compiling rustls-pemfile v2.2.0
[INFO] [stderr]    Compiling encoding_rs v0.8.35
[INFO] [stderr]    Compiling sync_wrapper v0.1.2
[INFO] [stderr]    Compiling webpki-roots v0.25.4
[INFO] [stderr]    Compiling byteorder v1.5.0
[INFO] [stderr]    Compiling termcolor v1.4.1
[INFO] [stderr]    Compiling resolv-conf v0.7.5
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling hyper v0.14.32
[INFO] [stderr]    Compiling humantime v2.3.0
[INFO] [stderr]    Compiling iana-time-zone v0.1.64
[INFO] [stderr]    Compiling env_logger v0.10.2
[INFO] [stderr]    Compiling chrono v0.4.42
[INFO] [stderr]    Compiling dashmap v5.5.3
[INFO] [stderr]    Compiling hickory-resolver v0.24.4
[INFO] [stderr]    Compiling patricia_tree v0.6.3
[INFO] [stderr]    Compiling hdrhistogram v7.5.4
[INFO] [stderr]    Compiling rustls-native-certs v0.7.3
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling arc-swap v1.8.1
[INFO] [stderr]    Compiling hyper-rustls v0.24.2
[INFO] [stderr]    Compiling reqwest v0.11.27
[INFO] [stderr]    Compiling nix v0.27.1
[INFO] [stderr]    Compiling webpki-roots v0.22.6
[INFO] [stderr]    Compiling maxminddb v0.23.0
[INFO] [stderr]    Compiling futures v0.3.31
[INFO] [stderr]    Compiling aws-lc-rs v1.14.1
[INFO] [stderr]    Compiling rustls-webpki v0.103.7
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling cheburproxy v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]    --> src/udp_proxy.rs:530:1
[INFO] [stdout]     |
[INFO] [stdout] 530 | / /// Global pool of TCP tunnels, keyed by proxy address.
[INFO] [stdout] 531 | | /// Allows multiple UDP sessions to share a single TCP tunnel to the same proxy.
[INFO] [stdout]     | |_-------------------------------------------------------------------------------^
[INFO] [stdout]     |   |
[INFO] [stdout]     |   rustdoc does not generate documentation for macro invocations
[INFO] [stdout]     |
[INFO] [stdout]     = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion
[INFO] [stdout]     = note: `#[warn(unused_doc_comments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `target_addr`
[INFO] [stdout]     --> src/cheburproxy_server.rs:1036:33
[INFO] [stdout]      |
[INFO] [stdout] 1036 | ...   let (target_stream, target_addr) = match timeout(DEFAULT_HANDSHAKE_TIMEOUT, handle_socks5_connect_request_after_header(&mut ...
[INFO] [stdout]      |                           ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_addr`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `known_targets_cleanup`
[INFO] [stdout]    --> src/cheburproxy_server.rs:912:9
[INFO] [stdout]     |
[INFO] [stdout] 912 |     let known_targets_cleanup = known_targets.clone();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_known_targets_cleanup`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SOCKS_AUTH_NO_AUTH` is never used
[INFO] [stdout]   --> src/cheburproxy_server.rs:46:7
[INFO] [stdout]    |
[INFO] [stdout] 46 | const SOCKS_AUTH_NO_AUTH: u8 = 0;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SOCKS_AUTH_USERNAME_PASSWORD` is never used
[INFO] [stdout]   --> src/cheburproxy_server.rs:47:7
[INFO] [stdout]    |
[INFO] [stdout] 47 | const SOCKS_AUTH_USERNAME_PASSWORD: u8 = 2;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SOCKS_AUTH_NO_ACCEPTABLE` is never used
[INFO] [stdout]   --> src/cheburproxy_server.rs:48:7
[INFO] [stdout]    |
[INFO] [stdout] 48 | const SOCKS_AUTH_NO_ACCEPTABLE: u8 = 0xFF;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_domain_to_ip` is never used
[INFO] [stdout]    --> src/cheburproxy_server.rs:348:10
[INFO] [stdout]     |
[INFO] [stdout] 348 | async fn resolve_domain_to_ip(domain: String) -> ProxyResult<Option<std::net::IpAddr>> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: comparison is useless due to type limits
[INFO] [stdout]    --> src/cheburproxy_server.rs:157:25
[INFO] [stdout]     |
[INFO] [stdout] 157 |         if port == 0 || port > 65535 {
[INFO] [stdout]     |                         ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_comparisons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: comparison is useless due to type limits
[INFO] [stdout]    --> src/cheburproxy_server.rs:166:30
[INFO] [stdout]     |
[INFO] [stdout] 166 |             if uport == 0 || uport > 65535 || uport == port {
[INFO] [stdout]     |                              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `AsyncBufReadExt`
[INFO] [stdout]   --> src/rule.rs:14:46
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::io::{AsyncReadExt, AsyncWriteExt, AsyncBufReadExt};
[INFO] [stdout]    |                                              ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `target_display`
[INFO] [stdout]    --> src/proxy.rs:874:17
[INFO] [stdout]     |
[INFO] [stdout] 874 |             let target_display = format_target(&connection_info.routing_domain, target_port);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_display`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `total_domains` is assigned to, but never used
[INFO] [stdout]     --> src/rule.rs:1846:9
[INFO] [stdout]      |
[INFO] [stdout] 1846 |     let mut total_domains = 0usize;
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: consider using `_total_domains` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `total_domains` is never read
[INFO] [stdout]     --> src/rule.rs:1865:9
[INFO] [stdout]      |
[INFO] [stdout] 1865 |         total_domains += num_domains;
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout]      = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `timeout`
[INFO] [stdout]    --> src/main.rs:473:64
[INFO] [stdout]     |
[INFO] [stdout] 473 | async fn establish_udp_associate(proxy: &crate::router::Proxy, timeout: Duration) -> Result<SocketAddr, ProxyError> {
[INFO] [stdout]     |                                                                ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_timeout`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_tls`
[INFO] [stdout]     --> src/main.rs:1434:34
[INFO] [stdout]      |
[INFO] [stdout] 1434 | ...                   let (is_tls, sni_domain, use_reverse_dns) = match peek_result {
[INFO] [stdout]      |                            ^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_tls`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `username`
[INFO] [stdout]    --> src/main.rs:594:9
[INFO] [stdout]     |
[INFO] [stdout] 594 |     let username = general.and_then(|g| g.get("username")).and_then(|v| v.as_str())
[INFO] [stdout]     |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_username`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `password`
[INFO] [stdout]    --> src/main.rs:597:9
[INFO] [stdout]     |
[INFO] [stdout] 597 |     let password = general.and_then(|g| g.get("password")).and_then(|v| v.as_str())
[INFO] [stdout]     |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_password`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dns_enabled`
[INFO] [stdout]    --> src/main.rs:603:9
[INFO] [stdout]     |
[INFO] [stdout] 603 |     let dns_enabled = parsed.get("client")
[INFO] [stdout]     |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_dns_enabled`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dns_listen_port`
[INFO] [stdout]    --> src/main.rs:608:9
[INFO] [stdout]     |
[INFO] [stdout] 608 |     let dns_listen_port = parsed.get("client")
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_dns_listen_port`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `ConnectionPoolError` is more private than the item `proxy::ProxyError::PoolError::0`
[INFO] [stdout]    --> src/proxy.rs:176:23
[INFO] [stdout]     |
[INFO] [stdout] 176 |     PoolError(#[from] ConnectionPoolError),
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^ field `proxy::ProxyError::PoolError::0` is reachable at visibility `pub(crate)`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `ConnectionPoolError` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/proxy.rs:161:1
[INFO] [stdout]     |
[INFO] [stdout] 161 | enum ConnectionPoolError {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_LISTEN_ADDRESS` is never used
[INFO] [stdout]   --> src/main.rs:53:7
[INFO] [stdout]    |
[INFO] [stdout] 53 | const DEFAULT_LISTEN_ADDRESS: &str = "0.0.0.0";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_PORT` is never used
[INFO] [stdout]   --> src/main.rs:54:7
[INFO] [stdout]    |
[INFO] [stdout] 54 | const DEFAULT_PORT: u16 = 12345;
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_DNS_PORT` is never used
[INFO] [stdout]   --> src/main.rs:55:7
[INFO] [stdout]    |
[INFO] [stdout] 55 | const DEFAULT_DNS_PORT: u16 = 53;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_MODE` is never used
[INFO] [stdout]   --> src/main.rs:56:7
[INFO] [stdout]    |
[INFO] [stdout] 56 | const DEFAULT_MODE: &str = "transparent";
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_UPSTREAM_TIMEOUT_SECS` is never used
[INFO] [stdout]   --> src/main.rs:57:7
[INFO] [stdout]    |
[INFO] [stdout] 57 | const DEFAULT_UPSTREAM_TIMEOUT_SECS: u64 = 10;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DNS_CACHE_TTL_SECS` is never used
[INFO] [stdout]   --> src/main.rs:69:7
[INFO] [stdout]    |
[INFO] [stdout] 69 | const DNS_CACHE_TTL_SECS: u64 = 3600; // 1 hour
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DNS_CACHE_FAILURE_TTL_SECS` is never used
[INFO] [stdout]   --> src/main.rs:70:7
[INFO] [stdout]    |
[INFO] [stdout] 70 | const DNS_CACHE_FAILURE_TTL_SECS: u64 = 60; // 1 minute for failures
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DNS_REVERSE_LOOKUP_TIMEOUT_MS` is never used
[INFO] [stdout]   --> src/main.rs:71:7
[INFO] [stdout]    |
[INFO] [stdout] 71 | const DNS_REVERSE_LOOKUP_TIMEOUT_MS: u64 = 200;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DNS_FORWARD_LOOKUP_TIMEOUT_MS` is never used
[INFO] [stdout]   --> src/main.rs:72:7
[INFO] [stdout]    |
[INFO] [stdout] 72 | const DNS_FORWARD_LOOKUP_TIMEOUT_MS: u64 = 100;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DNS_NAMESERVER_IP` is never used
[INFO] [stdout]   --> src/main.rs:73:7
[INFO] [stdout]    |
[INFO] [stdout] 73 | const DNS_NAMESERVER_IP: &str = "8.8.8.8";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CONNECTION_POOL_CLEANUP_INTERVAL_SECS` is never used
[INFO] [stdout]   --> src/main.rs:76:7
[INFO] [stdout]    |
[INFO] [stdout] 76 | const CONNECTION_POOL_CLEANUP_INTERVAL_SECS: u64 = 60;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_CONNECTIONS_PER_PROXY` is never used
[INFO] [stdout]   --> src/main.rs:77:7
[INFO] [stdout]    |
[INFO] [stdout] 77 | const MAX_CONNECTIONS_PER_PROXY: usize = 5;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CONNECTION_TTL_SECS` is never used
[INFO] [stdout]   --> src/main.rs:78:7
[INFO] [stdout]    |
[INFO] [stdout] 78 | const CONNECTION_TTL_SECS: u64 = 60;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DOMAIN_CACHE_TTL_SECS` is never used
[INFO] [stdout]   --> src/main.rs:81:7
[INFO] [stdout]    |
[INFO] [stdout] 81 | const DOMAIN_CACHE_TTL_SECS: u64 = 3600; // 1 hour for UDP relay
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DOMAIN_CACHE_CLEANUP_INTERVAL_SECS` is never used
[INFO] [stdout]   --> src/main.rs:82:7
[INFO] [stdout]    |
[INFO] [stdout] 82 | const DOMAIN_CACHE_CLEANUP_INTERVAL_SECS: u64 = 1800; // 30 minutes
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SOCKS5_BUFFER_SIZE` is never used
[INFO] [stdout]   --> src/main.rs:85:7
[INFO] [stdout]    |
[INFO] [stdout] 85 | const SOCKS5_BUFFER_SIZE: usize = 256;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PEEK_BUFFER_SIZE` is never used
[INFO] [stdout]   --> src/main.rs:86:7
[INFO] [stdout]    |
[INFO] [stdout] 86 | const PEEK_BUFFER_SIZE: usize = 8192;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_EXACT_DOMAINS_TO_CHECK` is never used
[INFO] [stdout]   --> src/main.rs:88:7
[INFO] [stdout]    |
[INFO] [stdout] 88 | const MAX_EXACT_DOMAINS_TO_CHECK: usize = 5;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SOCKS5_VERSION` is never used
[INFO] [stdout]   --> src/main.rs:91:7
[INFO] [stdout]    |
[INFO] [stdout] 91 | const SOCKS5_VERSION: u8 = 5;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SOCKS5_NO_AUTH` is never used
[INFO] [stdout]   --> src/main.rs:92:7
[INFO] [stdout]    |
[INFO] [stdout] 92 | const SOCKS5_NO_AUTH: u8 = 0;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SOCKS5_CONNECT_CMD` is never used
[INFO] [stdout]   --> src/main.rs:93:7
[INFO] [stdout]    |
[INFO] [stdout] 93 | const SOCKS5_CONNECT_CMD: u8 = 1;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SOCKS5_SUCCESS` is never used
[INFO] [stdout]   --> src/main.rs:94:7
[INFO] [stdout]    |
[INFO] [stdout] 94 | const SOCKS5_SUCCESS: u8 = 0;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `domain` is never read
[INFO] [stdout]    --> src/main.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 101 | struct DnsCacheEntry {
[INFO] [stdout]     |        ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 107 |     domain: Option<String>,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `DnsCacheEntry` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AppConfig` is never constructed
[INFO] [stdout]    --> src/main.rs:117:8
[INFO] [stdout]     |
[INFO] [stdout] 117 | struct AppConfig {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `reload_router_config` is never used
[INFO] [stdout]    --> src/main.rs:467:10
[INFO] [stdout]     |
[INFO] [stdout] 467 | async fn reload_router_config(_rule_engine_config: &RuleEngineConfig, _resolver: Arc<InternalDnsResolver>) -> anyhow::Result<RuleEn...
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_CONNECTION_POOL_SIZE` is never used
[INFO] [stdout]   --> src/proxy.rs:36:7
[INFO] [stdout]    |
[INFO] [stdout] 36 | const MAX_CONNECTION_POOL_SIZE: usize = 10;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `PoolExhausted`, `ConnectionTimeout`, and `InvalidProxyConfig` are never constructed
[INFO] [stdout]    --> src/proxy.rs:163:5
[INFO] [stdout]     |
[INFO] [stdout] 161 | enum ConnectionPoolError {
[INFO] [stdout]     |      ------------------- variants in this enum
[INFO] [stdout] 162 |     #[error("Connection pool exhausted")]
[INFO] [stdout] 163 |     PoolExhausted,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 164 |     #[error("Connection timeout")]
[INFO] [stdout] 165 |     ConnectionTimeout,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 166 |     #[error("Invalid proxy configuration")]
[INFO] [stdout] 167 |     InvalidProxyConfig,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ConnectionPoolError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `DnsResolutionError` and `NoRoutingRule` are never constructed
[INFO] [stdout]    --> src/proxy.rs:182:5
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub enum ProxyError {
[INFO] [stdout]     |          ---------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 182 |     DnsResolutionError { domain: String, source: std::io::Error },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 188 |     NoRoutingRule { domain: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ProxyError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cleanup_stale_connections` is never used
[INFO] [stdout]    --> src/proxy.rs:573:4
[INFO] [stdout]     |
[INFO] [stdout] 573 | fn cleanup_stale_connections(key: &ProxyKey) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `maintain_pool_size` is never used
[INFO] [stdout]    --> src/proxy.rs:589:4
[INFO] [stdout]     |
[INFO] [stdout] 589 | fn maintain_pool_size(key: &ProxyKey) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cleanup_all_stale_connections` is never used
[INFO] [stdout]    --> src/proxy.rs:600:8
[INFO] [stdout]     |
[INFO] [stdout] 600 | pub fn cleanup_all_stale_connections() {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `start_pool_cleanup_task` is never used
[INFO] [stdout]    --> src/proxy.rs:626:14
[INFO] [stdout]     |
[INFO] [stdout] 626 | pub async fn start_pool_cleanup_task() {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `record_failure_typed` is never used
[INFO] [stdout]    --> src/proxy_health.rs:270:8
[INFO] [stdout]     |
[INFO] [stdout] 270 | pub fn record_failure_typed(proxy_addr: &str, error: &dyn fmt::Display, failure_type: FailureType) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `subscribe_recovery` is never used
[INFO] [stdout]    --> src/proxy_health.rs:287:8
[INFO] [stdout]     |
[INFO] [stdout] 287 | pub fn subscribe_recovery(proxy_addr: &str) -> watch::Receiver<bool> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `last_recovery_at` is never used
[INFO] [stdout]    --> src/proxy_health.rs:292:8
[INFO] [stdout]     |
[INFO] [stdout] 292 | pub fn last_recovery_at(proxy_addr: &str) -> Option<Instant> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `subscribe_recovery` and `last_recovery_at` are never used
[INFO] [stdout]    --> src/proxy_health.rs:661:12
[INFO] [stdout]     |
[INFO] [stdout] 308 | impl ProxyHealthTracker {
[INFO] [stdout]     | ----------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 661 |     pub fn subscribe_recovery(&self, proxy_addr: &str) -> watch::Receiver<bool> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 678 |     pub fn last_recovery_at(&self, proxy_addr: &str) -> Option<Instant> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_DEBUG_PATTERN_SAMPLES` is never used
[INFO] [stdout]   --> src/rule.rs:80:7
[INFO] [stdout]    |
[INFO] [stdout] 80 | const MAX_DEBUG_PATTERN_SAMPLES: usize = 5;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `InvalidIpAddress` and `RegexCompilationError` are never constructed
[INFO] [stdout]    --> src/rule.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout]  99 | pub enum RuleEngineError {
[INFO] [stdout]     |          --------------- variants in this enum
[INFO] [stdout] 100 |     InvalidDomain(String),
[INFO] [stdout] 101 |     InvalidIpAddress(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     RegexCompilationError(String),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `RuleEngineError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `matches` is never used
[INFO] [stdout]    --> src/rule.rs:403:8
[INFO] [stdout]     |
[INFO] [stdout] 374 | impl DomainPattern {
[INFO] [stdout]     | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 403 |     fn matches(&self, domain: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_config`, `clear_cache`, `get_config`, and `get_routing_decision_async` are never used
[INFO] [stdout]     --> src/rule.rs:441:12
[INFO] [stdout]      |
[INFO] [stdout]  439 | impl RuleEngine {
[INFO] [stdout]      | --------------- associated items in this implementation
[INFO] [stdout]  440 |     /// Create a new RuleEngine from configuration with default settings and a shared DNS resolver
[INFO] [stdout]  441 |     pub fn from_config(cfg: Router, resolver: Arc<InternalDnsResolver>) -> anyhow::Result<Self> {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  974 |     pub fn clear_cache(&self) {
[INFO] [stdout]      |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  995 |     pub fn get_config(&self) -> &RuleEngineConfig {
[INFO] [stdout]      |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1000 |     pub async fn get_routing_decision_async(&self, domain: &str) -> Option<RoutingDecision> {
[INFO] [stdout]      |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `connect_tcp` is never used
[INFO] [stdout]    --> src/transparent.rs:165:14
[INFO] [stdout]     |
[INFO] [stdout] 165 | pub async fn connect_tcp<A: tokio::net::ToSocketAddrs>(addr: A) -> anyhow::Result<tokio::net::TcpStream> {
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `listen` is never read
[INFO] [stdout]    --> src/udp_proxy.rs:121:9
[INFO] [stdout]     |
[INFO] [stdout] 120 | pub struct Config {
[INFO] [stdout]     |            ------ field in this struct
[INFO] [stdout] 121 |     pub listen: String,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Config` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `IP_RECVORIGDSTADDR` is never used
[INFO] [stdout]    --> src/udp_proxy.rs:133:11
[INFO] [stdout]     |
[INFO] [stdout] 133 | pub const IP_RECVORIGDSTADDR: i32 = 20; // Constant to receive original destination in ancillary data (Linux-specific)
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `label` is never used
[INFO] [stdout]    --> src/udp_proxy.rs:170:12
[INFO] [stdout]     |
[INFO] [stdout] 150 | impl FlowType {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn label(&self) -> &'static str {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `proxy_addr` is never used
[INFO] [stdout]    --> src/udp_proxy.rs:205:12
[INFO] [stdout]     |
[INFO] [stdout] 203 | impl SessionRoute {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] 204 |     /// Get proxy server address if this is a proxy route
[INFO] [stdout] 205 |     pub fn proxy_addr(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `client` and `target` are never used
[INFO] [stdout]    --> src/udp_proxy.rs:239:12
[INFO] [stdout]     |
[INFO] [stdout] 232 | impl SessionKey {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 239 |     pub fn client(&self) -> &SocketAddr {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn target(&self) -> &SocketAddr {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_active` is never used
[INFO] [stdout]    --> src/udp_proxy.rs:322:12
[INFO] [stdout]     |
[INFO] [stdout] 300 | impl UdpSession {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 322 |     pub fn is_active(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TLS_HANDSHAKE_HEADER_LEN` is never used
[INFO] [stdout]   --> src/sni.rs:13:7
[INFO] [stdout]    |
[INFO] [stdout] 13 | const TLS_HANDSHAKE_HEADER_LEN: usize = 4;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TLS_VERSION_LEN` is never used
[INFO] [stdout]   --> src/sni.rs:14:7
[INFO] [stdout]    |
[INFO] [stdout] 14 | const TLS_VERSION_LEN: usize = 2;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `UnsupportedTlsVersion` is never constructed
[INFO] [stdout]   --> src/sni.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub enum SniError {
[INFO] [stdout]    |          -------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 23 |     UnsupportedTlsVersion,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SniError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `read_u32_be` is never used
[INFO] [stdout]    --> src/sni.rs:121:8
[INFO] [stdout]     |
[INFO] [stdout]  89 | impl<'a> TlsParser<'a> {
[INFO] [stdout]     | ---------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 121 |     fn read_u32_be(&mut self) -> Result<u32, SniError> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_sni_legacy` is never used
[INFO] [stdout]    --> src/sni.rs:237:8
[INFO] [stdout]     |
[INFO] [stdout] 237 | pub fn extract_sni_legacy(data: &[u8]) -> anyhow::Result<Option<String>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `has_mapping` and `hardcoded_domains` are never used
[INFO] [stdout]   --> src/dns_protocols/bootstrap.rs:83:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl BootstrapResolver {
[INFO] [stdout]    | ---------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 83 |     pub fn has_mapping(&self, domain: &str) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 88 |     pub fn hardcoded_domains(&self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `bootstrap` is never read
[INFO] [stdout]    --> src/dns_resolver.rs:178:5
[INFO] [stdout]     |
[INFO] [stdout] 173 | pub struct InternalDnsResolver {
[INFO] [stdout]     |            ------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 178 |     bootstrap: Option<Arc<BootstrapResolver>>,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `clear_cache` and `cache_stats` are never used
[INFO] [stdout]    --> src/dns_resolver.rs:424:12
[INFO] [stdout]     |
[INFO] [stdout] 181 | impl InternalDnsResolver {
[INFO] [stdout]     | ------------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 424 |     pub fn clear_cache(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 431 |     pub fn cache_stats(&self) -> (usize, usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `cache_stats` is never used
[INFO] [stdout]    --> src/dns_proxy.rs:528:12
[INFO] [stdout]     |
[INFO] [stdout]  98 | impl DnsProxy {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 528 |     pub fn cache_stats(&self) -> (usize, usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: comparison is useless due to type limits
[INFO] [stdout]    --> src/router.rs:140:37
[INFO] [stdout]     |
[INFO] [stdout] 140 |         if self.server_port == 0 || self.server_port > 65535 {
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_comparisons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 8m 23s
[INFO] running `Command { std: "docker" "inspect" "dd3f3b151ccc02fa1d690e7258e0c6d38a811fbce3ddf6a55bace524cbf7ded7", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "dd3f3b151ccc02fa1d690e7258e0c6d38a811fbce3ddf6a55bace524cbf7ded7", kill_on_drop: false }`
[INFO] [stdout] dd3f3b151ccc02fa1d690e7258e0c6d38a811fbce3ddf6a55bace524cbf7ded7
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.95.0" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 17d3d26bf5c01501eaaf9445708d5764fface7abf1c4309fad82fe874be3bd6e
[INFO] running `Command { std: "docker" "start" "-a" "17d3d26bf5c01501eaaf9445708d5764fface7abf1c4309fad82fe874be3bd6e", kill_on_drop: false }`
[INFO] [stderr]    Compiling cheburproxy v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused variable: `target_addr`
[INFO] [stdout]     --> src/cheburproxy_server.rs:1036:33
[INFO] [stdout]      |
[INFO] [stdout] 1036 | ...   let (target_stream, target_addr) = match timeout(DEFAULT_HANDSHAKE_TIMEOUT, handle_socks5_connect_request_after_header(&mut ...
[INFO] [stdout]      |                           ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_addr`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `known_targets_cleanup`
[INFO] [stdout]    --> src/cheburproxy_server.rs:912:9
[INFO] [stdout]     |
[INFO] [stdout] 912 |     let known_targets_cleanup = known_targets.clone();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_known_targets_cleanup`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SOCKS_AUTH_NO_AUTH` is never used
[INFO] [stdout]   --> src/cheburproxy_server.rs:46:7
[INFO] [stdout]    |
[INFO] [stdout] 46 | const SOCKS_AUTH_NO_AUTH: u8 = 0;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SOCKS_AUTH_USERNAME_PASSWORD` is never used
[INFO] [stdout]   --> src/cheburproxy_server.rs:47:7
[INFO] [stdout]    |
[INFO] [stdout] 47 | const SOCKS_AUTH_USERNAME_PASSWORD: u8 = 2;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SOCKS_AUTH_NO_ACCEPTABLE` is never used
[INFO] [stdout]   --> src/cheburproxy_server.rs:48:7
[INFO] [stdout]    |
[INFO] [stdout] 48 | const SOCKS_AUTH_NO_ACCEPTABLE: u8 = 0xFF;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_domain_to_ip` is never used
[INFO] [stdout]    --> src/cheburproxy_server.rs:348:10
[INFO] [stdout]     |
[INFO] [stdout] 348 | async fn resolve_domain_to_ip(domain: String) -> ProxyResult<Option<std::net::IpAddr>> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: comparison is useless due to type limits
[INFO] [stdout]    --> src/cheburproxy_server.rs:157:25
[INFO] [stdout]     |
[INFO] [stdout] 157 |         if port == 0 || port > 65535 {
[INFO] [stdout]     |                         ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_comparisons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: comparison is useless due to type limits
[INFO] [stdout]    --> src/cheburproxy_server.rs:166:30
[INFO] [stdout]     |
[INFO] [stdout] 166 |             if uport == 0 || uport > 65535 || uport == port {
[INFO] [stdout]     |                              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]    --> src/udp_proxy.rs:530:1
[INFO] [stdout]     |
[INFO] [stdout] 530 | / /// Global pool of TCP tunnels, keyed by proxy address.
[INFO] [stdout] 531 | | /// Allows multiple UDP sessions to share a single TCP tunnel to the same proxy.
[INFO] [stdout]     | |_-------------------------------------------------------------------------------^
[INFO] [stdout]     |   |
[INFO] [stdout]     |   rustdoc does not generate documentation for macro invocations
[INFO] [stdout]     |
[INFO] [stdout]     = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion
[INFO] [stdout]     = note: `#[warn(unused_doc_comments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this function takes 3 arguments but 2 arguments were supplied
[INFO] [stdout]    --> src/dns_proxy.rs:933:30
[INFO] [stdout]     |
[INFO] [stdout] 933 |         let proxy = Arc::new(DnsProxy::new(proxy_config, resolver));
[INFO] [stdout]     |                              ^^^^^^^^^^^^^------------------------ argument #3 of type `std::sync::Arc<DashMap<std::net::IpAddr, (std::string::String, std::time::Instant)>>` is missing
[INFO] [stdout]     |
[INFO] [stdout] note: associated function defined here
[INFO] [stdout]    --> src/dns_proxy.rs:100:12
[INFO] [stdout]     |
[INFO] [stdout] 100 |     pub fn new(config: DnsProxyConfig, resolver: Arc<InternalDnsResolver>, domain_cache: DomainCache) -> Self {
[INFO] [stdout]     |            ^^^                                                             -------------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 933 |         let proxy = Arc::new(DnsProxy::new(proxy_config, resolver, /* std::sync::Arc<DashMap<std::net::IpAddr, (std::string::String, std::time::Instant)>> */));
[INFO] [stdout]     |                                                                  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `AsyncBufReadExt`
[INFO] [stdout]   --> src/rule.rs:14:46
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::io::{AsyncReadExt, AsyncWriteExt, AsyncBufReadExt};
[INFO] [stdout]    |                                              ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `target_display`
[INFO] [stdout]    --> src/proxy.rs:874:17
[INFO] [stdout]     |
[INFO] [stdout] 874 |             let target_display = format_target(&connection_info.routing_domain, target_port);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_display`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `total_domains` is assigned to, but never used
[INFO] [stdout]     --> src/rule.rs:1846:9
[INFO] [stdout]      |
[INFO] [stdout] 1846 |     let mut total_domains = 0usize;
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: consider using `_total_domains` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `total_domains` is never read
[INFO] [stdout]     --> src/rule.rs:1865:9
[INFO] [stdout]      |
[INFO] [stdout] 1865 |         total_domains += num_domains;
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = help: maybe it is overwritten before being read?
[INFO] [stdout]      = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `timeout`
[INFO] [stdout]    --> src/main.rs:473:64
[INFO] [stdout]     |
[INFO] [stdout] 473 | async fn establish_udp_associate(proxy: &crate::router::Proxy, timeout: Duration) -> Result<SocketAddr, ProxyError> {
[INFO] [stdout]     |                                                                ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_timeout`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_tls`
[INFO] [stdout]     --> src/main.rs:1434:34
[INFO] [stdout]      |
[INFO] [stdout] 1434 | ...                   let (is_tls, sni_domain, use_reverse_dns) = match peek_result {
[INFO] [stdout]      |                            ^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_tls`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `username`
[INFO] [stdout]    --> src/main.rs:594:9
[INFO] [stdout]     |
[INFO] [stdout] 594 |     let username = general.and_then(|g| g.get("username")).and_then(|v| v.as_str())
[INFO] [stdout]     |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_username`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `password`
[INFO] [stdout]    --> src/main.rs:597:9
[INFO] [stdout]     |
[INFO] [stdout] 597 |     let password = general.and_then(|g| g.get("password")).and_then(|v| v.as_str())
[INFO] [stdout]     |         ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_password`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dns_enabled`
[INFO] [stdout]    --> src/main.rs:603:9
[INFO] [stdout]     |
[INFO] [stdout] 603 |     let dns_enabled = parsed.get("client")
[INFO] [stdout]     |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_dns_enabled`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `dns_listen_port`
[INFO] [stdout]    --> src/main.rs:608:9
[INFO] [stdout]     |
[INFO] [stdout] 608 |     let dns_listen_port = parsed.get("client")
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_dns_listen_port`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0061`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `cheburproxy` (bin "cheburproxy" test) due to 1 previous error; 11 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "17d3d26bf5c01501eaaf9445708d5764fface7abf1c4309fad82fe874be3bd6e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "17d3d26bf5c01501eaaf9445708d5764fface7abf1c4309fad82fe874be3bd6e", kill_on_drop: false }`
[INFO] [stdout] 17d3d26bf5c01501eaaf9445708d5764fface7abf1c4309fad82fe874be3bd6e
