Files
MasterHttpRelayVPN-RUST/android/app
Shin (Former Aleph) 8d2f90b0a7 v1.1.4: YouTube video streaming — expanded SNI-rewrite list + parallel Range fetcher (#56)
Users of the upstream Python port
(github.com/masterking32/MasterHttpRelayVPN) reported that YouTube
videos render fine through theirs while the Rust port stalls. Diff
against the Python source exposed two substantive gaps we were
missing:

1. SNI-rewrite list was much shorter than upstream. Added:
     gvt1.com, gvt2.com   — Google Video Transport CDN (YouTube
                             video chunks + Chrome auto-updates +
                             Play Store downloads)
     doubleclick.net      — ads
     googlesyndication.com
     googleadservices.com
     google-analytics.com
     googletagmanager.com
     googletagservices.com
     fonts.googleapis.com — already covered by the googleapis.com
                             suffix but mirrored explicitly for clarity
   These are all on Google's GFE IP pool, so they route over the
   existing SNI-rewrite tunnel (direct to `google_ip` with SNI
   rewritten) instead of the quota-limited Apps Script relay.

2. No range-parallel download path. Apps Script's per-call latency
   is ~flat (~1-2s regardless of payload), so a 10 MB single GET
   takes ~10s round-trip; the player times out or stutters. Upstream
   Python's `relay_parallel` probes with Range: bytes=0-262143, and
   if the origin supports ranges, fetches the rest in parallel
   256 KB chunks (up to 16 concurrent). Ported that logic as a new
   `DomainFronter::relay_parallel_range` method, called from both
   MITM-HTTPS and plain-HTTP handlers for GETs without a body. Rust
   implementation uses `futures::stream::buffered` for ordered
   bounded-concurrency fan-out; cache layer already skips Range
   requests (added defensive check in relay() too).

The existing single-script fan-out (`parallel_relay` config) is
complementary — it races N script IDs for each individual chunk,
where the range-parallel path slices the overall download. Both are
active simultaneously when both are configured.

Helper functions for HTTP parsing (split_response,
parse_content_range_total, rewrite_206_to_200, assemble_full_200)
mirror the Python equivalents.

No behaviour change for non-GET requests; no cache-correctness
changes for GETs that don't return 206.
2026-04-23 13:37:58 +03:00
..