ื‘ื™ืงื•ืจืช ืขืœ ื”ืคืจื•ื˜ื•ืงื•ืœ ื•ื”ื’ื™ืฉื•ืช ื”ืืจื’ื•ื ื™ื•ืช ืฉืœ ื˜ืœื’ืจื. ื—ืœืง 1, ื˜ื›ื ื™: ื ื™ืกื™ื•ืŸ ื‘ื›ืชื™ื‘ืช ืœืงื•ื— ืžืืคืก - TL, MT

ืœืื—ืจื•ื ื” ื”ื—ืœื• ืœื”ื•ืคื™ืข ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื™ื•ืชืจ ื‘-Habrรฉ ืคื•ืกื˜ื™ื ืขืœ ื›ืžื” ื˜ื•ื‘ื” ื˜ืœื’ืจื, ืขื“ ื›ืžื” ื”ืื—ื™ื ื“ื•ืจื•ื‘ ืžื‘ืจื™ืงื™ื ื•ืžื ื•ืกื™ื ื‘ื‘ื ื™ื™ืช ืžืขืจื›ื•ืช ืจืฉืช ื•ื›ื•'. ื™ื—ื“ ืขื ื–ืืช, ืžืขื˜ ืžืื•ื“ ืื ืฉื™ื ื‘ืืžืช ืฉืงืขื• ื‘ืžื›ืฉื™ืจ ื”ื˜ื›ื ื™ - ืœื›ืœ ื”ื™ื•ืชืจ, ื”ื ืžืฉืชืžืฉื™ื ื‘-Bot API ืคืฉื•ื˜ ืœืžื“ื™ (ื•ื“ื™ ืฉื•ื ื” ืž-MTProto) ื”ืžื‘ื•ืกืก ืขืœ JSON, ื•ื‘ื“ืจืš ื›ืœืœ ืคืฉื•ื˜ ืžืงื‘ืœื™ื ืขืœ ืืžื•ื ื” ื›ืœ ื”ืฉื‘ื—ื™ื ื•ื™ื—ืกื™ ื”ืฆื™ื‘ื•ืจ ืฉืกื•ื‘ื‘ื™ื ืกื‘ื™ื‘ ื”ืฉืœื™ื—. ืœืคื ื™ ื›ืžืขื˜ ืฉื ื” ื•ื—ืฆื™, ืขืžื™ืช ืฉืœื™ ื‘ืขืžื•ืชื” ืืฉืœื•ืŸ ื•ืืกื™ืœื™ (ืœืฆืขืจื™, ื”ื—ืฉื‘ื•ืŸ ืฉืœื• ื‘-Habrรฉ ื ืžื—ืง ื™ื—ื“ ืขื ื”ื˜ื™ื•ื˜ื”) ื”ื—ืœ ืœื›ืชื•ื‘ ืœืงื•ื— ื˜ืœื’ืจื ืžืฉืœื• ืžืืคืก ื‘ืคืจืœ, ื•ื‘ื”ืžืฉืš ื”ืฆื˜ืจืฃ ื›ื•ืชื‘ ืฉื•ืจื•ืช ืืœื•. ืœืžื” ืคืจืœ, ื™ืฉ ืฉื™ืฉืืœื• ืžื™ื“? ืžื›ื™ื•ื•ืŸ ืฉืคืจื•ื™ืงื˜ื™ื ื›ืืœื” ื›ื‘ืจ ืงื™ื™ืžื™ื ื‘ืฉืคื•ืช ืื—ืจื•ืช. ืœืžืขืฉื”, ื–ื• ืœื ื”ื ืงื•ื“ื”, ื™ื›ื•ืœื” ืœื”ื™ื•ืช ื›ืœ ืฉืคื” ืื—ืจืช ืฉื‘ื” ืื™ืŸ ืกืคืจื™ื™ื” ืžื•ื›ื ื”, ื•ื‘ื”ืชืื ืœื›ืš ืขืœ ื”ืžื—ื‘ืจ ืœืœื›ืช ืขื“ ื”ืกื•ืฃ ืžืืคืก. ื™ืชืจ ืขืœ ื›ืŸ, ืงืจื™ืคื˜ื•ื’ืจืคื™ื” ื”ื™ื ืขื ื™ื™ืŸ ืฉืœ ืืžื•ืŸ, ืื‘ืœ ื•ื“ื. ืขื ืžื•ืฆืจ ื”ืžื›ื•ื•ืŸ ืœืื‘ื˜ื—ื”, ืืชื” ืœื ื™ื›ื•ืœ ืคืฉื•ื˜ ืœื”ืกืชืžืš ืขืœ ืกืคืจื™ื™ื” ืžื•ื›ื ื” ืžื”ื™ืฆืจืŸ ื•ืœืกืžื•ืš ืขืœื™ื” ื‘ืื•ืคืŸ ืขื™ื•ื•ืจ (ืขื ื–ืืช, ื–ื” ื ื•ืฉื ืœื—ืœืง ื”ืฉื ื™). ื›ืจื’ืข, ื”ืกืคืจื™ื™ื” ืขื•ื‘ื“ืช ื“ื™ ื˜ื•ื‘ ื‘ืจืžื” ื”"ืžืžื•ืฆืขืช" (ืžืืคืฉืจืช ืœืš ืœื‘ืฆืข ื›ืœ ื‘ืงืฉื•ืช API).

ืขื ื–ืืช, ืœื ืชื”ื™ื” ื”ืจื‘ื” ืงืจื™ืคื˜ื•ื’ืจืคื™ื” ืื• ืžืชืžื˜ื™ืงื” ื‘ืกื“ืจืช ื”ืคื•ืกื˜ื™ื ื”ื–ื•. ืื‘ืœ ื™ื”ื™ื• ืขื•ื“ ื”ืจื‘ื” ืคืจื˜ื™ื ื˜ื›ื ื™ื™ื ื•ืงื‘ื™ื™ื ืื“ืจื™ื›ืœื™ื™ื (ืฉื™ืžื•ืฉื™ื™ื ื’ื ืœืžื™ ืฉืœื ื™ื›ืชื•ื‘ ืžืืคืก, ืืœื ื™ืฉืชืžืฉ ื‘ืกืคืจื™ื™ื” ื‘ื›ืœ ืฉืคื”). ืœื›ืŸ, ื”ืžื˜ืจื” ื”ืขื™ืงืจื™ืช ื”ื™ื™ืชื” ืœื ืกื•ืช ืœื™ื™ืฉื ืืช ื”ืœืงื•ื— ืžืืคืก ืœืคื™ ืชื™ืขื•ื“ ืจืฉืžื™. ื›ืœื•ืžืจ, ื ื ื™ื— ืฉืงื•ื“ ื”ืžืงื•ืจ ืฉืœ ืœืงื•ื—ื•ืช ืจืฉืžื™ื™ื ืกื’ื•ืจ (ืฉื•ื‘, ื‘ื—ืœืง ื”ืฉื ื™ ื ืขืกื•ืง ื‘ื™ืชืจ ืคื™ืจื•ื˜ ื‘ื ื•ืฉื ื”ืขื•ื‘ื“ื” ืฉื–ื” ื ื›ื•ืŸ ื–ื” ืงื•ืจื” ื›ืš), ืื‘ืœ, ื›ืžื• ื‘ื™ืžื™ื ืขื‘ืจื•, ืœืžืฉืœ, ื™ืฉ ืชืงืŸ ื›ืžื• RFC - ื”ืื ืืคืฉืจ ืœื›ืชื•ื‘ ืœืงื•ื— ืœืคื™ ื”ืžืคืจื˜ ื‘ืœื‘ื“, "ืžื‘ืœื™ ืœื”ืกืชื›ืœ" ืขืœ ืงื•ื“ ื”ืžืงื•ืจ, ื‘ื™ืŸ ืื ื–ื” ืจืฉืžื™ (Telegram Desktop, ื ื™ื™ื“), ืื• Telethon ืœื ืจืฉืžื™?

ืื•ืคืฆื™ื•ืช:

ืชื™ืขื•ื“... ื–ื” ืงื™ื™ื, ื ื›ื•ืŸ? ื”ืื ื–ื” ื ื›ื•ืŸ?..

ื‘ืงื™ืฅ ื”ืื—ืจื•ืŸ ื”ื—ืœื• ืœืืกื•ืฃ ืฉื‘ืจื™ ื”ืขืจื•ืช ืœืžืืžืจ ื–ื”. ื›ืœ ื”ื–ืžืŸ ื”ื–ื” ื‘ืืชืจ ื”ืจืฉืžื™ https://core.telegram.org ื”ืชื™ืขื•ื“ ื”ื™ื” ื ื›ื•ืŸ ืœืฉื›ื‘ื” 23, ื›ืœื•ืžืจ. ืชืงื•ืข ืื™ ืฉื ื‘-2014 (ื–ื•ื›ืจื™ื, ืืคื™ืœื• ืœื ื”ื™ื• ืขืจื•ืฆื™ื ืื–?). ื›ืžื•ื‘ืŸ, ื‘ืชื™ืื•ืจื™ื”, ื–ื” ื”ื™ื” ืฆืจื™ืš ืœืืคืฉืจ ืœื ื• ืœื™ื™ืฉื ืœืงื•ื— ืขื ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื‘ืื•ืชื” ืชืงื•ืคื” ื‘-2014. ืื‘ืœ ื’ื ื‘ืžืฆื‘ ื–ื”, ื”ืชื™ืขื•ื“ ื”ื™ื”, ืจืืฉื™ืช, ื—ืœืงื™, ื•ืฉื ื™ืช, ื‘ืžืงื•ืžื•ืช ืฉื”ื•ื ืกื•ืชืจ ืืช ืขืฆืžื•. ืœืคื ื™ ืงืฆืช ื™ื•ืชืจ ืžื—ื•ื“ืฉ, ื‘ืกืคื˜ืžื‘ืจ 2019, ื–ื” ื”ื™ื” ื‘ื˜ืขื•ืช ื”ืชื’ืœื” ืฉื™ืฉ ืขื“ื›ื•ืŸ ื’ื“ื•ืœ ืฉืœ ื”ืชื™ืขื•ื“ ื‘ืืชืจ, ืœืฉื›ื‘ื” 105 ื”ืขื“ื›ื ื™ืช ืœื—ืœื•ื˜ื™ืŸ, ืขื ื”ืขืจื” ืฉืขื›ืฉื™ื• ืฆืจื™ืš ืœืงืจื•ื ื”ื›ืœ ืฉื•ื‘. ืื›ืŸ, ืžืืžืจื™ื ืจื‘ื™ื ืชื•ืงื ื•, ืืš ืจื‘ื™ื ื ื•ืชืจื• ืœืœื ืฉื™ื ื•ื™. ืœื›ืŸ, ื›ืฉืงื•ืจืื™ื ืืช ื”ื‘ื™ืงื•ืจืช ืœืžื˜ื” ืขืœ ื”ืชื™ืขื•ื“, ื›ื“ืื™ ืœื–ื›ื•ืจ ืฉื—ืœืง ืžื”ื“ื‘ืจื™ื ื”ืืœื” ื›ื‘ืจ ืœื ืจืœื•ื•ื ื˜ื™ื™ื, ืื‘ืœ ื—ืœืง ืขื“ื™ื™ืŸ ื“ื™. ืื—ืจื™ ื”ื›ืœ, 5 ืฉื ื™ื ื‘ืขื•ืœื ื”ืžื•ื“ืจื ื™ ื–ื” ืœื ืจืง ื”ืจื‘ื” ื–ืžืŸ, ืืœื ืžืื•ื“ ื”ืจื‘ื”. ืžืื– ืื•ืชื ื–ืžื ื™ื (ื‘ืžื™ื•ื—ื“ ืื ืœื ืœื•ืงื—ื™ื ื‘ื—ืฉื‘ื•ืŸ ืืช ืืชืจื™ ื”ื’ื™ืื•ืฆ'ืื˜ ืฉื”ื•ืฉืœื›ื• ื•ื”ืชื—ื“ืฉื• ืžืื–), ืžืกืคืจ ืฉื™ื˜ื•ืช ื”-API ื‘ืชื›ื ื™ืช ื’ื“ืœ ืžืžืื” ืœื™ื•ืชืจ ืžืžืืชื™ื™ื ื•ื—ืžื™ืฉื™ื!

ืื™ืคื” ืœื”ืชื—ื™ืœ ื›ืกื•ืคืจ ืฆืขื™ืจ?

ื–ื” ืœื ืžืฉื ื” ืื ืืชื” ื›ื•ืชื‘ ืžืืคืก ืื• ืžืฉืชืžืฉ, ืœืžืฉืœ, ื‘ืกืคืจื™ื•ืช ืžื•ื›ื ื•ืช ื›ืžื• Telethon ืขื‘ื•ืจ Python ืื• Madeline ืขื‘ื•ืจ PHP, ื‘ื›ืœ ืžืงืจื”, ืชืฆื˜ืจืš ืชื—ื™ืœื” ืœืจืฉื•ื ืืช ื”ื‘ืงืฉื” ืฉืœืš - ืœืงื‘ืœ ืคืจืžื˜ืจื™ื api_id ะธ api_hash (ืืœื” ืฉืขื‘ื“ื• ืขื ื”-API ืฉืœ VKontakte ืžื‘ื™ื ื™ื ืžื™ื“) ืœืคื™ื• ื”ืฉืจืช ื™ื–ื”ื” ืืช ื”ืืคืœื™ืงืฆื™ื”. ื–ึถื” ืฆืจื™ืš ืœืขืฉื•ืช ื–ืืช ืžืกื™ื‘ื•ืช ืžืฉืคื˜ื™ื•ืช, ืื‘ืœ ื ื“ื‘ืจ ื™ื•ืชืจ ืขืœ ื”ืกื™ื‘ื” ืœื›ืš ืฉืกื•ืคืจื™ ืกืคืจื™ื™ื” ืœื ื™ื›ื•ืœื™ื ืœืคืจืกื ืืช ื–ื” ื‘ื—ืœืง ื”ืฉื ื™. ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉืืชื” ืžืจื•ืฆื” ืžืขืจื›ื™ ื”ื‘ื“ื™ืงื”, ืœืžืจื•ืช ืฉื”ื ืžื•ื’ื‘ืœื™ื ืžืื•ื“ - ื”ืขื•ื‘ื“ื” ื”ื™ื ืฉืขื›ืฉื™ื• ืืชื” ื™ื›ื•ืœ ืœื”ื™ืจืฉื ืจืง ืื—ื“ ืืคืœื™ืงืฆื™ื”, ืื– ืืœ ืชืžื”ืจื• ืืœื™ื”.

ื›ืขืช, ืžื‘ื—ื™ื ื” ื˜ื›ื ื™ืช, ืฆืจื™ืš ืœื”ืชืขื ื™ื™ืŸ ื‘ืขื•ื‘ื“ื” ืฉืื—ืจื™ ื”ื”ืจืฉืžื” ืขืœื™ื ื• ืœืงื‘ืœ ื”ื•ื“ืขื•ืช ืžื˜ืœื’ืจื ืขืœ ืขื“ื›ื•ื ื™ื ื‘ืชื™ืขื•ื“, ืคืจื•ื˜ื•ืงื•ืœ ื•ื›ื•'. ื›ืœื•ืžืจ, ืืคืฉืจ ื”ื™ื” ืœืฉืขืจ ืฉื”ืืชืจ ืขื ื”ืจืฆื™ืคื™ื ืคืฉื•ื˜ ื ื˜ื•ืฉ ื•ื”ืžืฉื™ืš ืœืขื‘ื•ื“ ื‘ืžื™ื•ื—ื“ ืขื ืžื™ ืฉื”ืชื—ื™ืœ ืœืขืฉื•ืช ืœืงื•ื—ื•ืช, ื›ื™ ื–ื” ืงืœ ื™ื•ืชืจ. ืื‘ืœ ืœื, ืฉื•ื ื“ื‘ืจ ื›ื–ื” ืœื ื ืฆืคื”, ืฉื•ื ืžื™ื“ืข ืœื ื”ื’ื™ืข.

ื•ืื ืืชื” ื›ื•ืชื‘ ืžืืคืก, ืื– ื”ืฉื™ืžื•ืฉ ื‘ืคืจืžื˜ืจื™ื ืฉื”ืชืงื‘ืœื• ื”ื•ื ืœืžืขืฉื” ืขื“ื™ื™ืŸ ืจื—ื•ืง. ืœืžืจื•ืช ืฉ https://core.telegram.org/ ื•ืžื“ื‘ืจ ืขืœื™ื”ื ื‘ื”ืชื—ืœื” ืงื•ื“ื ื›ืœ, ืœืžืขืฉื”, ืงื•ื“ื ื›ืœ ืชืฆื˜ืจืš ืœื™ื™ืฉื ืคืจื•ื˜ื•ืงื•ืœ MTProto - ืื‘ืœ ืื ื”ืืžื ืช ืคืจื™ืกื” ืœืคื™ ืžื•ื“ืœ OSI ื‘ืกื•ืฃ ื”ืขืžื•ื“ ืœืชื™ืื•ืจ ื›ืœืœื™ ืฉืœ ื”ืคืจื•ื˜ื•ืงื•ืœ, ืื– ื–ื” ืœื’ืžืจื™ ืœืฉื•ื•ื.

ืœืžืขืฉื”, ื’ื ืœืคื ื™ ื•ื’ื ืื—ืจื™ MTProto, ื‘ื›ืžื” ืจืžื•ืช ื‘ื•-ื–ืžื ื™ืช (ื›ืคื™ ืฉืื•ืžืจื™ื ืื ืฉื™ ืจืฉืช ื–ืจื™ื ืฉืขื•ื‘ื“ื™ื ื‘ืœื™ื‘ืช ืžืขืจื›ืช ื”ื”ืคืขืœื”, ื”ืคืจืช ืฉื›ื‘ื•ืช), ื ื•ืฉื ื’ื“ื•ืœ, ื›ื•ืื‘ ื•ื ื•ืจื ื™ืคืจื™ืข...

ืกื“ืจื” ื‘ื™ื ืืจื™ืช: TL (ืฉืคืช ืกื•ื’) ื•ื”ืกื›ื™ืžื” ืฉืœื”, ื•ื”ืฉื›ื‘ื•ืช ืฉืœื”, ื•ืขื•ื“ ื”ืจื‘ื” ืžื™ืœื™ื ืžืคื—ื™ื“ื•ืช

ื ื•ืฉื ื–ื”, ืœืžืขืฉื”, ื”ื•ื ื”ืžืคืชื— ืœื‘ืขื™ื•ืช ืฉืœ ื˜ืœื’ืจื. ื•ื™ื”ื™ื• ื”ืจื‘ื” ืžื™ืœื™ื ืื™ื•ืžื•ืช ืื ืชื ืกื• ืœื”ืชืขืžืง ื‘ื–ื”.

ืื– ื”ื ื” ื”ืชืจืฉื™ื. ืื ื”ืžื™ืœื” ื”ื–ืืช ืขื•ืœื” ืœืš ื‘ืจืืฉ, ืืžื•ืจ, ืกื›ืžืช JSON, ื—ืฉื‘ืช ื ื›ื•ืŸ. ื”ืžื˜ืจื” ื–ื”ื”: ืฉืคื” ื›ืœืฉื”ื™ ืœืชื™ืื•ืจ ืงื‘ื•ืฆื” ืืคืฉืจื™ืช ืฉืœ ื ืชื•ื ื™ื ืžืฉื•ื“ืจื™ื. ื›ืืŸ ืžืกืชื™ื™ืžื™ื ืงื•ื•ื™ ื”ื“ืžื™ื•ืŸ. ืื ืžื”ื“ืฃ ืคืจื•ื˜ื•ืงื•ืœ MTProto, ืื• ืžืขืฅ ื”ืžืงื•ืจ ืฉืœ ื”ืœืงื•ื— ื”ืจืฉืžื™, ื ื ืกื” ืœืคืชื•ื— ืกื›ืžื” ื›ืœืฉื”ื™, ื ืจืื” ืžืฉื”ื• ื›ืžื•:

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++ (ืœืžืขืฉื”, ืœื ืžืžืฉ). ื•ืžื” ื”ืžืฉืžืขื•ืช ืฉืœ ื›ืœ ืฉืืจ ื”ืกืžืœื™ื, ืกื™ืžื ื™ ืฉืืœื”, ืกื™ืžื ื™ ืงืจื™ืื”, ืื—ื•ื–ื™ื, ืกื™ืžื ื™ ื’ื™ื‘ื•ื‘ (ื•ื‘ืจื•ืจ ืฉื”ื ืžืชื›ื•ื•ื ื™ื ืœื“ื‘ืจื™ื ืฉื•ื ื™ื ื‘ืžืงื•ืžื•ืช ืฉื•ื ื™ื), ืœืคืขืžื™ื ื ื•ื›ื—ื™ื ื•ืœืคืขืžื™ื ืœื, ืžืกืคืจื™ื ื”ืงืกื“ืฆื™ืžืœื™ื™ื - ื•ื”ื›ื™ ื—ืฉื•ื‘, ืื™ืš ืžื’ื™ืขื™ื ืžื–ื” ื ื›ื•ืŸ (ืฉืœื ื™ื™ื“ื—ื” ืขืœ ื™ื“ื™ ื”ืฉืจืช) ื–ืจื ื‘ืชื™ื? ืชืฆื˜ืจืš ืœืงืจื•ื ืืช ื”ืชื™ืขื•ื“ (ื›ืŸ, ื™ืฉ ืงื™ืฉื•ืจื™ื ืœืกื›ื™ืžื” ื‘ื’ืจืกืช JSON ื‘ืงืจื‘ืช ืžืงื•ื - ืื‘ืœ ื–ื” ืœื ื”ื•ืคืš ืืช ื–ื” ืœื‘ื”ื™ืจ ื™ื•ืชืจ).

ืคืชื— ืืช ื”ื“ืฃ ืกื™ื“ื•ืจ ื ืชื•ื ื™ื ื‘ื™ื ืืจื™ื™ื ื•ืฆืœื•ืœ ืœืขื•ืœื ื”ืงืกื•ื ืฉืœ ืคื˜ืจื™ื•ืช ื•ืžืชืžื˜ื™ืงื” ื‘ื“ื™ื“ื”, ืžืฉื”ื• ื“ื•ืžื” ืœืžืชืŸ ื‘ืฉื ื” ื”ืจื‘ื™ืขื™ืช. ืืœืคื‘ื™ืช, ืกื•ื’, ืขืจืš, ืงื•ืžื‘ื™ื ื˜ื•ืจ, ืงื•ืžื‘ื™ื ื˜ื•ืจ ืคื•ื ืงืฆื™ื•ื ืœื™, ืฆื•ืจื” ื ื•ืจืžืœื™ืช, ืกื•ื’ ืžื•ืจื›ื‘, ืกื•ื’ ืคื•ืœื™ืžื•ืจืคื™... ื•ื–ื” ื”ื›ืœ ืจืง ื”ืขืžื•ื“ ื”ืจืืฉื•ืŸ! ื”ื‘ื ืžื—ื›ื” ืœืš ืฉืคืช TL, ืฉืœืžืจื•ืช ืฉื”ื•ื ื›ื‘ืจ ืžื›ื™ืœ ื“ื•ื’ืžื” ืœื‘ืงืฉื” ื•ืชื’ื•ื‘ื” ื˜ืจื™ื•ื•ื™ืืœื™ืช, ืœื ื ื•ืชืŸ ืžืขื ื” ื›ืœืœ ืœืžืงืจื™ื ื˜ื™ืคื•ืกื™ื™ื ื™ื•ืชืจ, ืžื” ืฉืื•ืžืจ ืฉืชืฆื˜ืจืš ืœื“ืฉื“ืฉ ื‘ืฉื•ืจื” ื—ื•ื–ืจืช ืฉืœ ืžืชืžื˜ื™ืงื” ืฉืชื•ืจื’ืžื” ืžืจื•ืกื™ืช ืœืื ื’ืœื™ืช ืขืœ ืขื•ื“ ืฉืžื•ื ื” ืžื•ื˜ืžืขื•ืช ื“ืคื™ื!

ืงื•ืจืื™ื ืฉืžื›ื™ืจื™ื ืฉืคื•ืช ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื•ื”ืกืงืช ืกื•ื’ื™ื ืื•ื˜ื•ืžื˜ื™ืช ื™ืจืื•, ื›ืžื•ื‘ืŸ, ืืช ืฉืคืช ื”ืชื™ืื•ืจ ื‘ืฉืคื” ื”ื–ื•, ืืคื™ืœื• ืžื”ื“ื•ื’ืžื”, ื›ืžื•ื›ืจืช ื”ืจื‘ื” ื™ื•ืชืจ, ื•ื™ื›ื•ืœื™ื ืœื•ืžืจ ืฉื–ื” ื‘ืขืฆื ืœื ืจืข ื‘ืื•ืคืŸ ืขืงืจื•ื ื™. ื”ื”ืชื ื’ื“ื•ื™ื•ืช ืœื›ืš ื”ืŸ:

  • ื›ืŸ, ืžื˜ืจื” ื ืฉืžืข ื˜ื•ื‘, ืื‘ืœ ืื‘ื•ื™, ื”ื™ื ืœื ื”ื•ืฉื’
  • ื”ืฉื›ืœื” ื‘ืื•ื ื™ื‘ืจืกื™ื˜ืื•ืช ื‘ืจื•ืกื™ื” ืžืฉืชื ื” ืืคื™ืœื• ื‘ื™ืŸ ื”ืชืžื—ื•ื™ื•ืช IT - ืœื ื›ื•ืœื ืœืžื“ื• ืืช ื”ืงื•ืจืก ื”ืžืงื‘ื™ืœ
  • ืœื‘ืกื•ืฃ, ื›ืคื™ ืฉื ืจืื”, ื‘ืคื•ืขืœ ื–ื” ื›ืš ืœื ื ื“ืจืฉ, ืฉื›ืŸ ื ืขืฉื” ืฉื™ืžื•ืฉ ืจืง ื‘ืชืช-ืงื‘ื•ืฆื” ืžื•ื’ื‘ืœืช ืืคื™ืœื• ืฉืœ ื”-TL ืฉืชื•ืืจ

ื›ืžื• ืฉื ืืžืจ ืœื™ืื•ื ืจื“ ื‘ืขืจื•ืฅ #perl ื‘ืจืฉืช FreeNode IRC, ืฉื ื™ืกื” ืœื™ื™ืฉื ืฉืขืจ ืžื˜ืœื’ืจื ืœืžื˜ืจื™ืงืก (ืชืจื’ื•ื ื”ืฆื™ื˜ื•ื˜ ืื™ื ื• ืžื“ื•ื™ืง ืžื”ื–ื™ื›ืจื•ืŸ):

ื–ื” ืžืจื’ื™ืฉ ื›ืื™ืœื• ืžื™ืฉื”ื• ื”ืชื•ื•ื“ืข ืœืชื•ืจืช ื”ืงืœื™ื“ื™ื ื‘ืคืขื ื”ืจืืฉื•ื ื”, ื”ืชืœื”ื‘ ื•ื”ืชื—ื™ืœ ืœื ืกื•ืช ืœืฉื—ืง ืื™ืชื”, ืœื ืžืžืฉ ืื›ืคืช ืœื• ืื ื–ื” ื ื—ื•ืฅ ื‘ืคื•ืขืœ.

ืชืจืื” ื‘ืขืฆืžืš ืื ื”ืฆื•ืจืš ื‘ื˜ื™ืคื•ืก ื—ืฉื•ืฃ (int, long ื•ื›ื•') ื›ืžืฉื”ื• ืืœืžื ื˜ืจื™ ืœื ืžืขืœื” ืฉืืœื•ืช - ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื™ืฉ ืœื™ื™ืฉื ืื•ืชื ื‘ืื•ืคืŸ ื™ื“ื ื™ - ืœืžืฉืœ, ื ื™ืงื— ื ื™ืกื™ื•ืŸ ืœื”ืคื™ืง ืžื”ื ื•ืงื˜ื•ืจ. ื›ืœื•ืžืจ, ืœืžืขืฉื”, ืžืขืจืš, ืื ืืชื” ืงื•ืจื ืœื“ื‘ืจื™ื ื”ืžืชืงื‘ืœื™ื ื‘ืฉืžื ื”ื ื›ื•ืŸ.

ืื‘ืœ ืœืคื ื™

ืชื™ืื•ืจ ืงืฆืจ ืฉืœ ืชืช-ืงื‘ื•ืฆื” ืฉืœ ืชื—ื‘ื™ืจ TL ืœืžื™ ืฉืœื ืงื•ืจื ืืช ื”ืชื™ืขื•ื“ ื”ืจืฉืžื™

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;

ื”ื”ื’ื“ืจื” ืชืžื™ื“ ืžืชื—ื™ืœื” ืžืขืฆื‘, ืœืื—ืจ ืžื›ืŸ ืื•ืคืฆื™ื•ื ืœื™ (ื‘ืคื•ืขืœ - ืชืžื™ื“) ื“ืจืš ื”ืกืžืœ # ื—ื™ื™ื‘ ืœื”ื™ื•ืช CRC32 ืžืžื—ืจื•ื–ืช ื”ืชื™ืื•ืจ ื”ืžื ื•ืจืžืœืช ืžืกื•ื’ ื–ื”. ืœืื—ืจ ืžื›ืŸ ืžื’ื™ืข ืชื™ืื•ืจ ืฉืœ ื”ืฉื“ื•ืช; ืื ื”ื ืงื™ื™ืžื™ื, ื”ืกื•ื’ ืขืฉื•ื™ ืœื”ื™ื•ืช ืจื™ืง. ื›ืœ ื–ื” ืžืกืชื™ื™ื ื‘ืกื™ืžืŸ ืฉื•ื•ื™ื•ืŸ, ืฉื ื”ื˜ื™ืคื•ืก ืฉืืœื™ื• ืฉื™ื™ืš ื”ื‘ื ืื™ ื”ื–ื” - ื›ืœื•ืžืจ, ืœืžืขืฉื”, ืชืช-ื”ื˜ื™ืคื•ืก. ื”ื‘ื—ื•ืจ ืžื™ืžื™ืŸ ืœืกื™ืžืŸ ื”ืฉื•ื•ื” ื”ื•ื ืจึทื‘ ืฆื•ึผืจื•ึนืช - ื›ืœื•ืžืจ, ื›ืžื” ืกื•ื’ื™ื ืกืคืฆื™ืคื™ื™ื ื™ื›ื•ืœื™ื ืœื”ืชืื™ื ืœื–ื”.

ืื ื”ื”ื’ื“ืจื” ืžืชืจื—ืฉืช ืื—ืจื™ ื”ืฉื•ืจื” ---functions---, ืื– ื”ืชื—ื‘ื™ืจ ื™ื™ืฉืืจ ื–ื”ื”, ืื‘ืœ ื”ืžืฉืžืขื•ืช ืชื”ื™ื” ืฉื•ื ื”: ื”ื‘ื ืื™ ื™ื”ืคื•ืš ืœืฉื ื”ืคื•ื ืงืฆื™ื” RPC, ื”ืฉื“ื•ืช ื™ื”ืคื›ื• ืœืคืจืžื˜ืจื™ื (ื˜ื•ื‘, ื›ืœื•ืžืจ, ื–ื” ื™ื™ืฉืืจ ื‘ื“ื™ื•ืง ืื•ืชื• ืžื‘ื ื” ื ืชื•ืŸ, ื›ืคื™ ืฉืžืชื•ืืจ ืœื”ืœืŸ , ื–ื• ืคืฉื•ื˜ ืชื”ื™ื” ื”ืžืฉืžืขื•ืช ื”ืžื•ืงืฆื™ืช), ื•ื”"ื˜ื™ืคื•ืก ื”ืคื•ืœื™ืžื•ืจืคื™ " - ืกื•ื’ ื”ืชื•ืฆืื” ื”ืžื•ื—ื–ืจืช. ื ื›ื•ืŸ, ื–ื” ืขื“ื™ื™ืŸ ื™ื™ืฉืืจ ืคื•ืœื™ืžื•ืจืคื™ - ืจืง ืžื•ื’ื“ืจ ื‘ืกืขื™ืฃ ---types---, ืื‘ืœ ื‘ื ืื™ ื–ื” "ืœื ื™ื™ื—ืฉื‘". ื”ืขืžืกืช ื™ืชืจ ืฉืœ ืกื•ื’ื™ ื”ืคื•ื ืงืฆื™ื•ืช ื”ื ืงืจืื•ืช ืขืœ ื™ื“ื™ ื”ืืจื’ื•ืžื ื˜ื™ื ืฉืœื”ืŸ, ื›ืœื•ืžืจ. ืžืกื™ื‘ื” ื›ืœืฉื”ื™, ืžืกืคืจ ืคื•ื ืงืฆื™ื•ืช ืขื ืื•ืชื• ืฉื ืืš ื—ืชื™ืžื•ืช ืฉื•ื ื•ืช, ื›ืžื• ื‘-C++, ืื™ื ืŸ ืžืกื•ืคืงื•ืช ื‘-TL.

ืœืžื” "ืงื•ื ืกื˜ืจื•ืงื˜ื•ืจ" ื•"ืคื•ืœื™ืžื•ืจืคื™" ืื ื–ื” ืœื OOP? ื•ื‘ื›ืŸ, ืœืžืขืฉื”, ืœืžื™ืฉื”ื• ื™ื”ื™ื” ืงืœ ื™ื•ืชืจ ืœื—ืฉื•ื‘ ืขืœ ื–ื” ื‘ืžื•ื ื—ื™ OOP - ื˜ื™ืคื•ืก ืคื•ืœื™ืžื•ืจืคื™ ื›ืžื—ืœืงื” ืžื•ืคืฉื˜ืช, ื•ื‘ื ืื™ื ื”ื ืžื—ืœืงื•ืช ืฆืืฆืื™ื ื™ืฉื™ืจื™ื ืฉืœื•, ื• final ื‘ื˜ืจืžื™ื ื•ืœื•ื’ื™ื” ืฉืœ ืžืกืคืจ ืฉืคื•ืช. ืœืžืขืฉื”, ื›ืžื•ื‘ืŸ, ืจืง ื›ืืŸ ื“ึดืžื™ื•ึนืŸ ืขื ืฉื™ื˜ื•ืช ื‘ื ืื™ ืขืžื•ืกื•ืช ืžื“ื™ ื‘ืฉืคื•ืช ืชื›ื ื•ืช OO. ืžื›ื™ื•ื•ืŸ ืฉื›ืืŸ ืจืง ืžื‘ื ื™ ื ืชื•ื ื™ื, ืื™ืŸ ืฉื™ื˜ื•ืช (ืœืžืจื•ืช ืฉืชื™ืื•ืจ ื”ืคื•ื ืงืฆื™ื•ืช ื•ื”ืฉื™ื˜ื•ืช ืขื•ื“ ื™ื•ืชืจ ืžืกื•ื’ืœ ืœื™ืฆื•ืจ ื‘ืœื‘ื•ืœ ื‘ืจืืฉ ืฉื”ื ืงื™ื™ืžื™ื, ืื‘ืœ ื–ื” ืขื ื™ื™ืŸ ืื—ืจ) - ืืคืฉืจ ืœื—ืฉื•ื‘ ืขืœ ื‘ื ืื™ ื›ืขืจืš ืž- ืื™ื–ื” ื ื‘ื ื” ื”ืงืœื“ ื‘ืขืช ืงืจื™ืืช ื–ืจื ื‘ืชื™ื.

ืื™ืš ื–ื” ืงื•ืจื”? ื”-deserializer, ืฉืชืžื™ื“ ืงื•ืจื 4 ื‘ืชื™ื, ืจื•ืื” ืืช ื”ืขืจืš 0xcrc32 - ื•ืžื‘ื™ืŸ ืžื” ื™ืงืจื” ืื—ืจ ื›ืš field1 ืขื ืกื•ื’ int, ื›ืœื•ืžืจ ืงื•ืจื ื‘ื“ื™ื•ืง 4 ื‘ืชื™ื, ืขืœ ื–ื” ื”ืฉื“ื” ืฉืžืขืœ ืขื ื”ืกื•ื’ PolymorType ืœืงืจื•ื. ืจื•ืื” 0x2crc32 ื•ืžื‘ื™ืŸ ืฉื™ืฉ ืฉื ื™ ืชื—ื•ืžื™ื ื ื•ืกืคื™ื, ืจืืฉื™ืช long, ื›ืœื•ืžืจ ืื ื• ืงื•ืจืื™ื 8 ื‘ืชื™ื. ื•ืื—ืจ ื›ืš ืฉื•ื‘ ื˜ื™ืคื•ืก ืžื•ืจื›ื‘, ืฉืžืกื™ืจื™ื ืื•ืชื• ื‘ืื•ืชื• ืื•ืคืŸ. ืœื“ื•ื’ืžื”, Type3 ื ื™ืชืŸ ืœื”ื›ืจื™ื– ื‘ืžืขื’ืœ ื‘ืจื’ืข ืฉืฉื ื™ ื‘ื ืื™ื, ื‘ื”ืชืืžื”, ืื– ื”ื ื—ื™ื™ื‘ื™ื ืœื”ื™ืคื’ืฉ ืขื ืื—ื“ ืžื”ื 0x12abcd34, ืœืื—ืจ ืžื›ืŸ ืืชื” ืฆืจื™ืš ืœืงืจื•ื 4 ื‘ืชื™ื ื ื•ืกืคื™ื intืื• 0x6789cdef, ืฉืื—ืจื™ื• ืœื ื™ื”ื™ื” ื›ืœื•ื. ื›ืœ ื“ื‘ืจ ืื—ืจ - ืืชื” ืฆืจื™ืš ืœื–ืจื•ืง ื—ืจื™ื’. ื‘ื›ืœ ืžืงืจื”, ืื—ืจื™ ื–ื” ืื ื—ื ื• ื—ื•ื–ืจื™ื ืœืงืจื•ื 4 ื‘ืชื™ื int ืฉื“ื•ืช field_c ะฒ constructorTwo ื•ืขื ื–ื” ืื ื—ื ื• ืžืกื™ื™ืžื™ื ืœืงืจื•ื ืืช ืฉืœื ื• PolymorType.

ืœื‘ืกื•ืฃ, ืื ืชื™ืชืคืก 0xdeadcrc ืขื‘ื•ืจ constructorThree, ื•ืื– ื”ื›ืœ ื”ื•ืคืš ืžืกื•ื‘ืš ื™ื•ืชืจ. ื”ืชื—ื•ื ื”ืจืืฉื•ืŸ ืฉืœื ื• ื”ื•ื bit_flags_of_what_really_present ืขื ืกื•ื’ # - ืœืžืขืฉื”, ื–ื” ืจืง ื›ื™ื ื•ื™ ืœืกื•ื’ nat, ื›ืœื•ืžืจ "ืžืกืคืจ ื˜ื‘ืขื™". ื›ืœื•ืžืจ, ืœืžืขืฉื”, int unsigned ื”ื•ื, ืื’ื‘, ื”ืžืงืจื” ื”ื™ื—ื™ื“ ื›ืืฉืจ ืžืกืคืจื™ื ื—ืกืจื™ ืกื™ืžืŸ ืžืชืจื—ืฉื™ื ื‘ืžืขื’ืœื™ื ืืžื™ืชื™ื™ื. ืื–, ื”ื‘ื ื”ื•ื ื‘ื ื™ื™ื” ืขื ืกื™ืžืŸ ืฉืืœื”, ื›ืœื•ืžืจ ื”ืฉื“ื” ื”ื–ื” - ื”ื•ื ื™ื”ื™ื” ืงื™ื™ื ืขืœ ื”ื—ื•ื˜ ืจืง ืื ื”ืกื™ื‘ื™ืช ื”ืžืงื‘ื™ืœื” ืžื•ื’ื“ืจืช ื‘ืฉื“ื” ืฉืืœื™ื• ืžืชื™ื™ื—ืกื™ื (ื‘ืขืจืš ื›ืžื• ืื•ืคืจื˜ื•ืจ ื˜ืจื™ื ืจื™). ืื–, ื‘ื•ืื• ื ื ื™ื— ืฉื”ื‘ื™ื˜ ื”ื–ื” ื”ื•ื’ื“ืจ, ืžื” ืฉืื•ืžืจ ืฉืขื•ื“ ืขืœื™ื ื• ืœืงืจื•ื ืฉื“ื” ื›ืžื• Type, ืฉื‘ื“ื•ื’ืžื” ืฉืœื ื• ื™ืฉ 2 ื‘ื ืื™ื. ืื—ื“ ืจื™ืง (ืžื•ืจื›ื‘ ืจืง ืžื”ืžื–ื”ื”), ืœืฉื ื™ ื™ืฉ ืฉื“ื” ids ืขื ืกื•ื’ ids:Vector<long>.

ืืชื” ืขืฉื•ื™ ืœื—ืฉื•ื‘ ืฉื’ื ื”ืชื‘ื ื™ื•ืช ื•ื’ื ื”ื’ื ืจื™ื•ืช ื ืžืฆืื•ืช ื‘ืžืงืฆื•ืขื ื™ื ืื• ื‘-Java. ืื‘ืœ ืœื. ื›ึผึดืžืขึทื˜. ื–ึถื” ื™ื—ื™ื“ ื‘ืžืงืจื” ืฉืœ ืฉื™ืžื•ืฉ ื‘ืกื•ื’ืจื™ื™ื ื–ื•ื•ื™ืช ื‘ืžืขื’ืœื™ื ืืžื™ืชื™ื™ื, ื•ื”ื•ื ืžืฉืžืฉ ืจืง ืขื‘ื•ืจ ื•ืงื˜ื•ืจ. ื‘ื–ืจื ื‘ืชื™ื, ืืœื” ื™ื”ื™ื• 4 CRC32 ื‘ืชื™ื ืขื‘ื•ืจ ืกื•ื’ ื”ื•ืงื˜ื•ืจ ืขืฆืžื•, ืชืžื™ื“ ื–ื”ื™ื, ืœืื—ืจ ืžื›ืŸ 4 ื‘ืชื™ื - ืžืกืคืจ ืจื›ื™ื‘ื™ ื”ืžืขืจืš, ื•ืœืื—ืจ ืžื›ืŸ ื”ืืœืžื ื˜ื™ื ื”ืœืœื• ืขืฆืžื.

ืชื•ืกื™ืคื• ืœื–ื” ืืช ื”ืขื•ื‘ื“ื” ืฉื”ืกื“ืจื” ืชืžื™ื“ ืžืชืจื—ืฉืช ื‘ืžื™ืœื™ื ืฉืœ 4 ื‘ืชื™ื, ื›ืœ ื”ืกื•ื’ื™ื ื”ื ื›ืคื•ืœื•ืช ืฉืœื• - ื’ื ื”ืกื•ื’ื™ื ื”ืžื•ื‘ื ื™ื ืžืชื•ืืจื™ื bytes ะธ string ืขื ืกื“ืจื” ื™ื“ื ื™ืช ืฉืœ ื”ืื•ืจืš ื•ื”ื™ื™ืฉื•ืจ ื”ื–ื” ื‘-4 - ื•ื‘ื›ืŸ, ื ืจืื” ืฉื–ื” ื ืฉืžืข ื ื•ืจืžืœื™ ื•ืืคื™ืœื• ื™ืขื™ืœ ื™ื—ืกื™ืช? ืœืžืจื•ืช ืฉืœื˜ืขื ืช TL ื”ื ืกื“ืจื” ื‘ื™ื ืืจื™ืช ื™ืขื™ืœื”, ืœืขื–ืื–ืœ ืื™ืชื, ืขื ื”ืจื—ื‘ื” ืฉืœ ื›ืžืขื˜ ื›ืœ ื“ื‘ืจ, ืืคื™ืœื• ืขืจื›ื™ื ื‘ื•ืœื™ืื ื™ื™ื ื•ืžื—ืจื•ื–ื•ืช ืฉืœ ืชื• ื‘ื•ื“ื“ ืœ-4 ื‘ืชื™ื, ื”ืื ื”-JSON ืขื“ื™ื™ืŸ ื™ื”ื™ื” ื”ืจื‘ื” ื™ื•ืชืจ ืขื‘ื”? ืชืจืื”, ืืคื™ืœื• ืฉื“ื•ืช ืžื™ื•ืชืจื™ื ืืคืฉืจ ืœื“ืœื’ ืขื ื“ื’ืœื™ ื‘ื™ื˜, ื”ื›ืœ ื“ื™ ื˜ื•ื‘, ื•ืืคื™ืœื• ื ื™ืชืŸ ืœื”ืจื—ื‘ื” ืœืขืชื™ื“, ืื– ืœืžื” ืœื ืœื”ื•ืกื™ืฃ ืฉื“ื•ืช ืื•ืคืฆื™ื•ื ืœื™ื™ื ื—ื“ืฉื™ื ืœื‘ื ืื™ ืžืื•ื—ืจ ื™ื•ืชืจ?..

ืื‘ืœ ืœื, ืื ืืชื” ืœื ืงื•ืจื ืืช ื”ืชื™ืื•ืจ ื”ืงืฆืจ ืฉืœื™, ืืœื ืืช ื”ืชื™ืขื•ื“ ื”ืžืœื, ื•ื—ื•ืฉื‘ ืขืœ ื”ื™ื™ืฉื•ื. ืจืืฉื™ืช, ื”-CRC32 ืฉืœ ื”ื‘ื ืื™ ืžื—ื•ืฉื‘ ืœืคื™ ื”ืฉื•ืจื” ื”ืžื ื•ืจืžืœืช ืฉืœ ืชื™ืื•ืจ ื”ื˜ืงืกื˜ ืฉืœ ื”ืกื›ื™ืžื” (ื”ืกืจ ืจื•ื•ื— ืœื‘ืŸ ื ื•ืกืฃ ื•ื›ื•') - ื›ืš ืฉืื ื™ืชื•ื•ืกืฃ ืฉื“ื” ื—ื“ืฉ, ืฉื•ืจืช ืชื™ืื•ืจ ื”ืกื•ื’ ืชืฉืชื ื”, ื•ืžื›ืืŸ ืฉืœื” CRC32 ื•- , ื›ืชื•ืฆืื” ืžื›ืš, ืกื“ืจื”. ื•ืžื” ื™ืขืฉื” ื”ืœืงื•ื— ื”ื•ื•ืชื™ืง ืื ื™ืงื‘ืœ ืฉื“ื” ืขื ื“ื’ืœื™ื ื—ื“ืฉื™ื, ื•ื”ื•ื ืœื ื™ื•ื“ืข ืžื” ืœืขืฉื•ืช ืื™ืชื ื”ืœืื”?...

ืฉื ื™ืช, ื‘ื•ืื• ื ื–ื›ื•ืจ CRC32, ื”ืžืฉืžืฉ ื›ืืŸ ื‘ืขื™ืงืจื• ื› ืคื•ื ืงืฆื™ื•ืช ื—ืฉื™ืฉ ื›ื“ื™ ืœืงื‘ื•ืข ื‘ืื•ืคืŸ ื™ื™ื—ื•ื“ื™ ืื™ื–ื” ืกื•ื’ ืžื•ืขื‘ืจ (ื“ื”) ื‘ืกื™ื“ืจื”. ื›ืืŸ ืื ื• ืžืชืžื•ื“ื“ื™ื ืขื ื‘ืขื™ื™ืช ื”ื”ืชื ื’ืฉื•ื™ื•ืช - ื•ืœื, ื”ื”ืกืชื‘ืจื•ืช ื”ื™ื ืœื ืื—ืช ืœ-232, ืืœื ื”ืจื‘ื” ื™ื•ืชืจ ื’ื“ื•ืœื”. ืžื™ ื–ื›ืจ ืฉ-CRC32 ื ื•ืขื“ ืœื–ื”ื•ืช (ื•ืœืชืงืŸ) ืฉื’ื™ืื•ืช ื‘ืขืจื•ืฅ ื”ืชืงืฉื•ืจืช, ื•ื‘ื”ืชืื ืžืฉืคืจ ืืช ื”ืžืืคื™ื™ื ื™ื ื”ืœืœื• ืœืจืขืช ืื—ืจื™ื? ืœื“ื•ื’ืžื”, ืœื ืื›ืคืช ืœื• ืžืืจื’ื•ืŸ ืžื—ื“ืฉ ืฉืœ ื‘ืชื™ื: ืื ืชื—ืฉื‘ CRC32 ืžืฉืชื™ ืฉื•ืจื•ืช, ื‘ืฉื ื™ื” ืชื—ืœื™ืฃ ืืช 4 ื”ื‘ืชื™ื ื”ืจืืฉื•ื ื™ื ืขื 4 ื”ื‘ืชื™ื ื”ื‘ืื™ื - ื–ื” ื™ื”ื™ื” ื–ื”ื”. ื›ืืฉืจ ื”ืงืœื˜ ืฉืœื ื• ื”ื•ื ืžื—ืจื•ื–ื•ืช ื˜ืงืกื˜ ืžื”ืืœืคื‘ื™ืช ื”ืœื˜ื™ื ื™ (ื•ืžืขื˜ ืกื™ืžื ื™ ืคื™ืกื•ืง), ื•ื”ืฉืžื•ืช ื”ืœืœื• ืื™ื ื ืืงืจืื™ื™ื ื‘ืžื™ื•ื—ื“, ื”ืกื‘ื™ืจื•ืช ืœืกื™ื“ื•ืจ ืžื—ื“ืฉ ื›ื–ื” ืขื•ืœื” ืžืื•ื“.

ืื’ื‘, ืžื™ ื‘ื“ืง ืžื” ื™ืฉ? ื‘ืืžืช CRC32? ืœืื—ื“ ืžืงื•ื“ื™ ื”ืžืงื•ืจ ื”ืžื•ืงื“ืžื™ื (ืืคื™ืœื• ืœืคื ื™ ื•ื•ืœื˜ืžืŸ) ื”ื™ื™ืชื” ืคื•ื ืงืฆื™ื™ืช Hash ืฉื”ื›ืคื™ืœื” ื›ืœ ืชื• ื‘ืžืกืคืจ 239, ื›ืœ ื›ืš ืื”ื•ื‘ื” ืขืœ ื”ืื ืฉื™ื ื”ืืœื”, ื—ื” ื—ื”!

ืœื‘ืกื•ืฃ, ื‘ืกื“ืจ, ื”ื‘ื ื• ืฉืงื•ื ืกื˜ืจื•ืงื˜ื•ืจื™ื ืขื ืกื•ื’ ืฉื“ื” Vector<int> ะธ Vector<PolymorType> ื™ื”ื™ื” CRC32 ืฉื•ื ื”. ืžื” ืœื’ื‘ื™ ื‘ื™ืฆื•ืขื™ื ืžืงื•ื•ื ื™ื? ื•ืžื ืงื•ื“ืช ืžื‘ื˜ ืชื™ืื•ืจื˜ื™ืช, ื”ืื ื–ื” ื”ื•ืคืš ืœื—ืœืง ืžื”ืกื•ื’? ื ื ื™ื— ืฉืื ื—ื ื• ืขื•ื‘ืจื™ื ืžืขืจืš ืฉืœ ืขืฉืจืช ืืœืคื™ื ืžืกืคืจื™ื, ื˜ื•ื‘ ืขื Vector<int> ื”ื›ืœ ื‘ืจื•ืจ, ื”ืื•ืจืš ื•ืขื•ื“ 40000 ื‘ืชื™ื. ืžื” ืื ื–ื” Vector<Type2>, ื”ืžื•ืจื›ื‘ ืžืฉื“ื” ืื—ื“ ื‘ืœื‘ื“ int ื•ื–ื” ืœื‘ื“ ื‘ืกื•ื’ - ื”ืื ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื—ื–ื•ืจ ืขืœ 10000xabcdef0 34 ืคืขืžื™ื ื•ืื– 4 ื‘ืชื™ื int, ืื• ืฉื”ืฉืคื” ืžืกื•ื’ืœืช ืœื ืชื— ืื•ืชื” ืขื‘ื•ืจื ื• ืžื”ืงื•ื ืกื˜ืจื•ืงื˜ื•ืจ fixedVec ื•ื‘ืžืงื•ื 80000 ื‘ืชื™ื, ืœื”ืขื‘ื™ืจ ืฉื•ื‘ ืจืง 40000?

ื–ื• ืœื ืฉืืœื” ืชื™ืื•ืจื˜ื™ืช ืกืจืง ื‘ื›ืœืœ - ื“ืžื™ื™ื ื• ืฉืืชื ืžืงื‘ืœื™ื ืจืฉื™ืžื” ืฉืœ ืžืฉืชืžืฉื™ื ื‘ืงื‘ื•ืฆื”, ืฉืœื›ืœ ืื—ื“ ืžื”ื ื™ืฉ ืชืขื•ื“ื” ืžื–ื”ื”, ืฉื ืคืจื˜ื™, ืฉื ืžืฉืคื—ื” - ื”ื”ื‘ื“ืœ ื‘ื›ืžื•ืช ื”ื ืชื•ื ื™ื ื”ืžื•ืขื‘ืจื™ื ื‘ื—ื™ื‘ื•ืจ ืกืœื•ืœืจื™ ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืฉืžืขื•ืชื™. ื“ื•ื•ืงื ื”ืืคืงื˜ื™ื‘ื™ื•ืช ืฉืœ ื”ืกื“ืจืช ื˜ืœื’ืจื ืžืชืคืจืกืžืช ืœื ื•.

ืื– ...

ื•ืงื˜ื•ืจ, ืฉืžืขื•ืœื ืœื ืฉื•ื—ืจืจ

ืื ืชื ืกื• ืœื“ืคื“ืฃ ื‘ื™ืŸ ื“ืคื™ ื”ืชื™ืื•ืจ ืฉืœ ืฉื™ืœื•ื‘ื™ื ื•ื›ืŸ ื”ืœืื”, ืชืจืื• ืฉื•ื•ืงื˜ื•ืจ (ื•ืืคื™ืœื• ืžื˜ืจื™ืฆื”) ืžื ืกื” ืจืฉืžื™ืช ืœื”ื™ื•ืช ืคืœื˜ ื“ืจืš ื˜ื•ืคืœื™ื ืฉืœ ืžืกืคืจ ื’ื™ืœื™ื•ื ื•ืช. ืื‘ืœ ื‘ืกื•ืฃ ื”ื ืฉื•ื›ื—ื™ื, ืžื“ืœื’ื™ื ืขืœ ื”ืฉืœื‘ ื”ืื—ืจื•ืŸ, ื•ืคืฉื•ื˜ ื ื™ืชื ืช ื”ื’ื“ืจื” ืฉืœ ื•ืงื˜ื•ืจ, ืฉืขื“ื™ื™ืŸ ืœื ืงืฉื•ืจ ืœื˜ื™ืคื•ืก. ืžื” ื”ื‘ืขื™ื”? ื‘ืฉืคื•ืช ืชื›ื ื•ืช, ื‘ืžื™ื•ื—ื“ ืคื•ื ืงืฆื™ื•ื ืœื™ื™ื, ื“ื™ ืื•ืคื™ื™ื ื™ ืœืชืืจ ืืช ื”ืžื‘ื ื” ื‘ืื•ืคืŸ ืจืงื•ืจืกื™ื‘ื™ - ื”ืžื”ื“ืจ ืขื ื”ื”ืขืจื›ื” ื”ืขืฆืœื” ืฉืœื• ื™ื‘ื™ืŸ ื•ื™ืขืฉื” ื”ื›ืœ ื‘ืขืฆืžื•. ื‘ืฉืคื” ื”ืกื“ืจืช ื ืชื•ื ื™ื ืžื” ืฉืฆืจื™ืš ื–ื” ื™ืขื™ืœื•ืช: ืžืกืคื™ืง ืœืชืืจ ื‘ืคืฉื˜ื•ืช ัะฟะธัะพะบ, ื›ืœื•ืžืจ ืžื‘ื ื” ืฉืœ ืฉื ื™ ืืœืžื ื˜ื™ื - ื”ืจืืฉื•ืŸ ื”ื•ื ืืœืžื ื˜ ื ืชื•ื ื™ื, ื”ืฉื ื™ ื”ื•ื ืื•ืชื• ืžื‘ื ื” ืขืฆืžื• ืื• ื—ืœืœ ืจื™ืง ืขื‘ื•ืจ ื”ื–ื ื‘ (ื—ื‘ื™ืœื” (cons) ื‘ืœื™ืกืค). ืื‘ืœ ื–ื” ื›ืžื•ื‘ืŸ ื™ื“ืจื•ืฉ ื›ืœ ืืœืžื ื˜ ืžื•ืฆื™ื 4 ื‘ืชื™ื ื ื•ืกืคื™ื (CRC32 ื‘ืžืงืจื” ื‘-TL) ื›ื“ื™ ืœืชืืจ ืืช ื”ืกื•ื’ ืฉืœื•. ื ื™ืชืŸ ื’ื ืœืชืืจ ืžืขืจืš ื‘ืงืœื•ืช ืžื™ื“ื” ืงื‘ื•ืขื”, ืื‘ืœ ื‘ืžืงืจื” ืฉืœ ืžืขืจืš ื‘ืื•ืจืš ืœื ื™ื“ื•ืข ืžืจืืฉ, ืื ื—ื ื• ืžืชื ืชืงื™ื.

ืœื›ืŸ, ืžื›ื™ื•ื•ืŸ ืฉ-TL ืื™ื ื• ืžืืคืฉืจ ืœื”ื•ืฆื™ื ื•ืงื˜ื•ืจ, ื”ื™ื” ืฆื•ืจืš ืœื”ื•ืกื™ืฃ ืื•ืชื• ื‘ืฆื“. ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื”ืชื™ืขื•ื“ ืื•ืžืจ:

ืกืจื™ืืœื™ื–ืฆื™ื” ืžืฉืชืžืฉืช ืชืžื™ื“ ื‘ืื•ืชื• ื”ื‘ื ืื™ "ื•ืงื˜ื•ืจ" (const 0x1cb5c415 = crc32("vector t:Type # [ t ] = Vector t") ืฉืื™ื ื• ืชืœื•ื™ ื‘ืขืจืš ื”ืกืคืฆื™ืคื™ ืฉืœ ื”ืžืฉืชื ื” ืžืกื•ื’ t.

ื”ืขืจืš ืฉืœ ื”ืคืจืžื˜ืจ ื”ืื•ืคืฆื™ื•ื ืœื™ t ืื™ื ื• ืžืขื•ืจื‘ ื‘ืกืจื™ืืœื™ื–ืฆื™ื” ืžื›ื™ื•ื•ืŸ ืฉื”ื•ื ื ื’ื–ืจ ืžืกื•ื’ ื”ืชื•ืฆืื” (ื™ื“ื•ืข ืชืžื™ื“ ืœืคื ื™ ื”ืกื™ื“ืจื™ืืœื™ื–ืฆื™ื”).

ืชืกืชื›ืœ ืžืงืจื•ื‘: vector {t:Type} # [ t ] = Vector t - ืื‘ืœ ื‘ืฉื•ื ืžืงื•ื ื”ื’ื“ืจื” ื–ื• ืขืฆืžื” ืœื ืื•ืžืจืช ืฉื”ืžืกืคืจ ื”ืจืืฉื•ืŸ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืฉื•ื•ื” ืœืื•ืจืš ื”ื•ื•ืงื˜ื•ืจ! ื•ื–ื” ืœื ื‘ื ืžืฉื•ื ืžืงื•ื. ื–ื” ื ืชื•ืŸ ืฉืฆืจื™ืš ืœื–ื›ื•ืจ ื•ืœื™ื™ืฉื ืขื ื”ื™ื“ื™ื™ื. ื‘ืžืงื•ืžื•ืช ืื—ืจื™ื, ื”ืชื™ืขื•ื“ ืืคื™ืœื• ืžื–ื›ื™ืจ ื‘ื›ื ื•ืช ืฉื”ื˜ื™ืคื•ืก ืื™ื ื• ืืžื™ืชื™:

ื”ืคืกืื•ื“ื•ื˜ื™ื™ืค ื”ืคื•ืœื™ืžื•ืจืคื™ ืฉืœ Vector t ื”ื•ื "ื˜ื™ืคื•ืก" ืฉืขืจื›ื• ื”ื•ื ืจืฆืฃ ืฉืœ ืขืจื›ื™ื ืžื›ืœ ืกื•ื’ t, ื‘ื™ืŸ ืื ืžืงื•ืคืกืช ืื• ื—ืฉื•ืคื”.

... ืื‘ืœ ืœื ืžืชืžืงื“ ื‘ื–ื”. ื›ืฉืืชื, ืขื™ื™ืคื™ื ืžืœืฉืชืคืฉืฃ ื‘ืžืชื™ื—ื•ืช ืฉืœ ื”ืžืชืžื˜ื™ืงื” (ืื•ืœื™ ืืคื™ืœื• ืžื•ื›ืจ ืœื›ื ืžืงื•ืจืก ื‘ืื•ื ื™ื‘ืจืกื™ื˜ื”), ืžื—ืœื™ื˜ื™ื ืœื•ื•ืชืจ ื•ืœืžืขืฉื” ื‘ื•ื—ื ื™ื ืื™ืš ืขื•ื‘ื“ื™ื ืขื ื–ื” ื‘ืคื•ืขืœ, ื”ืจื•ืฉื ืฉื ื•ืชืจ ื‘ืจืืฉื›ื ื”ื•ื ืฉืžื“ื•ื‘ืจ ื‘ืจืฆื™ื ื•ืช ืžืชืžื˜ื™ืงื” ื‘ื‘ืกื™ืกื”, ื‘ืจื•ืจ ืฉื”ื™ื ื”ื•ืžืฆืื” ืขืœ ื™ื“ื™ Cool People (ืฉื ื™ ืžืชืžื˜ื™ืงืื™ื - ื–ื•ื›ื” ACM), ื•ืœื ืกืชื ืžื™ืฉื”ื•. ื”ืžื˜ืจื” - ืœื”ืฉื•ื•ื™ืฅ - ื”ื•ืฉื’ื”.

ืื’ื‘, ืœื’ื‘ื™ ื”ืžืกืคืจ. ืชืŸ ืœื ื• ืœื”ื–ื›ื™ืจ ืœืš ืืช ื–ื” # ื–ื• ืžื™ืœื” ื ืจื“ืคืช nat, ืžืกืคืจ ื˜ื‘ืขื™:

ื™ืฉ ื‘ื™ื˜ื•ื™ื™ ืกื•ื’ (type-expr) ื•ื‘ื™ื˜ื•ื™ื™ื ืžืกืคืจื™ื™ื (nat-expr). ืขื ื–ืืช, ื”ื ืžื•ื’ื“ืจื™ื ื‘ืื•ืชื• ืื•ืคืŸ.

type-expr ::= expr
nat-expr ::= expr

ืื‘ืœ ื‘ื“ืงื“ื•ืง ื”ื ืžืชื•ืืจื™ื ื‘ืื•ืชื• ืื•ืคืŸ, ื›ืœื•ืžืจ. ื™ืฉ ืœื–ื›ื•ืจ ืฉื•ื‘ ืืช ื”ื”ื‘ื“ืœ ื”ื–ื” ื•ืœื”ื›ื ื™ืก ืื•ืชื• ืœื™ื™ืฉื•ื ื‘ืื•ืคืŸ ื™ื“ื ื™.

ื•ื‘ื›ืŸ, ื›ืŸ, ืกื•ื’ื™ ืชื‘ื ื™ื•ืช (vector<int>, vector<User>) ื‘ืขืœื™ ืžื–ื”ื” ืžืฉื•ืชืฃ (#1cb5c415), ื›ืœื•ืžืจ. ืื ืืชื” ื™ื•ื“ืข ืฉื”ืฉื™ื—ื” ื”ื•ื›ืจื–ื” ื›

users.getUsers#d91a548 id:Vector<InputUser> = Vector<User>;

ืื– ืืชื” ื›ื‘ืจ ืœื ืžื—ื›ื” ืจืง ืœื•ืงื˜ื•ืจ, ืืœื ืœื•ืงื˜ื•ืจ ืฉืœ ืžืฉืชืžืฉื™ื. ืœื™ื™ืชืจ ื“ื™ื•ืง, ืฆืจื™ืš ืจื’ืข - ื‘ืงื•ื“ ืืžื™ืชื™, ืœื›ืœ ืืœืžื ื˜, ืื ืœื ืกื•ื’ ื—ืฉื•ืฃ, ื™ื”ื™ื” ื‘ื ืื™, ื•ื‘ืฆื•ืจื” ื˜ื•ื‘ื” ื‘ื™ื™ืฉื•ื ื™ื”ื™ื” ืฆื•ืจืš ืœื‘ื“ื•ืง - ืื‘ืœ ื ืฉืœื—ื ื• ื‘ื“ื™ื•ืง ื‘ื›ืœ ืืœืžื ื˜ ืฉืœ ื”ื•ื•ืงื˜ื•ืจ ื”ื–ื” ื”ืกื•ื’ ื”ื–ื”? ืžื” ืื ื–ื” ื”ื™ื” ืกื•ื’ ืฉืœ PHP, ืฉื‘ื• ืžืขืจืš ื™ื›ื•ืœ ืœื”ื›ื™ืœ ืกื•ื’ื™ื ืฉื•ื ื™ื ื‘ืืœืžื ื˜ื™ื ืฉื•ื ื™ื?

ื‘ืฉืœื‘ ื–ื” ืืชื” ืžืชื—ื™ืœ ืœื—ืฉื•ื‘ - ื”ืื TL ื›ื–ื” ื”ื›ืจื—ื™? ืื•ืœื™ ืขื‘ื•ืจ ื”ืขื’ืœื” ืืคืฉืจ ื™ื”ื™ื” ืœื”ืฉืชืžืฉ ื‘ืกืจื™ืืœื™ื™ื–ืจ ืื ื•ืฉื™, ืื•ืชื• ืคืจื•ื˜ื•ื‘ื•ืฃ ืฉื›ื‘ืจ ื”ื™ื” ืงื™ื™ื ืื–? ื–ื• ื”ื™ื™ืชื” ื”ืชื™ืื•ืจื™ื”, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืคืจืงื˜ื™ืงื”.

ืžื™ืžื•ืฉื™ TL ืงื™ื™ืžื™ื ื‘ืงื•ื“

TL ื ื•ืœื“ื” ื‘ืžืขืžืงื™ VKontakte ืขื•ื“ ืœืคื ื™ ื”ืื™ืจื•ืขื™ื ื”ืžืคื•ืจืกืžื™ื ืขื ืžื›ื™ืจืช ื—ืœืงื• ืฉืœ ื“ื•ืจื•ื‘ ื•-(ื‘ื•ื•ื“ืื™), ืขื•ื“ ืœืคื ื™ ืชื—ื™ืœืช ื”ืคื™ืชื•ื— ืฉืœ ื˜ืœื’ืจื. ื•ื‘ืงื•ื“ ืคืชื•ื— ืงื•ื“ ื”ืžืงื•ืจ ืฉืœ ื”ื™ื™ืฉื•ื ื”ืจืืฉื•ืŸ ืืชื” ื™ื›ื•ืœ ืœืžืฆื•ื ื”ืจื‘ื” ืงื‘ื™ื™ื ืžืฆื—ื™ืงื™ื. ื•ื”ืฉืคื” ืขืฆืžื” ื™ื•ืฉืžื” ืฉื ื‘ืฆื•ืจื” ืžืœืื” ื™ื•ืชืจ ืžืžื” ืฉื”ื™ื ืขื›ืฉื™ื• ื‘ื˜ืœื’ืจื. ืœื“ื•ื’ืžื”, ื”ื’ื™ื‘ื•ื‘ ืื™ื ื• ืžืฉืžืฉ ื›ืœืœ ื‘ืกื›ื™ืžื” (ื›ืœื•ืžืจ ืคืกืื•ื“ื•ื˜ื™ื™ืค ืžื•ื‘ื ื” (ื›ืžื• ื•ืงื˜ื•ืจ) ืขื ื”ืชื ื”ื’ื•ืช ืกื•ื˜ื”). ืื•ึน

Templates are not used now. Instead, the same universal constructors (for example, vector {t:Type} [t] = Vector t) are used w

ืื‘ืœ ื”ื‘ื” ื ืฉืงื•ืœ, ืœืžืขืŸ ื”ืฉืœืžื•ืช, ืœื”ืชื—ืงื•ืช, ื›ื‘ื™ื›ื•ืœ, ืื—ืจ ื”ืชืคืชื—ื•ืชื• ืฉืœ ืขื ืง ื”ืžื—ืฉื‘ื”.

#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>;

ื–ื•ื”ื™ ื”ื”ื’ื“ืจื” ืฉืœ ืกื•ื’ ืชื‘ื ื™ืช hashmap ื‘ืชื•ืจ ื•ืงื˜ื•ืจ ืฉืœ ื–ื•ื’ื•ืช int - Type. ื‘-C++ ื–ื” ื™ื™ืจืื” ื‘ืขืจืš ื›ืš:

    template <T> class IntHash {
      vector<pair<int,T>> _map;
    }

ื›ืš, alpha - ืžื™ืœืช ืžืคืชื—! ืื‘ืœ ืจืง ื‘-C++ ืืคืฉืจ ืœื›ืชื•ื‘ T, ืื‘ืœ ืฆืจื™ืš ืœื›ืชื•ื‘ ืืœืคื, ื‘ื˜ื... ืื‘ืœ ืœื ื™ื•ืชืจ ืž-8 ืคืจืžื˜ืจื™ื, ืฉื ืžืกืชื™ื™ืžืช ื”ืคื ื˜ื–ื™ื”. ื ืจืื” ืฉืคืขื ื‘ืกื ื˜ ืคื˜ืจืกื‘ื•ืจื’ ื”ืชืงื™ื™ืžื• ื“ื™ืืœื•ื’ื™ื ื›ืžื• ื–ื”:

-- ะะฐะดะพ ัะดะตะปะฐั‚ัŒ ะฒ TL ัˆะฐะฑะปะพะฝั‹
-- ะ‘ะป... ะัƒ ะฟัƒัั‚ัŒ ะฟะฐั€ะฐะผะตั‚ั€ั‹ ะทะพะฒัƒั‚ ะฐะปัŒั„ะฐ, ะฑะตั‚ะฐ,... ะšะฐะบะธะต ั‚ะฐะผ ะตั‰ั‘ ะฑัƒะบะฒั‹ ะตัั‚ัŒ... ะž, ั‚ัั‚ะฐ!
-- ะ“ั€ะฐะผะผะฐั‚ะธะบะฐ? ะัƒ ะฟะพั‚ะพะผ ะฝะฐะฟะธัˆะตะผ

-- ะกะผะพั‚ั€ะธั‚ะต, ะบะฐะบะพะน ั ัะธะฝั‚ะฐะบัะธั ะฟั€ะธะดัƒะผะฐะป ะดะปั ัˆะฐะฑะปะพะฝะพะฒ ะธ ะฒะตะบั‚ะพั€ะฐ!
-- ะขั‹ ะดะพะปะฑะฐะฝัƒะปัั, ะบะฐะบ ะผั‹ ัั‚ะพ ะฟะฐั€ัะธั‚ัŒ ะฑัƒะดะตะผ?
-- ะ”ะฐ ะฝะต ััั‹ั‚ะต, ะพะฝ ั‚ะฐะผ ะพะดะธะฝ ะฒ ัั…ะตะผะต, ะทะฐั…ะฐั€ะบะพะดะธั‚ัŒ -- ะธ ะพะบ

ืื‘ืœ ื–ื” ื”ื™ื” ื‘ืขืจืš ื”ื™ื™ืฉื•ื ื”ืจืืฉื•ืŸ ืฉืคื•ืจืกื ืฉืœ TL "ื‘ื›ืœืœ". ื‘ื•ืื• ื ืขื‘ื•ืจ ืœืฉืงื•ืœ ื”ื˜ืžืขื•ืช ื‘ืœืงื•ื—ื•ืช ื”ื˜ืœื’ืจื ืขืฆืžื.

ืžื™ืœื” ืœื•ื•ืกื™ืœื™:

ื•ืกื™ืœื™, [09.10.18 17:07] ื™ื•ืชืจ ืžื›ืœ, ื”ืชื—ืช ืœื•ื”ื˜ ื›ื™ ื”ื ื™ืฆืจื• ื—ื‘ื•ืจื” ืฉืœ ื”ืคืฉื˜ื•ืช, ื•ืœืื—ืจ ืžื›ืŸ ืชืงืขื• ืขืœื™ื”ื ื‘ื•ืจื’ ื•ื›ื™ืกื• ืืช ืžื—ื•ืœืœ ื”ืงื•ื“ ื‘ืงื‘ื™ื™ื
ื›ืชื•ืฆืื” ืžื›ืš, ืชื—ื™ืœื” ืž dock pilot.jpg
ื•ืื– ืžื”ืงื•ื“ dzhekichan.webp

ื›ืžื•ื‘ืŸ, ืžืื ืฉื™ื ืฉืžื›ื™ืจื™ื ืืœื’ื•ืจื™ืชืžื™ื ื•ืžืชืžื˜ื™ืงื”, ืื ื• ื™ื›ื•ืœื™ื ืœืฆืคื•ืช ืฉื”ื ืงืจืื• ืืช Aho, Ullmann, ื•ื”ื ืžื›ื™ืจื™ื ืืช ื”ื›ืœื™ื ืฉื”ืคื›ื• ืœืกื˜ื ื“ืจื˜ ื“ื” ืคืงื˜ื• ื‘ืชืขืฉื™ื™ื” ื‘ืžืฉืš ืขืฉืจื•ืช ื”ืฉื ื™ื ืœื›ืชื™ื‘ืช ืžื”ื“ืจื™ DSL ืฉืœื”ื, ื ื›ื•ืŸ?..

ืžึฐื—ึทื‘ึผึตืจ ื˜ืœื’ืจื-ืงืœื™ ื”ื•ื ื•ื™ื˜ืœื™ ื•ืœื˜ืžืŸ, ื›ืคื™ ืฉื ื™ืชืŸ ืœื”ื‘ื™ืŸ ืžื”ืชืจื—ืฉื•ืช ืคื•ืจืžื˜ TLO ืžื—ื•ืฅ ืœื’ื‘ื•ืœื•ืช (cli) ืฉืœื•, ื—ื‘ืจ ื‘ืฆื•ื•ืช - ื›ืขืช ื”ื•ืงืฆืชื” ืกืคืจื™ื™ื” ืœื ื™ืชื•ื— TL ื‘ื ืคืจื“, ืžื” ื”ืจื•ืฉื ืžืžื ื” ืžื ืชื— TL? ..

16.12 04:18 ื•ืกื™ืœื™: ืื ื™ ื—ื•ืฉื‘ ืฉืžื™ืฉื”ื• ืœื ืฉืœื˜ ื‘ืœืงืก+ื™ืืง
16.12 04:18 ื•ืืกื™ืœื™: ืื ื™ ืœื ื™ื›ื•ืœ ืœื”ืกื‘ื™ืจ ืืช ื–ื” ืื—ืจืช
16.12 04:18 ื•ืกื™ืœื™: ื˜ื•ื‘, ืื• ืฉื™ืœืžื• ืœื”ื ืขืœ ืžืกืคืจ ื”ืฉื•ืจื•ืช ื‘-VK
16.12 04:19 ื•ืืกื™ืœื™: 3k+ ืงื•ื•ื™ื ื•ื›ื•'<censored> ื‘ืžืงื•ื ืžื ืชื—

ืื•ืœื™ ื—ืจื™ื’? ื‘ื•ื ื ืจืื” ืื™ืš ะดะตะปะฐะตั‚ ื–ื”ื• ื”ืœืงื•ื— ื”ืจืฉืžื™ - Telegram Desktop:

    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);

1100+ ืฉื•ืจื•ืช ื‘-Python, ื›ืžื” ื‘ื™ื˜ื•ื™ื™ื ืจื’ื•ืœืจื™ื™ื + ืžืงืจื™ื ืžื™ื•ื—ื“ื™ื ื›ืžื• ื•ืงื˜ื•ืจ, ืฉื›ืžื•ื‘ืŸ ืžื•ืฆื”ืจ ื‘ืกื›ืžื” ื›ืคื™ ืฉื”ื•ื ืฆืจื™ืš ืœื”ื™ื•ืช ืœืคื™ ืชื—ื‘ื™ืจ TL, ืื‘ืœ ื”ื ื”ืกืชืžื›ื• ืขืœ ื”ืชื—ื‘ื™ืจ ื”ื–ื” ื›ื“ื™ ืœื ืชื— ืื•ืชื•... ื ืฉืืœืช ื”ืฉืืœื”, ืœืžื” ื›ืœ ื–ื” ื”ื™ื” ื ืก?ะธื–ื” ื™ื•ืชืจ ืžืจื•ื‘ื“ ืื ืืฃ ืื—ื“ ืœื ืžืชื›ื•ื•ืŸ ืœื ืชื— ืืช ื–ื” ืœืคื™ ื”ืชื™ืขื•ื“ ื‘ื›ืœ ืžืงืจื”?!

ืื’ื‘... ื–ื•ื›ืจื™ื ืฉื“ื™ื‘ืจื ื• ืขืœ ื‘ื“ื™ืงืช CRC32? ืื–, ื‘ืžื—ื•ืœืœ ื”ืงื•ื“ ืฉืœ Telegram Desktop ื™ืฉ ืจืฉื™ืžื” ืฉืœ ื—ืจื™ื’ื™ื ืขื‘ื•ืจ ืื•ืชื ืกื•ื’ื™ื ืฉื‘ื”ื CRC32 ื”ืžื—ื•ืฉื‘ ืœื ืžืชืื™ื ืขื ื–ื” ืฉืžืฆื•ื™ืŸ ื‘ืชืจืฉื™ื!

ื•ืืกื™ืœื™, [18.12/22 ื›ื‘:49] ื•ื›ืืŸ ื”ื™ื™ืชื™ ื—ื•ืฉื‘ ืื ืฆืจื™ืš ืช"ืœ ื›ื–ื”
ืื ื”ื™ื™ืชื™ ืจื•ืฆื” ืœื”ืชืขืกืง ืขื ื™ื™ืฉื•ืžื™ื ืืœื˜ืจื ื˜ื™ื‘ื™ื™ื, ื”ื™ื™ืชื™ ืžืชื—ื™ืœ ืœื”ื›ื ื™ืก ืžืขื‘ืจื™ ืฉื•ืจื•ืช, ื—ืฆื™ ืžื”ืžื ืชื—ื™ื ื™ืฉื‘ืจื• ื‘ื”ื’ื“ืจื•ืช ืžืจื•ื‘ื•ืช ืฉื•ืจื•ืช
ืขื ื–ืืช, ื’ื tdesktop

ื–ื›ืจื• ืืช ื”ื ืงื•ื“ื” ื‘ืขื ื™ื™ืŸ ื•ื•ืืŸ-ืœื™ื™ื ืจ, ื ื—ื–ื•ืจ ืืœื™ื” ืžืขื˜ ืžืื•ื—ืจ ื™ื•ืชืจ.

ืื•ืงื™ื™, telegram-cli ืœื ืจืฉืžื™, Telegram Desktop ืจืฉืžื™, ืื‘ืœ ืžื” ืขื ื”ืื—ืจื™ื? ืžื™ ื™ื•ื“ืข?.. ื‘ืงื•ื“ ื”ืœืงื•ื— ืฉืœ ืื ื“ืจื•ืื™ื“ ืœื ื”ื™ื” ืžื ืชื— ืกื›ืžื” ื‘ื›ืœืœ (ืžื” ืฉืžืขืœื” ืฉืืœื•ืช ืœื’ื‘ื™ ืงื•ื“ ืคืชื•ื—, ืื‘ืœ ื–ื” ืœื—ืœืง ื”ืฉื ื™), ืื‘ืœ ื”ื™ื• ืขื•ื“ ื›ืžื” ืงื˜ืขื™ ืงื•ื“ ืžืฆื—ื™ืงื™ื, ืื‘ืœ ืขื•ื“ ืขืœื™ื”ื ื‘- ืกืขื™ืฃ ืงื˜ืŸ ืœืžื˜ื”.

ืื™ืœื• ืฉืืœื•ืช ื ื•ืกืคื•ืช ืžืขื•ืจืจืช ื‘ื”ืžืฉื›ื” ื‘ืคื•ืขืœ? ืœื“ื•ื’ืžื”, ื”ื ืขืฉื• ื”ืจื‘ื” ื“ื‘ืจื™ื, ื›ืžื•ื‘ืŸ, ืขื ืฉื“ื•ืช ืกื™ื‘ื™ื•ืช ื•ืฉื“ื•ืช ืžื•ืชื ื™ื:

ื•ืืกื™ืœื™: flags.0? true
ืคื™ืจื•ืฉื• ืฉื”ืฉื“ื” ืงื™ื™ื ื•ืฉื•ื•ื” ืืžืช ืื ื”ื“ื’ืœ ืžื•ื’ื“ืจ

ื•ืืกื™ืœื™: flags.1? int
ืคื™ืจื•ืฉื• ืฉื”ืฉื“ื” ืงื™ื™ื ื•ืฆืจื™ืš ืœื”ืคื•ืš ืื•ืชื• ืœืกื™ื“ืจื™ืืœื™ื–ืฆื™ื”

ื•ืืกื™ืœื™: ืชื—ืช, ืืœ ืชื“ืื’ ืœื’ื‘ื™ ืžื” ืฉืืชื” ืขื•ืฉื”!
ื•ืืกื™ืœื™: ื™ืฉ ืื–ื›ื•ืจ ืื™ืคืฉื”ื• ื‘ืžืกืžืš ืฉืืžื ื ื”ื•ื ืกื•ื’ ื—ืฉื•ืฃ ื‘ืื•ืจืš ืืคืก, ืื‘ืœ ืื™ ืืคืฉืจ ืœื”ืจื›ื™ื‘ ืฉื•ื ื“ื‘ืจ ืžื”ืžืกืžืš ืฉืœื”ื
ื•ืืกื™ืœื™: ื’ื ื‘ื™ื™ืฉื•ืžื™ ืงื•ื“ ืคืชื•ื— ื–ื” ืœื ื”ืžืงืจื”, ืื‘ืœ ื™ืฉ ื—ื‘ื•ืจื” ืฉืœ ืงื‘ื™ื™ื ื•ืชืžื™ื›ื•ืช

ืžื” ืขื ื˜ืœื˜ื•ืŸ? ื‘ื”ืกืชื›ืœื•ืช ืงื“ื™ืžื” ืœื ื•ืฉื ืฉืœ MTProto, ื“ื•ื’ืžื” - ื‘ืชื™ืขื•ื“ ื™ืฉ ืงื˜ืขื™ื ื›ืืœื”, ืื‘ืœ ื”ืกื™ืžืŸ % ื”ื•ื ืžืชื•ืืจ ืจืง ื›"ืžืชืื™ื ืœืกื•ื’ ื—ืฉื•ืฃ ื ืชื•ืŸ", ื›ืœื•ืžืจ. ื‘ื“ื•ื’ืžืื•ืช ืฉืœื”ืœืŸ ื™ืฉ ืฉื’ื™ืื” ืื• ืžืฉื”ื• ืœื ืžืชื•ืขื“:

ื•ืืกื™ืœื™, [22.06.18 18:38] ื‘ืžืงื•ื ืื—ื“:

msg_container#73f1f8dc messages:vector message = MessageContainer;

ื‘ืฉื•ื ื”:

msg_container#73f1f8dc messages:vector<%Message> = MessageContainer;

ื•ืืœื” ืฉื ื™ ื”ื‘ื“ืœื™ื ื’ื“ื•ืœื™ื, ื‘ื—ื™ื™ื ื”ืืžื™ืชื™ื™ื ืžื’ื™ืข ืื™ื–ื” ื•ืงื˜ื•ืจ ืขื™ืจื•ื

ืœื ืจืื™ืชื™ ื”ื’ื“ืจื” ื•ืงื˜ื•ืจื™ืช ื—ืฉื•ืคื” ื•ืœื ื ืชืงืœืชื™ ื‘ื”

ื”ื ื™ืชื•ื— ื ื›ืชื‘ ื‘ื™ื“ ื‘ื˜ืœื˜ื•ืŸ

ื‘ืชืจืฉื™ื ืฉืœื• ื”ื”ื’ื“ืจื” ืžื•ืขืจืช msg_container

ืฉื•ื‘, ื”ืฉืืœื” ื ืฉืืจืช ื‘ืขืจืš %. ื–ื” ืœื ืžืชื•ืืจ.

ื•ืื“ื™ื ื’ื•ื ืฆ'ืจื•ื‘, [22.06.18 19:22] ื•ื‘-tdesktop?

ื•ืืกื™ืœื™, [22.06.18 19:23] ืื‘ืœ ืžื ืชื— ื”-TL ืฉืœื”ื ื‘ืžื ื•ืขื™ื ืจื’ื™ืœื™ื ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉื’ื ืœื ื™ืื›ืœ ืืช ื–ื”

// parsed manually

TL ื”ื•ื ื”ืคืฉื˜ื” ื™ืคื”, ืืฃ ืื—ื“ ืœื ืžื™ื™ืฉื ืื•ืชื” ืœื—ืœื•ื˜ื™ืŸ

ื•-% ืื™ื ื• ื‘ื’ืจืกื” ืฉืœื”ื ืฉืœ ื”ืชื•ื›ื ื™ืช

ืื‘ืœ ื›ืืŸ ื”ืชื™ืขื•ื“ ืกื•ืชืจ ืืช ืขืฆืžื•, ืื– ืื™ื›ืฉื”ื•

ื–ื” ื ืžืฆื ื‘ื“ืงื“ื•ืง, ื”ื ื™ื›ืœื• ืคืฉื•ื˜ ืœืฉื›ื•ื— ืœืชืืจ ืืช ื”ืกืžื ื˜ื™ืงื”

ืจืื™ืช ืืช ื”ืžืกืžืš ื‘-TL, ืืชื” ืœื ื™ื›ื•ืœ ืœื”ื‘ื™ืŸ ืื•ืชื• ื‘ืœื™ ื—ืฆื™ ืœื™ื˜ืจ

"ื˜ื•ื‘, ื ื ื™ื—", ื™ื’ื™ื“ ืงื•ืจื ืื—ืจ, "ืืชื” ืžื‘ืงืจ ืžืฉื”ื•, ืื– ืชืจืื” ืœื™ ืื™ืš ื–ื” ืฆืจื™ืš ืœื”ื™ืขืฉื•ืช."

ื•ืืกื™ืœื™ ืขื•ื ื”: "ืœื’ื‘ื™ ื”ืžื ืชื—, ืื ื™ ืื•ื”ื‘ ื“ื‘ืจื™ื ื›ืžื•

    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)

ื–ื” ื”-WHOLE 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ื”ืงื•ื“ ืฉื ื•ืฆืจ), ื›ื•ืœืœ ืœื—ืžื ื™ื•ืช ืžื™ื“ืข ืขืœ ืกื•ื’ ืขื‘ื•ืจ ื”ืชื‘ื•ื ื ื•ืช ืคื ื™ืžื™ืช ื‘ื›ืœ ืžื—ืœืงื”. ื›ืœ ื˜ื™ืคื•ืก ืคื•ืœื™ืžื•ืจืคื™ ื”ื•ืคืš ืœืžื—ืœืงืช ื‘ืกื™ืก ืžื•ืคืฉื˜ืช ืจื™ืงื”, ื•ื‘ื ืื™ื ื™ื•ืจืฉื™ื ืžืžื ื” ื•ื™ืฉ ืœื”ื ืฉื™ื˜ื•ืช ืœืกืจื™ืืœื™ื–ืฆื™ื” ื•ืœื“ื”-ืกืจื™ืืœื™ื–ืฆื™ื”.

ื—ื•ืกืจ ื˜ื™ืคื•ืกื™ื ื‘ืฉืคืช ื”ื˜ื™ืคื•ืก

ื”ืงืœื“ื” ื—ื–ืงื” ื”ื™ื ื“ื‘ืจ ื˜ื•ื‘, ื ื›ื•ืŸ? ืœื, ื–ื” ืœื ื”ื•ืœื™ื‘ืจ (ืœืžืจื•ืช ืฉืื ื™ ืžืขื“ื™ืฃ ืฉืคื•ืช ื“ื™ื ืžื™ื•ืช), ืืœื ืคื•ืกื˜ื•ืœืฆื™ื” ื‘ืžืกื’ืจืช TL. ืขืœ ืกืžืš ื–ื”, ื”ืฉืคื” ืฆืจื™ื›ื” ืœืกืคืง ืœื ื• ื›ืœ ืžื™ื ื™ ืฆ'ืงื™ื. ื˜ื•ื‘, ื‘ืกื“ืจ, ืื•ืœื™ ืœื ื”ื•ื ืขืฆืžื•, ืืœื ื”ื™ื™ืฉื•ื, ืื‘ืœ ื”ื•ื ืฆืจื™ืš ืœืคื—ื•ืช ืœืชืืจ ืื•ืชื. ื•ืื™ื–ื” ืกื•ื’ ืฉืœ ื”ื–ื“ืžื ื•ื™ื•ืช ืื ื—ื ื• ืจื•ืฆื™ื?

ืงื•ื“ื ื›ืœ, ืื™ืœื•ืฆื™ื. ื›ืืŸ ืื ื• ืจื•ืื™ื ื‘ืชื™ืขื•ื“ ืœื”ืขืœืืช ืงื‘ืฆื™ื:

ื”ืชื•ื›ืŸ ื”ื‘ื™ื ืืจื™ ืฉืœ ื”ืงื•ื‘ืฅ ืžื—ื•ืœืง ืœื—ืœืงื™ื. ื›ืœ ื”ื—ืœืงื™ื ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ื‘ืื•ืชื• ื’ื•ื“ืœ ( ื—ืœืง_ื’ื•ื“ืœ ) ื•ื™ืฉ ืœืขืžื•ื“ ื‘ืชื ืื™ื ื”ื‘ืื™ื:

  • part_size % 1024 = 0 (ืžืชื—ืœืง ื‘-1KB)
  • 524288 % part_size = 0 (512KB ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืชื—ืœืง ื‘ืื•ืคืŸ ืฉื•ื•ื” ื‘-part_size)

ื”ื—ืœืง ื”ืื—ืจื•ืŸ ืื™ื ื• ื—ื™ื™ื‘ ืœืขืžื•ื“ ื‘ืชื ืื™ื ืืœื•, ื‘ืชื ืื™ ืฉื’ื•ื“ืœื• ืงื˜ืŸ ืž-part_size.

ืœื›ืœ ื—ืœืง ืฆืจื™ืš ืœื”ื™ื•ืช ืžืกืคืจ ืจืฆืฃ, file_part, ืขื ืขืจืš ืฉื ืข ื‘ื™ืŸ 0 ืœ-2,999.

ืœืื—ืจ ื—ืœื•ืงืช ื”ืงื•ื‘ืฅ, ืขืœื™ืš ืœื‘ื—ื•ืจ ืฉื™ื˜ื” ืœืฉืžื™ืจืชื• ื‘ืฉืจืช. ืœื”ืฉืชืžืฉ upload.saveBigFilePart ื‘ืžืงืจื” ืฉื”ื’ื•ื“ืœ ื”ืžืœื ืฉืœ ื”ืงื•ื‘ืฅ ื”ื•ื ื™ื•ืชืจ ืž-10 ืžื’ื”-ื‘ื™ื™ื˜ ื• upload.saveFilePart ืขื‘ื•ืจ ืงื‘ืฆื™ื ืงื˜ื ื™ื ื™ื•ืชืจ.
[โ€ฆ] ืื—ืช ืžืฉื’ื™ืื•ืช ืงืœื˜ ื”ื ืชื•ื ื™ื ื”ื‘ืื•ืช ืขืฉื•ื™ื” ืœื”ื™ื•ืช ืžื•ื—ื–ืจืช:

  • FILE_PARTS_INVALID โ€” ืžืกืคืจ ื—ืœืงื™ื ืœื ื—ื•ืงื™. ื”ืขืจืš ืื™ื ื• ื‘ื™ืŸ 1..3000

ื”ืื ืžืฉื”ื• ืžื›ืœ ื–ื” ื‘ืชืจืฉื™ื? ื”ืื ื ื™ืชืŸ ืœื”ื‘ื™ืข ืืช ื–ื” ืื™ื›ืฉื”ื• ื‘ืืžืฆืขื•ืช TL? ืœื. ืื‘ืœ ืชืกืœื—ื• ืœื™, ืืคื™ืœื• ื”ื˜ื•ืจื‘ื• ืคืกืงืœ ืฉืœ ืกื‘ื ื”ืฆืœื™ื— ืœืชืืจ ืืช ื”ืกื•ื’ื™ื ืฉืฆื•ื™ื ื• ื˜ื•ื•ื—ื™ื. ื•ื”ื•ื ื™ื“ืข ืขื•ื“ ื“ื‘ืจ ืื—ื“, ืฉืขื›ืฉื™ื• ื™ื“ื•ืข ื™ื•ืชืจ ื‘ืฉื enum - ืกื•ื’ ื”ืžื•ืจื›ื‘ ืžืกืคื™ืจื” ืฉืœ ืžืกืคืจ ืงื‘ื•ืข (ืงื˜ืŸ) ืฉืœ ืขืจื›ื™ื. ื‘ืฉืคื•ืช ื›ืžื• C - ืžืกืคืจื™ืช, ืฉื™ืžื• ืœื‘ ืฉืขื“ ื›ื” ื“ื™ื‘ืจื ื• ืจืง ืขืœ ื˜ื™ืคื•ืกื™ื ืžืกืคืจื™ื. ืื‘ืœ ื™ืฉ ื’ื ืžืขืจื›ื™ื, ืžื—ืจื•ื–ื•ืช... ืœืžืฉืœ, ื™ื”ื™ื” ื ื—ืžื“ ืœืชืืจ ืฉื”ืžื—ืจื•ื–ืช ื”ื–ื• ื™ื›ื•ืœื” ืœื”ื›ื™ืœ ืจืง ืžืกืคืจ ื˜ืœืคื•ืŸ, ื ื›ื•ืŸ?

ื›ืœ ื–ื” ืœื ื ืžืฆื ื‘-TL. ืื‘ืœ ื™ืฉ, ืœืžืฉืœ, ื‘-JSON Schema. ื•ืื ืžื™ืฉื”ื• ืื—ืจ ืขืฉื•ื™ ืœื”ืชื•ื•ื›ื— ืขืœ ื—ืœื•ืงื” ืฉืœ 512 KB, ืฉืขื“ื™ื™ืŸ ืฆืจื™ืš ืœื‘ื“ื•ืง ื–ืืช ื‘ืงื•ื“, ื•ื“ื ืฉื”ืœืงื•ื— ืคืฉื•ื˜ ืœื ื™ื›ื•ืœ ื”ื™ื” ืœืฉืœื•ื— ืžืกืคืจ ืžื—ื•ืฅ ืœื˜ื•ื•ื— 1..3000 (ื•ื”ืฉื’ื™ืื” ื”ืžืชืื™ืžื” ืœื ื”ื™ื™ืชื” ื™ื›ื•ืœื” ืœื”ืชืขื•ืจืจ) ื–ื” ื”ื™ื” ืืคืฉืจื™, ื ื›ื•ืŸ?..

ืื’ื‘, ืœื’ื‘ื™ ืฉื’ื™ืื•ืช ื•ืขืจื›ื™ ื”ื—ื–ืจื”. ื’ื ืืœื” ืฉืขื‘ื“ื• ืขื TL ืžื˜ืฉื˜ืฉื™ื ืืช ืขื™ื ื™ื”ื - ื–ื” ืœื ื”ืชื—ื•ื•ืจ ืœื ื• ืžื™ื“ ื›ืœ ืื—ื“ ืคื•ื ืงืฆื™ื” ื‘-TL ื™ื›ื•ืœื” ืœืžืขืฉื” ืœื”ื—ื–ื™ืจ ืœื ืจืง ืืช ืกื•ื’ ื”ื”ื—ื–ืจ ื”ืžืชื•ืืจ, ืืœื ื’ื ืฉื’ื™ืื”. ืื‘ืœ ืœื ื ื™ืชืŸ ืœื”ืกื™ืง ื–ืืช ื‘ืฉื•ื ืื•ืคืŸ ื‘ืืžืฆืขื•ืช ื”-TL ืขืฆืžื•. ื›ืžื•ื‘ืŸ, ื–ื” ื›ื‘ืจ ื‘ืจื•ืจ ื•ืื™ืŸ ืฆื•ืจืš ื‘ืฉื•ื ื“ื‘ืจ ื‘ืคื•ืขืœ (ืื ื›ื™ ืœืžืขืฉื”, RPC ื™ื›ื•ืœ ืœื”ืชื‘ืฆืข ื‘ื“ืจื›ื™ื ืฉื•ื ื•ืช, ื ื—ื–ื•ืจ ืœื–ื” ื‘ื”ืžืฉืš) - ืื‘ืœ ืžื” ืœื’ื‘ื™ ื˜ื•ื”ืจ ื”ืžื•ืฉื’ื™ื ืฉืœ Mathematics of Abstract Types ืžื”ืขื•ืœื ื”ืฉืžื™ืžื™?.. ื”ืจืžืชื™ ืืช ื”ืžืฉื™ื›ื” - ืื– ืชืชืื™ื ืื•ืชื”.

ื•ืœื‘ืกื•ืฃ, ืžื” ืœื’ื‘ื™ ืงืจื™ืื•ืช? ื•ื‘ื›ืŸ, ืฉื, ื‘ืื•ืคืŸ ื›ืœืœื™, ื”ื™ื™ืชื™ ืจื•ืฆื” ืชื™ืื•ืจ ื™ืฉ ืืช ื–ื” ื ื›ื•ืŸ ื‘ืกื›ื™ืžื” (ื‘ืกื›ื™ืžืช JSON, ืฉื•ื‘, ื–ื” ื›ืŸ), ืื‘ืœ ืื ืืชื” ื›ื‘ืจ ืžืชืืžืฅ ืขื ื–ื”, ืื– ืžื” ืขื ื”ืฆื“ ื”ืžืขืฉื™ - ืœืคื—ื•ืช ื”ืกืชื›ืœื•ืช ื˜ืจื™ื•ื•ื™ืืœื™ืช ืขืœ ื”ื‘ื“ืœื™ื ื‘ืžื”ืœืš ื”ืขื“ื›ื•ื ื™ื? ืจืื” ื‘ืขืฆืžืš ื‘ ื“ื•ื’ืžืื•ืช ืืžื™ืชื™ื•ืช:

-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 ื”ื‘ื“ืœื™ื", ื•ืžื” ืฉื”ืžื•ื— ืจื•ืื” ืžื™ื“ ื–ื” ืฉื”ื”ืชื—ืœื•ืช ื•ื”ืกื•ืฃ ื‘ืฉืชื™ ื”ื“ื•ื’ืžืื•ืช ื–ื”ื•ืช, ืฆืจื™ืš ืœืงืจื•ื ื‘ืฆื•ืจื” ืžื™ื™ื’ืขืช ืื™ืคืฉื”ื• ื‘ืืžืฆืข... ืœื“ืขืชื™ ื–ื” ืœื ืจืง ื‘ืชื™ืื•ืจื™ื”, ืืœื ืžื‘ื—ื™ื ื” ื•ื™ื–ื•ืืœื™ืช ื‘ืœื‘ื“ ืžืœื•ื›ืœืš ื•ืžืจื•ืฉืœ.

ืื’ื‘, ืขืœ ื˜ื•ื”ืจ ื”ืชื™ืื•ืจื™ื”. ืœืžื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืฉื“ื•ืช ืกื™ื‘ื™ื•ืช? ืœื ื ืจืื” ืฉื”ื ืจึตื™ื—ึท ืจืข ืžื ืงื•ื“ืช ื”ืžื‘ื˜ ืฉืœ ืชื•ืจืช ื”ื˜ื™ืคื•ืกื™ื? ื ื™ืชืŸ ืœืจืื•ืช ืืช ื”ื”ืกื‘ืจ ื‘ื’ืจืกืื•ืช ืงื•ื“ืžื•ืช ืฉืœ ื”ืชืจืฉื™ื. ื‘ื”ืชื—ืœื”, ื›ืŸ, ื›ื›ื” ื–ื” ื”ื™ื”, ืขืœ ื›ืœ ืขื™ื˜ื•ืฉ ื ื•ืฆืจ ืกื•ื’ ื—ื“ืฉ. ื™ืกื•ื“ื•ืช ืืœื” ืขื“ื™ื™ืŸ ืงื™ื™ืžื™ื ื‘ืฆื•ืจื” ื–ื•, ืœืžืฉืœ:

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;

ืื‘ืœ ืขื›ืฉื™ื• ืชืืจ ืœืขืฆืžืš, ืื ื™ืฉ ืœืš 5 ืฉื“ื•ืช ืื•ืคืฆื™ื•ื ืœื™ื™ื ื‘ืžื‘ื ื” ืฉืœืš, ืื– ืชืฆื˜ืจืš 32 ืกื•ื’ื™ื ืขื‘ื•ืจ ื›ืœ ื”ืืคืฉืจื•ื™ื•ืช ื”ืืคืฉืจื™ื•ืช. ืคื™ืฆื•ืฅ ืงื•ืžื‘ื™ื ื˜ื•ืจื™. ืœืคื™ื›ืš, ื”ื˜ื•ื”ืจ ื”ื’ื‘ื™ืฉื™ ืฉืœ ืชื™ืื•ืจื™ื™ืช ื”-TL ืฉื•ื‘ ื”ืชื ืคืฅ ืืœ ืžื•ืœ ื™ืฉื‘ื ื” ื”ื‘ืจื–ืœ ื”ื™ืฆื•ืง ืฉืœ ื”ืžืฆื™ืื•ืช ื”ืงืฉื” ืฉืœ ืกื“ืจื”.

ื‘ื ื•ืกืฃ, ื‘ืžืงื•ืžื•ืช ืžืกื•ื™ืžื™ื ื”ื—ื‘ืจ'ื” ื”ืืœื” ื‘ืขืฆืžื ืžืคืจื™ื ืืช ื”ื˜ื™ืคื•ืœื•ื’ื™ื” ืฉืœื”ื. ืœื“ื•ื’ืžื”, ื‘-MTProto (ื”ืคืจืง ื”ื‘ื) ื ื™ืชืŸ ืœื“ื—ื•ืก ืืช ื”ืชื’ื•ื‘ื” ืขืœ ื™ื“ื™ Gzip, ื”ื›ืœ ื‘ืกื“ืจ - ื—ื•ืฅ ืžื–ื” ืฉื”ืฉื›ื‘ื•ืช ื•ื”ืžืขื’ืœ ืžื•ืคืจื™ื. ืฉื•ื‘, ืœื RpcResult ืขืฆืžื• ื ืงืฆืจ, ืืœื ืชื•ื›ื ื•. ื•ื‘ื›ืŸ, ืœืžื” ืœืขืฉื•ืช ืืช ื–ื”?.. ื”ื™ื™ืชื™ ืฆืจื™ืš ืœื—ืชื•ืš ืœืชื•ืš ืงื‘ ื›ื“ื™ ืฉื”ื“ื—ื™ืกื” ืชืขื‘ื•ื“ ื‘ื›ืœ ืžืงื•ื.

ืื• ื“ื•ื’ืžื” ืื—ืจืช, ื’ื™ืœื™ื ื• ืคืขื ืฉื’ื™ืื” - ื”ื™ื ื ืฉืœื—ื” InputPeerUser ื‘ืžืงื•ื InputUser. ืื• ืœื”ืคืš. ืื‘ืœ ื–ื” ืขื‘ื“! ื›ืœื•ืžืจ, ืœืฉืจืช ืœื ื”ื™ื” ืื›ืคืช ืžื”ืกื•ื’. ืื™ืš ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช? ื”ืชืฉื•ื‘ื” ืขืฉื•ื™ื” ืœื”ื™ื ืชืŸ ืœื ื• ืขืœ ื™ื“ื™ ืงื˜ืขื™ ืงื•ื“ ืž-telgram-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);

ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ื–ื” ื”ืžืงื•ื ืฉื‘ื• ืžืชื‘ืฆืขืช ืกื“ืจื” ื‘ืื•ืคืŸ ื™ื“ื ื™, ืœื ื ื•ืฆืจ ืงื•ื“! ืื•ืœื™ ื”ืฉืจืช ืžื™ื•ืฉื ื‘ืฆื•ืจื” ื“ื•ืžื”?.. ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ื–ื” ื™ืขื‘ื•ื“ ืื ื ืขืฉื” ืคืขื ืื—ืช, ืื‘ืœ ืื™ืš ืืคืฉืจ ืœืชืžื•ืš ื‘ื–ื” ืžืื•ื—ืจ ื™ื•ืชืจ ื‘ืžื”ืœืš ื”ืขื“ื›ื•ื ื™ื? ื”ืื ื–ื• ื”ืกื™ื‘ื” ืฉื”ืชื•ื›ื ื™ืช ื”ื•ืžืฆืื”? ื•ื›ืืŸ ื ืขื‘ื•ืจ ืœืฉืืœื” ื”ื‘ืื”.

ื’ื™ืจืกืื•ืช. ืฉื›ื‘ื•ืช

ืžื“ื•ืข ื”ื’ืจืกืื•ืช ื”ืกื›ืžื˜ื™ื•ืช ื ืงืจืื•ืช ืฉื›ื‘ื•ืช ื ื™ืชืŸ ืจืง ืœืฉืขืจ ื‘ื”ืชื‘ืกืก ืขืœ ื”ื”ื™ืกื˜ื•ืจื™ื” ืฉืœ ื”ืกื›ืžื•ืช ืฉืคื•ืจืกืžื•. ื›ื›ืœ ื”ื ืจืื”, ื‘ืชื—ื™ืœื” ื—ืฉื‘ื• ื”ืžื—ื‘ืจื™ื ืฉื ื™ืชืŸ ืœืขืฉื•ืช ื“ื‘ืจื™ื ื‘ืกื™ืกื™ื™ื ื‘ืืžืฆืขื•ืช ื”ืกื›ื™ืžื” ืœืœื ืฉื™ื ื•ื™, ื•ืจืง ื‘ืžื™ื“ืช ื”ืฆื•ืจืš, ืขื‘ื•ืจ ื‘ืงืฉื•ืช ืกืคืฆื™ืคื™ื•ืช, ืžืฆื™ื™ื ื™ื ืฉื”ื ื ืขืฉื™ื ื‘ืืžืฆืขื•ืช ื’ืจืกื” ืื—ืจืช. ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ืืคื™ืœื• ืจืขื™ื•ืŸ ื˜ื•ื‘ - ื•ื”ื—ื“ืฉ ื™ื”ื™ื”, ื›ื‘ื™ื›ื•ืœ, "ืžืขื•ืจื‘", ื‘ืฉื›ื‘ื•ืช ืขืœ ื”ื™ืฉืŸ. ืื‘ืœ ื‘ื•ื ื ืจืื” ืื™ืš ื–ื” ื ืขืฉื”. ื ื›ื•ืŸ, ืœื ื™ื›ื•ืœืชื™ ืœื”ืกืชื›ืœ ืขืœ ื–ื” ืžื”ื”ืชื—ืœื” - ื–ื” ืžืฆื—ื™ืง, ืื‘ืœ ื”ื“ื™ืื’ืจืžื” ืฉืœ ืฉื›ื‘ืช ื”ื‘ืกื™ืก ืคืฉื•ื˜ ืœื ืงื™ื™ืžืช. ืฉื›ื‘ื•ืช ื”ืชื—ื™ืœื• ื‘-2. ื”ืชื™ืขื•ื“ ืžืกืคืจ ืœื ื• ืขืœ ืชื›ื•ื ื” ืžื™ื•ื—ื“ืช ืฉืœ TL:

ืื ืœืงื•ื— ืชื•ืžืš ื‘ืฉื›ื‘ื” 2, ื™ืฉ ืœื”ืฉืชืžืฉ ื‘ื‘ื ืื™ ื”ื‘ื:

invokeWithLayer2#289dd1f6 {X:Type} query:!X = X;

ื‘ืคื•ืขืœ, ื–ื” ืื•ืžืจ ืฉืœืคื ื™ ื›ืœ ืงืจื™ืืช API, int ืขื ื”ืขืจืš 0x289dd1f6 ื™ืฉ ืœื”ื•ืกื™ืฃ ืœืคื ื™ ืžืกืคืจ ื”ืฉื™ื˜ื”.

ื ืฉืžืข ื ื•ืจืžืœื™. ืื‘ืœ ืžื” ืงืจื” ืื—ืจ ื›ืš? ื•ืื– ื”ื•ืคื™ืข

invokeWithLayer3#b7475268 query:!X = X;

ืื– ืžื” ื”ืœืื”? ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœื ื—ืฉ,

invokeWithLayer4#dea0d430 query:!X = X;

ืžืฆื—ื™ืง? ืœื, ื–ื” ืžื•ืงื“ื ืžื“ื™ ืœืฆื—ื•ืง, ืชื—ืฉื•ื‘ ืขืœ ื–ื” ื›ืœ ืื—ื“ ื‘ืงืฉื” ืžืฉื›ื‘ื” ืื—ืจืช ืฆืจื™ื›ื” ืœื”ื™ื•ืช ืขื˜ื•ืคื” ื‘ืกื•ื’ ื›ืœ ื›ืš ืžื™ื•ื—ื“ - ืื ื™ืฉ ืœืš ืืช ื›ื•ืœื ืฉื•ื ื™ื, ืื™ืš ืขื•ื“ ืืชื” ื™ื›ื•ืœ ืœื”ื‘ื—ื™ืŸ ื‘ื™ื ื™ื”ื? ื•ื”ื•ืกืคืช ืจืง 4 ื‘ืชื™ื ืœืคื ื™ ื”ื™ื ืฉื™ื˜ื” ื“ื™ ื™ืขื™ืœื”. ื›ืš,

invokeWithLayer5#417a57ae query:!X = X;

ืื‘ืœ ื‘ืจื•ืจ ืฉืื—ืจื™ ื–ืžืŸ ืžื” ื–ื” ื™ื”ืคื•ืš ืœืกื•ื’ ืฉืœ ื‘ื›ื•ื ืœื™ื”. ื•ื”ืคืชืจื•ืŸ ื”ื’ื™ืข:

ืขื“ื›ื•ืŸ: ื”ื—ืœ ืžืฉื›ื‘ื” 9, ืฉื™ื˜ื•ืช ืขื•ื–ืจ invokeWithLayerN ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ืจืง ื™ื—ื“ ืขื initConnection

ื”ื™ื“ื“! ืื—ืจื™ 9 ื’ืจืกืื•ืช, ืกื•ืฃ ืกื•ืฃ ื”ื’ืขื ื• ืœืžื” ืฉื ืขืฉื” ื‘ืคืจื•ื˜ื•ืงื•ืœื™ ืื™ื ื˜ืจื ื˜ ืขื•ื“ ื‘ืฉื ื•ืช ื”-80 - ื”ืกื›ืžื” ืขืœ ื”ื’ืจืกื” ืคืขื ืื—ืช ื‘ืชื—ื™ืœืช ื”ื—ื™ื‘ื•ืจ!

ืื– ืžื” ื”ืœืื”?..

invokeWithLayer10#39620c41 query:!X = X;
...
invokeWithLayer18#1c900537 query:!X = X;

ืื‘ืœ ืขื›ืฉื™ื• ืืชื” ืขื“ื™ื™ืŸ ื™ื›ื•ืœ ืœืฆื—ื•ืง. ืจืง ืœืื—ืจ ืขื•ื“ 9 ืฉื›ื‘ื•ืช, ืกื•ืฃ ืกื•ืฃ ื ื•ืกืฃ ื‘ื ืื™ ืื•ื ื™ื‘ืจืกืœื™ ืขื ืžืกืคืจ ื’ืจืกื”, ืฉืฆืจื™ืš ืœืงืจื•ื ืœื• ืจืง ืคืขื ืื—ืช ื‘ืชื—ื™ืœืช ื”ื—ื™ื‘ื•ืจ, ื•ื ืจืื” ื”ื™ื” ืฉืžืฉืžืขื•ืช ื”ืฉื›ื‘ื•ืช ื ืขืœืžื”, ืขื›ืฉื™ื• ื–ื• ืจืง ื’ืจืกื” ืžื•ืชื ื™ืช, ื›ืžื• ื‘ื›ืœ ืžืงื•ื ืื—ืจ. ื”ื‘ืขื™ื” ื ืคืชืจื”.

ื‘ึผึฐื“ึดื™ื•ึผืง?..

ื•ืืกื™ืœื™, [16.07.18 14:01] ืืคื™ืœื• ื‘ื™ื•ื ืฉื™ืฉื™ ื—ืฉื‘ืชื™:
ื”-Teleserver ืฉื•ืœื— ืื™ืจื•ืขื™ื ืœืœื ื‘ืงืฉื”. ื™ืฉ ืœืขื˜ื•ืฃ ืืช ื”ื‘ืงืฉื•ืช ื‘-InvokeWithLayer. ื”ืฉืจืช ืื™ื ื• ืขื•ื˜ืฃ ืขื“ื›ื•ื ื™ื; ืื™ืŸ ืžื‘ื ื” ืœืขื˜ื™ืคืช ืชื’ื•ื‘ื•ืช ื•ืขื“ื›ื•ื ื™ื.

ื”ึธื”ึตืŸ. ื”ืœืงื•ื— ืœื ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ืืช ื”ืฉื›ื‘ื” ืฉื‘ื” ื”ื•ื ืจื•ืฆื” ืขื“ื›ื•ื ื™ื

ื•ืื“ื™ื ื’ื•ื ืฆ'ืจื•ื‘, [16.07.18 14:02] ื”ืื InvokeWithLayer ื”ื•ื ืœื ืงื‘ ืขืงืจื•ื ื™?

ื•ืืกื™ืœื™, [16.07.18 14:02] ื–ื• ื”ื“ืจืš ื”ื™ื—ื™ื“ื”

ื•ืื“ื™ื ื’ื•ื ืฆ'ืจื•ื‘, [16.07.18 14:02] ืฉื‘ืขืฆื ืืžื•ืจ ืœื”ื™ื•ืช ื”ืกื›ืžื” ืขืœ ื”ืฉื›ื‘ื” ื‘ืชื—ื™ืœืช ื”ืคื’ื™ืฉื”

ืื’ื‘, ืžื›ืืŸ ื ื•ื‘ืข ืฉืœื ื ื™ืชืŸ ืฉื“ืจื•ื’ ืœืื—ื•ืจ ืฉืœ ื”ืœืงื•ื—

ืขื“ื›ื•ื ื™ื, ื›ืœื•ืžืจ. ืกื•ึผื’ Updates ื‘ืกื›ื™ืžื”, ื–ื” ืžื” ืฉื”ืฉืจืช ืฉื•ืœื— ืœืœืงื•ื— ืœื ื‘ืชื’ื•ื‘ื” ืœื‘ืงืฉืช API, ืืœื ื‘ืื•ืคืŸ ืขืฆืžืื™ ื›ืืฉืจ ืžืชืจื—ืฉ ืื™ืจื•ืข. ื–ื”ื• ื ื•ืฉื ืžื•ืจื›ื‘ ืฉื ื“ื•ืŸ ื‘ื• ื‘ืคื•ืกื˜ ืื—ืจ, ืืš ืœืขืช ืขืชื” ื—ืฉื•ื‘ ืœื“ืขืช ืฉื”ืฉืจืช ืฉื•ืžืจ ืขื“ื›ื•ื ื™ื ื’ื ื›ืฉื”ืœืงื•ื— ื‘ืžืฆื‘ ืœื ืžืงื•ื•ืŸ.

ืœืคื™ื›ืš, ืื ืืชื” ืžืกืจื‘ ืœืขื˜ื•ืฃ ื›ืœ ื—ื‘ื™ืœื” ื›ื“ื™ ืœืฆื™ื™ืŸ ืืช ื”ื’ืจืกื” ืฉืœื”, ื–ื” ืžื•ื‘ื™ืœ ื‘ืื•ืคืŸ ื”ื’ื™ื•ื ื™ ืœื‘ืขื™ื•ืช ื”ืืคืฉืจื™ื•ืช ื”ื‘ืื•ืช:

  • ื”ืฉืจืช ืฉื•ืœื— ืขื“ื›ื•ื ื™ื ืœืœืงื•ื— ืขื•ื“ ืœืคื ื™ ืฉื”ืœืงื•ื— ื”ื•ื“ื™ืข โ€‹โ€‹ื‘ืื™ื–ื• ื’ืจืกื” ื”ื•ื ืชื•ืžืš
  • ืžื” ืขืœื™ ืœืขืฉื•ืช ืœืื—ืจ ืฉื“ืจื•ื’ ื”ืœืงื•ื—?
  • ืžื™ ืขืจื‘ื•ื™ื•ืชืฉื“ืขืช ื”ืฉืจืช ืœื’ื‘ื™ ืžืกืคืจ ื”ืฉื›ื‘ื” ืœื ืชืฉืชื ื” ื‘ืžื”ืœืš ื”ืชื”ืœื™ืš?

ื”ืื ืœื“ืขืชืš ืžื“ื•ื‘ืจ ื‘ืกืคืงื•ืœืฆื™ื” ืชื™ืื•ืจื˜ื™ืช ื‘ืœื‘ื“, ื•ื‘ืคื•ืขืœ ื–ื” ืœื ื™ื›ื•ืœ ืœืงืจื•ืช, ื›ื™ ื”ืฉืจืช ื›ืชื•ื‘ ื ื›ื•ืŸ (ืœืคื—ื•ืช, ื”ื•ื ื ื‘ื“ืง ื”ื™ื˜ื‘)? ื”ื! ืœื ืžืฉื ื” ืื™ืš ื–ื”!

ื–ื” ื‘ื“ื™ื•ืง ืžื” ืฉื ืชืงืœื ื• ื‘ื• ื‘ืื•ื’ื•ืกื˜. ื‘-14 ื‘ืื•ื’ื•ืกื˜, ื”ื™ื• ื”ื•ื“ืขื•ืช ืฉืžืฉื”ื• ืžืชืขื“ื›ืŸ ื‘ืฉืจืชื™ ื”ื˜ืœื’ืจื... ื•ืื– ื‘ื™ื•ืžื ื™ื:

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.

ื•ืœืื—ืจ ืžื›ืŸ ืžืกืคืจ ืžื’ื”-ื‘ื™ื™ื˜ ืฉืœ ืขืงื‘ื•ืช ืžื—ืกื ื™ืช (ื˜ื•ื‘, ื‘ืื•ืชื• ื–ืžืŸ ืจื™ืฉื•ื ื”ืจื™ืฉื•ื ืชื•ืงืŸ). ืื—ืจื™ ื”ื›ืœ, ืื ืžืฉื”ื• ืœื ืžื–ื•ื”ื” ื‘-TL ืฉืœืš, ื–ื” ื‘ื™ื ืืจื™ ื‘ื—ืชื™ืžื”, ื‘ื”ืžืฉืš ื”ืฉื•ืจื” ALL ื”ื•ืœืš, ืคืขื ื•ื— ื™ื”ืคื•ืš ืœื‘ืœืชื™ ืืคืฉืจื™. ืžื” ื›ื“ืื™ ืœืขืฉื•ืช ื‘ืžืฆื‘ ื›ื–ื”?

ื•ื‘ื›ืŸ, ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ืฉืขื•ืœื” ื‘ืžื•ื—ื• ืฉืœ ืžื™ืฉื”ื• ื”ื•ื ืœื”ืชื ืชืง ื•ืœื ืกื•ืช ืฉื•ื‘. ืœื ืขื–ืจ. ืื ื—ื ื• ืžื—ืคืฉื™ื ื‘ื’ื•ื’ืœ CRC32 - ื”ืชื‘ืจืจ ืฉื”ื ืื•ื‘ื™ื™ืงื˜ื™ื ืžืกื›ืžื” 73, ืœืžืจื•ืช ืฉืขื‘ื“ื ื• ืขืœ 82. ืื ื—ื ื• ืžืกืชื›ืœื™ื ื”ื™ื˜ื‘ ืขืœ ื”ื™ื•ืžื ื™ื - ื™ืฉ ืžื–ื”ื™ื ืžืฉืชื™ ืกื›ืžื•ืช ืฉื•ื ื•ืช!

ืื•ืœื™ ื”ื‘ืขื™ื” ื”ื™ื ืืš ื•ืจืง ื‘ืœืงื•ื— ื”ืœื ืจืฉืžื™ ืฉืœื ื•? ืœื, ืื ื• ืžืฉื™ืงื™ื ืืช Telegram Desktop 1.2.17 (ื’ืจืกื” ืžืกื•ืคืงืช ื‘ืžืกืคืจ ื”ืคืฆื•ืช ืœื™ื ื•ืงืก), ื”ื•ื ื›ื•ืชื‘ ืœื™ื•ืžืŸ ื”ื—ืจื™ื’ื™ื: MTP Unexpected type id #b5223b0f read in MTPMessageMedia...

ื‘ื™ืงื•ืจืช ืขืœ ื”ืคืจื•ื˜ื•ืงื•ืœ ื•ื”ื’ื™ืฉื•ืช ื”ืืจื’ื•ื ื™ื•ืช ืฉืœ ื˜ืœื’ืจื. ื—ืœืง 1, ื˜ื›ื ื™: ื ื™ืกื™ื•ืŸ ื‘ื›ืชื™ื‘ืช ืœืงื•ื— ืžืืคืก - TL, MT

ื’ื•ื’ืœ ื”ืจืืชื” ืฉื›ื‘ืจ ืงืจืชื” ื‘ืขื™ื” ื“ื•ืžื” ืœืื—ื“ ื”ืœืงื•ื—ื•ืช ื”ืœื ืจืฉืžื™ื™ื, ืื‘ืœ ืื– ืžืกืคืจื™ ื”ื’ืจืกืื•ืช ื•ื‘ื”ืชืื ืœื›ืš ื”ื”ื ื—ื•ืช ื”ื™ื• ืฉื•ื ื•ืช...

ืื– ืžื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืขืฉื•ืช? ื•ืืกื™ืœื™ ื•ืื ื™ ื ืคืจื“ื ื•: ื”ื•ื ื ื™ืกื” ืœืขื“ื›ืŸ ืืช ื”ืžืขื’ืœ ืœ-91, ื”ื—ืœื˜ืชื™ ืœื—ื›ื•ืช ื›ืžื” ื™ืžื™ื ื•ืœื ืกื•ืช ื‘-73. ืฉืชื™ ื”ืฉื™ื˜ื•ืช ืขื‘ื“ื•, ืื‘ืœ ืžื›ื™ื•ื•ืŸ ืฉื”ืŸ ืืžืคื™ืจื™ื•ืช, ืื™ืŸ ื”ื‘ื ื” ืฉืœ ื›ืžื” ื’ืจืกืื•ืช ืœืžืขืœื” ืื• ืœืžื˜ื” ืืชื” ืฆืจื™ืš ืœืงืคื•ืฅ, ืื• ื›ืžื” ื–ืžืŸ ืืชื” ืฆืจื™ืš ืœื—ื›ื•ืช .

ืžืื•ื—ืจ ื™ื•ืชืจ ื”ืฆืœื—ืชื™ ืœืฉื—ื–ืจ ืืช ื”ืžืฆื‘: ืื ื• ืžืคืขื™ืœื™ื ืืช ื”ืœืงื•ื—, ืžื›ื‘ื™ื ืื•ืชื•, ืžืงืžืคืœื™ื ืžื—ื“ืฉ ืืช ื”ืžืขื’ืœ ืœืฉื›ื‘ื” ืื—ืจืช, ืžืคืขื™ืœื™ื ืžื—ื“ืฉ, ืชื•ืคืกื™ื ืฉื•ื‘ ืืช ื”ื‘ืขื™ื”, ื—ื•ื–ืจื™ื ืœืงื•ื“ืžืช - ืื•ืคืก, ืื™ืŸ ื›ืžื•ืช ืฉืœ ื”ื—ืœืคืช ืžืขื’ืœื™ื ื•ื”ืœืงื•ื— ืžืคืขื™ืœ ืžื—ื“ืฉ ืœืžืฉืš ื›ืžื” ื“ืงื•ืช ื™ืขื–ืจื•. ืชืงื‘ืœ ืฉื™ืœื•ื‘ ืฉืœ ืžื‘ื ื™ ื ืชื•ื ื™ื ืžืฉื›ื‘ื•ืช ืฉื•ื ื•ืช.

ื”ึถืกื‘ึผึตืจ? ื›ืคื™ ืฉื ื™ืชืŸ ืœื ื—ืฉ ืžืกื™ืžืคื˜ื•ืžื™ื ืขืงื™ืคื™ื ืฉื•ื ื™ื, ื”ืฉืจืช ืžื•ืจื›ื‘ ืžืชื”ืœื™ื›ื™ื ืจื‘ื™ื ืžืกื•ื’ื™ื ืฉื•ื ื™ื ื‘ืžื›ื•ื ื•ืช ืฉื•ื ื•ืช. ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉื”ืฉืจืช ืฉืื—ืจืื™ ืœ"ื—ืฆืฅ" ื”ื›ื ื™ืก ืœืชื•ืจ ืืช ืžื” ืฉื”ืžืžื•ื ื™ื ืขืœื™ื• ื ืชื ื• ืœื•, ื•ื”ื ื ืชื ื• ืืช ื–ื” ื‘ืชื•ื›ื ื™ืช ืฉื”ื™ื™ืชื” ืงื™ื™ืžืช ื‘ื–ืžืŸ ื”ื™ืฆื™ืจื”. ื•ืขื“ ืฉื”ืชื•ืจ ื”ื–ื” "ืจืงื•ื‘", ืœื ื ื™ืชืŸ ื”ื™ื” ืœืขืฉื•ืช ื“ื‘ืจ ื‘ื ื™ื“ื•ืŸ.

ืื•ืœื™... ืื‘ืœ ื–ื” ืงื‘ ื ื•ืจื?!.. ืœื, ืœืคื ื™ ืฉื ื—ืฉื•ื‘ ืขืœ ืจืขื™ื•ื ื•ืช ืžื˜ื•ืจืคื™ื, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืงื•ื“ ืฉืœ ื”ืœืงื•ื—ื•ืช ื”ืจืฉืžื™ื™ื. ื‘ื’ืจืกืช ื”ืื ื“ืจื•ืื™ื“ ืื ื—ื ื• ืœื ืžื•ืฆืื™ื ืฉื•ื ืžื ืชื— TL, ืื‘ืœ ืื ื—ื ื• ื›ืŸ ืžื•ืฆืื™ื ืงื•ื‘ืฅ ื›ื‘ื“ (GitHub ืžืกืจื‘ ืœื’ืขืช ื‘ื•) ืขื (ื“ื”) ืกื“ืจื”. ืœื”ืœืŸ ืงื˜ืขื™ ื”ืงื•ื“:

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, ืื’ื‘, ืงื•ืจื” ื“ื‘ืจ ื“ื•ืžื” - ืื ื›ืŸ, ื›ืžื” ื”ืชื—ื™ื™ื‘ื•ื™ื•ืช ื‘ืจืฆืฃ ืœืกื›ืžื” ืœื ืžืฉื ื™ื ืืช ืžืกืคืจ ื”ืฉื›ื‘ื” ืฉืœื”, ืืœื ืžืชืงื ื™ื ืžืฉื”ื•. ื‘ืชื ืื™ื ืฉื‘ื”ื ืื™ืŸ ืžืงื•ืจ ืจืฉืžื™ ืœื ืชื•ื ื™ื ืขื‘ื•ืจ ื”ืชื•ื›ื ื™ืช, ืžืื™ืคื” ื ื™ืชืŸ ืœื”ืฉื™ื’ื•, ืœืžืขื˜ ืงื•ื“ ื”ืžืงื•ืจ ืฉืœ ื”ืœืงื•ื— ื”ืจืฉืžื™? ื•ืื ืืชื” ืœื•ืงื— ืืช ื–ื” ืžืฉื, ืืชื” ืœื ื™ื›ื•ืœ ืœื”ื™ื•ืช ื‘ื˜ื•ื— ืฉื”ืกื›ื™ืžื” ื ื›ื•ื ื” ืœื—ืœื•ื˜ื™ืŸ ืขื“ ืฉืชื‘ื“ื•ืง ืืช ื›ืœ ื”ืฉื™ื˜ื•ืช.

ืื™ืš ืืคืฉืจ ื‘ื›ืœืœ ืœื‘ื“ื•ืง ืืช ื–ื”? ืื ื™ ืžืงื•ื•ื” ืฉื—ื•ื‘ื‘ื™ ื™ื—ื™ื“ื•ืช, ื‘ื“ื™ืงื•ืช ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื•ืื—ืจื•ืช ื™ืฉืชืคื• ื‘ื”ืขืจื•ืช.

ืื•ืงื™ื™, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืคื™ืกืช ืงื•ื“ ื ื•ืกืคืช:

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;

ื”ื”ืขืจื” ื”ื–ื• "ื ื•ืฆืจื” ื‘ืื•ืคืŸ ื™ื“ื ื™" ืžืจืžื–ืช ืฉืจืง ื—ืœืง ืžื”ืงื•ื‘ืฅ ื”ื–ื” ื ื›ืชื‘ ื‘ืื•ืคืŸ ื™ื“ื ื™ (ื”ืื ืืชื” ื™ื›ื•ืœ ืœื“ืžื™ื™ืŸ ืืช ื›ืœ ืกื™ื•ื˜ ื”ืชื—ื–ื•ืงื”?), ื•ื”ืฉืืจ ื ื•ืฆืจ ืขืœ ื™ื“ื™ ืžื›ื•ื ื”. ืื•ืœื ืื– ืžืชืขื•ืจืจืช ืฉืืœื” ื ื•ืกืคืช - ืฉื”ืžืงื•ืจื•ืช ื–ืžื™ื ื™ื ืœื ืœื’ืžืจื™ (ื la GPL blobs ื‘ืงืจื ืœ ืฉืœ ืœื™ื ื•ืงืก), ืื‘ืœ ื–ื” ื›ื‘ืจ ื ื•ืฉื ืœื—ืœืง ื”ืฉื ื™.

ืื‘ืœ ื“ื™. ื‘ื•ื ื ืขื‘ื•ืจ ืœืคืจื•ื˜ื•ืงื•ืœ ืฉืขืœื™ื• ืžืชื ื”ืœืช ื›ืœ ื”ื”ืกื“ืจื” ื”ื–ื•.

MTProto

ืื– ื‘ื•ืื• ื ืคืชื— ืชื™ืื•ืจ ื›ืœืœื™ ะธ ืชื™ืื•ืจ ืžืคื•ืจื˜ ืฉืœ ื”ืคืจื•ื˜ื•ืงื•ืœ ื•ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ืฉืื ื—ื ื• ื ืชืงืœื™ื ื‘ื• ื”ื•ื ื”ื˜ืจืžื™ื ื•ืœื•ื’ื™ื”. ื•ืขื ืฉืคืข ืฉืœ ื”ื›ืœ. ื‘ืื•ืคืŸ ื›ืœืœื™, ื ืจืื” ืฉื–ื• ืชื›ื•ื ื” ืงื ื™ื™ื ื™ืช ืฉืœ ื˜ืœื’ืจื - ืœืงืจื•ื ืœื“ื‘ืจื™ื ื‘ืฆื•ืจื” ืฉื•ื ื” ื‘ืžืงื•ืžื•ืช ืฉื•ื ื™ื, ืื• ืœื“ื‘ืจื™ื ืฉื•ื ื™ื ื‘ืžื™ืœื” ืื—ืช, ืื• ืœื”ื™ืคืš (ืœื“ื•ื’ืžื”, ื‘-API ื‘ืจืžื” ื’ื‘ื•ื”ื”, ืื ืืชื” ืจื•ืื” ื—ื‘ื™ืœืช ืžื“ื‘ืงื•ืช, ื–ื” ืœื ืžื” ืฉื—ืฉื‘ืช).

ืœื“ื•ื’ืžื”, "ื”ื•ื“ืขื”" ื•-"Session" ืื•ืžืจื•ืช ื›ืืŸ ืžืฉื”ื• ืฉื•ื ื” ืžืืฉืจ ื‘ืžืžืฉืง ื”ืœืงื•ื— ื”ืจื’ื™ืœ ืฉืœ Telegram. ื•ื‘ื›ืŸ, ื”ื›ืœ ื‘ืจื•ืจ ืขื ื”ื”ื•ื“ืขื”, ืืคืฉืจ ืœืคืจืฉ ืื•ืชื” ื‘ืžื•ื ื—ื™ OOP, ืื• ืคืฉื•ื˜ ืœืงืจื•ื ืœืžื™ืœื” "ืžื ื•ืช" - ื–ื• ืจืžืช ืชื—ื‘ื•ืจื” ื ืžื•ื›ื”, ืื™ืŸ ืื•ืชืŸ ื”ื•ื“ืขื•ืช ื›ืžื• ื‘ืžืžืฉืง, ื™ืฉ ื”ืจื‘ื” ื”ื•ื“ืขื•ืช ืฉื™ืจื•ืช . ืื‘ืœ ื”ืคื’ื™ืฉื”... ืื‘ืœ ืงื•ื“ื ื›ืœ.

ืฉื›ื‘ืช ืชื—ื‘ื•ืจื”

ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ื”ื•ื ืชื—ื‘ื•ืจื”. ื”ื ื™ืกืคืจื• ืœื ื• ืขืœ 5 ืืคืฉืจื•ื™ื•ืช:

  • TCP
  • ืจืฉืช ืื™ื ื˜ืจื ื˜
  • Websocket ืขืœ HTTPS
  • HTTP
  • HTTPS

ื•ืืกื™ืœื™, [15.06.18 15:04] ื™ืฉ ื’ื ืชื—ื‘ื•ืจื” UDP, ืื‘ืœ ื–ื” ืœื ืžืชื•ืขื“

ื•-TCP ื‘ืฉืœื•ืฉ ื’ืจืกืื•ืช

ื”ืจืืฉื•ืŸ ื“ื•ืžื” ืœ-UDP ื“ืจืš TCP, ื›ืœ ื—ื‘ื™ืœื” ื›ื•ืœืœืช ืžืกืคืจ ืจืฆืฃ ื•-crc
ืžื“ื•ืข ืงืจื™ืืช ืžืกืžื›ื™ื ื‘ืขื’ืœื” ื›ื•ืื‘ืช ื›ืœ ื›ืš?

ื•ื‘ื›ืŸ, ื”ื ื” ื–ื” ืขื›ืฉื™ื• TCP ื›ื‘ืจ ื‘-4 ื’ืจืกืื•ืช:

  • ืžืงื•ืฆืจ
  • ื‘ื™ื ื™ื™ื
  • ื‘ื™ื ื™ื™ื ืžืจื•ืคื“
  • ืžืœื

ื•ื‘ื›ืŸ, ื‘ืกื“ืจ, ื‘ื™ื ื™ื™ื ืžืจื•ืคื“ ืขื‘ื•ืจ MTProxy, ื–ื” ื ื•ืกืฃ ืžืื•ื—ืจ ื™ื•ืชืจ ืขืงื‘ ืื™ืจื•ืขื™ื ื™ื“ื•ืขื™ื. ืื‘ืœ ืœืžื” ืขื•ื“ ืฉืชื™ ื’ืจืกืื•ืช (ืฉืœื•ืฉ ื‘ืกืš ื”ื›ืœ) ื›ืฉืืคืฉืจ ืœื”ืกืชื“ืจ ืขื ืื—ืช? ื›ืœ ื”ืืจื‘ืขื” ื ื‘ื“ืœื™ื ื–ื” ืžื–ื” ืจืง ื›ื™ืฆื“ ืœื”ื’ื“ื™ืจ ืืช ื”ืื•ืจืš ื•ื”ืžื˜ืขืŸ ืฉืœ ื”-MTProto ื”ืจืืฉื™, ืืฉืจ ื™ื™ื“ื•ื ื• ื‘ื”ืžืฉืš:

  • ื‘-Abridged ื–ื” 1 ืื• 4 ื‘ืชื™ื, ืื‘ืœ ืœื 0xef, ื•ืื– ื”ื’ื•ืฃ
  • ื‘-Intermediate ื–ื” 4 ื‘ืชื™ื ืฉืœ ืื•ืจืš ื•ืฉื“ื”, ื•ื”ืคืขื ื”ืจืืฉื•ื ื” ืฉื”ืœืงื•ื— ื—ื™ื™ื‘ ืœืฉืœื•ื— 0xeeeeeeee ื›ื“ื™ ืœืฆื™ื™ืŸ ืฉื–ื” ื‘ื™ื ื™ื™ื
  • ื‘ืื•ืคืŸ ืžืœื ื”ื›ื™ ืžืžื›ืจ, ืžื ืงื•ื“ืช ืžื‘ื˜ื• ืฉืœ ืจืฉืช: ืื•ืจืš, ืžืกืคืจ ืจืฆืฃ, ื•ืœื THE ONE ืฉื”ื•ื ื‘ืขื™ืงืจ MTProto, body, CRC32. ื›ืŸ, ื›ืœ ื–ื” ืขืœ ื’ื‘ื™ TCP. ืžื” ืฉืžืกืคืง ืœื ื• ืชื—ื‘ื•ืจื” ืืžื™ื ื” ื‘ืฆื•ืจื” ืฉืœ ื–ืจื ื‘ืชื™ื ืจืฆื™ืฃ; ืื™ืŸ ืฆื•ืจืš ื‘ืจืฆืคื™ื, ื‘ืžื™ื•ื—ื“ ืกื›ื•ืžื™ ื‘ื™ืงื•ืจืช. ืื•ืงื™ื™, ืขื›ืฉื™ื• ืžื™ืฉื”ื• ื™ืชื ื’ื“ ืœื™ ืฉืœ-TCP ื™ืฉ ืกื›ื•ื ื‘ื™ืงื•ืจืช ืฉืœ 16 ืกื™ื‘ื™ื•ืช, ืื– ืžืชืจื—ืฉืช ืฉื—ื™ืชื•ืช ื‘ื ืชื•ื ื™ื. ืžืฆื•ื™ืŸ, ืื‘ืœ ืœืžืขืฉื” ื™ืฉ ืœื ื• ืคืจื•ื˜ื•ืงื•ืœ ืงืจื™ืคื˜ื•ื’ืจืคื™ ืขื ื’ื™ื‘ื•ื‘ื™ื ืฉืœ ื™ื•ืชืจ ืž-16 ื‘ืชื™ื, ื›ืœ ื”ืฉื’ื™ืื•ืช ื”ืœืœื• - ื•ืืคื™ืœื• ื™ื•ืชืจ - ื™ื™ืชืคืกื• ืขืœ ื™ื“ื™ ืื™ ื”ืชืืžื” ืฉืœ SHA ื‘ืจืžื” ื’ื‘ื•ื”ื” ื™ื•ืชืจ. ืื™ืŸ ื˜ืขื ื‘-CRC32 ื ื•ืกืฃ ืขืœ ื–ื”.

ื”ื‘ื” ื ืฉื•ื•ื” ืืช Abridged, ืฉื‘ื” ืืคืฉืจ ื‘ื™ืช ืื—ื“ ื‘ืื•ืจืš, ืขื Intermediate, ืฉืžืฆื“ื™ืง "ื‘ืžืงืจื” ืฉื™ืฉ ืฆื•ืจืš ื‘ื™ื™ืฉื•ืจ ื ืชื•ื ื™ื ืฉืœ 4 ื‘ืชื™ื", ื•ื–ื” ื“ื™ ืฉื˜ื•ื™ื•ืช. ืžื”, ืžืืžื™ื ื™ื ืฉืžืชื›ื ืชื™ ื˜ืœื’ืจื ื”ื ื›ืœ ื›ืš ืœื ืžื•ื›ืฉืจื™ื ืฉื”ื ืœื ื™ื›ื•ืœื™ื ืœืงืจื•ื ื ืชื•ื ื™ื ืžืฉืงืข ืœืชื•ืš ืžืื’ืจ ืžื™ื•ืฉืจ? ืืชื” ืขื“ื™ื™ืŸ ืฆืจื™ืš ืœืขืฉื•ืช ื–ืืช, ื›ื™ ืงืจื™ืื” ื™ื›ื•ืœื” ืœื”ื—ื–ื™ืจ ืœืš ื›ืœ ืžืกืคืจ ืฉืœ ื‘ืชื™ื (ื•ื™ืฉ ื’ื ืฉืจืชื™ ืคืจื•ืงืกื™, ืœืžืฉืœ...). ืื• ืžืฆื“ ืฉื ื™, ืœืžื” ืœื—ืกื•ื ืืช Abridged ืื ืขื“ื™ื™ืŸ ื™ื”ื™ื” ืœื ื• ืจื™ืคื•ื“ ื›ื‘ื“ ืขืœ ื’ื‘ื™ 16 ื‘ืชื™ื - ื—ืกื•ืš 3 ื‘ืชื™ื ืœืคืขืžื™ื ?

ืžืชืงื‘ืœ ื”ืจื•ืฉื ืฉื ื™ืงื•ืœืื™ ื“ื•ืจื•ื‘ ืžืื•ื“ ืื•ื”ื‘ ืœื”ืžืฆื™ื ืžื—ื“ืฉ ื’ืœื’ืœื™ื, ื›ื•ืœืœ ืคืจื•ื˜ื•ืงื•ืœื™ ืจืฉืช, ืœืœื ื›ืœ ืฆื•ืจืš ืžืขืฉื™ ืฉืœ ืžืžืฉ.

ืืคืฉืจื•ื™ื•ืช ืชื—ื‘ื•ืจื” ืื—ืจื•ืช, ื›ื•ืœืœ. ืื™ื ื˜ืจื ื˜ ื•-MTProxy, ืœื ื ืฉืงื•ืœ ื›ืขืช, ืื•ืœื™ ื‘ืคื•ืกื˜ ืื—ืจ, ืื ืชื”ื™ื” ื‘ืงืฉื”. ืœื’ื‘ื™ ืื•ืชื• MTProxy, ื‘ื•ืื• ื ื–ื›ื•ืจ ืจืง ืขื›ืฉื™ื• ืฉื–ืžืŸ ืงืฆืจ ืœืื—ืจ ืฉื—ืจื•ืจื• ื‘-2018, ืกืคืงื™ื ืœืžื“ื• ื‘ืžื”ื™ืจื•ืช ืœื—ืกื•ื ืื•ืชื”, ื”ืžื™ื•ืขื“ืช ืขื‘ื•ืจ ืขื•ืงืฃ ื—ืกื™ืžื”ืขืœ ื™ื“ื™ ื’ื•ื“ืœ ื”ื—ื‘ื™ืœื”! ื•ื’ื ื”ืขื•ื‘ื“ื” ืฉืฉืจืช ื”-MTProxy ืฉื ื›ืชื‘ (ืฉื•ื‘ ืขืœ ื™ื“ื™ ื•ื•ืœื˜ืžืŸ) ื‘-C ื”ื™ื” ืงืฉื•ืจ ื™ืชืจ ืขืœ ื”ืžื™ื“ื” ืœืคืจื˜ื™ ืœื™ื ื•ืงืก, ืœืžืจื•ืช ืฉื–ื” ืœื ื”ื™ื” ื ื“ืจืฉ ื›ืœืœ (Phil Kulin ื™ืืฉืจ), ื•ืฉืฉืจืช ื“ื•ืžื” ื‘-Go ืื• ื‘-Node.js ื™ืขืฉื” ื–ืืช. ืžืชืื™ื ื‘ืคื—ื•ืช ืžืžืื” ืฉื•ืจื•ืช.

ืื‘ืœ ื ืกื™ืง ืžืกืงื ื•ืช ืœื’ื‘ื™ ื”ืื•ืจื™ื™ื ื•ืช ื”ื˜ื›ื ื™ืช ืฉืœ ื”ืื ืฉื™ื ื”ืืœื” ื‘ืกื•ืฃ ื”ืกืขื™ืฃ, ืœืื—ืจ ืฉื ื‘ื—ืŸ ื ื•ืฉืื™ื ืื—ืจื™ื. ืœืขืช ืขืชื”, ื ืขื‘ื•ืจ ืœืฉื›ื‘ื” 5 ืฉืœ OSI, ืกืฉืŸ - ืขืœื™ื” ื”ื ื™ื—ื• ืืช ืกืฉืŸ MTProto.

ืžืคืชื—ื•ืช, ื”ื•ื“ืขื•ืช, ื”ืคืขืœื•ืช, ื“ื™ืคื™-ื”ืœืžืŸ

ื”ื ื”ืฆื™ื‘ื• ืืช ื–ื” ืฉื ืœื ืœื’ืžืจื™ ื ื›ื•ืŸ... ื”ืคืขืœื” ื”ื™ื ืœื ืื•ืชื” ื”ืคืขืœื” ืฉื ืจืื™ืช ื‘ืžืžืฉืง ืชื—ืช ื”ืคืขืœื•ืช ืคืขื™ืœื•ืช. ืื‘ืœ ืœืคื™ ื”ืกื“ืจ.

ื‘ื™ืงื•ืจืช ืขืœ ื”ืคืจื•ื˜ื•ืงื•ืœ ื•ื”ื’ื™ืฉื•ืช ื”ืืจื’ื•ื ื™ื•ืช ืฉืœ ื˜ืœื’ืจื. ื—ืœืง 1, ื˜ื›ื ื™: ื ื™ืกื™ื•ืŸ ื‘ื›ืชื™ื‘ืช ืœืงื•ื— ืžืืคืก - TL, MT

ืื– ืงื™ื‘ืœื ื• ืžื—ืจื•ื–ืช ื‘ืชื™ื ื‘ืื•ืจืš ื™ื“ื•ืข ืžืฉื›ื‘ืช โ€‹โ€‹ื”ืชื—ื‘ื•ืจื”. ื–ื• ื”ื•ื“ืขื” ืžื•ืฆืคื ืช ืื• ื˜ืงืกื˜ ืจื’ื™ืœ - ืื ืื ื—ื ื• ืขื“ื™ื™ืŸ ื‘ืฉืœื‘ ื”ืกื›ื ื”ืžืคืชื— ื•ื‘ืขืฆื ืขื•ืฉื™ื ืืช ื–ื”. ืขืœ ืื™ื–ื” ืžื‘ื™ืŸ ืฉืœืœ ื”ืžื•ืฉื’ื™ื ืฉื ืงืจืื™ื "ืžืคืชื—" ืื ื—ื ื• ืžื“ื‘ืจื™ื? ื‘ื•ืื• ื ื‘ื”ื™ืจ ืืช ื”ื ื•ืฉื ื”ื–ื” ืขื‘ื•ืจ ืฆื•ื•ืช ื”ื˜ืœื’ืจื ืขืฆืžื• (ืื ื™ ืžืชื ืฆืœ ืขืœ ืชืจื’ื•ื ื”ืชื™ืขื•ื“ ืฉืœื™ ืžืื ื’ืœื™ืช ืขื ืžื•ื— ืขื™ื™ืฃ ื‘ืฉืขื” 4 ืœืคื ื•ืช ื‘ื•ืงืจ, ื”ื™ื” ืงืœ ื™ื•ืชืจ ืœื”ืฉืื™ืจ ื›ืžื” ื‘ื™ื˜ื•ื™ื™ื ื›ืคื™ ืฉื”ื):

ื™ืฉ ืฉืชื™ ื™ืฉื•ื™ื•ืช ืฉื ืงืจืื•ืช ืžื•ืฉื‘ - ืื—ื“ ื‘ืžืžืฉืง ื”ืžืฉืชืžืฉ ืฉืœ ืœืงื•ื—ื•ืช ืจืฉืžื™ื™ื ืชื—ืช "ื”ืคืขืœื•ืช ื ื•ื›ื—ื™ื•ืช", ื›ืืฉืจ ื›ืœ ื”ืคืขืœื” ืชื•ืืžืช ืœืžื›ืฉื™ืจ / ืžืขืจื›ืช ื”ืคืขืœื” ืฉืœื.
ืฉื ื™ืช - ืžืคื’ืฉ MTProto, ืฉื™ืฉ ื‘ื• ืืช ืžืกืคืจ ื”ืจืฆืฃ ืฉืœ ื”ื”ื•ื“ืขื” (ื‘ืžื•ื‘ืŸ ื‘ืจืžื” ื ืžื•ื›ื”), ื•ืื™ื–ื” ืขืฉื•ื™ ืœื”ื™ืžืฉืš ื‘ื™ืŸ ื—ื™ื‘ื•ืจื™ TCP ืฉื•ื ื™ื. ื ื™ืชืŸ ืœื”ืชืงื™ืŸ ืžืกืคืจ ื”ืคืขืœื•ืช ืฉืœ MTProto ื‘ื•-ื–ืžื ื™ืช, ืœืžืฉืœ, ื›ื“ื™ ืœื”ืื™ืฅ ืืช ื”ื•ืจื“ืช ื”ืงื‘ืฆื™ื.

ื‘ื™ืŸ ืฉื ื™ ืืœื” ื”ืคืขืœื•ืช ื™ืฉ ืžื•ืฉื’ ืื™ืฉื•ืจ. ื‘ืžืงืจื” ื”ืžื ื•ื•ืŸ, ืืคืฉืจ ืœื•ืžืจ ื–ืืช ื”ืคืขืœื” ืฉืœ ืžืžืฉืง ืžืฉืชืžืฉ ื–ื”ื” ืœ ืื™ืฉื•ืจ, ืื‘ืœ ืื‘ื•ื™, ื”ื›ืœ ืžืกื•ื‘ืš. ื‘ื•ืื• ื ืจืื”:

  • ื”ืžืฉืชืžืฉ ื‘ืžื›ืฉื™ืจ ื”ื—ื“ืฉ ื™ื•ืฆืจ ืœืจืืฉื•ื ื” ืžืคืชื— ืื™ืžื•ืช ื•ืžื’ื‘ื™ืœ ืื•ืชื• ืœื—ืฉื‘ื•ืŸ, ืœืžืฉืœ ื‘ืืžืฆืขื•ืช SMS - ื–ื• ื”ืกื™ื‘ื” ืื™ืฉื•ืจ
  • ื–ื” ืงืจื” ื‘ืชื•ืš ื”ืจืืฉื•ืŸ ืžืคื’ืฉ MTProto, ืฉื™ืฉ session_id ื‘ืชื•ืš ืขืฆืžืš.
  • ื‘ืฉืœื‘ ื–ื”, ื”ืฉื™ืœื•ื‘ ืื™ืฉื•ืจ ะธ session_id ื™ื›ื•ืœ ืœื”ื™ืงืจื ืœืžืฉืœ - ืžื™ืœื” ื–ื• ืžื•ืคื™ืขื” ื‘ืชื™ืขื•ื“ ื•ื‘ืงื•ื“ ืฉืœ ื—ืœืง ืžื”ืœืงื•ื—ื•ืช
  • ืœืื—ืจ ืžื›ืŸ, ื”ืœืงื•ื— ื™ื›ื•ืœ ืœืคืชื•ื— ื›ืžื” ื”ืคืขืœื•ืช ืฉืœ MTProto ืชื—ืช ืื•ืชื• ื”ื“ื‘ืจ ืžืคืชื— ืื™ืžื•ืช - ืœืื•ืชื• DC.
  • ื•ืื–, ื™ื•ื ืื—ื“ ื”ืœืงื•ื— ื™ืฆื˜ืจืš ืœื‘ืงืฉ ืžืžื ื• ืืช ื”ืงื•ื‘ืฅ DC ืื—ืจ - ื•ืขื‘ื•ืจ DC ื–ื” ื™ื™ื•ื•ืฆืจ ืื—ื“ ื—ื“ืฉ ืžืคืชื— ืื™ืžื•ืช !
  • ืœื”ื•ื“ื™ืข โ€‹โ€‹ืœืžืขืจื›ืช ืฉืœื ืžืฉืชืžืฉ ื—ื“ืฉ ื ืจืฉื ืืœื ืื•ืชื• ื”ื“ื‘ืจ ืื™ืฉื•ืจ (ื”ืคืขืœื” ืฉืœ ืžืžืฉืง ืžืฉืชืžืฉ), ื”ืœืงื•ื— ืžืฉืชืžืฉ ื‘ืงืจื™ืื•ืช API auth.exportAuthorization ื‘ื‘ื™ืช DC auth.importAuthorization ื‘-DC ื”ื—ื“ืฉ.
  • ื”ื›ืœ ืื•ืชื• ื“ื‘ืจ, ื›ืžื” ืขืฉื•ื™ื™ื ืœื”ื™ื•ืช ืคืชื•ื—ื™ื ื”ืคืขืœื•ืช ืฉืœ MTProto (ื›ืœ ืื—ื“ ืžืฉืœื• session_id) ืœ-DC ื”ื—ื“ืฉ ื”ื–ื”, ืชื—ืช ืฉืœื• ืžืคืชื— ืื™ืžื•ืช.
  • ืœื‘ืกื•ืฃ, ื™ื™ืชื›ืŸ ืฉื”ืœืงื•ื— ื™ืจืฆื” Perfect Forward Secrecy. ื›ึผึนืœ ืžืคืชื— ืื™ืžื•ืช ื”ื™ื” ืงื‘ื•ืข ืžืคืชื— - ืœื›ืœ DC - ื•ื”ืœืงื•ื— ื™ื›ื•ืœ ืœื”ืชืงืฉืจ auth.bindTempAuthKey ืœืฉื™ืžื•ืฉ ื–ืžื ื™ ืžืคืชื— ืื™ืžื•ืช - ื•ืฉื•ื‘, ืจืง ืื—ื“ temp_auth_key ืœื›ืœ DC, ืžืฉื•ืชืฃ ืœื›ื•ืœื ื”ืคืขืœื•ืช ืฉืœ MTProto ืœ-DC ื”ื–ื”.

ืฉื™ื ืœื‘ ืฉ ืžืœื— (ื•ืžืœื—ื™ื ืขืชื™ื“ื™ื™ื) ื”ื•ื ื’ื ืื—ื“ ืขืœ ืžืคืชื— ืื™ืžื•ืช ื”ึธื”ึตืŸ. ืžืฉื•ืชืฃ ื‘ื™ืŸ ื›ื•ืœื ื”ืคืขืœื•ืช ืฉืœ MTProto ืœืื•ืชื• DC.

ืžื” ื”ืžืฉืžืขื•ืช ืฉืœ "ื‘ื™ืŸ ื—ื™ื‘ื•ืจื™ TCP ืฉื•ื ื™ื"? ืื– ื–ื” ืื•ืžืจ ืžืฉื”ื• ื›ืžื• ืขื•ื’ื™ื™ืช ื”ืจืฉืื” ื‘ืืชืจ - ื”ื™ื ืžืžืฉื™ื›ื” (ืฉื•ืจื“ืช) ื—ื™ื‘ื•ืจื™ TCP ืจื‘ื™ื ืœืฉืจืช ื ืชื•ืŸ, ืื‘ืœ ื™ื•ื ืื—ื“ ื”ื™ื ืžืชืงืœืงืœืช. ืจืง ื‘ืฉื•ื ื” ืž-HTTP, ื‘-MTProto ื”ื•ื“ืขื•ืช ื‘ืชื•ืš ื”ืคืขืœื” ืžืžื•ืกืคืจื•ืช ื•ืžืื•ืฉืจื•ืช ื‘ืจืฆืฃ; ืื ื”ืŸ ื ื›ื ืกื• ืœืžื ื”ืจื”, ื”ื—ื™ื‘ื•ืจ ื ืฉื‘ืจ - ืœืื—ืจ ื™ืฆื™ืจืช ื—ื™ื‘ื•ืจ ื—ื“ืฉ, ื”ืฉืจืช ื™ืฉืœื— ื‘ื—ื‘ื™ื‘ื•ืช ืืช ื›ืœ ืžื” ืฉื‘ืกืฉืŸ ื”ื–ื” ืฉื”ื•ื ืœื ื”ืขื‘ื™ืจ ื‘ืงื•ื“ื ื—ื™ื‘ื•ืจ TCP.

ืขื ื–ืืช, ื”ืžื™ื“ืข ืœืขื™ืœ ืžืกื•ื›ื ืœืื—ืจ ื—ื•ื“ืฉื™ื ืจื‘ื™ื ืฉืœ ื—ืงื™ืจื”. ื‘ื™ื ืชื™ื™ื, ื”ืื ืื ื• ืžื™ื™ืฉืžื™ื ืืช ื”ืœืงื•ื— ืฉืœื ื• ืžืืคืก? - ื ื—ื–ื•ืจ ืœื”ืชื—ืœื”.

ืื– ื‘ื•ืื• ื ื™ืฆื•ืจ auth_key ืขืœ ื’ืจืกืื•ืช ื“ื™ืคื™-ื”ืœืžืŸ ืžื˜ืœื’ืจื. ื‘ื•ืื• ื ื ืกื” ืœื”ื‘ื™ืŸ ืืช ื”ืชื™ืขื•ื“...

Vasily, [19.06.18 20:05] data_with_hash := SHA1(ื ืชื•ื ื™ื) + ื ืชื•ื ื™ื + (ื›ืœ ื‘ืชื™ื ืืงืจืื™); ื›ืš ืฉื”ืื•ืจืš ืฉื•ื•ื” ืœ-255 ื‘ืชื™ื;
ืžื•ืฆืคื ื™ื_ื ืชื•ื ื™ื := RSA(data_with_hash, server_public_key); ืžืกืคืจ ื‘ืื•ืจืš 255 ื‘ืชื™ื (ืื ื“ื™ืืŸ ื’ื“ื•ืœ) ืžื•ืขืœื” ืœืขื•ืฆืžื” ื”ื ื“ืจืฉืช ืขืœ ื”ืžื•ื“ื•ืœื•ืก ื”ื“ืจื•ืฉ, ื•ื”ืชื•ืฆืื” ืžืื•ื—ืกื ืช ื›ืžืกืคืจ ืฉืœ 256 ื‘ืชื™ื.

ื™ืฉ ืœื”ื DH ืกืžื™ื

ืœื ื ืจืื” ื›ืžื• DH ืฉืœ ืื“ื ื‘ืจื™ื
ืื™ืŸ ืฉื ื™ ืžืคืชื—ื•ืช ืฆื™ื‘ื•ืจื™ื™ื ื‘-dx

ื•ื‘ื›ืŸ, ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื–ื” ื”ื•ืกื“ืจ, ืื‘ืœ ื ืฉืืจื• ืฉืืจื™ื•ืช - ื”ื•ื›ื—ื” ืœืขื‘ื•ื“ื” ื ืขืฉื™ืช ืขืœ ื™ื“ื™ ื”ืœืงื•ื— ืฉื”ื•ื ื”ืฆืœื™ื— ืœื—ืฉื‘ ืืช ื”ืžืกืคืจ. ืกื•ื’ ื”ื’ื ื” ืžืคื ื™ ื”ืชืงืคื•ืช DoS. ื•ืžืคืชื— RSA ืžืฉืžืฉ ืจืง ืคืขื ืื—ืช ื‘ื›ื™ื•ื•ืŸ ืื—ื“, ื‘ืขืฆื ืœื”ืฆืคื ื” new_nonce. ืื‘ืœ ื‘ืขื•ื“ ืฉื”ืžื‘ืฆืข ื”ืคืฉื•ื˜ ืœื›ืื•ืจื” ื”ื–ื” ื™ืฆืœื™ื—, ืขื ืžื” ืชืฆื˜ืจืš ืœื”ืชืžื•ื“ื“?

ื•ืืกื™ืœื™, [20.06.18/00/26 XNUMX:XNUMX] ืขื“ื™ื™ืŸ ืœื ื”ื’ืขืชื™ ืœื‘ืงืฉืช ื”ืืคืœื™ืงืฆื™ื”

ืฉืœื—ืชื™ ื‘ืงืฉื” ื–ื• ืœ-DH

ื•ื‘ืžืขื’ืŸ ื”ืชื—ื‘ื•ืจื” ื›ืชื•ื‘ ืฉื”ื•ื ื™ื›ื•ืœ ืœื”ื’ื™ื‘ ืขื 4 ื‘ืชื™ื ืฉืœ ืงื•ื“ ืฉื’ื™ืื”. ื–ื” ื”ื›ืœ

ื•ื‘ื›ืŸ, ื”ื•ื ืืžืจ ืœื™ -404, ืื– ืžื”?

ืื– ืืžืจืชื™ ืœื•: "ืชืคื•ืก ืืช ื”ืฉื˜ื•ื™ื•ืช ืฉืœืš ืžื•ืฆืคืŸ ืขื ืžืคืชื— ืฉืจืช ืขื ื˜ื‘ื™ืขืช ืืฆื‘ืข ื›ื–ื•, ืื ื™ ืจื•ืฆื” DH," ื•ื–ื” ื”ื’ื™ื‘ ืขื 404 ื˜ื™ืคืฉื™

ืžื” ื”ื™ื™ืชื ื—ื•ืฉื‘ื™ื ืขืœ ืชื’ื•ื‘ืช ื”ืฉืจืช ื”ื–ื•? ืžื” ืœืขืฉื•ืช? ืื™ืŸ ืืช ืžื™ ืœืฉืื•ืœ (ืื‘ืœ ืขื•ื“ ืขืœ ื›ืš ื‘ื—ืœืง ื”ืฉื ื™).

ื›ืืŸ ื›ืœ ื”ืขื ื™ื™ืŸ ื ืขืฉื” ืขืœ ื”ืžื–ื—

ืื™ืŸ ืœื™ ืžื” ืœืขืฉื•ืช, ืคืฉื•ื˜ ื—ืœืžืชื™ ืœื”ืžื™ืจ ืžืกืคืจื™ื ื”ืœื•ืš ื•ืฉื•ื‘

ืฉื ื™ ืžืกืคืจื™ 32 ืกื™ื‘ื™ื•ืช. ืืจื–ืชื™ ืื•ืชื ื›ืžื• ื›ื•ืœื

ืื‘ืœ ืœื, ืฆืจื™ืš ืœื”ื•ืกื™ืฃ ืืช ืฉื ื™ ืืœื” ืœืฉื•ืจื” ืชื—ื™ืœื” ื‘ืชื•ืจ BE

ื•ืื“ื™ื ื’ื•ื ืฆ'ืจื•ื‘, [20.06.18 15:49] ื•ื‘ื’ืœืœ ื–ื” 404?

ื•ืืกื™ืœื™, [20.06.18 15:49] ื›ืŸ!

ื•ืื“ื™ื ื’ื•ื ืฆ'ืจื•ื‘, [20.06.18 15:50] ืื– ืื ื™ ืœื ืžื‘ื™ืŸ ืžื” ื”ื•ื ื™ื›ื•ืœ "ืœื ืžืฆื"

ื•ืกื™ืœื™, [20.06.18 15:50] ื›

ืœื ื”ืฆืœื—ืชื™ ืœืžืฆื•ื ืคื™ืจื•ืง ื›ื–ื” ืœื’ื•ืจืžื™ื ืจืืฉื•ื ื™ื™ื%)

ืืคื™ืœื• ืœื ื ื™ื”ืœื ื• ื“ื™ื•ื•ื— ืขืœ ืฉื’ื™ืื•ืช

ื•ืืกื™ืœื™, [20.06.18 20:18] ืื”, ื™ืฉ ื’ื MD5. ื›ื‘ืจ ืฉืœื•ืฉื” ื—ืฉื™ืฉื™ื ืฉื•ื ื™ื

ื˜ื‘ื™ืขืช ื”ืืฆื‘ืข ืฉืœ ื”ืžืคืชื— ืžื—ื•ืฉื‘ืช ื‘ืื•ืคืŸ ื”ื‘ื:

digest = md5(key + iv)
fingerprint = substr(digest, 0, 4) XOR substr(digest, 4, 4)

SHA1 ื•-sha2

ืื– ื‘ื•ืื• ื ื ื™ื— ืืช ื–ื” auth_key ืงื™ื‘ืœื ื• 2048 ืกื™ื‘ื™ื•ืช ื‘ื’ื•ื“ืœ ื‘ืืžืฆืขื•ืช ื“ื™ืคื™-ื”ืœืžืŸ. ืžื” ื”ืœืื”? ื‘ืฉืœื‘ ื”ื‘ื ืื ื• ืžื’ืœื™ื ืฉ-1024 ื”ืกื™ื‘ื™ื•ืช ื”ืชื—ืชื•ื ื•ืช ืฉืœ ื”ืžืคืชื— ื”ื–ื” ืœื ืžืฉืžืฉื•ืช ื‘ืฉื•ื ืฆื•ืจื”... ืื‘ืœ ื‘ื•ืื• ื ื—ืฉื•ื‘ ืขืœ ื–ื” ืœืขืช ืขืชื”. ื‘ืฉืœื‘ ื–ื”, ื™ืฉ ืœื ื• ืกื•ื“ ืžืฉื•ืชืฃ ืขื ื”ืฉืจืช. ื”ื•ืงื ืื ืœื•ื’ื™ ืœืžืคื’ืฉ TLS, ืฉื”ื•ื ื”ืœื™ืš ื™ืงืจ ืžืื•ื“. ืื‘ืœ ื”ืฉืจืช ืขื“ื™ื™ืŸ ืœื ื™ื•ื“ืข ื›ืœื•ื ืขืœ ืžื™ ืื ื—ื ื•! ืขื“ื™ื™ืŸ ืœื, ื‘ืขืฆื. ื”ืจืฉืื”. ื”ึธื”ึตืŸ. ืื ื—ืฉื‘ืชื ื‘ืžื•ื ื—ื™ื ืฉืœ "ืกื™ืกืžืช ื›ื ื™ืกื”", ื›ืžื• ืฉืขืฉื™ืชื ืคืขื ื‘-ICQ, ืื• ืœืคื—ื•ืช "ืžืคืชื— ื›ื ื™ืกื”", ื›ืžื• ื‘-SSH (ืœื“ื•ื’ืžื”, ื‘-gitlab/github ื›ืœืฉื”ื•). ืงื™ื‘ืœื ื• ืื—ื“ ืื ื•ื ื™ืžื™. ืžื” ืื ื”ืฉืจืช ืื•ืžืจ ืœื ื• "ืžืกืคืจื™ ื”ื˜ืœืคื•ืŸ ื”ืืœื” ืžื˜ื•ืคืœื™ื ืขืœ ื™ื“ื™ DC ืื—ืจ"? ืื• ืืคื™ืœื• "ืžืกืคืจ ื”ื˜ืœืคื•ืŸ ืฉืœืš ืืกื•ืจ"? ื”ื›ื™ ื˜ื•ื‘ ืฉืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืขืฉื•ืช ื–ื” ืœืฉืžื•ืจ ืืช ื”ืžืคืชื— ื‘ืชืงื•ื•ื” ืฉื”ื•ื ื™ื”ื™ื” ืฉื™ืžื•ืฉื™ ื•ืœื ื™ืจืงื‘ ืขื“ ืื–.

ืื’ื‘, "ืงื™ื‘ืœื ื•" ืื•ืชื• ื‘ื”ืกืชื™ื™ื’ื•ื™ื•ืช. ืœื“ื•ื’ืžื”, ื”ืื ืื ื• ืกื•ืžื›ื™ื ืขืœ ื”ืฉืจืช? ืžื” ืื ื–ื” ืžื–ื•ื™ืฃ? ื™ื”ื™ื” ืฆื•ืจืš ื‘ื‘ื“ื™ืงื•ืช ืงืจื™ืคื˜ื•ื’ืจืคื™ื•ืช:

Vasily, [21.06.18 17:53] ื”ื ืžืฆื™ืขื™ื ืœืœืงื•ื—ื•ืช ื ื™ื™ื“ื™ื ืœื‘ื“ื•ืง ืžืกืคืจ 2kbit ืขื‘ื•ืจ ืจืืฉื•ื ื™ื•ืช%

ืื‘ืœ ื–ื” ืœื ื‘ืจื•ืจ ื‘ื›ืœืœ, nafeijoa

ื•ืืกื™ืœื™, [21.06.18 18:02] ื”ืžืกืžืš ืœื ืื•ืžืจ ืžื” ืœืขืฉื•ืช ืื ื™ืชื‘ืจืจ ืฉื–ื” ืœื ืคืฉื•ื˜

ืœื ื ืืžืจ. ื‘ื•ื ื ืจืื” ืžื” ืœืงื•ื— ืื ื“ืจื•ืื™ื“ ื”ืจืฉืžื™ ืขื•ืฉื” ื‘ืžืงืจื” ื–ื”? ื ื–ื” ืžื” ืฉ (ื•ื›ืŸ, ื›ืœ ื”ืงื•ื‘ืฅ ืžืขื ื™ื™ืŸ) - ื›ืžื• ืฉืื•ืžืจื™ื, ืื ื™ ืคืฉื•ื˜ ืืฉืื™ืจ ืืช ื–ื” ื›ืืŸ:

278     static const char *goodPrime = "c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b";
279   if (!strcasecmp(prime, goodPrime)) {

ืœื, ื›ืžื•ื‘ืŸ ืฉื–ื” ืขื“ื™ื™ืŸ ืฉื ื›ืžื” ื™ืฉ ืžื‘ื—ื ื™ื ืœืจืืฉื•ื ื™ื•ืช ืฉืœ ืžืกืคืจ, ืื‘ืœ ืื™ืฉื™ืช ื›ื‘ืจ ืื™ืŸ ืœื™ ืžืกืคื™ืง ื™ื“ืข ื‘ืžืชืžื˜ื™ืงื”.

ืื•ืงื™ื™, ื”ืฉื’ื ื• ืืช ื”ืžืคืชื— ื”ืจืืฉื™. ื›ื“ื™ ืœื”ื™ื›ื ืก, ื›ืœื•ืžืจ. ืœืฉืœื•ื— ื‘ืงืฉื•ืช, ืขืœื™ืš ืœื‘ืฆืข ื”ืฆืคื ื” ื ื•ืกืคืช ื‘ืืžืฆืขื•ืช AES.

ืžืคืชื— ื”ื”ื•ื“ืขื” ืžื•ื’ื“ืจ ื›-128 ื”ืกื™ื‘ื™ื•ืช ื”ืืžืฆืขื™ื•ืช ืฉืœ SHA256 ืฉืœ ื’ื•ืฃ ื”ื”ื•ื“ืขื” (ื›ื•ืœืœ ื”ืคืขืœื”, ืžื–ื”ื” ื”ื•ื“ืขื” ื•ื›ื•'), ื›ื•ืœืœ ื‘ืชื™ื ืฉืœ ืจื™ืคื•ื“, ืœืคื ื™ื 32 ื‘ืชื™ื ืฉื ืœืงื—ื• ืžืžืคืชื— ื”ื”ืจืฉืื”.

ื•ืกื™ืœื™, [22.06.18 14:08] ืžืžื•ืฆืข, ื›ืœื‘ื”, ื—ืชื™ื›ื•ืช

ืงื™ื‘ืœื• auth_key. ืืช ื›ืœ. ืžืขื‘ืจ ืœื”ื... ืœื ื‘ืจื•ืจ ืžื”ืžืกืžืš. ืืœ ืชื”ืกืก ืœืœืžื•ื“ ืืช ืงื•ื“ ื”ืงื•ื“ ื”ืคืชื•ื—.

ืฉื™ืžื• ืœื‘ ืฉ-MTProto 2.0 ื“ื•ืจืฉ ืจื™ืคื•ื“ ื‘ื™ืŸ 12 ืœ-1024 ื‘ืชื™ื, ืขื“ื™ื™ืŸ ื‘ืชื ืื™ ืฉืื•ืจืš ื”ื”ื•ื“ืขื” ื”ืžืชืงื‘ืœืช ื™ืชื—ืœืง ื‘-16 ื‘ืชื™ื.

ืื– ื›ืžื” ืจื™ืคื•ื“ ื›ื“ืื™ ืœื”ื•ืกื™ืฃ?

ื•ื›ืŸ, ื™ืฉ ื’ื 404 ื‘ืžืงืจื” ืฉืœ ืฉื’ื™ืื”

ืื ืžื™ืฉื”ื• ืœืžื“ ื”ื™ื˜ื‘ ืืช ื”ืชืจืฉื™ื ื•ื”ื˜ืงืกื˜ ืฉืœ ื”ืชื™ืขื•ื“, ื”ื•ื ืฉื ืœื‘ ืฉืื™ืŸ ืฉื MAC. ื•ื”-AES ืžืฉืžืฉ ื‘ืžืฆื‘ IGE ืžืกื•ื™ื ืฉืื™ื ื• ื‘ืฉื™ืžื•ืฉ ื‘ืฉื•ื ืžืงื•ื ืื—ืจ. ื”ื, ื›ืžื•ื‘ืŸ, ื›ื•ืชื‘ื™ื ืขืœ ื–ื” ื‘ืฉืืœื•ืช ื”ื ืคื•ืฆื•ืช ืฉืœื”ื... ื›ืืŸ, ืœืžืฉืœ, ืžืคืชื— ื”ื”ื•ื“ืขื” ืขืฆืžื• ื”ื•ื ื’ื ื”-SHA hash ืฉืœ ื”ื ืชื•ื ื™ื ื”ืžืคื•ืขื ื—ื™ื, ื”ืžืฉืžืฉ ืœื‘ื“ื™ืงืช ืชืงื™ื ื•ืช - ื•ื‘ืžืงืจื” ืฉืœ ื—ื•ืกืจ ื”ืชืืžื”, ื”ืชื™ืขื•ื“ ืžืกื™ื‘ื” ื›ืœืฉื”ื™ ืžืžืœื™ืฅ ืœื”ืชืขืœื ืžื”ื ื‘ืฉืงื˜ (ืื‘ืœ ืžื” ืœื’ื‘ื™ ืื‘ื˜ื—ื”, ืžื” ืื ื™ืฉื‘ืจื• ืื•ืชื ื•?).

ืื ื™ ืœื ืงืจื™ืคื˜ื•ื’ืจืฃ, ืื•ืœื™ ืื™ืŸ ืฉื•ื ื“ื‘ืจ ืจืข ื‘ืžืฆื‘ ื”ื–ื” ื‘ืžืงืจื” ื”ื–ื” ืžื ืงื•ื“ืช ืžื‘ื˜ ืชื™ืื•ืจื˜ื™ืช. ืื‘ืœ ืื ื™ ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ื‘ื‘ื™ืจื•ืจ ื‘ืขื™ื” ืžืขืฉื™ืช, ื‘ืืžืฆืขื•ืช Telegram Desktop ื›ื“ื•ื’ืžื”. ื”ื•ื ืžืฆืคื™ืŸ ืืช ื”ืžื˜ืžื•ืŸ ื”ืžืงื•ืžื™ (ื›ืœ ืืœื” D877F783D5D3EF8C) ื‘ืื•ืชื• ืื•ืคืŸ ื›ืžื• ื”ื•ื“ืขื•ืช ื‘-MTProto (ืจืง ื‘ืžืงืจื” ื–ื” ื’ืจืกื” 1.0), ื›ืœื•ืžืจ. ืงื•ื“ื ืžืคืชื— ื”ื”ื•ื“ืขื”, ืื—ืจ ื›ืš ื”ื ืชื•ื ื™ื ืขืฆืžื (ื•ืื™ืคืฉื”ื• ื‘ืฆื“ ื”ื’ื“ื•ืœ ื”ืขื™ืงืจื™ auth_key 256 ื‘ืชื™ื, ื‘ืœืขื“ื™ื”ื msg_key ื—ึฒืกึทืจ ืชื•ึนืขึถืœึถืช). ืื–, ื”ื‘ืขื™ื” ื”ื•ืคื›ืช ื‘ื•ืœื˜ืช ื‘ืงื‘ืฆื™ื ื’ื“ื•ืœื™ื. ื›ืœื•ืžืจ, ืืชื” ืฆืจื™ืš ืœืฉืžื•ืจ ืฉื ื™ ืขื•ืชืงื™ื ืฉืœ ื”ื ืชื•ื ื™ื - ืžื•ืฆืคื ื™ื ื•ืžืคื•ืขื ื—ื™ื. ื•ืื ื™ืฉ ืžื’ื”-ื‘ื™ื™ื˜, ืื• ืกื˜ืจื™ืžื™ื ื’ ืฉืœ ื•ื™ื“ืื•, ืœืžืฉืœ?.. ืกื›ื™ืžื•ืช ืงืœืืกื™ื•ืช ืขื MAC ืื—ืจื™ ื˜ืงืกื˜ ื”ื”ืฆืคื ื” ืžืืคืฉืจื•ืช ืœืงืจื•ื ืื•ืชื• ื‘ื–ืจื, ืžื™ื“ ืœืฉื“ืจ ืื•ืชื•. ืื‘ืœ ืขื MTProto ืชืฆื˜ืจืš ื‘ื”ืชื—ืœื” ืœื”ืฆืคื™ืŸ ืื• ืœืคืขื ื— ืืช ื›ืœ ื”ื”ื•ื“ืขื”, ืจืง ืœืื—ืจ ืžื›ืŸ ืœื”ืขื‘ื™ืจ ืื•ืชื” ืœืจืฉืช ืื• ืœื“ื™ืกืง. ืœื›ืŸ, ื‘ื’ืจืกืื•ืช ื”ืื—ืจื•ื ื•ืช ืฉืœ Telegram Desktop ื‘-cache in user_data ื ืขืฉื” ืฉื™ืžื•ืฉ ื’ื ื‘ืคื•ืจืžื˜ ื ื•ืกืฃ - ืขื AES ื‘ืžืฆื‘ CTR.

Vasily, [21.06.18 01:27] ื”ื•, ื’ื™ืœื™ืชื™ ืžื” ื–ื” IGE: IGE ื”ื™ื” ื”ื ื™ืกื™ื•ืŸ ื”ืจืืฉื•ืŸ ืฉืœ "ืžืฆื‘ ื”ืฆืคื ื” ืื™ืžื•ืช", ื‘ืžืงื•ืจ ืขื‘ื•ืจ Kerberos. ื–ื” ื”ื™ื” ื ื™ืกื™ื•ืŸ ื›ื•ืฉืœ (ื”ื•ื ืœื ืžืกืคืง ื”ื’ื ืช ืฉืœืžื•ืช), ื•ื”ื™ื” ืฆืจื™ืš ืœื”ืกื™ืจื•. ื–ื• ื”ื™ื™ืชื” ืชื—ื™ืœืชื” ืฉืœ ืžืกืข ืฉืœ 20 ืฉื ื” ืื—ืจ ืžืฆื‘ ื”ืฆืคื ื” ืื™ืžื•ืช ืฉืขื•ื‘ื“, ืฉื”ื’ื™ืข ืœืฉื™ืื• ืœืื—ืจื•ื ื” ื‘ืžืฆื‘ื™ื ื›ืžื• OCB ื•- GCM.

ื•ืขื›ืฉื™ื• ื”ื˜ื™ืขื•ื ื™ื ืžื”ืฆื“ ืฉืœ ื”ืขื’ืœื”:

ื”ืฆื•ื•ืช ืžืื—ื•ืจื™ ื˜ืœื’ืจื, ื‘ืจืืฉื•ืชื• ืฉืœ ื ื™ืงื•ืœืื™ ื“ื•ืจื•ื‘, ืžื•ืจื›ื‘ ืžืฉื™ืฉื” ืืœื•ืคื™ ACM, ืžื—ืฆื™ืชื ื“ื•ืงื˜ื•ืจื ื˜ื™ื ื‘ืžืชืžื˜ื™ืงื”. ืœืงื— ืœื”ื ื›ืฉื ืชื™ื™ื ืœื”ื•ืฆื™ื ืืช ื”ื’ืจืกื” ื”ื ื•ื›ื—ื™ืช ืฉืœ MTProto.

ื–ื” ืžืฆื—ื™ืง. ืฉื ืชื™ื™ื ื‘ืจืžื” ื ืžื•ื›ื” ื™ื•ืชืจ

ืื• ืฉืืชื” ื™ื›ื•ืœ ืคืฉื•ื˜ ืœืงื—ืช tls

ืื•ืงื™ื™, ื ื ื™ื— ืฉื‘ื™ืฆืขื ื• ืืช ื”ื”ืฆืคื ื” ื•ื ื™ื•ืื ืกื™ื ืื—ืจื™ื. ื”ืื ืกื•ืฃ ืกื•ืฃ ืืคืฉืจ ืœืฉืœื•ื— ื‘ืงืฉื•ืช ืžืกื•ื“ืจื•ืช ื‘-TL ื•ืœื ื˜ืจืœ ืืช ื”ืชื’ื•ื‘ื•ืช? ืื– ืžื” ื•ืื™ืš ื›ื“ืื™ ืœืฉืœื•ื—? ื”ื ื”, ื ื ื™ื—, ื”ืฉื™ื˜ื” initConnection, ืื•ืœื™ ื–ื” ื–ื”?

Vasily, [25.06.18 18:46] ืžืืชื—ืœ ื—ื™ื‘ื•ืจ ื•ืฉืžื™ืจืช ืžื™ื“ืข ื‘ืžื›ืฉื™ืจ ื•ื‘ืืคืœื™ืงืฆื™ื” ืฉืœ ื”ืžืฉืชืžืฉ.

ื”ื•ื ืžืงื‘ืœ app_id, device_model, system_version, app_version ื•-lang_code.

ื•ืงืฆืช ืฉืื™ืœืชื”

ืชื™ืขื•ื“ ื›ืžื• ืชืžื™ื“. ืืชื” ืžื•ื–ืžืŸ ืœืœืžื•ื“ ืืช ื”ืงื•ื“ ื”ืคืชื•ื—

ืื ื”ื›ืœ ื”ื™ื” ื‘ืจื•ืจ ื‘ืขืจืš ืขื invokeWithLayer, ืื– ืžื” ืœื ื‘ืกื“ืจ ื›ืืŸ? ืžืกืชื‘ืจ, ื ื ื™ื— ืฉื™ืฉ ืœื ื• - ืœืœืงื•ื— ื›ื‘ืจ ื”ื™ื” ืขืœ ืžื” ืœืฉืื•ืœ ืืช ื”ืฉืจืช - ื™ืฉ ื‘ืงืฉื” ืฉืจืฆื™ื ื• ืœืฉืœื•ื—:

ื•ืกื™ืœื™, [25.06.18 19:13] ืื ืœืฉืคื•ื˜ ืœืคื™ ื”ืงื•ื“, ื”ืฉื™ื—ื” ื”ืจืืฉื•ื ื” ืขื˜ื•ืคื” ื‘ื–ื‘ืœ ื”ื–ื”, ื•ื”ืฉื˜ื•ืช ืขืฆืžื” ืขื˜ื•ืคื” ื‘-invokewithlayer

ืœืžื” initConnection ืœื ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืฉื™ื—ื” ื ืคืจื“ืช, ืื‘ืœ ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืขื˜ื™ืคื”? ื›ืŸ, ื›ืคื™ ืฉื”ืชื‘ืจืจ, ื–ื” ื—ื™ื™ื‘ ืœื”ื™ืขืฉื•ืช ื‘ื›ืœ ืคืขื ื‘ืชื—ื™ืœืช ื›ืœ ืคื’ื™ืฉื”, ื•ืœื ืคืขื ืื—ืช, ื›ืžื• ืขื ื”ืžืคืชื— ื”ืจืืฉื™. ืื‘ืœ! ืœื ื ื™ืชืŸ ืœื”ืชืงืฉืจ ืืœื™ื• ืขืœ ื™ื“ื™ ืžืฉืชืžืฉ ืœื ืžื•ืจืฉื”! ืขื›ืฉื™ื• ื”ื’ืขื ื• ืœืฉืœื‘ ืฉื‘ื• ื–ื” ื™ืฉื™ื ื–ึถื” ื“ืฃ ืชื™ืขื•ื“ - ื•ื”ื•ื ืื•ืžืจ ืœื ื• ืฉ...

ืจืง ื—ืœืง ืงื˜ืŸ ืžืฉื™ื˜ื•ืช ื”-API ื–ืžื™ื ื•ืช ืœืžืฉืชืžืฉื™ื ืœื ืžื•ืจืฉื™ื:

  • auth.sendCode
  • auth.resendCode
  • 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 ืžื•ื˜ื‘ืขื™ื, ื›ืœื•ืžืจ ืืชื” ื™ื›ื•ืœ ืคืฉื•ื˜ ืกึดื™ืžึธืŸ ื”ืžื™ื“ืข ื”ื–ื”. ืœืžืขืฉื”, ื–ื” ื›ื‘ืจ ื ืขืฉื” ืขื‘ื•ืจ ืžื™ื“ืข ืขืœ ืขืงื™ืคืช ื—ืกื™ืžื” ืฉืœืงื•ื—ื•ืช ืžืงื‘ืœื™ื ื“ืจืš ืขืจื•ืฆื™ื ืื—ืจื™ื (ืžื‘ื—ื™ื ื” ืœื•ื’ื™ืช, ื–ื” ืœื ื™ื›ื•ืœ ืœื”ื™ืขืฉื•ืช ื‘-MTProto ืขืฆืžื”; ืฆืจื™ืš ื’ื ืœื“ืขืช ืœืืŸ ืœื”ืชื—ื‘ืจ).

ื‘ืกื“ืจ. ื‘ืฉืœื‘ ื–ื” ืฉืœ ื”ืจืฉืืช ื”ืœืงื•ื—, ืื ื—ื ื• ืขื“ื™ื™ืŸ ืœื ืžื•ืจืฉื™ื ื•ืœื ืจืฉืžื ื• ืืช ื”ื‘ืงืฉื” ืฉืœื ื•. ืื ื—ื ื• ืจืง ืจื•ืฆื™ื ืœืจืื•ืช ืœืขืช ืขืชื” ืžื” ื”ืฉืจืช ืžื’ื™ื‘ ืœืฉื™ื˜ื•ืช ื”ื–ืžื™ื ื•ืช ืœืžืฉืชืžืฉ ืœื ืžื•ืจืฉื”. ื•ื”ื ื”โ€ฆ

ื•ืกื™ืœื™, [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 ื”ืขืจืš ื”ืฉืœื™ืฉื™ ื”ื•ื

ื›ืŸ, ืžืื–, ื›ืžื•ื‘ืŸ, ื”ืชื™ืขื•ื“ ืขื•ื“ื›ืŸ. ืœืžืจื•ืช ืฉื‘ืงืจื•ื‘ ื–ื” ืฉื•ื‘ ืขืœื•ืœ ืœื”ืคื•ืš ืœืœื ืจืœื•ื•ื ื˜ื™. ืื™ืš ืžืคืชื— ืžืชื—ื™ืœ ืฆืจื™ืš ืœื“ืขืช? ืื•ืœื™ ืื ืชืจืฉื•ื ืืช ื”ื‘ืงืฉื” ืฉืœืš, ื”ื ื™ื•ื“ื™ืขื• ืœืš? ื•ืืกื™ืœื™ ืขืฉื” ืืช ื–ื”, ืื‘ืœ ืื‘ื•ื™, ื”ื ืœื ืฉืœื—ื• ืœื• ืฉื•ื ื“ื‘ืจ (ืฉื•ื‘, ื ื“ื‘ืจ ืขืœ ื–ื” ื‘ื—ืœืง ื”ืฉื ื™).

...ืฉืžืชื ืœื‘ ืฉื›ื‘ืจ ืื™ื›ืฉื”ื• ืขื‘ืจื ื• ืœ-API, ื›ืœื•ืžืจ. ืœืฉืœื‘ ื”ื‘ื, ื•ืคืกืคืก ืžืฉื”ื• ื‘ื ื•ืฉื MTProto? ืœื ืžืคืชื™ืข:

ื•ืืกื™ืœื™, [28.06.18 02:04] ืžืž, ื”ื ืžืคืฉืคืฉื™ื ื‘ื›ืžื” ืžื”ืืœื’ื•ืจื™ืชืžื™ื ื‘-e2e

Mtproto ืžื’ื“ื™ืจ ืืœื’ื•ืจื™ืชืžื™ ื”ืฆืคื ื” ื•ืžืคืชื—ื•ืช ืœืฉื ื™ ื”ืชื—ื•ืžื™ื, ื›ืžื• ื’ื ืžื‘ื ื” ืžืขื˜ืคืช

ืื‘ืœ ื”ื ื›ืœ ื”ื–ืžืŸ ืžืขืจื‘ื‘ื™ื ืจืžื•ืช ืฉื•ื ื•ืช ืฉืœ ื”ืขืจื™ืžื”, ื›ืš ืฉืœื ืชืžื™ื“ ื‘ืจื•ืจ ืื™ืคื” mtproto ื ื’ืžืจ ื•ื”ืฉืœื‘ ื”ื‘ื ื”ืชื—ื™ืœ

ืื™ืš ื”ื ืžืชืขืจื‘ื‘ื™ื? ื•ื‘ื›ืŸ, ื”ื ื” ืื•ืชื• ืžืคืชื— ื–ืžื ื™ ืขื‘ื•ืจ PFS, ืœืžืฉืœ (ืื’ื‘, Telegram Desktop ืœื ื™ื›ื•ืœ ืœืขืฉื•ืช ืืช ื–ื”). ื–ื” ืžื‘ื•ืฆืข ืขืœ ื™ื“ื™ ื‘ืงืฉืช API auth.bindTempAuthKey, ื›ืœื•ืžืจ ืžื”ืจืžื” ื”ืขืœื™ื•ื ื”. ืื‘ืœ ื‘ืื•ืชื• ื–ืžืŸ ื–ื” ืžืคืจื™ืข ืœื”ืฆืคื ื” ื‘ืจืžื” ื”ื ืžื•ื›ื” ื™ื•ืชืจ - ืื—ืจื™ ื–ื”, ืœืžืฉืœ, ืืชื” ืฆืจื™ืš ืœืขืฉื•ืช ืืช ื–ื” ืฉื•ื‘ initConnection ื•ื›ื•', ื–ื” ืœื ืจืง ื‘ืงืฉื” ืจื’ื™ืœื”. ืžื” ืฉืžื™ื•ื—ื“ ื”ื•ื ืฉืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืจืง ืžืคืชื— ื–ืžื ื™ ืื—ื“ ืœื›ืœ DC, ืœืžืจื•ืช ื”ืฉื“ื” auth_key_id ื‘ื›ืœ ื”ื•ื“ืขื” ืžืืคืฉืจ ืœืš ืœืฉื ื•ืช ืืช ื”ืžืคืชื— ืœืคื—ื•ืช ื‘ื›ืœ ื”ื•ื“ืขื”, ื•ืœืฉืจืช ื™ืฉ ืืช ื”ื–ื›ื•ืช "ืœืฉื›ื•ื—" ืืช ื”ืžืคืชื— ื”ื–ืžื ื™ ื‘ื›ืœ ืขืช - ื”ืชื™ืขื•ื“ ืœื ืื•ืžืจ ืžื” ืœืขืฉื•ืช ื‘ืžืงืจื” ื–ื”... ื•ื‘ื›ืŸ, ืœืžื” ืืคืฉืจ ืื™ืŸ ืœืš ื›ืžื” ืžืคืชื—ื•ืช, ื›ืžื• ืขื ืกื˜ ืฉืœ ืžืœื—ื™ื ืขืชื™ื“ื™ื™ื, ื•?..

ื™ืฉ ืขื•ื“ ื›ืžื” ื“ื‘ืจื™ื ืฉื›ื“ืื™ ืœืฉื™ื ืœื‘ ืœื ื•ืฉื MTProto.

ื”ื•ื“ืขื•ืช ื”ื•ื“ืขื”, msg_id, msg_seqno, ืื™ืฉื•ืจื™ื, ืคื™ื ื’ื™ื ื‘ื›ื™ื•ื•ืŸ ื”ืœื ื ื›ื•ืŸ ื•ืขื•ื“ ืžื•ื–ืจื•ื™ื•ืช

ืœืžื” ืืชื” ืฆืจื™ืš ืœื“ืขืช ืขืœื™ื”ื? ื›ื™ ื”ื "ื“ื•ืœืคื™ื" ืœืจืžื” ื’ื‘ื•ื”ื” ื™ื•ืชืจ, ื•ืืชื” ืฆืจื™ืš ืœื”ื™ื•ืช ืžื•ื“ืข ืืœื™ื”ื ื›ืฉืืชื” ืขื•ื‘ื“ ืขื ื”-API. ื‘ื•ื ื ื ื™ื— ืฉืื ื—ื ื• ืœื ืžืขื•ื ื™ื™ื ื™ื ื‘-msg_key; ื”ืจืžื” ื”ื ืžื•ื›ื” ืคื™ืขื ื—ื” ืขื‘ื•ืจื ื• ื”ื›ืœ. ืื‘ืœ ื‘ืชื•ืš ื”ื ืชื•ื ื™ื ื”ืžืคื•ืขื ื—ื™ื ื™ืฉ ืœื ื• ืืช ื”ืฉื“ื•ืช ื”ื‘ืื™ื (ื’ื ืืช ืื•ืจืš ื”ื ืชื•ื ื™ื, ืื– ืื ื—ื ื• ื™ื•ื“ืขื™ื ืื™ืคื” ื”ืจื™ืคื•ื“, ืื‘ืœ ื–ื” ืœื ื—ืฉื•ื‘):

  • ืžืœื— - int64
  • session_id - int64
  • message_id - int64
  • seq_no - int32

ื ื–ื›ื™ืจ ืœื›ื ืฉื™ืฉ ืจืง ืžืœื— ืื—ื“ ืœื›ืœ ื”-DC. ืœืžื” ืœื“ืขืช ืขืœื™ื”? ืœื ืจืง ื‘ื’ืœืœ ืฉื™ืฉ ื‘ืงืฉื” get_future_salts, ืฉืื•ืžืจ ืœืš ืื™ืœื• ืžืจื•ื•ื—ื™ื ื™ื”ื™ื• ืชืงืคื™ื, ืื‘ืœ ื’ื ื›ื™ ืื ื”ืžืœื— ืฉืœืš "ืจืงื•ื‘", ืื– ื”ื”ื•ื“ืขื” (ื”ื‘ืงืฉื”) ืคืฉื•ื˜ ืชืื‘ื“. ื”ืฉืจืช, ื›ืžื•ื‘ืŸ, ื™ื“ื•ื•ื— ืขืœ ื”ืžืœื— ื”ื—ื“ืฉ ืขืœ ื™ื“ื™ ื”ื ืคืงื” new_session_created - ืื‘ืœ ืขื ื”ื™ืฉืŸ ืชืฆื˜ืจืš ืœืฉืœื•ื— ืื•ืชื• ืื™ื›ืฉื”ื• ืžื—ื“ืฉ, ืœืžืฉืœ. ื•ื”ื ื•ืฉื ื”ื–ื” ืžืฉืคื™ืข ืขืœ ืืจื›ื™ื˜ืงื˜ื•ืจืช ื”ืืคืœื™ืงืฆื™ื”.

ื”ืฉืจืช ืจืฉืื™ ืœื”ืคืกื™ืง ืืช ื”ืคืขืœื•ืช ืœื—ืœื•ื˜ื™ืŸ ื•ืœื”ื’ื™ื‘ ื‘ืฆื•ืจื” ื–ื• ืžืกื™ื‘ื•ืช ืจื‘ื•ืช. ืœืžืขืฉื”, ืžื”ื™ ืžืคื’ืฉ MTProto ืžืฆื“ ื”ืœืงื•ื—? ืืœื• ืฉื ื™ ืžืกืคืจื™ื session_id ะธ seq_no ื”ื•ื“ืขื•ืช ื‘ืชื•ืš ื”ืคืขืœื” ื–ื•. ื•ื‘ื›ืŸ, ื•ื—ื™ื‘ื•ืจ ื”-TCP ื”ื‘ืกื™ืกื™, ื›ืžื•ื‘ืŸ. ื ื ื™ื— ืฉื”ืœืงื•ื— ืฉืœื ื• ืขื“ื™ื™ืŸ ืœื ื™ื•ื“ืข ืœืขืฉื•ืช ื”ืจื‘ื” ื“ื‘ืจื™ื, ื”ื•ื ื”ืชื ืชืง ื•ื”ืชื—ื‘ืจ ืžื—ื“ืฉ. ืื ื–ื” ืงืจื” ืžื”ืจ - ื”ื”ืคืขืœื” ื”ื™ืฉื ื” ื ืžืฉื›ื” ื‘ื—ื™ื‘ื•ืจ ื”-TCP ื”ื—ื“ืฉ, ื”ื’ื“ืœ seq_no ื ื•ืกืฃ. ืื ื–ื” ื™ื™ืงื— ื”ืจื‘ื” ื–ืžืŸ, ื”ืฉืจืช ื™ื›ื•ืœ ืœืžื—ื•ืง ืื•ืชื•, ื›ื™ ื‘ืฆื“ ืฉืœื• ื–ื” ื’ื ืชื•ืจ, ื›ืคื™ ืฉื’ื™ืœื™ื ื•.

ืžื” ื–ื” ืฆืจื™ืš ืœื”ื™ื•ืช seq_no? ื”ื•, ื–ื• ืฉืืœื” ืžืกื•ื‘ื›ืช. ื ืกื” ืœื”ื‘ื™ืŸ ื‘ื›ื ื•ืช ืœืžื” ื”ื›ื•ื•ื ื”:

ื”ื•ื“ืขื” ื”ืงืฉื•ืจื” ืœืชื•ื›ืŸ

ื”ื•ื“ืขื” ื”ื“ื•ืจืฉืช ืื™ืฉื•ืจ ืžืคื•ืจืฉ. ืืœื” ื›ื•ืœืœื™ื ืืช ื›ืœ ื”ืžืฉืชืžืฉ ื•ื”ื•ื“ืขื•ืช ืฉื™ืจื•ืช ืจื‘ื•ืช, ืœืžืขืฉื” ื›ื•ืœืŸ ืœืžืขื˜ ืงื•ื ื˜ื™ื™ื ืจื™ื ื•ืื™ืฉื•ืจื™ื.

ืžืกืคืจ ืจืฆืฃ ื”ื•ื“ืขื” (msg_seqno)

ืžืกืคืจ 32 ืกื™ื‘ื™ื•ืช ื”ืฉื•ื•ื” ืœืžืกืคืจ ื›ืคื•ืœ ืฉืœ ื”ื•ื“ืขื•ืช "ืงืฉื•ืจื•ืช ืœืชื•ื›ืŸ" (ืืœื• ื”ื“ื•ืจืฉื•ืช ืื™ืฉื•ืจ, ื•ื‘ืžื™ื•ื—ื“ ืืœื• ืฉืื™ื ืŸ ืžื›ื™ืœื•ืช) ืฉื ื•ืฆืจื• ืขืœ ื™ื“ื™ ื”ืฉื•ืœื— ืœืคื ื™ ื”ื•ื“ืขื” ื–ื• ื•ื‘ื”ืžืฉืš ื’ื“ืœื• ื‘ืื—ืช ืื ื”ื”ื•ื“ืขื” ื”ื ื•ื›ื—ื™ืช ื”ื™ื ื”ื•ื“ืขื” ื”ืงืฉื•ืจื” ืœืชื•ื›ืŸ. ืžื™ื›ืœ ื ื•ืฆืจ ืชืžื™ื“ ืื—ืจื™ ื›ืœ ื”ืชื•ื›ืŸ ืฉืœื•; ืœื›ืŸ, ืžืกืคืจ ื”ืจืฆืฃ ืฉืœื• ื’ื“ื•ืœ ืื• ืฉื•ื•ื” ืœืžืกืคืจื™ ื”ืจืฆืฃ ืฉืœ ื”ื”ื•ื“ืขื•ืช ื”ื›ืœื•ืœื™ื ื‘ื•.

ืื™ื–ื” ืกื•ื’ ืฉืœ ืงืจืงืก ื–ื” ืขื ืขืœื™ื™ื” ืฉืœ 1, ื•ืื—ืจ ื›ืš ืขื•ื“ ื‘-2?.. ืื ื™ ื—ื•ืฉื“ ืฉื‘ื”ืชื—ืœื” ื”ื ื”ืชื›ื•ื•ื ื• "ื”ื—ืœืง ื”ื›ื™ ืคื—ื•ืช ืžืฉืžืขื•ืชื™ ืขื‘ื•ืจ ACK, ื”ืฉืืจ ื–ื” ืžืกืคืจ", ืื‘ืœ ื”ืชื•ืฆืื” ืœื ืžืžืฉ ื–ื”ื” - ื‘ืคืจื˜, ื–ื” ื™ื•ืฆื, ื ื™ืชืŸ ืœืฉืœื•ื— ื›ืžื” ืื™ืฉื•ืจื™ื ื‘ืขืœื™ ืื•ืชื• ื“ื‘ืจ seq_no! ืึตื™ืš? ื•ื‘ื›ืŸ, ืœืžืฉืœ, ื”ืฉืจืช ืฉื•ืœื— ืœื ื• ืžืฉื”ื•, ืฉื•ืœื— ืื•ืชื•, ื•ืื ื—ื ื• ืขืฆืžื ื• ืฉื•ืชืงื™ื, ืจืง ืžื’ื™ื‘ื™ื ื‘ื”ื•ื“ืขื•ืช ืฉื™ืจื•ืช ื”ืžืืฉืจื•ืช ืืช ืงื‘ืœืช ื”ื”ื•ื“ืขื•ืช ืฉืœื•. ื‘ืžืงืจื” ื–ื”, ื”ืื™ืฉื•ืจื™ื ื”ื™ื•ืฆืื™ื ืฉืœื ื• ื™ื”ื™ื• ื‘ืขืœื™ ืื•ืชื• ืžืกืคืจ ื™ื•ืฆื. ืื ืืชื ืžื›ื™ืจื™ื ืืช TCP ื•ื—ืฉื‘ืชื ืฉื–ื” ื ืฉืžืข ืคืจื•ืข ืื™ื›ืฉื”ื•, ืื‘ืœ ื–ื” ื ืจืื” ืœื ืžืื•ื“ ืคืจื•ืข, ื›ื™ ื‘-TCP seq_no ืœื ืžืฉืชื ื”, ืื‘ืœ ื”ืื™ืฉื•ืจ ืขื•ื‘ืจ ืœ seq_no ืžื”ืฆื“ ื”ืฉื ื™, ืื ื™ ืืžื”ืจ ืœื”ืจื’ื™ื– ืื•ืชืš. ืื™ืฉื•ืจื™ื ืžืกื•ืคืงื™ื ื‘-MTProto ืœื ืขืœ seq_no, ื›ืžื• ื‘-TCP, ืื‘ืœ ืœืคื™ msg_id !

ืžื” ื–ื” msg_id, ื”ื—ืฉื•ื‘ ื‘ื™ื•ืชืจ ืžื‘ื™ืŸ ื”ืชื—ื•ืžื™ื ื”ืœืœื•? ืžื–ื”ื” ื”ื•ื“ืขื” ื™ื™ื—ื•ื“ื™, ื›ืคื™ ืฉื”ืฉื ืžืจืžื–. ื”ื•ื ืžื•ื’ื“ืจ ื›ืžืกืคืจ ืฉืœ 64 ืกื™ื‘ื™ื•ืช, ืฉื‘ืกื™ื‘ื™ื•ืช ื”ื ืžื•ื›ื•ืช ื‘ื™ื•ืชืจ ืฉื‘ื”ืŸ ื™ืฉ ืฉื•ื‘ ืืช ื”ืงืกื ืฉืœ "ืฉืจืช-ืœื-ืฉืจืช", ื•ื”ืฉืืจ ื”ื•ื ื—ื•ืชืžืช ื–ืžืŸ ืฉืœ ื™ื•ื ื™ืงืก, ื›ื•ืœืœ ื”ื—ืœืง ื”ืฉื‘ืจื™ืจื™, ื”ืžื•ื–ื– 32 ืกื™ื‘ื™ื•ืช ืฉืžืืœื”. ื”ึธื”ึตืŸ. ื—ื•ืชืžืช ื–ืžืŸ ื›ืฉืœืขืฆืžื” (ื•ื”ื•ื“ืขื•ืช ืขื ื–ืžื ื™ื ืฉื•ื ื™ื ืžื“ื™ ื™ื™ื“ื—ื• ืขืœ ื™ื“ื™ ื”ืฉืจืช). ืžื›ืืŸ ืžืกืชื‘ืจ ืฉื‘ืื•ืคืŸ ื›ืœืœื™ ืžื“ื•ื‘ืจ ืขืœ ืžื–ื”ื” ืฉื”ื•ื ื’ืœื•ื‘ืœื™ ืขื‘ื•ืจ ื”ืœืงื•ื—. ื‘ื”ืชื—ืฉื‘ ื‘ื›ืš - ื‘ื•ืื• ื ื–ื›ื•ืจ session_id - ืžื•ื‘ื˜ื— ืœื ื•: ื‘ืฉื•ื ืคื ื™ื ื•ืื•ืคืŸ ืœื ื ื™ืชืŸ ืœืฉืœื•ื— ื”ื•ื“ืขื” ื”ืžื™ื•ืขื“ืช ืœื”ืคืขืœื” ืื—ืช ืœื”ืคืขืœื” ืื—ืจืช. ื›ืœื•ืžืจ, ืžืกืชื‘ืจ ืฉื›ื‘ืจ ื™ืฉ ืฉืœื•ืฉ ืจืžื” - ื”ืคืขืœื”, ืžืกืคืจ ื”ืคืขืœื”, ืžื–ื”ื” ื”ื•ื“ืขื”. ืžื“ื•ืข ืกื™ื‘ื•ืš ื™ืชืจ ื›ื–ื”, ื”ืžืกืชื•ืจื™ืŸ ื”ื–ื” ื’ื“ื•ืœ ืžืื•ื“.

ืœืคื™ื›ืš, msg_id ื ื—ื•ืฅ ืœ...

RPC: ื‘ืงืฉื•ืช, ืชื’ื•ื‘ื•ืช, ืฉื’ื™ืื•ืช. ืื™ืฉื•ืจื™ื.

ื›ืคื™ ืฉืื•ืœื™ ืฉืžืชื ืœื‘, ืื™ืŸ ืกื•ื’ ืื• ืคื•ื ืงืฆื™ื” ืžื™ื•ื—ื“ืช ืฉืœ "ื‘ืฆืข ื‘ืงืฉืช RPC" ื‘ืฉื•ื ืžืงื•ื ื‘ืชืจืฉื™ื, ืœืžืจื•ืช ืฉื™ืฉ ืชืฉื•ื‘ื•ืช. ืื—ืจื™ ื”ื›ืœ, ื™ืฉ ืœื ื• ื”ื•ื“ืขื•ืช ื”ืงืฉื•ืจื•ืช ืœืชื•ื›ืŸ! ื–ื”, ื›ืœ ื”ื”ื•ื“ืขื” ื™ื›ื•ืœื” ืœื”ื™ื•ืช ื‘ืงืฉื”! ืื• ืœื ืœื”ื™ื•ืช. ืื—ืจื™ ื”ื›ืœ, ื›ืœ ื™ืฉ msg_id. ืื‘ืœ ื™ืฉ ืชืฉื•ื‘ื•ืช:

rpc_result#f35c6d01 req_msg_id:long result:Object = RpcResult;

ื›ืืŸ ืžืฆื•ื™ืŸ ืœืื™ื–ื• ื”ื•ื“ืขื” ืžื“ื•ื‘ืจ ื‘ืชื’ื•ื‘ื”. ืœื›ืŸ, ื‘ืจืžื” ื”ืขืœื™ื•ื ื” ืฉืœ ื”-API, ืชืฆื˜ืจื›ื• ืœื–ื›ื•ืจ ืžื” ื”ื™ื” ืžืกืคืจ ื”ื‘ืงืฉื” ืฉืœื›ื - ืื ื™ ื—ื•ืฉื‘ ืฉืื™ืŸ ืฆื•ืจืš ืœื”ืกื‘ื™ืจ ืฉื”ืขื‘ื•ื“ื” ื”ื™ื ืืกื™ื ื›ืจื•ื ื™ืช, ื•ื™ื›ื•ืœื•ืช ืœื”ื™ื•ืช ืžืกืคืจ ื‘ืงืฉื•ืช ื‘ืขื™ืฆื•ืžืŸ ื‘ื• ื–ืžื ื™ืช, ืืช ื”ืชืฉื•ื‘ื•ืช ืœื”ืŸ ื ื™ืชืŸ ืœื”ื—ื–ื™ืจ ื‘ื›ืœ ืกื“ืจ? ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ืžืชื•ืš ื–ื” ื•ื”ื•ื“ืขื•ืช ืฉื’ื™ืื” ื›ืžื• ืื™ืŸ ืขื•ื‘ื“ื™ื, ื ื™ืชืŸ ืœืขืงื•ื‘ ืื—ืจ ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ืžืื—ื•ืจื™ ื–ื”: ื”ืฉืจืช ืฉืฉื•ืžืจ ืื™ืชืš ืขืœ ื—ื™ื‘ื•ืจ TCP ื”ื•ื ืžืื–ืŸ ื—ื–ื™ืชื™, ื”ื•ื ืžืขื‘ื™ืจ ื‘ืงืฉื•ืช ืœ-backends ื•ืื•ืกืฃ ืื•ืชืŸ ื‘ื—ื–ืจื” ื‘ืืžืฆืขื•ืช message_id. ื ืจืื” ืฉื”ื›ืœ ื›ืืŸ ื‘ืจื•ืจ, ื”ื’ื™ื•ื ื™ ื•ื˜ื•ื‘.

ื›ืŸ?.. ื•ืื ื—ื•ืฉื‘ื™ื ืขืœ ื–ื”? ื”ืจื™ ื’ื ืœืชื’ื•ื‘ืช ื”-RPC ืขืฆืžื” ื™ืฉ ืฉื“ื” msg_id! ื”ืื ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืฆืขื•ืง ืœืฉืจืช "ืืชื” ืœื ืขื•ื ื” ืœื™ ืขืœ ื”ืชืฉื•ื‘ื”!"? ื•ื›ืŸ, ืžื” ื”ื™ื” ืœื’ื‘ื™ ืื™ืฉื•ืจื™ื? ืขืžื•ื“ ืื•ื“ื•ืช ื”ื•ื“ืขื•ืช ืขืœ ื”ื•ื“ืขื•ืช ืื•ืžืจ ืœื ื• ืžื” ื–ื”

msgs_ack#62d6b459 msg_ids:Vector long = MsgsAck;

ื•ื–ื” ื—ื™ื™ื‘ ืœื”ื™ืขืฉื•ืช ืขืœ ื™ื“ื™ ื›ืœ ืฆื“. ืื‘ืœ ืœื ืชืžื™ื“! ืื ืงื™ื‘ืœืช RpcResult, ื–ื” ืขืฆืžื• ืžืฉืžืฉ ื›ืื™ืฉื•ืจ. ื›ืœื•ืžืจ, ื”ืฉืจืช ื™ื›ื•ืœ ืœื”ื’ื™ื‘ ืœื‘ืงืฉื” ืฉืœืš ืขื MsgsAck - ื›ืžื•, "ืงื™ื‘ืœืชื™ ืืช ื–ื”." RpcResult ื™ื›ื•ืœ ืœื”ื’ื™ื‘ ืžื™ื“. ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ื’ื ื•ื’ื.

ื•ื›ืŸ, ืืชื” ืขื“ื™ื™ืŸ ืฆืจื™ืš ืœืขื ื•ืช ืขืœ ื”ืชืฉื•ื‘ื”! ืึดืฉืื•ึผืจ. ืื—ืจืช, ื”ืฉืจืช ื™ื—ืฉื™ื‘ ืื•ืชื• ื›ื‘ืœืชื™ ื ื™ืชืŸ ืœืžืกื™ืจื” ื•ื™ืฉืœื— ืื•ืชื• ืืœื™ืš ืฉื•ื‘. ื’ื ืœืื—ืจ ื—ื™ื‘ื•ืจ ืžื—ื“ืฉ. ืื‘ืœ ื›ืืŸ, ื›ืžื•ื‘ืŸ, ืขื•ืœื” ืกื•ื’ื™ื™ืช ืคืกืงื™ ื”ื–ืžืŸ. ื‘ื•ืื• ื ืกืชื›ืœ ืขืœื™ื”ื ืงืฆืช ืžืื•ื—ืจ ื™ื•ืชืจ.

ื‘ื™ื ืชื™ื™ื, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืฉื’ื™ืื•ืช ืืคืฉืจื™ื•ืช ื‘ื‘ื™ืฆื•ืข ืฉืื™ืœืชื”.

rpc_error#2144ca19 error_code:int error_message:string = RpcError;

ืื”, ืžื™ืฉื”ื• ื™ืฆืขืง, ื”ื ื” ืคื•ืจืžื˜ ื™ื•ืชืจ ืื ื•ืฉื™ โ€“ ื™ืฉ ื‘ืฉื•ืจื”! ืงื— ืืช ื”ื–ืžืŸ. ื›ืืŸ ืจืฉื™ืžื” ืฉืœ ืฉื’ื™ืื•ืช, ืื‘ืœ ื›ืžื•ื‘ืŸ ืœื ืฉืœื. ืžืžื ื• ืื ื• ืœืžื“ื™ื ืฉื”ืงื•ื“ ื”ื•ื ืžืฉื”ื• ื›ืžื• ืฉื’ื™ืื•ืช HTTP (ื˜ื•ื‘, ื›ืžื•ื‘ืŸ, ืœื ืžื›ื‘ื“ื™ื ืืช ื”ืกืžื ื˜ื™ืงื” ืฉืœ ื”ืชื’ื•ื‘ื•ืช, ื‘ืžืงื•ืžื•ืช ืžืกื•ื™ืžื™ื ื”ืŸ ืžื•ืคืฆื•ืช ื‘ืื•ืคืŸ ืืงืจืื™ ื‘ื™ืŸ ื”ืงื•ื“ื™ื), ื•ื”ืฉื•ืจื” ื ืจืื™ืช ื›ืš CAPITAL_LETTERS_AND_NUMBERS. ืœื“ื•ื’ืžื”, PHONE_NUMBER_OCCUPIED ืื• FILE_PART_ะฅ_MISSING. ื•ื‘ื›ืŸ, ื›ืœื•ืžืจ, ืืชื” ืขื“ื™ื™ืŸ ืฆืจื™ืš ืืช ื”ืงื• ื”ื–ื” ืœึฐื ึทืชึตื—ึท. ืœื“ื•ื’ืžื”, FLOOD_WAIT_3600 ื–ื” ืื•ืžืจ ืฉืืชื” ืฆืจื™ืš ืœื—ื›ื•ืช ืฉืขื”, ื• PHONE_MIGRATE_5, ืฉืžืกืคืจ ื˜ืœืคื•ืŸ ืขื ืงื™ื“ื•ืžืช ื–ื• ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืจืฉื•ื ื‘-5th DC. ื™ืฉ ืœื ื• ืฉืคืช ื˜ื™ืคื•ืก, ื ื›ื•ืŸ? ืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ื•ื™ื›ื•ื— ืžืžื—ืจื•ื–ืช, ืจื’ื™ืœื™ื ื™ืขืฉื• ื–ืืช, ื‘ืกื“ืจ.

ืฉื•ื‘, ื–ื” ืœื ื‘ืขืžื•ื“ ื”ื•ื“ืขื•ืช ื”ืฉื™ืจื•ืช, ืื‘ืœ, ื›ืคื™ ืฉื›ื‘ืจ ื ื”ื•ื’ ื‘ืคืจื•ื™ืงื˜ ื–ื”, ื ื™ืชืŸ ืœืžืฆื•ื ืืช ื”ืžื™ื“ืข ื‘ื“ืฃ ืชื™ืขื•ื“ ืื—ืจ. ืื• ืœื”ื˜ื™ืœ ื—ืฉื“. ืจืืฉื™ืช, ืชืจืื”, ื”ืงืœื“ื”/ื”ืคืจืช ืฉื›ื‘ื” - RpcError ื ื™ืชืŸ ืœืงื ืŸ RpcResult. ืœืžื” ืœื ื‘ื—ื•ืฅ? ืžื” ืœื ืœืงื—ื ื• ื‘ื—ืฉื‘ื•ืŸ?.. ื‘ื”ืชืื, ื”ื™ื›ืŸ ื”ืขืจื‘ื•ืช ืœื›ืš RpcError ืœื ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžื•ื˜ื‘ืข ื‘ RpcResult, ืื‘ืœ ืœื”ื™ื•ืช ื™ืฉื™ืจื•ืช ืื• ืžืงื•ื ืŸ ื‘ืกื•ื’ ืื—ืจ?.. ื•ืื ื–ื” ืœื ื™ื›ื•ืœ, ืœืžื” ื–ื” ืœื ื‘ืจืžื” ื”ืขืœื™ื•ื ื”, ื›ืœื•ืžืจ. ื–ื” ื—ืกืจ req_msg_id ? ..

ืื‘ืœ ื‘ื•ืื• ื ืžืฉื™ืš ืœื’ื‘ื™ ื”ื•ื“ืขื•ืช ืฉื™ืจื•ืช. ื”ืœืงื•ื— ืขืฉื•ื™ ืœื—ืฉื•ื‘ ืฉื”ืฉืจืช ื—ื•ืฉื‘ ื”ืจื‘ื” ื–ืžืŸ ื•ืœื‘ืงืฉ ืืช ื”ื‘ืงืฉื” ื”ื ืคืœืื” ื”ื–ื•:

rpc_drop_answer#58e4a740 req_msg_id:long = RpcDropAnswer;

ื™ืฉื ืŸ ืฉืœื•ืฉ ืชืฉื•ื‘ื•ืช ืืคืฉืจื™ื•ืช ืœืฉืืœื” ื–ื•, ืฉื•ื‘ ืžืฆื˜ืœื‘ื•ืช ืขื ืžื ื’ื ื•ืŸ ื”ืื™ืฉื•ืจ; ื”ื ื™ืกื™ื•ืŸ ืœื”ื‘ื™ืŸ ืžื” ื”ืŸ ืฆืจื™ื›ื•ืช ืœื”ื™ื•ืช (ื•ืžื” ื”ืจืฉื™ืžื” ื”ื›ืœืœื™ืช ืฉืœ ื”ืกื•ื’ื™ื ืฉืื™ื ื ื“ื•ืจืฉื™ื ืื™ืฉื•ืจ) ื ื•ืชืจ ืœืงื•ืจื ื›ืฉื™ืขื•ืจื™ ื‘ื™ืช (ืฉื™ืžื• ืœื‘: ื”ืžื™ื“ืข ื‘ ืงื•ื“ ื”ืžืงื•ืจ ืฉืœ Telegram Desktop ืื™ื ื• ืฉืœื).

ื”ืชืžื›ืจื•ืช ืœืกืžื™ื: ืกื˜ื˜ื•ืกื™ื ืฉืœ ื”ื•ื“ืขื•ืช

ื‘ืื•ืคืŸ ื›ืœืœื™, ืžืงื•ืžื•ืช ืจื‘ื™ื ื‘-TL, MTProto ื•ื‘ื˜ืœื’ืจื ื‘ื›ืœืœ ืžืฉืื™ืจื™ื ืชื—ื•ืฉืช ืขืงืฉื ื•ืช, ืืš ืžืชื•ืš ื ื™ืžื•ืก, ื˜ืงื˜ ื•ืื—ืจื™ื ืžื™ื•ืžื ื•ื™ื•ืช ืจื›ื•ืช ืฉืชืงื ื• ืขืœ ื›ืš ื‘ื ื™ืžื•ืก, ื•ืฆื™ื ื–ืจื ื• ืืช ื”ื’ืกื•ื™ื•ืช ื‘ื“ื™ืืœื•ื’ื™ื. ืขื ื–ืืช, ื”ืžืงื•ื ื”ื–ื”ะžืจื•ื‘ ื”ืขืžื•ื“ ืขื•ืกืง ื”ื•ื“ืขื•ืช ืขืœ ื”ื•ื“ืขื•ืช ื–ื” ืžื–ืขื–ืข ืืคื™ืœื• ืขื‘ื•ืจื™, ืฉืขื•ื‘ื“ ืขื ืคืจื•ื˜ื•ืงื•ืœื™ ืจืฉืช ื›ื‘ืจ ื”ืจื‘ื” ื–ืžืŸ ื•ืจืื” ืื•ืคื ื™ื™ื ื‘ื“ืจื’ื•ืช ืฉื•ื ื•ืช ืฉืœ ืขืงื•ืžื”.

ื–ื” ืžืชื—ื™ืœ ื‘ืชืžื™ืžื•ืช, ืขื ืื™ืฉื•ืจื™ื. ืื—ืจ ื›ืš ื”ื ืžืกืคืจื™ื ืœื ื• ืขืœ

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 ื™ืฆื˜ืจืš ืœื”ืชืžื•ื“ื“ ืื™ืชื; ื‘ืžื—ื–ื•ืจ "ืชื•ืงืŸ - ื”ื™ื“ื•ืจ ืžื—ื“ืฉ - ื”ื•ืฉืง", ืงื‘ืœืช ืฉื’ื™ืื•ืช ืžืกืคืจื™ื ืื• ืžืœื— ืฉื”ืฆืœื™ื—ื• ืœื”ืชืงืœืงืœ ื‘ืžื”ืœืš ื”ืขืจื™ื›ื•ืช ื”ื•ื ื“ื‘ืจ ื ืคื•ืฅ. ืขื ื–ืืช, ื™ืฉ ื›ืืŸ ืฉืชื™ ื ืงื•ื“ื•ืช:

  1. ื”ืžืฉืžืขื•ืช ื”ื™ื ืฉื”ื”ื•ื“ืขื” ื”ืžืงื•ืจื™ืช ืื‘ื“ื”. ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื™ืฆื•ืจ ื›ืžื” ืชื•ืจื™ื, ื ืกืชื›ืœ ืขืœ ื–ื” ืžืื•ื—ืจ ื™ื•ืชืจ.
  2. ืžื”ื ืžืกืคืจื™ ื”ืฉื’ื™ืื•ืช ื”ืžื•ื–ืจื™ื ื”ืืœื”? 16, 17, 18, 19, 20, 32, 33, 34, 35, 48, 64... ืื™ืคื” ืฉืืจ ื”ืžืกืคืจื™ื, ื˜ื•ืžื™?

ื‘ืชื™ืขื•ื“ ื ื›ืชื‘:

ื”ื›ื•ื•ื ื” ื”ื™ื ืฉืขืจื›ื™ error_code ืžืงื•ื‘ืฆื™ื (error_code >> 4): ืœื“ื•ื’ืžื”, ื”ืงื•ื“ื™ื 0x40 - 0x4f ืชื•ืืžื™ื ืœืฉื’ื™ืื•ืช ื‘ืคื™ืจื•ืง ืžื™ื›ืœ.

ืื‘ืœ, ืจืืฉื™ืช, ืฉื™ื ื•ื™ ื‘ื›ื™ื•ื•ืŸ ื”ืฉื ื™, ื•ืฉื ื™ืช, ื–ื” ืœื ืžืฉื ื”, ืื™ืคื” ื”ืงื•ื“ื™ื ื”ืื—ืจื™ื? ื‘ืจืืฉื• ืฉืœ ื”ืžื—ื‘ืจ?.. ืื•ืœื ืืœื• ื–ื•ื˜ื•ืช.

ื”ื”ืชืžื›ืจื•ืช ืžืชื—ื™ืœื” ื‘ื”ื•ื“ืขื•ืช ืขืœ ืกื˜ื˜ื•ืกื™ื ืฉืœ ื”ื•ื“ืขื•ืช ื•ื”ืขืชืงื™ ื”ื•ื“ืขื•ืช:

  • ื‘ืงืฉื” ืœืžื™ื“ืข ืขืœ ืกื˜ื˜ื•ืก ื”ื•ื“ืขื”
    ืื ืžื™ ืžื”ืฆื“ื“ื™ื ืœื ืงื™ื‘ืœ ืžื™ื“ืข ืขืœ ืžืฆื‘ ื”ื”ื•ื“ืขื•ืช ื”ื™ื•ืฆืื•ืช ืฉืœื• ื‘ืžืฉืš ื–ืžืŸ ืžื”, ื”ื•ื ืขืฉื•ื™ ืœื‘ืงืฉ ื–ืืช ื‘ืžืคื•ืจืฉ ืžื”ืฆื“ ื”ืฉื ื™:
    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 ื”ื›ืœื•ืœื” ื‘ื”ื•ื“ืขื” ื‘ืขื™ื‘ื•ื“ ืื• ืฉื”ืขื™ื‘ื•ื“ ื›ื‘ืจ ื”ื•ืฉืœื
    • +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;
    ื”ืฆื“ ื”ืžืจื•ื—ืง ืžื’ื™ื‘ ืžื™ื“ ืขืœ ื™ื“ื™ ืฉืœื™ื—ื” ื—ื•ื–ืจืช ืชืฉื•ื‘ื•ืช ืœื”ื•ื“ืขื•ืช ื”ืžื‘ื•ืงืฉื•ืช [โ€ฆ]
  • ืขื•ืชืงื™ ื”ื•ื“ืขื”
    ื‘ืžืฆื‘ื™ื ืžืกื•ื™ืžื™ื, ื™ืฉ ืœืฉืœื•ื— ืžื—ื“ืฉ ื”ื•ื“ืขื” ื™ืฉื ื” ืขื 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 ื”ืœื ื’ืžื•ืจ ื‘ื•ืœื˜ื•ืช ื”ื—ื•ืฆื” (ื”ื™ื™ื ื• ืฆืจื™ื›ื™ื ื•ืงื˜ื•ืจ ืฉืœ ื‘ืชื™ื, ื•ื‘ืฉื ื™ ื”ื‘ื™ื˜ื™ื ื”ืชื—ืชื•ื ื™ื ื”ื™ื” enum, ื•ื‘ืฉื ื™ ื”ื‘ื™ื˜ื™ื ื”ื’ื‘ื•ื”ื™ื ื™ื•ืชืจ ื”ื™ื• ื“ื’ืœื™ื). ื”ื ืงื•ื“ื” ื”ื™ื ืื—ืจืช. ืžื™ืฉื”ื• ืžื‘ื™ืŸ ืœืžื” ื›ืœ ื–ื” ื‘ืคื•ืขืœ? ื‘ืœืงื•ื— ืืžื™ืชื™ ื”ื›ืจื—ื™?.. ื‘ืงื•ืฉื™, ืื‘ืœ ืืคืฉืจ ืœื“ืžื™ื™ืŸ ืชื•ืขืœืช ื›ืœืฉื”ื™ ืื ืื“ื ืขื•ืกืง ื‘ืื™ืชื•ืจ ื‘ืื’ื™ื, ื•ื‘ืžืฆื‘ ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ - ืฉืืœ ืืช ื”ืฉืจืช ืžื” ื•ืื™ืš. ืื‘ืœ ื›ืืŸ ืžืชื•ืืจื•ืช ื”ื‘ืงืฉื•ืช ื‘ืฉื ื™ ื”ื›ื™ื•ื•ื ื™ื.

ืžื›ืืŸ ื ื•ื‘ืข ืฉื›ืœ ืฆื“ ื—ื™ื™ื‘ ืœื ืจืง ืœื”ืฆืคื™ืŸ ื•ืœืฉืœื•ื— ื”ื•ื“ืขื•ืช, ืืœื ื’ื ืœืื—ืกืŸ ื ืชื•ื ื™ื ืขืœ ืขืฆืžื•, ืขืœ ื”ืชื’ื•ื‘ื•ืช ืืœื™ื”ื, ืœืžืฉืš ื–ืžืŸ ืœื ื™ื“ื•ืข. ื”ืชื™ืขื•ื“ ืื™ื ื• ืžืชืืจ ืœื ืืช ื”ืชื–ืžื•ื ื™ื ืื• ืืช ื”ื™ืฉื™ืžื•ืช ื”ืžืขืฉื™ืช ืฉืœ ืชื›ื•ื ื•ืช ืืœื”. ื‘ืฉื•ื ืื•ืคืŸ. ืžื” ืฉื”ื›ื™ ืžื“ื”ื™ื ื”ื•ื ืฉื”ื ืžืฉืžืฉื™ื ืœืžืขืฉื” ื‘ืงื•ื“ ืฉืœ ืœืงื•ื—ื•ืช ืจืฉืžื™ื™ื! ื›ื ืจืื” ื ืืžืจ ืœื”ื ืžืฉื”ื• ืฉืœื ื ื›ืœืœ ื‘ืชื™ืขื•ื“ ื”ืฆื™ื‘ื•ืจื™. ืœื”ื‘ื™ืŸ ืžื”ืงื•ื“ ืœืžื”, ื›ื‘ืจ ืœื ื›ืœ ื›ืš ืคืฉื•ื˜ ื›ืžื• ื‘ืžืงืจื” ืฉืœ TL - ื–ื” ืœื ื—ืœืง ืžื‘ื•ื“ื“ (ื™ื—ืกื™ืช) ืžื‘ื—ื™ื ื” ืœื•ื’ื™ืช, ืืœื ื—ืชื™ื›ื” ืฉืงืฉื•ืจื” ืœืืจื›ื™ื˜ืงื˜ื•ืจืช ื”ืืคืœื™ืงืฆื™ื”, ื›ืœื•ืžืจ. ื™ื“ืจื•ืฉ ื”ืจื‘ื” ื™ื•ืชืจ ื–ืžืŸ ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ืงื•ื“ ื”ื™ื™ืฉื•ื.

ืคื™ื ื’ื™ื ื•ืชื–ืžื•ื ื™ื. ืชื•ืจื™ื.

ืžื”ื›ืœ, ืื ื ื–ื›ื•ืจ ืืช ื”ื ื™ื—ื•ืฉื™ื ืœื’ื‘ื™ ืืจื›ื™ื˜ืงื˜ื•ืจืช ื”ืฉืจืช (ื”ืคืฆืช ื‘ืงืฉื•ืช ืขืœ ืคื ื™ ืงืฆื” ืื—ื•ืจื™), ื“ื‘ืจ ื“ื™ ืขืฆื•ื‘ ื ื•ื‘ืข - ืœืžืจื•ืช ื›ืœ ืขืจื‘ื•ื™ื•ืช ื”ืžืกื™ืจื” ื‘-TCP (ืื• ืฉื”ื ืชื•ื ื™ื ื ืžืกืจื™ื, ืื• ืฉืชื•ื“ื™ืขื• ืขืœ ื”ืคืขืจ, ืื‘ืœ ื”ื ืชื•ื ื™ื ื™ื™ืžืกืจื• ืœืคื ื™ ืฉื”ื‘ืขื™ื” ืžืชืจื—ืฉืช), ืฉื”ืื™ืฉื•ืจื™ื ื‘-MTProto ืขืฆืžื• - ืœืœื ืขืจื‘ื•ื™ื•ืช. ื”ืฉืจืช ื™ื›ื•ืœ ื‘ืงืœื•ืช ืœืื‘ื“ ืื• ืœื–ืจื•ืง ืืช ื”ื”ื•ื“ืขื” ืฉืœืš, ื•ืœื ื ื™ืชืŸ ืœืขืฉื•ืช ื“ื‘ืจ ื‘ื ื™ื“ื•ืŸ, ืคืฉื•ื˜ ื”ืฉืชืžืฉ ื‘ืกื•ื’ื™ื ืฉื•ื ื™ื ืฉืœ ืงื‘ื™ื™ื.

ื•ืงื•ื“ื ื›ืœ - ืชื•ืจื™ ื”ื•ื“ืขื•ืช. ื•ื‘ื›ืŸ, ืขื ื“ื‘ืจ ืื—ื“ ื”ื›ืœ ื”ื™ื” ื‘ืจื•ืจ ืžื”ื”ืชื—ืœื” - ื™ืฉ ืœืื—ืกืŸ ื”ื•ื“ืขื” ืœื ืžืื•ืžืชืช ื•ืœื”ืชืจืขื. ื•ืื—ืจื™ ืื™ื–ื” ืฉืขื”? ื•ื”ืœืฆืŸ ืžื›ื™ืจ ืื•ืชื•. ืื•ืœื™ ืื•ืชืŸ ื”ื•ื“ืขื•ืช ืฉื™ืจื•ืช ืžื›ื•ืจื•ืช ืคื•ืชืจื•ืช ืื™ื›ืฉื”ื• ืืช ื”ื‘ืขื™ื” ื”ื–ื• ืขื ืงื‘ื™ื™ื, ื ื ื™ื—, ื‘-Telegram Desktop ื™ืฉ ื‘ืขืจืš 4 ืชื•ืจื™ื ื”ืžืชืื™ืžื™ื ืœื”ื (ืื•ืœื™ ื™ื•ืชืจ, ื›ืคื™ ืฉื›ื‘ืจ ื”ื•ื–ื›ืจ, ื‘ืฉื‘ื™ืœ ื–ื” ืืชื” ืฆืจื™ืš ืœื”ืชืขืžืง ื‘ืงื•ื“ ื•ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืœื• ื™ื•ืชืจ ื‘ืจืฆื™ื ื•ืช; ื‘ืžืงื‘ื™ืœ ื–ืžืŸ, ืื ื—ื ื• ื™ื•ื“ืขื™ื ืฉืœื ื ื™ืชืŸ ืœืงื—ืช ืื•ืชื• ื›ืžื“ื’ื; ืžืกืคืจ ืžืกื•ื™ื ืฉืœ ืกื•ื’ื™ื ืžืกื›ื™ืžืช MTProto ืื™ื ื ืžืฉืžืฉื™ื ื‘ื•).

ืœืžื” ื–ื” ืงื•ืจื”? ื›ื ืจืื”, ืžืชื›ื ืชื™ ื”ืฉืจืชื™ื ืœื ื”ืฆืœื™ื—ื• ืœื”ื‘ื˜ื™ื— ืืžื™ื ื•ืช ื‘ืชื•ืš ื”ืืฉื›ื•ืœ, ืื• ืืคื™ืœื• ื—ืฆื™ืฆื” ื‘ืžืื–ืŸ ื”ืงื“ืžื™, ื•ื”ืขื‘ื™ืจื• ืืช ื”ื‘ืขื™ื” ื”ื–ื• ืœืœืงื•ื—. ืžืชื•ืš ื™ื™ืื•ืฉ, ื•ืืกื™ืœื™ ื ื™ืกื” ืœื™ื™ืฉื ืืคืฉืจื•ืช ื—ืœื•ืคื™ืช, ืขื ืฉื ื™ ืชื•ืจื™ื ื‘ืœื‘ื“, ื‘ืืžืฆืขื•ืช ืืœื’ื•ืจื™ืชืžื™ื ืž-TCP - ืžื“ื™ื“ืช ื”-RTT ืœืฉืจืช ื•ื”ืชืืžืช ื’ื•ื“ืœ ื”"ื—ืœื•ืŸ" (ื‘ื”ื•ื“ืขื•ืช) ื‘ื”ืชืื ืœืžืกืคืจ ื”ื‘ืงืฉื•ืช ื”ืœื ืžืื•ืฉืจื•ืช. ื›ืœื•ืžืจ, ื”ื™ื•ืจื™ืกื˜ื™ืงื” ื›ื” ื’ืกื” ืœื”ืขืจื›ืช ื”ืขื•ืžืก ืฉืœ ื”ืฉืจืช ื”ื™ื ื›ืžื” ืžื”ื‘ืงืฉื•ืช ืฉืœื ื• ื”ื•ื ื™ื›ื•ืœ ืœืœืขื•ืก ื‘ื• ื–ืžื ื™ืช ื•ืœื ืœื”ืคืกื™ื“.

ื•ื‘ื›ืŸ, ื›ืœื•ืžืจ, ืืชื” ืžื‘ื™ืŸ, ื ื›ื•ืŸ? ืื ืืชื” ืฆืจื™ืš ืœื™ื™ืฉื TCP ืฉื•ื‘ ืขืœ ื’ื‘ื™ ืคืจื•ื˜ื•ืงื•ืœ ื”ืคื•ืขืœ ืขืœ TCP, ื–ื” ืžืฆื‘ื™ืข ืขืœ ืคืจื•ื˜ื•ืงื•ืœ ืžืขื•ืฆื‘ ื‘ืฆื•ืจื” ื’ืจื•ืขื” ืžืื•ื“.

ืื” ื›ืŸ, ืœืžื” ืืชื” ืฆืจื™ืš ื™ื•ืชืจ ืžืชื•ืจ ืื—ื“, ื•ืžื” ื–ื” ืื•ืžืจ ืขืœ ืื“ื ืฉืขื•ื‘ื“ ืขื API ื‘ืจืžื” ื’ื‘ื•ื”ื” ื‘ื›ืœ ืžืงืจื”? ืชืจืื”, ืืชื” ืžื’ื™ืฉ ื‘ืงืฉื”, ืขื•ืฉื” ืื•ืชื” ื‘ืกื™ื“ืจื”, ืื‘ืœ ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืืชื” ืœื ื™ื›ื•ืœ ืœืฉืœื•ื— ืื•ืชื” ืžื™ื“. ืœืžื”? ื›ื™ ื”ืชืฉื•ื‘ื” ืชื”ื™ื” msg_id, ืฉื”ื•ื ื–ืžื ื™ะฐืื ื™ ืชื•ื•ื™ืช ืฉืขื“ื™ืฃ ืœื“ื—ื•ืช ืืช ื”ืงืฆืืชื” ืœืžืื•ื—ืจ ื›ื›ืœ ื”ืืคืฉืจ - ืœืžืงืจื” ืฉื”ืฉืจืช ื™ื“ื—ื” ืื•ืชื” ื‘ื’ืœืœ ื—ื•ืกืจ ื”ืชืืžื” ืฉืœ ื–ืžืŸ ื‘ื™ื ื™ื ื• ืœื‘ื™ื ื• (ื›ืžื•ื‘ืŸ, ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืขืฉื•ืช ืงื‘ ืฉืžืขื‘ื™ืจ ืืช ื”ื–ืžืŸ ืฉืœื ื• ืžื”ื”ื•ื•ื” ืœืฉืจืช ืขืœ ื™ื“ื™ ื”ื•ืกืคืช ื“ืœืชื ื”ืžื—ื•ืฉื‘ืช ืžืชื’ื•ื‘ื•ืช ื”ืฉืจืช - ืœืงื•ื—ื•ืช ืจืฉืžื™ื™ื ืขื•ืฉื™ื ื–ืืช, ืื‘ืœ ื–ื” ื’ืก ื•ืœื ืžื“ื•ื™ืง ื‘ื’ืœืœ ื—ืฆื™ืฆื”). ืœื›ืŸ, ื›ืืฉืจ ืืชื” ืžื’ื™ืฉ ื‘ืงืฉื” ืขื ืฉื™ื—ืช ืคื•ื ืงืฆื™ื” ืžืงื•ืžื™ืช ืžื”ืกืคืจื™ื™ื”, ื”ื”ื•ื“ืขื” ืขื•ื‘ืจืช ืืช ื”ืฉืœื‘ื™ื ื”ื‘ืื™ื:

  1. ื”ื•ื ืฉื•ื›ื‘ ื‘ืชื•ืจ ืื—ื“ ื•ืžื—ื›ื” ืœื”ืฆืคื ื”.
  2. ืžื•ื ื” msg_id ื•ื”ื”ื•ื“ืขื” ืขื‘ืจื” ืœืชื•ืจ ืื—ืจ - ื”ืขื‘ืจื” ืืคืฉืจื™ืช; ืœืฉืœื•ื— ืœืฉืงืข.
  3. ื) ื”ืฉืจืช ื”ื’ื™ื‘ ืœ-MsgsAck - ื”ื”ื•ื“ืขื” ื ืžืกืจื”, ืื ื• ืžื•ื—ืงื™ื ืื•ืชื” ืžื”"ืชื•ืจ ื”ืื—ืจ".
    ื‘) ืื• ืœื”ื™ืคืš, ื”ื•ื ืœื ืื”ื‘ ืžืฉื”ื•, ื”ื•ื ืขื ื” badmsg - ืฉืœื— ืฉื•ื‘ ืž"ืชื•ืจ ืื—ืจ"
    ื’) ืœื ื™ื“ื•ืข ื“ื‘ืจ, ื™ืฉ ืœืฉืœื•ื— ืžื—ื“ืฉ ืืช ื”ื”ื•ื“ืขื” ืžืชื•ืจ ืื—ืจ - ืืš ืœื ื™ื“ื•ืข ืžืชื™ ื‘ื“ื™ื•ืง.
  4. ื”ืฉืจืช ื”ื’ื™ื‘ ืœื‘ืกื•ืฃ RpcResult - ื”ืชื’ื•ื‘ื” (ืื• ื”ืฉื’ื™ืื”) ื‘ืคื•ืขืœ - ืœื ืจืง ื ืžืกืจื”, ืืœื ื’ื ืžืขื•ื‘ื“ืช.

ืื•ืœื™, ื”ืฉื™ืžื•ืฉ ื‘ืžื™ื›ืœื™ื ื™ื›ื•ืœ ืœืคืชื•ืจ ื—ืœืงื™ืช ืืช ื”ื‘ืขื™ื”. ื–ื” ื›ืืฉืจ ื—ื‘ื•ืจื” ืฉืœ ื”ื•ื“ืขื•ืช ื ืืจื–ื•ืช ืœืื—ืช, ื•ื”ืฉืจืช ื”ื’ื™ื‘ ืขื ืื™ืฉื•ืจ ืœื›ื•ืœืŸ ื‘ื‘ืช ืื—ืช, ื‘ืื—ืช msg_id. ืื‘ืœ ื”ื•ื ื’ื ื™ื“ื—ื” ืืช ื”ื—ืคื™ืกื” ื”ื–ื•, ืื ืžืฉื”ื• ื”ืฉืชื‘ืฉ, ื‘ืฉืœืžื•ืชื”.

ื•ื‘ืฉืœื‘ ื–ื” ื ื›ื ืกื™ื ืœืชืžื•ื ื” ืฉื™ืงื•ืœื™ื ืœื ื˜ื›ื ื™ื™ื. ืžื ื™ืกื™ื•ืŸ ืจืื™ื ื• ืงื‘ื™ื™ื ืจื‘ื™ื, ื•ื‘ื ื•ืกืฃ, ื ืจืื” ื›ืขืช ืขื•ื“ ื“ื•ื’ืžืื•ืช ืœืขืฆื•ืช ื•ืื“ืจื™ื›ืœื•ืช ื’ืจื•ืขื•ืช โ€“ ื”ืื ื‘ืชื ืื™ื ื›ืืœื” ื›ื“ืื™ ืœืกืžื•ืš ื•ืœืงื‘ืœ ื”ื—ืœื˜ื•ืช ื›ืืœื”? ื”ืฉืืœื” ื”ื™ื ืจื˜ื•ืจื™ืช (ื›ืžื•ื‘ืŸ ืฉืœื).

ืขืœ ืžื” ืื ื—ื ื• ืžื“ื‘ืจื™ื? ืื ื‘ื ื•ืฉื "ื”ื•ื“ืขื•ืช ืกืžื™ื ืขืœ ื”ื•ื“ืขื•ืช" ืืชื” ืขื“ื™ื™ืŸ ื™ื›ื•ืœ ืœืฉืขืจ ืขื ื”ืชื ื’ื“ื•ื™ื•ืช ื›ืžื• "ืืชื” ื˜ื™ืคืฉ, ืœื ื”ื‘ื ืช ืืช ื”ืชื•ื›ื ื™ืช ื”ืžื‘ืจื™ืงื” ืฉืœื ื•!" (ืื– ืชื›ืชื•ื‘ ืืช ื”ืชื™ืขื•ื“ ืงื•ื“ื, ื›ืžื• ืฉืื ืฉื™ื ืจื’ื™ืœื™ื ืฆืจื™ื›ื™ื, ืขื ืจืฆื™ื•ื ืœ ื•ื“ื•ื’ืžืื•ืช ืฉืœ ื”ื—ืœืคืช ืžื ื•ืช, ื•ืื– ื ื“ื‘ืจ), ื•ืื– ืชื–ืžื•ื ื™ื/ืคืกืงื™ ื–ืžืŸ ื”ื ืฉืืœื” ืžืขืฉื™ืช ื•ืกืคืฆื™ืคื™ืช ื‘ืœื‘ื“, ื”ื›ืœ ื›ืืŸ ื™ื“ื•ืข ื›ื‘ืจ ื”ืจื‘ื” ื–ืžืŸ. ืžื” ืื•ืžืจ ืœื ื• ื”ืชื™ืขื•ื“ ืขืœ ืคืกืงื™ ื–ืžืŸ?

ืฉืจืช ื‘ื“ืจืš ื›ืœืœ ืžืืฉืจ ืืช ืงื‘ืœืช ื”ื•ื“ืขื” ืžืœืงื•ื— (ื‘ื“ืจืš ื›ืœืœ ืฉืื™ืœืชืช RPC) ื‘ืืžืฆืขื•ืช ืชื’ื•ื‘ืช RPC. ืื ืชื’ื•ื‘ื” ืืจื•ื›ื”, ืฉืจืช ืขืฉื•ื™ ืœืฉืœื•ื— ืชื—ื™ืœื” ืื™ืฉื•ืจ ืงื‘ืœื”, ื•ืงืฆืช ืžืื•ื—ืจ ื™ื•ืชืจ, ืชื’ื•ื‘ืช ื”-RPC ืขืฆืžื”.

ืœืงื•ื— ืžืืฉืจ ื‘ื“ืจืš ื›ืœืœ ืืช ืงื‘ืœืช ื”ื”ื•ื“ืขื” ืžืฉืจืช (ื‘ื“ืจืš ื›ืœืœ, ืชื’ื•ื‘ืช RPC) ืขืœ ื™ื“ื™ ื”ื•ืกืคืช ืื™ืฉื•ืจ ืœืฉืื™ืœืชืช ื”-RPC ื”ื‘ืื” ืื โ€‹โ€‹ื”ื™ื ืœื ื ืฉืœื—ื” ืžืื•ื—ืจ ืžื“ื™ (ืื ื”ื™ื ื ื•ืฆืจื”, ืœืžืฉืœ, 60-120 ืฉื ื™ื•ืช ืœืื—ืจ ื”ืงื‘ืœื” ืฉืœ ื”ื•ื“ืขื” ืžื”ืฉืจืช). ืขื ื–ืืช, ืื ื‘ืžืฉืš ืชืงื•ืคื” ืืจื•ื›ื” ืื™ืŸ ืกื™ื‘ื” ืœืฉืœื•ื— ื”ื•ื“ืขื•ืช ืœืฉืจืช ืื• ืื ื™ืฉ ืžืกืคืจ ืจื‘ ืฉืœ ื”ื•ื“ืขื•ืช ืœื ืžืื•ืฉืจื•ืช ืžื”ืฉืจืช (ื ื ื™ื— ืžืขืœ 16), ื”ืœืงื•ื— ืžืฉื“ืจ ืื™ืฉื•ืจ ืขืฆืžืื™.

... ืื ื™ ืžืชืจื’ื: ืื ื—ื ื• ื‘ืขืฆืžื ื• ืœื ื™ื•ื“ืขื™ื ื›ืžื” ื•ืื™ืš ืื ื—ื ื• ืฆืจื™ื›ื™ื ืืช ื–ื”, ืื– ื‘ื•ืื• ื ื ื™ื— ืฉื™ื”ื™ื” ื›ื›ื”.

ื•ืœื’ื‘ื™ ืคื™ื ื’ื™ื:

ื”ื•ื“ืขื•ืช ืคื™ื ื’ (PING/PONG)

ping#7abe77ec ping_id:long = Pong;

ืชื’ื•ื‘ื” ืžื•ื—ื–ืจืช ื‘ื“ืจืš ื›ืœืœ ืœืื•ืชื• ื—ื™ื‘ื•ืจ:

pong#347773c5 msg_id:long ping_id:long = Pong;

ื”ื•ื“ืขื•ืช ืืœื• ืื™ื ืŸ ื“ื•ืจืฉื•ืช ืื™ืฉื•ืจื™ื. ืคื•ื ื’ ืžื•ืขื‘ืจ ืจืง ื‘ืชื’ื•ื‘ื” ืœืคื™ื ื’ ื•ืื™ืœื• ืคื™ื ื’ ื™ื›ื•ืœ ืœื”ืชื‘ืฆืข ืขืœ ื™ื“ื™ ื›ืœ ืฆื“.

ืกื’ื™ืจืช ื—ื™ื‘ื•ืจ ื ื“ื—ื” + PING

ping_delay_disconnect#f3427b8c ping_id:long disconnect_delay:int = Pong;

ืขื•ื‘ื“ ื›ืžื• ืคื™ื ื’. ื‘ื ื•ืกืฃ, ืœืื—ืจ ืงื‘ืœืช ื–ื”, ื”ืฉืจืช ืžืคืขื™ืœ ื˜ื™ื™ืžืจ ืฉื™ืกื’ื•ืจ ืืช ื”ื—ื™ื‘ื•ืจ ื”ื ื•ื›ื—ื™ disconnect_delay ืฉื ื™ื•ืช ืžืื•ื—ืจ ื™ื•ืชืจ ืืœื ืื ื™ืงื‘ืœ ื”ื•ื“ืขื” ื—ื“ืฉื” ืžืื•ืชื• ืกื•ื’ ื”ืžืืคืก ืื•ื˜ื•ืžื˜ื™ืช ืืช ื›ืœ ื”ื˜ื™ื™ืžืจื™ื ื”ืงื•ื“ืžื™ื. ืื ื”ืœืงื•ื— ืฉื•ืœื— ืืช ื”ืคื™ื ื’ื™ื ื”ืืœื” ืคืขื ื‘-60 ืฉื ื™ื•ืช, ืœืžืฉืœ, ื”ื•ื ืขืฉื•ื™ ืœื”ื’ื“ื™ืจ disconnect_delay ืฉื•ื•ื” ืœ-75 ืฉื ื™ื•ืช.

ืืชื” ืžืฉื•ื’ืข?! ืชื•ืš 60 ืฉื ื™ื•ืช ื”ืจื›ื‘ืช ืชื™ื›ื ืก ืœืชื—ื ื”, ืชื•ืจื™ื“ ื•ืชืืกื•ืฃ ื ื•ืกืขื™ื ื•ืฉื•ื‘ ืชืื‘ื“ ืงืฉืจ ื‘ืžื ื”ืจื”. ืชื•ืš 120 ืฉื ื™ื•ืช, ื‘ื–ืžืŸ ืฉืืชื” ืฉื•ืžืข ืื•ืชื•, ื”ื•ื ื™ื’ื™ืข ืœืขื•ื“ ืื—ื“, ื•ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉื”ื—ื™ื‘ื•ืจ ื™ืชืงืœืงืœ. ื•ื‘ื›ืŸ, ื‘ืจื•ืจ ืžืื™ืคื” ื”ืจื’ืœื™ื™ื ืžื’ื™ืขื•ืช - "ืฉืžืขืชื™ ืฆืœืฆื•ืœ, ืื‘ืœ ืœื ื™ื•ื“ืข ืื™ืคื” ื–ื”", ื™ืฉ ืืช ื”ืืœื’ื•ืจื™ืชื ืฉืœ Nagl ื•ืืคืฉืจื•ืช TCP_NODELAY ื”ืžื™ื•ืขื“ืช ืœืขื‘ื•ื“ื” ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ืช. ืื‘ืœ, ืชืกืœื—ื• ืœื™, ืชื—ื–ื™ืงื• ื‘ืขืจืš ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœื• - 200 ืึธืœึฐืคึผึดื™ืชืฉื ื™ื•ืช ืื ืืชื” ื‘ืืžืช ืจื•ืฆื” ืœืชืืจ ืžืฉื”ื• ื“ื•ืžื” ื•ืœืฉืžื•ืจ ืขืœ ื›ืžื” ืžื ื•ืช ืืคืฉืจื™ื•ืช, ืื– ื“ื—ื” ืืช ื–ื” ืœ-5 ืฉื ื™ื•ืช, ืื• ืžื” ืฉืœื ื™ื”ื™ื” ืคืกืง ื”ื–ืžืŸ ืฉืœ ื”ื•ื“ืขืช "ื”ืžืฉืชืžืฉ ืžืงืœื™ื“..." ื›ืขืช. ืื‘ืœ ืœื ื™ื•ืชืจ.

ื•ืœื‘ืกื•ืฃ, ืคื™ื ื’. ื›ืœื•ืžืจ, ื‘ื“ื™ืงืช ื”ื—ื™ื™ื ืฉืœ ื—ื™ื‘ื•ืจ ื”-TCP. ื–ื” ืžืฆื—ื™ืง, ืื‘ืœ ืœืคื ื™ ื›ืขืฉืจ ืฉื ื™ื ื›ืชื‘ืชื™ ื˜ืงืกื˜ ื‘ื™ืงื•ืจืชื™ ืขืœ ื”ืฉืœื™ื— ืฉืœ ื”ืžืขื•ื ื•ืช ืฉืœ ื”ืคืงื•ืœื˜ื” ืฉืœื ื• - ื”ืžื—ื‘ืจื™ื ืฉื ื’ื ืคื™ื ื’ ืœืฉืจืช ืžื”ืœืงื•ื—, ื•ืœื ืœื”ื™ืคืš. ืื‘ืœ ืกื˜ื•ื“ื ื˜ื™ื ืฉื ื” ื’' ื–ื” ื“ื‘ืจ ืื—ื“, ื•ืžืฉืจื“ ื‘ื™ื ืœืื•ืžื™ ื–ื” ื“ื‘ืจ ืื—ืจ, ื ื›ื•ืŸ?..

ืจืืฉื™ืช, ืชื•ื›ื ื™ืช ื—ื™ื ื•ื›ื™ืช ืงื˜ื ื”. ื—ื™ื‘ื•ืจ TCP, ื‘ื”ื™ืขื“ืจ ื”ื—ืœืคืช ืžื ื•ืช, ื™ื›ื•ืœ ืœื—ื™ื•ืช ื‘ืžืฉืš ืฉื‘ื•ืขื•ืช. ื–ื” ื’ื ื˜ื•ื‘ ื•ื’ื ืจืข, ืชืœื•ื™ ื‘ืžื˜ืจื”. ื˜ื•ื‘ ืื ื”ื™ื” ืœืš ื—ื™ื‘ื•ืจ SSH ืคืชื•ื— ืœืฉืจืช, ืงืžืช ืžื”ืžื—ืฉื‘, ืืชื—ืœืช ืืช ื”ืจืื•ื˜ืจ, ื—ื–ืจืช ืœืžืงื•ื ืฉืœืš - ื”ืกืฉืŸ ื“ืจืš ื”ืฉืจืช ื”ื–ื” ืœื ื ืงืจืข (ืœื ื”ืงืœื“ืช ื›ืœื•ื, ืœื ื”ื™ื• ืžื ื•ืช) , ื–ื” ื ื•ื—. ื–ื” ืจืข ืื ื™ืฉ ืืœืคื™ ืœืงื•ื—ื•ืช ื‘ืฉืจืช, ืฉื›ืœ ืื—ื“ ืžื”ื ืชื•ืคืก ืžืฉืื‘ื™ื (ืฉืœื•ื, Postgres!), ื•ื”ืžืืจื— ืฉืœ ื”ืœืงื•ื— ืื•ืœื™ ื”ืชืืชื—ืœ ืžื–ืžืŸ - ืื‘ืœ ืœื ื ื“ืข ืขืœ ื›ืš.

ืžืขืจื›ื•ืช ืฆ'ืื˜/IM ื ื›ื ืกื•ืช ืœืžืงืจื” ื”ืฉื ื™ ืžืกื™ื‘ื” ืื—ืช ื ื•ืกืคืช - ืกื˜ื˜ื•ืกื™ื ืžืงื•ื•ื ื™ื. ืื ื”ืžืฉืชืžืฉ "ื ืคืœ", ืขืœื™ืš ืœื™ื™ื“ืข ืืช ื‘ื ื™ ืฉื™ื—ื• ืขืœ ื›ืš. ืื—ืจืช ืชืกืชื™ื™ื ื‘ื˜ืขื•ืช ืฉืขืฉื• ื™ื•ืฆืจื™ ื’'ืื‘ืจ (ื•ืชื™ืงื ื• ื‘ืžืฉืš 20 ืฉื ื”) - ื”ืžืฉืชืžืฉ ื”ืชื ืชืง, ืื‘ืœ ื”ื ืžืžืฉื™ื›ื™ื ืœื›ืชื•ื‘ ืœื• ื”ื•ื“ืขื•ืช, ืžืชื•ืš ืืžื•ื ื” ืฉื”ื•ื ืžืงื•ื•ืŸ (ืฉื’ื ื”ืœื›ื• ืœืื™ื‘ื•ื“ ืœื’ืžืจื™ ื‘ืืœื” ื›ืžื” ื“ืงื•ืช ืœืคื ื™ ื’ื™ืœื•ื™ ื”ื ื™ืชื•ืง). ืœื, ืืคืฉืจื•ืช ื”-TCP_KEEPALIVE, ืฉืื ืฉื™ื ืจื‘ื™ื ืฉืœื ืžื‘ื™ื ื™ื ื›ื™ืฆื“ ืคื•ืขืœื™ื ื˜ื™ื™ืžืจื™ื ืฉืœ TCP ื–ื•ืจืงื™ื ื‘ืื•ืคืŸ ืืงืจืื™ (ืขืœ ื™ื“ื™ ื”ื’ื“ืจืช ืขืจื›ื™ ืคืจื ื›ืžื• ืขืฉืจื•ืช ืฉื ื™ื•ืช), ืœื ืชืขื–ื•ืจ ื›ืืŸ - ืืชื” ืฆืจื™ืš ืœื•ื•ื“ื ืฉืœื ืจืง ืœื™ื‘ืช ืžืขืจื›ืช ื”ื”ืคืขืœื” ืฉืœ ื”ืžื—ืฉื‘ ืฉืœ ื”ืžืฉืชืžืฉ ื—ื™, ืื‘ืœ ื’ื ืžืชืคืงื“ ื›ืจื’ื™ืœ, ืžืกื•ื’ืœ ืœื”ื’ื™ื‘, ื•ื”ืืคืœื™ืงืฆื™ื” ืขืฆืžื” (ืืชื” ื—ื•ืฉื‘ ืฉื”ื™ื ืœื ื™ื›ื•ืœื” ืœื”ืงืคื™ื? Telegram Desktop ื‘ืื•ื‘ื•ื ื˜ื• 18.04 ืงืคื ืœื™ ื™ื•ืชืจ ืžืคืขื ืื—ืช).

ื‘ื’ืœืœ ื–ื” ืืชื” ืฆืจื™ืš ืœืขืฉื•ืช ืคื™ื ื’ ืฉืจืช ืœืงื•ื—, ื•ืœื ืœื”ื™ืคืš - ืื ื”ืœืงื•ื— ื™ืขืฉื” ื–ืืช, ืื ื”ื—ื™ื‘ื•ืจ ื ืฉื‘ืจ, ื”ืคื™ื ื’ ืœื ื™ื™ืžืกืจ, ื”ืžื˜ืจื” ืœื ืชื•ืฉื’.

ืžื” ืื ื—ื ื• ืจื•ืื™ื ื‘ื˜ืœื’ืจื? ื–ื” ื‘ื“ื™ื•ืง ื”ื”ืคืš! ื•ื‘ื›ืŸ, ื›ืœื•ืžืจ. ืจืฉืžื™ืช, ื›ืžื•ื‘ืŸ, ืฉื ื™ ื”ืฆื“ื“ื™ื ื™ื›ื•ืœื™ื ืœืขืฉื•ืช ืคื™ื ื’ ืื—ื“ ืœืฉื ื™. ื‘ืคื•ืขืœ, ืœืงื•ื—ื•ืช ืžืฉืชืžืฉื™ื ื‘ืงื‘ื™ื™ื ping_delay_disconnect, ืฉืžื’ื“ื™ืจ ืืช ื”ื˜ื™ื™ืžืจ ื‘ืฉืจืช. ื•ื‘ื›ืŸ, ืชืกืœื—ื• ืœื™, ื–ื” ืœื ืชืœื•ื™ ื‘ืœืงื•ื— ืœื”ื—ืœื™ื˜ ื›ืžื” ื–ืžืŸ ื”ื•ื ืจื•ืฆื” ืœื—ื™ื•ืช ืฉื ื‘ืœื™ ืคื™ื ื’. ื”ืฉืจืช, ืขืœ ืกืžืš ื”ืขื•ืžืก ืฉืœื•, ื™ื•ื“ืข ื˜ื•ื‘ ื™ื•ืชืจ. ืื‘ืœ, ื›ืžื•ื‘ืŸ, ืื ืœื ืื›ืคืช ืœืš ืžื”ืžืฉืื‘ื™ื, ืื– ืืชื” ืชื”ื™ื” ืคื™ื ื•ืงื™ื• ื”ืจืฉืข ืฉืœ ืขืฆืžืš, ื•ืงื‘ ื™ืขืฉื”...

ืื™ืš ื”ื™ื” ืฆืจื™ืš ืœืขืฆื‘ ืื•ืชื•?

ืื ื™ ืžืืžื™ืŸ ืฉื”ืขื•ื‘ื“ื•ืช ืœืขื™ืœ ืžืฆื‘ื™ืขื•ืช ื‘ื‘ื™ืจื•ืจ ืขืœ ื›ืš ืฉืฆื•ื•ืช Telegram/VKontakte ืื™ื ื• ืžื•ื›ืฉืจ ื‘ืžื™ื•ื—ื“ ื‘ืชื—ื•ื ื”ืชื—ื‘ื•ืจื” (ื•ื”ืจืžื” ื”ื ืžื•ื›ื” ื™ื•ืชืจ) ืฉืœ ืจืฉืชื•ืช ืžื—ืฉื‘ื™ื ื•ื›ื™ืฉื•ืจื™ื”ื ื”ื ืžื•ื›ื™ื ื‘ืขื ื™ื™ื ื™ื ืจืœื•ื•ื ื˜ื™ื™ื.

ืœืžื” ื”ืชื‘ืจืจ ืฉื–ื” ื›ืœ ื›ืš ืžืกื•ื‘ืš, ื•ืื™ืš ืื“ืจื™ื›ืœื™ ื˜ืœื’ืจื ื™ื›ื•ืœื™ื ืœื ืกื•ืช ืœื”ืชื ื’ื“? ืืช ื”ืขื•ื‘ื“ื” ืฉื”ื ื ื™ืกื• ืœืขืฉื•ืช ืกืฉืŸ ืฉืฉื•ืจื“ ื”ืคืกืงื•ืช ื—ื™ื‘ื•ืจ ืฉืœ TCP, ื›ืœื•ืžืจ, ืžื” ืฉืœื ื ืžืกืจ ืขื›ืฉื™ื•, ื ืขื‘ื™ืจ ื‘ื”ืžืฉืš. ื”ื ื›ื ืจืื” ื’ื ื ื™ืกื• ืœื‘ืฆืข ื˜ืจื ืกืคื•ืจื˜ UDP, ืื‘ืœ ื”ื ื ืชืงืœื• ื‘ืงืฉื™ื™ื ื•ื ื˜ืฉื• ืื•ืชื• (ื‘ื’ืœืœ ื–ื” ื”ืชื™ืขื•ื“ ืจื™ืง - ืœื ื”ื™ื” ื‘ืžื” ืœื”ืชืคืืจ). ืื‘ืœ ื‘ื’ืœืœ ื—ื•ืกืจ ื”ื‘ื ื” ืฉืœ ืื™ืš ืจืฉืชื•ืช ื‘ื›ืœืœ ื•-TCP ื‘ืคืจื˜ ืขื•ื‘ื“ื•ืช, ืื™ืคื” ืืคืฉืจ ืœืกืžื•ืš ืขืœ ื–ื”, ื•ืื™ืคื” ืฆืจื™ืš ืœืขืฉื•ืช ืืช ื–ื” ื‘ืขืฆืžืš (ื•ืื™ืš), ื•ื ื™ืกื™ื•ืŸ ืœืฉืœื‘ ืืช ื–ื” ืขื ืงืจื™ืคื˜ื•ื’ืจืคื™ื” "ืฉืชื™ ืฆื™ืคื•ืจื™ื ืขื ืื‘ืŸ ืื—ืช", ื–ื• ื”ืชื•ืฆืื”.

ืื™ืš ื–ื” ื”ื™ื” ื ื—ื•ืฅ? ืขืœ ืกืžืš ื”ืขื•ื‘ื“ื” ืฉ msg_id ื”ื•ื ื—ื•ืชืžืช ื–ืžืŸ ื”ื ื—ื•ืฆื” ืžื ืงื•ื“ืช ืžื‘ื˜ ืงืจื™ืคื˜ื•ื’ืจืคื™ืช ื›ื“ื™ ืœืžื ื•ืข ื”ืชืงืคื•ืช ืฉืœ ืžืฉื—ืง ื—ื•ื–ืจ, ื–ื• ื˜ืขื•ืช ืœืฆืจืฃ ืืœื™ื• ืคื•ื ืงืฆื™ื™ืช ืžื–ื”ื” ื™ื™ื—ื•ื“ื™ืช. ืœื›ืŸ, ืžื‘ืœื™ ืœืฉื ื•ืช ืžื”ื•ืชื™ืช ืืช ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ื”ื ื•ื›ื—ื™ืช (ื›ืืฉืจ ื–ืจื ื”ืขื“ื›ื•ื ื™ื ื ื•ืฆืจ, ื–ื” ื ื•ืฉื API ื‘ืจืžื” ื’ื‘ื•ื”ื” ืขื‘ื•ืจ ื—ืœืง ืื—ืจ ืžืกื“ืจืช ื”ืคื•ืกื˜ื™ื ื”ื–ื•), ื™ื”ื™ื” ืฆื•ืจืš:

  1. ื”ืฉืจืช ื”ืžื—ื–ื™ืง ื‘ื—ื™ื‘ื•ืจ ื”-TCP ืœืœืงื•ื— ืœื•ืงื— ืื—ืจื™ื•ืช - ืื ื”ื•ื ืงืจื ืžื”ืฉืงืข, ื ื ืœืืฉืจ, ืœืขื‘ื“ ืื• ืœื”ื—ื–ื™ืจ ืฉื’ื™ืื”, ืœืœื ื”ืคืกื“ื™ื. ืื– ื”ืื™ืฉื•ืจ ืื™ื ื• ื•ืงื˜ื•ืจ ืฉืœ ืžื–ื”ื™ื, ืืœื ืคืฉื•ื˜ "ื”ืื—ืจื•ืŸ ืฉื”ืชืงื‘ืœ seq_no" - ืจืง ืžืกืคืจ, ื›ืžื• ื‘-TCP (ืฉื ื™ ืžืกืคืจื™ื - ื”ื”ืžืฉืš ืฉืœืš ื•ื”ืžืกืคืจ ืฉืื•ืฉืจ). ืื ื—ื ื• ืชืžื™ื“ ื‘ืชื•ืš ื”ืคื’ื™ืฉื”, ืœื?
  2. ื—ื•ืชืžืช ื”ื–ืžืŸ ืœืžื ื™ืขืช ื”ืชืงืคื•ืช ื—ื•ื–ืจื•ืช ื”ื•ืคื›ืช ืœืฉื“ื” ื ืคืจื“, a la nonce. ื–ื” ื ื‘ื“ืง, ืื‘ืœ ืœื ืžืฉืคื™ืข ืขืœ ืฉื•ื ื“ื‘ืจ ืื—ืจ. ื“ื™ ื• uint32 - ืื ื”ืžืœื— ืฉืœื ื• ืžืฉืชื ื” ืœืคื—ื•ืช ื›ืœ ื—ืฆื™ ื™ื•ื, ื ื•ื›ืœ ืœื”ืงืฆื•ืช 16 ื‘ื™ื˜ื™ื ืœืกื™ื‘ื™ื•ืช ืžืกื“ืจ ื ืžื•ืš ืฉืœ ื—ืœืง ืฉืœื ืฉืœ ื”ื–ืžืŸ ื”ื ื•ื›ื—ื™, ื”ืฉืืจ - ืœืฉื‘ืจื™ืจ ืฉืœ ืฉื ื™ื™ื” (ื›ืžื• ืขื›ืฉื™ื•).
  3. ื”ื•ืกืจ msg_id ื‘ื›ืœืœ - ืžื ืงื•ื“ืช ื”ืžื‘ื˜ ืฉืœ ื”ื‘ืงืฉื•ืช ืฉืœ ื”ื‘ืงืฉื•ืช ื‘-backends, ื™ืฉ, ืจืืฉื™ืช, ืืช ืžื–ื”ื” ื”ืœืงื•ื—, ื•ืฉื ื™ืช, ืžื–ื”ื” ื”ืคื’ื™ืฉื”, ืœืฉืจืฉืจ ืื•ืชื. ื‘ื”ืชืื ืœื›ืš, ืจืง ื“ื‘ืจ ืื—ื“ ืžืกืคื™ืง ื›ืžื–ื”ื” ื‘ืงืฉื” seq_no.

ื–ื• ื’ื ืœื ื”ืืคืฉืจื•ืช ื”ืžื•ืฆืœื—ืช ื‘ื™ื•ืชืจ; ืืงืจืื™ ืžื•ื—ืœื˜ ื™ื›ื•ืœ ืœืฉืžืฉ ื›ืžื–ื”ื” - ื–ื” ื›ื‘ืจ ื ืขืฉื” ื‘-API ื‘ืจืžื” ื’ื‘ื•ื”ื” ื‘ืขืช ืฉืœื™ื—ืช ื”ื•ื“ืขื”, ืื’ื‘. ืขื“ื™ืฃ ืœืขืฉื•ืช ืžื—ื“ืฉ ืœื—ืœื•ื˜ื™ืŸ ืืช ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ืžื™ื—ืกื™ืช ืœืžื•ื—ืœื˜ืช, ืื‘ืœ ื–ื” ื ื•ืฉื ืœื—ืœืง ืื—ืจ, ืœื ืœืคื•ืกื˜ ื”ื–ื”.

API?

ื˜ื-ื“ืื! ืื–, ืœืื—ืจ ืฉื ืื‘ืงื ื• ื‘ื ืชื™ื‘ ืžืœื ื‘ื›ืื‘ ื•ืงื‘ื™ื™ื, ื”ืฆืœื—ื ื• ืกื•ืฃ ืกื•ืฃ ืœืฉืœื•ื— ื›ืœ ื‘ืงืฉื” ืœืฉืจืช ื•ืœืงื‘ืœ ื›ืœ ืชืฉื•ื‘ื” ืขืœื™ื”ืŸ, ื›ืžื• ื’ื ืœืงื‘ืœ ืขื“ื›ื•ื ื™ื ืžื”ืฉืจืช (ืœื ื‘ืชื’ื•ื‘ื” ืœื‘ืงืฉื”, ืืœื ื”ื•ื ืขืฆืžื• ืฉื•ืœื— ืœื ื•, ื›ืžื• PUSH, ืื ืžื™ืฉื”ื• ื–ื” ื™ื•ืชืจ ื‘ืจื•ืจ ื›ื›ื”).

ืฉื™ืžื• ืœื‘, ื›ืขืช ืชื”ื™ื” ื”ื“ื•ื’ืžื” ื”ื™ื—ื™ื“ื” ื‘ืคืจืœ ื‘ืžืืžืจ! (ืœืžื™ ืฉืœื ืžื›ื™ืจ ืืช ื”ืชื—ื‘ื™ืจ, ื”ื˜ื™ืขื•ืŸ ื”ืจืืฉื•ืŸ ืฉืœ ื‘ืจื›ื” ื”ื•ื ืžื‘ื ื” ื”ื ืชื•ื ื™ื ืฉืœ ื”ืื•ื‘ื™ื™ืงื˜, ื”ืฉื ื™ ื”ื•ื ื”ืžื—ืœืงื” ืฉืœื•):

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' )
};

ื›ืŸ, ืœื ืกืคื•ื™ืœืจ ื‘ื›ื•ื•ื ื” - ืื ืขื“ื™ื™ืŸ ืœื ืงืจืืชื ืื•ืชื•, ืงื“ื™ืžื”, ืขืฉื• ื–ืืช!

ื”ื•, ื•ื•ืื™~~... ืื™ืš ื–ื” ื ืจืื”? ืžืฉื”ื• ืžืื•ื“ ืžื•ื›ืจ... ืื•ืœื™ ื–ื” ืžื‘ื ื” ื”ื ืชื•ื ื™ื ืฉืœ Web API ื˜ื™ืคื•ืกื™ ื‘-JSON, ื—ื•ืฅ ืžื–ื” ืฉื’ื ืžื—ืœืงื•ืช ืžื—ื•ื‘ืจื•ืช ืœืื•ื‘ื™ื™ืงื˜ื™ื?..

ืื– ื›ื›ื” ื–ื” ื™ื•ืฆื... ืžื” ื–ื” ื‘ื›ืœืœ, ื—ื‘ืจื™ื?.. ื›ืœ ื›ืš ื”ืจื‘ื” ืžืืžืฅ - ื•ืขืฆืจื ื• ืœื ื•ื— ืื™ืคื” ืฉืžืชื›ื ืชื™ ื”ืื™ื ื˜ืจื ื˜ ืจืง ืžืชื—ื™ืœ?..ื”ืื ืจืง JSON ืขืœ HTTPS ืœื ื™ื”ื™ื” ืคืฉื•ื˜ ื™ื•ืชืจ?! ืžื” ืงื™ื‘ืœื ื• ื‘ืชืžื•ืจื”? ื”ืื ื”ืžืืžืฅ ื”ื™ื” ืฉื•ื•ื” ืืช ื–ื”?

ื‘ื•ื ื ืขืจื™ืš ืžื” TL+MTProto ื ืชืŸ ืœื ื• ื•ืื™ืœื• ืืœื˜ืจื ื˜ื™ื‘ื•ืช ืืคืฉืจื™ื•ืช. ื•ื‘ื›ืŸ, HTTP, ื”ืžืชืžืงื“ ื‘ืžื•ื“ืœ ื”ืชื’ื•ื‘ื” ืœื‘ืงืฉื”, ืžืชืื™ื ืœื ื˜ื•ื‘, ืื‘ืœ ืœืคื—ื•ืช ืžืฉื”ื• ื ื•ืกืฃ ืขืœ TLS?

ืกื“ืจื” ืงื•ืžืคืงื˜ื™ืช. ื›ืฉืื ื™ ืจื•ืื” ืืช ืžื‘ื ื” ื”ื ืชื•ื ื™ื ื”ื–ื”, ื‘ื“ื•ืžื” ืœ-JSON, ืื ื™ ื–ื•ื›ืจ ืฉื™ืฉ ื’ืจืกืื•ืช ื‘ื™ื ืืจื™ื•ืช ืฉืœื•. ื‘ื•ืื• ื ืกืžืŸ ืืช MsgPack ื›ื‘ืœืชื™ ื ื™ืชืŸ ืœื”ืจื—ื‘ื” ืžืกืคื™ืง, ืื‘ืœ ื™ืฉ, ืœืžืฉืœ, CBOR - ืื’ื‘, ืชืงืŸ ื”ืžืชื•ืืจ ื‘ RFC 7049. ื–ื” ื‘ื•ืœื˜ ื‘ืขื•ื‘ื“ื” ืฉื”ื•ื ืžื’ื“ื™ืจ ืชื’ื™ื, ื›ืžื ื’ื ื•ืŸ ื”ืจื—ื‘ื”, ื•ื‘ื™ืŸ ื›ื‘ืจ ืกื˜ื ื“ืจื˜ื™ ื™ืฉ:

  • 25 + 256 - ื”ื—ืœืคืช ืฉื•ืจื•ืช ื—ื•ื–ืจื•ืช ื‘ื”ืชื™ื™ื—ืกื•ืช ืœืžืกืคืจ ื”ืฉื•ืจื”, ืฉื™ื˜ืช ื“ื—ื™ืกื” ื–ื•ืœื” ื›ื–ื•
  • 26 - ืื•ื‘ื™ื™ืงื˜ Perl ืžืกื•ื“ืจ ืขื ืฉื ืžื—ืœืงื” ื•ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ื‘ื ืื™
  • 27 - ืื•ื‘ื™ื™ืงื˜ ืžืกื•ื“ืจ ืœืœื ืชืœื•ืช ื‘ืฉืคื” ืขื ืฉื ืกื•ื’ ื•ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ื‘ื ืื™

ื•ื‘ื›ืŸ, ื ื™ืกื™ืชื™ ืœืขืฉื•ืช ืกื“ืจื” ืฉืœ ืื•ืชื ื ืชื•ื ื™ื ื‘-TL ื•ื‘-CBOR ืขื ื”ืคืขืœืช ืžื—ืจื•ื–ืช ื•ื—ืคืฆื™ื. ื”ืชื•ืฆืื” ื”ื—ืœื” ืœื”ืฉืชื ื•ืช ืœื˜ื•ื‘ืช CBOR ืื™ืคืฉื”ื• ืžืžื’ื”-ื‘ื™ื™ื˜:

cborlen=1039673 tl_len=1095092

ืœืคื™ื›ืš, ืžืกืงื ื”: ื™ืฉื ื ืคื•ืจืžื˜ื™ื ืคืฉื•ื˜ื™ื ื™ื•ืชืจ ื‘ืื•ืคืŸ ืžื”ื•ืชื™ ืฉืื™ื ื ื ืชื•ื ื™ื ืœื‘ืขื™ื” ืฉืœ ื›ืฉืœ ืกื ื›ืจื•ืŸ ืื• ืžื–ื”ื” ืœื ื™ื“ื•ืข, ืขื ื™ืขื™ืœื•ืช ื“ื•ืžื”.

ื™ืฆื™ืจืช ื—ื™ื‘ื•ืจ ืžื”ื™ืจื”. ืžืฉืžืขื•ืช ื”ื“ื‘ืจ ื”ื™ื ืืคืก RTT ืœืื—ืจ ื—ื™ื‘ื•ืจ ืžื—ื“ืฉ (ื›ืืฉืจ ื”ืžืคืชื— ื›ื‘ืจ ื ื•ืฆืจ ืคืขื ืื—ืช) - ื™ืฉื™ื ื›ื‘ืจ ืžื”ื•ื“ืขืช ื”-MTProto ื”ืจืืฉื•ื ื”, ืืš ืขื ื›ืžื” ื”ืกืชื™ื™ื’ื•ื™ื•ืช - ืคื’ืข ื‘ืื•ืชื• ืžืœื—, ื”ืกืฉืŸ ืœื ืจืงื•ื‘ ื•ื›ื•'. ืžื” ืžืฆื™ืขื” ืœื ื• TLS ื‘ืžืงื•ื ื–ืืช? ืฆื™ื˜ื•ื˜ ื‘ื ื•ืฉื:

ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-PFS ื‘-TLS, ื›ืจื˜ื™ืกื™ ื”ืคืขืœื” ืฉืœ TLS (RFC 5077) ื›ื“ื™ ืœื—ื“ืฉ ื”ืคืขืœื” ืžื•ืฆืคื ืช ืœืœื ื ื™ื”ื•ืœ ืžืฉื ื•ืžืชืŸ ืžื—ื“ืฉ ืขืœ ืžืคืชื—ื•ืช ื•ืœืœื ืื—ืกื•ืŸ ืžื™ื“ืข ืžืคืชื— ื‘ืฉืจืช. ื‘ืขืช ืคืชื™ื—ืช ื”ื—ื™ื‘ื•ืจ ื”ืจืืฉื•ืŸ ื•ื™ืฆื™ืจืช ืžืคืชื—ื•ืช, ื”ืฉืจืช ืžืฆืคื™ืŸ ืืช ืžืฆื‘ ื”ื—ื™ื‘ื•ืจ ื•ืžืฉื“ืจ ืื•ืชื• ืœืœืงื•ื— (ื‘ืฆื•ืจื” ืฉืœ ื›ืจื˜ื™ืก ื”ืคืขืœื”). ื‘ื”ืชืื ืœื›ืš, ื›ืืฉืจ ื”ื—ื™ื‘ื•ืจ ืžืชื—ื“ืฉ, ื”ืœืงื•ื— ืฉื•ืœื— ื›ืจื˜ื™ืก ื”ืคืขืœื”, ื›ื•ืœืœ ืžืคืชื— ื”ื”ืคืขืœื”, ื‘ื—ื–ืจื” ืœืฉืจืช. ื”ื›ืจื˜ื™ืก ืขืฆืžื• ืžื•ืฆืคืŸ ื‘ืžืคืชื— ื–ืžื ื™ (ืžืคืชื— ื›ืจื˜ื™ืก ื”ืคืขืœื”), ืืฉืจ ืžืื•ื—ืกืŸ ื‘ืฉืจืช ื•ื™ืฉ ืœื”ืคื™ืฅ ืื•ืชื• ื‘ื™ืŸ ื›ืœ ืฉืจืชื™ ื”ื—ื–ื™ืช ื”ืžืขื‘ื“ื™ื SSL ื‘ืคืชืจื•ื ื•ืช ืžืงื•ื‘ืฆื™ื.[10] ืœืคื™ื›ืš, ื”ื›ื ืกืช ื›ืจื˜ื™ืก ื”ืคืขืœื” ืขืœื•ืœื” ืœื”ืคืจ ืืช PFS ืื ืžืคืชื—ื•ืช ืฉืจืช ื–ืžื ื™ื™ื ื ืคื’ืขื™ื, ืœืžืฉืœ, ื›ืืฉืจ ื”ื ืžืื•ื—ืกื ื™ื ื‘ืžืฉืš ื–ืžืŸ ืจื‘ (OpenSSL, nginx, Apache ืžืื—ืกื ื™ื ืื•ืชื ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืœื›ืœ ืžืฉืš ื”ืชื•ื›ื ื™ืช; ืืชืจื™ื ืคื•ืคื•ืœืจื™ื™ื ืžืฉืชืžืฉื™ื ื”ืžืคืชื— ืœืžืกืคืจ ืฉืขื•ืช, ืขื“ ื™ืžื™ื).

ื›ืืŸ ื”-RTT ืื™ื ื• ืืคืก, ืืชื” ืฆืจื™ืš ืœื”ื—ืœื™ืฃ ืœืคื—ื•ืช ClientHello ื•-ServerHello, ื•ืœืื—ืจ ืžื›ืŸ ื”ืœืงื•ื— ื™ื›ื•ืœ ืœืฉืœื•ื— ื ืชื•ื ื™ื ื™ื—ื“ ืขื Finished. ืื‘ืœ ื›ืืŸ ืขืœื™ื ื• ืœื–ื›ื•ืจ ืฉืื™ืŸ ืœื ื• ืืช ื”-Web, ืขื ืฉืœืœ ื”ื—ื™ื‘ื•ืจื™ื ื”ื—ื“ืฉื™ื ืฉื ืคืชื—ื•, ืืœื ืฉืœื™ื—, ืฉื”ื—ื™ื‘ื•ืจ ืฉืœื• ื”ื•ื ืœืจื•ื‘ ื‘ืงืฉื•ืช ืืจื•ื›ื•ืช ื™ื•ืชืจ ืื• ืคื—ื•ืช, ืงืฆืจื•ืช ื™ื—ืกื™ืช ืœื“ืคื™ ืื™ื ื˜ืจื ื˜ - ื”ื›ืœ ืžืจื•ื‘ื‘. ื›ึผึฐืœึทืคึผึตื™ ืคึผึฐื ึดื™ื. ื›ืœื•ืžืจ, ื–ื” ื“ื™ ืžืงื•ื‘ืœ ืื ืœื ื ืชืงืœื ื• ื‘ืงื˜ืข ืžืžืฉ ื’ืจื•ืข ื‘ืจื›ื‘ืช ื”ืชื—ืชื™ืช.

ืฉื›ื—ืช ืขื•ื“ ืžืฉื”ื•? ื›ืชื‘ื• ื‘ืชื’ื•ื‘ื•ืช.

ื”ืžืฉืš ื™ื‘ื•ื!

ื‘ื—ืœืง ื”ืฉื ื™ ืฉืœ ืกื“ืจืช ืคื•ืกื˜ื™ื ื–ื• ื ืฉืงื•ืœ ืœื ื ื•ืฉืื™ื ื˜ื›ื ื™ื™ื, ืืœื ืืจื’ื•ื ื™ื™ื - ื’ื™ืฉื•ืช, ืื™ื“ื™ืื•ืœื•ื’ื™ื”, ืžืžืฉืง, ื™ื—ืก ืœืžืฉืชืžืฉื™ื ื•ื›ื•'. ืขื ื–ืืช, ื‘ื”ืชื‘ืกืก ืขืœ ื”ืžื™ื“ืข ื”ื˜ื›ื ื™ ืฉื”ื•ืฆื’ ื›ืืŸ.

ื”ื—ืœืง ื”ืฉืœื™ืฉื™ ื™ืžืฉื™ืš ืœื ืชื— ืืช ื”ืจื›ื™ื‘ ื”ื˜ื›ื ื™ / ื—ื•ื•ื™ืช ื”ืคื™ืชื•ื—. ืชืœืžื“, ื‘ืžื™ื•ื—ื“:

  • ื”ืžืฉืš ื”ืžื’ื™ืคื” ืขื ืžื’ื•ื•ืŸ ืกื•ื’ื™ ื”-TL
  • ื“ื‘ืจื™ื ืœื ื™ื“ื•ืขื™ื ืขืœ ืขืจื•ืฆื™ื ื•ืงื‘ื•ืฆื•ืช ืขืœ
  • ืžื“ื•ืข ื“ื™ืืœื•ื’ื™ื ื’ืจื•ืขื™ื ืžืจื•ืกื˜ืจ
  • ืขืœ ื”ืชื™ื™ื—ืกื•ืช ืœืžืกืจ ืžื•ื—ืœื˜ ืœืขื•ืžืช ื™ื—ืกื™
  • ืžื” ื”ื”ื‘ื“ืœ ื‘ื™ืŸ ืชืžื•ื ื” ืœืชืžื•ื ื”
  • ื›ื™ืฆื“ ืืžื•ื’'ื™ ืžืคืจื™ืขื™ื ืœื˜ืงืกื˜ ื ื˜ื•ื™

ื•ืงื‘ื™ื™ื ืื—ืจื™ื! ื”ืžืฉืš ืœืขืงื•ื‘!

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”