áááŒá¬áá±ážáá®áá Telegram áááºáá»áŸáá±á¬ááºážááœááºáááºá ááœááºáááºá áá áºáá»á¬ážáááºáá±á¬ááºáá¬ááœáẠDurov áá®á¡á áºááá¯áá»á¬áž áááºáá»áŸ áááºááŒááºááŒá®áž á¡ááœá±á·á¡ááŒá¯á¶ááŸááá¯á¶ááŸáá·áº áááºáááºááá·áº ááá¯á·á áºáá»á¬ážááẠHabré ááœáẠáááŒá¬ááááá¯áááᯠáá±á«áºáá¬áááºá áá áºáá»áááºáááºážááŸá¬áááºá áá°á¡áááºážáááºááẠáááºážááá¬ááá¯ááºáá¬á ááºáá á¹á ááºážááœáẠá¡ááŸááºááááºááŸá áºááŒáŸá¯ááºáá±ááŒááẠ- á¡áá»á¬ážá á¯ááŸá¬ á¡áá±á¬áºáá±ážááá¯ážááŸááºážáá±á¬ (MTProto) JSON-based Bot API ááᯠá¡áá¯á¶ážááŒá¯ááŒááŒá®áž áá»á¬ážáá±á¬á¡á¬ážááŒáá·áº áááºáá¶áá¯á¶áá¬ááŒá áºáááºá áá¯á¶ááŒááºááŒááºážá¡áá±á«áº áá»á®ážááŒáŸá±á¬ááºááŒááºáž ááŸáá·áº PR áá»á¬ážá¡á¬ážáá¯á¶ážááẠmessenger ááœááºááŸáá·áºáááºáá±áá«áááºá ááœááºáá²á·áá±á¬ áá áºááŸá áºááœá²áá®ážáá«ážááá·áºá NPO Echelon Vasily á០áá»áœááºá¯ááºááá¯ááºáá±á¬áºááá¯ááºááẠ(áá¶ááá±á¬ááºážá áœá¬áá²á Habré áá±á«áºááŸá áááºážáá¡áá±á¬áá·áºááᯠáá°ááŒááºážááŸáá·áºá¡áá° áá»ááºááá¯ááºáááº) ááẠPerl ááœáẠáááºážáááá¯ááºááá¯áẠTelegram client ááᯠá¡á ááŸá áááºáá±ážáá¬ážáá²á·ááŒá®áž áá±á¬ááºááá¯ááºážááœáẠá¡ááá¯áá«ááá¯ááºážáá»á¬ážáá±ážáá¬ážáá°áááºáž áá«áááºáá¬áá²á·áááºá á¡áááºááŒá±á¬áá·áº Perlá á¡áá»áá¯á·ááá»ááºáá»ááºážáá±ážáááá·áºáááºá áááŒá¬ážáá¬áá¬á áá¬ážááœá±ááŸá¬ áá®ááᯠááá±á¬áá»ááºááœá± ááŸááá±ááŒá®ááá¯áá±á¬á· ááááºáá±á¬á· áá«á á¡áááá¹áá«ááºááá¯ááºáá°ážá á á¬ááŒáá·áºááá¯ááºááŒá®ážáá«ááŒá®áááá¯á·ááŒá±á¬áá·áº á á¬áá±ážáá°ááẠáá±á¬ááºáá»áŸá±á¬ááºááœá¬ážááááºá ááŒá áºáá¬ááá±. ááá¯á·á¡ááŒááºá cryptography áááºááá¯áá²á·ááá¯á·áá±á¬á¡áá¬ááŒá áºááẠ- áá¯á¶ááŒááºáá±á¬áºáááºážá¡áááºááŒá¯áá«á áá¯á¶ááŒá¯á¶áá±ážááᯠá¡ááááá¬áž áá¯ááºáá¯ááºáá áºáá¯ááŒáá·áºá áááºááẠáá±á¬ááºážáá»áá°á á¡áááºááá·áºáá¯ááºáá¬ážááá·áº á á¬ááŒáá·áºááá¯ááºááᯠá¡á¬ážááá¯ážááŒá®áž áááºážááᯠáá»ááºá áá á¯á¶ááŸáááºááá¯á¶ááá¯áẠ(ááá¯á·áá±á¬áºáááºážá á€á¡áá¬ááẠáá¯áááá¡ááá¯ááºážááœáẠáá±á¬ááºáááºá¡ááŒá±á¬ááºážá¡áá¬áá áºáá¯ááŒá áºáááº)á áá±á¬áá±á¬áááºááœááºá á á¬ááŒáá·áºááá¯ááºááẠ"á¡áááºá¡áááº" á¡ááá·áºááœáẠáá±á¬ááºážááœááºá áœá¬á¡áá¯ááºáá¯ááºááẠ(áááºááá·áº API áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááá¯áááᯠááŒá¯áá¯ááºááœáá·áºááŒá¯áááº)á
ááá¯á·áá±á¬áº á€áá±á¬ááºážáá«ážááœá²áá»á¬ážááœáẠáá»áŸáá¯á·ááŸááºá á¬ááá¯ááºááŒááºážááŸáá·áº áááºá¹áá»á¬ááá¬áááºáá»á¬ážá áœá¬ ááŸááááºááá¯ááºáá«á ááá¯á·áá±á¬áº á¡ááŒá¬ážáá±á¬ áááºážááá¬ááá¯ááºáᬠá¡áá±ážá áááºá¡áá»ááºá¡áááºáá»á¬ážááŸáá·áº áááá¯áá¬ááá¯ááºáᬠáá»áá¯ááºážáá±á¬ááºáá»á¬ážá áœá¬áááºáž ááŸááááá·áºááẠ(áááºážááẠá¡á ááŸááá±ážáá² á á¬ááŒáá·áºááá¯ááºááᯠáááºááá·áºáá¬áá¬á áá¬ážááŒáá·áºáááᯠá¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡ááœááºáááºáž á¡áá¯á¶ážáááºáááá·áºáááº)á áá«ááŒá±á¬áá·áº á¡ááá áááºááŸááºážáá»ááºá client ááᯠá¡á ááá± á¡áá±á¬ááºá¡áááºáá±á¬áºááá¯á· ááŒáá¯ážá á¬ážááá¯á·áá«á ááá¬ážáááºá á¬ááœááºá á¬áááºážáá»á¬ážá¡á ááááááºá. ááá¯ááá¯áááºááŸá¬á ááá¬ážáááºáá±á¬ááºáááºáá»á¬ážáá¡áááºážá¡ááŒá áºáá¯ááºááá¯ááááºáá¬ážáááºááá¯áá«á áá¯á· (áá áºáááºá áá¯áááá¡ááá¯ááºážááœááºá á€á¡áá¬ááẠá¡ááŸááºááááºáá±á¬á¡áá¬áá¡ááŒá±á¬ááºážá¡áá¬ááᯠááá¯ááá¯á¡áá±ážá áááºáá±á¬áºááŒáá«áááºá ááŒá áºáá»áẠááá¯á·ááŒá±á¬áá·áº) ááá¯á·áá±á¬áºá ááŸá±ážáá±ááºááá²á·ááá¯á·á á¥ááá¬á¡á¬ážááŒáá·áºá RFC áá²á·ááá¯á·áá±á¬ á á¶ááŸá¯ááºážáá áºáᯠááŸáááẠ- áááºááŸááºáá»ááºá¡ááá¯ááºáž áá±á¬ááºáááºáá áºáŠážááᯠá¡áááºážá¡ááŒá áºáá¯ááºáá²ááá¯á· âáá»á±á¬ááºážááŒáá·áºááŒááºážáááŸááá²âá ááá¬ážááẠ(Telegram Desktopá ááá¯ááá¯ááºážááº) ááœááºáááºá ááá¬ážáááºááá¯ááºáá±á¬ Telethon áááºá
áá¬áááá¬:
Documentation... ááŸááá¬áž? á¡ááŸááºáá¬áž..? áá°áááºá á¬áá±ážááá¬áá áºáá±á¬ááºá¡áá±áá²á· áááºááá±á ááá²á Binary serialization- TL (Type Language) ááŸáá·áº áááºážáá¡á á®á¡á ááºá á¡ááœáŸá¬áá»á¬ážááŸáá·áº á¡ááŒá¬ážááŒá±á¬ááºá áá¬á áá¬ážáá¯á¶ážáá»á¬ážá áœá¬ ááá¬ážáááºá á¬ááœááºá á¬áááºážááá¯ááááºááá¯áá°áá»á¬ážá¡ááœáẠTL syntax áá¡áá»ááºážáá»á¯ááºáá±á¬áºááŒáá»áẠáá¯á¶ááá¹áááºááᯠáá¯ááºáá°ááááá«á áá¯ááºááœáẠááŸáááŒá®ážáá¬áž TL á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬áž á¡áá»áá¯ážá¡á á¬ážáá¬áá¬á áá¬ážááœáẠá¡áá»áá¯ážá¡á á¬ážáááŸáááŒááºážá áá¬ážááŸááºážááŒá±á¬ááºážááŒááºážá á¡ááœáŸá¬
MT Proto áááºáá°ááá¯á·áá±á¬ááºáá±ážá¡ááœáŸá¬ áá±á¬á·áá»á¬ážá áááºáá±á·áá»áºáá»á¬ážá áááºááŸááºáá»á¬ážá Diffie-Hellman áááºáá±á·áá»áºá á¬áá»á¬ážá msg_idá msg_seqnoá á¡ááá¡ááŸááºááŒá¯ááŸá¯áá»á¬ážá áááºážááŒá±á¬ááºážááŸá¬ážáá±ááá·áº pings áá»á¬ážááŸáá·áº á¡ááŒá¬ážáá±á¬ idiosyncrasies RPC- áá±á¬ááºážááá¯ááŸá¯áá»á¬ážá áá¯á¶á·ááŒááºááŸá¯áá»á¬ážá á¡ááŸá¬ážá¡ááœááºážáá»á¬ážá á¡áááºááŒá¯áá»ááºáá»á¬ážá á áœá²áááºážááŸá¯- áááºáá±á·áá»áº ááá¯á·á áºá¡ááŒá±á¡áá±áá»á¬áž Ping ááŸáá·áºá¡áá»áááºá áááºážá á®áááºá áááºááᯠáá®ááá¯ááºážáá¯ááºááá·áºáá²á
API áá¬áž? áááºáá¶áááá¯á·,
Documentation... ááŸááá¬áž? á¡ááŸááºáá¬áž..?
á€áá±á¬ááºážáá«ážá¡ááœáẠááŸááºá
á¯á¡ááá¯ááºážá¡á
áá»á¬ážááᯠááŒá®ážáá²á·ááá·áºááœá±áá¬áá®á á
áááºá
á¯áá±á¬ááºážáá²á·áááºá á€á¡áá»áááºá¡á¬ážáá¯á¶ážááá¬ážááẠsite áá±á«áºááœááº
áá°áááºá
á¬áá±ážááá¬áá
áºáá±á¬ááºá¡áá±áá²á· áááºááá±á
ááá²á
á¥ááᬠá¡áááºááá·áºáá¯ááºáá¬ážáá²á· á
á¬ááŒáá·áºááá¯ááºááœá±ááᯠáá±ážáá¬áá²ááŒá
áºááŒá
áºá áá¯á¶ážááẠá¡áá±ážáááŒá®ážáá°ážá api_id
О api_hash
(VKontakte API ááŸáá·áºá¡áá¯ááºáá¯ááºáá°áá»á¬ážáááºáá»ááºáá»ááºážáá¬ážáááºáááº) á¡ááá¯áá«áá¬áá¬áááºáá»áŸá±á¬ááºááœáŸá¬ááá¯ááœá²ááŒá¬ážáááºááŸááºáááá·áºáááºá áá® áá¯ááºáááẠá¥ááá±ááŒá±á¬ááºážá¡á á¡ááŒá±á¬ááºážá¡áá»áá¯ážáá»áá¯ážááŒá±á¬áá·áºá ááá¯á·áá±á¬áº áá¯áááá¡ááá¯ááºážááœáẠá
á¬ááŒáá·áºááá¯ááºá
á¬áá±ážááá¬áá»á¬ážá áááºážááᯠááá¯ááºáá±ááá¯ááºáááŒááºážá¡ááŒá±á¬ááºáž ááá¯ááá¯ááŒá±á¬ááŒáá«áááºá áááºážááá¯á·ááẠá¡ááœááºá¡ááá·áºá¡áááºááŸááá±á¬áºáááºáž á
á
áºáá±ážááŸá¯áááºááá¯ážáá»á¬ážááᯠáááºáá»á±áááºááá¯ááºáááá·áºááẠ- á¡ááŸááºááŸá¬ ááᯠááá·áºáá¶áá«ááºááœáẠá
á¬áááºážáá±ážááœááºážááá¯ááºááŒá®ááŒá
áºáááºá áá
áºáá¯áááºáž áá»áŸá±á¬ááºááœáŸá¬ááá¯á¡áá»ááºá
ááá¯ááá¯ááºáá«áá²á·á
ááá¯á¡áá« áááºážááá¬ááá¯ááºáá¬ááŸá¯áá±á¬áá·áºááŸááŒáá·áºáá»áŸáẠááŸááºáá¯á¶áááºááŒá®ážáá±á¬áẠá á¬ááœááºá á¬áááºážá áááá¯ááá¯áá±á¬á áááºááŒáá·áº á¡ááºááááºáá»á¬ážá¡ááŒá±á¬ááºáž Telegram áá¶á០á¡ááŒá±á¬ááºážááŒá¬ážáá»ááºáá»á¬ážááᯠáááºáá¶ááá·áºáááºáá°áá±á¬á¡áá»ááºááᯠáá»áœááºá¯ááºááá¯á· á áááºáááºá á¬ážááá·áºáá«áááºá ááá¯ááá¯áááºááŸá¬á docks áá«áá±á¬ááá¯ááºáááºááá¯ážááŸááºážá áœá¬ "áááŸááº" ááŒá áºáááºáá¯áá°áááá¯ááºááŒá®ážá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº client áá»á¬ážáááºáá®ážáá±á¬áá°áá»á¬ážááŸáá·áºáááºáááºáá¯ááºáá±á¬ááºáá±áá±á¬ááŒá±á¬áá·áºááŒá áºáááºá ááá¯ááœááºáááºá ááá¯á·áá±á¬áº áááºááá·áºá¡áá»ááºááá¯áá»áŸ áááááŒá¯ááááŒááºážáááŸáá ááááºážá¡áá»ááºá¡ááẠááœááºáá±á«áºáá¬ááŒááºáž áááŸááá±á
ááẠá¡á
ááŸáá±á áá±ážáá«á áááºáá¶áááŸááá¬ážáá±á¬ áá±á¬ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááẠá¡ááŸááºáááẠáá±ážááœá¬áá±áá±ážáááºá ááá¯á·áá±ááá·áº
ááááºáá±á¬á·á MTProto áááá¯ááºáá®ááŸáá·áº áá±á¬ááºááá¯ááºážááœáẠá¡ááá·áºáá»á¬ážá áœá¬ááœáẠáá áºááŒáá¯ááºááẠ(OS kernel ááœáẠá¡áá¯ááºáá¯ááºáá±áá±á¬ ááá¯ááºáá¶ááŒá¬ážááœááºáááºááá¬ážáá»á¬ážá á¡ááœáŸá¬áá»áá¯ážáá±á¬ááºááŒááºážáᯠááá¯ááŒáááº)á ááŒá®ážáá¬ážáá±á¬á áá¬áá»ááºááŒá®áž ááŒá±á¬ááºáááºááœááºáá±á¬ááºážáá±á¬ á¡ááŒá±á¬ááºážá¡áá¬áá áºáá¯ááẠáááºážááŒá±á¬ááºážááŸááºáá±á«áºáá±á¬ááºáááá·áºáááº..á
Binary serialization- TL (Type Language) ááŸáá·áº áááºážáá¡á
á®á¡á
ááºá á¡ááœáŸá¬áá»á¬ážááŸáá·áº á¡ááŒá¬ážááŒá±á¬ááºá
áá¬á
áá¬ážáá¯á¶ážáá»á¬ážá
áœá¬
ááááºáá±á¬á· áá®á¡ááŒá±á¬ááºážá¡áá¬áᬠTelegram áá²á· ááŒá¿áá¬áá»á¬ážáá²á· áá±á¬á·áá»ááºááŒá áºáá«áááºá áááºáá²á¡á±á¬ááºááŒáá¯ážá á¬ážááẠááŒá±á¬ááºá áá¬áá±á¬ááºážáá²á· á áá¬ážáá¯á¶ážááœá± á¡áá»á¬ážááŒá®ážááŸááááá·áºáááºá
áá®áá±á¬á· á¡á
á®á¡á
ááºá áá®á
áá¬ážááᯠááŸááºááááẠááŒá±á¬áá«
int ? = Int;
long ? = Long;
double ? = Double;
string ? = String;
vector#1cb5c415 {t:Type} # [ t ] = Vector t;
rpc_error#2144ca19 error_code:int error_message:string = RpcError;
rpc_answer_unknown#5e2ad36e = RpcDropAnswer;
rpc_answer_dropped_running#cd78e586 = RpcDropAnswer;
rpc_answer_dropped#a43ad8b7 msg_id:long seq_no:int bytes:int = RpcDropAnswer;
msg_container#73f1f8dc messages:vector<%Message> = MessageContainer;
---functions---
set_client_DH_params#f5045f1f nonce:int128 server_nonce:int128 encrypted_data:bytes = Set_client_DH_params_answer;
ping#7abe77ec ping_id:long = Pong;
ping_delay_disconnect#f3427b8c ping_id:long disconnect_delay:int = Pong;
invokeAfterMsg#cb9f372d msg_id:long query:!X = X;
invokeAfterMsgs#3dc4b4f0 msg_ids:Vector<long> query:!X = X;
account.updateProfile#78515775 flags:# first_name:flags.0?string last_name:flags.1?string about:flags.2?string = User;
account.sendChangePhoneCode#8e57deb flags:# allow_flashcall:flags.0?true phone_number:string current_number:flags.0?Bool = auth.SentCode;
áá«ááᯠááááá¯á¶ážá¡ááŒááẠááŒááºáá²á·áá°áᬠáá±ážáá¬ážáá²á· á¡á áááºá¡ááá¯ááºážááœá±ááá¯áᬠá¡ááá¯ááᯠááááá¯ááºáá«áááá·áºááẠ- áá±á¬ááºážááŒá®á á¡á²áá«ááœá±á áá¯á¶ááá¹áá¬áẠ(áá¬ááẠáááºááŸá¬á áááºááẠáá«ááŸááá¯áẠáá¬áááºááŸá¬ ááŸááá±ááá·áº) áá°ááá¯á·áá²ááŸá¬ ááœááºáááºááœá± ááŸááááºá á¡á°áááŒá®ážááᯠááŒááºááœá¬ážááẠ... á¡áá»áá¯ážá¡á á¬ážááŒá áºááá¯ááºáááºá á€ááœááºá áá±á¬áá·áºááœááºážá ááœááºáá»á¬ážááœáẠC++ ááœááºáá²á·ááá¯á· ááŒá áºááá¯ááºááŒá±ááŸááá±á¬ áá¯á¶á á¶áá»á¬áž (ááááºáá±á¬á·á ááá¯ááºá¡ááá¡áá») á¡ááŒá¬ážáááºá¹áá±ááá»á¬ážá¡á¬ážáá¯á¶ážá áá¬ááá¯ááá¯ááá¯ááááºážá áá±ážááœááºážá¡ááŸááºá¡áá¬ážáá»á¬ážá á¡á¬áá±ááááºá¡ááŸááºáá»á¬ážá áá¬ááá¯ááºááŸá¯ááºážáá»á¬ážá ááœááºáááºáá»á¬áž (áááºážááá¯á·ááẠááœá²ááŒá¬ážáá±á¬áá±áá¬áá»á¬ážááœáẠááœá²ááŒá¬ážáá±á¬á¡áá¬áá»á¬ážááᯠááá¯ááá¯áááº)á áá áºáá±áá¬ááá¯á·áááºááŒáá±á¬áºáááºáž áá áºáá±áá¬ááá¯ááºá ááá¹ááááááºážááááºážáá»á¬áž - á¡áá±ážá¡ááŒá®ážáá¯á¶ážááŸá¬ á€á¡áá¬á០áááºááá¯á·ááá°ááááºáááºážá ááŸááºáá±á¬ (áá¬áá¬á ááŒááºážáááºáááºááá¯ááºáá«) byte stream? á á¬ááœááºá á¬áááºážááœá±ááᯠáááºááááºá (áá¯ááºáá²á·á á¡áá®ážáá¬ážááœáẠJSON áá¬ážááŸááºážááœáẠschema ááá·áºááºáá»á¬áž ááŸáááẠ- ááá¯á·áá±á¬áº áááºážááẠááá¯ááá¯ááŸááºážáááºážá á±áááºááá¯ááºáá«).
á
á¬áá»ááºááŸá¬ááœáá·áºááŒááºážá
áá¯ááºáá±á¬ááºááá¯ááºáá±á¬ áá¬áá¬á áá¬ážáá»á¬ážááŸáá·áº á¡ááá¯á¡áá»á±á¬áẠá¡áá»áá¯ážá¡á á¬áž á á¯á¶á á¯á¶ááŸáá·áº áááºážááŸá®ážáá±á¬ á á¬áááºáá°áá»á¬ážááẠá€áá¬áá¬á áá¬ážáá±á¬áºááŒáá»ááºáá»á¬ážááœááºáááºá á¥ááá¬áá áºáá¯ááŸááẠááá¯ááááºážááŸá®ážááŒááŒá®áž áááºážááẠáá±áá°áá»á¡á¬ážááŒáá·áº áá°á¡á áááá¯ážáᯠááá¯ááá¯ááºáá«áááºá á¡ááá¯áá«ááá·áºááœááºáá»ááºáá»á¬ážááŸá¬-
- áá¯ááºáááºá áááºááŸááºážáá»áẠá¡áá¶áá±á¬ááºážáááºá áá«áá±ááá·áº áá¶ááá¯ážáááºá áá¡á±á¬ááºááŒááºáá«á
- áá¯ááŸá¬ážááá¹áááá¯ááºáá»á¬ážááœáẠááá¬áá±ážááẠá¡áá¯ááºáá®á¡áá°ážááŒá¯áá»á¬ážááŒá¬ážááœááºááẠááœá²ááŒá¬ážááẠ- áááºááá¯ááºáá¬áááºáááºážááᯠáá°ááá¯ááºážááááºáá«á
- áá±á¬ááºáá¯á¶ážá¡áá±áá²á· ááŒááºáá²á·á¡ááá¯ááºáž áááºááœá±á·ááŸá¬ á¡á²áá«áá«áá²á áá«áá¬áááá¯á¡ááºáá«áá±á¬áºááŒáá¬ážáá±á¬ TL ááá¯ááẠá¡ááá·áºá¡áááºááŒáá·áºáᬠá¡áá¯á¶ážááŒá¯áá±á¬ááŒá±á¬áá·áºá
áááŒá±á¬ááẠ#perl
FreeNode IRC ááœááºáááºááœáẠTelegram á០Matrix ááá¯á· ááááºáá
áºáá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠááŒáá¯ážá
á¬ážáá±ááẠ(ááá¯ážáá¬ážáá»ááºááᯠáá¬áá¬ááŒááºááŒááºážááẠááŸááºáá¬ááºá០áááŸááºáááºáá«)á
áá®á¡áá¯áá®ááᯠááááá¯á¶ážá¡ááŒááẠááá¯ááºááẠááááºáááºáá¶ááá°áá áºáŠážááẠá áááºááŸá¯ááºááŸá¬ážáá±ááŒá®áž áááºážááŸáá·áº á áááºáá á¬ážááẠááŒáá¯ážá á¬ážáá±áá¯á¶áááŒá®áž áááºááœá±á·ááœáẠááá¯á¡ááºáá«á á¡ááŸááºáááẠááá¯áá áá¯ááºáá±á¬á·áá±á
áá°ááááºážáጠáá áºáá¯áá¯ááŒá±á¬áá·áº áá±ážááœááºážáá¯ááºá áᬠáááá¯áá±á¬á·áá² ááá¬á¡áá»áá¯ážá¡á á¬ážáá»á¬áž (intá long, etc.) ááᯠáááºááá¯ááºááá¯áẠááŒáá·áºááŸá¯áá« - áá±á¬ááºáá¯á¶ážááœáẠáááºážááá¯á·ááᯠááá¯ááºááá¯áẠá¡áá±á¬ááºá¡ááẠáá±á¬áºááá«ááẠ- á¥ááá¬á áááºážááá¯á·áá¶á០áááºážáááºááá¯ááºááẠááŒáá¯ážá á¬ážááŒáá«á áá¯á·á á¡á¬ážáááºážáá»ááºááá¯. á¡á²áá«á ááááºáá±á¬á·á arrayááá¬áá²á· á¡áá¬ááœá±ááᯠáá°ááá¯á·áá²á· ááá·áºáá»á±á¬áºáá²á· áá¬áááºááœá±áá²á· áá±á«áºáááºá
ááŸá±á·áá¬áž
ááá¬ážáááºá
á¬ááœááºá
á¬áááºážááᯠáááºááŸá¯ááŒááºážáááŒá¯áá°áá»á¬ážá¡ááœáẠTL syntax á á¡ááá¯ááºážááœá²áá
áºáá¯á á¡áá»ááºážáá»á¯ááºáá±á¬áºááŒáá»ááº
constructor = Type;
myVec ids:Vector<long> = Type;
fixed#abcdef34 id:int = Type2;
fixedVec set:Vector<Type2> = FixedVec;
constructorOne#crc32 field1:int = PolymorType;
constructorTwo#2crc32 field_a:long field_b:Type3 field_c:int = PolymorType;
constructorThree#deadcrc bit_flags_of_what_really_present:# optional_field4:bit_flags_of_what_really_present.1?Type = PolymorType;
an_id#12abcd34 id:int = Type3;
a_null#6789cdef = Type3;
á¡ááŒá²áááºáž á
áááºáááºáᯠá¡áááá¹áá«ááºááááºá áá¯ááºáááºážááœááºááá¯á·áá±á¬áẠ(áááºááœá±á·ááœááºá á¡ááŒá²áááºáž) áááºá¹áá±áááŒáá·áº ááœá±ážáá»ááºááá¯ááºáááºá #
ááá·áºááẠCRCá áá±ážáá¬ážáá±á¬á¡áá»áá¯ážá¡á
á¬ážááá¯á¶ááŸááºáá±á¬áºááŒáá»ááºá
á¬ááŒá±á¬ááºážááŸá áá±á¬ááºáá
áºáá¯á á¡ááœááºáá»á¬ážááŒá
áºáá«á - á¡áá»áá¯ážá¡á
á¬ážááẠááá¬ááŒá
áºááá¯ááºáááºá áááºážá¡á¬ážáá¯á¶ážááẠáá°áá®áá±á¬ááá¹ááá¬á áá±ážáá¬ážáá±á¬áááºáá±á¬ááºáá°á¡áá»áá¯ážá¡á
á¬ážáá¡áááº- á¡ááŸááºááŸá¬á á¡áá»áá¯ážá¡á
á¬ážááœá²- ááá¯ááºááá¯ááºáááºá áá®áá»áŸááŒááºážáááºá¹áá±áá áá¬áááºááœáẠá¡áá»áá¯ážá¡á
á¬ážááŒá
áºáááºá polymorphic - ááá¯ááá¯áááºááŸá¬á áááºážááẠáá®ážááŒá¬ážá¡áá»áá¯ážá¡á
á¬ážáá»á¬ážá
áœá¬ááŸáá·áº ááá¯ááºáá®ááá¯ááºáááºá
á¡áááá¹áá«ááºá ááá¯ááºážáá±á¬ááºááŸá¬ ááŒá
áºáá±á«áºáá¬áááºá ---functions---
ááá¯á·áá±á¬áẠsyntax ááẠáá°áá®áá±áááºááŒá
áºáá±á¬áºáááºáž á¡áááá¹áá«ááºááŸá¬ ááœá²ááŒá¬ážááœá¬ážáááá·áºáááº- constructor ááẠRPC function áá¡áááºááŒá
áºáá¬áááºááŒá
áºááŒá®ážá fields áá»á¬ážááẠparameters áá»á¬ážááŒá
áºáá¬áááá·áºááẠ(áá±á¬ááºážááŒá®á ááá¯ááá¯áááºááŸá¬á áááºážáááºá¡á±á¬ááºááœááºáá±á¬áºááŒáá¬ážáá±á¬áá±á¬áºááŒáá¬ážááá·áºá¡ááá¯ááºážá¡ááá¡áá»áá°áá®áá±á¬áááºáá±á¬ááºáá¯á¶á áááºážááẠáá±ážáá¬ážááá·áº á¡áááá¹áá«ááºáá¬ááŒá
áºáááá·áºáááº)á "polymorphic type" ááẠááŒááºáá¬áá±á¬ááááºá á¡áá»áá¯ážá¡á
á¬ážááŒá
áºáááºá ááŸááºáá«áááºá áááºážááẠpolymorphic áááºáááºáááºááŸááá±áŠážááẠ- ááá¹áááœáẠáááºááŸááºáá¬ážáá¯á¶áá¬ááŒá
áºáááºá ---types---
ááŸáá·áº á€áááºáá±á¬ááºáá°ááᯠááá·áºááœááºážá
ááºážá
á¬ážáááºááá¯ááºáá«á áááºážááá¯á·á á¡ááŒááºážá¡áá¯á¶áá»á¬ážááŒáá·áº áá¯áá±á«áºáá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá ááœááºááœááºáá²áá²ááᯠááá¯ááºááá·áºáá«á á¡ááŒá±á¬ááºážáá
áºáá¯áá¯ááŒá±á¬áá·áºá C++ ááœááºáá²á·ááá¯á· áá¬áááºáá°áá±á¬áºáááºáž ááá°áá±á¬áááºááŸááºáá«áá±á¬ áá¯ááºáá±á¬ááºáá»ááºá¡áá»á¬ážá¡ááŒá¬ážááᯠTL ááœáẠáá±ážááá¬ážáá«á
OOP ááá¯ááºáá«á á¡áááºááŒá±á¬áá·áº "constructor" ááŸáá·áº "polymorphic" ááá¯á·ááŒá
áºááááºážá á¡ááŸááºáá±á¬á·á OOP á á
ááºážáááºážáá»ááºáá»á¬ážá¡á áá
áºá
á¯á¶áá
áºáŠážááẠáááºážááᯠá
áááºáá°ážááẠáá°áááºážá
á¬ážá¡ááŒá
Ạpolymorphic á¡áá»áá¯ážá¡á
á¬ážá¡ááŒá
Ạááœá±ážáá±á«áºááẠááá¯ááá¯ááœááºáá°áááºááŒá
áºááŒá®ážá áááºáá±á¬ááºáá°áá»á¬ážááẠáááºážá ááá¯ááºááá¯ááºáááºážáááºáá¬áá±á¬ á¡áááºážáá»á¬ážá final
áá¬áá¬á
áá¬ážáá»á¬ážá
áœá¬á á¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááœáẠá¡ááŸááºáá±á¬á· áá¯ááºáá«áááºáá»á áá°áá®ááŸá¯ OO áááá¯ááááºážáááºážáá¬áá¬á
áá¬ážáá»á¬ážááŒáá·áº áááá·áº overloaded constructor áááºážáááºážáá»á¬ážááŒáá·áºá á€áá±áá¬ááœáẠáá±áá¬ááœá²á·á
ááºážáá¯á¶áá»á¬ážáá¬ááŸááá±á¬ááŒá±á¬áá·áº áááºážáááºážáá»á¬ážáááŸááá« (á¡á±á¬ááºáá«áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŸáá·áº áááºážáááºážáá»á¬ážááá±á¬áºááŒáá»ááºááẠáááºážááá¯á·áá¬ááŒá
áºááŒá±á¬ááºážááŸáá·áº áááºáááºá áá±á«ááºážáá²ááœáẠááŸá¯ááºááœá±ážááŸá¯áá»á¬ážááᯠáááºáá®ážááá¯ááºáá±á¬áºáááºáž áááºážááŸá¬ á¡ááŒá¬ážá¡áá¬áá
áºáá¯á¡ááŒá±á¬ááºážááŒá
áºáááº) - constructor áá
áºáŠážá¡ááŒá
Ạáááºá
ááºážá
á¬ážááá¯ááºáá«áááºá áááºááá±áááºááá¯ážáá²á áá±á¬ááºáá¯ááºáá»ááºááŸááááºá bytes áá
á®ážááŒá±á¬ááºážááá¯áááºáá±á¬á¡áá«ááá¯ááºááá·áºáá«á
áá«á áááºááá¯ááŒá
áºáá¬áá²á 4 bytes á¡ááŒá²áááºáá±á¬ deserializer ááẠáááºááá¯ážááá¯ááŒááºáááºá 0xcrc32
- áá±á¬ááºáá¬ááœá±áááºááŒá
áºáááºááá¯áᬠáá¬ážáááºáááºá field1
á¡áá»áá¯ážá¡á
á¬ážááŸáá·áºá¡áá° int
, i.e. á¡áá»áá¯ážá¡á
á¬ážááŒáá·áº á€áááºáá±áá±á¬á¡ááœááºáá±á«áºááœáẠ4 bytes á¡ááá¡áá»áááºáááºá PolymorType
áááºáá«á ááŒááºáááºá 0x2crc32
áá±á¬ááºáááºáááºáááºááŸá
áºáá¯ááŸáááŒá±á¬ááºážááᯠááááŠážá
áœá¬ áá¬ážáááºáááºá long
áá«ááŒá±á¬áá·áº 8 bytes áááºáááºá ááŒá®ážá០áááºááŒá®áž ááŸá¯ááºááœá±ážáá²á· á¡áá»áá¯ážá¡á
á¬ážááᯠáááºááŒá®áž áá°áá®áá²á·áááºážáá²á· áááºáá¯ááºááá¯ááºáá«áááºá á¥ááá¬á¡á¬ážááŒááºá·, Type3
áááºáá±á¬ááºáá° ááŸá
áºáŠážá
á®ááᯠááá¬ážááœááºááœáẠááŒá±áá¬ááá¯ááºáááºá ááá¯á·áá±á¬áẠáááºážááá¯á·ááŸáá·áº ááœá±á·áá¯á¶ááááºá 0x12abcd34
ááá¯á·áá±á¬ááºááœáẠáááºááẠáá±á¬ááºááẠ4 bytes ááá¯áááºááẠááá¯á¡ááºáááºá int
ááá¯á·ááá¯áẠ0x6789cdef
ááŒá®ážá០áá¬ááŸáááŒá
áºáá±á¬á·áá°ážá á¡ááŒá¬ážáááºááá·áºá¡áá¬áááᯠ- áááºááŒáœááºážáá»ááºáá
áºáá¯áá¬ážáááºááá¯á¡ááºáááºá áááºááá¯á·áááºááá¯á
á±áá¬áá°á ááá¯á·áá±á¬ááºáá»áœááºá¯ááºááá¯á·ááẠ4 bytes ááá¯áááºááŸá¯ááŒááºážááá¯á·ááŒááºááœá¬ážááŒáááºá int
áááºááœááºáž field_c
в constructorTwo
á¡á²áá®á¡áá±á«áºááŸá¬ áá«ááá¯á·á áá«ááá¯á·áááºáá¬ááᯠááŒá®ážá¡á±á¬ááºáá¯ááºáááºá PolymorType
.
áá±á¬ááºáá¯á¶ážáá±á¬á· áááºážááááœá¬ážáááºá 0xdeadcrc
á¡ááœáẠconstructorThree
áá«ááá¯ááẠá¡áá¬ááœá± ááá¯ááŸá¯ááºááœá±ážáá¬áááºá áá«ááá¯á·áá²á· ááááá¯á¶ážá¡ááœáẠbit_flags_of_what_really_present
á¡áá»áá¯ážá¡á
á¬ážááŸáá·áºá¡áá° #
- ááááºáá±á¬á·á áá«á á¡áá»áá¯ážá¡á
á¬ážá¡ááœáẠáá¬áááºáá
áºáá¯áᬠááŒá
áºáá«áááºá nat
"ááá¬ááá¶áá«ááº" ááá¯á· á¡áááá¹áá¬ááºááá«áááºá á¡ááŸááºááŸá¬á áááºááŸááºáááá¯ážáá¬ážáá±á¬ int ááẠá¡ááŸááºáááẠáá¬ážáá
áºáá»á¬ážááœáẠáááºááŸááºáááá¯ážáá¬ážáá±á¬ áá¶áá«ááºáá»á¬ážááᯠááœá±á·ááŸáááá·áºá¡áá« áá
áºáá¯áááºážáá±á¬ááá
á¹á
ááŒá
áºáááºá ááá¯á·ááŒá±á¬áá·áºá áá±á¬ááºáá
áºáá¯ááẠáá±ážááœááºážá¡ááŸááºá¡áá¬ážáá«ááŸááá±á¬ áááºáá±á¬ááºááŸá¯ááŒá
áºááŒá®ážá á€áááºááŸá¬ á¡ááœááºááŒá
áºááẠ- áááºááá¯ááºáá±á¬áá
áºááᯠááá¯ážáá¬ážáá±á¬á¡ááœááºááœáẠáááºááŸááºáá¬ážáá«á (áá¬ááá®á¡á±á¬áºááá±áá¬áá²á·ááá¯á· ááá·áºááŸááºážááŒá±á¡á¬ážááŒáá·áº) áá«áá¬áá±á«áºááœáẠááŸááá±áááºááŒá
áºáááºá áá®áá±á¬á· áá® bit ááá¯ááœáá·áºáá¬ážáááºááá¯áá«á
áá¯á·á ááŒáá¯ááºáá²á·á¡ááœááºááá¯áááºááááºá Type
áá»áœááºá¯ááºááá¯á·áá¥ááá¬ááœáẠconstructor 2 áá¯ááŸááááºá áá
áºáá¯ááẠááá¬ááŒá
áºááẠ(áááºááŸááºáá°ááœááºáᬠáá«áááºáááº)á áá±á¬ááºáá
áºáá¯ááœáẠá¡ááœááºáá
áºáá¯ááŸááááºá ids
á¡áá»áá¯ážá¡á
á¬ážááŸáá·áºá¡áá° ids:Vector<long>
.
ááá°áá¬áá»á¬ážááŸáá·áº generic ááŸá áºáá¯á áá¯á¶ážááẠáá±á¬ááºážááœááºááẠááá¯á·ááá¯áẠJava ááŒá áºáááºáᯠáááºáááºáá±á¬ááºážáááºááá¯ááºáááºá áá«áá±ááá·áº ááá¯ááºáá°ážá áá®ážáá«ážá áá® áᬠá á áºááŸááºáá±á¬áá¬ážáá áºáá»á¬ážááœáẠangle brackets áááŒá áºáááºááŸáá·áºáááºážááᯠVector á¡ááœááºáá¬á¡áá¯á¶ážááŒá¯áááºá byte stream áá áºáá¯ááœááºá áááºážááẠVector á¡áá»áá¯ážá¡á á¬ážá¡ááœáẠ4 CRC32 bytes ááŒá áºáááºááŒá áºááŒá®ážá á¡ááŒá²áááºážáá°áá®áááºááŒá áºááŒá®ážá ááá¯á·áá±á¬áẠ4 bytes - array element á¡áá±á¡ááœááºá ááá¯á·áá±á¬áẠá€ááŒááºá ááºáá»á¬ážááá¯ááºááá¯ááºááŒá áºáááºá
4 bytes á á
áá¬ážáá¯á¶ážáá»á¬ážááŒáá·áº áá¶áá«ááºá
ááºáá»á¬áž á¡ááŒá²ááŒá
áºáá±á«áºáááºáá°áá±á¬ á¡áá»ááºááᯠáá±á«ááºážááá·áºáá«á á¡áá»áá¯ážá¡á
á¬ážá¡á¬ážáá¯á¶ážááẠáááºážá á¡ááá»á¬ážááŒá
áºááẠ- built-in á¡áá»áá¯ážá¡á
á¬ážáá»á¬ážááá¯áááºáž áá±á¬áºááŒáá¬ážáá«áááºá bytes
О string
á¡ááŸááºááᯠmanual serialization ááŸáá·áº 4 ááŒáá·áº áá»áááºááŸáááŒááºážááŒáá·áº - áá±á¬ááºážááŒá®á áááºážááẠáá¬áááºááŸáá·áºááẠá¡áá±á¬áºáá±áž áááá±á¬ááºáá¯á¶ááááºá TL ááẠáááá±á¬ááºáá±á¬ binary serialization ááŒá
áºáááºáᯠááá¯áá¬ážáá±á¬áºáááºáž áááºážááá¯á·ááŸáá·áºá¡áá° ááá²ááœáẠáááºááá·áºá¡áá¬áááᯠáá»á²á·ááœááºááŒááºážááŒáá·áº boolean áááºááá¯ážáá»á¬ážááŸáá·áº 4 bytes á¡áá á
á¬áá¯á¶ážáá
áºáá¯á¶ážáá»ááºážá
á¬ááŒá±á¬ááºážáá»á¬ážáááºáá»áŸáẠJSON ááẠááá¯ááá¯áá°áá±áŠážáááºáá¬ážá ááŒáá·áºáá«á áááá¯á¡ááºáá±á¬á¡ááœááºáá»á¬ážááᯠáá
áºá¡áá¶áá»á¬ážááŒáá·áº áá»á±á¬áºááœá¬ážááá¯ááºáááºá á¡áá¬á¡á¬ážáá¯á¶ážááẠáá±á¬ááºážááœááºááŒá®áž á¡áá¬áááºá¡ááœááºááẠááá¯ážáá»á²á·ááá¯ááºáááºá áá±á¬ááºááá¯ááºážááœáẠconstructor ááœáẠááœá±ážáá»ááºááá¯ááºáá±á¬ á¡ááœááºá¡áá
áºáá»á¬áž ááá·áºáá²á·ááá¬ážá
ááá¯á·áá±á¬áº áá»áœááºá¯ááºá á¡ááá¯áá»á¯á¶ážáá±á¬áºááŒáá»ááºááᯠááááºáá»áŸááºáá°áá¬áž á á¬áááºážá¡ááŒáá·áºá¡á á¯á¶ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠá ááºážá á¬ážáá«á ááááŠážá áœá¬á constructor á CRC32 ááᯠáá¯á¶ááŸáẠschema á á¬áá¬ážáá±á¬áºááŒáá»áẠstring (á¡ááᯠwhitespace áááºááŸá¬ážáááºá á áááº) ááŒáá·áº ááœááºáá»ááºááẠ- ááá¯á·ááŒá±á¬áá·áº á¡ááœááºá¡áá áºáá áºáᯠáááºááá·áºáá«á á¡áá»áá¯ážá¡á á¬ážáá±á¬áºááŒáá»áẠstring ááẠááŒá±á¬ááºážáá²ááœá¬ážáááºááŒá áºááŒá®ážá ááá¯á·ááŒá±á¬áá·áº áááºážá CRC32 ááŸáá·áº á¡áá»áá¯ážáááºá¡áá±ááŒáá·áº áá¶áá«ááºá ááºáá»á¬áž ááŒá±á¬ááºážáá²ááŒááºáž ááŒá áºáááºá áá±á¬ááºáááºáá±á¬ááºážááẠá¡áá¶á¡áá áºáá»á¬ážáááºáááºáá¬ážáá±á¬ ááœááºáááºáá áºáá¯ááᯠáááºáá¶áááŸááá«á áááºááá¯á·áá¯ááºáá±á¬ááºááá¯ááºáááºáááºážá
áá¯áááá¡áá±áá²á· ááŸááºáá¬ážááŒáá¡á±á¬áẠCRCáá€áá±áá¬ááœáẠá¡áááá¡á¬ážááŒáá·áº á¡áá¯á¶ážááŒá¯áá±á¬á hash áá¯ááºáá±á¬ááºáá»ááºáá»á¬áž áááºááá·áºá¡áá»áá¯ážá¡á á¬ážááᯠááœá²ááŒá¬ážáááºááŸááºááẠ(de)serializedá á€ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáá¬ááºááá¯ááºááŸá¯ááŒá¿áá¬ááŸáá·áº áááºááá¯ááºáá±áááẠ- ááá¯ááºáá«á ááŒá áºááá¯ááºáá»á±ááẠ232 ááœáẠáá áºáá¯ááá¯ááºáá«á ááá¯á·áá±á¬áº áá»á¬ážá áœá¬ááá¯áá«áááºá CRC32 ááẠáááºááœááºáá±ážáá»ááºáááºááŸá á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠááááŸáááẠ(ááŒá¯ááŒááºáááº) áá®ááá¯ááºážáá¯ááºáá¬ážááŒá®áž á€áá¯ááºááá¹áááá»á¬ážááᯠá¡ááŒá¬ážáá°áá»á¬áž ááááá¯ááºáá áºáá¬á á±ááẠááŒáŸáá·áºáááºáá¬ážááŒá±á¬ááºáž áááºáá°ááŸááºááááááºážá á¥ááá¬á¡á¬ážááŒáá·áºá áá°áááẠbytes áááŒá±á¬ááºážáá²ááŒááºážááá¯ááá¯áá áá¯ááºáá« - ááẠCRC32 ááá¯áá»ááºážááŸá áºááŒá±á¬ááºážááŸáá±ááœááºáá«ááá¯áááááœááºááá 4 bytes ááá¯áá±á¬áẠ4 bytes ááŸáá·áºáá²ááŸááºáá«ááẠ- áááºážáááºá¡áá°áá°áááºááŒá áºáááá·áºáááºá áá»áœááºá¯ááºááá¯á·ááœáẠáááºáááºá¡áá¹ááᬠ(ááŸáá·áº áááºáá¯á¶áááºáá¯á¶ á¡áááºážáááº) á០á á¬áá¬ážá á¬ááŒá±á¬ááºážáá»á¬áž ááá·áºááœááºážáá¬ážáá±á¬á¡áá«á á€á¡áááºáá»á¬ážááẠá¡áá°ážá¡á¬ážááŒáá·áº áá»áááºážááá¯ááºáá±á¬á¡áá«á ááá¯ááá¯á·áá±á¬ ááŒá±á¬ááºážáá²ááŒááºážá ááŒá áºááá¯ááºááŒá±ááẠá¡ááœááºáá»á¬ážááŒá¬ážáá«áááºá
á áá¬ážáá áẠáááºáá°á áá¬á á áºáááºá á¡ááŸáẠCRC32? á¡á á±á¬ááá¯ááºážáááºážááŒá áºáá áºáá¯ááœáẠ(Waltman áááá¯ááºáá®ááááº) ááœáẠá á¬áá¯á¶ážáá áºáá¯á¶ážá á®ááᯠáá¶áá«áẠ239 ááŒáá·áº ááŒáŸá±á¬ááºáá±ážááá·áº hash function áá«ááŸááá±á¬ááŒá±á¬áá·áº á€áá°áá»á¬ážááᯠáá»á áºááŒááºááá¯ážááŸáá«áááºá
áá±á¬ááºáá¯á¶ážááœááºá áá±á¬ááºážááŒá®á á¡ááœááºá¡áá»áá¯ážá¡á
á¬ážáá
áºáá¯áá«ááŸááá±á¬ áááºáá±á¬ááºáá°áá»á¬ážááᯠáá»áœááºá¯ááºááá¯á· ááá±á¬áá±á«ááºááá¯ááºáá«áááºá Vector<int>
О Vector<PolymorType>
ááá°áá®áá±á¬ CRC32 ááŸááááá·áºáááºá ááá¯ááºážáá±á«áºá áááºáááºááŸá¯áá±á¬ áááºááá¯áá²á áá®á¡áá¯áá®áá²á· áááºáááºááŒá®ážá á¡áá»áá¯ážá¡á
á¬ážáá¡á
áááºá¡ááá¯ááºážááŒá
áºáá¬áá«ááá¬ážá? áá»áœááºá¯ááºááá¯á·ááẠááááºážáá±á«ááºáž áá
áºáá±á¬ááºážááᯠáááºážáá»ááºážáá±ážááẠááá¯ááŒáá«á
áá¯á· Vector<int>
á¡á¬ážáá¯á¶ážááŸááºážáá«áááºá á¡áá»á¬ážáá²á· á¡ááŒá¬áž ááááá ááá¯ááºáá»á¬ážá áá®ááá¯ááá¯ááẠVector<Type2>
áá
áºáá¯áááºážáá±á¬ áááºáááºáá
áºáá¯áᬠááá¯ááºááá¯ááºáá«áááºá int
áááºážááẠá¡áá»áá¯ážá¡á
á¬ážáá²ááœáẠáá
áºáá¯áááºážááŒá
áºááẠ- áá»áœááºá¯ááºááá¯á·ááẠ10000xabcdef0 ááᯠá¡ááŒááẠ34 ááŸáá·áº 4 bytes áááºáá¯ááºááẠááá¯á¡ááºáá«ááá¬ážá int
ááá¯á·ááá¯áẠáá¬áá¬á
áá¬ážááẠá€á¡áá¬ááᯠáááºáá±á¬ááºáá°áá¶á០áá»áœááºá¯ááºááá¯á·á¡ááœáẠáá±á¬áºááŒáá±ážááá¯ááºáááºá fixedVec
80000 bytes á¡á
á¬áž 40000 ááá¯áᬠáááºáá¶ááœáŸá²ááŒá±á¬ááºážáá«á
áááºážááẠáá®á¡áá¯áá®ááá¯ááºáá¬áá±ážááœááºážáá¯á¶ážáááá¯ááºáá« - IDá áááá¡áááºá áá±á¬ááºáá¯á¶ážá¡áááºáá áºáá¯á á®áá«ááŸááá±á¬ á¡á¯ááºá á¯á¡áá¯á¶ážááŒá¯áá°áá»á¬ážá á¬áááºážááᯠáááºáááŸáááẠá áááºáá°ážááŒáá·áºáá« - ááá¯ááá¯ááºážááºáá»áááºáááºááŸá¯ááŸáá áºááá·áº ááœáŸá²ááŒá±á¬ááºážááá·áºáá±áá¬ááá¬áááœá¬ááŒá¬ážááŸá¯ááẠáááá¬áááºááŸá¬ážáá«áááºá áááºážááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž ááŒá±á¬áºááŒá¬áá¬ážáá±á¬ Telegram á á®ážáá®ážá áááá±á¬ááºááŸá¯ááŒá áºáááºá
áá®áá±á¬á·âŠ
áá¯á¶ááá¹áááºááᯠáá¯ááºáá°ááááá«á
áá±á«ááºážá
ááºážáá°áá»á¬ážá áá±á¬áºááŒáá»áẠá
á¬áá»ááºááŸá¬áá»á¬ážááŸáá·áº áááºáááºáá±á¬ á
á¬áá»ááºááŸá¬áá»á¬ážááᯠááŒááºáá»á±á¬áºááẠááŒáá¯ážá
á¬ážáá«áá vector áá
áºáᯠ(ááŸáá·áº matrix áááº) ááẠtuples ááŸáááá·áº á
á¬ááœááºáá»á¬ážá
áœá¬ááᯠááá¬ážááẠááŒááºáá¯ááºááẠááŒáá¯ážá
á¬ážáá±áááºááᯠááœá±á·ááá«áááºá ááá¯á·áá±á¬áº áá±á¬ááºáá¯á¶ážááœáẠáááºážááá¯á·ááẠááá¯ááºááŸááºáá¶áááŒá®áž áá±á¬ááºáá¯á¶ážá¡ááá·áºááᯠáá»á±á¬áºááœá¬ážáᬠá¡áá»áá¯ážá¡á
á¬ážáá
áºáá¯ááŸáá·áºáááºáž ááááºááá¯ááºááá·áº vector áá
áºáá¯á á¡áááá¹áá«ááºááᯠááá¯ážááá¯ážááŸááºážááŸááºáž áá±ážáá¬ážáááºá áá®ááŸá¬ áá¬ááá
á¹á
ááŸáááá¯á·áá²á áá¬áá¬á
áá¬ážáá»á¬áž áááá¯ááááºáá±ážááŒááºážáá¡áá°ážáááŒáá·áº á¡áá¯ááºáá¯ááºáá±á¬ááºáá°áá»á¬ážá ááœá²á·á
ááºážáá¯á¶ááᯠáááºáá«ááá²áá² áá±á¬áºááŒáááºááŸá¬ áá¯á¶ááŸááºááŒá
áºááẠ- áááºážááá»ááºážáááá±á¬á¡áá²ááŒááºááŸá¯ááŒáá·áº compiler ááẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠáá¬ážáááºááŒá®áž áááºážááᯠáá¯ááºáá±á¬ááºáááºááŒá
áºáááºá áá¬áá¬á
áá¬áž áá±áá¬á¡ááŸááºá
áẠááá¯á·áá±á¬áº áááá±á¬ááºááŸá¯ ááá¯á¡ááºáááº- ááá¯ážááŸááºážá
áœá¬ áá±á¬áºááŒááẠáá¯á¶áá±á¬ááºáá«áááºá á
á¬áááºáž, i.e. ááŒááºá
ááºááŸá
áºáá¯áááœá²á·á
ááºážáá¯á¶ - ááááá
áºáá¯áááºáá±áá¬ááŒááºá
ááºááŒá
áºááŒá®ážá áá¯ááááááºáá°áá®áá±á¬ááœá²á·á
ááºážáá¯á¶ááá¯ááºááá¯ááºááá¯á·ááá¯ááºá¡ááŒá®ážá¡ááœááºáá±áá¬ááœááºáá
áºáá¯ááŒá
áºááẠ(pack (cons)
Lisp ááœááº)á áá«áá±ááá·áº áá«á áááááá¬áᬠááá¯á¡ááºáá«áááá·áºáááºá áá
áºáá¯áá»ááºážá
á®ááᯠááŒááºá
ááºááẠáááºážáá¡áá»áá¯ážá¡á
á¬ážááá¯áá±á¬áºááŒááẠáááºážáá¡áá»áá¯ážá¡á
á¬ážááá¯áá±á¬áºááŒááẠ4 bytes (CRC32 ááœáẠCRCXNUMX) ááá¯á¡áá¯á¶ážááŒá¯áááºá Array áá
áºáá¯ááᯠáá±á¬áºááŒááẠááœááºáá°áááºá áá¯á¶áá±á¡ááœááºá¡á
á¬ážáá«áá±ááá·áº á¡áááºáááááá²á· á¡ááŸááºáá
áºáá¯áá²á· array áá
áºáá¯á¡ááœááºá áá»áœááºáá±á¬áºááá¯á· ááŒááºáá
áºááá¯ááºáááºá
ááá¯á·ááŒá±á¬áá·áº TL ááẠááá·áºá¡á¬áž vector áá áºáá¯ááᯠáá¯ááºááẠááœáá·áºáááŒá¯áá±á¬ááŒá±á¬áá·áºá áááºážááᯠáá±ážáááºááœáẠááá·áºááááºááŒá áºáááºá á¡áá¯á¶ážá áœááºáá±á¬á á¬ááœááºá á¬áááºážáááŒá±á¬áááº
á á®ážáá®ážááá¯ááºáááºááŸááºááŒááºážááẠáá°áá®áá±á¬ constructor âvectorâ ááᯠá¡ááŒá²á¡áá¯á¶ážááŒá¯ááẠ(const 0x1cb5c415 = crc32(âvector t:Type # [ t ] = Vector tâ) á¡áá»áá¯ážá¡á á¬áž t á áá®ážááŒá¬ážááááºážááŸááºáááºááá¯ážáá±á«áºááœááºáá°áááºááŒááºážáááŸááá±á¬á
ááááºá¡áá»áá¯ážá¡á á¬ážá០áááºážáááºáá¬áá±á¬ááŒá±á¬áá·áº ááœá±ážáá»ááºááá¯ááºáá±á¬ ááá·áºáááºáá±á¬áẠt ááááºááá¯ážááẠááááºá¡áá»áá¯ážá¡á á¬ážá០áááºážáááºáá¬áá±á¬ááŒá±á¬áá·áº ( deserialization áááá¯ááºáá® á¡ááŒá²áááá¬ážáááº)á
á¡áá®ážáááºááŒáá·áºááŸá¯áá«- vector {t:Type} # [ t ] = Vector t
- áá«áá±ááá·áº ááá»ááá»á·á¡ááá»áááŒáŸ áááááááºážááááºážááẠvector áá¡ááŸááºááŸáá·áºáá®áá»áŸááááºááᯠá¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºááá¬ážáá«á ááŒá®ážáá±á¬á· áááºá០áááá¯ááºáá°ážá á€á¡áá¬ááẠááá·áºáááºáá²ááœáẠá
áœá²ááŒá²ááŒá²ááŸááºáá¬ážáááºááŸáá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºááẠááá¯á¡ááºááá·áº áá±ážáááºážááŸá¯áá
áºáá¯ááŒá
áºáááºá á¡ááŒá¬ážáá±áá¬ááœááºá á
á¬ááœááºá
á¬áááºážááẠá¡áá»áá¯ážá¡á
á¬ážááẠá¡áá¯ááŒá
áºááŒá±á¬ááºáž ááá¯ážááá¯ážáá¬ážáá¬ážááẠáá±á¬áºááŒáááº-
Vector t polymorphic pseudotype ááẠâá¡áá»áá¯ážá¡á á¬ážâ ááŒá áºááŒá®áž áááºááá¯ážááẠáááºááá·áºá¡áá»áá¯ážá¡á á¬áž t á áááºááá¯ážáá»á¬áž á¡ááœá²ááá¯ááºá áá±á¬ááºá Ạááá¯á·ááá¯áẠááá¬ááŒá áºáá±áááºá
⊠áá«áá±ááá·áº á¡á²áá«ááᯠá¡á¬áá¯á¶ááá¬ážáá°ážá áááºá¹áá»á¬áá¬áá¬áááºááᯠááŒááºáá»á±á¬áºááá¬ááᯠááŒá®ážááœá±á·áá¬áá²á·á¡áá« (ááá¹áááá¯ááºáááºááá¯ážáá áºáá¯á áááºáááá¬áá±á¬áẠááŒá áºááá¯ááºáá«áááº) á¡ááŸááºáá±ážááŒá®áž áááºááœá±á·ááŸá¬ áááºááᯠáááºááœá±á·áá¯ááºáá±á¬ááºáááá²ááá¯áᬠá á±á¬áá·áºááŒáá·áºááá¯á· áá¯á¶ážááŒááºááá¯ááºáá²á·á¡áá« ááá·áºáá±á«ááºážáá²ááŸá¬ á áœá²ááŸááºáááºáá»ááºáá±áŠážááŸá¬áá«- áá®áá±áá¬ááŸá¬ áá±ážáááºáá²á· áááºá¹áá»á¬ááᯠá¡ááŒá±áá¶áá¬ážáá«áááºá Cool People ( ACM á áááºá¹áá»á¬ááá¬ááŸáẠááŸá áºáŠáž) ááẠáááºáá°áá»áŸáá¬ááá áááá¬áááºááŸá¬ážáá«áááºá áááºážááá¯ááºááᯠáá»á²á·ááœááºáááº- ááŒá®ážááŒá±á¬ááºáá²á·ááŒá®á
á áá¬ážáá áẠáá¶áá«ááºá¡ááŒá±á¬ááºážá áááááá«á
#
á¡áááá¹áá«ááºáá°áá«áááºánat
ááá¬á áá¶áá«ááº-á¡áá»áá¯ážá¡á á¬ážá¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááŸáááẠ(typeexpr) ááŸáá·áº ááááºážá¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬áž (nat-expr) ááá¯á·áá±á¬áº áááºážááá¯á·ááᯠáá°áá®áá±á¬áááºážáᯠáááºááŸááºááŒáááºá
type-expr ::= expr nat-expr ::= expr
ááá¯á·áá±á¬áº ááá¹áá«á¡á¬ážááŒáá·áº áááºážááá¯á·ááᯠáá°áá®áá±á¬áááºážááŒáá·áº áá±á¬áºááŒááŒáááºá i.e. á€ááŒá¬ážáá¬ážáá»ááºááᯠáá áºáááºááááááŒá®áž áááºááŒáá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºááẠááá¯á¡ááºáá«áááºá
áá¯ááºááŒá®á áá¯á¶á
á¶ááœááºá¡áá»áá¯ážá¡á
á¬ážáá»á¬áž (vector<int>
, vector<User>
) ááœáẠáá±áá°áá»áááºááŸááºáá»ááºáá
áºáá¯ááŸáááẠ(#1cb5c415
), i.e. áá±á«áºááá¯ááŸá¯ááᯠááááŸááá«á
users.getUsers#d91a548 id:Vector<InputUser> = Vector<User>;
ááá¯á·áá±á¬áẠáááºááẠvector áá áºáá¯áá¬áá áá¯á¶ážá áœá²áá°áá»á¬ážá vector ááᯠá á±á¬áá·áºáá»áŸá±á¬áºáá±áá«áááºá ááá¯ááááááá á áá±áá¹áá á±á¬áá·áºáá« - áá¯ááºá¡á á áºááŒáá·áºá ááŒááºá ááºáá áºáá¯á á®ááœáẠááá¬á¡áá»áá¯ážá¡á á¬ážááá¯ááºáá«áá áááºáá±á¬ááºáá°ááŸááááºááŒá áºááŒá®ážá á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááœáẠáá±á¬ááºážááœááºáá±á¬áááºážáááºážááŒáá·áº á á áºáá±ážááẠááá¯á¡ááºáááºááŒá áºááẠ- áá»áœááºá¯ááºááá¯á·ááẠဠvector áááŒááºá ááºáá áºáá¯á á®ááœáẠá¡ááá¡áá»áá±ážááá¯á·áá¬ážáá«áááºá ááá¯á¡áá»áá¯ážá¡á á¬áž? á¡áááºá áááºážááẠPHP áá áºáá»áá¯ážáá»áá¯ážááŒá áºáá²á·áá«áá array ááœáẠááá°áá®áá±á¬ááŒááºá ááºáá»á¬ážááœáẠááá°áá®áá±á¬á¡áá»áá¯ážá¡á á¬ážáá»á¬ážáá«áááºááá¯ááºáááºá
á€á¡áá»áááºááœáẠáááºááẠTL ááᯠááá¯á¡ááºáá«ááá±á¬áᯠááœá±ážáááá¬áááºá ááŸááºážá¡ááœááºá ááá¯á¡áá»áááºá ááŸáááŸáá·áºááŒá®ážáá¬áž áá°áá®áá±á¬ áááá¯ááá¯áá±á¬ááᯠáá°áá¬áž á¡ááŸááºá ááºááᯠá¡áá¯á¶ážááŒá¯ááẠááŒá áºááá¯ááºáá«ááá¬ážá á¡á²áá«á áá®á¡áá¯áá®á áááºááœá±á·ááᯠáá±á·áá¬ááŒáá·áºáá¡á±á¬ááºá
áá¯ááºááœáẠááŸáááŒá®ážáá¬áž TL á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬áž
TL ááẠDurov áááŸááºáá¬áá±á¬ááºážáá»ááŸá¯ááŸáá·áº (() áá¬áááºááŒá®ážááŒá
áºáááºáá»á¬ážáááá¯ááºáá®áááẠVKontakte ááááºážáá²ááœááºááœá±ážááœá¬ážáá²á·áááºáá§áááºá¡ááŸááºTelegram áááœá¶á·ááŒáá¯ážáá®áááºá ááŒá®ážáá±á¬á· open source ááŸá¬
Templates are not used now. Instead, the same universal constructors (for example, vector {t:Type} [t] = Vector t) are used w
ááá¯á·áá±á¬áº áá¯ááºáá¯á¶ááœáŸá¬ááᯠááŒá®ážááŒáá·áºá á¯á¶á á±áááºá¡ááœáẠá ááºážá á¬ážááŒáá·áºááŒá áá¯á·á ááŒá±á¬ááááºááá¯áá»áŸáẠGiant of Thought á ááá·áºáá²ááŒá áºá ááºááᯠááŒá±áá¬áá¶ááá¯ááºááẠááŒá áºáááºá
#define ZHUKOV_BYTES_HACK
#ifdef ZHUKOV_BYTES_HACK
/* dirty hack for Zhukov request */
áá«ááŸááá¯áẠáá®ááá¯ááŸáááº-
static const char *reserved_words_polymorhic[] = {
"alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta", NULL
};
á€á¡ááá¯ááºážá¡á ááẠá¥ááá¬- ááá°áá¬áá»á¬ážá¡ááŒá±á¬ááºážááŒá áºáááºá
intHash {alpha:Type} vector<coupleInt<alpha>> = IntHash<alpha>;
áááºážááẠint á vector áá áºáá¯á¡ááŒá Ạhashmap template á¡áá»áá¯ážá¡á á¬ážá á¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºááŒá áºáááºá C++ ááœáẠá€áá²á·ááá¯á·ááŒááºááá«áááº-
template <T> class IntHash {
vector<pair<int,T>> _map;
}
áá«ááŒá±á¬áá·áºá alpha
- á¡áááá
áá¬ážáá¯á¶áž áá«áá±ááá·áº C++ ááŸá¬áᬠT ááá¯á·áá±ážááá¯ááºáá±ááá·áº alphaá beta áá±ážáááŸá¬... áá«áá±ááá·áº parameter 8 áá¯áááºáááá¯áá«áá°ážá á
áááºáá°ážáááºá theta ááŸá¬ á¡áá¯á¶ážáááºááœá¬ážáá«áááºá ááá¯á·ááŒá±á¬áá·áº á
ááá·áºáá®áá¬á
áááºááœáẠáá
áºááŒáááºááá·áº ááá¯ááá¯á·áá±á¬ ááœá±ážááœá±ážááœá²áá»á¬áž ááŸááá¯á¶ááááºá
-- ÐаЎП ÑЎелаÑÑ Ð² TL ÑаблПМÑ
-- Ðл... ÐÑ Ð¿ÑÑÑÑ Ð¿Ð°ÑаЌеÑÑÑ Ð·ÐŸÐ²ÑÑ Ð°Ð»ÑÑа, беÑа,... ÐакОе ÑаЌ еÑÑ Ð±ÑÐºÐ²Ñ ÐµÑÑÑ... Ð, ÑÑÑа!
-- ÐÑаЌЌаÑОка? ÐÑ Ð¿ÐŸÑПЌ МапОÑеЌ
-- СЌПÑÑОÑе, какПй Ñ ÑОМÑакÑÐžÑ Ð¿ÑОЎÑЌал ÐŽÐ»Ñ ÑаблПМПв О векÑПÑа!
-- Ð¢Ñ ÐŽÐŸÐ»Ð±Ð°ÐœÑлÑÑ, как ÐŒÑ ÑÑП паÑÑОÑÑ Ð±ÑЎеЌ?
-- Ðа Ме ÑÑÑÑе, ПМ ÑаЌ ПЎОМ в ÑÑ
еЌе, заÑ
аÑкПЎОÑÑ -- О Пк
ááá¯á·áá±á¬áºáááºážááẠTL "áá±áá¯áá»á¡á¬ážááŒáá·áº" áááááá¯á¶ážáá»ááŸááºáá¬ážáá±á¬á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á¡ááŒá±á¬ááºážááŒá áºáááºá á¡ááŸááºáááẠTelegram áá±á¬ááºáááºáá»á¬ážá¡ááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážááᯠááá·áºááœááºážá ááºážá á¬ážááŒáá«á áá¯á·á
Basil áá áá¬áž
Vasily, [09.10.18 17:07] á¡áá»á¬ážá á¯ááá±á¬á· abstractions ááœá±ááᯠáá±á¬ááºááŒá®áž ááŒááºážááᯠáá¯ááºáá²á·ááá¯ááºááŒá®áž áá¯ááºáá®áá»á¬áá±á«áºááŸá¬ áá»áá¯ááºážáá±á¬ááºááœá± áá»á
ááááºá¡áá±ááŒáá·áº ááááá¯á¶áž docks á០pilot.jpg
ááá¯á·áá±á¬áẠjekichan.webp áá¯ááºááŸ
áá¯ááºáá«áááºá algorithms áá²á· áááºá¹áá»á¬áá²á· áááºážááŸá®ážáá²á·áá°ááœá±áá®áá áá°ááá¯á·á Aho, Ullman ááá¯áááºááŒá®áž áá°ááá¯á·áá²á· DSL ááœá±á¡ááœáẠcompiler ááœá±áá±ážááá¯á·á¡ááœáẠáááºá á¯ááŸá áºááœá±ááŒá¬á¡á±á¬áẠá ááºááŸá¯áá¯ááºáááºážááŸá¬ de facto á á¶ááŒá áºáá¬áá²á· tools ááœá±áá²á· áááºážááŸá®ážááŒá®ážáá¬ážááŒá áºáááºááá¯á· áá»áŸá±á¬áºááá·áºááá¯ááºáááºá áá¯ááºáááºáá¯ááºá .á
á
á¬áá±ážáá°
16.12 04:18 Vasily- áá»áœááºáá±á¬á·áºá¡ááŒááºá¡áá áá áºá á¯á¶áá áºáá±á¬ááºá lex + yacc ááᯠááá»áœááºážáá»ááºáá°áž
16.12 04:18 Vasily - ááá¯ááºááẠáá«ááŸááºážááŒááá¯á· áááá°ážá
16.12 04:18 Vasily- áá±á¬ááºážááŒá®á áá«ááŸááá¯áẠVK ááŸá¬ááŸááá²á· ááá¯ááºážá¡áá±á¡ááœááºá¡ááœáẠáá±ážáá±á¬ááºáá¶ááááºá
16.12 04:19 Vasily - á¡ááŒá¬áž 3k+ ááá¯ááºážáá»á¬áž<censored>
parser á¡á á¬áž
ááŒáœááºážáá»ááºáá
áºáᯠááŒá
áºááá¯ááºáá«ááá¬ážá áááºááá¯áá² ááŒáá·áºáá¡á±á¬ááº
nametype = re.match(r'([a-zA-Z.0-9_]+)(#[0-9a-f]+)?([^=]*)=s*([a-zA-Z.<>0-9_]+);', line);
if (not nametype):
if (not re.match(r'vector#1cb5c415 {t:Type} # [ t ] = Vector t;', line)):
print('Bad line found: ' + line);
Python ááŸá ááá¯ááºáž 1100+ á áá¯á¶ááŸááºá¡áá¯á¶ážá¡ááŸá¯ááºážá¡áá»áá¯á· + vector á¡áá»áá¯ážá¡á á¬ážá á¡áá°ážááá á¹á áááºáá»á¬ážááᯠTL syntax á¡á ááŒá áºááá·áºáááºáᯠá¡á á®á¡á á¥áºááœáẠááŒá±ááŒá¬áá¬ážáá±á¬áºáááºáž áááºážááá¯á·á áááºážááᯠဠsyntax ááœááºááá·áºá ááœá²ááŒááºážá áááºááŒá¬áá¬ážááẠ... áá±ážá áá¬ááŸá¬á á€á¡á¶á·ááœááºá¡ááŸá¯á¡áá¯á¶ážá á¯á¶ááá¯á·ááᯠá¡áááºááŒá±á¬áá·áº ááŸá±á¬ááºááŸááºááááºážáОá á¬ááœááºá á¬áááºážááœá±á¡á áááºáá°áá០á¡á²áá«ááᯠááœá²ááŒááºážá áááºááŒá¬ááŸá¬ ááá¯ááºáá°ážááá¯ááẠááá¯ááŒá®ážáá±á¬á· áááºážáá¬á áá¬áá«áá²á
á áá¬ážáá ááº... CRC32 á á áºáá±ážááŸá¯á¡ááŒá±á¬ááºáž ááŒá±á¬áá²á·áᬠááŸááºáááá¬ážá ááá¯á·ááŒá±á¬áá·áºá Telegram Desktop code generator ááœáẠCRC32 ááœááºáá»ááºáá¬ážáá±á¬ á¡áá»áá¯ážá¡á á¬ážáá»á¬ážá¡ááœáẠááŒáœááºážáá»ááºá á¬áááºážáá áºáá¯ááŸááááºá áááá¯ááºáá®áá« áá¯á¶ááœááºáá±á¬áºááŒáá¬ážááá·áºá¡ááá¯ááºáž!
Vasilyá [18.12 22:49] ááŸáá·áº á€áá±áá¬ááœáẠááá¯ááá¯á·áá±á¬ TL ááᯠááá¯á¡ááºááá¬áž á ááºážá á¬ážááá·áºáááºá
á¡ááŒá¬ážá¡ááŒá¬ážáá±á¬ á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážááŸáá·áº ááŸá¯ááºááá¯áá«áá ááá¯ááºážááœá²ááŸá¯áá»á¬ážááᯠá áááºááá·áºááœááºážáá«áááºá ááœá²ááŒááºážá áááºááŒá¬áá°á áááºáááºááẠááá¯ááºážáá±á«ááºážá á¯á¶á á¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºáá»á¬ážááᯠáá»áá¯ážáá»ááºáááºááŒá áºáááºá
tdesktop áááºážáá«áá«áááºá
one-liners ááŸáá·áºáááºáááºááá·áºá¡áá»ááºááᯠááŸááºáá¬ážáá¬ážáá«á áá±á¬ááºá¡áááºážáááºááŒá¬áá«á áááºážááá¯ááŒááºááœá¬ážáá«áááºá
á¡áá¯áá±á áááºáá®ááááº-cli ááẠááá¬ážáááºááá¯ááºáá«á Telegram Desktop ááẠááá¬ážáááºááŒá áºáááºá ááá¯á·áá±á¬áº á¡ááŒá¬ážá¡áá¬áá»á¬ážáá±á¬á áááºáá°áááá²?á á Android áá¯á¶ážá áœá²áá°áá¯ááºááœááºá schema parser áá¯á¶ážááááŸááá« (ááá¯á¡áá¬ááẠopen source ááŸáá·áºáááºáááºááŒá®áž áá±ážááœááºážáá¯ááºá áá¬ááŒá áºáá±á¬áºáááºážá á€á¡áá¬ááẠáá¯áááá¡ááá¯ááºážá¡ááœááºááŒá áºáááº)á ááá¯á·áá±á¬áº á¡ááŒá¬ážáááºá áá¬áá±á¬ááºážáá±á¬áá¯ááºáá»á¬ážá áœá¬ááŸááá±á¬áºáááºáž áááºážááá¯á·á¡ááŒá±á¬ááºážá á¡á±á¬ááºáá« áá¯ááºáááœá²á
á¡ááŒá¬ážáááºááá·áºáá±ážááœááºážáá»á¬ážááᯠáá¶áá«ááºá ááºáááºááŒááºážá áááºááœá±á·ááœáẠááá¯ážá á±ááááºážá á¥ááá¬á¡á¬ážááŒáá·áºá áááºážááá¯á·ááẠbit fields ááŸáá·áº conditional fields áá»á¬ážááŒáá·áº ááœá²ááœá¬ážáááº-
áááááá¬áá¬
flags.0? true
á¡áá¶ááᯠáááºááŸááºáá«á á¡ááœááºááẠáá á¹á á¯áá¹áááºááŸáá·áº ááŸááºáááºáᯠááá¯ááá¯áááºááááááá¬áá¬
flags.1? int
áááºáááºááẠáá á¹á á¯áá¹áááºááŒá áºááŒá®áž áááºáá¯ááºááẠááá¯á¡ááºáááºáᯠááá¯ááá¯áááºáVasily: ááŒááºážá ááá°áá²á·á áááºážáá¬áá¯ááºáá¬áá²á
Vasily- doc ááá áºáá±áá¬áá¬ááœáẠtrue ááẠáá¯áá¡áá»á¬ážáááá¬á¡áá»áá¯ážá¡á á¬ážááŒá áºááŒá±á¬ááºážáá±á¬áºááŒáá¬ážáá±á¬áºáááºáž áááºážááá¯á·á docs ááŸáá áºá á¯á¶áá áºáá¯ááá¯á á¯áá±á¬ááºážááŒááºážááẠáááºááœá±á·ááá»áá«á
Vasily- ááœáá·áºáááºážáá±á¬ á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážááœáẠááá¯ááá¯á·áá±á¬á¡áá¬áá»áá¯ážáááŸááá«á ááá¯á·áá±á¬áº áá»áá¯ááºážáá±á¬ááºááŸáá·áº áá»á¬ážááœááºáá»á¬ážá áœá¬ááŸááááºá
Telethon ááá±á¬ áááºááá¯áá²á MTProto á áá±á«ááºážá
ááºááᯠááŒáá·áºááá¯ááºáá»áŸáẠá¥ááá¬áá
áºáᯠ- á
á¬ááœááºá
á¬áááºážáá»á¬ážááœáẠááá¯ááá¯á·áá±á¬á¡ááá¯ááºážáá»á¬áž ááŸááááºá ááá¯á·áá±á¬áº ááááááºá %
áááºážááᯠ"áá±ážáá¬ážáá±á¬ ááá¬á¡áá»áá¯ážá¡á
á¬ážááŸáá·áº áááºááá¯ááºáááº" áá¯áᬠáá±á¬áºááŒáá¬ážáá«áááºá á¡á±á¬ááºáá±á¬áºááŒáá« á¥ááá¬áá»á¬ážááœáẠá¡ááŸá¬ážáá
áºáᯠááá¯á·ááá¯áẠá
á¬ááœááºá
á¬áááºážáááŸááá±á¬ á¡áá¬áá
áºáᯠááŒá
áºáááº-
Vasilyá [22.06.18/18/38 XNUMX:XNUMX] áá áºáá±áá¬áááºážááœááº-
msg_container#73f1f8dc messages:vector message = MessageContainer;
ááá°áá®áá±á¬ áá áºáá¯ááŸá¬
msg_container#73f1f8dc messages:vector<%Message> = MessageContainer;
á€á¡áá¬áá»á¬ážááẠááŒá®ážáá¬ážáá±á¬ááœá¬ááŒá¬ážáá»ááºááŸá áºáá¯ááŒá áºááŒá®áž áááºááœá±á·ááááœáẠááá¯ááºáá¯á¶ážáá®ážáá¯á¶á¡áá»áá¯á· ááœááºáá±á«áºáá¬áááºá
ááœááºááẠá¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºááœá±ááᯠáá«áááŒááºáá°ážáááᯠá¡á²áá«ááᯠáááœá±á·áááá°ážá
áááºááŒáá·áº áááºáá®ááœááºááŒáá·áº ááœá²ááŒááºážá áááºááŒá¬ááŒááºážá
áá°á·á¡á á®á¡á ááºááẠá¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºááŒá áºáááºá
msg_container
áá±á¬ááºáá áºáá¯á áá±ážááœááºážá % áá±á¬ááºáá»ááºáá±ážáááºá ááá±á¬áºááŒáá«á
Vadim Goncharová [22.06.18/19/22 XNUMX:XNUMX PM] áá²á· tdesktop ááŸá¬áá¬ážá
Vasilyá [22.06.18/19/23 XNUMX:XNUMX] ááá¯á·áá±á¬áº ááááºážááŸááá°áá»á¬ážáá±á«áºááŸá áááºážááá¯á·á TL parser ááẠáááºážááᯠáá á¬ážááá¯ááºáá±á¬á·áá±á
// parsed manually
TL ááẠááŸááá±á¬ á áááºáá°ážá áááºáááºážáá áºáá¯ááŒá áºááŒá®áž áááºážááᯠáááºáá°áá»áŸ á¡ááŒáá·áºá¡á á¡áá±á¬ááºá¡áááºááá±á¬áºáá±á
áááºážááá¯á·á¡á á®á¡á ááºááá¬ážááŸááºážááœáẠ% áááŸááá«á
áá«áá±ááá·áº áá®ááŸá¬ á á¬ááœááºá á¬áááºážá áá°á·áá¬áá° ááá·áºáá»ááºáá±áá¬ááá¯á· xs
á¡á²áá«ááᯠááá¹áá«ááŸá¬ááœá±á·áááºá áá±á«áá¬áááœá±ááᯠáá±á¬áºááŒááá¯á· áá±á·ááœá¬ážááá¯ááºáááºá
áá±á¬ááºážááŒá®á ááẠTL ááœááºá¡ááá¯ááºááá¯ááŒááºáá²á·áááºá áá®áá¬áááºáááŸááá²áááºážááá¯áááºáááœááºáááá¯ááºáá«á
âá¡ááºážá ááá¯áá«á áá¯á·áâ á¡ááŒá¬ážá á¬áááºáá°áá áºáŠážá âáááºážáᬠá¡áá¬á¡á¬ážáá¯á¶ážááᯠáá±áááºáááºá áá«ááŒá±á¬áá·áº áá¯ááºááá·áºáá¯ááºááá¯ááºáá¬ááᯠááŒáá«â ááá¯á·ááŒá±á¬áááá·áºáááºá
Vasily á âparser á¡ááœááºá áá«ááá¯áá²á·á¡áá¬ááœá±ááá¯áááºá
args: /* empty */ { $$ = NULL; }
| args arg { $$ = g_list_append( $1, $2 ); }
;
arg: LC_ID ':' type-term { $$ = tl_arg_new( $1, $3 ); }
| LC_ID ':' condition '?' type-term { $$ = tl_arg_new_cond( $1, $5, $3 ); free($3); }
| UC_ID ':' type-term { $$ = tl_arg_new( $1, $3 ); }
| type-term { $$ = tl_arg_new( "", $1 ); }
| '[' LC_ID ']' { $$ = tl_arg_new_mult( "", tl_type_new( $2, TYPE_MOD_NONE ) ); }
;
áá áºáááºážáááºážáá²á· ááá¯áá°áááºá
struct tree *parse_args4 (void) {
PARSE_INIT (type_args4);
struct parse so = save_parse ();
PARSE_TRY (parse_optional_arg_def);
if (S) {
tree_add_child (T, S);
} else {
load_parse (so);
}
if (LEX_CHAR ('!')) {
PARSE_ADD (type_exclam);
EXPECT ("!");
}
PARSE_TRY_PES (parse_type_term);
PARSE_OK;
}
ááá¯á·ááá¯ááº
# Regex to match the whole line
match = re.match(r'''
^ # We want to match from the beginning to the end
([w.]+) # The .tl object can contain alpha_name or namespace.alpha_name
(?:
# # After the name, comes the ID of the object
([0-9a-f]+) # The constructor ID is in hexadecimal form
)? # If no constructor ID was given, CRC32 the 'tl' to determine it
(?:s # After that, we want to match its arguments (name:type)
{? # For handling the start of the '{X:Type}' case
w+ # The argument name will always be an alpha-only name
: # Then comes the separator between name:type
[wd<>#.?!]+ # The type is slightly more complex, since it's alphanumeric and it can
# also have Vector<type>, flags:# and flags.0?default, plus :!X as type
}? # For handling the end of the '{X:Type}' case
)* # Match 0 or more arguments
s # Leave a space between the arguments and the equal
=
s # Leave another space between the equal and the result
([wd<>#.?]+) # The result can again be as complex as any argument type
;$ # Finally, the line should always end with ;
''', tl, re.IGNORECASE | re.VERBOSE)
á€ááẠENTIRE lexer ááŒá áºáááº-
---functions--- return FUNCTIONS;
---types--- return TYPES;
[a-z][a-zA-Z0-9_]* yylval.string = strdup(yytext); return LC_ID;
[A-Z][a-zA-Z0-9_]* yylval.string = strdup(yytext); return UC_ID;
[0-9]+ yylval.number = atoi(yytext); return NUM;
#[0-9a-fA-F]{1,8} yylval.number = strtol(yytext+1, NULL, 16); return ID_HASH;
n /* skip new line */
[ t]+ /* skip spaces */
//.*$ /* skip comments */
/*.**/ /* skip comments */
. return (int)yytext[0];
á¡á²áá«ááœá± ááá¯ááá¯ážááŸááºážáá¬á áááºáá¬á áœá¬ áá¬ážáá±ážáá«á"
áá±áá¯áá»á¡á¬ážááŒáá·áºá á¡áá¯á¶ážááœááºá TL á á¡ááŸááºááááºá¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ ááœá²ááŒááºážá
áááºááŒá¬ááŸá¯á¡ááœáẠáá¯ááºáá®ážá
ááºááẠááá¹áá«ááá¯ááºáž 100 ááŸáá·áº áá»ááºááá±áá¬á ~ 300 ááá¯ááºážáá»á¬áž (á¡á¬ážáá¯á¶ážá¡áá«á¡áááºá print
á¡áá»áá¯ážá¡á
á¬ážáá±á¬ááºážáá»á¬áž á¡áá«á¡áááºá á¡áááºážáá
áºáá¯á
á®ááœáẠá
á°ážá
ááºážáá±á·áá¬áááºá¡ááœáẠá¡áá»ááºá¡áááºááᯠááá¯ááºááá·áºáá«á polymorphic á¡áá»áá¯ážá¡á
á¬ážáá
áºáá¯á
á®ááẠá¡áá»ááºážááŸá®ážáá±á¬ abstract base class á¡ááŒá
áºááá¯á· ááŒá±á¬ááºážáá²ááœá¬ážáᬠáááºáá±á¬ááºáá°áá»á¬ážááẠáááºážáá¶á០á¡ááœá±áááºáá¶ááŒá®áž áá¶áá«ááºá
ááºááŸáá·áº deserialization á¡ááœáẠáááºážáááºážáá»á¬ážááŸááááºá
á¡áá»áá¯ážá¡á
á¬ážáá¬áá¬á
áá¬ážááœáẠá¡áá»áá¯ážá¡á
á¬ážáááŸáááŒááºážá
ááŒááºážááŒááºážáááºááẠá á¬ááá¯ááºááŒááºážááẠáá±á¬ááºážá ááá¯ááºáá¬ážá ááá¯ááºáá«á áááºážááẠholivar ááá¯ááºáá«á (áá»áœááºá¯ááºááẠááŒá±á¬ááºážáá²áá±áá±á¬áá¬áá¬á áá¬ážáá»á¬ážááᯠááŸá áºáááºáá±á¬áºáááºáž)á ááá¯á·áá±á¬áº TL á¡ááœááºážááŸá ááá¯ááºáá±á¬áºáá»ááºááŒá áºáááºá áááºážááá¯á¡ááŒá±áá¶á áá¬áá¬á áá¬ážááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠá á áºáá±ážááŸá¯á¡á¬ážáá¯á¶ážááᯠáá±ážááá·áºáááºá áá±á¬ááºážááŒá®á á¡áá¯áá±á áá°á·ááᯠáá áá«á á±áá²á·á áá«áá±ááá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºááá¯á·á áá«áá±ááá·áº á¡áááºážáá¯á¶ážáá±á¬á· áá°ááá¯á·ááᯠáá±á¬áºááŒááá·áºáááºá ááŒá®ážáá±á¬á· áááºááá¯á¡ááœáá·áºá¡áá±ážááœá± ááá¯áá»ááºáá²á
ááááá¯á¶ážá¡áá±áá²á· ááá·áºáááºáá»ááºááœá±á á€áá±áá¬ááœáẠááá¯ááºáá»á¬ážááᯠá¡ááºáá¯ááºáááºáááºá¡ááœáẠá á¬ááœááºá á¬áááºážáá»á¬ážááœáẠáá»áœááºá¯ááºááá¯á·ááœá±á·ááŒááºááááº-
ááá¯á·áá±á¬áẠááá¯ááºá ááœáá á¯á¶á¡ááŒá±á¬ááºážá¡áá¬ááᯠá¡ááá¯ááºážáá»á¬ážááœá²áá¬ážáááºá á¡á áááºá¡ááá¯ááºážá¡á¬ážáá¯á¶ážááẠá¡ááœááºá¡á á¬ážáá°áá®áááẠ( part_size ) á¡á±á¬ááºáá«á¡ááŒá±á¡áá±áá»á¬ážááŸáá·áº ááá¯ááºáá®ááááº-
part_size % 1024 = 0
(1KB ááŒáá·áº ááá¯ááºážááŒá¬ážááá¯ááºáááº)524288 % part_size = 0
(512KB ááᯠpart_size ááŒáá·áº á¡áá®á¡áá»áŸ ááœá²ááá¯ááºááááº)áááºážáá¡ááœááºá¡á á¬ážááẠpart_size áááºáááºážáá±á¬ááŒá±á¬áá·áº áá±á¬ááºáá¯á¶ážá¡ááá¯ááºážááẠá€á¡ááŒá±á¡áá±áá»á¬ážááᯠáá»á±áááºáááºáááá¯á¡ááºáá«á
á¡ááá¯ááºážáá áºáá¯á á®ááœáẠsequence number ááŸáááá·áºáááºá ááá¯ááº_á¡ááá¯ááºáž0 á០2,999 áááºááá¯ážááŒáá·áºá
ááá¯ááºááᯠá¡ááá¯ááºážááá¯ááºážááœá²ááŒá®ážáá«á áááºážááᯠáá¬áá¬ááœáẠááááºážáááºážááẠáááºážáááºážááᯠááœá±ážáá»ááºááẠááá¯á¡ááºáááºá á¡áá¯á¶ážááŒá¯
upload.saveBigFilePart ááá¯ááºá á¡ááœááºá¡á á¬áž á¡ááŒáá·áºá¡á á¯á¶ááẠ10 MB ááŸáá·áº á¡ááẠááŒá áºáá«ááupload.saveFilePart áá±ážáááºáá±á¬ááá¯ááºáá»á¬ážá¡ááœááºá
[âŠ] á¡á±á¬ááºáá« áá±áá¬ááá·áºááœááºážááŸá¯ á¡ááŸá¬ážá¡ááœááºážáá»á¬ážáá²á០áá áºáá¯ááᯠááŒááºáááá¯ááºáááº-
- FILE_PARTS_INVALID - á¡á áááºá¡ááá¯ááºážá¡áá±á¡ááœáẠáááŸááºáááºáá«á áááºááá¯ážá ááŒá¬ážááŸá¬ááá¯ááºáá°ážá
1..3000
á€á¡áá¬áá»á¬ážáá²á០áá
áºáá¯áá¯ááẠá¡á
á®á¡á
ááºááœáẠááŸááá±áá«ááá¬ážá TL ááŒáá·áº áá
áºáááºážáááºážááŒáá·áº áá±á¬áºááŒááá¯ááºáá«ááá¬ážá áááŸá áá«áá±ááá·áº ááœáá·áºááœáŸááºáá«á áá±ááºáá±á¬ááºáž Turbo Pascal ááá±ážáá²á· á¡áá»áá¯ážá¡á
á¬ážááœá±ááá¯áá±á¬áẠáá±á¬áºááŒááá¯ááºáá²á·áááºá á¡ááá¯ááºážá¡ááŒá¬ážáá»á¬áž. ááŒá®ážâáá±á¬á· áá°âáá±á¬ááºâáááºâáá
áºâáá¯âááá¯âáá¯ááºâááá¯ááºâáááºâá á¡áá¯âááá¯âááâáá¬âáááºá enum
- áá¯á¶áá± (á¡áá±áž) áááºááá¯ážáá»á¬áž á
á¬áááºážáá±á¬ááºááŒááºáž áá«áááºáá±á¬ á¡áá»áá¯ážá¡á
á¬ážá C - numeric áá²á·ááá¯á·áá±á¬ áá¬áá¬á
áá¬ážáá»á¬ážááœááºá áááºá
áááºáá²áá áá»áœááºá¯ááºááá¯á·ááẠá¡áá»áá¯ážá¡á
á¬ážáá»á¬ážá¡ááŒá±á¬ááºážááá¯áᬠááá¯á¡áá»áááºá¡áá ááŒá±á¬áá±áá«áááºá ááááºáž. áá«áá±ááá·áº arrays ááœá±á strings ááœá±áááºážááŸááá«ááẠ... á¥ááá¬á áá® string ááŸá¬ áá¯ááºážáá¶áá«ááºáá
áºáá¯áᬠáá«áááºááá¯ááºáá¬ááᯠáá±á¬áºááŒááᬠáá±á¬ááºážáá«áááºá
áá«ááœá±ááᯠTL ááŸá¬ áááŸááá«áá°ážá áá«áá±ááá·áº á¥ááá¬á JSON Schema ááŸá¬ ááŸááá«áááºá á¡áááºá 512 KB á ááœá²ááœá²ááŸá¯á¡á¬áž á¡ááŒá¬ážáá°áá
áºáŠážáŠážá áááºážááẠáá¯ááºááœáẠá
á
áºáá±ážááẠááá¯á¡ááºáá±áá±ážááŒá±á¬ááºáž ááá·áºááœááºááá¯ááºáá«áá client ááẠááá¯ážááá¯ážááŸááºážááŸááºážáááºááŒá
áºááŒá±á¬ááºáž áá±áá»á¬áá«á
á±á ááááºááá¯áẠá¡ááœá¬á¡áá±ážá០áá¶áá«ááºááᯠááá¯á·áá«á 1..3000
(áá«áá²á· áááºááá¯ááºáá²á· error á áá±á«áºááá¬ááá¯ááºáá°áž) ááŒá
áºááá¯ááºáá«á·ááá¬ážá
á áá¬ážáá áẠá¡ááŸá¬ážáá»á¬ážááŸáá·áº ááŒááºáá¬áááºááá¯ážáá»á¬ážá¡ááŒá±á¬ááºážá TL áá²á· ááœá²áá¯ááºáá°ážáá²á· áá°ááœá±á¡ááœááºáá±á¬áẠáá»ááºá áá ááŸá¯ááºáá«ážáá±ááẠ- á¡á²áá«á áá«ááá¯á·ááᯠáá»ááºáá»ááºáž ááá¯ážááááºážáá²á·áá°ážá áá áºáá¯á á® TL ááŸá function áá áºáá¯ááẠáá±á¬áºááŒáá¬ážáá±á¬ return type ááá¯áá¬áá error áá áºáá¯áá« ááŒááºáá±ážááá¯ááºáááºá áá«áá±ááá·áº áá«ááᯠTL ááá¯ááºááá¯ááºá áá¯ááºáá°ááá¯á·áááá«áá°ážá áá¯ááºáá«áááºá á¡á²áá«ááᯠáá¬ážáááºááá¯ááºáááᯠáááºááœá±á·ááŸá¬ nafig áááá¯á¡ááºáá«áá°áž (ááááºáá±á¬á· RPC ááᯠááá°áá®áá²á·áááºážáááºážááœá±áá²á· áá¯ááºáá±á¬ááºááá¯ááºáá±ááá·áº áá®ááá¯ááŒááºááœá¬ážáá«áááº) - áá«áá±ááá·áº áá±á¬ááºážáááºáá¯á¶á á ááá¹áááááºá¹áá»á¬á¡áá»áá¯ážá¡á á¬ážááœá±áá²á· ááá·áºááŸááºážá ááºááŒááºááŒááºážáá²á· áááºáááºááá¯á·áá±á¬á world?.. ááœá²ááœá²-áá«ááŒá±á¬áá·áº áá áºáááºáááºážáá²á
áá±á¬ááºáá¯á¶ážá¡áá±áá²á· áááºááŸá¯ááá¯ááºááŸá¯áá±á¬ áááºááá¯áá²á áá±á¬ááºážááŒá®á áá±áá°áá»á¡á¬ážááŒáá·áºá áá«ááá¯áá»ááºáá«áááºá áá±á«áºááŒáá»áẠáááºážááẠschema ááœááºááŸááºáááºááŸá¯ááŸááá«ááá¬áž (áá
áºáááºáááºážááẠJSON schema ááœááºááŒá
áºáááº)á ááá¯á·áá±á¬áºáááºážááŸáá·áºáááºážáá¬áá±áá«áá áááºááœá±á·áááºááœááºáá±á¬- á¡áááºážáá¯á¶áž á¡ááºááááºáá»á¬ážá¡ááœááºážááœá²ááŒá¬ážááŸá¯áá»á¬ážááá¯ááŒáá·áºááŸá¯ááẠá¡áááºáááŒá±ááŒá
áºáá±áá«ááá¬ážá áááºááá¯ááºááá¯áẠááŸá¬ááŒáá·áºáá«á
-channelFull#76af5481 flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector<BotInfo> migrated_from_chat_id:flags.4?int migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int = ChatFull;
+channelFull#1c87a71a flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_view_stats:flags.12?true id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector<BotInfo> migrated_from_chat_id:flags.4?int migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int = ChatFull;
ááá¯á·ááá¯ááº
-message#44f9b43d flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long = Message;
+message#44f9b43d flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true from_scheduled:flags.18?true id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long = Message;
áá áºá á¯á¶áá áºáá±á¬ááºá áááºážááá¯ááŸá áºáááºáá±á¬áºáááºážá á¥ááá¬á¡á¬ážááŒáá·áº GitHub ááẠááá¯ááŸááºáá»á¬ážáá±á¬á á¬ááŒá±á¬ááºážáá»á¬ážá¡ááœááºáž á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠáá®ážáá±á¬ááºážááá¯ážááŒááẠááŒááºážááá¯áá¬ážáááºá "ááœá²ááŒá¬ážááŸá¯ 10 áá¯ááá¯ááŸá¬áá«" ááááºážááŒá áºááŒá®áž áŠážááŸá±á¬ááºá áá»ááºáá»ááºážááŒááºáá¬á á¥ááá¬ááŸá áºáá¯áá¯á¶ážááŸá¬ á¡á áá²á·á¡áá¯á¶ážá á¡áá°áá°áá«áá²á á¡áááºáá áºáá±áá¬áá¬ááŸá¬ á¡ááŒááºážá¡áááºáááºááá¯á· ááá¯áá«áááº... áá»áœááºáá±á¬á·áºá¡ááŒááºá¡ááá±á¬á· áá«á áá®á¡áá¯áá®áááºáááºááá¯ááºáá°ážá áá«áá±ááá·áº á¡ááŒááºá¡á¬áá¯á¶áááºáááºáá«á áá áºáááºááŒá®áž áááá·áºááŸááºáž.
á áá¬ážáá ááº, áá®á¡áá¯áá®áááá·áºááŸááºážááŸá¯ááŸáá·áº áááºáááº. á¡áááºááŒá±á¬áá·áº bit fields ááá¯á¡ááºááááºážá ááááºáá°ážáá¬áž á¡áá¶á· á¡áá»áá¯ážá¡á á¬ážáá®á¡áá¯áá®áá²á·á¡ááŒááºá ááá±á¬ááºážáá°ážáá¬ážá schema á á¡á á±á¬ááá¯ááºážáá¬ážááŸááºážáá»á¬ážááœáẠááŸááºážáááºážáá»ááºááᯠááœá±á·ááŒááºááá¯ááºáá«áááºá ááááá±á¬á· áá¯ááºáá«áááºá ááŸá¬áá»á±ááá¯ááºážá¡ááœáẠá¡áá»áá¯ážá¡á á¬ážá¡áá áºááᯠáááºáá®ážáá¬ážáá«áááºá á€á¡á á±á·á¡áááºáá»á¬ážááẠá€áá¯á¶á á¶ááœáẠááŸááá±áá«áá±ážáááºá á¥ááá¬á
storage.fileUnknown#aa963b05 = storage.FileType;
storage.filePartial#40bc6f52 = storage.FileType;
storage.fileJpeg#7efe0e = storage.FileType;
storage.fileGif#cae1aadf = storage.FileType;
storage.filePng#a4f63c0 = storage.FileType;
storage.filePdf#ae1e508d = storage.FileType;
storage.fileMp3#528a0677 = storage.FileType;
storage.fileMov#4b09ebbc = storage.FileType;
storage.fileMp4#b3cea0e4 = storage.FileType;
storage.fileWebp#1081464c = storage.FileType;
ááá¯á·áá±á¬áº ááᯠááá·áºááœáẠááœá±ážáá»ááºááá¯ááºáá±á¬ á¡ááœáẠá áá¯ááŸááááºááá¯áá«áá ááŒá áºááá¯ááºáá»á±ááŸááá±á¬ ááœá±ážáá»ááºááŸá¯á¡á¬ážáá¯á¶ážá¡ááœáẠá¡áá»áá¯ážá¡á á¬áž áá áá»áá¯áž ááá¯á¡ááºáá«áááºá áá±á«ááºážá ááºáá±á«ááºááœá²ááŸá¯á ááá¯á·ááŒá±á¬áá·áº TL áá®á¡áá¯áá®á ááŒááºáááºááá·áºááŸááºážááŸá¯ááẠááŒááºážáááºáá±á¬ áá¶áá«ááºá ááºá¡ááŒá áºááŸááºá áá¶ááœááºážááŒááºážááŸáá·áº áá áºááẠááŒáá¯áá»ááœá¬ážáááºá
áá±á¬ááºááŒá®áž áá®áá±á¬ááºááœá±á áá°ááá¯á·ááá¯ááºááá¯áẠá á¬ááá¯ááºáá²á· áá±áá¬ááœá±ááŸá¬ áá±á¬ááºáá»ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá MTProto (áá±á¬ááºá¡áááºáž) ááœááºá áá¯á¶á·ááŒááºáá»ááºááᯠGzip ááŒáá·áº áá»á¯á¶á·ááá¯ááºáááºá á¡ááœáŸá¬áá»á¬ážááŸáá·áº schema ááá¯áá»áá¯ážáá±á¬ááºááŒááºážááŸááœá²á á¡áá¬á¡á¬ážáá¯á¶ážááẠááá·áºáá»á±á¬áºáááºá áá áºááŒáááºááŸáá·áº RpcResult ááá¯ááºááá¯ááºáááááºáá²áááºážáá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážá á¡ááºáž..áá¬ááá¯á· áá®ááá¯áá¯ááºááá¬áá².. áááºáá±áá¬áááᯠááááááºáá¬ážááá¯ááºá¡á±á¬áẠáá»áá¯ááºážáá±á¬ááºáá²á· ááŒááºááááºá
ááá¯á·ááá¯áẠá¡ááŒá¬ážá¥ááá¬áá
áºáᯠáá»áœááºá¯ááºááá¯á·ááẠá¡ááŸá¬ážáá
áºáá¯ááœá±á·ááŸáááẠ- ááá¯á·ááá¯ááºááẠInputPeerUser
á¡á
á¬áž InputUser
. ááá¯á·ááá¯áẠá¡ááŒááºá¡ááŸááºá áá«áá±ááá·áº á¡áá¯ááºááŒá
áºáá²á·áááº! ááá¯ááá¯áááºááŸá¬á áá¬áá¬ááẠá¡áá»áá¯ážá¡á
á¬ážááᯠááá¯áá
áá¯ááºáá«á áá«á áááºááá¯ááŒá
áºááá¯ááºááá²á á¡ááŒá±ááᯠtelegram-cli á០áá¯ááºá¡ááá¯ááºážá¡á
áá»á¬ážááŒáá·áº á¡áá»ááºááŒáááá·áºáááº-
if (tgl_get_peer_type (E->id) != TGL_PEER_CHANNEL || (C && (C->flags & TGLCHF_MEGAGROUP))) {
out_int (CODE_messages_get_history);
out_peer_id (TLS, E->id);
} else {
out_int (CODE_channels_get_important_history);
out_int (CODE_input_channel);
out_int (tgl_get_peer_id (E->id));
out_long (E->id.access_hash);
}
out_int (E->max_id);
out_int (E->offset);
out_int (E->limit);
out_int (0);
out_int (0);
áá áºáááºážááá¯ááá±á¬áº á€áá±áá¬ááœáẠá¡ááŸááºá ááºááᯠááŒá®ážáá«ááŒá®á ááá¯ááºááá¯ááºáá¯ááºááá¯ááºáá±ážáá«á áá¬áá¬ááᯠá¡áá¬ážáá°áá¯á¶á á¶ááŒáá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºáá«ááá¬ážá á áá°á¡áá áá áºááŒáááºááŒá®ážáá«á áááºážááẠá¡áá¯ááºááŒá áºáááá·áºáááºá ááá¯á·áá±á¬áº áá±á¬ááºááá¯ááºážááœáẠá¡ááºááááºáá»á¬ážááŒáá·áº áááºážááᯠááẠáááºááá¯á·áá¶á·ááá¯ážááá¯ááºáááºáááºážá á¡á á®á¡á á¥áºá áá¬áá² ááá¯ááºáá¬ážá ááŒá®ážáá±á¬á· áá±á¬ááºáá±ážááœááºážáá áºáá¯áá® áááºááœá¬ážáá«áááºá
áá¬ážááŸááºážááŒá±á¬ááºážááŒááºážá á¡ááœáŸá¬
áá¯ááºáá±áá¬ážáá±á¬ schemas ááááá¯ááºážááŒá±á¬ááºážá¡áá±á«áº á¡ááŒá±áá¶á schema áá¬ážááŸááºážáá»á¬ážááᯠá¡áááºááŒá±á¬áá·áº á¡ááœáŸá¬áá»á¬ážáᯠáá±á«áºáá±á«áºáááááºážá áááºááŸá¬ážáááºááŸá¬á á¡á ááá¯ááºážááœáẠá¡ááŒá±áá¶á¡áá¬áá»á¬ážááᯠáááŒá±á¬ááºážáá²áá±á¬á¡á á®á¡á á¥áºááŒáá·áº áá¯ááºáá±á¬ááºááá¯ááºáááºáᯠá á¬áá±ážáá°áááºááááºá ááá¯á¡ááºááá·áºá¡áá«ááŸáᬠáááºážááá¯á·ááẠááá°áá®áá±á¬áá¬ážááŸááºážá¡ááá¯áẠáá¯ááºáá±á¬ááºáá±ááŒá±á¬ááºáž áá®ážááŒá¬ážáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠááœáŸááºááŒáá±áá¯á¶ááááºá áá°á¡áá á¡ááŒá¶áá±á¬ááºážáá áºáá¯ááẠ- ááŸáá·áº á¡ááá¯ááá¹áá¡áá áºááẠ"áá±á¬ááŸá±á¬áá«" ááá¯ááá·áºá¡ááá¯ááºáž á¡áá±á¬ááºážáá±á«áºááœáẠá¡ááœáŸá¬ááá¯ááºááŒá áºáááºá áá«áá±ááá·áº áááºááᯠááŒá®ážááœá¬ážáá² ááŒáá·áºáá¡á±á¬ááºá á¡ááŸááºáá«áá²á á¡á ááááºážá ááŒáá·áºááá¯á·áááŒá áºááá¯ááºáá°áž - á¡á²áá«á áááºá áá¬áá±á¬ááºážáááºá áá«áá±ááá·áº á¡ááŒá±áá¶á¡ááœáŸá¬áá¯á¶á á¶á ááá¯ážááá¯ážááŸááºážááŸááºážáááŸááá«áá°ážá á¡ááœáŸá¬ 2 ááœáẠá áááºáá²á·áááºá á á¬ááœááºá á¬áááºážááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž á¡áá°áž TL á¡ááºá¹áá«áááºá¡ááŒá±á¬ááºáž ááŒá±á¬ááŒáááº-
á¡áááºá client ááẠLayer 2 ááᯠáá¶á·ááá¯ážáá±ážáááºááá¯áá«áá á¡á±á¬ááºáá« constructor ááᯠá¡áá¯á¶ážááŒá¯ááá«áááºá
invokeWithLayer2#289dd1f6 {X:Type} query:!X = X;
áááºááœá±á·ááœááºá ááá¯ááá¯áááºááŸá¬ API áá±á«áºááá¯ááŸá¯ááá¯ááºážááœáẠáááºááá¯ážááŸááá±á¬ int áá áºáá¯ááŒá áºáááºá
0x289dd1f6
method number ááŸá±á·ááŸá¬ ááá·áºááá«áááºá
á¡áá¶áá±á¬ááºážáááºá áá«áá±ááá·áº áá¬áááºááŒá áºááá²á áá±á¬ááºáá±á¬á· áá±á¬ááºáá¬áááºá
invokeWithLayer3#b7475268 query:!X = X;
áá«ááᯠáá±á¬ááºáá áºáá¯á áá¬áá²á ááá·áºááŸááºážáááœááºááá·áºá¡ááá¯ááºáž
invokeWithLayer4#dea0d430 query:!X = X;
áááºá áá¬áá¬áž? ááá¯ááºáá°ážá áááºááá¯á·á á±á¬ááœááºážáááºá áá¬ááá¯á ááºážá á¬ážáá²á á¡áá®ážá¡áá®áž á¡ááŒá¬ážá¡ááœáŸá¬á០áá±á¬ááºážááá¯áá»ááºáá áºáá¯á¡á¬áž ááá¯ááá¯á·áá±á¬ á¡áá°ážá¡áá»áá¯ážá¡á á¬ážááŒáá·áº áá¯ááºááá¯ážáá¬ážááẠááá¯á¡ááºááẠ- áááºážááá¯á·á¡á¬ážáá¯á¶áž ááá°áá®áá«á áááºážááá¯á·ááᯠáááºááá¯á·ááœá²ááŒá¬ážááááºáááºážá ááŸá±á·ááœáẠ4 bytes áá»áŸááá·áºááŒááºážááẠá¡ááœááºáááá±á¬ááºáá±á¬áááºážáááºážááŒá áºáááºá áá«ááŒá±á¬áá·áº
invokeWithLayer5#417a57ae query:!X = X;
áá«áá±ááá·áº ááá¡ááŒá¬ááŸá¬áá±á¬á· bacchanalia áá áºáá»áá¯á·ááŒá áºáá¬áááºááá¯áᬠáááá¬áá«áááºá ááŒá®ážáá±á¬á· ááŒá±ááŸááºážáá»ááºá áá¬áááºá
á¡ááºááááº- Layer 9 ááŸá áááºá á¡áá±á¬ááºá¡áá°áááºážáááºážáá»á¬áž
invokeWithLayerN
ááá¯á·áá²á·ááœá²áá¯á¶ážááá¯ááºáá«áááºáinitConnection
áá°áž! áá¬ážááŸááºáž 9 áá¯ááŒá®ážáá±á¬ááºá áá±á¬ááºáá¯á¶ážááœááºá áá»áœááºá¯ááºááá¯á·ááẠ80s ááœáẠá¡ááºáá¬áááºáááá¯ááá¯áá±á¬áá»á¬ážááœáẠáá¯ááºáá±á¬ááºáá²á·ááá·áºá¡áá¬ááŒá áºááẠ- áá»áááºáááºááŸá¯áá¡á ááœááºáá áºááŒááẠáá¬ážááŸááºážááŸáááŸáá¯ááºážááŸá¯ááá¯á· áá±á¬ááºááŸááá²á·áááºá
áá«ááᯠáá¬áááºááŒá áºááá²..
invokeWithLayer10#39620c41 query:!X = X;
...
invokeWithLayer18#1c900537 query:!X = X;
ááá¯áááºáž áááºáááºááá¯ááºáá«ááŒá®á áá±á¬ááºááẠá¡ááœáŸá¬ 9 áᯠááŒá®ážááŸáá¬á áá¬ážááŸááºážáá¶áá«ááºáá«áá±á¬ universal constructor ááᯠáá±á¬ááºáá¯á¶ážááœáẠááá·áºááœááºážáá²á·áááºá áááºážááẠáá»áááºáááºááŸá¯áá¡á ááœáẠáá áºááŒáááºáá¬áá±á«áºááá¯ááẠááá¯á¡ááºááŒá®áž á¡ááœáŸá¬áá»á¬ážááŸá á¡áááá¹áá«ááºááŸá¬ áá»á±á¬ááºááœááºááœá¬ážáá¯á¶áááŒá®ážá ááá¯á¡áá« áááºážááẠá¡ááŒá±á¡áá±á¡á áá¬ážááŸááºážáá áºáá¯áᬠááŒá áºáá±áá«áááºá á¡ááŒá¬ážáá±áá¬ááá¯ááºážá ááŒá¿áá¬ááŒá±ááŸááºážááŒá®ážááŒá®á
áá¯ááºáááºááá¬áž..
Vasilyá [16.07.18/14/01 XNUMX:XNUMX PM] áá±á¬ááŒá¬áá±á·áá¯ááºážá áá«ááœá±ážáááááº-
áááºáá®áá¬áá¬ááẠáá±á¬ááºážááá¯ááŸá¯áááŸááá² ááœá²áá»á¬ážááᯠáá±ážááá¯á·áááºá áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠInvokeWithLayer ááœáẠááá·áºááœááºážáá¬ážááẠááá¯á¡ááºáááºá áá¬áá¬ááẠá¡ááºááááºáá»á¬ážááᯠáá¯ááºááá¯ážááá¬ážáá«á áá¯á¶á·ááŒááºááŸá¯áá»á¬ážááŸáá·áº á¡ááºááááºáá»á¬ážááᯠáá¯ááºááá¯ážáááºá¡ááœáẠááœá²á·á ááºážáá¯á¶áááŸááá«áá¡á²áá«ááœá±á Client ááẠá¡ááºááááºáá¯ááºááá¯áá±á¬ á¡ááœáŸá¬ááᯠáááºááŸááºá áááá«á
Vadim Goncharov, [16.07.18/14/02 XNUMX:XNUMX PM] InvokeWithLayer ááẠáá°á¡á áá»áá¯ááºážáá±á¬ááºááá¯ááºáá±á¬á
Vasily, [16.07.18/14/02 XNUMX:XNUMX PM] áá«á áá áºáá¯áááºážáá±á¬ áááºážáááºážáá«á
Vadim Goncharov, [16.07.18/14/02 XNUMX:XNUMX PM] á¡ááá¯áá« session áá¡á ááœááºá¡ááœáŸá¬áá±ážááŒááºážáá¡ááŒá±áá¶á¡á¬ážááŒáá·áºááá¯ááá¯ááá·áºáááº
á áá¬ážáá ááºá áá±á¬ááºááẠá¡ááá·áºááŸááá·áºáá±ážááŒááºážááᯠááá±ážáá«á á€á¡áá»ááºá០ááŒá áºáá±á«áºáá¬áááºá
á¡ááºááááºáá»á¬áž, i.e. á¡áá»áá¯ážá¡á
á¬áž Updates
á¡á
á®á¡á
á¥áºááœááºá áááºážááẠAPI áá±á¬ááºážááá¯áá»ááºááᯠáá¯á¶á·ááŒááºááŒááºážááá¯ááºáá² ááŒá
áºáááºáá
áºáá¯ááŒá
áºáá±á«áºáá¬ááá·áºá¡áá« áááºážááá¯ááºááá¯ááºá áá¯á¶ážá
áœá²áá°áᶠáá¬áá¬á០áá±ážááá¯á·ááŒááºážááŒá
áºáááºá áááºážááẠá¡ááŒá¬ážááá¯á·á
áºááœáẠááœá±ážááœá±ážááá·áº ááŸá¯ááºááœá±ážáá±á¬á¡ááŒá±á¬ááºážá¡áá¬ááŒá
áºáááºá ááá¯á·áá±á¬áº ááá¯á¡áá«ááœáẠáá¬áá¬ááẠáááá¯ááºážááá·áºá¡á±á¬á·ááºááá¯ááºážááŒá
áºáá±ááá·áºááá¯áẠá¡ááºááááºáá»á¬ážááᯠá
á¯áá±á¬ááºážáá±ááŒá±á¬ááºáž áááá¬ážááẠá¡áá±ážááŒá®ážáá«áááºá
ááá¯á·ááŒá±á¬áá·áº áá¯ááºááẠááŒááºážáááºáá±á¬á¡áá«á áá áºáá¯áá»ááºážá á®ááᯠáááºážááá¬ážááŸááºážááᯠááœáŸááºááŒááẠáááºáá±á·áá»áºááŒá±á¬áá·áº á¡á±á¬ááºáá« ááŒá áºááá¯ááºáá±á¬ ááŒá¿áá¬áá»á¬ážááẠáá¯áá¹áááááºážáá»áá» ááŒá áºáá±á«áºáá¬áááº-
- áááá¯ááºážááá·áºá áááºážááᯠáá¶á·ááá¯ážááá·áºáá¬ážááŸááºážááᯠáááŒá±á¬ááŒáá® áá¬áá¬ááẠáááá¯ááºážááá·áºáá¶ááá¯á· á¡ááºááááºáá»á¬áž áá±ážááá¯á·áááºá
- Client ááᯠá¡ááá·áºááŒáŸáá·áºáááºááŒá®ážáá±á¬áẠáá¬ááœá±áá¯ááºáá±á¬ááºááá·áºáá²á
- á¡áááºáá°ááẠá¡á¬ááá¶áá»ááºá¡ááœáŸá¬áá¶áá«ááºááŸáá·áºáááºáááºá áá¬áá¬á áááºááŒááºáá°ááá»ááºááẠáá¯ááºáááºážá ááºááœáẠááŒá±á¬ááºážáá²áááºááá¯ááºáá«á
áááºážááẠáá®á¡áá¯áá®ááá¯ááºáᬠááœá±ážáá±á«áºááŸá¯áááºáááºáá¬ááŒá áºáááºáᯠáááºáááºáá«ááá¬ážá áá¬áá¬ááᯠááŸááºáááºá áœá¬áá±ážáá¬ážáá¬ážáá±á¬ááŒá±á¬áá·áº (áááºááá·áºá¡ááŒá±á¡áá±ááœááºáááá¯á áááºážááᯠáá±á¬ááºážá áœá¬á ááºážáááºáá¬ážáááº) ááŒá áºáá±á¬ááŒá±á¬áá·áº áááºááœá±á·ááœáẠáááºážáááºáááŒá áºááá¯ááºáá«á áá¬áž! áááºáá»áŸáááº!
áá«á ááŒáá¯ááºáááŸá¬ áá»áá±á¬áºááá¯á· ááŒá¯á¶áá²á·ááᬠá¡ááá¡áá»áá«áá²á á©áá¯ááºá 14 áááºáá±á·ááœáẠTelegram áá¬áá¬áá»á¬ážááœáẠáá áºá á¯á¶áá áºáᯠá¡ááºááááºáá¯ááºáá±áááºáá°áá±á¬ áááºáá±á·áá»áºáá»á¬áž ... ááá¯á·áá±á¬áẠááŸááºáááºážáá»á¬ážááœááº-
2019-08-15 09:28:35.880640 MSK warn main: ANON:87: unknown object type: 0x80d182d1 at TL/Object.pm line 213.
2019-08-15 09:28:35.751899 MSK warn main: ANON:87: unknown object type: 0xb5223b0f at TL/Object.pm line 213.
ááá¯á·áá±á¬áẠstack traces á megabytes á¡áááºážááẠ(áá±á¬ááºážááŒá®á áá áºáá»áááºáááºážááŸá¬áááºá ááŸááºáááºážááᯠááŒá¯ááŒááºáá²á·áááº)á áá±á¬ááºáá¯á¶ážááœááºá áááºá TL ááœáẠáá áºáá¯áá¯ááᯠá¡ááá¡ááŸááºáááŒá¯áá«áá áááºážááẠáááºááŸááºáá»á¬ážááŒáá·áº binary ááŒá áºááŒá®ážá áá±á¬ááºááẠstream ááœááºá á¡á¬ážáá¯á¶áž ááœá¬ážááŒá®ážá decoding áááŒá áºááá¯ááºáá±á¬á·áá«á áá®ááá¯á¡ááŒá±á¡áá±ááŸá¬ áá¬áá¯ááºáááá²á
áá±á¬ááºážááŒá®á áááºáá°áááᯠá áááºáá²áá±á¬ááºáá¬áá²á· ááááá¯á¶ážá¡áá¬á á¡áááºááŒááºááŒá®áž áááºááŒáá¯ážá á¬ážáá«á ááá°áá®áá²á·áá«á áá»áœááºá¯ááºááá¯á· googled CRC32 - áááºážááá¯á·ááẠscheme 73 á០á¡áá¬ááá¹áá¯áá»á¬ážááŒá áºáá¬áá²á·áááºá áá»áœááºá¯ááºááá¯á·ááẠscheme 82 ááœáẠáá¯ááºáá±á¬ááºáá²á·ááŒáá±á¬áºáááºážá áá»áœááºá¯ááºááá¯á·ááẠááŸááºáááºážáá»á¬ážááᯠááá¯áá áá¯ááºááŒáá·áºááŸá¯ááŒááẠ- ááá°áá®áá±á¬ á¡á á®á¡á á¥áºááŸá áºáá¯á០identifiers áá»á¬ážááŸááá«áááºá
ááŒá¿áá¬á áá»áœááºá¯ááºááá¯á·áááá¬ážáááºááá¯ááºáá±á¬ client ááœáẠáááºáááºááŒá áºááá¯ááºáá«ááá¬ážá ááá¯ááºáá«á áá»áœááºá¯ááºááá¯á·ááẠTelegram Desktop 1.2.17 (Linux ááŒáá·áºáá»á®ááŸá¯áá»á¬ážá áœá¬ááŸáá·áº áá¶á·ááá¯ážáá±ážááá·áº áá¬ážááŸááºáž) ááᯠáá¯ááºáá±á¬ááºáááº) áááºážááẠááŒáœááºážáá»ááºááŸááºáááºážááá¯á· á á¬áá±ážáááº- MTP Unexpected type id #b5223b0f MTPMessageMediaâŠ
Google ááŸááá¬ážáááºááá¯ááºáá±á¬áá±á¬ááºáááºáá»á¬ážáá²ááŸáá áºáŠážááŸáá·áºáááºáá°áá±á¬ááŒá¿áá¬áá áºáá¯ááŒá áºááœá¬ážáá²á·áááºááá¯ááŒááá²á·áááºá ááá¯á·áá±á¬áºááá¯á·áá±á¬ááºáá¬ážááŸááºážáá¶áá«ááºáá»á¬ážááŸáá·áºá¡áá®, áá°ááá»ááºáá»á¬ážááœá²ááŒá¬ážáá²á·ááẠ...
áá«ááᯠáá¬áá¯ááºáááá²á Vasily áá²á· áá»áœááºáá±á¬áº áááºážááœá²ááá¯ááºáááº- áá° 91 ááᯠupdate áá¯ááºááá¯á·ááŒáá¯ážá á¬ážáá²á·áááºá áááºá¡áááºážáááºá á±á¬áá·áºááŒá®áž 73 ááá¯ááŒáá¯ážá á¬ážááá¯á·áá¯á¶ážááŒááºááá¯ááºáááºá ááŸá áºáá¯áá¯á¶ážá á¡áá¯ááºááŒá áºáá±áá²á· á¡á²áá«ááœá±á empirical ááŒá áºááá¯á·á áááºáá¯ááºáááºááá¯á· áá¬ážááŸááºážáááºáá±á¬ááºááŸááá²ááá¯áá¬ááᯠáá¬ážááááºáá°áž áááºážáááºááŒá áºá á±á áááºáá»áŸááŒá¬á¡á±á¬áẠá á±á¬áá·áºááááºáááºážá
áá±á¬ááºááá¯ááºážááœááºá áá»áœááºá¯ááºááẠá¡ááŒá±á¡áá±ááᯠááŒááºáááºáááºáá®ážááá¯ááºáááº- áá»áœááºá¯ááºááá¯á·ááẠáá¯á¶ážá áœá²áá°ááᯠá áááºáá«á áááºážááᯠááááºáá«á á¡á á®á¡á ááºááᯠá¡ááŒá¬ážá¡ááœáŸá¬ááá¯á· ááŒááºáááºáá±á«ááºážá ááºážáá«á ááŒááºáááºá áááºáá«á ááŒá¿áá¬ááᯠáááºáá¶áááºážáá°áá«á ááááºáá áºáá¯ááá¯á· ááŒááºááœá¬ážáá« - á¡á°ážá á¡á á®á¡á ááºááᯠáááŒá±á¬ááºážáá² áááá¯ááºážááá·áºááᯠá¡ááŒáááºááŒááẠááŒááºáááºá áááºáá«á áááá áºááœá±á áá°áá®áá±ážáá«áááá·áºáááºá ááá°áá®áá±á¬ á¡ááœáŸá¬áá»á¬ážá០áá±áá¬ááœá²á·á ááºážáá¯á¶áá»á¬áž áá±á¬ááŸá±á¬ááŒááºážááᯠáááºáááŸááááºááŒá áºáááºá
ááŸááºážáááºážáá»áẠá¡áá»áá¯ážáá»áá¯ážáá±á¬ ááœááºááá¯ááºáá±á¬ááá¹ááá¬áá»á¬ážá០ááá·áºááŸááºážááá¯ááºááá²á·ááá¯á·á áá¬áá¬ááœáẠááá°áá®áá±á¬ á ááºáá»á¬ážááœáẠáá¯ááºáááºážá ááºá¡áá»áá¯ážá¡á á¬ážáá»á¬ážá áœá¬ áá«áááºáá«áááºá ááŒá áºááá¯ááºáá»á±á¡áá»á¬ážá á¯ááŸá¬á "buffering" á¡ááœááºáá¬áááºááŸááá±á¬áá¬áá¬áá»á¬ážáá²ááŸáá áºáá¯áááºáááºážááá¯ááá¯ááá¯ááŒáá·áºáá¬ážáá±á¬áá°áá»á¬ážáá±ážáá±á¬á¡áá¬ááá¯áááºážá á®á á±áá¬áááºážááá¯á·ááá¯áá»áá¯ážáááºáá¡áá»áááºá¡á á®á¡á ááºááœááºáá±ážáá²á·áááºá á€áááºážá á®ááẠ"áá¯ááº" áááºá¡áááááºážááŸáá·áºáááºáááºááŒá®ážáá¬ááŸááá¯ááºáá±á¬ááºááá¯ááºáá²á·áá«á
ááá¯ááºáááº...áá«áá±ááá·áº áá«á ááŒá±á¬ááºá áá¬áá±á¬ááºážáá²á· áá¯ááºáá¶?!.. ááá¯ááºáá°ážá áá°ážááœááºáá²á· á áááºáá°ážááœá±ááᯠáááœá±ážáááºá ááá¬ážááẠáá±á¬ááºáááºááœá±áá²á· áá¯ááºááᯠááŒáá·áºáá¡á±á¬ááºá Android áá¬ážááŸááºážááœááºá áááºááá·áº TL parser ááá¯áá»áŸáááœá±á·áá«áá±á¬áºáááºáž (github á០á¡áá±á¬ááºáááŒááºááẠááŒááºážááá¯áá¬ážáááº) ááá¯áẠ(de)serialization ááŒáá·áº ááœá±á·ááá«áááºá á€áááºááŸá¬ áá¯ááºá¡ááá¯á¡ááœá¬áá»á¬ážááŒá áºáááº-
public static class TL_message_layer68 extends TL_message {
public static int constructor = 0xc09be45f;
//...
//еÑе паÑка пПЎПбМÑÑ
//...
public static class TL_message_layer47 extends TL_message {
public static int constructor = 0xc992e15c;
public static Message TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) {
Message result = null;
switch (constructor) {
case 0x1d86f70e:
result = new TL_messageService_old2();
break;
case 0xa7ab1991:
result = new TL_message_old3();
break;
case 0xc3060325:
result = new TL_message_old4();
break;
case 0x555555fa:
result = new TL_message_secret();
break;
case 0x555555f9:
result = new TL_message_secret_layer72();
break;
case 0x90dddc11:
result = new TL_message_layer72();
break;
case 0xc09be45f:
result = new TL_message_layer68();
break;
case 0xc992e15c:
result = new TL_message_layer47();
break;
case 0x5ba66c13:
result = new TL_message_old7();
break;
case 0xc06b9607:
result = new TL_messageService_layer48();
break;
case 0x83e5de54:
result = new TL_messageEmpty();
break;
case 0x2bebfa86:
result = new TL_message_old6();
break;
case 0x44f9b43d:
result = new TL_message_layer104();
break;
case 0x1c9b1027:
result = new TL_message_layer104_2();
break;
case 0xa367e716:
result = new TL_messageForwarded_old2(); //custom
break;
case 0x5f46804:
result = new TL_messageForwarded_old(); //custom
break;
case 0x567699b3:
result = new TL_message_old2(); //custom
break;
case 0x9f8d60bb:
result = new TL_messageService_old(); //custom
break;
case 0x22eb6aba:
result = new TL_message_old(); //custom
break;
case 0x555555F8:
result = new TL_message_secret_old(); //custom
break;
case 0x9789dac4:
result = new TL_message_layer104_3();
break;
ááá¯á·ááá¯ááº
boolean fixCaption = !TextUtils.isEmpty(message) &&
(media instanceof TLRPC.TL_messageMediaPhoto_old ||
media instanceof TLRPC.TL_messageMediaPhoto_layer68 ||
media instanceof TLRPC.TL_messageMediaPhoto_layer74 ||
media instanceof TLRPC.TL_messageMediaDocument_old ||
media instanceof TLRPC.TL_messageMediaDocument_layer68 ||
media instanceof TLRPC.TL_messageMediaDocument_layer74)
&& message.startsWith("-1");
áááº... ááŒáá·áºááᬠá¡áá°ážáá²á áá«áá±ááẠáá«á áá¯ááºáá±ážááá¯ááºáá²á· áá¯ááºáá
áºáᯠááŒá
áºáá±á¬ááºážááŒá
áºááá¯ááºáá«á·ááá¬áž.. áá«áá±ááá·áº áá¬ážááŸááºážá¡á¬ážáá¯á¶ážááᯠáá±áá»á¬áá±á«áẠáá±á¬ááºáá¶á·áá±ážáá«áááºá ááŸááºáá«áááºá á¡áá¬á¡á¬ážáá¯á¶ážááᯠá¡á
á¯á¡áá±ážáá
áºáá¯ááœáẠáá±á¬ááŸá±á¬áᬠáá»áŸáá¯á·ááŸááºáá»ááºáááºáá»á¬áž ááŸáá·áº á¡áá»áá¯ážá¡á
á¬ážá¡á¬ážáá¯á¶ážááᯠá¡áááºááŒá±á¬áá·áº áááŸááºážáááºážáá«á _old7
á
ááºáá»áá¯ážáááºáá²á· áá
áºáááºážáááºážáá²á· áááºáá°áá¬áá±á¬á· ááá¯ááºáá°áž... áá«áá±ááá·áº á¡áá»á¬ážá
á¯ááá±á¬á· áá«á á¡ááœá¶áá¬áá®ážááœá± ááŒá
áºááœá¬ážáááºá
TL_message_layer104
TL_message_layer104_2
TL_message_layer104_3
áá±á¬ááºá»á¬ážáá±ážááá¯á·á á¡ááœáŸá¬áá áºáá¯áááºážááŸá¬áá±á¬áẠááá¯á¶ážááŒááºááá¯ááºáá°ážáá¬ážá áá±á¬ááºážááŒá®á "ááŸá áºáá¯" ááá¯ááŒáá«á áá¯á·á á¡ááŸá¬ážáá áºáá¯ááŒáá·áºááœáŸááºáá±ážáá²á·áááºá áá±á¬ááºážááŒá®á áá«áá±ááá·áºáá¯á¶ážááŒáááºááŒá áºááœá¬ážááŒá®á .. áá°áá®áá²á·ááœááºáá¯á¶ážáá±á«áºáááºááŒá®ážáá»ááºáá»ááºážááŒááºá áá«á áááºááá¯áá áºáááºážáá¯ááºáá¯á¶áá»áá¯ážáá²á áá±á¬ááºážáááºáá«áááº..
á áá¬ážáá ááºá Telegram Desktop áááºážááŒá áºáá»á¬ážááœáẠá¡áá¬ážáá°ááá á¹á áá»áá¯áž ááŒá¯á¶ááááºá á¡áááºá á¡á á®á¡á ááºááœáẠáááºááá¯ááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááẠáááºážá á¡ááœáŸá¬áá¶áá«ááºááᯠáááŒá±á¬ááºážáá²áá±á¬áºáááºáž áá áºáá¯áá¯ááᯠááŒááºáááºáá«á á¡á á®á¡á ááºá¡ááœááºááá¬ážáááºáá±áá¬áááºážááŒá áºáááŸáááá·áºá¡ááŒá±á¡áá±áá»á¬ážááœááºá ááá¬ážáááºá¡áá¯á¶ážááŒá¯áá°á¡áááºážá¡ááŒá áºáá»á¬ážááŸááœá²á áááºážááá¯áááºááááá¯ááºáááºáááºážá áááºážááá¯áááºááá¯áá±áá¬ááŸáá°áááºá áááºážáááºážá¡á¬ážáá¯á¶ážááá¯áááºáá ááºážáááºááá»ááºážá¡á á®á¡á á¥áºáááºáá¯á¶ážáááŸááºáááºááŒá±á¬ááºážáááºááá±áá»á¬ááá¯ááºáá«á
áá«ááᯠáááºááá¯á ááºážáááºááá¯ááºááá²á Unitá Functional ááŸáá·áº á¡ááŒá¬ážáá±á¬ Test áá»á¬ážááᯠáááááºáááºáá»á¬áž ááŸááºáá»ááºáá»á¬ážááœáẠáá»áŸáá±ááŒáááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá
áá±á¬ááºážááŒá®á áá±á¬ááºáááºáá¯ááºá¡ááá¯ááºážááᯠááŒáá·áºáá¡á±á¬ááºá
public static class TL_folders_deleteFolder extends TLObject {
public static int constructor = 0x1c295881;
public int folder_id;
public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) {
return Updates.TLdeserialize(stream, constructor, exception);
}
public void serializeToStream(AbstractSerializedData stream) {
stream.writeInt32(constructor);
stream.writeInt32(folder_id);
}
}
//manually created
//RichText start
public static abstract class RichText extends TLObject {
public String url;
public long webpage_id;
public String email;
public ArrayList<RichText> texts = new ArrayList<>();
public RichText parentRichText;
public static RichText TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) {
RichText result = null;
switch (constructor) {
case 0x1ccb966a:
result = new TL_textPhone();
break;
case 0xc7fb5e01:
result = new TL_textSuperscript();
break;
á€áá±áá¬ááœáẠ"ááá¯ááºááá¯ááºáááºáá®ážáá¬ážáááº" ááŸááºáá»ááºá á€ááá¯ááºá á¡á áááºá¡ááá¯ááºážááá¯áᬠáááºááŒáá·áºáá±ážáá¬ážááẠ(ááŒá¯ááŒááºááááºážááááºážááŸá¯ á¡áááºáááºááá¯ážááᯠá áááºáá°ážááŒáá·áºááá¯ááºáá«ááá¬ážá)á áá»ááºááẠá ááºááŒáá·áº áá¯ááºáá±ážáá«áááºá ááá¯á·áá±á¬áºá áá±á¬ááºáá±ážááœááºážáá áºáá¯áá±á«áºáá¬ááẠ- á¡áááºážá¡ááŒá áºáá»á¬ážáááŸáááá¯ááºáá«ááá¬ážá áá¯á¶ážáááá¯ááºáá«á (Linux kernel ááŸá GPL á¡á±á¬ááºááŸá a la blobs)á ááá¯á·áá±á¬áº áááºážááẠáá¯áááá¡ááá¯ááºážá¡ááœáẠáá±á«ááºážá ááºáá áºáᯠááŒá áºáá±áá«ááŒá®á
áá«áá±ááá·áº áá¯á¶áá±á¬ááºáá«áááºá á€áá¶áá«ááºá ááºááá¯ááá¯ááºáá±ááá·áºá¡áá±á«áºá០áááá¯ááá¯áá±á¬ááá¯á· áááºááœá¬ážááŒáá«á áá¯á·á
MT Proto
áá«ááá¯ááœáá·áºááŒáá·áºáá¡á±á¬ááº
á¥ááá¬á¡á¬ážááŒáá·áºá "message" (á á¬ááá¯) ááŸáá·áº "session" (session) - á€áá±áá¬ááœáẠáááºážááá¯á·ááẠTelegram client á áá¯á¶ááŸááºá¡ááºáá¬áá±á·á áºááẠááœá²ááŒá¬ážáá±á¬á¡áá¬ááᯠááá¯ááá¯áááºá áá±á¬ááºážááŒá®á áááºáá±á·áá»áºááŒáá·áºá¡áá¬á¡á¬ážáá¯á¶ážáááºááŸááºážáááºážáááºá áááºážááᯠOOP ááá±á«áá¬ááá»á¬ážááŒáá·áºá¡áááá¹áá¬ááºááŒááºááá¯ááá¯ááºáááºá ááá¯á·ááá¯áẠ"package" áá°áá±á¬á áá¬ážáá¯á¶ážááá¯ááá¯ážááŸááºážá áœá¬áá±á«áºááá¯ááá¯ááºááẠ- áááºážáááºáááá·áºáá«ážáááºá áááºáá°ááá¯á·áá±á¬ááºáá±ážá¡ááá·áºááŒá áºáááºá á¡ááºáá¬áá±á·á áºááœááºáá²á·ááá¯á·áá°áá®áá±á¬áááºáá±á·ááºá»áá»á¬ážááá«ááŸááá«á á¡áá»á¬ážá¡ááŒá¬ážááŸááááºá áááºáá±á¬ááºááŸá¯áá»á¬ážá áá«áá±ááá·áº session ... but first things first.
áááºáá°ááá¯á·áá±á¬ááºáá±ážá¡ááœáŸá¬
ááááá¯á¶ážá¡áá»ááºá áááºáá°ááá¯á·áá±á¬ááºáá±ážáá«á ááœá±ážáá»ááºá áᬠ5 áá¯á¡ááŒá±á¬ááºážááŒá±á¬áá«áááºá
- ááẠTCP
- áááºááºááá¯ááº
- HTTPS áá±á«áºááŸá Websocket
- ááẠHTTP
- HTTPS ááá¯
Vasily, [15.06.18/15/04 XNUMX:XNUMX PM] ááá¯á·á¡ááŒáẠUDP áááºáá°ááá¯á·áá±á¬ááºáá±ážáááºáž ááŸááá«áááºá ááá¯á·áá±á¬áº áááºážááᯠááŸááºáááºážáááºáá¬ážááŒááºážáááŸááá«á
ááŸáá·áº TCP ááẠáá°ááœá²áá¯á¶ážáá»áá¯ážááŸááááºá
ááááá áºáá¯ááẠTCP áá±á«áºááŸá UDP ááŸáá·áºáááºáá°áááºá áááºáááºáá áºáá¯á á®ááœáẠsequence áá¶áá«ááºáá áºáá¯ááŸáá·áº crc áá áºáá¯áá«áááºáááºá
ááŸááºážáá±á«áºááŸá á¡ááá¯ááºáá»á¬ážááᯠáááºáááŒááºážááẠá¡áááºááŒá±á¬áá·áº á¡ááœááºáá¬áá»ááºáááááºážá
áá² ááá¯ááŸá¬
- áá
- ááŒá¬ážááŒá áºáá±á¬
- á¡áááºá¡ááẠpadded
- ááŒáá·áºáá±á¬
á¡áá¯áá±á MTProxy á¡ááœáẠá¡áááºá¡ááẠPaddedá áááºážááᯠáá±á¬ááºááá¯ááºážááœáẠááááŸááá¬ážááá·áº ááŒá áºáááºáá»á¬ážááŒá±á¬áá·áº áááºááá·áºáá¬ážáááºá áá«áá±ááá·áº áá¬ážááŸááºážááŸá áºáᯠ(á á¯á á¯áá±á«ááºáž áá¯á¶ážáá¯) á áá¬ááŒá±á¬áá·áº áá¯ááºááá¯ááºáá¬áá²á áá±ážáá¯á áá¯á¶ážááẠá¡áááá¡á¬ážááŒáá·áº MTProto ááá¯ááºááá¯ááºá á¡ááŸááºááŸáá·áº áááºá¡á¬ážááᯠáááºááŸááºáá¯á¶ááœááºáᬠááœá²ááŒá¬ážáááºá áááºážááᯠáááºáááºááœá±ážááœá±ážáá«áááºá
- Abridged ááœááºáááºážááẠ1 ááá¯á·ááá¯áẠ4 bytes ááŒá áºáá±á¬áºáááºáž 0xef ááá¯á·áá±á¬áẠbody ááá¯ááºáá«á
- Intermediate ááœáẠáááºážááẠá¡ááŸáẠ4 bytes ááŸáááŒá®áž á¡ááœááºáá
áºáá¯ááŒá
áºááŒá®áž client á០ááááá¯á¶ážá¡ááŒááẠáá±ážááá¯á·ááááºááŒá
áºáááºá
0xeeeeeeee
á¡áááºá¡áááºááŒá áºááŒá±á¬ááºáž ááœáŸááºááŒááẠ- á¡ááŒáá·áºá¡áá á áœá²áááºážááŸá¯á¡ááŸááá¯á¶ážá ááœááºáááºá¡áá¯á¶ážááŒá¯áá°áá¡ááŒááºááŸá á¡áá»á¬ážá á¡á á®á¡á á¥áºáá¶áá«ááºááŸáá·áº á¡ááŒá±áá¶á¡á¬ážááŒáá·áº MTProtoá ááá¯ááºáááºá CRC32 ááá¯ááºáá«á áá¯ááºáááºá áá«ááœá±á¡á¬ážáá¯á¶áž TCP áá»á±á¬áºáááºá bytes á á¡ááŸááºá ááºá á®ážááŒá±á¬ááºážáá¯á¶á á¶ááŒáá·áº áá¯á¶ááŒááºá áááºáá»ááá±á¬ áááºáá°ááá¯á·áá±á¬ááºáá±ážá¡á¬áž áá»áœááºá¯ááºááá¯á·á¡á¬áž áá¶á·ááá¯ážáá±ážáááºá áááºááá·áº sequence á០áááá¯á¡ááºáá«á á¡áá°ážáááŒáá·áº checksumsá áá±á¬ááºážááŒá®á á¡áᯠTCP ááŸá¬ 16-bit checksum áá«áá²á·á¡ááœáẠáá±áᬠáá±á¬ááºááŒááºááŸá¯ ááŒá áºááœá¬ážáá¬ááᯠáá«ááá·áºááœááºáááºá áá»áœááºá¯ááºááá¯á·ááœáẠ16 bytes áááºááá¯ááŸááºáá±á¬ hashes áá«áá±á¬ cryptographic protocol áá áºáá¯ááŸááœá²á á€á¡ááŸá¬ážáá»á¬ážá¡á¬ážáá¯á¶ážááᯠ- ááŸáá·áº ááá¯áááẠ- ááŒáá·áºáá¬ážáá±á¬á¡ááá·áºááœáẠSHA áááá¯ááºáá®ááŸá¯ááœáẠáááºážáááá«áááá·áºáááºá á€ááá á¹á ááŸáá·áºáááºáááºááŒá®áž CRC32 ááœáẠá¡ááŸááºáááŸááá«á
"In case 4-byte data alignment is need" ááᯠááá¬ážáá»áŸááá±á¬ "In case 16-byte data alignment is need" ááᯠááá¬ážáá»áŸááá±á¬ á¡áá»á¬ážáá áºááá¯áẠááŒá áºááá¯ááºááá·áº á¡áááºá¡áááºááŒáá·áº ááŸáá¯ááºážááŸááºááŒáá·áºááŒáá«á áá¯á·á Telegram áááá¯ááááºáá¬áá»á¬ážááẠsocket á០data áá»á¬ážááᯠaligned buffer á¡ááŒá áºááá¯á·ááááºááá¯ááºáá±á¬ááºá¡á±á¬áẠááá¯ááºáá²áááºáᯠáá°áááŒáááºááŸá¬ á¡áááºáááºážá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº á á¬áááºááŒááºážááẠááá·áºá¡á¬áž áááºááá·áº bytes á¡áá±á¡ááœááºááá¯áááᯠááŒááºáá±ážááá¯ááºáá±á¬ááŒá±á¬áá·áº (á¥ááá¬á ááá±á¬ááºá á®áá¬áá¬áá»á¬ážáááºáž ááŸááááº)á ááá¯á·ááá¯áẠá¡ááŒá¬ážáá áºáááºááœááºá áá»áœááºá¯ááºááá¯á·ááœáẠ3 bytes á០ááŒá®ážáá¬ážáá±á¬ paddings áá»á¬ážááŸááá±áá±ážáá«á - XNUMX bytes áá»áœá±áá¬ááá¯ááºáá«á á¡áááºááŒá±á¬áá·áº á¡áá»ááºážáá»á¯ááºáá¯ááºááááºáááºážá ááá«ááá± ?
Nikolai Durov ááẠáááá·áºáááºááœá±á· áááá¯á¡ááºáá² ááœááºáááºáááá¯ááá¯áá±á¬áá»á¬áž á¡áá«á¡ááẠá ááºáá®ážáá»á¬ážááᯠáá®ááœááºááŒááºážááᯠá¡ááœááºááŸá áºáááºááŒá±á¬ááºáž áá¶áá°áá»ááºáá áºáᯠáááŸááááºá
á¡ááŒá¬ážáááºáá°ááá¯á·áá±á¬ááºáá±ážááœá±ážáá»ááºá áá¬áá»á¬áž, á¡áá«á¡áááºá áááºááŸáá·áº MTProxyá áá±á¬ááºážááá¯ááŸá¯áá áºáá¯ááŸááá»áŸáẠá¡ááŒá¬ážááá¯á·á áºááœáẠááŒá áºááá¯ááºáááºáᯠáá»áœááºá¯ááºááá¯á· ááá¯á ááºážá á¬ážáááºááá¯ááºáá«á 2018 ááœááºááœááºááŸáááŒá®ážáá±á¬ááºáááŒá¬áá®ááœááºá áááºáá±á¬ááºááŸá¯áá±ážáá°áá»á¬ážááẠáááºážááá¯á¡ááá¡áá»ááááºááá¯á·ááẠáá»ááºááŒááºá áœá¬ááááŸááá¬áá²á·ááá·áº ဠMTProxy á¡ááŒá±á¬ááºážááᯠááá¯ááŸááŒááºáááºáááááááá«áááºá block bypassá¡áá±á«áº áá¯ááºááá¯ážá¡ááœááºá¡á á¬áž! ááá¯á·á¡ááŒáẠC ááœááºáá±ážáá¬ážáá¬ážáá±á¬ MTProxy áá¬áᬠ(Waltman ááŸáá áºáááº) ááẠáá¯á¶ážááááá¯á¡ááºáá±á¬áºáááºáž (Phil Kulin ááŸá¡áááºááŒá¯áá«áááº) ááŸáá·áº á¡áá¬ážáá°áá¬áá¬ááẠGo ááœááºááŒá áºá á± Node.js ááœááºááŒá áºá á± Linux áá®ážááŒá¬ážáá»á¬ážááŸáá·áº áááá¯á¡ááºáá² áááºá ááºáá±ááŒá±á¬ááºážááá¯áááºážá ááá¯ááºážáá áºáá¬á¡á±á¬áẠááá¯ááºáá®áááºá
ááá¯á·áá±á¬áº á¡ááŒá¬ážááŒá¿áá¬áá»á¬ážááᯠáá¯á¶ážáááºááŒá®ážáá±á¬áẠá¡ááá¯ááºážá¡áá¯á¶ážááœáẠá€áá°áá»á¬ážá áááºážááá¬áááºááŒá±á¬ááºááŸá¯ááŸáá·áº áááºáááºá áá»áœááºá¯ááºááá¯á· áá±á¬ááºáá»ááºáá»áá«áááºá á¡áá¯á¡áá»áááºááŸá¬á áá°ááá¯á· MTProto session ááᯠáááºáá¬ážáá²á· 5th OSI á¡ááœáŸá¬ááᯠáááºááœá¬ážááŒáá¡á±á¬ááºá
áá±á¬á·áá»á¬ážá áááºáá±á·áá»áºáá»á¬ážá áááºááŸááºáá»á¬ážá Diffie-Hellman
á¡á²áá«ááᯠáá¯á¶ážáá¯á¶áž áááŸááºáá«áá°áž... Session áᬠActive sessions á¡á±á¬ááºááŸá interface ááŸá¬ ááŒááºááá²á· session ááá¯ááºáá«á áá«áá±ááá·áº ááŸáááŸáá±á«á·á
á€ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáááºáá°ááá¯á·áá±á¬ááºáá±ážá¡ááœáŸá¬á០áááá¬ážáá±á¬ á¡ááŸááºááŸá bytes á á¬áááºážáá áºáá¯ááᯠáááºáá¶áááŸááá¬ážáá«áááºá á€áááºááŸá¬ áá¯ááºááŸááºáá¬ážáá±á¬ áááºáá±á·áá»áº ááá¯á·ááá¯áẠááœááºááŒááºá á¬áá¬áž ááŒá áºááẠ- á¡áááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááá ááŸáááŸáá¯ááºážááŸá¯ á¡ááá·áºááœáẠááŸááá±áᬠá¡ááŸááºáááẠáá¯ááºáá±á¬ááºáá±áá«áá "áá±á¬á·" áá¯áá±á«áºáá±á¬ á¡áá°á¡á á¡á á¯á¡áá±ážáá²á០áááºááá·áºá¡áá¬ááᯠáá»áœááºá¯ááºááá¯á·ááŒá±á¬áá±ááááºážá Telegram á¡ááœá²á·ááá¯ááºááá¯áẠá€ááŒá¿áá¬ááᯠááŸááºážáááºážááá¯ááºáá¡á±á¬áẠ(áááẠ4 áá¬áá®ááœáẠáá»áœááºá¯ááºáááá¯ááºááá¯ááºá á¬ááœááºá á¬áááºážáá»á¬ážááᯠá¡ááºá¹áááááºá០áááºáááºážááœááºážáááºáá±áá±á¬ áŠážááŸá±á¬ááºááá¯á· áá¬áá¬ááŒááºááá·áºá¡ááœáẠáá±á¬ááºážáááºáá«áááºá á áá¬ážáá¯á¶ážá¡áá»áá¯á·ááᯠáá»ááºáá¬ážáá²á·ááááºááŸá¬ ááá¯ááœááºáá°áááº)á
áá°á ááŸá áºáá»áá¯ážááŸááááºá session áá áºáᯠ- session áá áºáá¯á á®ááẠá ááº/OS áá áºáá¯áá¯á¶ážááŸáá·áº áááºááá¯ááºááá·áº "áááºááŸá sessions" á¡á±á¬ááºááœáẠááá¬ážáááºáá±á¬ááºáááºáá»á¬ážá UI ááœáẠáá áºáá¯á
áá¯ááá- MTProto á ááºááŸááºáááºážááœáẠmessage sequence áá¶áá«áẠ(á¡ááá·áºáááá·áºááá±á¬á¡á) áá«ááŸáááá·áºá ááŸáá·áº áááºááá·áºá¡áᬠááá°áá®áá±á¬ TCP áá»áááºáááºááŸá¯áá»á¬ážááŒá¬ážááœáẠááŒá¬ááŸááºááá¯ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áº ááá¯ááºáá±á«ááºážáá¯ááºáá»á¬ážááᯠá¡ááŸáááºááŒáŸáá·áºááẠMTProto á ááºááŸááºá¡áá»á¬ážá¡ááŒá¬ážááᯠáá áºáá»áááºáááºážááœáẠáááºááŸááºááá¯ááºáááºááá®ááŸá áºáá¯ááŒá¬áž á¡á ááºážá¡áá±ážáá»á¬áž á¡áá°á¡áááŒá áºáá«áááºá ááœáá·áºááŒá¯áá»ááº. áá¯ááºáá¶á·áá²á·ááá á¹á ááŸá¬ áá®ááá¯ááŒá±á¬ááá¯á·ááááºá UI á ááºááŸáẠá¡áá°áá°áá«áá²á ááœáá·áºááŒá¯áá»ááºáá«áá±ááá·áº áá¶ááá¯ážáá¬á ááŸá¯ááºááœá±ážáááºá áá»áœááºá¯ááºááá¯á·ááŒáá·áºáááº-
- á ááºáá á¹á ááºážá¡áá áºááœáẠá¡áá¯á¶ážááŒá¯áá°á áŠážá áœá¬áá¯ááºáá±ážáááºá auth_key á¥ááá¬á¡á¬ážááŒáá·áºá SMS ááŒáá·áº áááºážááᯠá¡áá±á¬áá·áºááŸáá·áº ááá·áºáááºáá¬ážááẠ- á¡á²áá«ááŒá±á¬áá·áºáá«á ááœáá·áºááŒá¯áá»ááº
- áááá¡áá²ááŸá¬ ááŒá áºááœá¬ážáá¬á MTProto á ááºááŸááºááŸááááº
session_id
áááºááá¯ááºááá¯ááºá¡ááœááºážáá- áá®á¡ááá·áºááŸá¬ áá±á«ááºážá ááºáá«á ááœáá·áºááŒá¯áá»áẠО
session_id
á¡áááºáá±ážááá¯ááºáááºá á¡á¬áᬠ- á€á áá¬ážáá¯á¶ážááᯠáá¯á¶ážá áœá²áá°á¡áá»áá¯á·á á á¬ááœááºá á¬áááºážááŸáá·áº áá¯ááºáá»á¬ážááœáẠááœá±á·ááá¯ááºáááºá- ááá¯á·áá±á¬áẠclient ááá¯ááœáá·áºááá¯ááºáááºá á¡áá±á¬áºááŒá¬ MTProto á¡á ááºážá¡áá±ážáá»á¬áž á¡á±á¬ááºááŸá¬ á¡áá°áá°áá«áá²á auth_key - DC ááá¯áá²ááœá¬ážáá«á
- áá áºáá±á·ááœáẠclient áá¶á០ááá¯ááºáá áºáá¯áá±á¬ááºážááá¯ááẠááá¯á¡ááºáááºá áá±á¬ááºááẠDC - ááŒá®ážáá±á¬á· áá® DC á¡ááœáẠá¡áá áºáá áºáᯠáá¯ááºáá±ážáááá·áºáááºá auth_key !
- á€áááºááŸá¬ á¡áá¯á¶ážááŒá¯áá°á¡áá ẠááŸááºáá¯á¶áááºááŒááºážááá¯ááºáá±á¬áºáááºáž áá°áá®ááŒá±á¬ááºáž á áá áºá¡á¬áž ááŒá±á¬ááŒááẠááœáá·áºááŒá¯áá»áẠ(UI á ááºááŸááº) client ááẠAPI áá±á«áºááá¯ááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºá
auth.exportAuthorization
á¡ááẠDC ááœááºauth.importAuthorization
DC á¡áá áºááœááºá- á¡á¬ážáá¯á¶ážá¡áá°áá°áá«áá² ááœáá·áºáá¬áááºáž ááŸááá±á¬ááºážááŸáááá¯ááºáá«áááºá MTProto á¡á ááºážá¡áá±ážáá»á¬áž (áá áºáá¯á á®ááœááºáááºážáááá¯ááºááá¯ááº
session_id
) áá® DC á¡áá áºá áá°á auth_key.- áá±á¬ááºáá¯á¶ážááœááºá client ááẠPerfect Forward áá»áŸáá¯á·ááŸááºáá»ááºááᯠááá¯áá»ááºáá±áááºá ááá¯ááºáž auth_key áá«áá¬áá²á· á¡ááŒá²áááºáž key - per DC - áá²á· client á áá¯ááºážáááºááá¯á·ááááºá
auth.bindTempAuthKey
á¡áá¯á¶ážááŒá¯ááẠáá¬áá® auth_key - áá áºáááºá temp_auth_key DC á¡ááá¯ááºá á¡á¬ážáá¯á¶ážá¡ááœáẠá¡ááŒá áºáá»á¬ážáááºá MTProto á¡á ááºážá¡áá±ážáá»á¬áž áá® DC ááá¯áááááŒá¯áá« áá¬ážááẠ(áá±á¬ááºáá¬ážáá»á¬áž) áááºáááºáž áá áºáá¯ááŒá®ážáá áºáá¯ááŒá áºáááºá auth_key á¡á²áá«ááœá± á¡á¬ážáá¯á¶ážááᯠáá»áŸáá±áá«áááºá MTProto á¡á ááºážá¡áá±ážáá»á¬áž áá°áá®áá±á¬ DC ááá¯á·
"ááœá²ááŒá¬ážááŒá¬ážáá¬ážáá±á¬ TCP áá»áááºáááºááŸá¯áá»á¬ážá¡ááŒá¬áž" ááá¬ááá¯ááá¯ááá¯ááááºážá ááá¯ááá¯áááºááŸá¬ á€ááá¯á· áá áºáá¯áᯠáááºááá¯ááºááœáẠááœáá·áºááŒá¯áá»áẠááœááºáá®áž - áááºážááẠá€áá¬áá¬ááá¯á· TCP áá»áááºáááºááŸá¯áá»á¬ážá áœá¬ááᯠáááºáááºáááºááŸááá±áá±á¬áºáááºáž áá áºáá±á·ááœáẠáááºážááẠááá¯ážááœá¬ážááœá¬ážáááºááŒá áºáááºá HTTP ááŸáá·áº ááá°áá²á MTProto ááœááºáá¬á á ááºááŸááºá¡ááœááºážááœááºá áááºáá±á·áá»áºáá»á¬ážááᯠá ááºáááºáááŒáẠáá¶áá«ááºáááºááŒá®áž á¡áááºááŒá¯ááá¯ááºáááºá áááºážááá¯á·ááẠááá¯ááºáá±á«ááºážáá²ááá¯á· áááºááœá¬ážáááºá áá»áááºáááºááŸá¯ áá»ááºááœá¬ážááẠ- áá»áááºáááºááŸá¯á¡áá áºááᯠáá°áá±á¬ááºááŒá®ážáá±á¬ááºá áá¬áá¬ááẠáááºážááœáẠááá±ážááá¯á·ááá±ážááá·áº á€á ááºááŸááºá¡ááœááºážááŸá á¡áá¬á¡á¬ážáá¯á¶ážááᯠááŒááºáá¬á áœá¬ áá±ážááá¯á·áá«áááºá áááẠTCP áá»áááºáááºááŸá¯á
ááá¯á·áá±á¬áº áá¡áá±á¬áºááŒá¬ ááá¬ážá áœá²áá¶áááŒá®ážáá±á¬áẠá¡áááºáá±á¬áºááŒáá« á¡áá»ááºá¡áááºáá»á¬ážááẠáá»ááºážááŒá±á¬ááºážááœá¬ážáá«áááºá á€á¡áá±á¬á¡ááœááºážá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á client ááᯠá¡á á០á¡áá±á¬ááºá¡áááºáá±á¬áºáá±áá«ááá¬ážá - á¡á ááá¯ááŒááºááœá¬ážáá¡á±á¬ááºá
áá«ááŒá±á¬áá·áº áá»áœááºáá±á¬áºááá¯á· áá¯ááºáá¯ááºáá«áááºá auth_key
á¡áá±á«áº
Vasilyá [19.06.18/20/05 1:255] data_with_hash := SHAXNUMX(data) + data + (áááºááá·áºáá»áááºáž ááá¯ááºáá»á¬ážáááá¯); á¡áá»á¬ážááẠXNUMX bytes ááŸáá·áº áá®áá»áŸáááºá
encrypted_data := RSA(data_with_hashá server_public_key); 255-byte ááŸááºáá»á¬ážáá±á¬ áá¶áá«áẠ(big endian) ááᯠááá¯á¡ááºáá±á¬ modulus ááẠááá¯á¡ááºáá±á¬ áá«áá«ááá¯á· ááŒáŸáá·áºáááºááá¯ááºááŒá®áž ááááºááᯠ256-byte áá¶áá«ááºá¡ááŒá Ạááááºážáááºážáá¬ážáááºááá°ááá¯á·ááŸá¬ áá°ážáá áºáá±ážáá«áž DH ááŸááááºá
áá»ááºážáá¬áá±á¬áá°á DH ááŸáá·áºáá°áááºááá¯ááºáá±á
dx ááœáẠpublic key ááŸá áºáá¯áááŸááá«á
áá±á¬ááºážááŒá®á á¡áá¯á¶ážááœááºá áá«ááá¯á·áááºáááºážááá¯ááŸá¬ááœá±ááœá±á·ááŸááá²á·áááºá ááá¯á·áá±á¬áºá¡áááºá¡ááŸá
áºáá»á¬ážáá»ááºáá²á·ááẠ- á¡áá±á¡ááœááºááá¯ááœá²ááŒááºážá
áááºááŒá¬ááá¯ááºáááºáᯠclient ááŸá¡áá¯ááºáááºáá±ááŒáááºá DoS ááá¯ááºááá¯ááºááŸá¯áá»á¬ážááᯠáá¬ááœááºááá·áº á¡áá»áá¯ážá¡á
á¬ážá RSA áá±á¬á·ááᯠáŠážáááºáá»ááºáá
áºáá¯áááºážááœáẠáá
áºááŒáááºáᬠá¡áá¯á¶ážááŒá¯áááºá á¡áááá¡á¬ážááŒáá·áº áá¯ááºááŸááºááŒááºážá¡ááœáẠááŒá
áºáááºá new_nonce
. áá«áá±ááá·áº áá®ááá¯ážááŸááºážáá¯á¶ááá²á· ááœá²á
áááºááŸá¯ á¡á±á¬ááºááŒááºáá±áá»áááºááŸá¬ ááẠáá¬ááᯠáááºááá¯ááºáááá²á
Vasilyá [20.06.18/00/26 XNUMX:XNUMX] áá« appid áá±á¬ááºážááá¯áá»ááºááᯠááá±á¬ááºáá±ážáá«áá°áž
áá« DH ááá¯á· áá±á¬ááºážááá¯áá»ááºáá áºáᯠáá±ážááá¯á·áá²á·áááºá
áááºáá°ááá¯á· áá±á¬ááºáá±ážá¡ááá¯ááºááœáẠáááºážááẠá¡ááŸá¬ážáá¯ááºá 4 bytes ááŒáá·áº á¡ááŒá±áá±ážááá¯ááºááŒá±á¬ááºáž áá±ážáá¬ážáááºá áá«áá²á
áá±á¬ááºážááŒá®á áá°ááá«á·ááᯠ-404 ááŒá±á¬áááºá áá«ááá¯áá¬áá²á
á€ááœáẠáá»áœááºá¯ááºááẠáá°á·á¡ááœááºááŒá áºáááº- "ááá¯áá²á·ááá¯á·áá±á¬ áááºááœá±ááŒáá·áº áá¬áá¬áá±á¬á·ááŒáá·áº áá¯ááºááŸááºáá¬ážáá±á¬ áááºá efigna ááᯠáááºážáá«á áá»áœááºá¯áẠDH ááá¯áá»ááºáá«áááº" á áááºážááẠááá¯ááºáá²á áœá¬ áá¯á¶á·ááŒááºááẠ404
áá®ááá¯áá¬áá¬áá¯á¶á·ááŒááºááŸá¯á¡áá±á«áº áááºáááºááá¯áááºáá²á áá¬áá¯ááºááá²? áá±ážááá·áºáá°áááŸááá« (áá«áá±ááá·áº áá¯áááá¡ááá¯ááºážááŸá¬ ááá¯áá»á¬ážáá«áááº)á
á€ááœáẠdock ááœááºá áááºáááºá á¬ážááŸá¯á¡á¬ážáá¯á¶ážááá¯áá¯ááºáá±á¬ááºáááºááŒá áºáááºá
áá«á·ááŸá¬ áá¯ááºá áá¬áááŸááá°ážá ááááºážááœá±ááᯠá¡ááŒááºááŒááºá¡ááŸááºááŸááºááŒá±á¬ááºážááá¯á· á áááºáá°ážáááºáá²á·áááºá
32 bit áá¶áá«ááºááŸá áºáá¯á áááŒá¬ážáá°ááœá±ááᯠáá¯ááºááá¯ážááá¯ááºáá¬
áá«áá±ááá·áº ááá¯ááºáá°ážá á¡á²áá«á BE ááá¯ááºážáá áºáá¯á¡ááœáẠáááºážá¡áááºááá¯á¡ááºáᬠáá®ááŸá áºáá¯áá²á
Vadim Goncharov, [20.06.18/15/49 404:XNUMX PM] ááŸáá·áº ဠXNUMX ááŒá±á¬áá·áºáá¬ážá
Vasilyá [20.06.18/15/49 XNUMX:XNUMX PM] áá¯ááºáááºá
Vadim Goncharová [20.06.18/15/50 XNUMX:XNUMX PM] áá«ááŒá±á¬áá·áº áá° "áááœá±á·áá°áž" ááá¯áá¬ááᯠáá»áœááºáá±á¬áº áá¬ážááááºáá°áž
Vasilyá [20.06.18 15:50] á¡ááœá±á¬áá»áž
ááá¯ážááŸááºážáá±á¬ ááœá²ááœá²ááŒá¬ážááŒá¬ážáá»á¬ážá¡ááŒá áºááá¯á· ááŒáá¯ááœá²ááœá¬ážáááºááᯠáá»áœááºá¯ááºáááœá±á·áá²á·áá«á%)á
á¡ááŸá¬ážá¡ááœááºážá¡á á®áááºáá¶ááŒááºážááẠááá»áœááºážáá»ááºáá«á
Vasilyá [20.06.18/20/18 5:XNUMX PM] á¡áá¯ážá MDXNUMX áááºážááŸááááºá ááœá²ááŒá¬ážáá±á¬ hashe áá¯á¶ážáá¯ááŒá®ážááŒá®á
áá±á¬á·áááºááœá±ááᯠá¡á±á¬ááºáá«á¡ááá¯ááºáž ááœááºáá»ááºáá«áááºá
digest = md5(key + iv) fingerprint = substr(digest, 0, 4) XOR substr(digest, 4, 4)
SHA1 ááŸáá·áº sha2
áá«ááá¯áá¬ážááŒáá¡á±á¬áẠauth_key
Diffie-Hellman á¡á 2048 bits á¡ááœááºá¡á
á¬ážá áá±á¬ááºáá
áºáá¯ááá¬áá²? ááá¯á·áá±á¬áẠá€áá®ážáá¡á±á¬ááºááá¯ááºáž 1024 bits ááᯠáááºááá·áºáááºážááŒáá·áºáá»áŸ á¡áá¯á¶ážáááŒá¯ááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á· ááááŸááá¬áá«ááẠ... ááá¯á·áá±á¬áº á€á¡áá¬ááᯠááá¯áá² á
ááºážá
á¬ážááŒáá·áºááŒáá«á
áá¯á·á á€á¡ááá·áºááœááºá áá»áœááºá¯ááºááá¯á·ááœáẠáá¬áá¬ááŸáá·áºáá»áŸáá±áá¬ážáá±á¬ áá»áŸáá¯á·ááŸááºáá»ááºáá
áºáá¯ááŸááááºá TLS á
ááºááŸááºáá
áºáá¯á analogue áá
áºáá¯ááᯠáááºáá±á¬ááºáá¬ážááŒá®ážá á¡ááœááºá
á»á±ážááŒá®ážáá±á¬ áá¯ááºáá¯á¶ážáá¯ááºáááºážáá
áºáá¯ááŒá
áºáááºá áá«áá±ááá·áº áá¬áá¬á áá«ááá¯á·áááºáá°áá²ááá¯áᬠáá¬ááŸááááá±ážáá°ážá ááá¯ááºáá±ážáá°ážá ááááºáá±á¬á· ááœáá·áºááŒá¯áá»ááº. á¡á²áá«ááœá±á á¡áááºá áááºááẠICQ ááœááºááŸááá²á·áá°ážááá·áºá¡ááá¯ááºážá ááá¯á·ááá¯áẠSSH ááœááºáá²á·ááá¯á· á¡áááºážáá¯á¶áž "login-key" (á¥ááá¬á á¡áá»áá¯á·áá±á¬ gitlab / github ááœááº) áá°áá±á¬ áá±á«áá¬áááᯠáááºá
ááºážá
á¬ážáá»áŸááºá áá«ááá¯á·á¡áááºáááá á¡áááºá áá¬áá¬á០áá»áœááºá¯ááºááá¯á·á¡á¬áž "á€áá¯ááºážáá¶áá«ááºáá»á¬ážááᯠá¡ááŒá¬áž DC á០áááºáá±á¬ááºááŸá¯áá±ážáááº" áᯠááŒá±ááŒá¬ážáá²á·áá«áá áá«ááŸááá¯áẠâáááºážáá²á·áá¯ááºážáá¶áá«ááºááᯠááááºáááºáá¬ážâ ááá¬ážá áá»áœááºá¯ááºááá¯á·áá¯ááºááá¯ááºáᬠá¡áá±á¬ááºážáá¯á¶ážááá±á¬á· áá±á¬á·ááᯠááááºážáááºážáá¬ážááŒá®áž á¡á²áá®á¡áá«ááŸá¬ á¡áá¯á¶ážáááºááŒá®áž ááá»ááºá
á®ážááœá¬ážá
á±ááá¯á· áá±á¬á·ááᯠááááºážáááºážáá«á
á áá¬ážáá ááºá áá»áœááºá¯ááºááá¯á·ááẠááŒáá¯áááºááŸá¬áá°ááŸá¯áá»á¬ážááŒáá·áº áááºážááᯠ"áááºáá¶" áá²á·áááºá á¥ááá¬á áá»áœááºá¯ááºááá¯á·ááẠáá¬áá¬ááᯠáá¯á¶ááŒááºáá«ááá¬ážá áá°á¡áá¯áá¬áž? áá»áœááºá¯ááºááá¯á·ááẠáá»áŸáá¯á·ááŸááºáá±ážááá¯ááºáᬠá á áºáá±ážááŸá¯áá»á¬áž ááá¯á¡ááºáááº-
Vasilyá [21.06.18/17/53 2:XNUMX PM] áááºážááá¯á·ááẠááá¯ážááŸááºážááŸá¯á¡ááœáẠXNUMXkbit áá¶áá«ááºááᯠá á áºáá±ážááẠááá¯ááá¯ááºáž áá¯á¶ážá áœá²áá°áá»á¬ážááᯠáááºážááŸááºážáááº
áá«áá±ááá·áº ááŸááºážááŸááºážáááºážáááºážáá±á¬á· áááŸááá«áá°ážá nafeijoa
Vasilyá [21.06.18/18/02 XNUMX:XNUMX] áááá¯ážááŸááºážáá±á¬á·áá°ážááá¯ááẠáá¬áá¯ááºááááºááá¯áᬠáááŒá±á¬áá«áá°ážá
áááŒá±á¬áá²á·áá«á á€ááá
á¹á
ááœáẠAndroid á¡ááœááºááá¬ážááẠclient ááá¬áá¯ááºááá² ááŒáá·áºáá¡á±á¬ááºá áá
áº
278 static const char *goodPrime = "c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b";
279 if (!strcasecmp(prime, goodPrime)) {
áááŸááá°áž áá¯ááºáá«áááºá á¡áá»áá¯á· áá¶áá«ááºáá áºáá¯áááá¯ážááŸááºážááŸá¯á¡ááœáẠá á áºáá±ážááŸá¯áá»á¬ážááŸááá±á¬áºáááºážá áá»áœááºá¯ááºááẠáááºá¹áá»á¬áá¬áá¬áááºááœáẠáá¯á¶áá±á¬ááºáá±á¬á¡ááááá¬áááŸááá±á¬á·áá«á
áá±á¬ááºážááŒá®á áá¬á áá¬áá®ážááá«ááŒá®á á¡áá±á¬áá·áºáááºáááºá i.e. áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠáá±ážááá¯á·áá«á AES ááᯠá¡áá¯á¶ážááŒá¯áá¬ážááŒá®áž áá±á¬ááºááẠáá¯ááºááŸááºááŒááºážááᯠáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáá«áááºá
áááºáá±á·áá»áºáá®ážááᯠáááºáá±á·áá»áºááá¯ááºáááºá SHA128 á á¡áááºáá Ạ256 áᯠ(á ááºááŸááºá áááºáá±á·áá»áº ID á áááºááŒáá·áº)á ááœáá·áºááŒá¯áá»ááºáá±á¬á·á០áá¯ááºáá°áá¬ážáá±á¬ padding bytes á¡áá«á¡ááẠ32 bytes á¡áá«á¡ááẠáááºáá±á·áá»áºááá¯ááºáááºá á¡áááºáá áºáá»á¬ážá¡ááŒá ẠáááºááŸááºáááºá
Vasilyá [22.06.18/14/08 XNUMX:XNUMX PM] áá»ááºážáá»áŸááœá±ážááá»á¬áž
áááŸááá²á·áááºá
auth_key
. á¡á¬ážáá¯á¶ážá ááá¯á·áááºááá¯á ... áááºá¹áá±á¬áá»ááºážáá»á¬ážá០áááŸááºážáááºážá open source code ááᯠááœááºáááºá áœá¬ áá±á·áá¬áá«áMTProto 2.0 ááẠpadding á 12 á០1024 bytes ááá¯á¡ááºáááºá áááŸááá¬áá±á¬ message á¡ááŸááºááᯠ16 bytes ááŒáá·áº ááá¯ááºážááŒá¬ážááá¯ááºááá·áº á¡ááŒá±á¡áá±ááœáẠááŸááá±ááŒá±á¬ááºáž áááááŒá¯áá«á
áá«ááᯠpadding áááºáá±á¬ááºááá·áºáááá²á
á¡ááŸá¬ážáá áºáá¯á¡ááœááºá á€áá±áá¬ááœááºáááºáž 404
á¡áááºá áá áºá á¯á¶áá áºáá±á¬ááºááẠáá¯á¶ááŒááºážááŸáá·áº á á¬ááœááºá á¬áááºážáá»á¬ážá á á¬áá¬ážááᯠáá±áá»á¬áá±á·áá¬áá«á ááá¯áá±áá¬ááœáẠMAC áááŸááááºááᯠáá°áááááŒá¯áááááºá AES ááᯠá¡ááŒá¬ážáááºááá·áºáá±áá¬ááœááºá០á¡áá¯á¶ážáááŒá¯áá±á¬ á¡áá»áá¯á·áá±á¬ IGE áá¯ááºááœáẠá¡áá¯á¶ážááŒá¯áááºá áááºážááá¯á·ááẠáááºážá¡ááŒá±á¬ááºážááᯠáááºážááá¯á·á FAQ ááœáẠáá±ážáá¬ážáá«áááº... á€áá±áá¬ááœááºá áááºáá±á·áá»áºáá®ážááá¯ááºááá¯ááºá ááá¯ááºáá¬ááŸá¯ááᯠá á áºáá±ážááẠá¡áá¯á¶ážááŒá¯ááá·áº áá¯ááºááŸááºáá¬ážáá±á¬ áá±áá¬á SHA hash ááẠáá áºáá»áááºáááºážááœááºáááºááŒá áºááẠ- ááŸáá·áº áááá¯ááºáá®áá«áá á á¬ááœááºá á¬áááºážáá»á¬ážá¡ááœááºá á¡ááŒá±á¬ááºážááŒáá»ááºá¡áá»áá¯á·á áááºážááá¯á·ááᯠááááºáááááºáá»á áºáá»á°ááŸá¯ááẠá¡ááŒá¶ááŒá¯áá¬ážáá«ááẠ(ááá¯á·áá±á¬áº áá¯á¶ááŒá¯á¶áá±ážá áá¯ááºáááẠáá»áœááºá¯ááºááá¯á·ááᯠááŒáá¯ááœááºážááŒááºáž)á
áá»áœááºá¯ááºááẠá
á¬áá±ážááá¬ááá¯ááºáá«á á€áá¯ááºááœáẠá€á¡ááŒá±á¡áá±ááœáẠáá®á¡áá¯áá®á¡ááŒááºá¡á á¡ááŸá¬ážá¡ááœááºážáááŸááá±á áá«áá±ááá·áº Telegram Desktop áá²á·ááá°áá¬ááᯠá¡áá¯á¶ážááŒá¯ááŒá®áž áááºááœá±á·áá»áá²á· ááŒá¿áá¬ááᯠáá»áœááºáá±á¬áº áá±áá»á¬áá±á«áẠááŒá±á¬ááá¯ááºáá«áááºá áááºážááẠMTProto ááŸá áááºáá±á·áá»áºáá»á¬áž (á€ááá
á¹á
ááœááºáá¬á áá¬ážááŸááºáž 877) ááœááºáᬠá€áááºážá¡á¬ážááŒáá·áº D783F5D3D8EF1.0C (á¡á¬ážáá¯á¶áž DXNUMXFXNUMXDXNUMXDXNUMXEFXNUMXC) ááᯠáá¯ááºááŸááºáá¬ážáááºá ááááá¯á¶áž message key á ááŒá®ážááẠdata á áá°á·áá¬áá° ( main big áá²á· áá
áºáá±áá¬áá¬ááŸá¬ auth_key
256 bytes á msg_key
á¡áá¯á¶ážááá»)á ááá¯á·ááŒá±á¬áá·áº ááá¯ááºááŒá®ážáá»á¬ážááœáẠááŒá¿áá¬ááẠáááá¬áá¬áááºá ááá¯ááá¯áááºááŸá¬á áááºááẠáá¯ááºááŸááºáá¬ážááŒá®áž á
á¬ááŸááºáá¬ážáá±á¬ áá±áá¬áááá¹áá°ááŸá
áºá
á±á¬ááºááᯠááááºážáááºážáá¬ážááẠááá¯á¡ááºáááºá á¥ááá¬- megabytes ááá¯á·ááá¯áẠstreaming video áá»á¬ážááŸááá»áŸááº? .. ciphertext á០MAC ááŒáá·áº ááá¹ááááºá¡á
á®á¡á
á¥áºáá»á¬ážááẠáááºážááᯠstreaming áááºááẠááœáá·áºááŒá¯ááŒá®ážáá±á¬áẠáááºážááᯠáá»ááºáá»ááºážááœáŸá²ááŒá±á¬ááºážáá«á ááŒá®ážáá±á¬á· MTProto áá²á· áááºáá¯ááºááááºá ááá áááºáá±á·áá»áºáá
áºáá¯áá¯á¶ážááᯠá
á¬ááŸáẠááá¯á·ááá¯áẠá
á¬ááŸááºááŒá®ážááŸáᬠááœááºááẠááá¯á·ááá¯áẠáá
áºááºááá¯á· ááœáŸá²ááŒá±á¬ááºážáá«á ááá¯á·ááŒá±á¬áá·áº Telegram Desktop ááá±á¬ááºáá¯á¶ážááœááºáá¬ážááŸááºážááœáẠcache in ááŸááááºá user_data
á¡ááŒá¬ážáá¯á¶á
á¶ááᯠCTR áá¯ááºááœáẠAES ááŒáá·áº á¡áá¯á¶ážááŒá¯ááŒá®ážááŒá
áºáááºá
Vasilyá [21.06.18/01/27 20:XNUMX AM] á¡áá¯ážá IGE ááá¯áᬠáá¬áá²ááá¯áᬠáá« áááá²á·áááº- IGE áᬠKerberos á¡ááœáẠ"á á áºááŸááºááŒá±á¬ááºážáááºáá±ááŒáá²á· áá¯ááºááŸááºáá¯ááº" ááŸá¬ ááááá¯á¶áž ááŒáá¯ážá á¬ážááŸá¯áá«á áááºážááẠáá¡á±á¬ááºááŒááºáá±á¬ ááŒáá¯ážáááºážááŸá¯áá áºáᯠ(áááºážááẠááá¬ááá¡á¬áž á¡áá¬á¡ááœáẠááá±ážááá¯ááºáá«) ááŸáá·áº áááºááŸá¬ážáá áºáá²á·ááááºá áááºážááẠáááŒá¬áá±ážáá®á OCB ááŸáá·áº GCM áá²á·ááá¯á·áá±á¬ áá¯ááºáá»á¬ážááœáẠá¡áá¯á¶ážá¡ááŒááºáá±ážááá·áº á á áºááŸááºááŒá±á¬ááºážáááºáá±ááŒááá·áº áá¯ááºááŸááºáá¯ááºá¡ááœáẠá¡ááŸá ẠXNUMX ááŸá¬ááœá±ááŸá¯á á¡á ááŒá áºáááºá
ááá¯áááºáž ááŸááºážáááºááŒááºážá០ááŒááºážáá¯á¶ááŸá¯áá»á¬ážá
Nikolai Durov áŠážáá±á¬ááºáá±á¬ Telegram áá±á¬ááºááœááºá០á¡ááœá²á·ááœáẠACM áá»ááºáá®áᶠááŒá±á¬ááºáŠáž áá«áááºááŒá®áž áááºáááºááŸá¬ áááºá¹áá»á¬áá¬áá¬áááºááŒáá·áº Ph.D áá»á¬áž áá«áááºáááºá MTProto á áááºááŸááá¬ážááŸááºážááᯠáá¯ááºááẠááŸá áºááŸá áºááá·áº á¡áá»áááºáá°áá²á·ááááºá
áá¬áááºá áá¬áá²á á¡á±á¬ááºááŒá±á¡ááá·áºááᯠááŸá áºááŸá áº
áá«ááŸááá¯áẠtls áá² áá°ááá¯á·ááááºá
áá±á¬ááºážááŒá®á áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºááŸááºááŒááºážááŸáá·áº á¡ááŒá¬ážáá°ážááŒá¬ážáá»ááºáá»á¬áž áá¯ááºáá±á¬ááºááŒá®ážááŒá® ááá¯ááŒáá«á
áá¯á·á áá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºáá¯á¶ážááœáẠTL-serialized áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá±ážááá¯á·ááá¯ááºááŒá®áž áá¯á¶á·ááŒááºááŸá¯áá»á¬ážááᯠáááºáá¯ááºááá¯ááºáá«ááá¬ážá áá«ááᯠáááºááá¯ááá¯á·áááá²á á€ááœááºáááºážáááºáž
Vasilyá [25.06.18/18/46 XNUMX:XNUMX PM] áá»áááºáááºááŸá¯ááᯠá áááºááŒá®áž áá¯á¶ážá áœá²áá°á á ááºááŸáá·áº á¡ááá®áá±ážááŸááºážááœáẠá¡áá»ááºá¡áááºáá»á¬ážááᯠááááºážáááºážáá«áááºá
áááºážááẠapp_idá device_modelá system_versioná app_version ááŸáá·áº lang_code ááá¯áááºáá¶áááºá
ááŸáá·áºá¡áá»áá¯á·áá±á¬áá±ážááŒááºážááŸá¯
á¡ááŒá²ááá¯ááᯠá á¬ááœááºá á¬áááºážááœá± ááŒá¯á á¯áááºá open source ááᯠááœááºáááºá áœá¬ áá±á·áá¬áá«á
invokeWithLayer áá²á· á¡ááŒááºážáá»ááºážá¡á¬ážááŒáá·áº á¡á¬ážáá¯á¶ážááŸááºážáá±áááºááá¯ááẠá¡á²áá«á áá¬áá²á áá»áœááºá¯ááºááá¯á·ááœáẠ- client ááẠserver ááá¯áá±ážáááºáá áºáá¯áá¯ááŸááá±ááŒá®ááá¯áá«á áá¯á· - áá»áœááºá¯ááºááá¯á·áá±ážááá¯á·ááá¯áá±á¬áá±á¬ááºážááá¯áá»ááºáá áºáá¯ááŸááááº-
Vasilyá [25.06.18/19/13 XNUMX:XNUMX] áá¯ááºááŒáá·áº á¡áá²ááŒááºáá¬ááœáẠááááá±á«áºááá¯ááŸá¯ááẠá€á¡ááŸáá¯ááºááœáẠáá¯ááºááá¯ážáá¬ážááŒá®áž á¡ááŸáá¯ááºááá¯ááºááá¯ááºá invokewithlayer ááŒá áºáááºá
á¡áááºááŒá±á¬áá·áº initConnection ááẠáá®ážááŒá¬ážáá±á«áºááá¯ááŸá¯áááŒá
áºááá¯ááºáá«á ááá¯á·áá±á¬áº wrapper ááŒá
áºááá«áááºá áá¯ááºáá²á·á ááœááºáá¬áá²á·á¡ááœááºá áááºááá±á¬á·áá²á·ááá¯á· áá
áºááŒáááºáááºážááá¯ááºáá² session áá
áºáá¯áá»ááºážá
á®áá²á·á¡á
ááŸá¬ á¡áá»áááºááá¯ááºáž áá¯ááºáá±á¬ááºááá«áááºá áá«áá±ááá·áº! áááºážááᯠááœáá·áºááŒá¯áá»ááºáááŸááá² á¡áá¯á¶ážááŒá¯áá°á០áá±á«áºááááá«á á€ááœáẠá¡áá»á¯á¶ážáááºááá·áº á¡ááá·áºááá¯á· áá±á¬ááºááŸááá±ááŒá®ááŒá
áºáááºá
API áááºážáááºážáá»á¬ážá á¡áááºážáááºáá±á¬ á¡ááá¯ááºážááá¯áᬠááœáá·áºááŒá¯áá»ááºáááŸááá² á¡áá¯á¶ážááŒá¯áá°áá»á¬áž áááŸáááá¯ááºáááº-
- auth.sendCode
- auth.reendCode
- account.getPassword
- auth.checkPassword
- auth.checkPhone
- auth.signup
- auth.signIn
- auth.importAuthorization
- help.getConfig
- help.getNearestDc
- help.getAppUpdate
- help.getCdnConfig
- langpack.getLangPack
- langpack.getStrings
- langpack.getDifference
- langpack.getLanguages
- langpack.getLanguage
áá°ááá¯á·áá²á ááááá¯á¶ážáá«á auth.sendCode
á áá»áœááºá¯ááºááá¯á·ááẠapi_id ááŸáá·áº api_hash ááá¯á·ááᯠáá±ážááá¯á·áááºááŒá
áºááŒá®áž áá¯ááºáá
áºáá¯ááŸáá·áºá¡áá° SMS ááᯠáááºáá¶áááŸáááá·áº ááááá¯á¶ážáá±á¬ áááºááá¯ážááŸááá±á¬ áá±á¬ááºážááá¯áá»ááºáá
áºáá¯ááŸááá«áááºá á¡áááºá áá»áœááºá¯ááºááá¯á·ááẠDC ááá¯á·ááŸá¬ážááœá¬ážáá«á (á¥ááá¬á¡á¬ážááŒáá·áº á€ááá¯ááºáá¶á áá¯ááºážáá¶áá«ááºáá»á¬ážááᯠá¡ááŒá¬ážáá°áá
áºáŠážá០áá±ážáá±á¬ááºáááº)á ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠááá¯áá»ááºáá±á¬ DC áá¶áá«ááºááŸáá·áº á¡ááŸá¬ážáá
áºáá¯ááᯠáááºáá¶áááŸááááºááŒá
áºáááºá áááºááá·áº IP ááááºá
á¬ááᯠDC áá¶áá«ááºááŒáá·áº áá»áááºáááºááááºááᯠááááŸáááẠáá»áœááºá¯ááºááá¯á·á០áá°áá®áá±á¬ááºááœááºáá±ážáá«áááºá help.getConfig
. áá
áºááŒáááºááœáẠ5 ááŒáááºáá¬ááŸááá±á¬áºáááºáž 2018 ááá°áááá»á¬ážáá±á¬ááŒá
áºáááºáá»á¬ážááŒá®ážáá±á¬ááºá¡áá±á¡ááœááºáááºáááááá¬áá¬ááá¯ážáá¬áááºá
ááᯠáá»áœááºá¯ááºááá¯á·ááẠá¡áááºááááá¬áá¬ááœáẠá€á¡ááá·áºááœáẠáá±á¬ááºááŸááá²á·ááŒá±á¬ááºáž ááááááŒáá«á áá¯á·á IP ááááºá á¬áá áºáá¯áááá¯á·á á¡áááºážáá±ážááŒá®ážáá¬ááá¯ááºáá°ážáá¬ážá MTProto á áá¯ááºááŸááºááá¬ážáá±á¬ á¡á áááºá¡ááá¯ááºážááœáẠáááºážááŸáá·áº á¡ááŒá¬ážáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá¡áááºááŒá±á¬áá·áº ááá¯ááºááááºážá ááá·áºááœááºáá¶ááá¯ááŒá¬ážááááº- "ááááºá á¬á¡áá¯áá»á¬ážááŒáá·áº áá¯á¶á·ááŒááºááá·áº RKN ááá¯ááºááŒá±á¬ááºáž áááºááá¯á·áá±áá»á¬ááá¯ááºáááºáááºážá" á€á¡áá»ááºááᯠáá»áœááºá¯ááºááá¯á·ááẠá¡ááŸááºááááºá¡á¬ážááŒáá·áº ááá¬ážááẠáá±á¬ááºáááºáá»á¬ážááœáẠááŸááºáááá«áááºá ááá·áºááœááºážáá¬ážáá±á¬ RSA áá±á¬á·áá»á¬áž, i.e. áááºáá¯á¶ááá¯ááºáá«áááºá ááá¹ááᬠá€á¡áá»ááºá¡áááºá á¡ááŸááºááááºááœááºá áá±á¬ááºáááºáá»á¬ážááẠá¡ááŒá¬ážáá»ááºáááºáá»á¬ážááŸáá áºááá·áº áááºáá¶áááŸáááá·áº ááŸá±á¬ááºááœááºážáá±á¬á·áááºááŒááºážááá¯ááºáᬠá¡áá»ááºá¡áááºá¡ááœáẠáááºážááᯠáá¯ááºáá±á¬ááºááŒá®ážááŒá áºááẠ(áá»áááºáááºáááá·áºáá±áá¬ááᯠááááẠááá¯á¡ááºáá±áá±ážáá±á¬ááŒá±á¬áá·áº áááºážááẠMTProto ááá¯ááºááá¯ááºááœáẠáá¯ááºáá±á¬ááºááááá«)á
á¡áá¯áá±áááºáá±á¬áºá áá±á¬ááºáááºááœáá·áºááŒá¯áá»ááºá á€á¡ááá·áºááœááºá áá»áœááºá¯ááºááá¯á·ááẠááœáá·áºááŒá¯áá»ááºááááŸááá±ážáá² áá»áœááºá¯ááºááá¯á·ááá»áŸá±á¬ááºááœáŸá¬ááᯠá á¬áááºážáááœááºážááá±ážáá«á ááœáá·áºááŒá¯áá»ááºáááŸááá±á¬á¡áá¯á¶ážááŒá¯áá°á¡ááœáẠáááŸáááá¯ááºáá±á¬áááºážáááºážáá»á¬ážááᯠáá¬áá¬á áááºááá¯á·áá¯á¶á·ááŒááºáááºááᯠáá±á¬áá±á¬ááẠáá»áœááºá¯ááºááá¯á·ááŒááºááá¯áá«áááºá ááŒá®ážáá±á¬á· áá®ááŸá¬âŠ
Vasilyá [10.07.18 14:45]
https://core.telegram.org/method/help.getConfig config#7dae33e0 [...] = Config; help.getConfig#c4f9186b = Config;
https://core.telegram.org/api/datacenter config#232d5905 [...] = Config; help.getConfig#c4f9186b = Config;
á¡á á®á¡á á¥áºááœáẠáááá áá¯ááá áá±á«áºáá¬áááºá
tdesktop schema ááœáẠáááááááºááá¯ážááŒá áºáááºá
áá¯ááºáá«áááºá á¡á²áá®ááááºážáá á á¬ááœááºá á¬áááºážááœá±ááᯠááœááºážáá¶ááŒá®ážáá«ááŒá®á áááŒá¬áááºááŸá¬ ááŒááºááŒá áºáá¬ááá¯ááºáá±ááá·áº ááááºááá¯ááºáá±á¬á·áá«áá°ážá á¡ááœá±á·á¡ááŒá¯á¶áááŸááá±ážáá±á¬ developer ááẠáááºááá¯á·ááááá·áºááááºážá á¡áááºá áááºáááºáááºááá»áŸá±á¬ááºááœáŸá¬ááá¯á á¬áááºážááœááºážáá«áá áá°ááá¯á·áááºááá·áºá¡á¬ážá¡ááŒá±á¬ááºážááŒá¬ážáááá·áºáááºá Vasily á áá«ááá¯áá¯ááºáá²á·áááºá áá«áá±ááá·áº áá¶ááá±á¬ááºážá áœá¬áá²á áá°á·áá® áá¬áá áºáá¯á០áááá¯á·áá²á·áá«áá°áž (áá±á¬ááºáá áºáá«á áá®á¡ááŒá±á¬ááºážááᯠáá¯áááá¡ááá¯ááºážááŸá¬ ááŒá±á¬áá«á·áááº)á
... áá»áœááºá¯ááºááá¯á·ááẠAPI ááá¯á· áá áºáááºážáá áºáá¯á¶ ááœáŸá±á·áá¬ážááŒá®ážááŒá áºáááºááᯠáááááŒá¯áááá«áááºá ááá¯ááá¯áááºááŸá¬á áá±á¬ááºáá áºááá·áºáááºááŒá®áž MTProto á¡ááŒááºá¡áááºááœáẠáá áºáá¯áá¯ááœá²áá»á±á¬áºáá±áá«ááá¬ážá á¡á¶á·ááŒá áá¬áááŸááá«-
Vasilyá [28.06.18/02/04 2:XNUMX AM] Mmá áááºážááá¯á·ááẠeXNUMXe áá±á«áºááŸá algorithms á¡áá»áá¯á·ááᯠáá±á¬ááºááŒááºáá±áááº
Mtproto ááẠááá¯ááááºážááŸá áºáá¯áá¯á¶ážá¡ááœáẠáá¯ááºááŸááºááŒááºážááá¯ááºáᬠá¡ááºáááá¯áá®áááºáá»á¬ážááŸáá·áº áá±á¬á·áá»á¬ážááᯠáááºááŸááºáá±ážááá·áºá¡ááŒáẠwrapper ááœá²á·á ááºážáá¯á¶ á¡áááºážáááº
ááá¯á·áá±á¬áº áááºážááá¯á·ááẠááá°áá®áá±á¬ stack á¡ááá·áºáá»á¬ážááᯠá¡áááºáááŒáẠáá±á¬á ááºáá±áá±á¬ááŒá±á¬áá·áº mtproto ááẠáááºááá·áºáá±áá¬ááœáẠá¡áá¯á¶ážáááºááŒá®áž áá±á¬ááºáá áºááá·áºááᯠá áááºáá²á·áááºááᯠááŸááºážááŸááºážáááºážáááºáž áááááá±ážáá«á
áááºááᯠáá±á¬á
ááºáá±ááŒáá¬áá²á áá±á¬ááºážááŒá®á á€ááœáẠPFS á¡ááœáẠá¡áá¬ážáá° áá¬áá®áá±á¬á·ááŒá
áºááẠ(á¥ááá¬á¡á¬ážááŒáá·áºá Telegram Desktop ááẠáááºážááᯠáááºááá¯á·áá¯ááºáá±á¬ááºááááºááᯠááááá«)á áááºážááᯠAPI áá±á¬ááºážááá¯ááŸá¯ááŒáá·áº áá¯ááºáá±á¬ááºáááºá auth.bindTempAuthKey
, i.e. ááááºáááºážá¡ááá·áºááá±á ááá¯á·áá±á¬áº áá
áºáá»áááºáááºážááœááºá áááºážááẠá¡á±á¬ááºááŒá±á¡ááá·áºááœáẠáá¯ááºááŸááºááŒááºážááᯠá¡ááŸá±á¬áá·áºá¡ááŸááºááŒá
áºá
á±ááẠ- áááºážááŒá®ážáá±á¬ááºá á¥ááá¬á áááºááẠáááºážááᯠáááºáá¶ááŒá¯áá¯ááºááẠááá¯á¡ááºáááºá initConnection
á
áááºááá¯á· ááá¯ááºáá«á áá¯á¶ áá¯á¶ááŸááºáá±á¬ááºážááá¯ááŸá¯á áá®ážááŒá¬ážá¡á¬ážááŒáá·áºá áááºážááẠá¡ááœááºááœááºááŸááá±á¬áºáááºáž DC ááœáẠáá¬áá®áá±á¬á·áá
áºáá¯áᬠááŸáááá¯ááºáááºáá¯áááºáž áá±ážááá¯á·áá«áááºá auth_key_id
áááºáá±á·áá»áºáá
áºáá¯á
á®ááœáẠá¡áááºážáá¯á¶áž áááºáá±á·ááºá»ááá¯ááºážááᯠáá±á¬á·ááᯠááŒá±á¬ááºážáá²ááœáá·áºáá±ážááŒá®áž áá¬áá¬ááẠáá¬áá®áá±á¬á·ááᯠá¡áá»áááºáááœá±áž âáá±á·â ááá¯ááºááœáá·áºááŸáááẠ- á€ááá
á¹á
ááœáẠáá¬áá¯ááºááááºáááºážá á¡áá¬áá«ááºáá¬ážáá»á¬ážáá²á·ááá¯á· áá±á¬á·áá»á¬ážá
áœá¬ááŸáááẠáááŒá
áºááá¯ááºáá±á ááá¯á·áá±á¬áº..
MTProto á¡ááŒááºá¡áááºááœáẠááŸááºáá¬ážááá¯ááºáá±á¬ á¡ááŒá¬ážá¡áá¬á¡áááºážáááºááŸááá«áááºá
áááºáá±á·áá»áºá
á¬áá»á¬ážá msg_idá msg_seqnoá á¡ááá¡ááŸááºááŒá¯ááŸá¯áá»á¬ážá áááºážááŒá±á¬ááºážááŸá¬ážáá±ááá·áº pings áá»á¬ážááŸáá·áº á¡ááŒá¬ážáá±á¬ idiosyncrasies
áá°ááá¯á·á¡ááŒá±á¬ááºáž áá¬ááŒá±á¬áá·áº ááááá¯á·ááá¯áá¬áá²á áá¬ááŒá±á¬áá·áºáá²ááá¯áá±á¬á· áá°ááá¯á·á á¡ááá·áºáá áºáá¯ááŒáá·áºááŒá®áž API áá²á· á¡áá¯ááºáá¯ááºáá²á·á¡áá« áá°ááá¯á·á¡ááŒá±á¬ááºáž áááá¬ážááá¯á· ááá¯áá«áááºá msg_key ááá¯áá»áœááºá¯ááºááá¯á·á áááºááááºá á¬ážáá°ážááá¯áá«á áá¯á·á á¡á±á¬ááºá¡ááá·áºá áá»áœááºáá±á¬áºááá¯á·á¡ááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠá á¬ááŸááºáá¬ážáá²á·áááºááá¯áá«á áá¯á·á ááá¯á·áá±á¬áº áá¯ááºááŸááºáá¬ážáá±á¬ áá±áá¬á¡ááœááºážááœááºá áá»áœááºá¯ááºááá¯á·ááœáẠá¡á±á¬ááºáá«á¡ááœááºáá»á¬áž ááŸáááẠ( padding ááẠáááºááá·áºáá±áá¬ááœáẠááŸááá±áááºááᯠááááẠáá±áá¬á á¡ááŸááºá ááá¯á·áá±á¬áº áááºážááẠá¡áá±ážáááŒá®ážáá«)á
- áá¬áž-int64
- session_id - int64
- message_id - int64
- seq_no-int32
DC áá
áºáá¯áá¯á¶ážá¡ááœáẠáá¬ážáá
áºáá»áá¯ážáááºážáᬠááŸááááºááᯠáááááá«á áá°áá¡ááŒá±á¬ááºážáá¬ááŒá±á¬áá·áºáááá¬áá²á áá±á¬ááºážááá¯á
áá¬ááŸáááá¯á·áᬠááá¯ááºáá«áá°ážá get_future_salts
áááºááá·áºááŒá¬ážáá¬ááá»á¬áž á¡áá»á¯á¶ážáááºáááºááᯠááŒá±á¬ááŒáááºá ááá¯á·áá±á¬áº ááá·áºáá¬ážááẠâáá¯ááºâáá«áá áááºáá±á·áá»áº (áá±á¬ááºážááá¯ááŸá¯) ááẠááá¯ážááŸááºážá
áœá¬ áá»á±á¬ááºáá¯á¶ážááœá¬ážáááºááŒá
áºáááºá áá¬áá¬ááẠáá¬ážá¡áá
áºááᯠáá¯ááºáá±ážááŒááºážááŒáá·áº áá±áá»á¬áá±á«áẠá¡á
á®áááºáá¶áá«áááºá new_session_created
- áá«áá±ááá·áº á¡áá±á¬ááºážáá²á· á¥ááá¬á¡á¬ážááŒáá·áº áá
áºáááºážáááºážáá²á· ááŒááºááá¯á·ááá«áááá·áºáááºá á€áá±ážááœááºážááẠá¡ááá®áá±ážááŸááºážá áááºáá±á¬ááºáá¯á¶ááᯠáááºáá±á¬ááºááŸá¯ááŸááááºá
áá¬áá¬á¡á¬áž á¡ááŒá±á¬ááºážá¡áá»áá¯ážáá»áá¯ážááŒá±á¬áá·áº áááºááŸááºáá»á¬ážááᯠáá¯á¶ážáá¯á¶ážáá»áá
áºáááºááŸáá·áº á€áááºážááŒáá·áº áá¯á¶á·ááŒááºááẠááœáá·áºááŒá¯áá¬ážáááºá ááááºáá±á¬á·á client áááºá០MTProto session ááá¯áᬠáá¬áá²á á€áááºááŸá¬ ááááºážááŸá
áºáá¯á¶ážááŒá
áºáááºá session_id
О seq_no
á€á
ááºááŸááºá¡ááœááºáž áááºáá±á·áá»áºáá»á¬ážá áá¯ááºáá«áááºá á¡áááºážáᶠTCP áá»áááºáááºááŸá¯á áá¯ááºáá«áááºá áá»áœááºá¯ááºááá¯á·á client ááẠá¡áá¬áá»á¬ážá
áœá¬ááᯠáááºááá¯á·áá¯ááºáá±á¬ááºááááºááᯠááááá±ážááŒá±á¬ááºážá á¡áááºááŒááºáá¬ážáá¬á ááŒááºáááºáá»áááºáááºáá¬ážáááºáá¯ááá¯ááŒáá«á
áá¯á·á á¡áááºá áááºážááẠáá»ááºááŒááºá
áœá¬ááŒá
áºáá²á·áá«á - á
ááºááŸááºáá±á¬ááºážááẠTCP áá»áááºáááºááŸá¯á¡áá
áºááœáẠáááºááŸááá±áá«á ááá¯ážáá«á seq_no
áá±á¬ááºááẠá¡áá»áááºááŒá¬ááŒáá·áºáá«á áá¬áá¬ááẠáááºážááᯠáá»ááºááá¯ááºáááºá á¡ááŒá±á¬ááºážááŸá¬ áááºážááẠáá»áœááºá¯ááºááá¯á·ááááŸááá¬ážááá·áºá¡ááá¯ááºáž áááºážá
á®áá±áá«áááºá
áá¬ááŒá
áºááá·áºáá²á seq_no
? á¡áá¯ážá á¡á²áá« áááºáá²á·áá±ážááœááºážáá²á áá¬ááá¯ááá¯ááá¯áááºááᯠááá¯ážááá¯ážáá¬ážáá¬áž áá¬ážáááºá¡á±á¬ááºááŒáá¯ážá
á¬ážáá«á
áááºá ááºááááºážá áá¬áž
ááŒááºáá¬ážá áœá¬ á¡ááá¡ááŸááºááŒá¯ááŸá¯ ááá¯á¡ááºáá±á¬ áááºáá±á·áá»áºá áááºážááá¯á·ááœáẠááœááºááááºáá¬áá»á¬ážááŸáá·áº á¡ááá¡ááŸááºááŒá¯áá»ááºáá»á¬ážááŸááœá²á á¡á¬ážáá¯á¶ážáá®ážáá«ážááẠá¡áá¯á¶ážááŒá¯áá°á¡á¬ážáá¯á¶ážááŸáá·áº áááºáá±á¬ááºááŸá¯áááºáá±á·ááºá»áá»á¬ážá áœá¬ áá«áááºáááºá
áááºáá±á·áá»áº áá¶áá«áẠ(msg_seqno)
32-bit áá¶áá«ááºááẠá€áááºáá±á·áá»áºáááá¯ááºáá® áá±ážááá¯á·áá°á០áááºáá®ážáá¬ážááá·áº âá¡ááŒá±á¬ááºážá¡áá¬ááŸáá·áºááá¯ááºáá±á¬â áááºáá±á·áá»áºáá»á¬ážá á¡áá±á¡ááœáẠ(á¡ááá¡ááŸááºááŒá¯ááŸá¯ ááá¯á¡ááºáá±á¬á á¡áá°ážáááŒáá·áº ááœááºááááºáá¬ááá¯ááºáá±á¬) á¡áá±á¡ááœáẠááŸá áºáááŸáá·áº áá®áá»áŸáá±á¬ XNUMX-bit áá¶áá«ááºááẠáááºááŸááááºáá±á·áá»áºááẠáááºááŸááááºáá±á·áá»áºááŒá áºáá«á áá±á¬ááºáááºááœá²á¡áá±ááŒáá·áº ááá¯ážáá¬áá«áááºá á¡ááŒá±á¬ááºážá¡áá¬ááŸáá·áºáááºáááºáá±á¬ áááºáá±á·áá»áºá ááœááºááááºáá¬áá áºáá¯ááẠáááºážáá¡ááŒá±á¬ááºážá¡áá¬áá áºáá¯áá¯á¶ážááŒá®ážáá±á¬áẠá¡ááŒá²áááºážáá¯ááºáá±ážáááºá ááá¯á·ááŒá±á¬áá·áºá áááºážá sequence number ááẠáááºážááœááºáá«ááŸááá±á¬ áááºáá±á·ááºá»áá»á¬ážá sequence áá¶áá«ááºáá»á¬ážááẠááŒá®ážáá±áá«áááºá
áá«á 1 ááá¯ážááŒá®áž áá±á¬áẠ2 á áááºááá¯áááºáááºá¡áá»áá¯ážá¡á
á¬ážáá².. áá°áááºážá¡áááá¹áá¬ááºá "ACK á¡ááœáẠlow bit ááŒá
áºááŒá®áž áá»ááºáá¬á ááááºáž" ááá¯á· áá¶ááááŸááá±ááá·áº ááááºá áááŸááºáá«áá°áž- á¡áá°ážáááŒáá·áºá áá±ážááá¯á·ááá¯ááºáááºáᯠáááºááŸá¬ážáááºá á¡áá±á¬áºááŒá¬ áá°áá®áá±á¬á¡áááºááŒá¯áá»ááºáá»á¬áž seq_no
! áááºááá¯áá²? á¥ááá¬á¡á¬ážááŒáá·áºá áá¬áá¬ááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž áá
áºá
á¯á¶áá
áºáᯠáá±ážááá¯á·áááºá áá±ážááá¯á·áááºá áá»áœááºá¯ááºááá¯á·ááá¯ááºááá¯áẠááŸá¯ááºááááºáá±áá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáá°ááááºáá±á·áá»áºáá»á¬ážááᯠáááºáá¶áááŸáááŒááºážááŸáá·áºáááºáááºá áááºáá±á¬ááºááŸá¯á¡áááºááŒá¯áá»ááºáááºáá±á·áá»áºáá»á¬ážááŒáá·áºáᬠááŒá±ááŒá¬ážáá«áááºá á€ááá
á¹á
ááœááºá áá»áœááºá¯ááºááá¯á·á á¡ááœááºá¡áááºááŒá¯áá»ááºáá»á¬ážááẠáá°áá®áá±á¬á¡ááœááºáá¶áá«ááºááŸááá«áááºá ááẠTCP ááŸáá·áºáááºážááŸá®ážááŒá®áž á€á¡áá¬ááẠáá°ážááŒá±á¬ááºááŒá±á¬ááºáááºááá±á¬áºáááºáž TCP ááœááºááŒá
áºáá±á¬ááŒá±á¬áá·áº á¡ááœááºááá¯ááºážáá¯á¶ááá±á«áºáá«á seq_no
áááŒá±á¬ááºážáá²áá² á¡áááºááŒá¯áá»áẠáá±á¬ááºááœá¬ážáá«áááºá seq_no
áá
áºáááºá-áá«ááᯠáá«á
áááºááá¯ážááŸá¬á
áá¯ážáááºá á¡áááºááŒá¯áá»ááºáá»á¬ážááẠMTProto ááá¯á· áá±á¬ááºááŸááá±áá«áááºá á á¡áá±á«áº seq_no
TCP ááœááºáá²á·ááá¯á·á msg_id
!
áá«áá¬áá² msg_id
á€áááºáááºáá»á¬ážáá²á០á¡áá±ážááŒá®ážáá¯á¶ážá á¡áááºáá±á¬áºááŒááá·áºá¡ááá¯ááºáž áááºáá±á·ááºá»ááá°ážááŒá¬ážáá±á¬ IDá áááºážááᯠ64-bit áá¶áá«ááºá¡ááŒá
ẠáááºááŸááºáá¬ážáááºá áááºážááœáẠáá¬áá¬-ááá¯ááº-áá¬áá¬ááŸá±á¬áºáá»á¬ážáá«ááŸáááá·áº á¡áááºážáá¯á¶ážáá±á¬ áááá¬áááºááŸá¬ážááá·áº bits áá»á¬ážááŒá
áºááŒá®áž áá»ááºááẠá¡ááá¯ááºážááááºážá¡ááá¯ááºážá¡áá«á¡ááẠUnix á¡áá»áááºáá¶ááááºáá¯á¶ážááᯠáááºáááºááá¯á· 32 bit ááá¯á·ááŒá±á¬ááºážáá¬ážáááºá á¡á²áá«ááœá±á áá
áºááŒáááºáá»áŸáẠá¡áá»áááºáá¶ááááºááŸáááºááŒááºáž (ááŸáá·áº á¡áá»áááºááœá¬ááŒá¬ážááœááºážáá±á¬ áááºáá±á·áá»áºáá»á¬ážááᯠáá¬áá¬á០áááºáá»áá«áááº)á á€á¡áá»ááºááŸá áá±áá¯áá»á¡á¬ážááŒáá·áºá áááºážááẠáá¯á¶ážá
áœá²áá°á¡ááœáẠááá¹áá¬áá¯á¶ážááá¯ááºáᬠidentifier áá
áºáá¯ááŒá
áºááŒá±á¬ááºáž ááœááºáá±á«áºáá¬áááºá áá±á
áẠ- áááááá«á session_id
- áá»áœááºá¯ááºááá¯á· á¡á¬ááá¶áá«ááẠáááºááá·áºá¡ááŒá±á¡áá±áá»áá¯ážááœááºáááᯠá
ááºááŸááºáá
áºáá¯á¡ááœáẠáááºááœááºáá¬ážáá±á¬ áááºáá±á·áá»áºááᯠááá°áá®áá±á¬ session áá
áºáá¯ááá¯á· áá±ážááá¯á·ááá¯ááºáááºááá¯ááºáá±á. ááá¯ááá¯áááºááŸá¬á ááŸáááŸáá·áºááŒá®ážáá¬ážááŒá
áºáááºá áá¯á¶áž á¡ááá·áº â á
ááºááŸááºá á
ááºááŸááºáá¶áá«ááºá áááºáá±á·áá»áº IDá á¡áááºááŒá±á¬áá·áº á€áá»áŸ ááŸá¯ááºááœá±ážááŸá¯áá»á¬ážá á€áá»áŸáá¯á·ááŸááºáááºážááŒááºááŸá¯ááẠá¡ááœááºááŒá®ážááŒááºáá«áááºá
ááá¯á·ááŒá±á¬áá·áº msg_id
ááá¯á¡ááºáá±á¬âŠ
RPC- áá±á¬ááºážááá¯ááŸá¯áá»á¬ážá áá¯á¶á·ááŒááºááŸá¯áá»á¬ážá á¡ááŸá¬ážá¡ááœááºážáá»á¬ážá á¡áááºááŒá¯áá»ááºáá»á¬ážá
áááºáááááŒá¯áááá¬ážááá·áºá¡ááá¯ááºáž á¡ááŒá±áá»á¬ážááŸááá±áá±á¬áºáááºáž schema ááœáẠáááºááá·áºáá±áá¬ááœááºáááᯠ"RPC áá±á¬ááºážááá¯ááŸá¯áá
áºáá¯ááŒá¯áá¯ááºáááº" á¡áá°ážá¡áá»áá¯ážá¡á
á¬áž ááá¯á·ááá¯áẠáá¯ááºáá±á¬ááºáá»ááºáááŸááá«á áá±á¬ááºáá¯á¶ážááœááºá áá»áœááºá¯ááºááá¯á·ááœáẠá¡ááŒá±á¬ááºážá¡áá¬ááá¯ááºáᬠáááºáá±á·áá»áºáá»á¬ážááŸááááºá á¡á²áá«ááá±á¬á·á áááºááá·áº áááºáá±á·áá»áºááẠáá±á¬ááºážááá¯ááŸá¯áá
áºáᯠááŒá
áºááá¯ááºáááºá áááŒá
áºáá°ážáá¬ážá áá±á¬ááºáá¯á¶ážáá±á¬á·, áá
áºáá¯áá»ááºážá
á®ááᯠááŒá
Ạmsg_id
. á€áááºááŸá¬ á¡ááŒá±áá»á¬ážááŒá
áºáááº-
rpc_result#f35c6d01 req_msg_id:long result:Object = RpcResult;
á€áááºááŸá¬ áááºááá·áºáááºáá±á·áá»áºááᯠáá¯á¶á·ááŒááºááŸá¯ááŒá
áºáááºááᯠáá±á¬áºááŒáááºá ááá¯á·ááŒá±á¬áá·áºá API á ááááºáááºážá¡ááá·áºááœááºá ááá·áºáá±á¬ááºážááá¯ááŸá¯ááœáẠáááºááá·áºáá¶áá«ááºááᯠááŸááºáá¬ážáá¬ážááá«ááẠ- á¡áá¯ááºááẠáá
áºááŒáá¯ááºáááºáááºážááŒá
áºáá±ááŒá±á¬ááºáž ááŸááºážááŒáááºáááá¯á¡ááºáá² áá
áºáá»áááºáááºážááœáẠáá±á¬ááºážááá¯áá»ááºáá»á¬ážá
áœá¬ááŸáááá¯ááºáááºá á¡ááŒá±áá»á¬áž áááºááá·áºá¡ááŸá¬á
á¬ááŒáá·áº ááŒááºáááá¯ááºááááºážá áá°á¡áá áááºážááŸá á¡áá¯ááºááá¬ážáá»á¬ážáá²á·ááá¯á· á¡ááŸá¬ážá¡ááœááºáž áááºáá±á·áá»áºáá»á¬ážá á€áá±á¬ááºááœááºááŸá áááá¯áá¬áááºáá¬ááᯠááŒá±áá¬áá¶ááá¯ááºáááº- áááºááŸáá·áº TCP áá»áááºáááºááŸá¯ááᯠááááºážááááºážáá¬ážááá·áº áá¬áá¬ááẠááŸá±á·áá¯á¶áž áá»áááºááœááºáá»áŸá¬á¡ááœááºá áááºážááẠáá±á¬ááºáá¶áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠááœáŸááºááŒá¬ážááŒá®áž áááºážááá¯á·ááᯠááŒááºáááºá
á¯á
ááºážáá±ážáááºá message_id
. á€áá±áá¬á á¡áá¬á¡á¬ážáá¯á¶ážááẠááŸááºážáááºážááŒááºáá¬ážááŒá®áž áá»áá¯ážááŒá±á¬ááºážáá®áá»á±á¬áºáá¯á¶ááááºá
áá¯ááºáá¬áž.. áááºá
ááºážá
á¬ážáááºáá±á¬? áá±á¬ááºáá¯á¶ážááœááºá RPC áá¯á¶á·ááŒááºááŸá¯ááá¯ááºááá¯ááºááœááºáááºáž á¡ááœááºáá
áºáá¯ááŸááááºá msg_id
! áá»áœááºá¯ááºááá¯á·ááẠáá¬áá¬ááᯠâáááºážáá«á·á¡ááŒá±ááᯠááá¯á¶á·ááŒááºáá°ážâ ááá¯á· á¡á±á¬áºáááŸá¬áá¬ážá áá¯ááºáá«áááºá á¡áááºááŒá¯áá»ááºáá²á· áááºáááºááŒá®áž áá¬ááŸááá²á á
á¬áá»ááºááŸá¬á¡ááŒá±á¬ááºáž
msgs_ack#62d6b459 msg_ids:Vector long = MsgsAck;
áá áºáááºáá²á·áá áºááẠáá¯ááºááááºá áá«áá±ááá·áº á¡ááŒá²áááºážáá±á¬á· ááá¯ááºáá«áá°ážá RpcResult ááᯠáááºáá¶áááŸááá«á áááºážááẠáá°á·áá¬áá¬áá° á¡ááá¡ááŸááºááŒá¯ááŸá¯áá áºáá¯á¡ááŒá Ạáá¯ááºáá±á¬ááºáááºá ááá¯ááá¯áááºááŸá¬á áá¬áá¬ááẠááá·áºáá±á¬ááºážááá¯áá»ááºááᯠMsgsAck ááŒáá·áº áá¯á¶á·ááŒááºááá¯ááºááẠ- "áá«áááºáá¶áááº" áá¯ááá¯áááºá RpcResult ááá¯áá»ááºáá»ááºážááŒá±ááá¯ááºááẠá ááŸá áºáá¯áá¯á¶áž ááŒá áºááá¯ááºáááºá
áá¯ááºáááºá áááºážá¡ááŒá±ááá¯ááŒá±áááŸá¬á á¡áááºááŒá¯áá»ááºá ááá¯ááºáá«áá áá¬áá¬á áááºážááᯠáá±ážááá¯á·ááŒááºážáááŒá¯áá±ážáᯠáá°áááŒá®áž áááºážááᯠááá·áºáᶠáááºáᶠááœáŸáá·áºáá áºáááºááŒá áºáááºá áá±á¬ááºáá áºáá¯á ááŒááºáááºááœááºáááºá ááá¯á·áá±á¬áº á€ááœááºá á¡áá»áááºáá¯ááºááŒááºážááá±ážááœááºážáá±á«áºáá¬áááá·áºáááºá áá°ááá¯á·ááᯠáá±á¬ááºááŸááŒáá·áºáá¡á±á¬ááºá
áá®á¡áá±á¬á¡ááœááºážááŸá¬á query execution ááŸá¬ ááŒá áºááá¯ááºáá²á· errors ááœá±ááᯠá ááºážá á¬ážááŒáá·áºáá¡á±á¬ááºá
rpc_error#2144ca19 error_code:int error_message:string = RpcError;
á¡áá¯ážá áá
áºá
á¯á¶áá
áºáá±á¬ááºááẠá¡á±á¬áºááŒá±á¬áááá·áºáááºá á€áá±áá¬ááœáẠááá¯á áá°áá¬ážáá¯á¶á
á¶ááŒá
áºááẠ- ááá¯ááºážáá
áºáᯠááŸááá«áááºá ááŒá±ážááŒá±ážáá¯ááºáá«á áá®ááŸá¬ FLOOD_WAIT_3600
áá
áºáá¬áá®á
á±á¬áá·áºááááºáᯠááá¯ááá¯áááºá PHONE_MIGRATE_5
á€ááŸá±á·áááºáá«ááŸááá±á¬ áá¯ááºážáá¶áá«ááºááᯠ5th DC ááœáẠááŸááºáá¯á¶áááºááá·áºáááºá áá»áœááºá¯ááºááá¯á·ááœáẠá¡áá»áá¯ážá¡á
á¬ážáá¬áá¬á
áá¬ážáá
áºáá¯ááŸáááẠááá¯ááºáá¬ážá áá»áœááºá¯ááºááá¯á·ááẠá
á¬ááŒá±á¬ááºážá០á¡ááŒááºážá¡áá¯á¶áá
áºáᯠáááá¯á¡ááºáá«á áá¯á¶ááŸááºá¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááẠchoá
ááááºá áááºážááẠáááºáá±á¬ááºááŸá¯á
á¬ááá¯áá»á¬áž á
á¬áá»ááºááŸá¬ááœáẠááá¯ááºáá±á¬áºáááºážá á€ááá±á¬áá»ááºááœáẠáá¯á¶ážá
á¶á¡ááá¯ááºáž ááŒá
áºáá±ááŒá®ááŒá
áºáá±á¬ááŒá±á¬áá·áº á¡áá»ááºá¡áááºáá»á¬ážááᯠááœá±á·ááŸáááá¯ááºáááºá á¡ááŒá¬ážá
á¬ááœááºá
á¬áááºážá
á¬áá»ááºááŸá¬ááœááºá ááá¯á·ááá¯áẠáá¶ááááá¯ááŸáá¯ážááœ. ááááŠážá
áœá¬á á
á¬ááá¯ááºááŒááºáž/á¡ááœáŸá¬áá»á¬ážááᯠáá»áá¯ážáá±á¬ááºááŒááºáž- RpcError
ááœáẠáááºážááŸá®ážááŒá¯ááºááŸá¶ááá¯ááºáá«áááºá RpcResult
. áá¬ááá¯á· á¡ááŒááºáááœááºáá¬áá²á áá«ááá¯á· áá¬ááᯠááá·áºáááœááºáá¬ážáá¬áá²á RpcError
áááºážááŸá®ážááŒá¯ááºááŸá¶ááŒááºáž áááŒá¯ááá«á RpcResult
ááá¯á·áá±á¬áº ááá¯ááºááá¯áẠááá¯á·ááá¯áẠá¡ááŒá¬ážá¡áá»áá¯ážá¡á
á¬ážááœáẠá¡á
á¯á¡áá±ážááŒá
áºáá«ááá¬ážá áá»áá¯á·áá²á· req_msg_id
? ..
áá«áá±ááá·áº áááºáá±á¬ááºááŸá¯ áááºáá±á·áá»áºááœá±á¡ááŒá±á¬ááºáž áááºááŒáá·áºáá¡á±á¬ááºá áá±á¬ááºáááºááẠáá¬áá¬ááẠá¡áá»áááºá¡áá±á¬áºááŒá¬ á ááºážá á¬ážáá±áááºáᯠáá°áááá¯ááºááŒá®áž á¡á¶á·ááŒááœááºáá±á¬ááºážáá±á¬ áá±á¬ááºážááá¯ááŸá¯áá áºáá¯ááᯠááŒá¯áá¯ááºááá¯ááºáááº-
rpc_drop_answer#58e4a740 req_msg_id:long = RpcDropAnswer;
áááºážá¡ááœáẠááŒá áºááá¯ááºáá»á±ááŸááá±á¬ á¡ááŒá±áá¯á¶ážáá»áá¯ážááŸáááŒá®áž áááºážááá¯á·ááẠáááºááá¯á·ááŒá áºááá·áºáááºááᯠáá¬ážáááºáááºááŒáá¯ážá á¬ážááẠ(ááŸáá·áº áá±áá¯áá»á¡á¬ážááŒáá·áº á¡áááºááŒá¯áááºáááá¯á¡ááºáá±á¬ á¡áá»áá¯ážá¡á á¬ážáá»á¬ážá á¬áááºáž) ááᯠáá¬ážáááºááẠááŒáá¯ážá á¬ážáááºá á á¬áááºáá°á¡á¬áž á¡áááºá á¬á¡ááŒá Ạáá»ááºáá²á·ááẠ(ááŸááºáá»ááº- Telegram Desktop ááááºážáááºážááŒá áºáá»á¬ážááœáẠá¡áá»ááºá¡ááẠáááŒáá·áºá á¯á¶áá«á)
á
áœá²áááºážááŸá¯- áááºáá±á·áá»áº ááá¯á·á
áºá¡ááŒá±á¡áá±áá»á¬áž
áá±áá¯áá»á¡á¬ážááŒáá·áºá áá±áá¯áá»á¡á¬ážááŒáá·áº TLá MTProto ááŸáá·áº Telegram ááŸá áá±áá¬áá»á¬ážá
áœá¬ááœáẠáá±á«ááºážáá¬áá±á¬áá¶á
á¬ážáá»ááºááᯠáá»ááºáá¬ážáá±á¬áºáááºáž áááºáá»á±ážááŒááºážá á¡áááá¹áá¬ááŸáá·áº á¡ááŒá¬ážá¡áá¬áá»á¬ážááŒá±á¬áá·áº áá»á±á¬á·áá»á±á¬ááºážáá±á¬áá»áœááºážáá»ááºááŸá¯ áá»áœááºá¯ááºááá¯á·ááẠáááºážááŸáá·áºáááºáááºá áááºáá»á±ážá
áœá¬ ááŸá¯ááºááááºáá±áá²á·ááŒá®áž ááœá±ážááœá±ážááœá²áá»á¬ážááœáẠáá
áºáááºážááŸá¯áá»á¬ážááᯠáááºáá¬ááŒááºáá±á¬ááºáá²á·áááºá ááá¯á·áá±á¬áº á€áá±áá¬Ðpage á¡áá»á¬ážá
á¯ááŸá¬
á¡áááºááŒá¯áá»ááºáá»á¬ážááŸáá·áºá¡áá° á¡áá¹ááá¬ááºáááºážá áœá¬ á áááºáááºá áá±á¬ááºáá áºáá¯ááá±á¬á· áá»áœááºáá±á¬áºááá¯á·á¡ááŒá±á¬ááºáž ááŒá±á¬ááŒáááºá
bad_msg_notification#a7eff811 bad_msg_id:long bad_msg_seqno:int error_code:int = BadMsgNotification;
bad_server_salt#edab447b bad_msg_id:long bad_msg_seqno:int error_code:int new_server_salt:long = BadMsgNotification;
áá±á¬ááºážááŒá®á MTProto ááŸáá·áº á áááºá¡áá¯ááºáá¯ááºáá°ááá¯ááºážááẠ"ááŒááºáááºáá¬ážáá±á¬ - ááŒááºáááºá á¯á ááºážáá¬ážáá±á¬ - á áááºáááº" áá¶ááá¬ááœááºá áááºážááŒááºááŸá¯áá»á¬ážá¡ááœááºáž áá¯ááºááœá¬ážáá±á¬áá¬ážáá»á¬áž ááá¯á·ááá¯áẠáá¶áá«ááºá¡ááŸá¬ážáá»á¬ážáááŸáááŒááºážááẠáá¬áááºá¡áá¬ááŒá áºáááºá ááá¯á·áá±á¬áº á€áá±áá¬ááœáẠá¡áá»ááºááŸá áºáá»ááºááŸááááºá
- áá°áááºáž Message áá»á±á¬ááºáá¯á¶ážááœá¬ážááŒááºážááŸá¬ á¡á±á¬ááºáá«á¡ááá¯ááºážááŒá áºáááºá á¡áá»áá¯á·áá±á¬ áááºážá á®ááŒááºážááᯠááŒá¶á ááºážááá¯ážáááºááẠááá¯á¡ááºáááºá áá±á¬ááºá០á ááºážá á¬ážáá«áááºá
- á¡á²áá® áá°ážáááºážáá²á· á¡ááŸá¬ážáá¶áá«ááºááœá±á áá¬ááœá±áá²á ááá ááá ááá ááá ááá ááá ááá ááá áá á ááá áá⊠áá»ááºáá²á· ááááºážááœá±á áááºááŸá¬áá²á Tommy
á á¬áááºážááœááºáá±á¬áºááŒáá¬ážáááº-
áááºááœááºáá»ááºááŸá¬ error_code áááºááá¯ážáá»á¬ážááᯠá¡á¯ááºá á¯ááœá²á·ááŒááºážááŒá áºááẠ(error_code >> 4): á¥ááá¬á 0x40 - 0x4f áá¯ááºáá»á¬ážááẠááœááºááááºáá¬ááŒáá¯ááœá²ááŒááºážááŸá á¡ááŸá¬ážáá»á¬ážááŸáá·áº ááá¯ááºáá®áá«áááºá
ááá¯á·áá±á¬áº ááááŠážá áœá¬á á¡ááŒá¬ážáŠážáááºáá»ááºááá¯á· ááŒá±á¬ááºážááœá¬ážáᬠáá¯áááá¡áá»ááºááŸá¬ áá»ááºáá±á¬áá¯ááºáá»á¬ážááẠáááºááá·áºáá±áá¬ááœáẠááŸááááºááᯠá¡áá±ážáááŒá®ážáá«á á á¬áá±ážááá¬áá²á· áá±á«ááºážáá²ááŸá¬áá±á¬á·..áá«áá±áá²á· á¡á²áá«ááœá±á á¡áá±ážá¡ááœáŸá¬ážááœá±áá«á
á áœá²áááºážááŸá¯ááẠááá¯á·á áºá¡ááŒá±á¡áá± áááºáá±á·áá»áºáá»á¬ážááŸáá·áº ááá¯á·á áºáá±á¬áºáá®áá»á¬ážááœáẠá áááºáááº-
- Message Status á¡áá»ááºá¡áááºá¡ááœáẠáá±á¬ááºážááá¯ááŒááºážá
á¡áááºá áá«áá®áá áºáá¯á០áááºážá ááœááºáá¬ááá·áº áááºáá±á·áá»áºáá»á¬ážá á¡ááŒá±á¡áá±ááᯠá¡áá»áááºá¡áá±á¬áºááŒá¬ á¡áá»ááºá¡áááºáá»á¬áž ááááŸááá«áá áááºážááᯠá¡ááŒá¬ážáá«áá®áá¶á០ááŒááºáá¬ážá áœá¬ áá±á¬ááºážááá¯ááá¯ááºáááº-
msgs_state_req#da69fb52 msg_ids:Vector long = MsgsStateReq;
- áááºáá±á·áá»áºáá»á¬ážá á¡ááŒá±á¡áá±ááŸáá·áº áááºáááºáá±á¬ á¡áá»ááºá¡áááºááá¯ááºáᬠáááºáá±á·áá»áº
msgs_state_info#04deb57d req_msg_id:long info:string = MsgsStateInfo;
áá®ááŸá¬,info
á¡ááẠmsg_ids á á¬áááºážá០áááºáá±á·áá»áºáá áºáá¯á á®á¡ááœáẠáááºáá±á·ááºá»á¡ááŒá±á¡áá± áá áºááá¯ááºá¡ááá¡áá»áá«ááŸááá±á¬ á á¬ááŒá±á¬ááºážáá áºáá¯ááŒá áºáááº-- 1 = áááºáá±á·áá»áºá¡ááŒá±á¬ááºáž áá¬ááŸáááááá«áá°áž (msg_id á¡áááºážáááºážáá«áááºá áá áºáááºá áá±á·ááœá¬ážááá¯ááºáá«áááº)
- 2 = áááºáá±á·áá»áºááᯠáááºáá¶áááŸáááŒááºáž áááŸááá« (msg_id ááẠááááºážáááºážáá¬ážáá±á¬ ááœá²ááŒá¬ážáááºááŸááºááŸá¯á¡ááœá¬á¡áá±ážá¡ááœááºáž áá»áá±á¬ááºáá±áá±á¬áºáááºážá á¡ááŒá¬ážáá«áá®ááẠááá¯áá²á·ááá¯á·áá±á¬ áááºáá±á·áá»áºááᯠáá±áá»á¬áá±á«áẠáááºáá¶áááŸáááŒááºážáááŸááá±ážáá«)
- 3 = áááºáá±á·áá»áºááᯠááááŸááá²á·áá« (msg_id ááŒáá·áºáá¬ážááœááºážáá±á¬áºáááºážá á¡ááŒá¬ážáá«áá®á áááºážááᯠáá±áá»á¬áá±á«áẠááááŸááá±ážáá«)
- 4 = áááºáá±á·áá»áºáááºáá¶áááŸáááẠ(á€áá¯á¶á·ááŒááºááŸá¯ááẠá¡ááá¡ááŸááºááŒá¯áááºáá¶ááŸá¯áá áºáá¯áááºážááŒá áºáááºááᯠáááááŒá¯áá«)
- +8 = áááºáá±á·áá»áºááᯠá¡ááá¡ááŸááºááŒá¯ááŒá®ážáá¬áž
- +16 = á¡ááá¡ááŸááºááŒá¯ááŸá¯ áááá¯á¡ááºáá±á¬ áááºáá±á·áá»áº
- +32 = áááºáá±á·áá»áºááœááºáá«ááŸááá±á¬ RPC query ááᯠáá¯ááºáá±á¬ááºáá±ááẠááá¯á·ááá¯áẠáá¯ááºáá±á¬ááºáá±áááºááŸá¬ ááŒá®ážááœá¬ážáá«ááŒá®á
- +64 = áááºáá±á·áá»áºá¡ááœáẠá¡ááŒá±á¬ááºážá¡áá¬ááá¯ááºáᬠáá¯á¶á·ááŒááºááŸá¯ááᯠáá¯ááºáá±ážááŒá®ážááŒá áºáááºá
- +128 = áááºáá±á·áá»áºááᯠáááºáá¶áááŸáááŒá®ážááŒá
áºááŒá±á¬ááºáž á¡ááŒá¬ážáá«áá®á áááááºá
á€áá¯á¶á·ááŒááºááŸá¯ááẠá¡ááá¡ááŸááºááŒá¯ááẠáááá¯á¡ááºáá«á áááºážááẠáááºááá¯ááºáᬠmsgs_state_req á á¡ááá¡ááŸááºááŒá¯ááŸá¯áá áºáá¯ááŒá áºáááºá
á¡ááŒá¬ážáá°áᶠáá±ážááá¯á·áá¬ážáá¯á¶áááá·áº áááºáá±á·áá»áºáá áºáá¯á០áá¯ááºáááẠááœááºáá±á«áºáá¬áá«áá áááºáá±á·áá»áºááᯠááá¯ážááá¯ážááŒááºáááºáá±ážááá¯á·ááá¯ááºáááºááᯠáááááŒá¯áá«á á¡ááŒá¬ážáá«áá®á០áááºáá±á·áá»áº áááá¹áá°ááŸá áºá á±á¬ááºááᯠáá áºááŒáá¯ááºááẠáááºáá¶áááŸááááºááá¯áá«áá ááœá¬ážááŒááºážááᯠáá»á áºáá»á°ááŸá¯áá«áááºá (á¡áá»áááºáá»á¬ážááœááºááœá¬ážá áá°áááºáž msg_id ááẠááá¬ážáááºáá±á¬á·áááºááá¯ááºáá«á áááºáá±á·áá»áºááᯠmsg_copy ááŒáá·áºáá¯ááºááá¯ážáá¬ážááááº)á
- áááºáá±á·áá»áºáá»á¬ážá á¡ááŒá±á¡áá±ááᯠá
á±ááá¬á¡áá»á±á¬áẠáááºááœááºáá±áž
á¡ááŒá¬ážáá«áá®á០áá±ážááá¯á·áá±á¬ áááºáá±á·áá»áºáá»á¬ážá á¡ááŒá±á¡áá±ááᯠá¡ááŒá¬ážáá°á¡á¬áž ááá¹áá¡áá»á±á¬áẠá¡ááŒá±á¬ááºážááŒá¬ážááá¯ááºáááºá
msgs_all_info#8cc0d131 msg_ids:Vector long info:string = MsgsAllInfo
- áááºáá±á·áá»áºáá
áºáá¯á á¡ááŒá±á¡áá±ááᯠá
á±ááá¬á¡áá»á±á¬áẠááá¯ážáá»á²á·áááºááœááºááŸá¯
...
msg_detailed_info#276d3ec6 msg_id:long answer_msg_id:long bytes:int status:int = MsgDetailedInfo;
msg_new_detailed_info#809db6df answer_msg_id:long bytes:int status:int = MsgDetailedInfo;
- áááºáá±á·áá»áºáá»á¬áž ááŒááºáááºáá±ážááá¯á·ááẠááŒááºáá¬ážá
áœá¬ áá±á¬ááºážááá¯ááŒááºážá
msg_resend_req#7d861a08 msg_ids:Vector long = MsgResendReq;
á¡áá±ážá០áá«áá®ááẠáá±á¬ááºážááá¯áá¬ážáá±á¬ áááºáá±á·áá»áºáá»á¬ážááᯠááŒááºáááºáá±ážááá¯á·ááŒááºážááŒáá·áº áá»ááºáá»ááºážáá¯á¶á·ááŒááºáááºá [âŠ] - á¡ááŒá±áá»á¬áž ááŒááºáááºáá±ážááá¯á·ááẠááŒááºáá¬ážá
áœá¬ áá±á¬ááºážááá¯ááŒááºážá
msg_resend_ans_req#8610baeb msg_ids:Vector long = MsgResendReq;
á¡áá±ážá០áá«áá®ááẠááŒááºáááºáá±ážááá¯á·ááŒááºážááŒáá·áº áá»ááºáá»ááºážáá¯á¶á·ááŒááºáááºá á¡ááŒá±ááᯠáá±á¬ááºážááá¯áá¬ážáá²á·á á¬ááœá±ááᯠ[âŠ] - Message áá±á¬áºáá®áá»á¬áž
á¡áá»áá¯á·áá±á¬á¡ááŒá±á¡áá±áá»á¬ážááœááºá ááá¬ážáááºááá¯ááºáá±á¬á·áá±á¬ msg_id áá«áá±á¬ áááºáá±á·áá»áºá¡áá±á¬ááºážááᯠááŒááºáááºáá±ážááá¯á·ááẠááá¯á¡ááºáááºá ááá¯á·áá±á¬áẠáááºážááᯠáááá¹áá°áá¯á¶ážáá²ááœáẠáá¯ááºááá¯ážáá¬ážáááºá
msg_copy#e06046b2 orig_message:Message = MessageCopy;
áááºáá¶áááŸááááºááŸáá·áº áááŒáá¯ááºááẠáá¯ááºááá¯ážááŒááºáž áááŸáááá²á·ááá¯á· áááºáá±á·áá»áºááᯠá á®áá¶áá±á¬ááºááœááºáá«áááºá ááá¯á·áá¬ááœááºá áááºáá±á·áá»áº orig_message.msg_id ááᯠáááºáá¶áááŸáááŒá±á¬ááºáž áá±áá»á¬ááááŸááá«áá áááºáá±á·áá»áºá¡áá áºááᯠáá¯ááºáá±á¬ááºáááºááá¯ááºáá« (áá áºáá»áááºáááºážááœáẠáááºážááŸáá·áº orig_message.msg_id ááá¯á·ááᯠá¡ááá¡ááŸááºááŒá¯áá«áááº)á orig_message.msg_id ááááºááá¯ážááẠááœááºááááºáá¬á msg_id ááẠáááá·áºáá±ááá«áááºá
ááá¯á¡áá»ááºááá¯ááẠááŸá¯ááºááááºáá±ááŒáá«á
áá¯á· msgs_state_info
áá
áºáááºá áááŒá®ážáá¯á¶ážáá±ážáá±á¬ TL ááá¬ážááœááºáá»á¬áž ááœááºáá¬ááẠ(áá»áœááºá¯ááºááá¯á·ááẠbytes á vector áá
áºáá¯á ááŸáá·áº enum áá¡á±á¬ááºááŸá
áºáá
áºááœááºá ááŸáá·áº á¡áá±á¬ááºáž bits á¡áá¶áá»á¬ážááœáẠááá¯á¡ááºáááº)á á¡áá»ááºá áááŒá¬ážá¡áá¬áá
áºáá¯áá«á áá«ááœá±á¡á¬ážáá¯á¶ážá áá¬ááŒá±á¬áá·áº áááºááœá±á·ááŒá
áºáááºááá¯áᬠáááºáá°á áá¬ážáááºáá²á áááá·áº client ááŸá¬ ááá¯á¡ááºáááº?.. á¡áááºá¡áá²ááŸááá±á¬áºáááºáž áá°áá
áºáŠážááẠá¡ááŸá¬ážááŸá¬ááŒááºááŒááºážááœáẠáá«áááºáá±ááŒá®áž á¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºááŸá¯áá¯ááºááœáẠ- áá¬áá¬á¡á¬áž á¡áááºá¡áá¬ááŸáá·áº áááºááá¯á·áá¯ááºáá±á¬ááºáááºááá¯áá«á á¡áá»áá¯ážáá»á±ážáá°ážá¡áá»áá¯á·ááᯠáááºá
áááºáá°ážááŒáá·áºááá¯ááºáá«áááºá ááá¯á·áá±á¬áº áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠá€áá±áá¬ááœáẠáá±á¬áºááŒáá¬ážáá«áááºá á¡ááœá¬ážá¡ááŒááºááá®áž.
áá áºáááºáá²á·áá áºááẠáá¯ááºááŸááºááŒá®áž áááºáá±á·áá»áºááá¯á·áá¯á¶áááºáááá² áá°ááá¯á·á¡ááŒá±á¬ááºáž áá±áá¬ááœá±á áá°ááá¯á·á¡ááœáẠá¡ááŒá±ááœá±á¡ááŒá±á¬ááºážáá²á· á¡áá»áááºááááá²á· á¡áá»áááºá¡ááá¯ááºážá¡áá¬áá áºáá¯á¡áá ááááºážáááºážáá¬ážááááºááá¯áá²á·á¡áá»ááºááá± ááŒá áºáá±á«áºáá¬áá¬áá«á á á¬ááœááºá á¬áááºážááœáẠá€á¡ááºá¹áá«áááºáá»á¬ážá á¡áá»ááẠááá¯á·ááá¯áẠáááºááœá±á·á¡áá¯á¶ážáá»ááá¯ááºááŸá¯ááᯠáá±á¬áºááŒááá¬ážáá±á á¡áááºáá°áá»áŸááááºážá¡ááœááº. á¡á¶á·ááŒá áá¬á¡áá±á¬ááºážáá¯á¶ážááŸá¬ áááºážááá¯á·ááẠááá¬ážáááºáá±á¬ááºáááºáá»á¬ážá áá¯ááºááœáẠá¡ááŸááºááááºá¡áá¯á¶ážááŒá¯áá±ááŒááŒááºážááŒá áºáááºá ááœáá·áºáááºážáá±á¬ á á¬ááœááºá á¬áááºážáá»á¬ážááœáẠááá«áááºááá·áºá¡áá¬áá»á¬ážááᯠáááºážááá¯á·á¡á¬áž ááŒá±á¬ááŒáá²á·ááŒá±á¬ááºáž áááºááŸá¬ážáá«áááºá áá¯ááºááá± áá¬ážáááºáááºá áá¬ááœá±á¬áá»á·, TL ááá á¹á áá²á·ááá¯á· áááá¯ážááŸááºážáá±á¬á·áá« - áááºážááẠ(ááŸáá¯ááºážááŸááºáá»áŸááº) áá¯áá¹áááááºážáá» áá®ážááŒá¬ážááœá²áá¯ááºáá¬ážáá±á¬ á¡ááá¯ááºážááá¯ááºáá±á¬áºáááºáž á¡ááá®áá±ážááŸááºážáááá¯áá¬ááŸáá·áº áááºá ááºáá±ááá·áºá¡ááá¯ááºážáá áºáá¯á ááá¯ááá¯áááºááŸá¬á á¡ááá®áá±ážááŸááºážáá¯ááºááᯠáá¬ážáááºááẠá¡áá»áááºáá»á¬ážá áœá¬ ááá¯á¡ááºáááºááŒá áºáááºá
Ping ááŸáá·áºá¡áá»áááºá áááºážá
á®áááºá
á¡áá¬á¡á¬ážáá¯á¶ážááŸá áá¬áá¬áááá¯áᬠ(áá±á¬ááºááœááºááŸáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááá¯ááŒáá·áºáá±ááŒááºáž) ááŸáá·áºáááºáááºáá±á¬ááá·áºááŸááºážáá»ááºáá»á¬ážááá¯ááŒááºá¡ááŸááºááá«á TCP ááœááºáá±ážááá¯á·ááŒááºážáá¡á¬ááá¶áá»ááºá¡á¬ážáá¯á¶ážááŸááá±á¬áºáááºáž (áá±áá¬áá±ážááá¯á·ááŒá®ážáááºááŒá áºá á±á ááá¯á·ááá¯ááºáá«áááá·áºá¡á¬ážá¡ááŒá±á¬ááºážááŒá¬ážáááá·áºáááºá áá»ááºááœá¬ážáá±á¬áºáááºáž ááŒá¿áá¬áá¡ááá¯ááºá¡ááá·áºá¡áá áá±áá¬ááᯠMTProto ááá¯ááºááá¯ááºá á¡áááºááŒá¯áá±ážáááº- á¡á¬ááá¶áá»ááºáááŸááá«á. áá¬áá¬ááẠááá·áºáááºáá±á·áá»áºááᯠá¡ááœááºááá° áá¯á¶ážááŸá¯á¶ážááá¯ááºááẠááá¯á·ááá¯áẠááœáŸáá·áºáá áºááá¯ááºááŒá®áž á¡áá»áá¯ážá¡á á¬ážá¡áá»áá¯ážáá»áá¯ážááŸááá±á¬ áá»áá¯ááºážáá±á¬ááºáá»á¬ážááᯠááŒá¶á ááºážááá¯ážáááºáááºáᬠáá¯ááºáá±á¬ááºááá¯ááºááẠá
ááááŠážá áœá¬ - áááºáá±á·ááºá»áááºážá á®áá»á¬ážá áá±á¬ááºážááŒá®á áá áºáá»ááºá¡áá±ááŸáá·áºá á¡áá¬á¡á¬ážáá¯á¶ážááẠá¡á ááááºážá áááá¬áááºááŸá¬ážáá²á·ááẠ- á¡áááºáááŒá¯ááá¯ááºáá±á¬ áááºáá±á·áá»áºááᯠááááºážáááºážáá¬ážááŒá®áž áá¬ááŒááºážáá±ááá«áááºá ááŒá®ážáá±á¬á· áááºá¡áá»áááºááŒá®ážáá²á ááŒá®ážáá±á¬á· áá»á±á¬áºáá±á¬áºáááºá áá°á·ááᯠáááááºá ááá¯á áœá²áááºážáá±á¬áááºáá±á¬ááºááŸá¯áááºáá±á·áá»áºáá»á¬ážááẠá€ááŒá¿áá¬ááᯠáá»áá¯ááºážáá±á¬ááºáá»á¬ážááŒáá·áº áá áºáááºážáááºážááŒáá·áº ááŒá±ááŸááºážááá¯ááºáááºááá¯áá«á áá¯á· Telegram Desktop ááœáẠáááºážááá¯á·ááŸáá·áºáááºááá¯ááºááá·áº áááºážá á®ááŒááºáž 4 áá¯ááá·áºááŸáááẠ(ááá¯á·áááºááá áá±á¬áºááŒáá¬ážááŒá®ážááŒá áºááá·áºá¡ááá¯ááºážá áááºážá¡ááœáẠáááºáááºážááá¯ááºááŸáá·áº áááºáá±á¬ááºáá¯á¶ááᯠááá¯ááá¯á¡áá±ážá¡áááºáá¬ážááẠááá¯á¡ááºáááºá áá áºáá»áááºáááºážááŸá¬áááºá á¡áá»áááºá¡áá«á¡áá áááºážááá¯ááá°áá¬á¡ááŒá áºáá°áááááá¯ááºááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·áááááŒá®áž MTProto á¡á á®á¡á ááºá០á¡áá»áá¯ážá¡á á¬ážá¡áá»áá¯á·ááᯠáááºážááœááºá¡áá¯á¶ážáááŒá¯áá«)á
áá¬ááŒá±á¬áá·áº áá®ááá¯ááŒá áºáá±áá¬áá²á ááŒá áºááá¯ááºáááºááŸá¬á áá¬áá¬áááá¯ááááºáá¬áá»á¬ážááẠá¡á á¯á¡áá±ážá¡ááœááºáž áá¯á¶ááŒááºá áááºáá»áááŸá¯ááᯠááá±áá»á¬ááá¯ááºáá« ááá¯á·ááá¯áẠá¡áááºážáá¯á¶áž ááŸá±á·áá»áááºááœááºáá»áŸá¬ááœáẠbuffering áá¯ááºááŒá®áž á€ááŒá¿áá¬ááᯠáááá¯ááºážááá·áºáᶠááŒá±á¬ááºážáá±ážááá¯ááºáááºá á áááºáá»ááºá¡á¬ážáááºá áœá¬ááŒáá·áº Vasily ááẠTCP á០algorithms á០algorithms ááá¯á¡áá¯á¶ážááŒá¯áᬠáááºážá á®ááŸá áºáá¯áá¬ááŸááá±á¬ á¡ááŒá¬ážááœá±ážáá»ááºááœáá·áºáá áºáá¯ááᯠRTT áá¬áá¬ááá¯á·ááá¯ááºážáá¬áᬠá¡ááá¡ááŸááºááŒá¯ááá¶ááá±á¬áá±á¬ááºážááá¯ááŸá¯áá»á¬ážá¡áá±á¡ááœááºáá±á«áºáá°áááºá "window" á¡ááœááºá¡á á¬áž (áááºáá±á·áá»áºáá»á¬ážááœááº) ááᯠáá»áááºááŸáááẠááŒáá¯ážá á¬ážáá²á·áááºá ááá¯ááá¯áááºááŸá¬á áá¬áá¬áááºá¡á¬áž ááá·áºááŸááºážááŒááºážá¡ááœáẠááŒááºážáááºážáá±á¬ ááœá±ážáá±á«áºááŸá¯áá áºáá¯ááŒá áºááẠ- áá»áœááºá¯ááºááá¯á·á áá±á¬ááºážááá¯áá»áẠáááºáá»áŸááᯠááá»áááºáááºáž áá«ážááá¯ááºááŒá®áž ááá¯á¶ážááŸá¯á¶ážááá¯ááºáá«á
áá¯ááºáááºá á¡á²áá« áááºážáá¬ážáááºááẠáá¯ááºáá¬ážá TCP ááŸáá·áºá¡áááºá¡áá¯ááºáá¯ááºáá±á¬ áááá¯ááá¯áá±á¬áá áºáá¯áááááºááœáẠTCP ááᯠââáááºáá¶á¡áá±á¬ááºá¡áááºáá±á¬áºááá«áá áááºážááẠá¡ááœááºáá¶á·áá»ááºážáá±á¬ áá®ááá¯ááºážáá±ážááœá²áá¬ážáá±á¬ áááá¯ááá¯áá±á¬ááᯠááœáŸááºááŒáááºá
áá¯ááºáá²á·á áááºážá
á®áá
áºáá¯áááºááá¯ááŒá®áž áá¬ááŒá±á¬áá·áºááá¯á¡ááºááá²á áá±áá°áá»á¡á¬ážááŒáá·áºá á¡ááá·áºááŒáá·áº API áá²á· á¡áá¯ááºáá¯ááºáá±áá°á¡ááœáẠáá«á áá¬ááá¯ááá¯ááá¯áá¬áá²á ááŒáá·áºáá«á áááºáá±á¬ááºážááá¯ááŸá¯áá
áºáá¯ááŒá¯áá¯ááºáááºá áááºážááá¯áááºá¡ááŸááºá
ááºááŒá¯áá¯ááºáááºá ááá¯á·áá±á¬áºáááºážááá¯áá»ááºáá»ááºážáá±ážááá¯á·áááºáááŒá¬áááááŒá
áºááá¯ááºáá«á á¡áááºááŒá±á¬ááºá·? á¡ááŒá±ááŸáááŸá¬ááá¯á·ááá¯á·áá«á msg_id
áá¬áá®ááŒá
áºáááºáаáá«á á¡ááœáŸááºážáá
áºáá¯áá«á áá»áááºážáá¬ážáá¬ááᯠáááºááá¯ááºááá»áŸ áá±á¬ááºáá»á០ááœáŸá±á·áᬠááá¯áá±á¬ááºážáá«ááẠ- áá«ááá¯á·áá²á· áá°ááŒá¬áž á¡áá»áááºááá®áá¬ááŒá±á¬áá·áº áá¬áá¬á áá¯ááºáááẠááŒááºážáááºááá¯ááºááẠ(áá¯ááºáá«áááºá áá«ááá¯á·á áááºááŸáá¡áá»áááºááᯠááŒá±á¬ááºážáá²á· áá
áºááá¯ááºáá
áºáá»á±á¬ááºážááᯠáááºáá®ážááá¯ááºáááºá áá¬áá¬áá¯á¶á·ááŒááºááŸá¯áá»á¬ážá០ááœááºáá»ááºáá¬ážáá±á¬ ááŒá
áºááá»áœááºážáá±á«áºáá±áááᯠááá·áºááŒááºážááŒáá·áº áá¬áá¬á¡áá»áááºááá¯á· - ááá¬ážáááºáá±á¬ááºáááºáá»á¬ážá áááºážááᯠáá¯ááºáá±á¬ááºáá±á¬áºáááºáž á€áááºážáááºážááẠbuffering ááŒá±á¬áá·áº ááá¯ááºážá
áá¯ááºážááŒá®áž áááŸááºáááºáá«)á ááá¯á·ááŒá±á¬áá·áº áááºááẠá
á¬ááŒáá·áºááá¯ááºá០áá±áááá¯ááºáá¬áá¯ááºáá±á¬ááºáá»ááºáá±á«áºááá¯ááŸá¯áá
áºáá¯ááŒáá·áº áá±á¬ááºážááá¯áá±á¬á¡áá«á áááºáá±á·áá»áºááẠá¡á±á¬ááºáá«á¡ááá·áºáá»á¬ážá¡ááá¯ááºážááœá¬ážáááº-
- áá°áá®áá±á¬áááºážá á®ááœáẠááŸááá±ááŒá®áž áá¯ááºááŸááºááŒááºážááᯠá á±á¬áá·áºáá±áááºá
- ááá·áºá¡ááºáá¬ážáááºá
msg_id
áááºáá±á·áá»áºááẠá¡ááŒá¬ážáááºážá á®ááá¯á·ááœá¬ážááẠ- ááŒá áºááá¯ááºáá±á¬ áááºááá·áºááá¯á·ááŒááºážá socket ááá¯á·ááá¯á·áá«á - á) áá¬áá¬á០MsgsAck ááᯠááŒááºááŒá¬ážáá²á·ááẠ- áááºáá±á·áá»áºááá¯á·ááŒá®ážáá«ááŒá®á áááºážááᯠ"á¡ááŒá¬ážáááºážá
á®" á០áá»ááºáá
áºááá¯ááºáá«áááºá
b) ááá¯á·ááá¯áẠá¡ááŒááºá¡ááŸááºá¡á¬ážááŒáá·áºá áá°ááẠáá áºáá¯áá¯ááᯠáááŒáá¯ááºá áá°ááẠbadmsg áᯠááŒá±áá²á·ááẠ- áá»áœááºá¯ááºááá¯á·ááẠ"á¡ááŒá¬ážáááºážá á®ááŒááºáž" á០ááŒááºáááºáá±ážááá¯á·áááº
á) áá¬áá»áŸááááá á¡ááŒá¬ážáááºážá á®á០áááºáá±á·áá»áºááᯠááŒááºáááºáá±ážááá¯á·ááẠááá¯á¡ááºáá±á¬áºáááºáž áááºááá·áºá¡áá»áááºááœáẠá¡ááá¡áá»áááááá«á - áá±á¬ááºáá¯á¶ážáá±á¬á· Server áááŒá±áááºá
RpcResult
- á¡ááŸááºáááẠáá¯á¶á·ááŒááºááŸá¯ (ááá¯á·ááá¯áẠá¡ááŸá¬ážá¡ááœááºáž) - áá±ážááá¯á·áá¯á¶áá¬áááá² á á®áá¶áá±á¬ááºááœááºáá±ážáá«áááºá
áá®áá
áºáá«áááºážááœááºááááºáá¬á¡áá¯á¶ážááŒá¯ááŒááºážááẠááŒá¿áá¬ááᯠáá
áºá
áááºáá
áºááá¯ááºážááŒá±ááŸááºážááá¯ááºáááºá á€áááºááŸá¬ áááºáá±á·áá»áºáá»á¬ážá
áœá¬ááᯠáá
áºáá¯áá²ááá¯á· áá¯ááºááá¯ážááá¯ááºáá±á¬á¡áá«á áá¬áá¬ááẠá¡á¬ážáá¯á¶ážááᯠáá
áºááŒáá¯ááºááẠá¡ááá¡ááŸááºááŒá¯ááŸá¯ááŒáá·áº áá¯á¶á·ááŒááºáá²á·áááºá msg_id
. ááá¯á·áá±á¬áº áá
áºá
á¯á¶áá
áºáᯠááŸá¬ážááœááºážááœá¬ážáá«á á€á¡áá¯ááºááá¯áááºáž ááŒááºážáááºáá«áááºá
á€á¡áá»áááºááœááºá áááºážááá¬ááá¯ááºáá±á¬ ááá·áºááœááºážá ááºážá á¬ážááŸá¯áá»á¬ážááẠá¡áááºáááºáá¬áá«áááºá á¡ááœá±á·á¡ááŒá¯á¶á¡áá áá»áá¯ááºážáá±á¬ááºá¡ááŒá±á¬ááºá¡ááŒá¬ážááᯠáá»áœááºá¯ááºááá¯á·ááœá±á·ááŒááºáááŒá®ážá ááá¯á·á¡ááŒáẠááá¯á¡áá«ááœáẠááá¯ážááœá¬ážáá±á¬á¡ááŒá¶áá¬ááºááŸáá·áº áááá¯áá¬ááá¬ááá¯ááºáᬠá¥ááá¬áá»á¬ážááᯠáááºáá¶ááœá±á·ááŒááºááááá·áºááẠ- ááá¯ááá¯á·áá±á¬á¡ááŒá±á¡áá±áá»á¬ážááœáẠáá¯á¶ááŒááºá áááºáá»ááŒá®áž ááá¯ááá¯á·áá±á¬áá¯á¶ážááŒááºáá»ááºáá»á¬ážáá»ááŒááºážááẠááá¯ááºáááºáá«ááá¬ážá áá±ážááœááºážá á áá¬ážá¡áá¯á¶ážá¡ááŸá¯ááºáž (áá¯ááºáá«ááẠááá¯ááºáá«)á
áá«ááá¯á·áá¬ááœá±ááŒá±á¬áá±áá¬áá²á á¡áááºá "á á¬áá»á¬ážá¡ááŒá±á¬ááºáž á áœá²áááºážáá±á¬ áááºáá±á·áá»áºáá»á¬áž" áá°áá±á¬ áá±á«ááºážá ááºááŒáá·áº "áááºážáá°ááá¯ááºá áá«ááá¯á·áá²á· ááŒá±á¬ááºááŒá±á¬ááºáá²á· á¡ááŒá¶á¥á¬ááºááᯠáááºáž áá¬ážááááºáá²á·áá°áž!" áá²á·ááá¯á·áá±á¬ ááá·áºááœááºááŸá¯áá»á¬ážááŒáá·áº ááŸááºážáááá¯ááºáá±ážáááºá (áá«ááŒá±á¬áá·áº áá¬áá¬ááºáá°ááœá±á¡áá±áá²á· áá»áá¯ážááŒá±á¬ááºážáá®áá»á±á¬áºááŸá¯ áá²á· áááºáááºáááŸááºááŸá¯ á¥ááá¬ááœá±áá²á· á á¬áááºážááᯠá¡áááºáá±ážáá«á ááŒá®ážááẠáá»áœááºáá±á¬áºááá¯á· ááœá±ážááœá±ážáááº)á ááá¯á·áá±á¬áẠá¡áá»áááº/á¡áá»áááºáá¯ááºáá¯á¶ážááŒááºážááœá±áᬠáááºááœá±á·áá»ááŒá®áž áááá»áá²á· ááá á¹á áááºáááºáá«á á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá®ááŸá¬ áááá±áᬠááŒá¬áá«ááŒá®á ááá¯á·áá±á¬áº á¡áá»áááºáá¯ááºááŒááºážá¡ááŒá±á¬ááºáž á á¬ááœááºá á¬áááºážá áá»áœááºá¯ááºááá¯á·ááᯠá¡áááºá¡áá¬ááŒá±á¬ááŒááááºážá
áá¬áá¬ááẠáá¯á¶ááŸááºá¡á¬ážááŒáá·áº RPC áá¯á¶á·ááŒááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯á áá¯á¶ážá áœá²áá°áá áºáŠážáá¶á០áááºáá±á·áá»áºáááºáá¶áááŸáááŸá¯ááᯠá¡ááá¡ááŸááºááŒá¯ááẠ(áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá RPC áá±ážááœááºážáá áºáá¯)á áá¯á¶á·ááŒááºááŸá¯ááẠá¡áá»áááºá¡áá±á¬áºááŒá¬áá¬áá«áá áá¬áá¬ááẠááŒá±á á¬á¡ááá¡ááŸááºááŒá¯á á¬ááᯠáŠážá áœá¬áá±ážááá¯á·ááá¯ááºááŒá®áž áá±á¬ááºááá¯ááºážááœáẠRPC á០áá¯á¶á·ááŒááºááŸá¯ááá¯ááºááá¯áẠááŒá¯áá¯ááºááá¯ááºáááºá
áá±á¬ááºáááºááẠáá¯á¶ááŸááºá¡á¬ážááŒáá·áº áá¬áá¬áá áºáá¯á០áááºáá±á·áá»áºáá áºá á±á¬áẠáááºáá¶áááŸáááŸá¯ááᯠá¡ááá¡ááŸááºááŒá¯ááẠ(áá¯á¶ááŸááºá¡á¬ážááŒáá·áº RPC áá¯á¶á·ááŒááºááŸá¯) ááᯠáá±á¬áẠRPC áá±ážááŒááºážááŸá¯ááœáẠá¡ááá¡ááŸááºááŒá¯ááŸá¯áá áºáá¯ááᯠáá±á«ááºážááá·áºááŒááºážááŒáá·áº áááºážááẠá¡áá»áááºááŸá±á¬ááºážááœá¬ážááẠ(áááºážááá¯áá¯ááºáá¯ááºááŒá®ážáá«á ááŒá±á á¬á¡ááŒá®áž á áá¹ááá·áº 60-120 ááŒá¬áááºáá¯ááŒá±á¬áá«á áá¬áá¬á០áááºáá±á·ááºá»áá áºáá¯)á ááá¯á·áá±á¬áº á¡áá»áááºááŒá¬ááŒáá·áºá áœá¬ áá¬áá¬ááá¯á· áááºáá±á·áá»áºáá»á¬áž áá±ážááá¯á·ááẠá¡ááŒá±á¬ááºážááŒáá»ááºáááŸááá»áŸáẠááá¯á·ááá¯áẠáá¬áá¬á០á¡ááá¡ááŸááºáááŒá¯áá±á¬ á á¬ááá¯áá»á¬áž á¡áá»á¬ážá¡ááŒá¬ážááŸááá±áá«á (16 ááŸá áºááŸáá·áºá¡áááº)á client ááẠstand-alone á¡ááá¡ááŸááºááŒá¯áá»ááºááᯠáá±ážááá¯á·áá«áááºá
áá«áá¬áá¬ááŒááºáááº- áá»áœááºá¯ááºááá¯á·ááá¯ááºááá¯ááºá áááºáá»áŸááá¯á¡ááºáááºááᯠááááá«á áá±á¬ááºážááŒá®á á€áá²á·ááá¯á·ááŒá áºáá«á á±áᯠááá·áºááŸááºážááŒáá·áºááŒáá«á áá¯á·á
pings á¡ááŒá±á¬ááºážá
áááºážá á¬áá»á¬áž (PING/PONG)
ping#7abe77ec ping_id:long = Pong;
áá¯á¶á·ááŒááºááŸá¯ááẠá¡áá»á¬ážá¡á¬ážááŒáá·áº áá°áá®áá±á¬áá»áááºáááºááŸá¯ááá¯á· ááŒááºááœá¬ážáááº-
pong#347773c5 msg_id:long ping_id:long = Pong;
á€áááºáá±á·áá»áºáá»á¬ážááẠá¡ááá¡ááŸááºááŒá¯ááẠáááá¯á¡ááºáá«á ping ááᯠáá áºáááºáá áºáá»ááºá០á¡á ááŒá¯ááá¯ááºáá±á¬áºáááºáž ping áá áºáá¯á¡á¬áž áá¯á¶á·ááŒááºáááºá¡ááœááºáᬠpong áá áºáá¯á¡á¬áž áá±ážááá¯á·áá«áááºá
ááœáŸá±á·ááá¯ááºážáá¬ážáá±á¬ áá»áááºáááºááŸá¯ ááááºááŒááºáž + PING
ping_delay_disconnect#f3427b8c ping_id:long disconnect_delay:int = Pong;
ping áá²á·ááá¯á·á¡áá¯ááºáá¯ááºáááºá ááá¯á·á¡ááŒááºá áááºážááá¯áááºáá¶áááŸáááŒá®ážáá±á¬ááºá áá¬áá¬ááẠááááºá¡áá»áááºááá¯ááºážáá¬á¡á¬ážáá¯á¶ážááᯠá¡ááá¯á¡áá»á±á¬ááºááŒááºáááºáááºááŸááºáá±ážááá·áº á¡áá»áá¯ážá¡á á¬ážáá°áááºáá±á·áá»áºá¡áá áºááᯠááááŸááá«á áááºááŸááá»áááºáááºááŸá¯ disconnect_delay á áá¹ááá·áºááá¯ááºážá¡ááŒá¬ááœáẠááááºááá·áº á¡áá»áááºááá¯ááºážáááááá¬ááᯠá áááºáááºááŒá áºáááºá á¡áááºá client ááẠဠpings áá»á¬ážááᯠá áá¹ááá·áº 60 ááá¯ááºáž áá áºááŒááẠáá±ážááá¯á·áá«áá á¥ááá¬á áááºážááẠdisconnect_delay ááᯠ75 á áá¹ááá·áºááŸáá·áº áá®áá»áŸá¡á±á¬áẠáááºááŸááºááá¯ááºáááºá
áááºážá áááºâáá»ááºâááœá¬ážááŒá®áá¬áž?! á áá¹ááá·áº 60 ááœáẠááá¬ážááẠáá°áá¬áá¯á¶áá²ááá¯á· áááºáᬠáááºážáᬠááá®ážáááºáá»á¬ážááᯠáá±á«áºáá±á¬ááºáᬠá¥áááºááá¯ááºáá±á«ááºážá¡ááœááºáž áááºááœááºáá±áž ááŒááºáá±á¬ááºááœá¬ážááŒááºáááºá áááºááœááºááœá¬ážá áẠá áá¹ááá·áº 120 ááœááºá áá°ááẠá¡ááŒá¬ážáá áºáá±á¬ááºáá¶ááá¯á· áá±á¬ááºááŸááá¬áááºááŒá áºááŒá®áž áá»áááºáááºááŸá¯ ááŒááºáá±á¬ááºááœá¬ážááá¯ááºáááºá áá±á¬ááºážááŒá®á ááŒá±áá±á¬ááºááœá± áááºááá±áá±á«ááºáá¬áááºááá¯áᬠááŸááºážáá«ááẠ- "á¡á±á¬áºáá¶ááŒá¬ážáááºá áá«áá±ááá·áº áááºááŸá¬áá²ááá¯áᬠáá«ááááá°áž"á á¡ááŒááºá¡ááŸááºá¡áá»áá¯ážááŒá¯áá²á·á¡áá¯ááºá¡ááœáẠáááºááœááºáá¬ážáá²á· Nagle's algorithm áá²á· TCP_NODELAY ááœá±ážá áá¬ááœá±ááŸááááºá ááá¯á·áá±á¬áºá áááºážáááºážáá«áááºá áááºážááá°ááááºááá¯áž - 200 ááŸá±á¬áá·áºááŸá±ážáá«áááºá áá®áá®á áá¹ááá·áºá áááºá¡ááŸááºáááẠáááºáá°áá±á¬á¡áá¬ááᯠáá¯á¶áá±á¬áºááŒá®áž ááŒá áºááá¯ááºááá·áº á¡á á¯á¶ááá¯ááºáá áºá á¯á¶ááᯠááááºážáááºážááá¯áá«áá áááºážááᯠá¡áááºážáá¯á¶áž 5 á áá¹ááá·áºááŒá¬ áá¬ážááá¯ááºáá« ááá¯á·ááá¯áẠ"User is typing..." áá°áá±á¬ áááºáá±á·áá»áºá á¡áá»áááºáá¯ááºáá¯á¶ážáá»áááºááẠááá¯ááŸáá·áº áá®áá»áŸáá«áááºá áá«áá±ááá·áº áááŸááá±á¬á·áá°ážá
áá±á¬ááºáá¯á¶ážáá±á¬á· pingsá ááá¯ááá¯áááºááŸá¬ TCP áá»áááºáááºááŸá¯á á¡áááºáááºááŸá¯ááᯠá á áºáá±ážááŒááºážááŒá áºáááºá áááºá áá¬áá±á¬ááºážáá«áááºá áá«áá±ááá·áº ááœááºáá²á·áá²á· 10 ááŸá áºáá±á¬ááºá áá»áœááºáá±á¬áº ááá¯á·áá²á· áá¬áááá¯ááºáᬠhostel áá²á· messenger á¡ááŒá±á¬ááºáž á¡áá±ážáá«áá²á· á á¬áá áºá á±á¬áẠáá±ážáá²á·áá«ááẠ- á¡á²áá®á·ááŸá¬ á á¬áá±ážáá°á server ááᯠclient á០ping áá¯ááºááŒá®áž á¡ááŒááºá¡ááŸáẠááá±ážáá«áá°ážá áá«áá±ááá·áº ááááááŸá Ạáá»á±á¬ááºážáá¬ážááœá± á áá áºáᯠáá«áá²á ááá¯ááºáá¶ááᬠáá¯á¶áž á áá±á¬ááºáá áºáᯠáá² ááá¯ááºáá¬ážá á
ááááŠážá áœá¬ ááá¬áá±ážá¡á á®á¡á ááºáá±ážáá áºáá¯á TCP áá»áááºáááºááŸá¯áá áºáá¯ááẠpacket áá²ááŸááºááŒááºážáááŸááá«á áááºááá¹ááááºáá»á¬ážá áœá¬ á¡áááºááŸááºááá¯ááºáááºá áá«á áááºááœááºáá»ááºáá±á«áº áá°áááºááŒá®áž á¡áá±á¬ááºážáá±á¬ á¡ááá¯ážáá±á¬áá±á«á·á á¡áááºá ááá·áºááœáẠáá¬áá¬ááœáá·áºáá¬ážáá±á¬ SSH áá»áááºáááºááŸá¯áá áºáá¯ááŸááá²á·áá«á ááá·áºááœááºáá»á°áá¬ááŸááᬠáá«áá«áá±á¬ááºáá¬á¡á¬áž ááŒááºáááºá áááºáᬠááá·áºáá±áá¬ááá¯á· ááŒááºááœá¬ážáá« - á€áá¬áá¬ááŸáá áºááá·áº session ááẠáá»ááºáááœá¬ážáá« (áá¬ááŸáááá¯ááºáá«á áááºáááºáá»á¬ážáááŸááá«)á á¡áááºááŒá±áááºá áá¬áá¬áá±á«áºááœáẠáá±á¬ááºáááºáá±á¬ááºáá±á«ááºážáá»á¬ážá áœá¬ááŸááá±áá«áá áá áºáá¯áá»ááºážá á®ááẠá¡áááºážá¡ááŒá áºáá»á¬ážááá¯áá°ááẠ(áááºá¹ááá¬áá« Postgres!) ááŸáá·áº client host ááẠááŒá¬ááŒáá·áºá áœá¬ááááºážá ááŒááºáááºá áááºáá±ááá¯ááºáá±á¬áºáááºáž áááºážá¡ááŒá±á¬ááºážááᯠáá»áœááºá¯ááºááá¯á·áááááá¯ááºáá«á
Chat/IM á áá áºáá»á¬ážááẠá¡ááŒá¬ážáá±á¬ á¡ááŒá±á¬ááºážááŒáá»ááºáá»á¬ážá¡ááœáẠáá¯áááááá á¹á ááœáẠáááºááá¯ááºááẠ- á¡áœááºááá¯ááºážá¡ááŒá±á¡áá±áá»á¬ážá á¡áááºá á¡áá¯á¶ážááŒá¯áá° "ááŒá¯ááºáá»" áá«á áááºážááŸáá·áºáááºáááºááá·áº áááºážá á¡ááŒááºá¡ááŸááºááŒá±á¬ááá¯áá°áá»á¬ážááᯠá¡ááŒá±á¬ááºážááŒá¬ážááẠááá¯á¡ááºáá«áááºá ááá¯ááºáá«á Jabber ááᯠáááºáá®ážáá°áá»á¬ážááẠ(á¡ááŸá Ạ20 ááŒá¬ ááŒá¯ááŒááºáá²á·áááº) á¡ááŸá¬ážáá áºáᯠááŸááááá·áºááẠ- á¡áá¯á¶ážááŒá¯áá°ááẠá¡áááºááŒááºááœá¬ážáá±á¬áºáááºáž áá°ááẠá¡áœááºááá¯ááºážááœáẠááŸááá±áááºáᯠáá¯á¶ááŒááºáᬠáááºáá±á·áá»áºáá»á¬áž áááºáááºáá±ážáá¬ážáá±ááŒááẠ(ááá¯áááá¯ááºáá® áááá áºá¡áááºážáááºáááẠáá¯á¶ážááá»á±á¬ááºáá¯á¶ážááœá¬ážáá²á·áááºá á¡áá¬ážáá°ááŒááºážááᯠááŸá¬ááœá±ááœá±á·ááŸááá²á·áááºá) ááá¯ááºáá«á TCP_KEEPALIVE ááœá±ážáá»ááºááœáá·áºá TCP á¡áá»áááºááá¯ááºážáááááá¬áá»á¬ážá¡áá¯ááºáá¯ááºáá¯á¶ááá¯áá¬ážááááºáá±á¬áá°áá»á¬ážá áœá¬ááẠ(á áá¹ááá·áºáááºááááºážáá²á·ááá¯á·ááá¯ááºážáááºááá¯ážáá»á¬ážááá¯áááºááŸááºááŒááºážááŒáá·áº) áááºááá·áºáá±áá¬ááœááºáááá¯áá±á«áºáá¬ááẠ- á€áá±áá¬ááœááºáá°áá®áááá·áºáááºááá¯ááºáá« - ááẠOS kernel áá áºáá¯áááºážááá¯ááºááŒá±á¬ááºážáá±áá»á¬á¡á±á¬ááºáá¯ááºáááºááá¯á¡ááºáááºá á¡áá¯á¶ážááŒá¯áá°áá ááºááẠá¡áááºááŸááºáá±áá±ážáá±á¬áºáááºáž áá¯á¶ááŸááºá¡ááá¯ááºáž ááŒá±ááŒá¬ážááá¯ááºá áœááºážááŸáááŒá®áž á¡ááá®áá±ážááŸááºážááá¯ááºááá¯ááºáááºáž áá¯ááºáá±á¬ááºááá¯ááºááẠ(áááºážááẠá¡á±ážáá²ááœá¬ážáááºáᯠáááºáááºáá«ááá¬áž? Ubuntu 18.04 ááŸá Telegram Desktop ááẠáá»áœááºá¯ááºá¡ááœáẠá¡ááŒáááºááŒááẠáá»ááºááœá¬ážáááº)á
á¡á²áá«ááŒá±á¬áá·áº ping áá¯ááºááá·áºáááºá áá¬áᬠclientá ááŸáá·áºá¡ááŒááºá¡ááŸááºááá¯áẠ- client áá€áá²á·ááá¯á·áá¯ááºáá±á¬ááºáá«á connection áá»ááºááœá¬ážáá±á¬á¡áá« ping ááá¯áá±ážááá¯á·áááºááá¯ááºáá«á áááºážááá¯ááºááá±á¬ááºáá«á
ááŒá®ážáá±á¬á· Telegram ááŸá¬ áá¬ááŒááºáá²á á¡áá¬á¡á¬ážáá¯á¶ážá ááá·áºáá»ááºáááºáá«áá²á áá±á¬ááºážááŒá®á i.e. ááá¬ážáááºáá±á¬á· ááŸá
áºáááºá
áá¯á¶ážá á¡ááŒááºá¡ááŸáẠáá¯ááºáááºááŒá±á¬ááá¯ááá¯ááºáááºá áááºááœá±á·ááœááºá áá±á¬ááºáááºáá»á¬ážááẠáá»áá¯ááºážáá±á¬ááºááᯠá¡áá¯á¶ážááŒá¯ááŒáááºá ping_delay_disconnect
áá¬áá¬áá±á«áºááœáẠtimer ááᯠáááºážáá°áá±ážáááºá áá±á¬ááºážáááºáá«áááºá ping ááá«áá² áá°á¡á²áá®ááŸá¬ áááºáá±á¬ááºááŒá¬ááŒá¬ áá±áá»ááºáá²ááá¯áᬠáá¯á¶ážááŒááºááá¯á·á áá±á¬ááºáááºáá²á· áá¯ááºáááºážááá¯ááºáá«áá°ážá áááºážááááºááá¯á¡ááŒá±áá¶á áá¬áá¬ááẠááá¯áááááºá ááá¯á·áá±á¬áºá áááºáááºá¡áááºážá¡ááŒá
áºáá»á¬ážá¡ááœááºá
áááºááá±á¬ááºážááá¶á
á¬ážááá«áá áááºááẠPinocchio áááºáá°ááá¯á·ááá¯ááºáá°ááá¯á·ááá±á¬ááºážááá¯ážáá«ážááŒá
áºááŒá®ážá áá»áá¯ááºážáá±á¬ááºááá»áá¬áááá·áºááẠ...
áááºááᯠáá®ááá¯ááºážáá¯ááºááá·áºáá²á
á¡áááºáá±á¬áºááŒáá« á¡áá»ááºá¡áááºáá»á¬ážááẠáááºáá°ááá¯á·áá±á¬ááºáá±áž (ááŸáá·áº á¡á±á¬ááºááá¯ááºáž) ááœááºááŒá°áá¬ááœááºáááºáá»á¬ážááŸáá·áº áááºááá¯ááºáá¬ááá á¹á áááºáá»á¬ážááœáẠáááºážááá¯á·á áááá·áºáá»áá±á¬ á¡áááºá¡áá»ááºážáá»á¬áž áááºáááºááŸá Telegram / VKontakte á¡ááœá²á·á á¡áááºá¡áá»ááºážáááŒáá·áºáá®ááŒá±á¬ááºáž áááºááŸá¬ážá áœá¬ ááœáŸááºááŒáá±áá«áááºá
á¡áááºááŒá±á¬áá·áº á€áá»áŸááŸá¯ááºááœá±ážáá¬ááááºážá Telegram áááá¯áá¬ááá¬ááŸááºáá»á¬ážá áááºááá¯á·ááá·áºááœááºááẠááŒáá¯ážá á¬ážááá¯ááºááááºážá TCP áá»áááºáááºááŸá¯ ááŒááºáá±á¬ááºááŒááºážáá»á¬ážááᯠááŸááºáááºá á±áá±á¬ á ááºááŸááºáá áºáᯠááŒá¯áá¯ááºááẠááŒáá¯ážá á¬ážáá²á·ááŒááºážááŒá áºááŒá®ážá ááᯠáá»áœááºá¯ááºááá¯á· ááááºááŒááá±ážááá·áºá¡áá»ááºááᯠáá±á¬ááºá០áááºáá±ážáá«áááºá á¡áááºá¡áá²ááŒá¯á¶á á áœáá·áºáá áºáá¬ážáá±á¬áºáááºáž UDP áááºáá°ááá¯á·áá±á¬ááºáá±ážááá¯áááºáž ááŒá¯áá¯ááºááẠááŒáá¯ážá á¬ážáá²á·ááŒááẠ(ááá¯á·ááŒá±á¬áá·áº á á¬ááœááºá á¬áááºážááẠááá¬ááŒá áºááŒá®áž ááŒáœá¬ážáá¯á¶ážáá¯ááºá áᬠáá áºá á¯á¶áá áºáá¬áááŸááá«)á ááá¯á·áá±á¬áº áá±áá¯áá»á¡á¬ážááŒáá·áº ááœááºáááºáá»á¬ážááŸáá·áº TCP á¡áá°ážáááŒáá·áº á¡áá¯ááºáá¯ááºáá¯á¶ááá¯á·ááᯠáá¬ážáááºááŸá¯ áááºážáá«ážááŒááºážááŒá±á¬áá·áº áááºážááᯠáááºá¡á¬ážááá¯ážááá¯ááºááá·áºáá±áá¬á áááºááá¯ááºááá¯áẠáá¯ááºáá±á¬ááºááẠááá¯á¡ááºááá·áºáá±áᬠ(ááŸáá·áº áááºááá¯á·) ááŸáá·áº áááºážááᯠcryptography ááŸáá·áº áá±á«ááºážá ááºááẠááŒáá¯ážáááºážááŸá¯áá»á¬ážááŒá±á¬áá·áº âááŸá áºáá¯á¶áá áºáá¯á¶á áá»á±á¬ááºáá áºáá¯á¶ážáááºážáá«áá±á¬ ááŸááºáá»á¬áž" - ááá¯áá¯ááºááá¬áẠáá±á«áºáá¬áááºá
áááºááá¯ááŒá
áºááá·áºáá²á á¡á²áá®á¡áá»ááºááᯠá¡ááŒá±áá¶áááºá msg_id
ááŒááºááœáá·áºááá¯ááºááá¯ááºááŸá¯áá»á¬ážááᯠáá¬ážáá®ážááẠáá»áŸáá¯á·ááŸááºáááºá¹áá±áááŒáá·áº ááá¯á¡ááºáá±á¬ á¡áá»áááºáá¶ááááºáá
áºáá¯ááŒá
áºááŒá®áž áááºážááœáẠáá°ážááŒá¬ážáá±á¬ identifier áá¯ááºáá±á¬ááºáá»ááºááᯠáá°ážááœá²áááºááŒááẠá¡ááŸá¬ážá¡ááœááºážáá
áºáá¯ááŒá
áºáááºá ááá¯á·ááŒá±á¬áá·áºá áááºááŸá áááá¯áá¬áááºáá¬ááᯠááŒááºážááŒááºážáááºááẠáááŒá±á¬ááºážáá²áá² (á¡ááºááááºáá»á¬áž á¡ááºááááºááᯠááœá²á·á
ááºážáá±á¬á¡áá«á áááºážááẠá€áá±á¬ááºážáá«ážááœá²áá»á¬ážá á¡ááŒá¬ážá¡ááá¯ááºážá¡ááœáẠá¡ááá·áºááŒáá·áº API áá±á«ááºážá
ááºááŒá
áºáááº)á
- áá±á¬ááºáááºáᶠTCP áá»áááºáááºááŸá¯ááᯠááá¯ááºáá±á¬ááºáá¬ážááá·áº áá¬áá¬ááẠáá¬ááẠáá°ááẠ- á¡áááºá áááºááẠsocket ááŸáá¯ááºáá«áá áá»á±ážáá°ážááŒá¯á á¡áááºááŒá¯á áá¯ááºáá±á¬ááºááẠááá¯á·ááá¯áẠááŒááºáá±ážáááºááá¯áá«á á¡ááŸá¬ážá¡ááœááºážáááŸááá±á ááá¯á·áá±á¬áẠá¡áááºááŒá¯áá»ááºááŒá áºáá¬ááá·áº id á vector ááá¯ááºáá±á¬áºáááºáž ááá¯ážááá¯áž "áá±á¬ááºáá¯á¶ážáááŸááá±á¬ seq_no" - TCP (áá¶áá«ááºááŸá áºáᯠ- ááá·áºááá¯ááºááá¯áẠseq ááŸáá·áº á¡áááºááŒá¯áá¬ážáááº) áá²á·ááá¯á· áá¶áá«ááºáá áºáá¯áá»áŸáá¬ááŒá áºáááºá áá«ááá¯á·á session ááŸá¬á¡ááŒá²ááŸááááºááá¯ááºáá¬áž?
- ááŒááºáááºááá¯ááºááá¯ááºááŸá¯áá»á¬ážááᯠáá¬ážáá®ážááẠá¡áá»áááºáá¶ááááºááẠáá®ážááŒá¬ážá¡ááœááºáá
áºáᯠááŒá
áºáá¬áááºá á
á
áºáá±ážááŒá®ážáá±á¬áºáááºáž á¡ááŒá¬ážáá¬ááŸáááááá¯ááºáá«á áá¯á¶áá±á¬ááºáááºááŸáá·áº
uint32
- áá»áœááºá¯ááºááá¯á·ááá¬ážááẠá¡áááºážáá¯á¶áž áá áºáá±á·áá»áŸáẠáá áºáááºááá¯ááºážááœáẠááŒá±á¬ááºážáá²áá«áá áááºááŸáá¡áá»áááºá ááááºážááŒáá·áºá¡ááá¯ááºážá á¡á±á¬ááºáááºááœáẠ16 bitsá áá»ááºááẠáá áºá áá¹ááá·áºá á¡ááá¯ááºážááááºážááá¯á· (ááá¯áá²á·ááá¯á·) ááœá²áá±ááá¯ááºáá«áááºá - ááŒááºáá¯ááº
msg_id
áá¯á¶ážá - backends áá»á¬ážáá±á«áºááœááºáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááá¯ááœá²ááŒá¬ážááŒááºážáááŸá¯áá±á¬áá·áºááŸá áááá¡áá»ááºááŸá¬ client id ááŸáá·áºáá¯áááá¡áá»ááºááŸá¬ session id ááŸáááŒá®ážáááºážááá¯á·ááá¯áá±á«ááºážá ááºáá¬ážáááºá ááá¯á·ááŒá±á¬áá·áºá áá±á¬ááºážááá¯áá»ááºáá áºáá¯á¡áá±ááŒáá·áºá áá áºáá¯áá¬áá¯á¶áá±á¬ááºáááºáseq_no
.
á¡áá±á¬ááºážáá¯á¶ážááœá±ážáá»ááºááŸá¯áááºážááá¯ááºáá«á ááŒá®ážááŒáá·áºá á¯á¶áá±á¬áá»áááºážáá áºáá¯ááẠidentifier áá áºáá¯á¡ááŒá áºáá¯ááºáá±á¬ááºááá¯ááºááẠ- á€áááºážááŒáá·áº áááºáá±á·áá»áºáá±ážááá¯á·ááá·áºá¡áá« á¡ááá·áºááŒáá·áº API ááœáẠáááºážááá¯áá¯ááºáá±á¬ááºááŒá®ážááŒá áºáááºá áááá¯áá¬ááá¬ááᯠá¡ááŒáœááºážáá²á·á¡ááŒáœááºážáá²á· áááºá ááºááŸá¯á០ááŒááºáááºáááºáá®ážááŒááºážááẠááá¯áá±á¬ááºážáááá·áºáááºá ááá¯á·áá±á¬áº á€áá±á¬ááºážáá«ážááẠá€áá±á¬ááºážáá«ážááá¯ááºáá² á¡ááŒá¬ážá¡ááá¯ááºážá¡ááœáẠáá±á«ááºážá ááºáá áºáá¯ááŒá áºáááºá
API áá¬áž?
ááááº! ááá¯á·ááŒá±á¬áá·áºá áá¬áá»ááºááŸá¯ááŸáá·áº áá»áá¯ááºážáá±á¬ááºáá»á¬ážááŒáá·áº ááŒáá·áºáá±áá±á¬ áááºážááŒá±á¬ááºážááᯠááŒááºáá»á±á¬áºááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºáá¯á¶ážááœáẠáá¬áá¬áá¶ááá¯á· áá±á¬ááºážááá¯áá»ááºááŸááºááá»áŸááᯠáá±ážááá¯á·ááá¯ááºáá²á·ááŒá®áž áááºážááá¯á·áᶠá¡ááŒá±áá áºá á¯á¶áá áºáá¬ááᯠáááŸáááá·áºá¡ááŒáẠáá¬áá¬á០á¡ááºááááºáá»á¬ážááᯠáááºáá¶áááŸááá²á·ááẠ(áá±á¬ááºážááá¯áá»ááºááᯠáá¯á¶á·ááŒááºááŒááºážááá¯ááºáá±á¬áºáááºážá ááá¯ááŸááºážááœá¬ážáááºááá¯ááẠPUSH ááá¯áá»áá¯áž áá»áœááºáá±á¬áºááá¯á·ááᯠááá¯ááºááá¯ááºááá¯á·áá±ážáá«áááºá)
áááááŒá¯áá«á ááá¯áá±á¬ááºážáá«ážááœáẠPerl á¥ááá¬áá áºáá¯áá¬ááŸááááá·áºáááºá (á¡áá¬ážá¡ááá¯ááŸáá·áº ááááºážááŸá®ážáá°áá»á¬ážá¡ááœááºá áá±á¬ááºážáá»á®ážáá±ážááá·áº áááá¡ááŒááºážá¡áá¯á¶ááŸá¬ á¡áá¬ááá¹áá¯á á¡áá»ááºá¡áááºáááºáá±á¬ááºáá¯á¶ááŒá áºááŒá®ážá áá¯áááááŸá¬ áááºážáá¡áááºážá¡á á¬ážááŒá áºáááº)á
2019.10.24 12:00:51 $1 = {
'cb' => 'TeleUpd::__ANON__',
'out' => bless( {
'filter' => bless( {}, 'Telegram::ChannelMessagesFilterEmpty' ),
'channel' => bless( {
'access_hash' => '-6698103710539760874',
'channel_id' => '1380524958'
}, 'Telegram::InputPeerChannel' ),
'pts' => '158503',
'flags' => 0,
'limit' => 0
}, 'Telegram::Updates::GetChannelDifference' ),
'req_id' => '6751291954012037292'
};
2019.10.24 12:00:51 $1 = {
'in' => bless( {
'req_msg_id' => '6751291954012037292',
'result' => bless( {
'pts' => 158508,
'flags' => 3,
'final' => 1,
'new_messages' => [],
'users' => [],
'chats' => [
bless( {
'title' => 'Ð¥ÑлОМПЌОка',
'username' => 'hoolinomics',
'flags' => 8288,
'id' => 1380524958,
'access_hash' => '-6698103710539760874',
'broadcast' => 1,
'version' => 0,
'photo' => bless( {
'photo_small' => bless( {
'volume_id' => 246933270,
'file_reference' => '
'secret' => '1854156056801727328',
'local_id' => 228648,
'dc_id' => 2
}, 'Telegram::FileLocation' ),
'photo_big' => bless( {
'dc_id' => 2,
'local_id' => 228650,
'file_reference' => '
'secret' => '1275570353387113110',
'volume_id' => 246933270
}, 'Telegram::FileLocation' )
}, 'Telegram::ChatPhoto' ),
'date' => 1531221081
}, 'Telegram::Channel' )
],
'timeout' => 300,
'other_updates' => [
bless( {
'pts_count' => 0,
'message' => bless( {
'post' => 1,
'id' => 852,
'flags' => 50368,
'views' => 8013,
'entities' => [
bless( {
'length' => 20,
'offset' => 0
}, 'Telegram::MessageEntityBold' ),
bless( {
'length' => 18,
'offset' => 480,
'url' => 'https://alexeymarkov.livejournal.com/[url_вÑÑезаМ].html'
}, 'Telegram::MessageEntityTextUrl' )
],
'reply_markup' => bless( {
'rows' => [
bless( {
'buttons' => [
bless( {
'text' => '???? 165',
'data' => 'send_reaction_0'
}, 'Telegram::KeyboardButtonCallback' ),
bless( {
'data' => 'send_reaction_1',
'text' => '???? 9'
}, 'Telegram::KeyboardButtonCallback' )
]
}, 'Telegram::KeyboardButtonRow' )
]
}, 'Telegram::ReplyInlineMarkup' ),
'message' => 'Ð Ð²ÐŸÑ Ðž ÐœÐŸÐ²Ð°Ñ ÐºÐœÐžÐ³Ð°!
// [ÑекÑÑ ÑППбÑÐµÐœÐžÑ Ð²ÑÑезаМ ÑÑПб Ме МаÑÑÑаÑÑ Ð¿ÑавОл ХабÑа П ÑеклаЌе]
МапеÑаÑаÑ.',
'to_id' => bless( {
'channel_id' => 1380524958
}, 'Telegram::PeerChannel' ),
'date' => 1571724559,
'edit_date' => 1571907562
}, 'Telegram::Message' ),
'pts' => 158508
}, 'Telegram::UpdateEditChannelMessage' ),
bless( {
'pts' => 158508,
'message' => bless( {
'edit_date' => 1571907589,
'to_id' => bless( {
'channel_id' => 1380524958
}, 'Telegram::PeerChannel' ),
'date' => 1571807301,
'message' => 'ÐПÑÐµÐŒÑ ÐÑ ÑÑОÑаеÑе Facebook плПÑ
Пй кПЌпаМОей? ÐПжеÑе пÑПкПЌЌеМÑОÑПваÑÑ? ÐП-ЌПеЌÑ, ÑÑП ÑОкаÑÐœÐ°Ñ ÐºÐŸÐŒÐ¿Ð°ÐœÐžÑ. Ðез ЎПлгПв, Ñ Ñ
ПÑПÑей пÑОбÑлÑÑ, а еÑлО ÑеÑÐ°Ñ ÐŽÐžÐ²Ñ Ð¿Ð»Ð°ÑОÑÑ, ÑП О еÑе ЌПгÑÑ ÐœÐµÑ
ОлП пПЎПÑПжаÑÑ.
ÐÐ»Ñ ÐŒÐµÐœÑ ÐŸÑÐ²ÐµÑ ÑПвеÑÑеММП ПÑевОЎеМ: пПÑÐŸÐŒÑ ÑÑП Facebook ÐŽÐµÐ»Ð°ÐµÑ ÑжаÑÐœÑй пП каÑеÑÑÐ²Ñ Ð¿ÑПЎÑкÑ. Ðа, Ñ ÐœÐµÐ³ÐŸ ЌПМПпПлÑМПе пПлПжеМОе О Ўа, ОЌ пПлÑзÑеÑÑÑ ÐŸÐ³ÑПЌМПе кПлОÑеÑÑвП лÑЎей. ÐП ÐŒÐžÑ ÐœÐµ ÑÑÐŸÐžÑ ÐœÐ° ЌеÑÑе. ÐПгЎа-ÑП влаЎелÑÑаЌ ÐПкОО бÑлП ÑЌеÑМП ÐŸÑ Ð¿ÐµÑвПгП ÐйÑПМа. ÐМО ÐŽÑЌалО, ÑÑП лÑÑÑе ÐПкОО МОÑегП бÑÑÑ ÐœÐµ ÐŒÐŸÐ¶ÐµÑ Ðž ПМа МавÑегЎа ПÑÑаМеÑÑÑ ÑаЌÑÐŒ ÑЎПбМÑÐŒ, кÑаÑОвÑÐŒ О ÑвÑÑÐŽÑÐŒ ÑелеÑПМПЌ - О ÐŽÐŸÐ»Ñ ÑÑМка ÑÑП кÑаÑМПÑеÑОвП ЎеЌПМÑÑÑОÑПвала. ТепеÑÑ ÐžÐŒ Ме ÑЌеÑМП.
ÐПМеÑМП, ÑепÑÐžÐ»ÐŸÐžÐŽÑ ÑПпÑПÑОвлÑÑÑÑÑ ÐœÐ°Ð¿ÐŸÑÑ ÐŒÐŸÐ»ÐŸÐŽÑÑ
геМОев: Ñак ЊÑкеÑбеÑгПЌ бÑл пПжÑаМ Whatsapp, пПÑПЌ Instagram. ÐП вÑÑ ÐžÐŒ Ме пПжÑаÑÑ, ÐаÑа ÐÑÑПв Ме пÑПЎаÑÑÑÑ!
Так бÑÐŽÐµÑ Ðž Ñ Ð€ÐµÐ¹ÑбÑкПЌ. ÐелÑÐ·Ñ Ð²ÑÑ Ð²ÑÐµÐŒÑ ÐŽÐµÐ»Ð°ÑÑ Ð³ÐŸÐ²ÐœÐŸ. ÐÑП-ÑП кПгЎа-ÑП ÑÐŽÐµÐ»Ð°ÐµÑ Ñ
ПÑПÑОй пÑПЎÑкÑ, кÑЎа вÑÑ Ðž ÑйЎÑÑ.
#ÑПÑÑеÑО #facebook #акÑОО #ÑепÑОлПОЎÑ',
'reply_markup' => bless( {
'rows' => [
bless( {
'buttons' => [
bless( {
'data' => 'send_reaction_0',
'text' => '???? 452'
}, 'Telegram::KeyboardButtonCallback' ),
bless( {
'text' => '???? 21',
'data' => 'send_reaction_1'
}, 'Telegram::KeyboardButtonCallback' )
]
}, 'Telegram::KeyboardButtonRow' )
]
}, 'Telegram::ReplyInlineMarkup' ),
'entities' => [
bless( {
'length' => 199,
'offset' => 0
}, 'Telegram::MessageEntityBold' ),
bless( {
'length' => 8,
'offset' => 919
}, 'Telegram::MessageEntityHashtag' ),
bless( {
'offset' => 928,
'length' => 9
}, 'Telegram::MessageEntityHashtag' ),
bless( {
'length' => 6,
'offset' => 938
}, 'Telegram::MessageEntityHashtag' ),
bless( {
'length' => 11,
'offset' => 945
}, 'Telegram::MessageEntityHashtag' )
],
'views' => 6964,
'flags' => 50368,
'id' => 854,
'post' => 1
}, 'Telegram::Message' ),
'pts_count' => 0
}, 'Telegram::UpdateEditChannelMessage' ),
bless( {
'message' => bless( {
'reply_markup' => bless( {
'rows' => [
bless( {
'buttons' => [
bless( {
'data' => 'send_reaction_0',
'text' => '???? 213'
}, 'Telegram::KeyboardButtonCallback' ),
bless( {
'data' => 'send_reaction_1',
'text' => '???? 8'
}, 'Telegram::KeyboardButtonCallback' )
]
}, 'Telegram::KeyboardButtonRow' )
]
}, 'Telegram::ReplyInlineMarkup' ),
'views' => 2940,
'entities' => [
bless( {
'length' => 609,
'offset' => 348
}, 'Telegram::MessageEntityItalic' )
],
'flags' => 50368,
'post' => 1,
'id' => 857,
'edit_date' => 1571907636,
'date' => 1571902479,
'to_id' => bless( {
'channel_id' => 1380524958
}, 'Telegram::PeerChannel' ),
'message' => 'ÐПÑÑ Ð¿ÑП 1С вÑзвал бÑÑÐœÑÑ Ð¿ÐŸÐ»ÐµÐŒÐžÐºÑ. ЧелПвек 10 (вОЎОЌП, 1Ñ-пÑПгÑаЌЌОÑÑПв) еЎОМПЎÑÑМП МапОÑалО:
// [ÑекÑÑ ÑППбÑÐµÐœÐžÑ Ð²ÑÑезаМ ÑÑПб Ме МаÑÑÑаÑÑ Ð¿ÑавОл ХабÑа П ÑеклаЌе]
Я Ð±Ñ ÐŽÐŸÐ±Ð°Ð²ÐžÐ», ÑÑП блеÑÑÑÑÐ°Ñ Ñ 1С ЎОÑÑÑОбÑÑОÑ, а ЌаÑкеÑОМг... ÐœÑ, ÑакПе.'
}, 'Telegram::Message' ),
'pts_count' => 0,
'pts' => 158508
}, 'Telegram::UpdateEditChannelMessage' ),
bless( {
'pts' => 158508,
'pts_count' => 0,
'message' => bless( {
'message' => 'ÐÐŽÑавÑÑвÑйÑе, ÑаÑÑкажОÑе, пПжалÑйÑÑа, ÑеЌ вÑÐµÐŽÐžÑ ÑкПМПЌОке 1С?
// [ÑекÑÑ ÑППбÑÐµÐœÐžÑ Ð²ÑÑезаМ ÑÑПб Ме МаÑÑÑаÑÑ Ð¿ÑавОл ХабÑа П ÑеклаЌе]
#ÑПÑÑ #it #ÑкПМПЌОка',
'edit_date' => 1571907650,
'date' => 1571893707,
'to_id' => bless( {
'channel_id' => 1380524958
}, 'Telegram::PeerChannel' ),
'flags' => 50368,
'post' => 1,
'id' => 856,
'reply_markup' => bless( {
'rows' => [
bless( {
'buttons' => [
bless( {
'data' => 'send_reaction_0',
'text' => '???? 360'
}, 'Telegram::KeyboardButtonCallback' ),
bless( {
'data' => 'send_reaction_1',
'text' => '???? 32'
}, 'Telegram::KeyboardButtonCallback' )
]
}, 'Telegram::KeyboardButtonRow' )
]
}, 'Telegram::ReplyInlineMarkup' ),
'views' => 4416,
'entities' => [
bless( {
'offset' => 0,
'length' => 64
}, 'Telegram::MessageEntityBold' ),
bless( {
'offset' => 1551,
'length' => 5
}, 'Telegram::MessageEntityHashtag' ),
bless( {
'length' => 3,
'offset' => 1557
}, 'Telegram::MessageEntityHashtag' ),
bless( {
'offset' => 1561,
'length' => 10
}, 'Telegram::MessageEntityHashtag' )
]
}, 'Telegram::Message' )
}, 'Telegram::UpdateEditChannelMessage' )
]
}, 'Telegram::Updates::ChannelDifference' )
}, 'MTProto::RpcResult' )
};
2019.10.24 12:00:51 $1 = {
'in' => bless( {
'update' => bless( {
'user_id' => 2507460,
'status' => bless( {
'was_online' => 1571907651
}, 'Telegram::UserStatusOffline' )
}, 'Telegram::UpdateUserStatus' ),
'date' => 1571907650
}, 'Telegram::UpdateShort' )
};
2019.10.24 12:05:46 $1 = {
'in' => bless( {
'chats' => [],
'date' => 1571907946,
'seq' => 0,
'updates' => [
bless( {
'max_id' => 141719,
'channel_id' => 1295963795
}, 'Telegram::UpdateReadChannelInbox' )
],
'users' => []
}, 'Telegram::Updates' )
};
2019.10.24 13:01:23 $1 = {
'in' => bless( {
'server_salt' => '4914425622822907323',
'unique_id' => '5297282355827493819',
'first_msg_id' => '6751307555044380692'
}, 'MTProto::NewSessionCreated' )
};
2019.10.24 13:24:21 $1 = {
'in' => bless( {
'chats' => [
bless( {
'username' => 'freebsd_ru',
'version' => 0,
'flags' => 5440,
'title' => 'freebsd_ru',
'min' => 1,
'photo' => bless( {
'photo_small' => bless( {
'local_id' => 328733,
'volume_id' => 235140688,
'dc_id' => 2,
'file_reference' => '
'secret' => '4426006807282303416'
}, 'Telegram::FileLocation' ),
'photo_big' => bless( {
'dc_id' => 2,
'file_reference' => '
'volume_id' => 235140688,
'local_id' => 328735,
'secret' => '71251192991540083'
}, 'Telegram::FileLocation' )
}, 'Telegram::ChatPhoto' ),
'date' => 1461248502,
'id' => 1038300508,
'democracy' => 1,
'megagroup' => 1
}, 'Telegram::Channel' )
],
'users' => [
bless( {
'last_name' => 'Panov',
'flags' => 1048646,
'min' => 1,
'id' => 82234609,
'status' => bless( {}, 'Telegram::UserStatusRecently' ),
'first_name' => 'Dima'
}, 'Telegram::User' )
],
'seq' => 0,
'date' => 1571912647,
'updates' => [
bless( {
'pts' => 137596,
'message' => bless( {
'flags' => 256,
'message' => 'СПзЎаÑÑ ÐŽÐ¶ÐµÐ¹Ð» Ñ ÐžÐŒÐµÐœÐµÐŒ пПкПÑПÑе ??',
'to_id' => bless( {
'channel_id' => 1038300508
}, 'Telegram::PeerChannel' ),
'id' => 119634,
'date' => 1571912647,
'from_id' => 82234609
}, 'Telegram::Message' ),
'pts_count' => 1
}, 'Telegram::UpdateNewChannelMessage' )
]
}, 'Telegram::Updates' )
};
áá¯ááºáááºá á¡áá°ážáááẠspoiler á¡á±á¬ááºááŸá¬ ááá¬ážáá«áá²á· - ááááºááá±ážááẠááœá¬ážáá¯ááºááá¯ááºáá«á
á¡áá¯ážážážážážážážážážážážážážážážážážážážáž á¡ááœááºá¡áá»áœááºážááááºááŸááá±á¬á¡áá¬áá áºáá¯âŠ á€áááºááŸá¬ JSON ááŸá áá¯á¶ááŸááºááẠAPI á áá±áá¬ááœá²á·á ááºážáá¯á¶ááŒá áºáá±á¬ááºážááŒá áºááá¯ááºáááºá á¡áááºážáá»á¬ážááẠá¡áá¬ááá¹áá¯áá»á¬ážááŸáá·áº áá»áááºáááºáá¬ážááŒááºážááŸááœá²á ááŒá áºáá±á¬ááºážááŒá áºááá¯ááºáá«ááá¬ážá
áá®áá±á¬á· áá±á«áºáá¬áá¬á ... áá²áá±á¬áºááœá±ááá¯áᬠáá¬áá².. á¡áááºážá¡á¬ážá áá¯ááºááŒá®áž Web programmer ááœá± áááºááŸá¬á០á¡áá¬ážáá°ááá¯á· áááºááá·áºáá²á·ááŒáááºá á áááºáá¯á¶áá«áá²á?... HTTPS ááẠJSON á ááá¯ááœááºááŸá¬ááá¯ááºáá°ážáá¬ážá áá«ááá¯á·áá¬ááœá± áá²ááŸááºááá²á áá®ááŒáá¯ážá á¬ážááŸá¯á ááá¯ááºáááºááá¬ážá
TL+MTProto á áá»áœááºá¯ááºááá¯á·ááᯠáá±ážáá¬ážááá·áºá¡áá¬áá»á¬ážááŸáá·áº á¡ááŒá¬ážááœá±ážáá»ááºá áá¬áá»á¬áž ááŒá áºááá¯ááºáá»á±ááᯠá¡áá²ááŒááºááŒáá«á áá¯á·á áá±á¬ááºážááŒá®á HTTP áá±á¬ááºážááá¯áá»ááº-áá¯á¶á·ááŒááºááŸá¯ááẠááá¯ážááœá¬ážáá±á¬áºáááºáž á¡áááºážáá¯á¶áž TLS áááááºááœáẠáá áºáá¯áá¯ááŸááá«ááá¬ážá
áá»á
áºáá»á
áºáá±á¬ á¡ááŸááºá
ááºá JSON ááŸáá·áºáááºáá°áá±á¬ á€áá±áá¬ááœá²á·á
ááºážáá¯á¶ááá¯ááŒáá·áºáá«á áááºážá ááœááá»áá¯ážááœá²áá»á¬ážááŸáááŒá±á¬ááºáž áááááááááºá MsgPack ááᯠáá¯á¶áá±á¬ááºá¡á±á¬áẠáááá¯ážáá»á²á·ááá¯ááºáᯠá¡ááŸááºá¡áá¬ážááŒá¯ááŒáá«á
áá¯á·á ááá¯á·áá±á¬áº á¥ááá¬á¡á¬ážááŒáá·áºá CBOR ááœáẠáá±á¬áºááŒáá¬ážáá±á¬ á
á¶ááŸá¯ááºážá
- 25 + 256 - áá»ááºážáá¶áá«ááºá¡ááá¯ážá¡áá¬ážááŒáá·áº áááºáá±áá±á¬ááá¯ááºážáá»á¬ážááᯠá¡á á¬ážááá¯ážááŒááºážá á á»á±ážáá±á«áá±á¬ áá»á¯á¶á·áááºážá
- 26 - class name ááŸáá·áº constructor arguments áá»á¬ážááŒáá·áº Perl object ááᯠáá¶áá«ááºá ááºáááºáá¬ážáááºá
- 27 - á¡áá»áá¯ážá¡á á¬ážá¡áááºááŸáá·áº áááºáá±á¬ááºáá°ááá¯ááºáᬠá¡ááŒá±á¬ááºážááŒáá»ááºáá»á¬ážááŒáá·áº á¡ááœá²ááá¯áẠáá¬áá¬á áá¬áž-á¡ááŸá®á¡ááá¯áááºážáá±á¬ á¡áá¬ááá¹áá¯
áá±á¬ááºážááŒá®á TL ááŸáá·áº CBOR ááœáẠáá°áá®áá±á¬áá±áá¬ááᯠááá¯ááºážáá»á¬ážááŸáá·áº á¡áá¬ááá¹áá¯áá»á¬áž áá¯ááºááá¯ážááŸá¯ááŒáá·áº á á®á á¥áºááẠááŒáá¯ážá á¬ážáá²á·áááºá ááááºááẠáá áºáá®áá«ááá¯ááºá០CBOR ááá»ááºááŸá¬áá¬ááŒáá·áº ááœá²ááŒá¬ážáá¬áááº-
cborlen=1039673 tl_len=1095092
ááá¯á·ááŒá±á¬áá·áº áá±á¬ááºáá»ááº: ááŸááºááá¯ááºáá±á¬ áááá±á¬ááºááŸá¯ááŒáá·áº áááºáá°áá»ááŒááºáž ááá¯á·ááá¯áẠá¡áááºááá ááœá²ááŒá¬ážáááºááŸááºááŸá¯ ááŒá¿áá¬ááŒá±á¬áá·áºááá¯ááºáá±á¬ ááá¯ážááŸááºážáá±á¬ áá±á¬áºáááºáá»á¬áž ááŸááá«áááºá
ááŒááºáááºáá±á¬áá»áááºáááºááŸá¯áááºáá±á¬ááºááŒááºážá. ááŒááºáááºáá»áááºáááºááŒá®ážáá±á¬áẠRTT áá¯áááá¯ááá¯ááá¯ááẠ(áá±á¬á·ááᯠáá áºááŒáááºáá¯ááºáá±ážááŒá®ážáá±á¬á¡áá«) - ááááá¯á¶áž MTProto áááºáá±á·áá»áºá០á¡áá¯á¶ážááŒá¯ááá¯ááºáá±á¬áºáááºáž á¡áá»áá¯á·áá±á¬ ááŒáá¯áááºááŸá¬áá°ááŸá¯áá»á¬ážááŒáá·áº - áááºážááá¯á·ááẠáá¬ážáá áºáá¯áááºážááá¯á· áá±á¬ááºááœá¬ážááŒá®áž áááºááŸááºááẠáá¯ááºááœá¬ážááŒááºážáááŸááá« á áááºááá¯á·ááŒá áºáááºá TLS á áá»áœááºá¯ááºááá¯á·ááᯠáá¬áá±ážááá²á áááºá ááºááá¯ážáá¬áž-
TLS ááœáẠPFS ááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«á TLS á ááºááŸááºáááºááŸááºáá»á¬áž (
RFC 5077 ) áá±á¬á·áá»á¬ážááᯠááŒááºáááºááŸáááŸáá¯ááºážááŒááºážáááŒá¯áá² áá¬áá¬áá±á«áºááœáẠáá±á¬á·á¡áá»ááºá¡áááºáá»á¬ážááᯠááááºážáááºážááŒááºážáááŸááá² áá¯ááºááŸááºáá¬ážáá±á¬ session ááᯠááŒááºáááºá áááºáááºá ááááá»áááºáááºááŸá¯ááá¯ááœáá·áºááŒá®áž áá±á¬á·áá»á¬ážáá¯ááºáá±ážáá±á¬á¡áá«á áá¬áá¬ááẠáá»áááºáááºááŸá¯á¡ááŒá±á¡áá±ááᯠá á¬ááŸááºááŒá®áž áááá¯ááºážááá·áºáᶠ(á ááºááŸááºáááºááŸááºáá¯á¶á á¶ááŒáá·áº) áá±ážááá¯á·áááºá ááá¯á·ááŒá±á¬áá·áºá áá»áááºáááºááŸá¯ááᯠááŒááºáááºá áááºáá±á¬á¡áá«á client ááẠá¡ááŒá¬ážá¡áá¬áá»á¬ážááŒá áºááá·áº session key áá«ááŸááá±á¬ session ticket ááᯠserver ááá¯á· ááŒááºááá¯á·áá±ážáá«áááºá áááºááŸááºááá¯ááºááá¯ááºá áá¬áá¬ááœááºááááºážáááºážáá¬ážááá·áº áá¬áá®áá±á¬á· (á ááºááŸááºáááºááŸááºáá±á¬á·) ááŒáá·áº áá¯ááºááŸááºáá¬ážááŒá®áž SSL ááᯠá¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯ááºááŒá±ááŸááºážáááºážáá»á¬ážááœáẠááá¯ááºááœááºááá·áº ááŸá±á·áááºážáá¬áá¬áá»á¬ážá¡á¬ážáá¯á¶ážáᶠááŒáá·áºáá±ááááºááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áºá áá¬áá®áá¬áá¬áá±á¬á·áá»á¬ážááᯠá¡ááá¯ážáá¶ááá«áá á¥ááá¬á¡á¬ážááŒáá·áºá áááºážááá¯á·ááᯠá¡áá»áááºá¡ááŒá¬ááŒá®ážááááºážáááºážáá¬ážááá·áºá¡áá« (OpenSSLá nginxá Apache ááẠáááá¯ááááºááá¯áááºáááºáá±ááá·áºá¡áá»áááºáá áºáá»áŸá±á¬ááºáá¯á¶ážááœáẠáá°áááºážá¡ááá¯ááºážááááºážáááºážáá¬ážááŒááºážááŒáá·áº áááºážááá¯á·ááᯠáá¯á¶ááŸááºá¡ááá¯ááºážááááºážáááºážáá¬ážááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áºá session áááºááŸááºáá áºá á±á¬ááºáááááºáááºááŸá¯ááẠPFS ááá¯áá»áá¯ážáá±á¬ááºááá¯ááºáááºá áá°ááŒáá¯ááºáá»á¬ážáá±á¬ááá¯ááºáá»á¬ážá áá±á¬á·ááᯠáá¬áá®áá±á«ááºážáá»á¬ážá áœá¬á áááºáá±á«ááºážáá»á¬ážá áœá¬ á¡áá¯á¶ážááŒá¯áá«á)
á€áá±áá¬ááœáẠRTT ááẠáá¯áááá¯ááºáá«á áááºááẠá¡áááºážáá¯á¶áž ClientHello ááŸáá·áº ServerHello ááá¯á·ááᯠáá²ááŸááºáááºááá¯á¡ááºáááºá ááá¯á·áá±á¬áẠFinished ááŸáá·áº á¡áá°á client ááẠdata áá±ážááá¯á·ááá¯ááºáá±ááŒá®ááŒá áºáááºá áá«áá±ááá·áº á¡áá áºááœáá·áºáá¬ážáá²á· áá»áááºáááºááŸá¯ááœá±áá²á· áá°á·áá²á· Web áááŸááá°ážá áá«áá±ááá·áº messenger á áááŒá¬ááááá¯áááᯠáá áºáá¯áááºááá¯áá²á· áá«ááŸááá¯áẠáá®áááºáááºážáá²á· áá»áááºáááºááŸá¯áᬠáááºááºá á¬áá»ááºááŸá¬ááœá±á¡ááœáẠá¡áá±á¬áºáá±ážááá¯áá±á¬ááºážáá²á· áá±á¬ááºážááá¯áá»ááºááœá±ááᯠáá®áá±áá¬ááŸá¬ ááŸááºáá¬ážáá¬ážááá·áºáá«ááẠ- á¡áá¬á¡á¬ážáá¯á¶ážáᬠá¡ááœááºážáááºá á¯á¶á ááá¯ááá¯áááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááẠá¡ááœááºááá¯ážááœá¬ážáá±á¬ ááŒá±á¡á±á¬ááºááá¬ážáááºážá¡ááá¯ááºážááᯠáááœá±á·ááŸááá²á·áá«áá áááºážááẠáááºáá¶ááá¯ááºááœááºááŒá áºáááºá
áááŒá¬ážáá áºáá¯áá¯ááᯠáá±á·áá±ááŒá®áá¬áž? ááŸááºáá»ááºáá»á¬ážááœááºáá±ážáá«á
áááºáá¶áááá¯á·,
á€á á®ážáá®ážááá¯áááá¡ááá¯ááºážááœááºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááá¬ááá¯ááºáá¬ááŒá¿áá¬áá»á¬ážááẠá¡ááœá²á·á¡á ááºážááá¯ááºáá¬ááŒá¿áá¬áá»á¬áž- áá»ááºážáááºááŸá¯áá»á¬ážá á¡ááœá±ážá¡áá±á«áºá áá»ááºááŸá¬ááŒááºá á¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡áá±á«áº ááá±á¬áá¬ážá áááºááá¯á·ááᯠááá·áºááœááºážá ááºážá á¬ážáá«áááºá ááá¯á·áá±á¬áº á€áá±áá¬ááœáẠáááºááŒáá²á·áá±á¬ áááºážááá¬ááá¯ááºáᬠá¡áá»ááºá¡áááºáá»á¬ážá¡áá±á«áº á¡ááŒá±áá¶áááºá
ááááá¡ááá¯ááºážááẠáááºážááá¬ááá¯ááºáᬠá¡á áááºá¡ááá¯ááºáž / ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ á¡ááœá±á·á¡ááŒá¯á¶ááᯠááœá²ááŒááºážá áááºááŒá¬ááŒá®áž áááºáááºáá¯ááºáá±á¬ááºáá«áááºá á¡áá°ážáááºâááŒá¬ážááááºâá
- TL á¡áá»áá¯ážá¡á á¬áž á¡áá»áá¯ážáá»áá¯ážááŒáá·áº pandemonium á áááºááœá¬ážááŒááºážá
- áá»ááºáááºáá»á¬ážááŸáá·áº á á°áá«á¡á¯ááºá á¯áá»á¬ážá¡ááŒá±á¬ááºáž ááááá±á¬á¡áá¬áá»á¬áž
- ááá¯ááºáá¬áá±á¬á·ááºáá»á¬ážááẠá á¬áááºážááá¬ážááẠááá¯ááá¯ážáááºá
- absolute vs relative message addressing á¡ááŒá±á¬ááºáž
- áá¬ááºáá¯á¶áá²á· áá¯ááºáá¯á¶ááŒá¬ážá áá¬ááœá¬ááá²á
- á¡á®ááá¯áá»á®ááẠá á¬áá¯á¶ážá á±á¬ááºážááŒáá·áºáá±ážáá¬ážáá±á¬ á á¬áá¬ážááᯠá¡ááŸá±á¬áá·áºá¡ááŸááºáá±ážáá¯á¶
ááŸáá·áº á¡ááŒá¬áž áá»áá¯ááºážáá±á¬ááºáá»á¬áž ! áááºááŒá®ážáá¬ážáá±á¬ááºáá«!
source: www.habr.com