mirror of
https://github.com/by-sonic/tglock.git
synced 2026-09-22 10:28:29 +03:00
fix(media): use native MTProto for CDN203 and retain recent diagnostics
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# Manual protocol probe
|
||||
|
||||
`scripts/probe_proxy.mjs` uses only Node.js built-ins and is independent of the
|
||||
Rust transport helpers. It connects to an already running TGLock listener at
|
||||
`127.0.0.1`, sends one unauthenticated `req_pq_multi` through a secret-protected
|
||||
obfuscated2 padded-intermediate stream, and validates the returned `resPQ`, its
|
||||
request nonce, and the lengths of its TL fields. It stops before creating an
|
||||
authorization key. No Telegram account, API ID, API hash or login is needed.
|
||||
|
||||
The secret is read from an explicitly supplied file and is never printed. Use
|
||||
the same secret file as the running CLI. Do not paste proxy links or secret
|
||||
values into public logs.
|
||||
|
||||
```sh
|
||||
# Offline validation first: no network access.
|
||||
node scripts/probe_proxy.mjs --self-test
|
||||
|
||||
# Start a local CLI separately, using a persistent secret file.
|
||||
tglock-cli --port 18080 --secret-file /private/path/tglock-secret
|
||||
|
||||
# Ordinary DC, media route, and CDN route; run each explicitly.
|
||||
node scripts/probe_proxy.mjs --port 18080 --secret-file /private/path/tglock-secret --dc 2
|
||||
node scripts/probe_proxy.mjs --port 18080 --secret-file /private/path/tglock-secret --dc -4 --fragment-size 7
|
||||
node scripts/probe_proxy.mjs --port 18080 --secret-file /private/path/tglock-secret --dc 203
|
||||
```
|
||||
|
||||
On Windows, supply the downloaded CLI executable and a Windows file path in the
|
||||
same commands. Supported DC values are `1` through `5` and `203`; a negative
|
||||
value requests a media route. `--timeout-ms` defaults to 15000 and is bounded at
|
||||
120000. The response is bounded at 2 MiB. `--fragment-size 7` sends small writes
|
||||
with 2 ms gaps to exercise stream fragmentation; TCP can still combine writes.
|
||||
|
||||
A successful JSON report contains `response: "resPQ"`, `nonceMatches: true`, the
|
||||
requested DC, the public RSA fingerprint count, and elapsed time. Exit status 1
|
||||
means connection, timeout, decryption/framing or response validation failed.
|
||||
The ordinary CI suite does not run this live probe.
|
||||
|
||||
Success demonstrates a correctly relayed protocol exchange. It does **not**
|
||||
authenticate the responding server, prove its DC identity, log into an account,
|
||||
or verify message sending, media downloads or Android lifecycle. In particular,
|
||||
`requestedDc` describes the request, not an independently confirmed backend.
|
||||
|
||||
## Isolate CDN transport failures
|
||||
|
||||
To distinguish an unavailable CDN WebSocket endpoint from an unavailable CDN
|
||||
TCP connection, explicitly run:
|
||||
|
||||
```sh
|
||||
node scripts/probe_proxy.mjs --direct-cdn --dc 203
|
||||
```
|
||||
|
||||
This optional mode bypasses local TGLock and connects **only** to the pinned
|
||||
Telegram CDN address `91.105.192.100:443`, using raw obfuscated2 TCP without a
|
||||
proxy secret or TLS. It supports no arbitrary host. It performs the same single
|
||||
unauthenticated exchange and still does not prove account or media operation.
|
||||
The parser accepts trailing bytes after the complete `resPQ` TL object because
|
||||
live CDN replies can include random padding in the declared message length.
|
||||
|
||||
Protocol references: [handshake initiation](https://core.telegram.org/mtproto/auth_key),
|
||||
[obfuscated transports](https://core.telegram.org/mtproto/mtproto-transports),
|
||||
and [unencrypted messages](https://core.telegram.org/mtproto/description#unencrypted-message).
|
||||
Reference in New Issue
Block a user