Some checks failed
Build three ZaStoGram APKs / build (arm64-v8a, ZaStoGram-standalone-arm64-v8a, Arm64, arm64) (push) Has been cancelled
Build three ZaStoGram APKs / build (armeabi-v7a, ZaStoGram-standalone-armeabi-v7a, Armv7, armv7) (push) Has been cancelled
Build three ZaStoGram APKs / build (x86, ZaStoGram-standalone-x86, X86, x86) (push) Has been cancelled
ZaStoGram source guards / guards (push) Has been cancelled
На большинстве сетей транспорт и нужен, а требование включать его вручную означало, что обходом пользуются только те, кто о нём узнал. Риск, из-за которого он был выключен, теперь закрыт: если релей датацентра недоступен, клиент сам отходит на прямое соединение для этого датацентра, а не оставляет его содержимое без загрузки. Осознанный выбор пользователя сохраняется: значение берётся из настроек, если тумблер уже трогали. Desktop-форк работает так с самого начала, теперь поведение клиентов совпадает. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
70 lines
3.8 KiB
Python
70 lines
3.8 KiB
Python
#!/usr/bin/env python3
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
SHARED_CONFIG = ROOT / "TMessagesProj/src/main/java/org/telegram/messenger/SharedConfig.java"
|
|
PROXY_LIST = ROOT / "TMessagesProj/src/main/java/org/telegram/ui/ProxyListActivity.java"
|
|
WSS_CPP = ROOT / "TMessagesProj/jni/tgnet/wss/WssSocket.cpp"
|
|
CONNECTION_CPP = ROOT / "TMessagesProj/jni/tgnet/Connection.cpp"
|
|
CONNECTIONS_JAVA = ROOT / "TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java"
|
|
FILE_LOADER = ROOT / "TMessagesProj/src/main/java/org/telegram/messenger/FileLoadOperation.java"
|
|
|
|
|
|
def require(condition: bool, message: str) -> None:
|
|
if not condition:
|
|
print(f"FAIL: {message}", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
|
|
def main() -> None:
|
|
shared_config = SHARED_CONFIG.read_text(encoding="utf-8", errors="replace")
|
|
proxy_list = PROXY_LIST.read_text(encoding="utf-8", errors="replace")
|
|
wss_cpp = WSS_CPP.read_text(encoding="utf-8", errors="replace")
|
|
connection_cpp = CONNECTION_CPP.read_text(encoding="utf-8", errors="replace")
|
|
connections_java = CONNECTIONS_JAVA.read_text(encoding="utf-8", errors="replace")
|
|
file_loader = FILE_LOADER.read_text(encoding="utf-8", errors="replace")
|
|
|
|
require('preferences.getBoolean("wssTransportEnabled", true)' in shared_config
|
|
and "WSS включён по умолчанию" in shared_config,
|
|
"WSS must be enabled by default while keeping an explicit user choice")
|
|
require('preferences.getInt("wssTransportMode"' in shared_config,
|
|
"legacy WSS mode must migrate to the checkbox")
|
|
require('.remove("wssHost")' in shared_config and '.remove("wssPath")' in shared_config,
|
|
"custom gateway keys must be removed during migration")
|
|
require("UseWssTransport" in proxy_list and "wssTransportEnabled" in proxy_list,
|
|
"the official transport must be exposed as a normal checkbox")
|
|
require('prefix = "kws" + std::to_string(dcId)' in wss_cpp,
|
|
"official WSS must generate Telegram DC1-DC5 relay names")
|
|
require("dcId < 1 || dcId > 5" in wss_cpp,
|
|
"official WSS relay catalog must cover exactly DC1-DC5")
|
|
require('mediaConnection ? "-1.web.telegram.org"' in wss_cpp,
|
|
"official WSS must select the media relay variant")
|
|
require("getDatacenterId(), isMediaConnection);" in connection_cpp
|
|
and "wssMediaRoute" not in connection_cpp,
|
|
"WSS relay selection must follow the selected auth realm; uploads use regular kwsN")
|
|
require("forceProxyLikeInitForWss" not in connection_cpp
|
|
and "if (useSecret != 0)" in connection_cpp,
|
|
"direct WSS must not inject the MTProxy-only DC marker")
|
|
require("dcId < 1 || dcId > 5" in wss_cpp and "testBackend" in wss_cpp,
|
|
"unsupported/test DCs must stay on their normal transport")
|
|
require("officialRelayIpForDc" in wss_cpp
|
|
and 'return "149.154.167.220"' in wss_cpp
|
|
and "result.relayHostFallback = result.domain" in wss_cpp
|
|
and "result.viaFallback = preferFallback(result)" in wss_cpp,
|
|
"official WSS must use direct Telegram ingress with an automatic hostname fallback")
|
|
require("if (isCurrentTransportWss())" in connection_cpp
|
|
and "useSecret = 0" in connection_cpp,
|
|
"direct WSS must not inherit a TCP dcOption or MTProxy secret")
|
|
require("supportsCdnFileRedirects()" in connections_java
|
|
and "return !SharedConfig.wssTransportEnabled" in connections_java,
|
|
"network layer must disable CDN redirects when WSS cannot route CDN DC ids")
|
|
require("req.cdn_supported = ConnectionsManager.supportsCdnFileRedirects()" in file_loader,
|
|
"file downloads must advertise the active transport's CDN capability")
|
|
|
|
print("WSS official route guard passed.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|