从 KHF 源码提取(必须与服务端兼容):
TLRPC.LAYER = 222BuildVars.APP_ID = 4BuildVars.APP_HASH = "014b35b6184100b085b0d0572f9b5103"ConnectionsManager 负责:
native_init(...) 初始化 MTProto(layer/api_id/设备信息)native_sendRequest(...) 发送 RPC客户端通过 JNI 调用 Native C++ 层实现 MTProto 协议,包括:
MessagesController 负责 dialogs/messages/users/chats 的本地模型与网络请求,典型方法:
text
Client (KHF)
-> TL: auth.sendCode(phone_number, api_id, api_hash, settings)
-> MTProto encrypted message
-> gnetway decrypt + QuickAck + SendDataToSession
-> session decode TLMessage2 -> route to /mtproto.RPCAuthorization via IDMap
-> bff.authorization.AuthSendCode
-> biz.user (check phone registered)
-> status (online sessions)
-> verify-code plugin (sms) OR app code
<- bff returns auth.SentCode or error
<- session wraps rpc_result
<- gnetway encrypts + send back
<- client parses auth.SentCode
text
Client
-> TL: messages.sendMessage / messages.sendMedia / ...
-> gnetway -> session -> bff.messages
-> bff.messages
-> biz_service (dialog/message/chat/user)
-> msg service (异步投递 + Kafka)
-> messenger.msg produces to Kafka Inbox-T
-> inbox consumes Inbox-T, writes inbox/outbox state
-> produces updates to Kafka Sync-T
-> sync consumes Sync-T, decides UpdatesMe/NotMe/PushRpcResult
-> sync calls session (gRPC) to push updates/rpc_result
-> session routes to correct sessionId
-> gnetway encrypt -> client
text
Client
-> files.upload* / upload.getFile
-> bff.files
-> dfs 保存/获取 file parts
-> media 生成缩略图/元数据
-> db 写入 documents/photos/photo_sizes/...
<- 返回 inputFile / fileLocation / document/photo
DFS
- Minio buckets: documents/photos/videos/encryptedfiles
- MiniHttp 0.0.0.0:11701 提供 HTTP 下载入口
错误含义排查方向PHONE_NUMBER_INVALID手机号格式不正确检查国际格式(+86...)PHONE_NUMBER_BANNED手机号被封禁检查 predefined_users 表SESSION_PASSWORD_NEEDED需要两步验证用户设置了密码AUTH_KEY_UNREGISTEREDauth_key 未注册清除客户端数据重新握手CONNECTION_NOT_INITED未调用 initConnection客户端需先发 initConnectionERR_ENTERPRISE_IS_BLOCKED企业版功能锁定需要解除企业版拦截(修改 biz_service 中的企业版检查逻辑)METHOD_NOT_IMPLRPC 方法未实现检查 BFF handler 和 session IDMap 路由是否配置
Teamgram 社区版中部分功能被企业版锁定拦截,表现为:
ERR_ENTERPRISE_IS_BLOCKED 错误checkEnterprise() 函数拦截解锁方法:修改 biz_service 中对应 helper 的企业版检查逻辑,移除或绕过 checkEnterprise() 调用。
TMessagesProj/jni/tgnet/ConnectionsManager.cppTMessagesProj/src/main/java/org/telegram/messenger/MessagesController.javaTMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.javaTMessagesProj/src/main/java/org/telegram/messenger/BuildVars.javaapp/interface/gnetway/app/interface/session/app/bff/app/service/biz/app/messenger/teamgramd/etc/teamgramd/deploy/sql/