From 60d2934bcf87d20aefed25c48f68dfe604cec2ca Mon Sep 17 00:00:00 2001 From: Sergey Prokhorov Date: Wed, 23 Nov 2022 01:34:31 +0100 Subject: [PATCH] Accept unexpected RPC packets from Telegram backend --- src/mtp_down_conn.erl | 6 +++++- src/mtp_rpc.erl | 6 ++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/mtp_down_conn.erl b/src/mtp_down_conn.erl index 4579115..3ddb912 100644 --- a/src/mtp_down_conn.erl +++ b/src/mtp_down_conn.erl @@ -286,7 +286,11 @@ handle_rpc({close_ext, ConnId}, St) -> St1 end; handle_rpc({simple_ack, ConnId, Confirm}, S) -> - up_send({simple_ack, self(), Confirm}, ConnId, S). + up_send({simple_ack, self(), Confirm}, ConnId, S); +handle_rpc({unknown, Tag, Tail}, S) -> + ?log(info, "Unknown packet from backend. Tag ~p, tail: ~p", [Tag, Tail]), + S. + -spec down_send(iodata(), #state{}) -> {ok, #state{}}. down_send(Packet, #state{sock = Sock, codec = Codec, dc_id = DcId} = St) -> diff --git a/src/mtp_rpc.erl b/src/mtp_rpc.erl index bd812ce..9562a37 100644 --- a/src/mtp_rpc.erl +++ b/src/mtp_rpc.erl @@ -86,7 +86,7 @@ encode_handshake({handshake, SenderPID, PeerPID}) -> %% It expects that packet segmentation was done on previous layer %% See mtproto/mtproto-proxy.c:process_client_packet --spec decode_packet(binary()) -> packet() | error. +-spec decode_packet(binary()) -> packet() | {unknown, binary(), binary()}. decode_packet(<>) -> %% mtproto/mtproto-proxy.c:client_send_message {proxy_ans, ConnId, Data}; @@ -94,7 +94,9 @@ decode_packet(<>) -> {close_ext, ConnId}; decode_packet(<>) -> %% mtproto/mtproto-proxy.c:push_rpc_confirmation - {simple_ack, ConnId, Confirm}. + {simple_ack, ConnId, Confirm}; +decode_packet(<>) -> + {unknown, Tag, Tail}. encode_packet({data, Msg}, {{ConnId, ClientAddr, ProxyTag}, ProxyAddr}) ->