เบเบฒเบ™เบงเบดเบžเบฒเบเบงเบดเบˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบžเบดเบ—เบตเบเบฒเบ™ เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ‚เบญเบ‡ Telegram. เบชเปˆเบงเบ™เบ—เบต 1, เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™: เบ›เบฐเบชเบปเบšเบเบฒเบ™เปƒเบ™เบเบฒเบ™เบ‚เบฝเบ™เบฅเบนเบเบ„เป‰เบฒเบˆเบฒเบ scratch - TL, MT

เบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰, เบ‚เปเป‰เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบš Telegram เบ—เบตเปˆเบ”เบต, เบญเป‰เบฒเบ Durov เบกเบตเบ„เบงเบฒเบกเบชเบฐเบซเบฅเบฒเบ”เปเบฅเบฐเบกเบตเบ›เบฐเบชเบปเบšเบเบฒเบ™เปƒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบˆเบฐเบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™Habre. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบกเบตเบ„เบปเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบเบซเบผเบฒเบเป„เบ”เป‰ immersed เบ•เบปเบ™เป€เบญเบ‡เปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™ - เบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปƒเบŠเป‰เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ (เปเบฅเบฐเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบ MTProto) JSON-based Bot API, เปเบฅเบฐเบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบžเบฝเบ‡เปเบ•เปˆเบเบญเบกเบฎเบฑเบš. เบเปˆเบฝเบงเบเบฑเบšเบชเบฑเบ”เบ—เบฒ เบเบฒเบ™เบเป‰เบญเบ‡เบเปเปเบฅเบฐ PR เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเปเบนเบ™เบญเป‰เบญเบกเบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบง. เป€เบเบทเบญเบšเบซเบ™เบถเปˆเบ‡เบ›เบตเปเบฅเบฐเป€เบ„เบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเบขเบนเปˆ Eshelon NGO Vasily (เบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบšเบฑเบ™เบŠเบตเบ‚เบญเบ‡เบฅเบฒเบงเปƒเบ™Habrรฉเป„เบ”เป‰เบ–เบทเบเบฅเบถเบšเบฅเป‰เบฒเบ‡เบžเป‰เบญเบกเบเบฑเบšเบฎเปˆเบฒเบ‡) เป€เบฅเบตเปˆเบกเบ‚เบฝเบ™เบฅเบนเบเบ„เป‰เบฒ Telegram เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบ•เบฑเป‰เบ‡เปเบ•เปˆเบ•เบปเป‰เบ™เปƒเบ™ Perl, เปเบฅเบฐเบ•เปเปˆเบกเบฒเบœเบนเป‰เบ‚เบฝเบ™เบ‚เบญเบ‡เบชเบฒเบเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบก. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡ Perl, เบšเบฒเบ‡เบ„เบปเบ™เบˆเบฐเบ–เบฒเบกเบ—เบฑเบ™เบ—เบต? เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบกเบตเบขเบนเปˆเปƒเบ™เบžเบฒเบชเบฒเบญเบทเปˆเบ™เปเบฅเป‰เบง, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบˆเบธเบ”, เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบญเบทเปˆเบ™เบ—เบตเปˆเบšเปเปˆเบกเบต. เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบžเป‰เบญเบกเปเบฅเป‰เบง, เปเบฅเบฐเบ•เบฒเบกเบ„เบงเบฒเบกเป€เบซเบกเบฒเบฐเบชเบปเบกเบœเบนเป‰เบ‚เบฝเบ™เบ•เป‰เบญเบ‡เป„เบ›เบ—เบฑเบ‡เบซเบกเบปเบ” เบˆเบฒเบ scratch. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบฅเบฑเบšเปเบกเปˆเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบท, เปเบ•เปˆเบขเบทเบ™เบขเบฑเบ™. เบ”เป‰เบงเบเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ—เบตเปˆเปเบ™เปƒเบชเปˆเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž, เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบžเบฝเบ‡เปเบ•เปˆเบญเบตเบ‡เปƒเบชเปˆเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบกเบˆเบฒเบเบœเบนเป‰เบœเบฐเบฅเบดเบ”เปเบฅเบฐเป„เบงเป‰เบงเบฒเบ‡เปƒเบˆเบกเบฑเบ™เป‚เบ”เบเบ•เบฒเบšเบญเบ” (เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ™เบตเป‰เปเบกเปˆเบ™เบซเบปเบงเบ‚เปเป‰เบชเปเบฒเบฅเบฑเบšเบžเบฒเบเบ—เบตเบชเบญเบ‡). เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบตเปƒเบ™เบฅเบฐเบ”เบฑเบš "เบชเบฐเป€เบฅเปˆเบ" (เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป API เปƒเบ”).

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบˆเบฐเบšเปเปˆเบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบซเบผเบทเบ„เบฐเบ™เบดเบ”เบชเบฒเบ”เบซเบผเบฒเบเปƒเบ™เบŠเบธเบ”เบ‚เบญเบ‡เบซเบปเบงเบ‚เปเป‰เบ™เบตเป‰. เปเบ•เปˆเบˆเบฐเบกเบตเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เบญเบทเปˆเบ™เป†เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเปเบฅเบฐ crutches เบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐ (เบเบฑเบ‡เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบˆเบฐเบšเปเปˆเบ‚เบฝเบ™เบˆเบฒเบ scratch, เปเบ•เปˆเบˆเบฐเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปƒเบ™เบžเบฒเบชเบฒเปƒเบ”เบเปเปˆเบ•เบฒเบก). เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ•เบปเป‰เบ™เบ•เปเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบžเบฐเบเบฒเบเบฒเบกเบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบนเบเบ„เป‰เบฒเบˆเบฒเบ scratch เบญเบตเบ‡เบ•เบฒเบกเป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เปƒเบซเป‰เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เบ–เบทเบเบ›เบดเบ” (เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เปƒเบ™เบžเบฒเบเบ—เบตเบชเบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเบงเบกเป€เบญเบปเบฒเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบซเบปเบงเบ‚เปเป‰เบ‚เบญเบ‡เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡. เป€เบเบตเบ”เบ‚เบถเป‰เบ™ เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™), เปเบ•เปˆ, เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบกเบตเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เป€เบŠเบฑเปˆเบ™ RFC - เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เบฅเบนเบเบ„เป‰เบฒเบ•เบฒเบกเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบชเบฐเป€เบžเบฒเบฐ, "เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เป€เบšเบดเปˆเบ‡" เบขเบนเปˆเปƒเบ™เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡, เบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™ (Telegram Desktop, เบกเบทเบ–เบท), เบซเบผเบท Telethon เบ—เบตเปˆเบšเปเปˆเป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™?

เบžเบฒเบชเบฒ:

เป€เบญเบเบฐเบชเบฒเบ™... เบกเบฑเบ™เบกเบตเบขเบนเปˆเบšเป? เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบˆเบดเบ‡โ€‹?..

เบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเบชเปเบฒเบฅเบฑเบšเบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบˆเบฐเป€เบเบฑเบšเบเปเบฒเปƒเบ™เบฅเบฐเบ”เบนเบฎเป‰เบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ. เป€เบงเบฅเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบฒเบ‡เบเบฒเบ™ https://core.telegram.org เป€เบญเบเบฐเบชเบฒเบ™เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ‚เบญเบ‡เบŠเบฑเป‰เบ™ 23, i.e. เบ•เบดเบ”เบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบšเปˆเบญเบ™เปœเบถเปˆเบ‡เปƒเบ™เบ›เบต 2014 (เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒ, เบšเปเปˆเบกเบตเบŠเปˆเบญเบ‡เบ—เบฒเบ‡เปƒเบ™เป€เบกเบทเปˆเบญเบ™เบฑเป‰เบ™เบšเป?). เปเบ™เปˆเบ™เบญเบ™, เปƒเบ™เบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบต, เบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เป€เบงเบฅเบฒเบ™เบฑเป‰เบ™เปƒเบ™เบ›เบต 2014. เปเบ•เปˆเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบขเบนเปˆเปƒเบ™เบฅเบฑเบ”เบ™เบตเป‰, เป€เบญเบเบฐเบชเบฒเบ™เปเบกเปˆเบ™, เบ—เปเบฒเบญเบดเบ”, เบšเปเปˆเบ„เบปเบšเบ–เป‰เบงเบ™, เปเบฅเบฐเบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเบกเบฑเบ™เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบกเบเบฑเบšเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡. เบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เป€เบ”เบทเบญเบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เปƒเบ™เป€เบ”เบทเบญเบ™เบเบฑเบ™เบเบฒ 2019, เบกเบฑเบ™เปเบกเปˆเบ™ เป‚เบ”เบเบšเบฑเบ‡เป€เบญเบตเบ™ เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบ„เบปเป‰เบ™เบžเบปเบšเบงเปˆเบฒเบกเบตเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡เป€เบญเบเบฐเบชเบฒเบ™เบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒ, เบชเปเบฒเบฅเบฑเบš Layer 105 เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™, เป‚เบ”เบเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบญเปˆเบฒเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡. เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เบšเบปเบ”เบ„เบงเบฒเบกเบซเบผเบฒเบเบชเบฐเบšเบฑเบšเป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡, เปเบ•เปˆเบซเบผเบฒเบเป†เบขเปˆเบฒเบ‡เบเบฑเบ‡เบ„เบปเบ‡เบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบญเปˆเบฒเบ™เบ„เปเบฒเบงเบดเบˆเบฒเบ™เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบเปˆเบฝเบงเบเบฑเบšเป€เบญเบเบฐเบชเบฒเบ™, เบ—เปˆเบฒเบ™เบ„เบงเบ™เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบšเปเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบญเบตเบเบ•เปเปˆเป„เบ›, เปเบ•เปˆเบšเบฒเบ‡เบญเบฑเบ™เบเบฑเบ‡เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡. เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, 5 เบ›เบตเปƒเบ™เป‚เบฅเบเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™, เปเบ•เปˆ เบซเบผเบฒเบ เบซเบผเบฒเบ. เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบงเบฅเบฒเบ™เบฑเป‰เบ™ (เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ geochat เบ—เบตเปˆเบ–เบทเบเบเบปเบเป€เบฅเบตเบเปเบฅเบฐเบŸเบทเป‰เบ™เบŸเบนเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ™เบฑเป‰เบ™เบกเบฒ), เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™ API เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เป„เบ”เป‰เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบˆเบฒเบเบฎเป‰เบญเบเบซเบฒเบซเบผเบฒเบเบเบงเปˆเบฒเบชเบญเบ‡เบฎเป‰เบญเบเบซเป‰เบฒเบชเบดเบš!

เบšเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ›เบฑเบ™เบ™เบฑเบเบ‚เบฝเบ™เบซเบ™เบธเปˆเบก?

เบกเบฑเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเบ‚เบฝเบ™เบˆเบฒเบเบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบซเบผเบทเปƒเบŠเป‰, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เป€เบŠเบฑเปˆเบ™ Telethon เบชเปเบฒเบฅเบฑเบš Python เบซเบผเบท Madeline เบชเปเบฒเบฅเบฑเบš PHP, เปƒเบ™เบเปเบฅเบฐเบ™เบตเปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ—เปเบฒเบญเบดเบ” เบฅเบปเบ‡โ€‹เบ—เบฐโ€‹เบšเบฝเบ™โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹ - เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ•เบปเบงโ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบเบฒเบ™โ€‹ api_id ะธ api_hash (เบœเบนเป‰เบ—เบตเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš VKontakte API เบ—เบฑเบ™เบ—เบตเป€เบ‚เบปเป‰เบฒเปƒเบˆ) เป‚เบ”เบเบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบˆเบฐเบเปเบฒเบ™เบปเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ. เบ™เบตเป‰ เบˆเปเบฒโ€‹เบ•เป‰เบญเบ‡ เป€เบฎเบฑเบ”เบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ—เบฒเบ‡เบเบปเบ”เบซเบกเบฒเบ, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบงเบปเป‰เบฒเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบœเบนเป‰เบ‚เบฝเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบœเบตเบเปเบœเปˆเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบžเบฒเบเบ—เบตเบชเบญเบ‡. เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบžเปเปƒเบˆเบเบฑเบšเบ„เปˆเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เบกเบตเบˆเปเบฒเบเบฑเบ”เบซเบผเบฒเบ - เบ„เบงเบฒเบกเบˆเบดเบ‡เปเบฅเป‰เบงเปเบกเปˆเบ™เบงเปˆเบฒเบ•เบญเบ™เบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เป„เบ”เป‰ เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบซเบ™เบถเปˆเบ‡โ€‹ app, เบชเบฐเบ™เบฑเป‰เบ™เบขเปˆเบฒเบŸเป‰เบฒเบงเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบกเบฑเบ™.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบˆเบฒเบเบกเบธเบกเป€เบšเบดเปˆเบ‡เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเบ„เบงเบ™เบˆเบฐเบชเบปเบ™เปƒเบˆเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบžเบงเบเป€เบฎเบปเบฒเบ„เบงเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบˆเบฒเบ Telegram เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เป€เบญเบเบฐเบชเบฒเบ™, เป‚เบ›เป‚เบ•เบ„เบญเบ™, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ„เบปเบ™เป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเบกเบต docks เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ–เบดเป‰เบกเป„เบงเป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบชเบทเบšเบ•เปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบเบฑเบšเบœเบนเป‰เบ—เบตเปˆเป€เบฅเบตเปˆเบกเบชเป‰เบฒเบ‡เบฅเบนเบเบ„เป‰เบฒ, เป€เบžเบฒเบฐเบงเปˆเบฒ. เบกเบฑเบ™เบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™. เปเบ•เปˆเบšเปเปˆเบกเบต, เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ„เป‰เบฒเบเบ„เบทเบงเปˆเบฒเป„เบ”เป‰เบ–เบทเบเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™, เบšเปเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เบกเบฒ.

เปเบฅเบฐเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ‚เบฝเบ™เบˆเบฒเบ scratch, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเบเบฑเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบงเป„เบ. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ https://core.telegram.org/ เปเบฅเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบžเบงเบเบกเบฑเบ™เปƒเบ™เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ” เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ” เบญเบฐเบ™เบธเบชเบฑเบ™เบเบฒ MTProto - เปเบ•เปˆเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เป€เบŠเบทเปˆเบญ เบเบฒเบ™เบˆเบฑเบ”เบงเบฒเบ‡เบ•เบฒเบกเบฎเบนเบšเปเบšเบš OSI เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบซเบ™เป‰เบฒเบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เป„เบฎเป‰เบ›เบฐเป‚เบซเบเบ”.

เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ—เบฑเบ‡เบเปˆเบญเบ™เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบ MTProto, เปƒเบ™เบซเบผเบฒเบเบฅเบฐเบ”เบฑเบšเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™ (เบเป‰เบญเบ™เบงเปˆเบฒเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ•เปˆเบฒเบ‡เบ›เบฐเป€เบ—เบ”เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ OS kernel เป€เบงเบปเป‰เบฒเบงเปˆเบฒ, เบเบฒเบ™เบฅเบฐเป€เบกเบตเบ”เบŠเบฑเป‰เบ™), เบซเบปเบงเบ‚เปเป‰เปƒเบซเบเปˆ, เป€เบˆเบฑเบšเบ›เบงเบ”เปเบฅเบฐเบ‚เบตเป‰เบฎเป‰เบฒเบเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™ ...

Binary serialization: TL (Type Language) เปเบฅเบฐเบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบกเบฑเบ™, เปเบฅเบฐเบŠเบฑเป‰เบ™, เปเบฅเบฐเบซเบผเบฒเบเบ„เปเบฒเบ—เบตเปˆเบซเบ™เป‰เบฒเบขเป‰เบฒเบ™เบญเบทเปˆเบ™เป†

เบซเบปเบงเบ‚เปเป‰เบ™เบตเป‰, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เปเบกเปˆเบ™เบเบธเบ™เปเบˆเบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡ Telegram. เปเบฅเบฐเบˆเบฐเบกเบตเบ„เปเบฒเป€เบงเบปเป‰เบฒเบ—เบตเปˆเบ‚เบตเป‰เบฎเป‰เบฒเบเบซเบผเบฒเบเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเป€เบˆเบฒเบฐเป€เบฅเบดเบเบกเบฑเบ™.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ™เบตเป‰เปเบกเปˆเบ™เปเบœเบ™เบงเบฒเบ”. เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ„เปเบฒโ€‹เบ™เบตเป‰โ€‹เบกเบฒโ€‹เป€เบ–เบดเบ‡โ€‹เบˆเบดเบ”โ€‹เปƒเบˆโ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹, เป€เบงเบปเป‰เบฒโ€‹เบงเปˆเบฒโ€‹, JSON Schema, เป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเป‰เบง. เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปเบกเปˆเบ™เบ„เบทเบเบฑเบ™: เบšเบฒเบ‡เบžเบฒเบชเบฒเป€เบžเบทเปˆเบญเบญเบฐเบ—เบดเบšเบฒเบเบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบชเบปเปˆเบ‡เบ•เปเปˆเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰. เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบ„เบงเบฒเบกเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡. เบ–เป‰เบฒเบˆเบฒเบเบซเบ™เป‰เบฒ เบญเบฐเบ™เบธเบชเบฑเบ™เบเบฒ MTProto, เบซเบผเบทเบˆเบฒเบเบ•เบปเป‰เบ™เป„เบกเป‰เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเป€เบ›เบตเบ”เบšเบฒเบ‡ schema, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™:

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 ++ (เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบšเปเปˆเปเบกเปˆเบ™). เปเบฅเบฐเบชเบฑเบ™เบเบฒเบฅเบฑเบเบญเบทเปˆเบ™เป†เบ—เบฑเบ‡เบซเบกเบปเบ”เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเปเบ™เบงเปƒเบ”, เป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบเบ„เปเบฒเบ–เบฒเบก, เป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบ exclamation, เป€เบ›เบตเป€เบŠเบฑเบ™, hash marks (เปเบฅเบฐเปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบซเบกเบฒเบเป€เบ–เบดเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ•เปˆเบฒเบ‡เป†), เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ›เบฐเบˆเบธเบšเบฑเบ™เปเบฅเบฐเบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบšเปเปˆเปเบกเปˆเบ™, เป€เบฅเบเบ–เบฒเบ™เบชเบดเบšเบซเบปเบ - เปเบฅเบฐเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”, เบงเบดเบ—เบตเบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบเบ™เบตเป‰. เบ›เบปเบเบเบฐเบ•เบด (เป€เบŠเบดเปˆเบ‡เบˆเบฐเบšเปเปˆเบ–เบทเบเบ›เบฐเบ•เบดเป€เบชเบ”เป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ) byte stream? เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบญเปˆเบฒเบ™เป€เบญเบเบฐเบชเบฒเบ™ (เปเบกเปˆเบ™เปเบฅเป‰เบง, เบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš schema เปƒเบ™เบฅเบธเป‰เบ™ JSON เบขเบนเปˆเปƒเบเป‰เป† - เปเบ•เปˆเบ™เบฑเป‰เบ™เบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบŠเบฑเบ”เป€เบˆเบ™เบเบงเปˆเบฒเบ™เบตเป‰).

เป€เบ›เบตเบ”เบซเบ™เป‰เบฒ เบเบฒเบ™เบˆเบฑเบ”เบฅเปเบฒเบ”เบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ–เบฒเบ™เบชเบญเบ‡ เปเบฅเบฐ dive เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบฅเบ magical เบ‚เบญเบ‡เป€เบซเบฑเบ”เปเบฅเบฐ discrete เบ„เบฐเบ™เบดเบ”เบชเบฒเบ”, เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš matan เปƒเบ™เบ›เบตเบ—เบต 4. เบ•เบปเบงเบญเบฑเบเบชเบญเบ™, เบ›เบฐเป€เบžเบ”, เบ„เบธเบ™เบ„เปˆเบฒ, เบ•เบปเบงเบ›เบฐเบชเบปเบก, เบ•เบปเบงเบ›เบฐเบชเบปเบกเบ—เบตเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”, เบฎเบนเบšเปเบšเบšเบ›เบปเบเบเบฐเบ•เบด, เบ›เบฐเป€เบžเบ”เบ›เบฐเบชเบปเบก, เบ›เบฐเป€เบžเบ”เป‚เบžเบฅเบตเป‚เบกเบŸเบดเบ... เปเบฅเบฐเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เปœเป‰เบฒเบ—เบณเบญเบดเบ”เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™! เบ•เปเปˆเป„เบ›เบฅเปเบ–เป‰เบฒเบ—เปˆเบฒเบ™ เบžเบฒเบชเบฒ TL, เป€เบŠเบดเปˆเบ‡เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบกเบตเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเปเบฅเบฐเบเบฒเบ™เบ•เบญเบšเป‚เบ•เป‰เป€เบฅเบฑเบเบ™เป‰เบญเบ, เบšเปเปˆเป„เบ”เป‰เปƒเบซเป‰เบ„เปเบฒเบ•เบญเบšเปƒเบ”เป†เบ•เปเปˆเบเบฑเบšเบเปเบฅเบฐเบ™เบตเบ—เบปเปˆเบงเป„เบ›เบซเบผเบฒเบ, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบœเปˆเบฒเบ™ retelling เบ‚เบญเบ‡เบ„เบฐเบ™เบดเบ”เบชเบฒเบ”เบ—เบตเปˆเปเบ›เบˆเบฒเบเบžเบฒเบชเบฒเบฅเบฑเบ”เป€เบŠเบเป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”เปƒเบ™เบญเบตเบเปเบ›เบ”เบเบฑเบ‡. เปœเป‰เบฒ!

เบœเบนเป‰เบญเปˆเบฒเบ™เบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบžเบฒเบชเบฒเบ—เบตเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”เปเบฅเบฐเบ›เบฐเป€เบžเบ”เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” inference เบˆเบฐ, เปเบ™เปˆเบ™เบญเบ™, เป€เบšเบดเปˆเบ‡เบžเบฒเบชเบฒเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเปƒเบ™เบžเบฒเบชเบฒเบ™เบตเป‰, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบˆเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบซเบผเบฒเบเบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบ, เปเบฅเบฐเบชเบฒเบกเบฒเบ”เป€เบงเบปเป‰เบฒเป„เบ”เป‰เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเบšเปเปˆเบšเปเปˆเบ”เบตเปƒเบ™เบซเบผเบฑเบเบเบฒเบ™. เบ‚เปเป‰โ€‹เบ„เบฑเบ”เบ„เป‰เบฒเบ™โ€‹เบ„เบท:

  • เปเบกเปˆเบ™เปเบฅเป‰เบง, เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบ เบชเบฝเบ‡เบ”เบต, เปเบ•เปˆเบญเบฐเบ™เบดเบˆเบฒ, เบ™เบฒเบ‡ เบšเปเปˆเบšเบฑเบ™เบฅเบธเป„เบ”เป‰
  • เบเบฒเบ™เบชเบถเบเบชเบฒเบขเบนเปˆเปƒเบ™เบกเบฐเบซเบฒเบงเบดเบ—เบฐเบเบฒเป„เบฅเบฅเบฑเบ”เป€เบŠเบเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เบšเบฑเบ™เบ”เบฒเบงเบดเบŠเบฒเบชเบฐเป€เบžเบฒเบฐเบ”เป‰เบฒเบ™เป„เบญเบ—เบต - เบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเบ„เบปเบ™เป„เบ”เป‰เบฎเบฝเบ™เบงเบดเบŠเบฒเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™
  • เบชเบธเบ”เบ—เป‰เบฒเบ, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™, เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™เปเบกเปˆเบ™ เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบŠเบธเบ”เบเปˆเบญเบเบ—เบตเปˆเบˆเปเบฒเบเบฑเบ”เบ‚เบญเบ‡เปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡ TL เบ—เบตเปˆเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเปเบกเปˆเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบเปˆเบฒเบง LeoNerd เปƒเบ™เบŠเปˆเบญเบ‡เบ—เบฒเบ‡ #perl เปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ FreeNode IRC, เบœเบนเป‰เบ—เบตเปˆเบžเบฐเบเบฒเบเบฒเบกเบ›เบฐเบ•เบดเบšเบฑเบ”เบ›เบฐเบ•เบนเบˆเบฒเบ Telegram เบซเบฒ Matrix (เบเบฒเบ™เปเบ›เบ„เปเบฒเบญเป‰เบฒเบ‡เบญเบตเบ‡เปเบกเปˆเบ™เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบˆเบฒเบเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ):

เบกเบฑเบ™เบฎเบนเป‰เบชเบถเบเบ„เบทเบเบฑเบšเบงเปˆเบฒเบšเบฒเบ‡เบ„เบปเบ™เป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เบžเบดเบกเบ—เบดเบ”เบชเบฐเบ”เบตเป€เบ›เบฑเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เบ•เบทเปˆเบ™เป€เบ•เบฑเป‰เบ™, เปเบฅเบฐเป€เบฅเบตเปˆเบกเบžเบฐเบเบฒเบเบฒเบกเบซเบผเบตเป‰เบ™เบเบฑเบšเบกเบฑเบ™, เบšเปเปˆเบชเบปเบ™เปƒเบˆเปเบ—เป‰เป†เบงเปˆเบฒเบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”.

เป€เบšเบดเปˆเบ‡เบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡, เบ–เป‰เบฒเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ”เป€เบ›เบปเปˆเบฒ (int, เบเบฒเบง, เปเบฅเบฐเบญเบทเปˆเบ™เป†) เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ›เบฐเบ–เบปเบกเบšเปเปˆเป„เบ”เป‰เบ•เบฑเป‰เบ‡เบ„เปเบฒเบ–เบฒเบก - เปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบžเบงเบเป€เบ‚เบปเบฒเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ - เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบซเป‰เบžเบฐเบเบฒเบเบฒเบกเป€เบญเบปเบฒเบกเบฒเบˆเบฒเบเบžเบงเบเบกเบฑเบ™. vector. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ‚เบšเบงเบ™, เบ–เป‰เบฒ เบซเบฒเบ เบ—เปˆเบฒเบ™ เป‚เบ— เบซเบฒ เบชเบดเปˆเบ‡ เบ—เบตเปˆ เป„เบ”เป‰ เบฎเบฑเบš เป‚เบ”เบ เบŠเบทเปˆ เบ—เบตเปˆ เป€เบซเบกเบฒเบฐ เบชเบปเบก เบ‚เบญเบ‡ เป€เบ‚เบปเบฒ เป€เบˆเบปเป‰เบฒ .

เปเบ•เปˆเบเปˆเบญเบ™

เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบชเบฑเป‰เบ™เป†เบ‚เบญเบ‡เบŠเบธเบ”เบเปˆเบญเบเบ‚เบญเบ‡ syntax 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 เบˆเบฒเบเบชเบฐเบ•เบฃเบดเบ‡เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ›เบปเบเบเบฐเบ•เบดเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ™เบตเป‰. เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™; เบ–เป‰เบฒเบžเบงเบเบกเบฑเบ™เบกเบตเบขเบนเปˆ, เบ›เบฐเป€เบžเบ”เบญเบฒเบ”เบˆเบฐเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ. เบ™เบตเป‰เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบเป€เบ—เบปเปˆเบฒเบ—เบฝเบกเบเบฑเบ™, เบŠเบทเปˆเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบœเบนเป‰เบเปเปˆเบชเป‰เบฒเบ‡เบ™เบตเป‰ - เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ›เบฐเป€เบžเบ”เบเปˆเบญเบ - เป€เบ›เบฑเบ™. เบœเบนเป‰เบŠเบฒเบเบ—เบตเปˆเบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบ‚เบงเบฒเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบเป€เบ—เบปเปˆเบฒเบเบฑเบš polymorphic - เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ›เบฐเป€เบžเบ”เบชเบฐเป€เบžเบฒเบฐเบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบชเบฒเบกเบฒเบ”เบเบปเบ‡เบเบฑเบšเบกเบฑเบ™.

เบ–เป‰เบฒเบ„เปเบฒเบ™เบดเบเบฒเบกเป€เบเบตเบ”เบ‚เบทเป‰เบ™เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบชเบฑเป‰เบ™ ---functions---, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ syntax เบˆเบฐเบเบฑเบ‡เบ„เบปเบ‡เบ„เบทเป€เบเบปเปˆเบฒ, เปเบ•เปˆเบ„เบงเบฒเบกเบซเบกเบฒเบเบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™: เบœเบนเป‰เบเปเปˆเบชเป‰เบฒเบ‡เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆ RPC, เบ—เบปเปˆเบ‡เบ™เบฒเบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ (เบ”เบต, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบกเบฑเบ™เบˆเบฐเบเบฑเบ‡เบ„เบปเบ‡เป€เบ›เบฑเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ”เบฝเบงเบเบฑเบ™, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰. , เบ™เบตเป‰เบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบซเบกเบฒเบเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบกเบญเบšเบซเบกเบฒเบ), เปเบฅเบฐ "เบ›เบฐเป€เบžเบ” polymorphic" - เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฑเบšเบ„เบทเบ™เบกเบฒ. เบ„เบงเบฒเบกเบˆเบดเบ‡, เบกเบฑเบ™เบˆเบฐเบเบฑเบ‡เบ„เบปเบ‡เป€เบ›เบฑเบ™ polymorphic - เบžเบฝเบ‡เปเบ•เปˆเบเปเบฒเบ™เบปเบ”เบขเบนเปˆเปƒเบ™เบžเบฒเบ ---types---, เปเบ•เปˆเบœเบนเป‰เบเปเปˆเบชเป‰เบฒเบ‡เบ™เบตเป‰เบˆเบฐ "เบšเปเปˆเบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ". overloading เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเป‚เบ”เบเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, i.e. เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เบซเบผเบฒเบเบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ”เบฝเบงเบเบฑเบ™เปเบ•เปˆเบฅเบฒเบเป€เบŠเบฑเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบš C ++, เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เบขเบนเปˆเปƒเบ™ TL.

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡ "constructor" เปเบฅเบฐ "polymorphic" เบ–เป‰เบฒเบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™ OOP? เปเบฅเป‰เบง, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบกเบฑเบ™เบˆเบฐเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เปƒเบ”เบœเบนเป‰เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบˆเบฐเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เปƒเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚ OOP - เบ›เบฐเป€เบžเบ” polymorphic เป€เบ›เบฑเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™, เปเบฅเบฐเบœเบนเป‰เบเปเปˆเบชเป‰เบฒเบ‡เปเบกเปˆเบ™เบŠเบฑเป‰เบ™เบฎเบฝเบ™เป‚เบ”เบเบเบปเบ‡เบ‚เบญเบ‡เบกเบฑเบ™, เปเบฅเบฐ. final เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡เบžเบฒเบชเบฒเบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เปเบ™เปˆเบ™เบญเบ™, เบ—เบตเปˆเบ™เบตเป‰เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™ เบ„เบงเบฒเบกเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™ เบ”เป‰เบงเบเบงเบดเบ—เบตเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เป€เบเบตเบ™เบˆเบดเบ‡เปƒเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก OO. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™, เบšเปเปˆเบกเบตเบงเบดเบ—เบตเบเบฒเบ™ (เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เปƒเบ™เบซเบปเบงเบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบกเบตเบขเบนเปˆ, เปเบ•เปˆเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™) - เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ„เบดเบ”เป€เบ–เบดเบ‡ constructor เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบˆเบฒเบ. เป€เบŠเบดเปˆเบ‡ เบเปเบฒเบฅเบฑเบ‡เบเปเปˆเบชเป‰เบฒเบ‡ เบžเบดเบกเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบญเปˆเบฒเบ™ byte stream.

เบ™เบตเป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปเบ™เบงเปƒเบ”? deserializer, เป€เบŠเบดเปˆเบ‡เบชเบฐเป€เบซเบกเบตเบญเปˆเบฒเบ™ 4 bytes, เป€เบซเบฑเบ™เบ„เปˆเบฒ 0xcrc32 - เปเบฅเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบ•เปเปˆเป„เบ› field1 เบเบฑเบšโ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹ int, i.e. เบญเปˆเบฒเบ™ 4 bytes เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡, เปƒเบ™เบ™เบตเป‰เบžเบฒเบเบชเบฐเบซเบ™เบฒเบก overlying เบเบฑเบšเบ›เบฐเป€เบžเบ” PolymorType เบญเปˆเบฒเบ™. เป€เบซเบฑเบ™ 0x2crc32 เปเบฅเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบกเบตเบชเบญเบ‡เบ‚เบปเบ‡เป€เบ‚เบ”เบ•เบทเปˆเบกเบญเบตเบ, เบ—เปเบฒเบญเบดเบ” long, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบญเปˆเบฒเบ™ 8 bytes. เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบ›เบฐเป€เบžเบ”เบชเบฐเบฅเบฑเบšเบชเบฑเบšเบŠเป‰เบญเบ™, เป€เบŠเบดเปˆเบ‡เบ–เบทเบ deserialized เปƒเบ™เบ—เบฒเบ‡เบ”เบฝเบงเบเบฑเบ™. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡, Type3 เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฐเบเบฒเบ”เปƒเบ™เบงเบปเบ‡เบˆเบญเบ™เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบชเบญเบ‡ constructors, เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบˆเบฐเบ•เป‰เบญเบ‡เป„เบ”เป‰เบžเบปเบš 0x12abcd34, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบญเปˆเบฒเบ™ 4 bytes เป€เบžเบตเปˆเบกเป€เบ•เบตเบก int, เบซเบผเบท 0x6789cdef, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบˆเบฐเบšเปเปˆเบกเบตเบซเบเบฑเบ‡. เบชเบดเปˆเบ‡เบญเบทเปˆเบ™ - เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ–เบดเป‰เบกเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เบญเปˆเบฒเบ™ 4 bytes int เบ—เบปเปˆเบ‡เบ™เบฒ field_c ะฒ constructorTwo เปเบฅเบฐเบ”เป‰เบงเบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบชเปเบฒเป€เบฅเบฑเบ”เบเบฒเบ™เบญเปˆเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ PolymorType.

เบชเบธเบ”เบ—เป‰เบฒเบ, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ–เบทเบเบˆเบฑเบš 0xdeadcrc เบเบฒเบ™ constructorThree, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ. เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™ bit_flags_of_what_really_present เบเบฑเบšโ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹ # - เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ™เบตเป‰เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบ™เบฒเบกเปเบเบ‡เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ” nat, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ "เบ•เบปเบงเป€เบฅเบเบ—เปเบฒเบกเบฐเบŠเบฒเบ”". เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, unsigned int เปเบกเปˆเบ™, เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เป€เบ›เบฑเบ™เบเปเบฅเบฐเบ™เบตเบ”เบฝเบงเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เป€เบŠเบฑเบ™เบขเบนเปˆเปƒเบ™เบงเบปเบ‡เบˆเบญเบ™เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเบกเบตเป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบเบ„เปเบฒเบ–เบฒเบก, เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบ™เบตเป‰ - เบกเบฑเบ™เบˆเบฐเบกเบตเบขเบนเปˆเปƒเบ™เบชเบฒเบเบžเบฝเบ‡เปเบ•เปˆเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบšเบดเบ”เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เบขเบนเปˆเปƒเบ™เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบ—เบตเปˆเบญเป‰เบฒเบ‡เป€เบ–เบดเบ‡ (เบ›เบฐเบกเบฒเบ™เบ„เบทเบเบฑเบšเบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ ternary). เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบซเป‰เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบšเบดเบ”เบ™เบตเป‰เบ–เบทเบเบ•เบฑเป‰เบ‡, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบญเปˆเบฒเบ™เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเป€เบŠเบฑเปˆเบ™ Type, เป€เบŠเบดเปˆเบ‡เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบต 2 constructors. เบญเบฑเบ™เปœเบถเปˆเบ‡เปเบกเปˆเบ™เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ (เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบ•เบปเบงเบฅเบฐเบšเบธเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™), เบญเบตเบเบญเบฑเบ™เปœเบถเปˆเบ‡เบกเบตเบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™ ids เบเบฑเบšโ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹ ids:Vector<long>.

เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ„เบดเบ”เบงเปˆเบฒเบ—เบฑเบ‡เปเบกเปˆเปเบšเบšเปเบฅเบฐเบ—เบปเปˆเบงเป„เบ›เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ pros เบซเบผเบท Java. เปเบ•เปˆเบšเปเปˆเบกเบต. เป€เบเบทเบญเบšโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”. เบ™เบตเป‰ เบ”เบฝเบง เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบงเบปเบ‡โ€‹เป€เบฅเบฑเบšโ€‹เบกเบธเบกโ€‹เปƒเบ™โ€‹เบงเบปเบ‡โ€‹เบˆเบญเบ™โ€‹เบ—เบตเปˆโ€‹เปเบ—เป‰โ€‹เบˆเบดเบ‡โ€‹, เปเบฅเบฐโ€‹เบกเบฑเบ™โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบชเปเบฒโ€‹เบฅเบฑเบš Vectorโ€‹. เปƒเบ™เบเบฐเปเบช byte, เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบˆเบฐเป€เบ›เบฑเบ™ 4 CRC32 bytes เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ” Vector เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡, เบชเบฐเป€เบซเบกเบตเบ”เบฝเบงเบเบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ 4 bytes - เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบš array, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป€เบญเบ‡.

เบ•เบทเปˆเบกเบ™เบตเป‰เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒ serialization เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบชเบฐเป€เบซเบกเบตเปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡ 4 bytes, เบ—เบธเบเบ›เบฐเป€เบžเบ”เปเบกเปˆเบ™เบเบฒเบ™เบ„เบนเบ™เบ‚เบญเบ‡เบกเบฑเบ™ - เบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปเบกเปˆเบ™เบเบฑเบ‡เบญเบฐเบ—เบดเบšเบฒเบ. bytes ะธ string เบกเบต serialization เบ„เบนเปˆเบกเบทเบ‚เบญเบ‡เบ„เบงเบฒเบกเบเบฒเบงเปเบฅเบฐเบเบฒเบ™เบˆเบฑเบ”เบ•เปเบฒเปเบซเบ™เปˆเบ‡เบ™เบตเป‰เป‚เบ”เบ 4 - เบ”เบต, เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ›เบปเบเบเบฐเบ•เบดเปเบฅเบฐเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš? เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ TL เป„เบ”เป‰เบ–เบทเบเบญเป‰เบฒเบ‡เบงเปˆเบฒเป€เบ›เบฑเบ™ serialization binary เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ•เบดเบœเบปเบ™, เบเบฑเบš hell เบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ, เบ”เป‰เบงเบเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบžเบฝเบ‡เปเบ•เปˆเบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เปƒเบ”, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ„เปˆเบฒ Boolean เปเบฅเบฐเบชเบฒเบเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ”เบฝเบงเป€เบ–เบดเบ‡ 4 bytes, JSON เบเบฑเบ‡เบˆเบฐเบซเบ™เบฒเปเบซเบ™เป‰เบ™เบซเบผเบฒเบเบšเป? เป€เบšเบดเปˆเบ‡, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบŠเปˆเบญเบ‡เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบชเบฒเบกเบฒเบ”เบ‚เป‰เบฒเบกเป„เบ”เป‰เป‚เบ”เบเบ—เบธเบ‡เบ™เป‰เบญเบ, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ”เบต, เปเบฅเบฐเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบชเบฒเบกเบฒเบ”เบ‚เบฐเบซเบเบฒเบเป„เบ”เป‰เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบˆเบถเปˆเบ‡เบšเปเปˆเป€เบžเบตเปˆเบกเบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบซเบกเปˆเปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เบเปเปˆเบชเป‰เบฒเบ‡เปƒเบ™เบžเบฒเบเบซเบฅเบฑเบ‡?..

เปเบ•เปˆเบšเปเปˆ, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบญเปˆเบฒเบ™เบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบชเบฑเป‰เบ™เป†เบ‚เบญเบ‡เบ‚เป‰เบญเบ, เปเบ•เปˆเป€เบญเบเบฐเบชเบฒเบ™เป€เบ•เบฑเบก, เปเบฅเบฐเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, CRC32 เบ‚เบญเบ‡เบœเบนเป‰เบเปเปˆเบชเป‰เบฒเบ‡เบ–เบทเบเบ„เบดเบ”เป„เบฅเปˆเบ•เบฒเบกเป€เบชเบฑเป‰เบ™เบ›เบปเบเบเบฐเบ•เบดเบ‚เบญเบ‡เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™ (เป€เบญเบปเบฒเบžเบทเป‰เบ™เบ—เบตเปˆเบซเบงเปˆเบฒเบ‡เป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เปเบฅเบฐเบญเบทเปˆเบ™เป†) - เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ–เป‰เบฒเบกเบตเบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบซเบกเปˆ, เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ›เบฐเป€เบžเบ”เบˆเบฐเบ›เปˆเบฝเบ™เปเบ›เบ‡, เปเบฅเบฐเบ”เป‰เบงเบเป€เบซเบ”เบ™เบตเป‰ CRC32 เบ‚เบญเบ‡เบกเบฑเบ™เปเบฅเบฐ. , เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, serialization. เปเบฅเบฐเบฅเบนเบเบ„เป‰เบฒเป€เบเบปเปˆเบฒเบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบฅเบฒเบงเป„เบ”เป‰เบฎเบฑเบšเบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบ—เบตเปˆเบกเบตเบ—เบธเบ‡เปƒเบซเบกเปˆ, เปเบฅเบฐเบฅเบฒเบงเบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒเบ•เปเปˆเป„เบ›?

เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เปƒเบซเป‰เป€เบฎเบปเบฒเบˆเบทเปˆ CRC32, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™ เบŸเบฑเบ‡เบŠเบฑเบ™ hash เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบงเปˆเบฒเบ›เบฐเป€เบžเบ”เปƒเบ”เบˆเบฐเบ–เบทเบ (de)serialized. เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบ›เบฐเป€เบŠเบตเบ™เบเบฑเบšเบšเบฑเบ™เบซเบฒเบเบฒเบ™เบ›เบฐเบ—เบฐเบเบฑเบ™ - เปเบฅเบฐเบšเปเปˆ, เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบšเปเปˆเปเบกเปˆเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™ 232, เปเบ•เปˆเบซเบผเบฒเบเบเบงเปˆเบฒเป€เบเบปเปˆเบฒ. เปƒเบœเบˆเบทเปˆเป„เบ”เป‰เบงเปˆเบฒ CRC32 เบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเป€เบžเบทเปˆเบญเบเบงเบ”เบžเบปเบš (เปเบฅเบฐเปเบเป‰เป„เบ‚) เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™, เปเบฅเบฐเบ›เบฑเบšเบ›เบธเบ‡เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเป€เบชเบเบซเบฒเบเบ‚เบญเบ‡เบ„เบปเบ™เบญเบทเปˆเบ™? เบ•เบปเบงเบขเปˆเบฒเบ‡, เบกเบฑเบ™เบšเปเปˆเบชเบปเบ™เปƒเบˆเบเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡ bytes เบ„เบทเบ™เปƒเปเปˆ: เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆ CRC32 เบˆเบฒเบเบชเบญเบ‡เปเบ–เบง, เปƒเบ™เบ—เบตเบชเบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™ 4 bytes เบ—เปเบฒเบญเบดเบ”เบเบฑเบš 4 bytes เบ•เปเปˆเป„เบ› - เบกเบฑเบ™เบˆเบฐเบ„เบทเบเบฑเบ™. เป€เบกเบทเปˆเบญเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฒเบเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบฅเบฒเบ•เบดเบ™ (เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบงเบฑเบเบ•เบญเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ), เปเบฅเบฐเบŠเบทเปˆเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เปเบšเบšเบชเบธเปˆเบกเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ.

เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบœเบนเป‰เบ—เบตเปˆเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบตเบซเบเบฑเบ‡เปเบ”เปˆ? เปเบ—เป‰ CRC32? เปœเบถเปˆเบ‡เปƒเบ™เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ•เบปเป‰เบ™เป† (เปเบกเป‰เปเบ•เปˆเบเปˆเบญเบ™ Waltman) เบกเบตเบŸเบฑเบ‡เบŠเบฑเบ™ hash เบ—เบตเปˆเบ„เบนเบ™เปเบ•เปˆเบฅเบฐเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ”เป‰เบงเบเบ•เบปเบงเป€เบฅเบ 239, เบชเบฐเบ™เบฑเป‰เบ™เบ„เบปเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบฎเบฑเบเปเบžเบ‡เบซเบผเบฒเบ, ha ha!

เบชเบธเบ”เบ—เป‰เบฒเบ, เป‚เบญเป€เบ„, เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบœเบนเป‰เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเบกเบตเบ›เบฐเป€เบžเบ”เบžเบฒเบเบชเบฐเบซเบ™เบฒเบก Vector<int> ะธ Vector<PolymorType> เบˆเบฐเบกเบต CRC32 เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบญเบญเบ™เป„เบฅเบ™เปŒ? เปเบฅเบฐเบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบต, เบ™เบตเป‰เบเบฒเบเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”? เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบœเปˆเบฒเบ™ array เบ‚เบญเบ‡เบชเบดเบšเบžเบฑเบ™เบ•เบปเบงเป€เบฅเบ, เบ”เบตเบเบฑเบš Vector<int> เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบˆเบฐเปเบˆเป‰เบ‡, เบ„เบงเบฒเบกเบเบฒเบงเปเบฅเบฐเบญเบตเบ 40000 bytes. เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบงเปˆเบฒเบ™เบตเป‰ Vector<Type2>, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบžเบฒเบเบชเบฐเบซเบ™เบฒเบก int เปเบฅเบฐเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ›เบฐเป€เบžเบ”เบ”เบฝเบง - เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบŠเป‰เปเบฒ 10000xabcdef0 34 เป€เบ—เบทเปˆเบญเปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ 4 bytes? int, เบซเบผเบทเบžเบฒเบชเบฒเปเบกเปˆเบ™เบชเบฒเบกเบฒเบ” INDEPEND เบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเบˆเบฒเบเบœเบนเป‰เบเปเปˆเบชเป‰เบฒเบ‡ fixedVec เปเบฅเบฐเปเบ—เบ™เบ—เบตเปˆเบˆเบฐ 80000 bytes, เป‚เบญเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบžเบฝเบ‡เปเบ•เปˆ 40000?

เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒเบ–เบฒเบกเบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบตเบ—เบตเปˆเบšเปเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”เป€เบฅเบตเบ - เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เบเบธเปˆเบก, เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบกเบต id, เบŠเบทเปˆ, เบ™เบฒเบกเบชเบฐเบเบธเบ™ - เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป‚เบญเบ™เบœเปˆเบฒเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบกเบทเบ–เบทเบชเบฒเบกเบฒเบ”เบกเบตเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™. เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบ›เบฐเบชเบดเบ”เบ—เบดเบœเบปเบ™เบ‚เบญเบ‡ Telegram serialization เบ—เบตเปˆเบ–เบทเบเป‚เบ„เบชเบฐเบ™เบฒเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒ.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™โ€ฆ

vector, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเป€เบ„เบตเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒ

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเปเบฅเปˆเบ™เบœเปˆเบฒเบ™เบซเบ™เป‰เบฒเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบ›เบฐเบชเบปเบกเปเบฅเบฐเบญเบทเปˆเบ™เป†, เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบงเปˆเบฒ vector (เปเบฅเบฐเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡ matrix) เบเปเบฒเบฅเบฑเบ‡เบžเบฐเบเบฒเบเบฒเบกเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบœเปˆเบฒเบ™ tuples เบ‚เบญเบ‡เบซเบผเบฒเบเป†เปเบœเปˆเบ™. เปเบ•เปˆเปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบžเบงเบเป€เบ‚เบปเบฒเบฅเบทเบก, เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™เบ‚เป‰เบฒเบกเป„เบ›, เปเบฅเบฐเบ„เปเบฒเบ™เบดเบเบฒเบกเบ‚เบญเบ‡ vector เปเบกเปˆเบ™เปƒเบซเป‰เบ‡เปˆเบฒเบเบ”เบฒเบ, เป€เบŠเบดเปˆเบ‡เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบœเบนเบเบกเบฑเบ”เบเบฑเบšเบ›เบฐเป€เบžเบ”เปƒเบ”เบซเบ™เบถเปˆเบ‡. เปเบกเปˆเบ™เบซเบเบฑเบ‡? เปƒเบ™เบžเบฒเบชเบฒ เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เปเบเบผเบก, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”, เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เปเบšเบš recursively - compiler เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบœเบปเบ™เบ‚เบตเป‰เบเบฝเบ”เบ‚เบญเบ‡เบกเบฑเบ™เบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเปเบฅเบฐเป€เบฎเบฑเบ”เบ—เบธเบเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡. เปƒเบ™เบžเบฒเบชเบฒ serialization เบ‚เปเป‰เบกเบนเบ™ เบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบกเปˆเบ™เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš: เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบžเบฝเบ‡เปเบ•เปˆ เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ, i.e. เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบชเบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบš - เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เปเป‰เบกเบนเบ™, เบญเบฑเบ™เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ”เบฝเบงเบเบฑเบ™เบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบซเบผเบทเบžเบทเป‰เบ™เบ—เบตเปˆเบซเบงเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบซเบฒเบ‡ (pack. (cons) เปƒเบ™ Lisp). เปเบ•เปˆเบ™เบตเป‰เปเบ™เปˆเบ™เบญเบ™เบˆเบฐเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบต เปเบ•เปˆเบฅเบฐเบ„เบปเบ™ เบญเบปเบ‡เบ›เบฐเบเบญเบšเปƒเบŠเป‰ 4 bytes เป€เบžเบตเปˆเบกเป€เบ•เบตเบก (CRC32 เปƒเบ™เบเปเบฅเบฐเบ™เบตเปƒเบ™ TL) เป€เบžเบทเปˆเบญเบญเบฐเบ—เบดเบšเบฒเบเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบกเบฑเบ™. array เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบญเบฐเบ—เบดเบšเบฒเบเป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ เบ‚เบฐเบซเบ™เบฒเบ”เบ„เบปเบ‡เบ—เบตเปˆ, เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡ array เบ‚เบญเบ‡เบ„เบงเบฒเบกเบเบฒเบงเบ—เบตเปˆเบšเปเปˆเบฎเบนเป‰เบˆเบฑเบเบฅเปˆเบงเบ‡เบซเบ™เป‰เบฒ, เบžเบงเบเป€เบฎเบปเบฒเปเบเบเบญเบญเบ.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ TL เบšเปเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบญเบญเบ vector, เบกเบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบขเบนเปˆเบ”เป‰เบฒเบ™เบ‚เป‰เบฒเบ‡. เปƒเบ™เบ—เบตเปˆเบชเบธเบ”เป€เบญเบเบฐเบชเบฒเบ™เบเปˆเบฒเบงเบงเปˆเบฒ:

Serialization เปƒเบŠเป‰ constructor เบ”เบฝเบงเบเบฑเบ™ "vector" (const 0x1cb5c415 = crc32("vector t:Type # [ t ] = Vector t") เบ—เบตเปˆเบšเปเปˆเบ‚เบถเป‰เบ™เบเบฑเบšเบ„เปˆเบฒเบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ” t.

เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบ t เบšเปเปˆเป„เบ”เป‰เบกเบตเบชเปˆเบงเบ™เบฎเปˆเบงเบกเปƒเบ™ serialization เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบกเบฑเบ™เปเบกเปˆเบ™เบกเบฒเบˆเบฒเบเบ›เบฐเป€เบžเบ”เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš (เบฎเบนเป‰เบˆเบฑเบเบชเบฐเป€เบซเบกเบตเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐ deserialization).

เป€เบšเบดเปˆเบ‡เบขเปˆเบฒเบ‡เปƒเบเป‰เบŠเบดเบ”: vector {t:Type} # [ t ] = Vector t - เปเบ•เปˆ เบšเปเปˆเบกเบตเบšเปˆเบญเบ™เปƒเบ” เบ„เปเบฒเบ™เบดเบเบฒเบกเบ™เบตเป‰เป€เบญเบ‡เบšเปเปˆเป„เบ”เป‰เบšเบญเบเบงเปˆเบฒเบ•เบปเบงเป€เบฅเบเบ—เปเบฒเบญเบดเบ”เบ•เป‰เบญเบ‡เป€เบ—เบปเปˆเบฒเบเบฑเบšเบ„เบงเบฒเบกเบเบฒเบงเบ‚เบญเบ‡ vector! เปเบฅเบฐเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบกเบฒเบˆเบฒเบเบ—เบธเบเบšเปˆเบญเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบกเบญเบšเปƒเบซเป‰เบ—เบตเปˆเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฎเบฑเบเบชเบฒเบขเบนเปˆเปƒเบ™เปƒเบˆเปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ”เป‰เบงเบเบกเบทเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบขเบนเปˆเบšเปˆเบญเบ™เบญเบทเปˆเบ™, เป€เบญเบเบฐเบชเบฒเบ™เบเบฑเบ‡เบšเบญเบเบขเปˆเบฒเบ‡เบŠเบทเปˆเบชเบฑเบ”เบงเปˆเบฒเบ›เบฐเป€เบžเบ”เบšเปเปˆเปเบกเปˆเบ™เบ•เบปเบงเบˆเบดเบ‡:

Vector t polymorphic pseudotype เปเบกเปˆเบ™ "เบ›เบฐเป€เบžเบ”" เบ—เบตเปˆเบกเบตเบกเบนเบ™เบ„เปˆเบฒเป€เบ›เบฑเบ™เบฅเปเบฒเบ”เบฑเบšเบ‚เบญเบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ” t, เบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™เบเปˆเบญเบ‡เบซเบผเบทเป€เบ›เบปเปˆเบฒ.

... เปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เบชเบธเบกเปƒเบชเปˆเบกเบฑเบ™. เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™, เป€เบกเบทเปˆเบญเบเบ‚เบญเบ‡เบเบฒเบ™ wading เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™ stretching เบ‚เบญเบ‡เบ„เบฐเบ™เบดเบ”เบชเบฒเบ” (เบšเบฒเบ‡เบ—เบตเบญเบฒเบ”เบฎเบนเป‰เบˆเบฑเบเบเบฑเบšเบ—เปˆเบฒเบ™เบˆเบฒเบเบซเบผเบฑเบเบชเบนเบ”เบงเบดเบ—เบฐเบเบฒเป„เบฅ), เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบˆเบฐเบเบญเบกเปเบžเป‰เปเบฅเบฐเบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบกเบฑเบ™เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบ„เบงเบฒเบกเบ›เบฐเบ—เบฑเบšเปƒเบˆเบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเบขเบนเปˆเปƒเบ™เบซเบปเบงเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบกเปˆเบ™เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบฎเป‰เบฒเบเปเบฎเบ‡. เบ„เบฐเบ™เบดเบ”เบชเบฒเบ”เบขเบนเปˆเปƒเบ™เบซเบผเบฑเบ, เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบ invented เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เป‚เบ”เบ Cool People (เบ™เบฑเบเบ„เบฐเบ™เบดเบ”เบชเบฒเบ”เบชเบญเบ‡เบ„เบปเบ™ - เบœเบนเป‰เบŠเบฐเบ™เบฐ ACM), เปเบฅเบฐเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเปƒเบœ. เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ - เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™ off - เป„เบ”เป‰เบšเบฑเบ™เบฅเบธเบœเบปเบ™.

เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบเปˆเบฝเบงเบเบฑเบšเบˆเปเบฒเบ™เบงเบ™. เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบ•เบทเบญเบ™เบ—เปˆเบฒเบ™เบงเปˆเบฒ # เบกเบฑเบ™เป€เบ›เบฑเบ™เบ„เปเบฒเบชเบฑเบšเบ„เป‰เบฒเบเบ„เบท nat, เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ—เปเบฒโ€‹เบกเบฐโ€‹เบŠเบฒเบ”โ€‹:

เบกเบตเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบฐเป€เบžเบ” (type-expr) เปเบฅเบฐเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบ•เบปเบงเป€เบฅเบ (nat-expr). เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เบงเบดเบ—เบตเบเบฒเบ™เบ”เบฝเบงเบเบฑเบ™.

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

เปเบ•เปˆเปƒเบ™เป„เบงเบเบฒเบเบญเบ™เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™, i.e. เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ™เบตเป‰เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบˆเบปเบ”เบˆเปเบฒเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ”เป‰เบงเบเบกเบท.

เปเบฅเป‰เบง, เปเบกเปˆเบ™เปเบฅเป‰เบง, เบ›เบฐเป€เบžเบ”เปเบกเปˆเปเบšเบš (vector<int>, vector<User>) เบกเบตเบ•เบปเบงเบฅเบฐเบšเบธเบ—เบปเปˆเบงเป„เบ› (#1cb5c415), i.e. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฎเบนเป‰เบงเปˆเบฒเบเบฒเบ™เป‚เบ—เบ–เบทเบเบ›เบฐเบเบฒเบ”เป€เบ›เบฑเบ™

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

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบšเปเปˆเป„เบ”เป‰เบฅเปเบ–เป‰เบฒเบžเบฝเบ‡เปเบ•เปˆ vector, เปเบ•เปˆ vector เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰. เบŠเบฑเบ”เป€เบˆเบ™เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบ„เบงเบ™ เบฅเปเบ–เป‰เบฒ - เปƒเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡, เบ—เบธเบเป†เบญเบปเบ‡เบ›เบฐเบเบญเบš, เบ–เป‰เบฒเบšเปเปˆเปเบกเปˆเบ™เบ›เบฐเป€เบžเบ”เป€เบ›เบปเปˆเบฒ, เบˆเบฐเบกเบตเบ•เบปเบงเบชเป‰เบฒเบ‡, เปเบฅเบฐเปƒเบ™เบ—เบฒเบ‡เบ—เบตเปˆเบ”เบตเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเบงเบ”เป€เบšเบดเปˆเบ‡ - เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบ–เบทเบเบชเบปเปˆเบ‡เบเบฑเบšเบ—เบธเบเป†เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡ vector เบ™เบตเป‰. เบ›เบฐเป€เบžเบ”เบ™เบฑเป‰เบ™? เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ PHP, เปƒเบ™ array เบชเบฒเบกเบฒเบ”เบ›เบฐเบเบญเบšเบกเบตเบ›เบฐเป€เบžเบ”เบ•เปˆเบฒเบ‡เป†เปƒเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™?

เปƒเบ™เบˆเบธเบ”เบ™เบตเป‰, เบ—เปˆเบฒเบ™เป€เบฅเบตเปˆเบกเบ„เบดเบ”เบงเปˆเบฒ - เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบ›เบฑเบ™ TL เบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เบšเป? เบšเบฒเบ‡เบ—เบตเบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบฎเปˆเบฒเบ‡เบเบฒเบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰ serializer เบ‚เบญเบ‡เบกเบฐเบ™เบธเบ”, protobuf เบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบกเบตเปเบฅเป‰เบง? เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบ—เบดเบ”เบชเบฐเบ”เบต, เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”.

เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” TL เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเปƒเบ™เบฅเบฐเบซเบฑเบ”

TL เป€เบเบตเบ”เบขเบนเปˆเปƒเบ™เบ„เบงเบฒเบกเป€เบฅเบดเบเบ‚เบญเบ‡ VKontakte เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบกเบตเป€เบซเบ”เบเบฒเบ™เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบชเบฝเบ‡เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ‚เบฒเบเบฎเบธเป‰เบ™เบ‚เบญเบ‡ Durov เปเบฅเบฐ (เปเบ™เปˆเบ™เบญเบ™), เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡ Telegram เป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เปเบฅเบฐเปƒเบ™เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ” เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ” เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒ crutches เบ•เบฐเบซเบฅเบปเบเบซเบผเบฒเบ. เปเบฅเบฐเบžเบฒเบชเบฒเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเบซเบผเบฒเบเบเปˆเบงเบฒเบกเบฑเบ™เบขเบนเปˆเปƒเบ™ Telegram. เบ•เบปเบงเบขเปˆเบฒเบ‡, hashes เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™ (เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเป€เบ›เบฑเบ™ pseudotype เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ (เบ„เป‰เบฒเบเบ„เบท vector) เบ—เบตเปˆเบกเบตเบžเบถเบ”เบ•เบดเบเปเบฒ deviant). เบซเบผเบท

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

เปเบ•เปˆเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ, เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบชเบปเบกเบšเบนเบ™, เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฒเบก, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เป€เบงเบปเป‰เบฒ, evolution เบ‚เบญเบ‡ Giant เบ‚เบญเบ‡เบ„เบงเบฒเบกเบ„เบดเบ”.

#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 เป€เบ›เบฑเบ™ vector เบ‚เบญเบ‡ int - เบ›เบฐเป€เบžเบ”เบ„เบนเปˆ. เปƒเบ™ C++ เบกเบฑเบ™โ€‹เบˆเบฐโ€‹เป€เบšเบดเปˆเบ‡โ€‹เบšเบฒเบ‡โ€‹เบชเบดเปˆเบ‡โ€‹เบšเบฒเบ‡โ€‹เบขเปˆเบฒเบ‡โ€‹เป€เบŠเบฑเปˆเบ™โ€‹เบ™เบตเป‰โ€‹:

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

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, alpha - เบ„เปเบฒเบชเปเบฒเบ„เบฑเบ™! เปเบ•เปˆเบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™ C ++ เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™ T, เปเบ•เปˆเบ—เปˆเบฒเบ™เบ„เบงเบ™เบ‚เบฝเบ™ alpha, beta ... เปเบ•เปˆเบšเปเปˆเบกเบตเบซเบผเบฒเบเบเปˆเบงเบฒ 8 เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆ fantasy เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡. เป€เบšเบดเปˆเบ‡โ€‹เบ„เบทโ€‹เบงเปˆเบฒโ€‹เบ„เบฑเป‰เบ‡โ€‹เปœเบถเปˆเบ‡โ€‹เบขเบนเปˆโ€‹เบ—เบตเปˆโ€‹เป€เบกเบทเบญเบ‡ St.

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

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

เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบžเบดเบกเป€เบœเบตเบเปเบœเปˆเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡ TL "เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›". เบ‚เปเปƒเบซเป‰เบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบฅเบนเบเบ„เป‰เบฒ Telegram เป€เบญเบ‡.

เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เบเบฑเบš Vasilyโ€‹:

Vasily, [09.10.18 17:07] เบ—เบตเปˆเบชเบธเบ”, เบเบปเป‰เบ™เปเบกเปˆเบ™เบฎเป‰เบญเบ™เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบชเป‰เบฒเบ‡เบŠเปเปˆเบ‚เบญเบ‡ abstractions, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ hammered bolt เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เปเบฅเบฐเบเบงเบกเป€เบญเบปเบฒเป€เบ„เบทเปˆเบญเบ‡เบเปเบฒเป€เบ™เบตเบ”เบฅเบฐเบซเบฑเบ”เบ”เป‰เบงเบเป„เบกเป‰เบ„เปˆเปเบฒ.
เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ—เปเบฒเบญเบดเบ”เบˆเบฒเบ dock pilot.jpg
เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบˆเบฒเบเบฅเบฐเบซเบฑเบ” dzhekichan.webp

เปเบ™เปˆเบ™เบญเบ™, เบˆเบฒเบเบ„เบปเบ™เบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบš algorithms เปเบฅเบฐเบ„เบฐเบ™เบดเบ”เบชเบฒเบ”, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ„เบฒเบ”เบซเบงเบฑเบ‡เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเป„เบ”เป‰เบญเปˆเบฒเบ™ Aho, Ullmann, เปเบฅเบฐเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ™เบญเบธเบ”เบชเบฒเบซเบฐเบเปเบฒเบซเบฅเบฒเบเบชเบดเบšเบ›เบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เบ•เบปเบงเบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™ DSL เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เปเบกเปˆเบ™เบšเป?..

เป‚เบ”เบเบœเบนเป‰เบ‚เบฝเบ™ telegram-cli เปเบกเปˆเบ™ Vitaly Valtman, เบ•เบฒเบกเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเป„เบ”เป‰เบˆเบฒเบเบเบฒเบ™เบ›เบฐเบเบปเบ”เบ•เบปเบงเบ‚เบญเบ‡เบฎเบนเบšเปเบšเบš TLO เบขเบนเปˆเบ™เบญเบเบ‚เบญเบšเป€เบ‚เบ” (cli), เบชเบฐเบกเบฒเบŠเบดเบเบ‚เบญเบ‡เบ—เบตเบกเบ‡เบฒเบ™ - เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเปเบฒเบฅเบฑเบš TL parsing เป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เบชเบฑเบ™. เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เบ„เบงเบฒเบกเบ›เบฐเบ—เบฑเบšเปƒเบˆเบ‚เบญเบ‡เบ™เบฒเบ‡เปเบกเปˆเบ™เบซเบเบฑเบ‡ TL parser? ..

16.12 04:18 Vasily: เบ‚เป‰เบญเบเบ„เบดเบ”เบงเปˆเบฒเบšเบฒเบ‡เบ„เบปเบ™เบšเปเปˆเป„เบ”เป‰เบชเบญเบ™ lex+yacc
16.12 04:18 Vasily: เบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เบญเบฐเบ—เบดเบšเบฒเบเป„เบ”เป‰
16.12 04:18 Vasily: เบ”เบต, เบซเบผเบทเบžเบงเบเป€เบ‚เบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ„เปˆเบฒเบˆเป‰เบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบชเบฒเบเปƒเบ™ VK.
16.12 04:19 Vasily: 3k+ เบชเบฒเบเปเบฅเบฐเบญเบทเปˆเบ™เป†.<censored> เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบ•เบปเบงเบงเบดเป€เบ„เบฒเบฐ

เบšเบฒเบ‡เบ—เบตเบกเบตเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™? เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™ เบšเปเปˆ เบ™เบตเป‰เปเบกเปˆเบ™เบฅเบนเบเบ„เป‰เบฒเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™ - 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, เบชเบญเบ‡เบชเบฒเบกเบ•เบปเบงเบชเบฐเปเบ”เบ‡เบ›เบปเบเบเบฐเบ•เบด + เบเปเบฅเบฐเบ™เบตเบžเบดเป€เบชเบ”เป€เบŠเบฑเปˆเบ™ vector, เป€เบŠเบดเปˆเบ‡, เปเบ™เปˆเบ™เบญเบ™, เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบเบฒเบ”เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™เป„เบ›เบ•เบฒเบก syntax TL, เปเบ•เปˆเบžเบงเบเป€เบ‚เบปเบฒเบญเบตเบ‡เปƒเบชเปˆ syntax เบ™เบตเป‰เป€เบžเบทเปˆเบญเบงเบดเป€เบ„เบฒเบฐเบกเบฑเบ™ ... เบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™, เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบกเบฐเบซเบฑเบ”เบชเบฐเบˆเบฑเบ™?ะธเบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบŠเบฑเป‰เบ™โ€‹เบเบงเปˆเบฒโ€‹เบ–เป‰เบฒโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เปƒเบœโ€‹เบˆเบฐโ€‹เปเบเบโ€‹เบกเบฑเบ™โ€‹เบ•เบฒเบกโ€‹เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™โ€‹เป„เบ”เป‰โ€‹?!

เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™ ... เบˆเบทเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบš CRC32 เบšเป? เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ” Telegram Desktop เบกเบตเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบ—เบตเปˆ CRC32 เบ—เบตเปˆเบ–เบทเบเบ„เบดเบ”เป„เบฅเปˆ. เบšเปเปˆเบเบปเบ‡เบเบฑเบ™ เบเบฑเบšเบญเบฑเบ™เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เปเบœเบ™เบงเบฒเบ”!

Vasily, [18.12/22 49:XNUMX] เปเบฅเบฐเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบงเปˆเบฒ TL เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบกเปˆเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบšเป?
เบ–เป‰เบฒเบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบฑเบ”เบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบ‚เป‰เบญเบเบˆเบฐเป€เบฅเบตเปˆเบกเปƒเบชเปˆเบ•เบปเบงเปเบšเปˆเบ‡เปเบ–เบง, เป€เบ„เบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบ•เบปเบงเบงเบดเป€เบ„เบฒเบฐเบˆเบฐเปเบ•เบเปƒเบ™เบ„เปเบฒเบ™เบดเบเบฒเบกเบซเบผเบฒเบเป€เบชเบฑเป‰เบ™.
tdesktop, เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™

เบˆเบทเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบˆเบธเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบซเบ™เบถเปˆเบ‡ liner, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบกเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเบ•เปเปˆเบกเบฒ.

เบ•เบปเบเบฅเบปเบ‡, telegram-cli เปเบกเปˆเบ™เบšเปเปˆเป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™, Telegram Desktop เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™, เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบเบฑเบšเบ„เบปเบ™เบญเบทเปˆเบ™? เปƒเบœเบฎเบนเป‰?.. เปƒเบ™เบฅเบฐเบซเบฑเบ”เบฅเบนเบเบ„เป‰เบฒ Android เบšเปเปˆเบกเบต schema parser เป€เบฅเบตเบ (เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เปเบฒเบ–เบฒเบกเบเปˆเบฝเบงเบเบฑเบšเปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”, เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบžเบฒเบเบ—เบตเบชเบญเบ‡), เปเบ•เปˆเบกเบตเบฅเบฐเบซเบฑเบ”เบ•เบฐเบซเบฅเบปเบเบซเบผเบฒเบ, เปเบ•เปˆเบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™เปƒเบ™ เบžเบฒเบเบชเปˆเบงเบ™เบเปˆเบญเบเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰.

เบ„เปเบฒเบ–เบฒเบกเบญเบทเปˆเบ™เปƒเบ”เบ—เบตเปˆ serialization เบเบปเบเบ‚เบถเป‰เบ™เบกเบฒเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”? เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบซเบผเบฒเบเบขเปˆเบฒเบ‡, เปเบ™เปˆเบ™เบญเบ™, เบกเบตเบŠเปˆเบญเบ‡เบšเบดเบ”เปเบฅเบฐเบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚:

Vasily: flags.0? true
เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเปเบกเปˆเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เปเบฅเบฐเป€เบ—เบปเปˆเบฒเบเบฑเบšเบ„เบงเบฒเบกเบˆเบดเบ‡เบ–เป‰เบฒเบ—เบธเบ‡เบ–เบทเบเบ•เบฑเป‰เบ‡

Vasily: flags.1? int
เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเปเบกเปˆเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เปเบฅเบฐเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™ deserialized

Vasily: Ass, เบขเปˆเบฒเบเบฑเบ‡เบงเบปเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”!
Vasily: เบกเบตเบเบฒเบ™เบเปˆเบฒเบงเป€เบ–เบดเบ‡เบšเบฒเบ‡เบšเปˆเบญเบ™เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบงเปˆเบฒเบ„เบงเบฒเบกเบˆเบดเบ‡เปเบกเปˆเบ™เบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบเบฒเบง, เปเบ•เปˆเบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบฅเบงเบšเบฅเบงเบกเบชเบดเปˆเบ‡เปƒเบ”เบˆเบฒเบเป€เบญเบเบฐเบชเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.
Vasily: เปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”, เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบเปเบฅเบฐเบ™เบต, เปเบ•เปˆเบงเปˆเบฒเบกเบตเป„เบกเป‰เบ„เป‰เบญเบ™เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบฎเบญเบ‡.

เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบเปˆเบฝเบงเบเบฑเบš Telethon? เบŠเบญเบเบซเบฒเบฅเปˆเบงเบ‡เบซเบ™เป‰เบฒเบเบฑเบšเบซเบปเบงเบ‚เปเป‰เบ‚เบญเบ‡ MTProto, เบ•เบปเบงเบขเปˆเบฒเบ‡ - เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบกเบตเบ•เปˆเบญเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เปเบ•เปˆเป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบ. % เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเบžเบฝเบ‡เปเบ•เปˆเป€เบ›เบฑเบ™ "เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบเบฑเบšเบ›เบฐเป€เบžเบ”เป€เบ›เบปเปˆเบฒ", i.e. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบกเบตเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบซเบผเบทเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบญเบเบฐเบชเบฒเบ™:

Vasily, [22.06.18 18:38] เปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบซเบ™เบถเปˆเบ‡:

msg_container#73f1f8dc messages:vector message = MessageContainer;

เปƒเบ™โ€‹เบ—เบตเปˆโ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบเบฑเบ™โ€‹:

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

เปเบฅเบฐเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบชเบญเบ‡เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เปƒเบซเบเปˆ, เปƒเบ™เบŠเบตเบงเบดเบ”เบˆเบดเบ‡เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ vector naked เบกเบฒ

เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เป€เบซเบฑเบ™โ€‹เบ„เปเบฒโ€‹เบ™เบดโ€‹เบเบฒเบก vector เป€เบ›เบปเปˆเบฒโ€‹เปเบฅเบฐโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบžเบปเบšโ€‹เป€เบซเบฑเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹

เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเปเบกเปˆเบ™เบ‚เบฝเบ™เบ”เป‰เบงเบเบกเบทเปƒเบ™ telethon

เปƒเบ™เปเบœเบ™เบงเบฒเบ”เบ‚เบญเบ‡เบฅเบฒเบงเบ„เปเบฒเบ™เบดเบเบฒเบกเป„เบ”เป‰เบ–เบทเบเบชเบฐเปเบ”เบ‡เบญเบญเบ msg_container

เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เบ„เปเบฒเบ–เบฒเบกเบเบฑเบ‡เบ„เบปเบ‡เบเปˆเบฝเบงเบเบฑเบš %. เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบ.

Vadim Goncharov, [22.06.18 19:22] เปเบฅเบฐเปƒเบ™ tdesktop?

Vasily, [22.06.18 19:23] เปเบ•เปˆ TL parser เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ›เบปเบเบเบฐเบ•เบดเบชเปˆเบงเบ™เบซเบผเบฒเบเบˆเบฐเบšเปเปˆเบเบดเบ™เบ™เบตเป‰.

// parsed manually

TL เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบซเบเปเป‰เบ—เปเป‰เบ—เบตเปˆเบชเบงเบเบ‡เบฒเบก, เบšเปเปˆเบกเบตเปƒเบœเบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™

เปเบฅเบฐ % เบšเปเปˆเป„เบ”เป‰เบขเบนเปˆเปƒเบ™เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™

เปเบ•เปˆเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เป€เบญเบเบฐเบชเบฒเบ™เบ‚เบฑเบ”เบเบฑเบšเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ idk

เบกเบฑเบ™เบ–เบทเบเบžเบปเบšเป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เป„เบงเบเบฒเบเบญเบ™, เบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบฅเบทเบกเบžเบฝเบ‡เปเบ•เปˆเบญเบฐเบ—เบดเบšเบฒเบเบ„เบงเบฒเบกเบซเบกเบฒเบ

เป€เบˆเบปเป‰เบฒเป€เบซเบฑเบ™เป€เบญเบเบฐเบชเบฒเบ™เปƒเบ™ TL, เป€เบˆเบปเป‰เบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ„เบดเบ”เป„เบ”เป‰เบงเปˆเบฒเบšเปเปˆเบกเบตเป€เบ„เบดเปˆเบ‡เบฅเบดเบ”

"เปเบฅเป‰เบง, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒ," เบœเบนเป‰เบญเปˆเบฒเบ™เบญเบตเบเบ„เบปเบ™เบซเบ™เบถเปˆเบ‡เบˆเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒ, "เบ—เปˆเบฒเบ™เบงเบดเบžเบฒเบเบงเบดเบˆเบฒเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เบชเบฐเบ™เบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เบ‚เป‰เบญเบเป€เบซเบฑเบ™เบงเปˆเบฒเบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเป€เบฎเบฑเบ”."

Vasily เบ•เบญเบšเบงเปˆเบฒ: "เบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐ, เบ‚เป‰เบญเบเบกเบฑเบเบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เป€เบŠเบฑเปˆเบ™

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

somehow เบกเบฑเบโ€‹เบกเบฑเบ™โ€‹เบ”เบตเบโ€‹เบงเปˆเบฒโ€‹

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)

เบ™เบตเป‰เปเบกเปˆเบ™ 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];

เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบ‡เปˆเบฒเบเบ”เบฒเบเปเบกเปˆเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบญเปˆเบญเบ™เป‚เบเบ™.โ€

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, parser เปเบฅเบฐ code generator เบชเปเบฒเบฅเบฑเบšเบŠเบธเบ”เบเปˆเบญเบเบ—เบตเปˆเปƒเบŠเป‰เบ•เบปเบงเบˆเบดเบ‡เบ‚เบญเบ‡ TL เป€เบซเบกเบฒเบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ›เบฐเบกเบฒเบ™ 100 เบชเบฒเบเบ‚เบญเบ‡เป„เบงเบเบฒเบเบญเบ™เปเบฅเบฐ ~ 300 เบชเบฒเบเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบเปเบฒเป€เบ™เบตเบ”เป„เบŸเบŸเป‰เบฒ (เบ™เบฑเบšเบ—เบฑเบ‡เบซเบกเบปเบ”. printเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™), เบฅเบงเบกเบ—เบฑเบ‡เบ‚เปเป‰เบกเบนเบ™เบ›เบฐเป€เบžเบ” buns เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ introspection เปƒเบ™เปเบ•เปˆเบฅเบฐเบซเป‰เบญเบ‡เบฎเบฝเบ™. เปเบ•เปˆเบฅเบฐเบ›เบฐเป€เบžเบ” polymorphic เบเบฒเบเป€เบ›เบฑเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ, เปเบฅเบฐเบœเบนเป‰เบเปเปˆเบชเป‰เบฒเบ‡เป„เบ”เป‰เบฎเบฑเบšเบกเปเบฅเบฐเบ”เบปเบเบˆเบฒเบเบกเบฑเบ™เปเบฅเบฐเบกเบตเบงเบดเบ—เบตเบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ serialization เปเบฅเบฐ deserialization.

เบ‚เบฒเบ”เบ›เบฐเป€เบžเบ”เปƒเบ™เบžเบฒเบชเบฒเบ›เบฐเป€เบžเบ”

เบเบฒเบ™เบžเบดเบกเบ—เบตเปˆเป€เบ‚เบฑเป‰เบกเปเบ‚เบ‡เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ”เบต, เบšเปเปˆเปเบกเปˆเบ™เบšเป? เบšเปเปˆ, เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™ holivar (เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ‚เป‰เบญเบเบกเบฑเบเบžเบฒเบชเบฒเปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง), เปเบ•เปˆเป€เบ›เบฑเบ™ postulate เบžเบฒเบเปƒเบ™เบเบญเบšเบ‚เบญเบ‡ TL. เบญเบตเบ‡เปƒเบชเปˆเบกเบฑเบ™, เบžเบฒเบชเบฒเบ„เบงเบ™เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ—เบธเบเบ›เบฐเป€เบžเบ”เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ. เบ”เบต, เบšเปเปˆเป€เบ›เบฑเบ™เบซเบเบฑเบ‡, เบญเบฒเบ”เบˆเบฐเบšเปเปˆเปเบกเปˆเบ™เบ•เบปเบงเบฅเบฒเบงเป€เบญเบ‡, เปเบ•เปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เปเบ•เปˆเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบ„เบงเบ™เบญเบฐเบ—เบดเบšเบฒเบเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ. เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป‚เบญเบเบฒเบ”เบ›เบฐเป€เบžเบ”เปƒเบ”?

เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบ‚เปเป‰ เบˆเบณ เบเบฑเบ”. เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเบฑเบšเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒ:

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบ™เบทเป‰เบญเปƒเบ™เบ–เบฒเบ™เบชเบญเบ‡เบ‚เบญเบ‡เป„เบŸเบฅเปŒเป„เบ”เป‰เบ–เบทเบเปเบšเปˆเบ‡เบญเบญเบเป€เบ›เบฑเบ™เบžเบฒเบเบชเปˆเบงเบ™. เบ—เบธเบเบžเบฒเบเบชเปˆเบงเบ™เบ•เป‰เบญเบ‡เบกเบตเบ‚เบฐเปœเบฒเบ”เบ”เบฝเบงเบเบฑเบ™ ( part_size ) เปเบฅเบฐโ€‹เป€เบ‡เบทเปˆเบญเบ™โ€‹เป„เบ‚โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹เบˆเบฐโ€‹เบ•เป‰เบญเบ‡โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹:

  • part_size % 1024 = 0 (เปเบšเปˆเบ‡เบ”เป‰เบงเบ 1KB)
  • 524288 % part_size = 0 (512KB เบ•เป‰เบญเบ‡โ€‹เปเบšเปˆเบ‡โ€‹เปƒเบซเป‰โ€‹เป€เบ—เบปเปˆเบฒโ€‹เบ—เบฝเบกโ€‹เบเบฑเบ™โ€‹เป‚เบ”เบ part_sizeโ€‹)

เบชเปˆเบงเบ™เบชเบธเบ”เบ—เป‰เบฒเบเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบกเบฑเบ™เปเบกเปˆเบ™เบซเบ™เป‰เบญเบเบเบงเปˆเบฒ part_size.

เปเบ•เปˆเบฅเบฐเบžเบฒเบเบชเปˆเบงเบ™เบ„เบงเบ™เบกเบตเบ•เบปเบงเป€เบฅเบเบฅเปเบฒเบ”เบฑเบš, file_part, เบกเบตเบกเบนเบ™เบ„เปˆเบฒเบ•เบฑเป‰เบ‡เปเบ•เปˆ 0 เบซเบฒ 2,999.

เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ—เบตเปˆโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เปเบšเปˆเบ‡โ€‹เบ›เบฑเบ™โ€‹, เบ—เปˆเบฒเบ™โ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เป€เบญเบปเบฒโ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบขเบฑเบ”โ€‹เบกเบฑเบ™โ€‹เปƒเบ™โ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เปเบกเปˆโ€‹เบ‚เปˆเบฒเบโ€‹. เปƒเบŠเป‰ upload.saveBigFilePart เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบ‚เบฐเบซเบ™เบฒเบ”เป€เบ•เบฑเบกเบ‚เบญเบ‡เป„เบŸเบฅเปŒเปเบกเปˆเบ™เบซเบผเบฒเบเบเปˆเบงเบฒ 10 MB เปเบฅเบฐ upload.saveFilePart เบชเปเบฒเบฅเบฑเบšเป„เบŸเบฅเปŒเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบเบงเปˆเบฒ.
[โ€ฆ] เปœเบถเปˆเบ‡เปƒเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™:

  • FILE_PARTS_INVALID โ€” เบˆเบณเบ™เบงเบ™เบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เบกเบนเบ™เบ„เปˆเบฒเบšเปเปˆเปเบกเปˆเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡ 1..3000

เบกเบตเบญเบฑเบ™เปƒเบ”เบญเบฑเบ™เปœเบถเปˆเบ‡เบขเบนเปˆเปƒเบ™เปเบœเบ™เบงเบฒเบ”เบšเป? เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบšเบฒเบ‡เบขเปˆเบฒเบ‡เป‚เบ”เบเปƒเบŠเป‰ TL? เบšเปเปˆ. เปเบ•เปˆเบ‚เปเป‚เบ—เบ”, เปเบกเปˆเบ™เปเบ•เปˆ Turbo Pascal เบ‚เบญเบ‡เบžเปเปˆเบ•เบนเป‰เบเปเบชเบฒเบกเบฒเบ”เบญเบฐเบ—เบดเบšเบฒเบเบ›เบฐเป€เบžเบ”เบ•เปˆเบฒเบ‡เป†เป„เบ”เป‰ เบŠเปˆเบงเบ‡. เปเบฅเบฐเบฅเบฒเบงเบฎเบนเป‰เบญเบตเบเบขเปˆเบฒเบ‡เบซเบ™เบถเปˆเบ‡, เบ›เบฐเบˆเบธเบšเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเบเบฑเบ™เบ”เบตเปƒเบ™เบ™เบฒเบก enum - เบ›เบฐโ€‹เป€เบžเบ”โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ”เป‰เบงเบ enumeration เบ‚เบญเบ‡โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ„เบปเบ‡โ€‹เบ—เบตเปˆ (เบ™เป‰เบญเบโ€‹) เบ‚เบญเบ‡โ€‹เบ„เปˆเบฒโ€‹. เปƒเบ™เบžเบฒเบชเบฒเป€เบŠเบฑเปˆเบ™ C - เบ•เบปเบงเป€เบฅเบ, เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบกเบฒเบฎเบญเบ”เบ›เบฐเบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบ›เบฐเป€เบžเบ”เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™ เบ•เบปเบงเป€เบฅเบ. เปเบ•เปˆเบเบฑเบ‡เบกเบต arrays, strings ... เบ•เบปเบงเบขเปˆเบฒเบ‡, เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบ”เบตเบ—เบตเปˆเบˆเบฐเบžเบฑเบ™เบฅเบฐเบ™เบฒเบงเปˆเบฒ string เบ™เบตเป‰เบกเบตเบžเบฝเบ‡เปเบ•เปˆเป€เบšเบตเป‚เบ—เบฅเบฐเบชเบฑเบšเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เปเบกเปˆเบ™เบšเป?

เบšเปเปˆเบกเบตเบญเบฑเบ™เบ™เบตเป‰เบขเบนเปˆเปƒเบ™ TL. เปเบ•เปˆเบกเบต, เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™ JSON Schema. เปเบฅเบฐเบ–เป‰เบฒเบœเบนเป‰เบญเบทเปˆเบ™เบญเบฒเบ”เบˆเบฐเป‚เบ•เป‰เบ–เบฝเบ‡เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เปเบšเปˆเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡ 512 KB, เบงเปˆเบฒเบ™เบตเป‰เบเบฑเบ‡เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบฅเบฐเบซเบฑเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบฅเบนเบเบ„เป‰เบฒเบžเบฝเบ‡เปเบ•เปˆ. เบšเปเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ” เบชเบปเปˆเบ‡เบ•เบปเบงเป€เบฅเบเบญเบญเบเบˆเบฒเบเบ‚เบญเบšเป€เบ‚เบ” 1..3000 (เปเบฅเบฐเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบเบตเบ”เบ‚เบถเป‰เบ™เป„เบ”เป‰) เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบšเปเปˆเปเบกเปˆเบ™เบšเป? ..

เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปเบฅเบฐเบ„เปˆเบฒเบเบฑเบšเบ„เบทเบ™. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบœเบนเป‰เบ—เบตเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš TL เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบปเบงเบ•เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ - เบกเบฑเบ™เบšเปเปˆเบฎเบธเปˆเบ‡เบฅเบธเบ™เปƒเบ™เบ—เบฑเบ™เบ—เบต เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบญเบฑเบ™ เบŸเบฑเบ‡เบŠเบฑเบ™เปƒเบ™ TL เบชเบฒเบกเบฒเบ”เบเบฑเบšเบ„เบทเบ™เบกเบฒเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบ›เบฐเป€เบžเบ”เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™เบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบ, เปเบ•เปˆเบเบฑเบ‡เป€เบ›เบฑเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”. เปเบ•เปˆเบ™เบตเป‰เบšเปเปˆเบชเบฒเบกเบฒเบ” deduced เปƒเบ™เบ—เบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบกเป‚เบ”เบเปƒเบŠเป‰ TL เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡. เปเบ™เปˆเบ™เบญเบ™, เบกเบฑเบ™เบˆเบฐเปเบˆเป‰เบ‡เปเบฅเป‰เบงเปเบฅเบฐเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบชเบดเปˆเบ‡เปƒเบ”เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” (เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, RPC เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เปƒเบ™เบงเบดเบ—เบตเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเบฑเบšเบ„เบทเบ™เบกเบฒเปƒเบ™เบžเบฒเบเบซเบฅเบฑเบ‡) - เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบšเปเบฅเบดเบชเบธเบ”เบ‚เบญเบ‡เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบ„เบฐเบ™เบดเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบšเปเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™. เบˆเบฒเบโ€‹เป‚เบฅเบโ€‹เบชเบฐโ€‹เบซเบงเบฑเบ™โ€‹?.. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เป€เบญเบปเบฒโ€‹เบ‚เบถเป‰เบ™ tug - เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™โ€‹เบ„เปเบฒโ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹.

เปเบฅเบฐเบชเบธเบ”เบ—เป‰เบฒเบ, เปเบกเปˆเบ™เบซเบเบฑเบ‡เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบญเปˆเบฒเบ™? เบ”เบต, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™ เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบ เบกเบฑเบ™เบ–เบทเบเบ•เป‰เบญเบ‡เปƒเบ™ schema (เปƒเบ™ JSON schema, เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เบกเบฑเบ™เปเบกเปˆเบ™), เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบ„เบงเบฒเบกเป€เบ„เบฑเปˆเบ‡เบ•เบถเบ‡เบเบฑเบšเบกเบฑเบ™เปเบฅเป‰เบง, เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบเปˆเบฝเบงเบเบฑเบšเบ”เป‰เบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” - เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเป€เบฅเบฑเบเบ™เป‰เบญเบเบ—เบตเปˆเบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡? เป€เบšเบดเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡เบ—เบตเปˆ เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡:

-channelFull#76af5481 flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector<BotInfo> migrated_from_chat_id:flags.4?int migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int = ChatFull;
+channelFull#1c87a71a flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_view_stats:flags.12?true id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector<BotInfo> migrated_from_chat_id:flags.4?int migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int = ChatFull;

เบซเบผเบท

-message#44f9b43d flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long = Message;
+message#44f9b43d flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true from_scheduled:flags.18?true id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long = Message;

เบกเบฑเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ—เบธเบเบ„เบปเบ™, เปเบ•เปˆ GitHub, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ›เบฐเบ•เบดเป€เบชเบ”เบ—เบตเปˆเบˆเบฐเป€เบ™เบฑเป‰เบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบžเบฒเบเปƒเบ™เป€เบชเบฑเป‰เบ™เบเบฒเบงเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง. เป€เบเบก "เบŠเบญเบเบซเบฒ 10 เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡", เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบชเบฐเบซเบกเบญเบ‡เป€เบซเบฑเบ™เบ—เบฑเบ™เบ—เบตเปเบกเปˆเบ™เบงเปˆเบฒเบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐเบˆเบธเบ”เบชเบดเป‰เบ™เบชเบธเบ”เปƒเบ™เบ—เบฑเบ‡เบชเบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบญเปˆเบฒเบ™เบ—เบตเปˆเบซเบ™เป‰เบฒเป€เบšเบทเปˆเบญเบซเบ™เปˆเบฒเบเปƒเบ™เบเบฒเบ‡ ... เปƒเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบ—เบดเบ”เบชเบฐเบ”เบต, เปเบ•เปˆเบขเปˆเบฒเบ‡เบ”เบฝเบงเบเบฑเบšเบชเบฒเบเบ•เบฒ เป€เบ›เบทเป‰เบญเบ™ เปเบฅเบฐ sloppy.

เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบšเปเบฅเบดเบชเบธเบ”เบ‚เบญเบ‡เบ—เบดเบ”เบชเบฐเบ”เบต. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ™เป‰เบญเบ? เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆ เบกเบตเบเบดเปˆเบ™เบซเบญเบก เบšเปเปˆเบ”เบตเบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ‚เบญเบ‡เบ—เบดเบ”เบชเบฐเบ”เบตเบ›เบฐเป€เบžเบ”? เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เปƒเบ™เบชเบฐเบšเบฑเบšเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ‚เบญเบ‡เปเบœเบ™เบงเบฒเบ”. เบ—เปเบฒเบญเบดเบ”, เปเบกเปˆเบ™เปเบฅเป‰เบง, เบกเบฑเบ™เป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”, เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเป†เบเบฒเบ™เบˆเบฒเบก, เบ›เบฐเป€เบžเบ”เปƒเบซเบกเปˆเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™. rudiments เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบเบฑเบ‡เบกเบตเบขเบนเปˆเปƒเบ™เบฎเบนเบšเปเบšเบšเบ™เบตเป‰, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡:

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 เป„เบ”เป‰เปเบ•เบเบซเบฑเบเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบ•เปเปˆเบเบฑเบšเบเบปเป‰เบ™เบ‚เบญเบ‡เบ—เบฒเบ”เป€เบซเบผเบฑเบเบชเบฝเบ‡เป‚เบซเบงเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡ harsh เบ‚เบญเบ‡ serialization.

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เปƒเบ™เบšเบฒเบ‡เบšเปˆเบญเบ™, เบ„เบปเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป€เบญเบ‡เบฅเบฐเป€เบกเบตเบ” typology เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™ MTProto (เบšเบปเบ”เบ•เปเปˆเป„เบ›) เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบšเบตเบšเบญเบฑเบ”เป‚เบ”เบ Gzip, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ”เบต - เบเบปเบเป€เบงเบฑเป‰เบ™เบงเปˆเบฒเบŠเบฑเป‰เบ™เปเบฅเบฐเบงเบปเบ‡เบˆเบญเบ™เบ–เบทเบเบฅเบฐเป€เบกเบตเบ”. เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™ RpcResult เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบ—เบตเปˆเบ–เบทเบเป€เบเบฑเบšเบเปˆเบฝเบง, เปเบ•เปˆเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบกเบฑเบ™. เปเบฅเป‰เบง, เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เป€เบฎเบฑเบ”เปเบšเบšเบ™เบตเป‰?.. เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบ•เบฑเบ”เป€เบ›เบฑเบ™เป„เบกเป‰เบ„เป‰เบญเบ™เป€เบžเบทเปˆเบญเบเบฒเบ™เบšเบตเบšเบญเบฑเบ”เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ—เบธเบเบšเปˆเบญเบ™.

เบซเบผเบทเบ•เบปเบงเบขเปˆเบฒเบ‡เบญเบทเปˆเบ™, เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบ„เบปเป‰เบ™เบžเบปเบšเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ” - เบกเบฑเบ™เบ–เบทเบเบชเบปเปˆเบ‡ InputPeerUser เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ InputUser. เบซเบผเบทเปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™. เปเบ•เปˆเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบ! เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบšเปเปˆเป„เบ”เป‰เบชเบปเบ™เปƒเบˆเบ›เบฐเป€เบžเบ”. เบ™เบตเป‰เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปเบ™เบงเปƒเบ”? เบ„เปเบฒเบ•เบญเบšเบญเบฒเบ”เบˆเบฐเบ–เบทเบเบกเบญเบšเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป‚เบ”เบเบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบฅเบฐเบซเบฑเบ”เบˆเบฒเบ telegram-cli:

  if (tgl_get_peer_type (E->id) != TGL_PEER_CHANNEL || (C && (C->flags & TGLCHF_MEGAGROUP))) {
    out_int (CODE_messages_get_history);
    out_peer_id (TLS, E->id);
  } else {    
    out_int (CODE_channels_get_important_history);

    out_int (CODE_input_channel);
    out_int (tgl_get_peer_id (E->id));
    out_long (E->id.access_hash);
  }
  out_int (E->max_id);
  out_int (E->offset);
  out_int (E->limit);
  out_int (0);
  out_int (0);

เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆ serialization เปเบกเปˆเบ™เป€เบฎเบฑเบ” เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡, เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบชเป‰เบฒเบ‡โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹! เบšเบฒเบ‡เบ—เบตเป€เบŠเบตเบšเป€เบงเบตเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™?.. เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™, เบ™เบตเป‰เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบ–เป‰เบฒเป€เบฎเบฑเบ”เบ„เบฑเป‰เบ‡เบ”เบฝเบง, เปเบ•เปˆเบกเบฑเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปเบ™เบงเปƒเบ”เบ•เปเปˆเบกเบฒเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡? เบ™เบตเป‰เปเบกเปˆเบ™เบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เป‚เบ„เบ‡เบเบฒเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ”เบดเบ”? เปเบฅเบฐเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบ„เปเบฒเบ–เบฒเบกเบ•เปเปˆเป„เบ›.

เบฎเบธเปˆเบ™. เบŠเบฑเป‰เบ™

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบชเบฐเบšเบฑเบš schematic เบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบŠเบฑเป‰เบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบ„เบฒเบ”เป€เบ”เบปเบฒเป„เบ”เป‰เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡ schematics เบ—เบตเปˆเบˆเบฑเบ”เบžเบตเบกเบกเบฒ. เบ›เบฒเบเบปเบ”เบ‚เบทเป‰เบ™, เปƒเบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”เบœเบนเป‰เบ‚เบฝเบ™เบ„เบดเบ”เบงเปˆเบฒเบชเบดเปˆเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡, เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบšเปˆเบญเบ™เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบชเบฐเป€เบžเบฒเบฐ, เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰เบชเบฐเบšเบฑเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบšเปเปˆเบ”เบต, เบฎเบนเบšเปเบšเบšเปƒเบซเบกเปˆเบˆเบฐเบ–เบทเบ "เบ›เบฐเบชเบปเบก", เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™, เบŠเบฑเป‰เบ™เป€เบ—เบดเบ‡เบ‚เบญเบ‡เป€เบเบปเปˆเบฒ. เปเบ•เปˆโ€‹เปƒเบซเป‰โ€‹เป€เบฎเบปเบฒโ€‹เป€เบšเบดเปˆเบ‡โ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เป„เบ”เป‰โ€‹เปเบ™เบงโ€‹เปƒเบ”. เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบกเบฑเบ™เบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ - เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ•เบฐเบซเบฅเบปเบ, เปเบ•เปˆเปเบœเบ™เบงเบฒเบ”เบ‚เบญเบ‡เบŠเบฑเป‰เบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบšเปเปˆเบกเบต. เบŠเบฑเป‰เบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ 2. เป€เบญเบเบฐเบชเบฒเบ™เบšเบญเบเบžเบงเบเป€เบฎเบปเบฒเบเปˆเบฝเบงเบเบฑเบšเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบžเบดเป€เบชเบ”เบ‚เบญเบ‡ TL:

เบ–เป‰เบฒเบฅเบนเบเบ„เป‰เบฒเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ Layer 2, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰ constructor เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

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

เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ—เบธเบเบเบฒเบ™เป‚เบ— API, int เบ—เบตเปˆเบกเบตเบ„เปˆเบฒ 0x289dd1f6 เบ•เป‰เบญเบ‡เบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆเบเปˆเบญเบ™เป€เบฅเบเบงเบดเบ—เบต.

เบชเบฝเบ‡เบ›เบปเบเบเบฐเบ•เบด. เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบ•เปเปˆเป„เบ›? เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ›เบฒเบเบปเบ”

invokeWithLayer3#b7475268 query:!X = X;

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบซเบเบฑเบ‡เบ•เปเปˆเป„เบ›? เบ•เบฒเบกเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเป€เบ”เบปเบฒ,

invokeWithLayer4#dea0d430 query:!X = X;

เบ•เบฐเบซเบฅเบปเบ? เบšเปเปˆ, เบกเบฑเบ™เป„เบงเป€เบเบตเบ™เป„เบ›เบ—เบตเปˆเบˆเบฐเบซเบปเบงเป€เบฅเบฒเบฐ, เบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒ เบ—เบธเบ เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบˆเบฒเบเบŠเบฑเป‰เบ™เบญเบทเปˆเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบซเปเปˆเบ”เป‰เบงเบเบ›เบฐเป€เบžเบ”เบžเบดเป€เบชเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง - เบ–เป‰เบฒเบžเบงเบเบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบ—เปˆเบฒเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบˆเปเบฒเปเบ™เบเบžเบงเบเบกเบฑเบ™เป„เบ”เป‰เปเบ™เบงเปƒเบ”? เปเบฅเบฐเบเบฒเบ™เป€เบžเบตเปˆเบกเบžเบฝเบ‡เปเบ•เปˆ 4 bytes เบขเบนเปˆเบ—เบฒเบ‡เบซเบ™เป‰เบฒเปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบชเบงเบเบ‡เบฒเบก. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™,

invokeWithLayer5#417a57ae query:!X = X;

เปเบ•เปˆเบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ™เบตเป‰เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ bacchanalia. เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบกเบฒโ€‹:

เบญเบฑเบšเป€เบ”เบ”: เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบŠเบฑเป‰เบ™ 9, เบงเบดเบ—เบตเบเบฒเบ™เบœเบนเป‰เบŠเปˆเบงเบ invokeWithLayerN เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบฎเปˆเบงเบกโ€‹เบเบฑเบšโ€‹ initConnection

เป‚เบซเป‰เบ! เบซเบผเบฑเบ‡เบˆเบฒเบ 9 เบฎเบธเปˆเบ™, เปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบกเบฒเบฎเบญเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบ™เป‚เบ›เป‚เบ•เบ„เบญเบ™เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เปƒเบ™ 80s - เบ•เบปเบเบฅเบปเบ‡เบเบฑเบšเบชเบฐเบšเบฑเบšเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ!

เปเบฅเป‰เบงเปเบกเปˆเบ™เบซเบเบฑเบ‡เบ•เปเปˆเป„เบ›?..

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

เปเบ•เปˆเบ”เบฝเบงเบ™เบตเป‰เป€เบˆเบปเป‰เบฒเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบซเบปเบงเป„เบ”เป‰. เบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบญเบตเบ 9 เบŠเบฑเป‰เบ™, เบœเบนเป‰เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบกเบตเบ•เบปเบงเป€เบฅเบเบชเบฐเบšเบฑเบšเป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบก, เป€เบŠเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เป‚เบ—เบซเบฒเบžเบฝเบ‡เปเบ•เปˆเบ„เบฑเป‰เบ‡เบ”เบฝเบงเปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เปเบฅเบฐเบ„เบงเบฒเบก เปเบฒเบ เบ‚เบญเบ‡เบŠเบฑเป‰เบ™เบ•เปˆเบฒเบ‡เป†เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป„เบ”เป‰เบซเบฒเบเป„เบ›, เบ”เบฝเบงเบ™เบตเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚, เป€เบŠเบฑเปˆเบ™: เบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡. เบšเบฑเบ™เบซเบฒเบ–เบทเบเปเบเป‰เป„เบ‚.

เบขเปˆเบฒเบ‡โ€‹เปเบ™เปˆโ€‹เบ™เบญเบ™?..

Vasily, [16.07.18 14:01] เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เบงเบฑเบ™เบชเบธเบเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบงเปˆเบฒ:
teleserver เบชเบปเปˆเบ‡เป€เบซเบ”เบเบฒเบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป. เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ•เป‰เบญเบ‡เบ–เบทเบเบซเปเปˆเบขเบนเปˆเปƒเบ™ InvokeWithLayer. เป€เบŠเบตเบšเป€เบงเบตเบšเปเปˆเป„เบ”เป‰เบซเปเปˆเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡; เบšเปเปˆเบกเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบซเปเปˆเบ„เปเบฒเบ•เบญเบšเปเบฅเบฐเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡.

เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบฅเบนเบเบ„เป‰เบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบฅเบฐเบšเบธเบŠเบฑเป‰เบ™เบ—เบตเปˆเบฅเบฒเบงเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡

Vadim Goncharov, [16.07.18 14:02] เบšเปเปˆเปเบกเปˆเบ™ InvokeWithLayer เป€เบ›เบฑเบ™เป„เบกเป‰เบ„เป‰เบญเบ™เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™เบšเป?

Vasily, [16.07.18 14:02] เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบ”เบฝเบง

Vadim Goncharov, [16.07.18 14:02] เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เบ•เบปเบเบฅเบปเบ‡เปƒเบ™เบŠเบฑเป‰เบ™เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบญเบ‡เบ›เบฐเบŠเบธเบก

เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบกเบฑเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบงเปˆเบฒเบฅเบนเบเบ„เป‰เบฒ downgrade เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰

เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡, i.e. เบ›เบฐเป€เบžเบ” Updates เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™, เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบฅเบนเบเบ„เป‰เบฒเบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ•เปเปˆเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป API, เปเบ•เปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฒเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบซเบ”เบเบฒเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบซเบปเบงเบ‚เปเป‰เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบญเบทเปˆเบ™, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเบฎเบนเป‰เบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบˆเบฐเบŠเปˆเบงเบเบ›เบฐเบขเบฑเบ”เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบฅเบนเบเบ„เป‰เบฒ offline.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ›เบฐเบ•เบดเป€เบชเบ”เบเบฒเบ™เบซเปเปˆ เปเบ•เปˆเบฅเบฐเบ„เบปเบ™ เบŠเบธเบ”เป€เบžเบทเปˆเบญเบŠเบตเป‰เบšเบญเบเบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบกเบฑเบ™, เป€เบซเบ”เบœเบปเบ™เบ™เบตเป‰เบ™เปเบฒเป„เบ›เบชเบนเปˆเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เป€เบŠเบตเบšเป€เบงเบตเบˆเบฐเบชเบปเปˆเบ‡เบเบฒเบ™เบญเบฑเบšเป€เบ”เบ”เปƒเบซเป‰เบเบฑเบšเบฅเบนเบเบ„เป‰เบฒเบเปˆเบญเบ™เบ—เบตเปˆเบฅเบนเบเบ„เป‰เบฒเบˆเบฐเปเบˆเป‰เบ‡เปƒเบซเป‰เบฅเบนเบเบ„เป‰เบฒเบฎเบนเป‰เบงเปˆเบฒเบกเบฑเบ™เบฎเบญเบ‡เบฎเบฑเบšเบฅเบธเป‰เบ™เปƒเบ”
  • เบ‚เป‰เบญเบเบ„เบงเบ™เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบเบปเบเบฅเบฐเบ”เบฑเบšเบฅเบนเบเบ„เป‰เบฒ?
  • เบœเบนเป‰เบ—เบตเปˆ เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบเบŠเบฑเป‰เบ™เบˆเบฐเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบšเป?

เบ—เปˆเบฒเบ™เบ„เบดเบ”เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ„เบฒเบ”เป€เบ”เบปเบฒเบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบตเบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡, เปเบฅเบฐเปƒเบ™เบ—เบฒเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบเบตเบ”เบ‚เบถเป‰เบ™เป„เบ”เป‰, เป€เบžเบฒเบฐเบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ–เบทเบเบ‚เบฝเบ™เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡ (เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบ, เบกเบฑเบ™เบ–เบทเบเบ—เบปเบ”เบชเบญเบšเบ”เบต)? เบฎเบฒ! เบšเปเปˆเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”!

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เป€เบ”เบทเบญเบ™เบชเบดเบ‡เบซเบฒ. เปƒเบ™เบงเบฑเบ™เบ—เบต 14 เบชเบดเบ‡เบซเบฒ, เบกเบตเบ‚เปเป‰เบ„เบงเบฒเบกเบงเปˆเบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡ Telegram ... เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบ—เบถเบ:

2019-08-15 09:28:35.880640 MSK warn  main: ANON:87: unknown object type: 0x80d182d1 at TL/Object.pm line 213.
2019-08-15 09:28:35.751899 MSK warn  main: ANON:87: unknown object type: 0xb5223b0f at TL/Object.pm line 213.

เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบซเบผเบฒเบ megabytes เบ‚เบญเบ‡ stack traces (เบ”เบต, เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบเบฒเบ™เบ•เบฑเบ”เป„เบกเป‰เป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚). เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เบ–เป‰เบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบšเปเปˆเบ–เบทเบเบฎเบฑเบšเบฎเบนเป‰เปƒเบ™ TL เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เบ„เบนเปˆเป‚เบ”เบเบฅเบฒเบเป€เบŠเบฑเบ™, เบ•เปเปˆเป„เบ›เบญเบตเบเปเบฅเป‰เบง. เบ—เบฑเบ‡เปเบปเบ” เป„เบ›, เบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰. เป€เบˆเบปเป‰เบฒเบ„เบงเบ™เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง?

เบ”เบต, เบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เปƒเบˆเบ‚เบญเบ‡เปƒเบœเบœเบนเป‰เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบ•เบฑเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบฅเบฐเบžเบฐเบเบฒเบเบฒเบกเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡. เบšเปเปˆเป„เบ”เป‰เบŠเปˆเบงเบ. เบžเบงเบเป€เบฎเบปเบฒ google CRC32 - เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบงเบฑเบ”เบ–เบธเบˆเบฒเบเป‚เบ„เบ‡เบเบฒเบ™ 73, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™ 82. เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบขเปˆเบฒเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เปƒเบ™เบšเบฑเบ™เบ—เบถเบ - เบกเบตเบ•เบปเบงเบฅเบฐเบšเบธเบˆเบฒเบเบชเบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™!

เบšเบฒเบ‡เบ—เบตเบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเบšเปเปˆเป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบšเป? เบšเปเปˆ, เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบง Telegram Desktop 1.2.17 (เบชเบฐเบšเบฑเบšเบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เบขเบนเปˆเปƒเบ™เบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เปเบˆเบเบขเบฒเบ Linux), เบกเบฑเบ™เบ‚เบฝเบ™เปƒเบชเปˆเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบเบปเบเป€เบงเบฑเป‰เบ™: MTP Unexpected type id #b5223b0f เบญเปˆเบฒเบ™เปƒเบ™ MTPMessageMediaโ€ฆ

เบเบฒเบ™เบงเบดเบžเบฒเบเบงเบดเบˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบžเบดเบ—เบตเบเบฒเบ™ เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ‚เบญเบ‡ Telegram. เบชเปˆเบงเบ™เบ—เบต 1, เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™: เบ›เบฐเบชเบปเบšเบเบฒเบ™เปƒเบ™เบเบฒเบ™เบ‚เบฝเบ™เบฅเบนเบเบ„เป‰เบฒเบˆเบฒเบ scratch - TL, MT

เบเบนเป‚เบเป„เบ”เป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เป„เบ”เป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปเบฅเป‰เบงเบเบฑเบšเบซเบ™เบถเปˆเบ‡เปƒเบ™เบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเบšเปเปˆเป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™, เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ•เบปเบงเป€เบฅเบเบฎเบธเปˆเบ™เปเบฅเบฐ, เบ•เบฒเบกเบ™เบฑเป‰เบ™, เบเบฒเบ™เบชเบปเบกเบกเบธเบ”เบ•เบดเบ–เบฒเบ™เปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ ...

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบ„เบงเบ™เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”? Vasily เปเบฅเบฐเบ‚เป‰เบญเบเปเบเบเบเบฑเบ™: เบฅเบฒเบงเบžเบฐเบเบฒเบเบฒเบกเบ›เบฑเบšเบ›เบธเบ‡เบงเบปเบ‡เบˆเบญเบ™เป€เบ›เบฑเบ™ 91, เบ‚เป‰เบญเบเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบฅเปเบ–เป‰เบฒเบชเบญเบ‡เบชเบฒเบกเบกเบทเป‰เปเบฅเบฐเบžเบฐเบเบฒเบเบฒเบก 73. เบ—เบฑเบ‡เบชเบญเบ‡เบงเบดเบ—เบตเป„เบ”เป‰เบœเบปเบ™, เปเบ•เปˆเบเป‰เบญเบ™เบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เป€เบ›เบฑเบ™ empirical, เบกเบฑเบ™เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบเปˆเบฝเบงเบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบฎเบธเปˆเบ™เบ‚เบถเป‰เบ™เบซเบผเบทเบฅเบปเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™. เป€เบžเบทเปˆเบญเป€เบ•เบฑเป‰เบ™เป„เบ›เบซเบฒ, เบซเบผเบทเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเปเบ–เป‰เบฒเบ”เบปเบ™เบ›เบฒเบ™เปƒเบ”.

เบ•เปเปˆเบกเบฒเบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เปƒเบซเบกเปˆเป„เบ”เป‰: เบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบงเบฅเบนเบเบ„เป‰เบฒ, เบ›เบดเบ”เบกเบฑเบ™, เบฅเบงเบšเบฅเบงเบกเบงเบปเบ‡เบˆเบญเบ™เบเบฑเบšเบŠเบฑเป‰เบ™เบญเบทเปˆเบ™, เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบซเบกเปˆ, เบˆเบฑเบšเบšเบฑเบ™เบซเบฒเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบญเบฑเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ - oops, เบšเปเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เบงเบปเบ‡เบˆเบญเบ™เปเบฅเบฐเบฅเบนเบเบ„เป‰เบฒ restart เบชเปเบฒเบฅเบฑเบš เบชเบญเบ‡เบชเบฒเบกเบ™เบฒเบ—เบตเบˆเบฐเบŠเปˆเบงเบเป„เบ”เป‰. เบ—เปˆเบฒเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบŠเบฑเป‰เบ™เบ•เปˆเบฒเบ‡เป†.

เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบ? เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ„เบฒเบ”เป€เบ”เบปเบฒเป„เบ”เป‰เบˆเบฒเบเบญเบฒเบเบฒเบ™เบ—เบฒเบ‡เบญเป‰เบญเบกเบ•เปˆเบฒเบ‡เป†, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบซเบผเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ•เปˆเบฒเบ‡เป†เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบชเปˆเบงเบ™เบซเบผเบฒเบเบญเบฒเบ”เบˆเบฐ, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ "buffering" เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เปเบ–เบงเบชเบดเปˆเบ‡เบ—เบตเปˆเบœเบนเป‰เบ™เปเบฒเบ‚เบญเบ‡เบกเบฑเบ™เปƒเบซเป‰เบกเบฑเบ™, เปเบฅเบฐเบžเบงเบเป€เบ‚เบปเบฒเปƒเบซเป‰เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบœเบฐเบฅเบดเบ”. เปเบฅเบฐเบˆเบปเบ™เบเปˆเบงเบฒเปเบ–เบงเบ™เบตเป‰ "เป€เบ™เบปเปˆเบฒเป€เบ›เบทเปˆเบญเบ", เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™.

เบšเบฒเบ‡เบ—เบต ... เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™ crutch เบ‚เบตเป‰เบฎเป‰เบฒเบ?!.. เบšเปเปˆ, เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ” Crazy, เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™. เปƒเบ™โ€‹เบชเบฐโ€‹เบšเบฑเบš Android เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบŠเบญเบโ€‹เบซเบฒ TL parser เปƒเบ”โ€‹, เปเบ•เปˆโ€‹เบงเปˆเบฒโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบŠเบญเบโ€‹เบซเบฒโ€‹เป„เบŸเบฅโ€‹เปŒ hefty (GitHub เบ›เบฐโ€‹เบ•เบดโ€‹เป€เบชเบ”โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบชเปเบฒโ€‹เบžเบฑเบ”โ€‹เบกเบฑเบ™โ€‹) เบเบฑเบš (deโ€‹)serializationโ€‹. เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”:

public static class TL_message_layer68 extends TL_message {
    public static int constructor = 0xc09be45f;
//...
//ะตั‰ะต ะฟะฐั‡ะบะฐ ะฟะพะดะพะฑะฝั‹ั…
//...
    public static class TL_message_layer47 extends TL_message {
        public static int constructor = 0xc992e15c;
        public static Message TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) {
            Message result = null;
            switch (constructor) {
                case 0x1d86f70e:
                    result = new TL_messageService_old2();
                    break;
                case 0xa7ab1991:
                    result = new TL_message_old3();
                    break;
                case 0xc3060325:
                    result = new TL_message_old4();
                    break;
                case 0x555555fa:
                    result = new TL_message_secret();
                    break;
                case 0x555555f9:
                    result = new TL_message_secret_layer72();
                    break;
                case 0x90dddc11:
                    result = new TL_message_layer72();
                    break;
                case 0xc09be45f:
                    result = new TL_message_layer68();
                    break;
                case 0xc992e15c:
                    result = new TL_message_layer47();
                    break;
                case 0x5ba66c13:
                    result = new TL_message_old7();
                    break;
                case 0xc06b9607:
                    result = new TL_messageService_layer48();
                    break;
                case 0x83e5de54:
                    result = new TL_messageEmpty();
                    break;
                case 0x2bebfa86:
                    result = new TL_message_old6();
                    break;
                case 0x44f9b43d:
                    result = new TL_message_layer104();
                    break;
                case 0x1c9b1027:
                    result = new TL_message_layer104_2();
                    break;
                case 0xa367e716:
                    result = new TL_messageForwarded_old2(); //custom
                    break;
                case 0x5f46804:
                    result = new TL_messageForwarded_old(); //custom
                    break;
                case 0x567699b3:
                    result = new TL_message_old2(); //custom
                    break;
                case 0x9f8d60bb:
                    result = new TL_messageService_old(); //custom
                    break;
                case 0x22eb6aba:
                    result = new TL_message_old(); //custom
                    break;
                case 0x555555F8:
                    result = new TL_message_secret_old(); //custom
                    break;
                case 0x9789dac4:
                    result = new TL_message_layer104_3();
                    break;

เบซเบผเบท

    boolean fixCaption = !TextUtils.isEmpty(message) &&
    (media instanceof TLRPC.TL_messageMediaPhoto_old ||
     media instanceof TLRPC.TL_messageMediaPhoto_layer68 ||
     media instanceof TLRPC.TL_messageMediaPhoto_layer74 ||
     media instanceof TLRPC.TL_messageMediaDocument_old ||
     media instanceof TLRPC.TL_messageMediaDocument_layer68 ||
     media instanceof TLRPC.TL_messageMediaDocument_layer74)
    && message.startsWith("-1");

เบฎเบทเบก... เป€เบšเบดเปˆเบ‡เบ„เบทเบ›เปˆเบฒ. เปเบ•เปˆ, เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™, เบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™, เปเบฅเป‰เบง okay?.. เปเบ•เปˆเปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ—เบธเบเบฅเบธเป‰เบ™! เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เบกเบฑเบ™เบšเปเปˆเบˆเบฐเปเบˆเป‰เบ‡เบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบถเปˆเบ‡เบ›เบฐเบชเบปเบกเบเบฑเบ™, เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบฅเบฑเบš, เปเบฅเบฐเบ—เบธเบเบ›เบฐเป€เบžเบ” _old7 เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบšเปเปˆเบ„เบทเบเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ ... เปเบ™เบงเปƒเบ”เบเปเปˆเบ•เบฒเบก, เบชเปˆเบงเบ™เบซเบผเบฒเบเบ‚เป‰เบญเบเบ–เบทเบเบžเบฑเบ”เบญเบญเบเป„เบ›

TL_message_layer104
TL_message_layer104_2
TL_message_layer104_3

เบœเบนเป‰เบŠเบฒเบ, เป€เบˆเบปเป‰เบฒเบเบฑเบ‡เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเปเบกเปˆเบ™เบซเบเบฑเบ‡เบขเบนเปˆเปƒเบ™เบŠเบฑเป‰เบ™เบ”เบฝเบง?! เปเบฅเป‰เบง, เป‚เบญเป€เบ„, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒ "เบชเบญเบ‡" เบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒเบ”เป‰เบงเบเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, เบ”เบต, เบกเบฑเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™, เปเบ•เปˆเบชเบฒเบก? .. เบ—เบฑเบ™เบ—เบต, rake เบ”เบฝเบงเบเบฑเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡? เบญเบฑเบ™เบ™เบตเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เบฎเบนเบšเบฅเบฒเบกเบปเบเบญเบฑเบ™เปƒเบ”, เบ‚เปเป‚เบ—เบ”..?

เปƒเบ™เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡ Telegram Desktop, เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบชเบดเปˆเบ‡เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เป€เบเบตเบ”เบ‚เบทเป‰เบ™ - เบ–เป‰เบฒเป€เบ›เบฑเบ™เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบซเบผเบฒเบเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบ•เบดเบ”เบ•เปเปˆเบเบฑเบ™เบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบšเปเปˆเป„เบ”เป‰เบ›เปˆเบฝเบ™เบ•เบปเบงเป€เบฅเบเบŠเบฑเป‰เบ™เบ‚เบญเบ‡เบกเบฑเบ™, เปเบ•เปˆเปเบเป‰เป„เบ‚เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡. เปƒเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบตเปˆเบšเปเปˆเบกเบตเปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบกเบฒเบˆเบฒเบเปƒเบช, เบเบปเบเป€เบงเบฑเป‰เบ™เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™? เปเบฅเบฐเบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบญเบปเบฒเบกเบฑเบ™เบˆเบฒเบเบšเปˆเบญเบ™เบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™เบ–เบทเบเบ•เป‰เบญเบ‡เบซเบกเบปเบ”เบˆเบปเบ™เบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเบ—เบปเบ”เบชเบญเบšเบงเบดเบ—เบตเบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”.

เบ™เบตเป‰เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ—เบปเบ”เบชเบญเบšเป„เบ”เป‰เปเบ™เบงเปƒเบ”? เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบซเบงเบฑเบ‡โ€‹เบงเปˆเบฒ fans เบ‚เบญเบ‡โ€‹เบซเบ™เปˆเบงเบโ€‹เบ‡เบฒเบ™โ€‹, เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบ›เบฐโ€‹เป‚เบซเบเบ”โ€‹เปเบฅเบฐโ€‹เบญเบทเปˆเบ™เป†โ€‹เบˆเบฐโ€‹เปเบšเปˆเบ‡โ€‹เบ›เบฑเบ™โ€‹เปƒเบ™โ€‹เบ„เปเบฒโ€‹เป€เบซเบฑเบ™โ€‹.

เบ•เบปเบเบฅเบปเบ‡, เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบฅเบฐเบซเบฑเบ”เบญเบทเปˆเบ™:

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;

เบ„เปเบฒเป€เบซเบฑเบ™เบ™เบตเป‰ "เบชเป‰เบฒเบ‡เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡" เปเบ™เบฐเบ™เปเบฒเบงเปˆเบฒเบžเบฝเบ‡เปเบ•เปˆเบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ (เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบเบฑเบ™เบฎเป‰เบฒเบเบเบฒเบ™เบšเปเบฒเบฅเบธเบ‡เบฎเบฑเบเบชเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบšเป?), เปเบฅเบฐเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเปเบกเปˆเบ™เบœเบฐเบฅเบดเบ”เป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ„เปเบฒเบ–เบฒเบกเบญเบทเปˆเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™ - เบงเปˆเบฒเปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆ เบšเปเปˆเบชเบปเบกเบšเบนเบ™ (a la GPL blobs เปƒเบ™ Linux kernel), เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เบซเบปเบงเบ‚เปเป‰เบชเปเบฒเบฅเบฑเบšเบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบญเบ‡เปเบฅเป‰เบง.

เปเบ•เปˆเบžเบฝเบ‡เบžเป. เบ‚เปเปƒเบซเป‰เบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเป‚เบ›เป‚เบ•เบ„เบญเบ™เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡ serialization เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰.

MT Proto

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบซเป‰เป€เบ›เบตเบ” เบฅเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹เบ—เบปเปˆเบงโ€‹เป„เบ› ะธ เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบžเบดเบ—เบตเบเบฒเบ™ เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒ stumble over เปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเบš. เปเบฅเบฐเบกเบตเบ„เบงเบฒเบกเบญเบธเบ”เบปเบกเบชเบปเบกเบšเบนเบ™เบ‚เบญเบ‡เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบง, เบ™เบตเป‰เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบ‚เบญเบ‡ Telegram - เบเบฒเบ™เป€เบญเบตเป‰เบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ•เปˆเบฒเบ‡เป†, เบซเบผเบทเบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ”เป‰เบงเบเบ„เปเบฒเบ”เบฝเบง, เบซเบผเบทเปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™ (เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™ API เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เบŠเบธเบ”เบชเบฐเบ•เบดเบเป€เบเบต, เบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™. เป€เบˆเบปเป‰เบฒเบ„เบดเบ”เปเบ™เบงเปƒเบ”).

เบ•เบปเบงเบขเปˆเบฒเบ‡, "เบ‚เปเป‰เบ„เบงเบฒเบก" เปเบฅเบฐ "เบเบญเบ‡เบ›เบฐเบŠเบธเบก" เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เบเปˆเบงเบฒเปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบฅเบนเบเบ„เป‰เบฒ Telegram เบ›เบปเบเบเบฐเบ•เบด. เบ”เบต, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบก, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ•เบตเบ„เบงเบฒเบกเบซเบกเบฒเบเปƒเบ™เบ„เปเบฒเบชเบฑเบš OOP, เบซเบผเบทเป€เบญเบตเป‰เบ™เบงเปˆเบฒ "packet" - เบ™เบตเป‰เปเบกเปˆเบ™เบ•เปˆเปเบฒ, เบฅเบฐเบ”เบฑเบšเบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡, เบšเปเปˆเบกเบตเบ‚เปเป‰เบ„เบงเบฒเบกเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš, เบกเบตเบซเบผเบฒเบเบ‚เปเป‰เบ„เบงเบฒเบกเบšเปเบฅเบดเบเบฒเบ™. . เปเบ•เปˆเบเบญเบ‡เบ›เบฐเบŠเบธเบก ... เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เปเบฒเบญเบดเบ”.

เบŠเบฑเป‰เบ™เบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡

เบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡. เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเบญเบเบžเบงเบเป€เบฎเบปเบฒเบเปˆเบฝเบงเบเบฑเบš 5 เบ—เบฒเบ‡เป€เบฅเบทเบญเบ:

  • TCP
  • เป€เบ•เบปเป‰เบฒเบฎเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ•เปŒ
  • Websocket เบœเปˆเบฒเบ™ HTTPS
  • HTTP
  • เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ HTTP

Vasily, [15.06.18 15:04] เบเบฑเบ‡เบกเบตเบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡ UDP, เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเบกเบตเป€เบญเบเบฐเบชเบฒเบ™

เปเบฅเบฐ TCP เปƒเบ™เบชเบฒเบก variants

เบญเบฑเบ™เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš UDP เบซเบผเบฒเบเบเบงเปˆเบฒ TCP, เปเบ•เปˆเบฅเบฐเบŠเบธเบ”เบ›เบฐเบเบญเบšเบกเบตเบˆเปเบฒเบ™เบงเบ™เบฅเปเบฒเบ”เบฑเบšเปเบฅเบฐ crc
เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบขเบนเปˆเปƒเบ™เบฅเบปเบ”เป€เบ‚เบฑเบ™เบˆเบถเปˆเบ‡เป€เบˆเบฑเบšเบ›เบงเบ”?

เปเบฅเป‰เบง, เบ”เบฝเบงเบ™เบตเป‰เบกเบฑเบ™เบขเบนเปˆเปเบฅเป‰เบง TCP เบกเบตเบขเบนเปˆเปƒเบ™ 4 เบฎเบธเปˆเบ™เปเบฅเป‰เบง:

  • เบ›เบฐเบชเบปเบก
  • เบฅเบฐเบ”เบฑเบšเบ›เบฒเบ™เบเบฒเบ‡
  • padded เบเบฒเบ‡
  • เบขเปˆเบฒเบ‡โ€‹เป€เบ•เบฑเบกโ€‹เบ—เบตเปˆ

เบ”เบต, ok, Padded intermediate เบชเปเบฒเบฅเบฑเบš MTProxy, เบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเบ•เปเปˆเบกเบฒเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเป€เบซเบ”เบเบฒเบ™เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบชเบฝเบ‡. เปเบ•เปˆเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบชเบญเบ‡เบชเบฐเบšเบฑเบš (เบชเบฒเบกเปƒเบ™เบˆเปเบฒเบ™เบงเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”) เป€เบกเบทเปˆเบญเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบ”เป‰เบงเบเบซเบ™เบถเปˆเบ‡? เบ—เบฑเบ‡เบชเบตเปˆเบขเปˆเบฒเบ‡เบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบงเบดเบ—เบตเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ„เบงเบฒเบกเบเบฒเบงเปเบฅเบฐ payload เบ‚เบญเบ‡ MTProto เบ•เบปเป‰เบ™เบ•เป, เป€เบŠเบดเปˆเบ‡เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบ•เบทเปˆเบกเบญเบตเบ:

  • เปƒเบ™เบซเบเปเป‰เบกเบฑเบ™เปเบกเปˆเบ™ 1 เบซเบผเบท 4 bytes, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™ 0xef, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบฎเปˆเบฒเบ‡เบเบฒเบ
  • เปƒเบ™เบฅเบฐเบ”เบฑเบšเบ›เบฒเบ™เบเบฒเบ‡เบ™เบตเป‰เปเบกเปˆเบ™ 4 bytes เบ‚เบญเบ‡เบ„เบงเบฒเบกเบเบฒเบงเปเบฅเบฐเบžเบฒเบเบชเบฐเบซเบ™เบฒเบก, เปเบฅเบฐเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบฅเบนเบเบ„เป‰เบฒเบ•เป‰เบญเบ‡เบชเบปเปˆเบ‡ 0xeeeeeeee เป€เบžเบทเปˆเบญเบŠเบตเป‰เบšเบญเบเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบฅเบฐเบ”เบฑเบšเบ›เบฒเบ™เบเบฒเบ‡
  • เปƒเบ™เป€เบ•เบฑเบกเบ—เบตเปˆเบ•เบดเบ”เบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”, เบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ‚เบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบ: เบ„เบงเบฒเบกเบเบฒเบง, เบˆเปเบฒเบ™เบงเบ™เบฅเปเบฒเบ”เบฑเบš, เปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เบญเบฑเบ™เบ—เบตเปˆเบชเปˆเบงเบ™เปƒเบซเบเปˆเปเบกเปˆเบ™ MTProto, เบฎเปˆเบฒเบ‡เบเบฒเบ, CRC32. เปเบกเปˆเบ™เปเบฅเป‰เบง, เบ—เบฑเบ‡เปเบปเบ”เบ™เบตเป‰เปเบกเปˆเบ™เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡ TCP. เป€เบŠเบดเปˆเบ‡เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบเบฐเปเบชเป„เบšเบ•เปŒเบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš; เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบฅเปเบฒเบ”เบฑเบš, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ checksums. เบ•เบปเบเบฅเบปเบ‡, เบ•เบญเบ™เบ™เบตเป‰เบšเบฒเบ‡เบ„เบปเบ™เบˆเบฐเบ„เบฑเบ”เบ„เป‰เบฒเบ™เบ‚เป‰เบญเบเบงเปˆเบฒ TCP เบกเบต 16-bit checksum, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เปเป‰เบกเบนเบ™เป€เบชเบเบซเบฒเบเป€เบเบตเบ”เบ‚เบทเป‰เบ™. เบเบดเปˆเบ‡เปƒเบซเบเปˆ, เปเบ•เปˆเบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเบžเบงเบเป€เบฎเบปเบฒเบกเบตเป‚เบ›เป‚เบ•เบ„เบญเบ™ cryptographic เบ—เบตเปˆเบกเบต hashes เบเบฒเบงเบเบงเปˆเบฒ 16 bytes, เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ - เปเบฅเบฐเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™ - เบˆเบฐเบ–เบทเบเบˆเบฑเบšเป„เบ”เป‰เป‚เบ”เบ SHA mismatch เปƒเบ™เบฅเบฐเบ”เบฑเบšเบ—เบตเปˆเบชเบนเบ‡เบเบงเปˆเบฒ. เบšเปเปˆเบกเบตเบˆเบธเบ”เปƒเบ”เบขเบนเปˆเปƒเบ™ CRC32 เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ™เบตเป‰.

เปƒเบซเป‰เบชเบปเบกเบ—เบฝเบšเปเบšเบšเบซเบเปเป‰, เปƒเบ™เบซเบ™เบถเปˆเบ‡ byte เบ‚เบญเบ‡เบ„เบงเบฒเบกเบเบฒเบงเปเบกเปˆเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบเบฑเบš Intermediate, เป€เบŠเบดเปˆเบ‡ justifies "เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบ‚เปเป‰เบกเบนเบ™ 4-byte," เบŠเบถเปˆเบ‡เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เป„เบฎเป‰เบชเบฒเบฅเบฐ. เปเบกเปˆเบ™เบซเบเบฑเบ‡, เบกเบฑเบ™เป€เบŠเบทเปˆเบญเบเบฑเบ™เบงเปˆเบฒเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Telegram เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบŠเบฑเบญเบเป€เบเบฑเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ buffer เบ—เบตเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡? เบ—เปˆเบฒเบ™เบเบฑเบ‡เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เปเบ™เบงเบ™เบตเป‰, เป€เบžเบฒเบฐเบงเปˆเบฒเบเบฒเบ™เบญเปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบ„เบทเบ™เบ—เปˆเบฒเบ™เบˆเปเบฒเบ™เบงเบ™ bytes เปƒเบ” (เปเบฅเบฐเบเบฑเบ‡เบกเบตเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ•เบปเบงเปเบ—เบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡ ...). เบซเบผเบทเปƒเบ™เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบšเบฅเบฑเบญเบ Abridged เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบกเบต padding hefty เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡ 16 bytes - เบ›เบฐเบซเบเบฑเบ” 3 bytes เบšเบฒเบ‡เบ„เบฑเป‰เบ‡ ?

เบ„เบปเบ™เบซเบ™เบถเปˆเบ‡เป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบ›เบฐเบ—เบฑเบšเปƒเบˆเบ—เบตเปˆ Nikolai Durov เบเปเปˆเบกเบฑเบเบ—เบตเปˆเบˆเบฐเบ›เบฐเบ”เบดเบ”เบฅเปเป‰, เบฅเบงเบกเบ—เบฑเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เป‚เบ”เบเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ•เบปเบงเบˆเบดเบ‡.

เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡เบญเบทเปˆเบ™เป†, เบฅเบงเบกเบ—เบฑเบ‡. เป€เบงเบฑเบšเปเบฅเบฐ MTProxy, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบญเบฒเบ”เบˆเบฐเบขเบนเปˆเปƒเบ™เบเบฒเบ™เบ•เบญเบšเบญเบทเปˆเบ™, เบ–เป‰เบฒเบกเบตเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป. เบเปˆเบฝเบงเบเบฑเบš MTProxy เบ”เบฝเบงเบเบฑเบ™เบ™เบตเป‰, เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบทเปˆเบžเบฝเบ‡เปเบ•เปˆเบงเปˆเบฒเบšเปเปˆเบ”เบปเบ™เบซเบฅเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเปƒเบ™เบ›เบต 2018, เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เบ—เบตเปˆเบˆเบฐเบšเบฅเบฑเบญเบเบกเบฑเบ™เบขเปˆเบฒเบ‡เป„เบงเบงเบฒ, เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป€เบžเบทเปˆเบญ bypass เบชเบฐเบเบฑเบ”เป‚เบ”เบ เบ‚เบฐเปœเบฒเบ”เบŠเบธเบ”! เปเบฅเบฐเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเป€เบŠเบตเบšเป€เบงเบต MTProxy เบ—เบตเปˆเบ‚เบฝเบ™ (เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เป‚เบ”เบ Waltman) เปƒเบ™ C เป„เบ”เป‰เบ–เบทเบเบœเบนเบเบกเบฑเบ”เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เบเบฑเบšเบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡ Linux, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ™เบตเป‰เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบ—เบฑเบ‡เบซเบกเบปเบ” (Phil Kulin เบˆเบฐเบขเบทเบ™เบขเบฑเบ™), เปเบฅเบฐเบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบขเบนเปˆเปƒเบ™ Go เบซเบผเบท Node.js เบˆเบฐ. เบžเปเบ”เบตเบขเบนเปˆเปƒเบ™เบšเปเปˆเป€เบเบตเบ™เบฎเป‰เบญเบเบชเบฒเบ.

เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบฐเบซเบผเบธเบšเบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบฎเบนเป‰เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เบ‚เบญเบ‡เบ›เบฐเบŠเบฒเบŠเบปเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบžเบฒเบ, เบซเบผเบฑเบ‡เบˆเบฒเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบšเบฑเบ™เบซเบฒเบญเบทเปˆเบ™เป†. เบชเปเบฒเบฅเบฑเบšเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เปƒเบซเป‰เบเป‰เบฒเบเป„เบ› OSI layer 5, session - เบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบงเบฒเบ‡ session MTProto.

เบเบฐเปเบˆ, เบ‚เปเป‰เบ„เบงเบฒเบก, เบเบญเบ‡เบ›เบฐเบŠเบธเบก, Diffie-Hellman

เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบงเบฒเบ‡เป„เบงเป‰เบšเปˆเบญเบ™เบ™เบฑเป‰เบ™เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบ—เบฑเบ‡เปเบปเบ”... เป€เบŠเบ”เบŠเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เป€เบŠเบ”เบŠเบฑเบ™เบ”เบฝเบงเบเบฑเบšเบ—เบตเปˆเป€เบซเบฑเบ™เป„เบ”เป‰เปƒเบ™เบชเปˆเบงเบ™เบ•เบดเบ”เบ•เปเปˆเบžเบฒเบเปƒเบ•เป‰ Active sessions. เปเบ•เปˆเปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡.

เบเบฒเบ™เบงเบดเบžเบฒเบเบงเบดเบˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบžเบดเบ—เบตเบเบฒเบ™ เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ‚เบญเบ‡ Telegram. เบชเปˆเบงเบ™เบ—เบต 1, เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™: เบ›เบฐเบชเบปเบšเบเบฒเบ™เปƒเบ™เบเบฒเบ™เบ‚เบฝเบ™เบฅเบนเบเบ„เป‰เบฒเบˆเบฒเบ scratch - TL, MT

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบชเบฒเบเบžเบฑเบ™เป„เบšเบ•เปŒเบ‚เบญเบ‡เบ„เบงเบฒเบกเบเบฒเบงเบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเบˆเบฒเบเบŠเบฑเป‰เบ™เบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบซเบผเบทเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เปเบฒเบกเบฐเบ”เบฒ - เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบขเบนเปˆเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ•เบปเบเบฅเบปเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปเบฅเบฐเบเปเบฒเบฅเบฑเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบปเบงเบˆเบดเบ‡. เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบญเบฑเบ™เปƒเบ”เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ "เบเบธเบ™เปเบˆ" เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš? เบ‚เปเบ„เบงเบฒเบกเบเบฐเบˆเปˆเบฒเบ‡เปเบˆเป‰เบ‡เบเปˆเบฝเบงเบเบฑเบšเบšเบฑเบ™เบซเบฒเบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบ—เบตเบกเบ‡เบฒเบ™ Telegram เป€เบญเบ‡ (เบ‚เป‰เบญเบเบ‚เปเป‚เบ—เบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบ›เป€เบญเบเบฐเบชเบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเป€เบญเบ‡เบˆเบฒเบเบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”เบ”เป‰เบงเบเบชเบฐเบซเบกเบญเบ‡เบ—เบตเปˆเป€เบกเบทเปˆเบญเบเบฅเป‰เบฒเปƒเบ™เป€เบงเบฅเบฒ 4 เป‚เบกเบ‡เป€เบŠเบปเป‰เบฒ, เบกเบฑเบ™เบ‡เปˆเบฒเบเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบ›เบฐเป„เบงเป‰เบšเบฒเบ‡เบ›เบฐเป‚เบซเบเบ):

เบกเบตเบชเบญเบ‡เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ เบเบญเบ‡เบ›เบฐเบŠเบธเบก - เบซเบ™เบถเปˆเบ‡เปƒเบ™ UI เบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เบžเบฒเบเปƒเบ•เป‰ "เบเบญเบ‡เบ›เบฐเบŠเบธเบกเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™", เป€เบŠเบดเปˆเบ‡เปเบ•เปˆเบฅเบฐเบเบญเบ‡เบ›เบฐเบŠเบธเบกเบเบปเบ‡เบเบฑเบšเบญเบธเบ›เบฐเบเบญเบ™เบ—เบฑเบ‡เบซเบกเบปเบ” / OS.
เบชเบญเบ‡ - เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒ MTProto, เบ—เบตเปˆเบกเบตเบˆเปเบฒเบ™เบงเบ™เบฅเปเบฒเบ”เบฑเบšเบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก (เปƒเบ™เบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเปƒเบ™เบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒ) เปƒเบ™เบกเบฑเบ™, เปเบฅเบฐเบญเบฑเบ™เปƒเบ” เบญเบฒเบ”เบˆเบฐเบขเบนเปˆเบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ TCP เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฑเป‰เบ‡ MTProto เบซเบผเบฒเบเบ„เบฑเป‰เบ‡เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบžเบทเปˆเบญเป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบ”เบฒเบงเป‚เบซเบผเบ”เป„เบŸเบฅเปŒ.

เบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบญเบ‡เบญเบฑเบ™เบ™เบตเป‰ เบเบญเบ‡เบ›เบฐเบŠเบธเบก เบกเบตเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ” เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”. เปƒเบ™เบเปเบฅเบฐเบ™เบต degenerate, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบงเบปเป‰เบฒเป„เบ”เป‰ เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒ UI เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เบเบฑเบš เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”, เปเบ•เปˆเบญเบฐเบ™เบดเบˆเบฒ, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบชเบฑเบšเบชเบปเบ™. เปƒเบซเป‰เป€เบšเบดเปˆเบ‡:

  • เบœเบนเป‰เปƒเบŠเป‰เปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™เปƒเบซเบกเปˆเบ—เปเบฒเบญเบดเบ”เบชเป‰เบฒเบ‡ auth_key เปเบฅเบฐเบœเบนเบเบกเบฑเบ™เป„เบงเป‰เปƒเบ™เบšเบฑเบ™เบŠเบต, เบ•เบปเบงเบขเปˆเบฒเบ‡เบœเปˆเบฒเบ™ SMS - เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™ เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”
  • เบกเบฑเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบžเบฒเบเปƒเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ” เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒ MTProto, เป€เบŠเบดเปˆเบ‡เบกเบต session_id เบžเบฒเบโ€‹เปƒเบ™โ€‹เบ•เบปเบงโ€‹เบ—เปˆเบฒเบ™โ€‹เป€เบญเบ‡โ€‹.
  • เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰, เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™ เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ” ะธ session_id เบชเบฒเบกเบฒเบ”เป€เบญเบตเป‰เบ™เป„เบ”เป‰ เบ•เบปเบงเบขเปˆเบฒเบ‡ - เบ„เปเบฒเบ™เบตเป‰เบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เปเบฅเบฐเบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡
  • เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบฅเบนเบเบ„เป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ”เป„เบ”เป‰ เบซเบผเบฒเบเป†เบ„เบฑเป‰เบ‡ เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒ MTProto เบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบ”เบฝเบงเบเบฑเบ™ auth_key - เบเบฑเบš DC เบ”เบฝเบงเบเบฑเบ™.
  • เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบทเป‰เบซเบ™เบถเปˆเบ‡เบฅเบนเบเบ„เป‰เบฒเบˆเบฐเบ•เป‰เบญเบ‡เบฎเป‰เบญเบ‡เบ‚เปเป„เบŸเบฅเปŒเบˆเบฒเบ DC เบญเบทเปˆเบ™ - เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰ DC เปƒเบซเบกเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ” auth_key !
  • เป€เบžเบทเปˆเบญเปเบˆเป‰เบ‡เปƒเบซเป‰เบฅเบฐเบšเบปเบšเบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบœเบนเป‰เปƒเบŠเป‰เปƒเบซเบกเปˆเบ—เบตเปˆเบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™, เปเบ•เปˆเบ„เบทเบเบฑเบ™ เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ” (เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒ UI), เบฅเบนเบเบ„เป‰เบฒเปƒเบŠเป‰เบเบฒเบ™เป‚เบ— API auth.exportAuthorization เปƒเบ™โ€‹เบšเป‰เบฒเบ™ DC auth.importAuthorization เปƒเบ™ DC เปƒเบซเบกเปˆ.
  • เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™, เบซเบผเบฒเบเป†เบ„เบปเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบตเบ” เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒ MTProto (เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบกเบตเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡ session_id) เบเบฑเบš DC เปƒเบซเบกเปˆเบ™เบตเป‰, เบžเบฒเบเปƒเบ•เป‰ เบฅเบฒเบง auth_key.
  • เบชเบธเบ”เบ—เป‰เบฒเบ, เบฅเบนเบเบ„เป‰เบฒเบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™ Perfect Forward Secrecy. เบ—เบธเบเป† auth_key เปเบกเปˆเบ™ เบ–เบฒเบงเบญเบ™ key - per DC - เปเบฅเบฐเบฅเบนเบเบ„เป‰เบฒเบชเบฒเบกเบฒเบ”เป‚เบ—เบซเบฒ auth.bindTempAuthKey เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ เบŠเบปเปˆเบงเบ„เบฒเบง auth_key - เปเบฅเบฐเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡ temp_auth_key เบ•เปเปˆ DC, เบ—เบปเปˆเบงเป„เบ›เบเบฑเบšเบ—เบธเบเบ„เบปเบ™ เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒ MTProto เบเบฑเบš DC เบ™เบตเป‰.

เปเบˆเป‰เบ‡เบเบฒเบ™, เบ™เบฑเป‰เบ™ เป€เบเบทเบญ (เปเบฅเบฐเป€เบเบทเบญเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”) เบเบฑเบ‡เป€เบ›เบฑเบ™เบญเบฑเบ™เบซเบ™เบถเปˆเบ‡ auth_key เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เปเบšเปˆเบ‡เบ›เบฑเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ—เบธเบเบ„เบปเบ™ เบŠเปˆเบงเบ‡เป€เบงเบฅเบฒ MTProto เบเบฑเบš DC เบ”เบฝเบงเบเบฑเบ™.

"เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ TCP เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™" เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเปเบ™เบงเปƒเบ”? เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™: เบ„เบธเบเบเบตเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒ - เบกเบฑเบ™เบเบฑเบ‡เบ„เบปเบ‡เบขเบนเปˆ (เบขเบนเปˆเบฅเบญเบ”) เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ TCP เบซเบผเบฒเบเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเปƒเบซเป‰, เปเบ•เปˆเบกเบทเป‰เบซเบ™เบถเปˆเบ‡เบกเบฑเบ™เบšเปเปˆเบ”เบต. เบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบš HTTP, เปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบก MTProto เบžเบฒเบเปƒเบ™เป€เบŠเบ”เบŠเบฑเบ™เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบฅเปเบฒเบ”เบฑเบšเปเบฅเบฐเบขเบทเบ™เบขเบฑเบ™; เบ–เป‰เบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบญเบธเป‚เบกเบ‡, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ–เบทเบเบ—เปเบฒเบฅเบฒเบ - เบซเบผเบฑเบ‡เบˆเบฒเบเบชเป‰เบฒเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปƒเบซเบกเปˆ, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบˆเบฐเบชเบปเปˆเบ‡เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปƒเบ™เบเบญเบ‡เบ›เบฐเบŠเบธเบกเบ™เบตเป‰เบ—เบตเปˆเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบชเบปเปˆเบ‡เปƒเบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰. เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ TCP.

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ‚เปเป‰เบกเบนเบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบซเบผเบธเบšเป„เบ”เป‰เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบชเบทเบšเบชเบงเบ™เบซเบผเบฒเบเป€เบ”เบทเบญเบ™. เปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบนเบเบ„เป‰เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบšเป? - เปƒเบซเป‰เป€เบฎเบปเบฒเบเบฑเบšเบ„เบทเบ™เบชเบนเปˆเบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

เบชเบฐเบ™เบฑเป‰เบ™เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡ auth_key on the เบฎเบธเปˆเบ™ Diffie-Hellman เบˆเบฒเบ Telegram. เบฅเบญเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆเป€เบญเบเบฐเบชเบฒเบ™...

Vasily, [19.06.18 20:05] data_with_hash := SHA1(data) + data + ( any random bytes ); เป€เบŠเบฑเปˆเบ™เบงเปˆเบฒเบ„เบงเบฒเบกเบเบฒเบงเป€เบ—เบปเปˆเบฒเบเบฑเบš 255 bytes;
encrypted_data := RSA(data_with_hash, server_public_key); เบ•เบปเบงเป€เบฅเบเบเบฒเบง 255 เป„เบšเบ•เปŒ (เปƒเบซเบเปˆ endian) เบ–เบทเบเบเบปเบเบ‚เบถเป‰เบ™เบกเบฒเป€เบ›เบฑเบ™เบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เบ—เบตเปˆเบˆเบณเป€เบ›เบฑเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเป‚เบกเบ”เบนเบฅเบ—เบตเปˆเบˆเบณเป€เบ›เบฑเบ™, เปเบฅเบฐ เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฐเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เป€เบ›เบฑเบ™เบ•เบปเบงเป€เบฅเบ 256 เป„เบšเบ•เปŒ.

เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบกเบต dope DH เบšเบฒเบ‡

เบšเปเปˆเบ„เบทเบเบฑเบš DH เบ‚เบญเบ‡เบ„เบปเบ™เบ—เบตเปˆเบกเบตเบชเบธเบ‚เบฐเบžเบฒเบšเบ”เบต
เบšเปเปˆเบกเบตเบเบฐเปเบˆเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเบชเบญเบ‡เบญเบฑเบ™เปƒเบ™ dx

เบ”เบต, เปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบ„เบฑเบ”เบญเบญเบ, เปเบ•เปˆเบชเบดเปˆเบ‡เป€เบชเบ”เป€เบซเบผเบทเบญเบ—เบตเปˆเบเบฑเบ‡เบ„เบปเบ‡เบขเบนเปˆ - เบซเบผเบฑเบเบ–เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบกเปˆเบ™เป€เบฎเบฑเบ”เป‚เบ”เบเบฅเบนเบเบ„เป‰เบฒเบงเปˆเบฒเบฅเบฒเบงเบชเบฒเบกเบฒเบ”เป€เบญเบปเบฒเบ•เบปเบงเป€เบฅเบเป„เบ”เป‰. เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เป‚เบˆเบกเบ•เบต DoS. เปเบฅเบฐเบเบฐเปเบˆ RSA เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบžเบฝเบ‡เปเบ•เปˆเบ„เบฑเป‰เบ‡เบ”เบฝเบงเปƒเบ™เบ—เบดเบ”เบ—เบฒเบ‡เบ”เบฝเบง, เบชเปเบฒเบ„เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” new_nonce. เปเบ•เปˆเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เบ—เบตเปˆเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ‡เปˆเบฒเบเบ”เบฒเบเบ™เบตเป‰เบˆเบฐเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เป€เบˆเบปเป‰เบฒเบˆเบฐเบ•เป‰เบญเบ‡เบ›เบฐเป€เบŠเบตเบ™เบเบฑเบšเบซเบเบฑเบ‡?

Vasily, [20.06.18/00/26 XNUMX:XNUMX] เบ‚เป‰เบญเบเบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบฎเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป appid เป€เบ—เบทเปˆเบญ

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ™เบตเป‰เป„เบ›เบซเบฒ DH

เปเบฅเบฐ, เปƒเบ™ dock เบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡เบกเบฑเบ™เบšเบญเบเบงเปˆเบฒเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบเบฑเบš 4 bytes เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”. เบซเบกเบปเบ”โ€‹เป€เบ—เบปเปˆเบฒโ€‹เบ™เบตเป‰

เปเบฅเป‰เบง, เบฅเบฒเบงเบšเบญเบเบ‚เป‰เบญเบ -404, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบซเบเบฑเบ‡?

เบชเบฐเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบšเบญเบเบฅเบฒเบงเบงเปˆเบฒ: "เบˆเบฑเบš bullshit เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ”เป€เบŠเบตเบŸเป€เบงเบตเบ”เป‰เบงเบเบฅเบฒเบเบ™เบดเป‰เบงเบกเบทเปเบšเบšเบ™เบตเป‰, เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™ DH," เปเบฅเบฐเบกเบฑเบ™เบ•เบญเบšเบ”เป‰เบงเบ 404 เป‚เบ‡เปˆ.

เป€เบˆเบปเป‰เบฒเบ„เบดเบ”เปเบ™เบงเปƒเบ”เบเบฑเบšเบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เบ‚เบญเบ‡เป€เบŠเบตเบšเป€เบงเบตเบ™เบตเป‰? เบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”? เบšเปเปˆเบกเบตเปƒเบœเบ–เบฒเบก (เปเบ•เปˆเบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™เปƒเบ™เบžเบฒเบเบ—เบตเบชเบญเบ‡).

เบ—เบตเปˆเบ™เบตเป‰เบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เป€เบฎเบฑเบ”เบขเบนเปˆเปƒเบ™ dock เป„เบ”เป‰

เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบซเบเบฑเบ‡โ€‹เบญเบตเบโ€‹เปเบ”เปˆโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบฎเบฑเบ”โ€‹, เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบเบฑเบ™โ€‹เบขเบฒเบโ€‹เบˆเบฐโ€‹เบ›เปˆเบฝเบ™โ€‹เบ•เบปเบงโ€‹เป€เบฅเบโ€‹เบเบฑเบšโ€‹เบ„เบทเบ™โ€‹เป„เบ›โ€‹เบšเปˆเบญเบ™โ€‹

เบชเบญเบ‡เบ•เบปเบงเป€เบฅเบ 32 เบšเบดเบ”. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบซเบธเป‰เบกเบซเปเปˆเบžเบงเบเบกเบฑเบ™เบ„เบทเบเบฑเบšเบ„เบปเบ™เบญเบทเปˆเบ™

เปเบ•เปˆเบšเปเปˆ, เบชเบญเบ‡เบญเบฑเบ™เบ™เบตเป‰เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เปเบ–เบงเบ—เปเบฒเบญเบดเบ”เป€เบ›เบฑเบ™ BE

Vadim Goncharov, [20.06.18 15:49] เปเบฅเบฐเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ™เบตเป‰ 404?

Vasily, [20.06.18 15:49] เปเบกเปˆเบ™เปเบฅเป‰เบง!

Vadim Goncharov, [20.06.18 15:50] เบชเบฐเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบฅเบฒเบงเบชเบฒเบกเบฒเบ” "เบšเปเปˆเบžเบปเบš"

Vasily, [20.06.18 15:50] เบ›เบฐเบกเบฒเบ™

เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบšเปเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบŠเบญเบโ€‹เบซเบฒโ€‹เบเบฒเบ™โ€‹เป€เบชเบทเปˆเบญเบกโ€‹เบชเบฐโ€‹เบžเบฒเบšโ€‹เบ”เบฑเปˆเบ‡โ€‹เบเปˆเบฒเบงโ€‹เป€เบ›เบฑเบ™โ€‹เบ›เบฑเบ”โ€‹เป„เบˆโ€‹เบ—เบตเปˆโ€‹เบชเปเบฒโ€‹เบ„เบฑเบ™โ€‹)โ€‹.

เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบˆเบฑเบ”เบเบฒเบ™เบเบฒเบ™เบฅเบฒเบเบ‡เบฒเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”

Vasily, [20.06.18 20:18] เป‚เบญเป‰, เบเบฑเบ‡เบกเบต MD5. เปเบฅเป‰เบงเบชเบฒเบก hashes เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™

เบฅเบฒเบเบ™เบดเป‰เบงเบกเบทเบซเบผเบฑเบเปเบกเปˆเบ™เบ„เบณเบ™เบงเบ™เบ”เบฑเปˆเบ‡เบ™เบตเป‰:

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

SHA1 เปเบฅเบฐ sha2

เบชเบฐเบ™เบฑเป‰เบ™เปƒเบซเป‰เป€เบฎเบปเบฒเปƒเบชเปˆเบกเบฑเบ™ auth_key เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš 2048 bits เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ”เป‚เบ”เบเปƒเบŠเป‰ Diffie-Hellman. เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบซเบเบฑเบ‡? เบ•เปเปˆเป„เบ›เบžเบงเบเป€เบฎเบปเบฒเบ„เบปเป‰เบ™เบžเบปเบšเบงเปˆเบฒ 1024 bits เบ•เปˆเปเบฒเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบ—เบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก ... เปเบ•เปˆเบ‚เปเปƒเบซเป‰เบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบ•เบญเบ™เบ™เบตเป‰. เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เบงเบฒเบกเบฅเบฑเบšเบ—เบตเปˆเปเบšเปˆเบ‡เบ›เบฑเบ™เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ‚เบญเบ‡เบเบญเบ‡เบ›เบฐเบŠเบธเบก TLS เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบกเบตเบฅเบฒเบ„เบฒเปเบžเบ‡เบซเบผเบฒเบ. เปเบ•เปˆเป€เบŠเบตเบšเป€เบงเบตเบเบฑเบ‡เบšเปเปˆเบฎเบนเป‰เบซเบเบฑเบ‡เป€เบฅเบตเบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เปƒเบœ! เบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™, เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบง. เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ„เบดเบ”เปƒเบ™เปเบ‡เปˆเบ‚เบญเบ‡ "เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™", เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบ„เบตเบเป€เบฎเบฑเบ”เปƒเบ™ ICQ, เบซเบผเบทเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบ "login-key", เปƒเบ™ SSH (เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เบšเบฒเบ‡ gitlab / github). เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบญเบฑเบ™เปœเบถเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเป€เบ›เบตเบ”เป€เบœเบตเบเบŠเบทเปˆ. เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบšเบญเบเบžเบงเบเป€เบฎเบปเบฒเบงเปˆเบฒ "เป€เบšเบตเป‚เบ—เบฅเบฐเบชเบฑเบšเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ–เบทเบเปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป‚เบ”เบ DC เบญเบทเปˆเบ™"? เบซเบผเบทเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡ "เป€เบšเบตเป‚เบ—เบฅเบฐเบชเบฑเบšเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบ–เบทเบเบซเป‰เบฒเบก"? เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เปเบกเปˆเบ™เบฎเบฑเบเบชเบฒเบเบธเบ™เปเบˆเปƒเบ™เบ„เบงเบฒเบกเบซเบงเบฑเบ‡เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เปเบฅเบฐเบˆเบฐเบšเปเปˆเป€เบ™เบปเปˆเบฒเป€เบ›เบทเปˆเบญเบเปƒเบ™เป€เบงเบฅเบฒเบ™เบฑเป‰เบ™.

เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒ "เป„เบ”เป‰เบฎเบฑเบš" เบกเบฑเบ™เบ”เป‰เบงเบเบเบฒเบ™เบˆเบญเบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเป„เบงเป‰เบงเบฒเบ‡เปƒเบˆเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบšเป? เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบกเบฑเบ™เบ›เบญเบก? เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบฅเบฑเบšเปเบกเปˆเบ™เบˆเปเบฒเป€เบ›เบฑเบ™:

Vasily, [21.06.18 17:53] เบžเบงเบเป€เบ‚เบปเบฒเบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เบฅเบนเบเบ„เป‰เบฒเบกเบทเบ–เบทเบเบงเบ”เป€เบšเบดเปˆเบ‡เบˆเปเบฒเบ™เบงเบ™ 2kbit เบชเปเบฒเบฅเบฑเบš primality%)

เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เป€เบฅเบตเบ, nafeijoa

Vasily, [21.06.18 18:02] เป€เบญเบเบฐเบชเบฒเบ™เบšเปเปˆเป„เบ”เป‰เบšเบญเบเบงเปˆเบฒเบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบกเบฑเบ™เบเบฒเบเป€เบ›เบฑเบ™เบšเปเปˆเบ‡เปˆเบฒเบเบ”เบฒเบ

เบšเปเปˆเป„เบ”เป‰เป€เบงเบปเป‰เบฒ. เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบฅเบนเบเบ„เป‰เบฒ Android เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰? เบ เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆ (เปเบฅเบฐเปเบกเปˆเบ™เปเบฅเป‰เบง, เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ) - เบเป‰เบญเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบงเบปเป‰เบฒเบงเปˆเบฒ, เบ‚เป‰เบญเบเบˆเบฐเบญเบญเบเบˆเบฒเบเบ™เบตเป‰เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰:

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

เบšเปเปˆ, เปเบ™เปˆเบ™เบญเบ™เบกเบฑเบ™เบเบฑเบ‡เบกเบตเบขเบนเปˆ เบšเบฒเบ‡ เบกเบตโ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹เบ‚เบญเบ‡โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹, เปเบ•เปˆโ€‹เบชเปˆเบงเบ™โ€‹เบšเบธเบโ€‹เบ„เบปเบ™โ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เบฎเบนเป‰โ€‹เบ„เบฐโ€‹เบ™เบดเบ”โ€‹เบชเบฒเบ”โ€‹เบžเบฝเบ‡โ€‹เบžเปโ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบญเบตเบโ€‹เปเบฅเป‰เบงโ€‹.

เบ•เบปเบเบฅเบปเบ‡, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบฅเบฐเบซเบฑเบ”เบซเบผเบฑเบ. เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบš, i.e. เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ AES.

เบฅเบฐเบซเบฑเบ”เบ‚เปเป‰เบ„เบงเบฒเบกเปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™ 128 bits เบเบฒเบ‡เบ‚เบญเบ‡ SHA256 เบ‚เบญเบ‡เบฎเปˆเบฒเบ‡เบเบฒเบเบ‚เปเป‰เบ„เบงเบฒเบก (เบฅเบงเบกเบ—เบฑเบ‡ session, message ID, เปเบฅเบฐเบญเบทเปˆเบ™เป†), เบฅเบงเบกเบ—เบฑเบ‡ padding bytes, prepended เป‚เบ”เบ 32 bytes เบ—เบตเปˆเป€เบญเบปเบฒเบกเบฒเบˆเบฒเบเบเบฐเปเบˆเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”.

Vasily, [22.06.18 14:08] เป‚เบ”เบเบชเบฐเป€เบฅเปˆเบ, bitch, bits

เป„เบ”เป‰ auth_key. เบ—เบฑเบ‡เปเบปเบ”. เบ™เบญเบ เป€เปœเบทเบญ เป„เบ›เบˆเบฒเบเบžเบงเบเบกเบฑเบ™ ... เบกเบฑเบ™เบšเปเปˆเบˆเบฐเปเบˆเป‰เบ‡เบˆเบฒเบเป€เบญเบเบฐเบชเบฒเบ™. เบฎเบนเป‰เบชเบถเบเบงเปˆเบฒเบšเปเปˆเป€เบชเบเบ„เปˆเบฒเป€เบžเบทเปˆเบญเบชเบถเบเบชเบฒเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”.

เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒ MTProto 2.0 เบ•เป‰เบญเบ‡เบเบฒเบ™เบˆเบฒเบ 12 เบซเบฒ 1024 bytes เบ‚เบญเบ‡ padding, เบเบฑเบ‡เบ‚เบถเป‰เบ™เบเบฑเบšเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบงเปˆเบฒเบ„เบงเบฒเบกเบเบฒเบงเบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ–เบทเบเปเบšเปˆเบ‡เบญเบญเบเบ”เป‰เบงเบ 16 bytes.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบžเบตเปˆเบก padding เบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”?

เปเบฅเบฐเปเบกเปˆเบ™เปเบฅเป‰เบง, เบเบฑเบ‡เบกเบต 404 เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบกเบตเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”

เบ–เป‰เบฒเบœเบนเป‰เปƒเบ”เป„เบ”เป‰เบชเบถเบเบชเบฒเปเบœเบ™เบงเบฒเบ”เปเบฅเบฐเบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เป€เบญเบเบฐเบชเบฒเบ™เบขเปˆเบฒเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡, เบžเบงเบเป€เบ‚เบปเบฒเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒเบšเปเปˆเบกเบต MAC เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เปเบฅเบฐเบงเปˆเบฒ AES เบ–เบทเบเปƒเบŠเป‰เปƒเบ™เป‚เบซเบกเบ” IGE เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เบšเปˆเบญเบ™เบญเบทเปˆเบ™. เบžเบงเบเป€เบ‚เบปเบฒ, เปเบ™เปˆเบ™เบญเบ™, เบ‚เบฝเบ™เบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เปƒเบ™ FAQ เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ ... เบ—เบตเปˆเบ™เบตเป‰, เป€เบŠเบฑเปˆเบ™, เบฅเบฐเบซเบฑเบ”เบ‚เปเป‰เบ„เบงเบฒเบกเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบเบฑเบ‡เป€เบ›เบฑเบ™ SHA hash เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”, เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบชเบปเบกเบšเบนเบ™ - เปเบฅเบฐเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบšเปเปˆเบเบปเบ‡เบเบฑเบ™, เป€เบญเบเบฐเบชเบฒเบ™เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡. เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบšเปเปˆเบชเบปเบ™เปƒเบˆเบžเบงเบเป€เบ‚เบปเบฒเบขเปˆเบฒเบ‡เบ‡เบฝเบšเป† (เปเบ•เปˆเบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž, เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบžเบงเบเป€เบ‚เบปเบฒเบ—เปเบฒเบฅเบฒเบเบžเบงเบเป€เบฎเบปเบฒ?).

เบ‚เป‰เบญเบเบšเปเปˆเปเบกเปˆเบ™เบ™เบฑเบเบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เบฅเบฑเบš, เบšเบฒเบ‡เบ—เบตเบญเบฒเบ”เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบœเบดเบ”เบžเบฒเบ”เบเบฑเบšเบฎเบนเบšเปเบšเบšเบ™เบตเป‰เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบต. เปเบ•เปˆเบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบŠเบทเปˆเบšเบฑเบ™เบซเบฒเบžเบฒเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Telegram Desktop เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡. เบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ–เบฒเบ™เบ„เบงเบฒเบกเบˆเปเบฒเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™ (เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ D877F783D5D3EF8C) เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™ MTProto (เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบชเบฐเบšเบฑเบš 1.0), i.e. เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบฅเบฐเบซเบฑเบ”เบ‚เปเป‰เบ„เบงเบฒเบก, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เปเป‰เบกเบนเบ™เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡ (เปเบฅเบฐเบšเบฒเบ‡เบšเปˆเบญเบ™เบซเบฅเบตเบเป„เบ›เบ—เบฒเบ‡เบซเบ™เบถเปˆเบ‡เปƒเบซเบเปˆ auth_key 256 bytes, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ—เบตเปˆ msg_key เป„เบฎเป‰เบ›เบฐเป‚เบซเบเบ”). เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบšเบฑเบ™เบซเบฒเบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เปƒเบ™เป„เบŸเบฅเปŒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ. เบ„เบท, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฎเบฑเบเบชเบฒเบชเบญเบ‡เบชเปเบฒเป€เบ™เบปเบฒเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™ - เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”. เปเบฅเบฐเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบกเบต megabytes, เบซเบผเบท streaming เบงเบดเบ”เบตเป‚เบญ, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡?.. เบฎเบนเบšเปเบšเบšเบ„เบฅเบฒเบชเบชเบดเบเบเบฑเบš MAC เบซเบผเบฑเบ‡เบˆเบฒเบ ciphertext เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบกเบฑเบ™เบ™เป‰เปเบฒ, เบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ”เบชเบปเปˆเบ‡. เปเบ•เปˆเบเบฑเบš MTProto เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡ เปƒเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ” เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบซเบผเบทเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบฑเบ‡เบซเบกเบปเบ”, เบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป‚เบญเบ™เบกเบฑเบ™เบเบฑเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบซเบผเบทเปเบœเปˆเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เบชเบฐเบšเบฑเบšเบซเบฅเป‰เบฒเบชเบธเบ”เบ‚เบญเบ‡ Telegram Desktop เปƒเบ™ cache in user_data เบฎเบนเบšเปเบšเบšเบญเบทเปˆเบ™เบเบฑเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰ - เบเบฑเบš AES เปƒเบ™เบฎเบนเบšเปเบšเบš CTR.

Vasily, [21.06.18 01:27] เป‚เบญเป‰, เบ‚เป‰เบญเบเป„เบ”เป‰เบ„เบปเป‰เบ™เบžเบปเบšเบงเปˆเบฒ IGE เปเบกเปˆเบ™เบซเบเบฑเบ‡: IGE เปเบกเปˆเบ™เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เปเบฒเบญเบดเบ”เปƒเบ™ "เป‚เบซเบกเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบฅเบฑเบš", เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบš Kerberos. เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบฒเบกโ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ” (เบกเบฑเบ™โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เปƒเบซเป‰โ€‹เบเบฒเบ™โ€‹เบ›เบปเบโ€‹เบ›เบฑเบโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เบ„เบงเบฒเบกโ€‹เบŠเบทเปˆโ€‹เบชเบฑเบ”โ€‹)โ€‹, เปเบฅเบฐโ€‹เบ•เป‰เบญเบ‡โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบญเบปเบฒโ€‹เบญเบญเบโ€‹. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒ 20 เบ›เบตเบชเปเบฒเบฅเบฑเบšเป‚เบซเบกเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบฅเบฑเบšเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบ, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰เป„เบ”เป‰เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เปƒเบ™เป‚เบซเบกเบ”เป€เบŠเบฑเปˆเบ™ OCB เปเบฅเบฐ GCM.

เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบˆเบฒเบเบ‚เป‰เบฒเบ‡เป‚เบ„เบ‡เบฎเปˆเบฒเบ‡เบเบฒเบ™:

เบ—เบตเบกเบ‡เบฒเบ™เบ—เบตเปˆเบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบซเบฅเบฑเบ‡เบ‚เบญเบ‡ Telegram, เบ™เปเบฒเป‚เบ”เบ Nikolai Durov, เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบซเบปเบเปเบŠเป‰เบก ACM, เป€เบ„เบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบ›เบฐเบฅเบดเบ™เบเบฒเป€เบญเบเปƒเบ™เบ„เบฐเบ™เบดเบ”เบชเบฒเบ”. เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบ›เบฐเบกเบฒเบ™เบชเบญเบ‡เบ›เบตเป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เบ•เบปเบง MTProto เบฅเบธเป‰เบ™เบ›เบฐเบˆเบธเบšเบฑเบ™.

เบ™เบฑเป‰เบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ•เบฐเบซเบฅเบปเบ. เบชเบญเบ‡เบ›เบตเปƒเบ™เบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒ

เบซเบผเบทเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบงเบฅเบฒ tls

เบ•เบปเบเบฅเบปเบ‡, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบฅเบฑเบš เปเบฅเบฐเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบญเบทเปˆเบ™เป†. เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบชเบธเบ”เบ—เป‰เบฒเบเบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป serialized เปƒเบ™ TL เปเบฅเบฐ deserialize เบ„เปเบฒเบ•เบญเบš? เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบˆเบปเป‰เบฒเบ„เบงเบ™เบชเบปเปˆเบ‡เบซเบเบฑเบ‡เปเบฅเบฐเปเบ™เบงเปƒเบ”? เบ™เบตเป‰, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒ, เบงเบดเบ—เบตเบเบฒเบ™ initConnection, เบšเบฒเบ‡เบ—เบตเบ™เบตเป‰เปเบกเปˆเบ™เบกเบฑเบ™?

Vasily, [25.06.18 18:46] เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบฅเบฐเบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™เปเบฅเบฐเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰.

เบกเบฑเบ™เบเบญเบกเบฎเบฑเบš app_id, device_model, system_version, app_version เปเบฅเบฐ lang_code.

เปเบฅเบฐเบšเบฒเบ‡เบ„เปเบฒเบ–เบฒเบก

เป€เบญเบเบฐเบชเบฒเบ™เบ•เบฒเบกเป€เบ„เบตเบ. เบฎเบนเป‰เบชเบถเบเบงเปˆเบฒเบšเปเปˆเป€เบชเบเบ„เปˆเบฒเป€เบžเบทเปˆเบญเบชเบถเบเบชเบฒเปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”

เบ–เป‰เบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เป‚เบ”เบเบ›เบฐเบกเบฒเบ™เบเบฑเบš invokeWithLayer, เปเบฅเป‰เบงเบกเบตเบซเบเบฑเบ‡เบœเบดเบ”เบžเบฒเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰? เบกเบฑเบ™เบซเบฑเบ™เบญเบญเบ, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบต - เบฅเบนเบเบ„เป‰เบฒเบกเบตเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบˆเบฐเบ–เบฒเบกเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบเปˆเบฝเบงเบเบฑเบš - เบกเบตเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบปเปˆเบ‡:

Vasily, [25.06.18 19:13] Judging by the code, call first is wrapped in this crap, and the crap itself is wrapped in invokewithlayer

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบšเปเปˆเบชเบฒเบกเบฒเบ” initConnection เป€เบ›เบฑเบ™เบเบฒเบ™เป‚เบ—เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เปเบ•เปˆเบ•เป‰เบญเบ‡เป€เบ›เบฑเบ™ wrapper? เปเบกเปˆเบ™เปเบฅเป‰เบง, เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบ, เบกเบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบ—เบธเบเบ„เบฑเป‰เบ‡เปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบเบญเบ‡เบ›เบฐเบŠเบธเบก, เปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เบ„เบฑเป‰เบ‡เบ”เบฝเบง, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบšเบฅเบฐเบซเบฑเบ”เบ•เบปเป‰เบ™เบ•เป. เปเบ•เปˆ! เบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบญเบตเป‰เบ™เป‚เบ”เบเบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบญเบฐเบ™เบธเบเบฒเบ”! เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบšเบฑเบ™เบฅเบธเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰ เบญเบฑเบ™เบ™เบตเป‰ เบซเบ™เป‰เบฒเป€เบญเบเบฐเบชเบฒเบ™ - เปเบฅเบฐเบกเบฑเบ™เบšเบญเบเบžเบงเบเป€เบฎเบปเบฒเบงเปˆเบฒ ...

เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบชเปˆเบงเบ™เบ™เป‰เบญเบเบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™ API เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เบ—เบตเปˆเบกเบตเปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบญเบฐเบ™เบธเบเบฒเบ”:

  • auth.sendCode
  • auth.resendCode
  • account.getPassword
  • auth.checkPassword
  • auth.checkPhone
  • auth.signUp
  • auth.เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบš
  • auth.import เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”
  • help.getConfig
  • help.getNearestDc
  • help.getAppUpdate
  • help.getCdnConfig
  • langpack.getLangPack
  • langpack.getStrings
  • langpack.getDifference
  • langpack.getLanguages
  • langpack.getLanguage

เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, auth.sendCode, เปเบฅเบฐเบกเบตเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบฎเบฑเบเปเบžเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบปเปˆเบ‡ api_id เปเบฅเบฐ api_hash, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš SMS เบ—เบตเปˆเบกเบตเบฅเบฐเบซเบฑเบ”. เปเบฅเบฐเบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบขเบนเปˆเปƒเบ™ DC เบœเบดเบ” (เบซเบกเบฒเบเป€เบฅเบเป‚เบ—เบฅเบฐเบชเบฑเบšเปƒเบ™เบ›เบฐเป€เบ—เบ”เบ™เบตเป‰เปเบกเปˆเบ™เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป‚เบ”เบเบ„เบปเบ™เบญเบทเปˆเบ™, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡ DC เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™. เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบ—เบตเปˆเบขเบนเปˆ IP เปƒเบ”เป‚เบ”เบเปเบฒเบเป€เบฅเบ DC เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เบŠเปˆเบงเบเบžเบงเบเป€เบฎเบปเบฒ help.getConfig. เปƒเบ™เป€เบงเบฅเบฒเบซเบ™เบถเปˆเบ‡เบกเบตเบžเบฝเบ‡เปเบ•เปˆ 5 เบฅเบฒเบเบเบฒเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเป€เบซเบ”เบเบฒเบ™เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบชเบฝเบ‡เบ‚เบญเบ‡เบ›เบต 2018, เบ•เบปเบงเป€เบฅเบเป„เบ”เป‰เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ.

เบ•เบญเบ™เบ™เบตเป‰เบ‚เปเปƒเบซเป‰เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบฒเบฎเบญเบ”เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป‚เบ”เบเบšเปเปˆเป€เบ›เบตเบ”เป€เบœเบตเบเบŠเบทเปˆ. เบกเบฑเบ™เบšเปเปˆเปเบžเบ‡เป€เบเบตเบ™เป„เบ›เบ—เบตเปˆเบˆเบฐเบžเบฝเบ‡เปเบ•เปˆเป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบขเบนเปˆ IP เบšเป? เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบšเปเปˆเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เปเบฅเบฐเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบญเบทเปˆเบ™เป†, เปƒเบ™เบชเปˆเบงเบ™เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡ MTProto? เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบเบดเบ™เบเบฒเบ™เบ„เบฑเบ”เบ„เป‰เบฒเบ™: "เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™ RKN เบœเบนเป‰เบ—เบตเปˆเบˆเบฐเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบเบฑเบšเบ—เบตเปˆเบขเบนเปˆเบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡?" เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบทเปˆเบˆเปเบฒเบงเปˆเบฒ, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบฅเบนเบเบ„เป‰เบฒเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™ เบเบฐเปเบˆ RSA เบ–เบทเบเบเบฑเบ‡เป„เบงเป‰, i.e. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบžเบฝเบ‡เปเบ•เปˆ เบˆเบญเบ‡ เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰. เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบง, เบ™เบตเป‰เปเบกเปˆเบ™เป„เบ”เป‰เบ–เบทเบเป€เบฎเบฑเบ”เปเบฅเป‰เบงเบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบ—เบตเปˆเบฅเบนเบเบ„เป‰เบฒเป„เบ”เป‰เบฎเบฑเบšเบœเปˆเบฒเบ™เบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบญเบทเปˆเบ™ (เบ•เบฒเบกเป€เบซเบ”เบœเบปเบ™, เบ™เบตเป‰เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เปƒเบ™ MTProto เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡; เบ—เปˆเบฒเบ™เบเบฑเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฎเบนเป‰เบšเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ).

เบ•เบปเบโ€‹เบฅเบปเบ‡. เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบฅเบนเบเบ„เป‰เบฒเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบญเบฐเบ™เบธเบเบฒเบ”เปเบฅเบฐเบšเปเปˆเป„เบ”เป‰เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ•เปเปˆเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบกเบตเปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบญเบฐเบ™เบธเบเบฒเบ”. เปเบฅเบฐเบ™เบตเป‰โ€ฆ

Vasily, [10.07.18 14:45] https://core.telegram.org/method/help.getConfig

config#7dae33e0 [...] = Config;
help.getConfig#c4f9186b = Config;

https://core.telegram.org/api/datacenter

config#232d5905 [...] = Config;
help.getConfig#c4f9186b = Config;

เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™, เบ—เปเบฒเบญเบดเบ”เบกเบฒเบ—เบตเบชเบญเบ‡

เปƒเบ™ tdesktop schema เบ„เปˆเบฒเบ—เบตเบชเบฒเบกเปเบกเปˆเบ™

เปเบกเปˆเบ™เปเบฅเป‰เบง, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ™เบฑเป‰เบ™เบกเบฒ, เปเบ™เปˆเบ™เบญเบ™, เป€เบญเบเบฐเบชเบฒเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบเบฒเบเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบšเปเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เปƒเบ™เป„เบงเป†เบ™เบตเป‰. เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบˆเบปเบงเบ„เบงเบ™เบฎเบนเป‰เปเบ™เบงเปƒเบ”? เบšเบฒเบ‡เบ—เบตเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบžเบงเบเป€เบ‚เบปเบฒเบˆเบฐเปเบˆเป‰เบ‡เปƒเบซเป‰เบ—เปˆเบฒเบ™เบฎเบนเป‰เบšเป? Vasily เป„เบ”เป‰เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เปเบ•เปˆเบญเบฐเบ™เบดเบˆเบฒ, เบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเป„เบ”เป‰เบชเบปเปˆเบ‡เบซเบเบฑเบ‡เปƒเบซเป‰เบฅเบฒเบง (เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เปƒเบ™เบžเบฒเบเบ—เบตเบชเบญเบ‡).

...เบ—เปˆเบฒเบ™เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบเป‰เบฒเบเป„เบ›เบซเบฒ API เปเบฅเป‰เบง, i.e. เปƒเบ™เบฅเบฐเบ”เบฑเบšเบ•เปเปˆเป„เบ›, เปเบฅเบฐเบžเบฒเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบ™เบซเบปเบงเบ‚เปเป‰ MTProto? เบšเปเปˆเปเบ›เบเปƒเบˆ:

Vasily, [28.06.18 02:04] เบกเบก, เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบเบณเบฅเบฑเบ‡เบฅเบปเบกเบเบฑเบ™เบขเบนเปˆเบšเบฒเบ‡เบญเบฑเบ™เปƒเบ™ e2e.

Mtproto เบเปเบฒเบ™เบปเบ”เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบ—เบฑเบ‡เบชเบญเบ‡เป‚เบ”เป€เบกเบ™, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเป‚เบ„เบ‡เบชเป‰เบฒเบ‡ wrapper เป€เบฅเบฑเบเบ™เป‰เบญเบ.

เปเบ•เปˆเบžเบงเบเบกเบฑเบ™เบ›เบฐเบชเบปเบกเบฅเบฐเบ”เบฑเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡ stack เบขเบนเปˆเบชเบฐ เป€เปเบต, เบชเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เบšเปเปˆเบˆเบฐเปเบˆเป‰เบ‡เบชเบฐ เป€เปเบต เป„เบ›เบงเปˆเบฒ mtproto เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เบขเบนเปˆเปƒเบชเปเบฅเบฐเบฅเบฐเบ”เบฑเบšเบ•เปเปˆเป„เบ›เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ›เบฐเบชเบปเบกเปเบ™เบงเปƒเบ”? เบ”เบต, เบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฐเบซเบฑเบ”เบŠเบปเปˆเบงเบ„เบฒเบงเบ”เบฝเบงเบเบฑเบ™เบชเปเบฒเบฅเบฑเบš PFS, เบ•เบปเบงเบขเปˆเบฒเบ‡ (เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, Telegram Desktop เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰). เบกเบฑเบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป API auth.bindTempAuthKey, i.e. เบˆเบฒเบเบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”. เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบกเบฑเบ™เปเบŠเบเปเบŠเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบขเบนเปˆเปƒเบ™เบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒ - เบซเบผเบฑเบ‡เบˆเบฒเบเบกเบฑเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบกเบฑเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡. initConnection เปเบฅเบฐเบญเบทเปˆเบ™เป†, เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™ เบžเบฝเบ‡เปเบ•เปˆ เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹. เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบดเป€เบชเบ”เปเบกเปˆเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบกเบตเบเบฐเปเบˆเบŠเบปเปˆเบงเบ„เบฒเบงเบญเบฑเบ™เบ”เบฝเบงเบ•เปเปˆ DC, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบžเบฒเบเบชเบฐเบซเบ™เบฒเบก auth_key_id เปƒเบ™เปเบ•เปˆเบฅเบฐเบ‚เปเป‰เบ„เบงเบฒเบกเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบ„เบตเป„เบ”เป‰เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบ—เบธเบเป†เบ‚เปเป‰เบ„เบงเบฒเบก, เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบกเบตเบชเบดเบ”เบ—เบตเปˆเบˆเบฐ "เบฅเบทเบก" เบเบฐเปเบˆเบŠเบปเปˆเบงเบ„เบฒเบงเป„เบ”เป‰เบ—เบธเบเป€เบงเบฅเบฒ - เป€เบญเบเบฐเบชเบฒเบ™เบšเปเปˆเป„เบ”เป‰เบšเบญเบเบงเปˆเบฒเบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰ ... เบ”เบต, เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ เป€เบˆเบปเป‰เบฒเบกเบตเบเบฐเปเบˆเบซเบผเบฒเบเบญเบฑเบ™, เบ„เบทเบเบฑเบšเบŠเบธเบ”เบ‚เบญเบ‡เป€เบเบทเบญเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เปเบฅเบฐ?..

เบกเบตเบšเบฒเบ‡เบชเบดเปˆเบ‡เบญเบทเปˆเบ™เป†เบ—เบตเปˆเบ„เบงเบ™เบชเบฑเบ‡เป€เบเบ”เบเปˆเบฝเบงเบเบฑเบšเบซเบปเบงเบ‚เปเป‰ MTProto.

เบ‚เปเป‰เบ„เบงเบฒเบก, msg_id, msg_seqno, เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™, pings เปƒเบ™เบ—เบดเบ”เบ—เบฒเบ‡เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเบฐ idiosyncrasies เบญเบทเปˆเบ™เป†

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบžเบงเบเบกเบฑเบ™? เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒ "เบฎเบปเปˆเบง" เปƒเบ™เบฅเบฐเบ”เบฑเบšเบ—เบตเปˆเบชเบนเบ‡เบเบงเปˆเบฒ, เปเบฅเบฐเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฎเบนเป‰เป€เบ–เบดเบ‡เบžเบงเบเบกเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš API. เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบปเบ™เปƒเบˆ msg_key; เบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒเป„เบ”เป‰เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบ—เบธเบเบขเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ. เปเบ•เปˆเบžเบฒเบเปƒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ–เบทเบเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰ (เบเบฑเบ‡เบ„เบงเบฒเบกเบเบฒเบงเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบšเปˆเบญเบ™เปƒเบ”เบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”, เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™):

  • เป€เบเบทเบญ - 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? เป‚เบญเป‰, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเบซเบเบธเป‰เบ‡เบเบฒเบ. เบžเบฐเบเบฒเบเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบขเปˆเบฒเบ‡เบŠเบทเปˆเบชเบฑเบ”เปƒเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ:

เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป€เบ™เบทเป‰เบญเบซเบฒ

เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบฎเบฑเบšเบฎเบนเป‰เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡. เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบฅเบงเบกเบกเบตเบœเบนเป‰เปƒเบŠเป‰เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบฅเบฐเบ‚เปเป‰เบ„เบงเบฒเบกเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบ, virtually เบ—เบฑเบ‡เบซเบกเบปเบ”เบเบปเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบšเบฑเบ™เบˆเบธเปเบฅเบฐเบเบฒเบ™เบฎเบฑเบšเบฎเบนเป‰.

เปเบฒเบเป€เบฅเบเบฅเบณเบ”เบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบก (msg_seqno)

เบˆเปเบฒเบ™เบงเบ™ 32-bit เป€เบ—เบปเปˆเบฒเบเบฑเบšเบชเบญเบ‡เป€เบ—เบปเปˆเบฒเบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบ‚เปเป‰เบ„เบงเบฒเบก "เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป€เบ™เบทเป‰เบญเบซเบฒ" (เบ—เบตเปˆเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบฎเบฑเบšเบฎเบนเป‰, เปเบฅเบฐเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบšเบฑเบ™เบˆเบธ) เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบœเบนเป‰เบชเบปเปˆเบ‡เบเปˆเบญเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ™เบตเป‰เปเบฅเบฐเบ•เปเปˆเบกเบฒเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบซเบ™เบถเปˆเบ‡เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเบ›เบฐเบˆเบธเบšเบฑเบ™เปเบกเปˆเบ™เป€เบ›เบฑเบ™. เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป€เบ™เบทเป‰เบญเบซเบฒ. เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเบˆเบฐเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เป€เบฅเบทเป‰เบญเบเป†เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบ™เบทเป‰เบญเปƒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบกเบฑเบ™; เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบˆเปเบฒเบ™เบงเบ™เบฅเปเบฒเบ”เบฑเบšเบ‚เบญเบ‡เบกเบฑเบ™เปƒเบซเบเปˆเบเบงเปˆเบฒเบซเบผเบทเป€เบ—เบปเปˆเบฒเบเบฑเบšเบ•เบปเบงเป€เบฅเบเบฅเปเบฒเบ”เบฑเบšเบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เบกเบฑเบ™.

เบงเบปเบ‡เบˆเบญเบ™เบ›เบฐเป€เบžเบ”เปƒเบ”เปเบ”เปˆเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เป‚เบ”เบ 1, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบญเบตเบเป‚เบ”เบ 2? .. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบชเบปเบ‡เปƒเบชเบงเปˆเบฒเปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบžเบงเบเป€เบ‚เบปเบฒเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ "เบซเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบš ACK, เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเปเบกเปˆเบ™เบ•เบปเบงเป€เบฅเบ", เปเบ•เปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบšเปเปˆเบ„เบทเบเบฑเบ™ - เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบกเบฑเบ™เบญเบญเบเบกเบฒ, เบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เป„เบ”เป‰ เบซเบผเบฒเบเป†เบ„เบฑเป‰เบ‡ เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบกเบตเบ„เบทเบเบฑเบ™ seq_no! เปเบ™เบงเปƒเบ”? เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบชเบปเปˆเบ‡เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เบชเบปเปˆเบ‡เบกเบฑเบ™, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡เบเบฑเบ‡เบ„เบปเบ‡เบ‡เบฝเบš, เบžเบฝเบ‡เปเบ•เปˆเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เบกเบฑเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบ‚เบฒเบญเบญเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบกเบตเบ•เบปเบงเป€เบฅเบเบ‚เบฒเบญเบญเบเบ”เบฝเบงเบเบฑเบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบš TCP เปเบฅเบฐเบ„เบดเบ”เบงเปˆเบฒเบ™เบตเป‰เบชเบฝเบ‡เบ›เปˆเบฒเบ—เปเบฒเบกเบฐเบŠเบฒเบ”เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เปเบ•เปˆเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบšเปเปˆเบ—เปเบฒเบกเบฐเบ”เบฒ, เป€เบžเบฒเบฐเบงเปˆเบฒเปƒเบ™ TCP seq_no เบšเปเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡, เปเบ•เปˆเบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เป„เบ› seq_no เปƒเบ™เบญเบตเบเบ”เป‰เบฒเบ™เบซเบ™เบถเปˆเบ‡, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบฅเบฑเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบˆเบปเป‰เบฒเป€เบชเบเปƒเบˆ. เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เปเบกเปˆเบ™เปƒเบซเป‰เบขเบนเปˆเปƒเบ™ MTProto เบšเปเปˆเปเบกเปˆเบ™ on the seq_no, เปƒเบ™ TCP, เปเบ•เปˆเป‚เบ”เบ msg_id !

เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบซเบเบฑเบ‡ msg_id, เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡เบชเบฒเบ‚เบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰? เบ•เบปเบงเบฅเบฐเบšเบธเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ, เบ•เบฒเบกเบ—เบตเปˆเบŠเบทเปˆเปเบ™เบฐเบ™เปเบฒ. เบกเบฑเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™เบ•เบปเบงเป€เบฅเบ 64 เบšเบดเบ”, เบšเบดเบ”เบ•เปˆเปเบฒเบชเบธเบ”เบ—เบตเปˆเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบกเบต magic "server-not-server", เปเบฅเบฐเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเปเบกเปˆเบ™เบเบฒเบ™เบชเบฐเปเบ•เบกเป€เบงเบฅเบฒ Unix, เบฅเบงเบกเบ—เบฑเบ‡เบชเปˆเบงเบ™เป€เบชเบ”เป€เบซเบผเบทเบญ, เบ›เปˆเบฝเบ™ 32 bits เป„เบ›เบ—เบฒเบ‡เบŠเป‰เบฒเบ. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. timestamp per se (เปเบฅเบฐเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบกเบตเป€เบงเบฅเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเป€เบชเบ”เป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ). เบˆเบฒเบเบ™เบตเป‰เบกเบฑเบ™ turns เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบฅเบฐเบšเบธเบ—เบปเปˆเบงเป‚เบฅเบเบชเปเบฒเบฅเบฑเบšเบฅเบนเบเบ„เป‰เบฒ. เปƒเบซเป‰เบงเปˆเบฒ - เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบทเปˆ session_id - เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบฎเบฑเบšโ€‹เบ›เบฐโ€‹เบเบฑเบ™โ€‹: เบžเบฒเบเปƒเบ•เป‰เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบซเบ™เบถเปˆเบ‡เป€เบŠเบ”เบŠเบฑเบ™เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป€เบŠเบ”เบŠเบฑเบ™เบญเบทเปˆเบ™. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบกเบฑเบ™ turns เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบกเบตเปเบฅเป‰เบง เบชเบฒเบก เบฅเบฐเบ”เบฑเบš - เป€เบŠเบ”เบŠเบฑเบ™, เบˆเปเบฒเบ™เบงเบ™เป€เบŠเบ”เบŠเบฑเบ™, ID เบ‚เปเป‰เบ„เบงเบฒเบก. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบเบฒเบ™เบชเบฑเบšเบชเบปเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบ„เบงเบฒเบกเบฅเบถเบเบฅเบฑเบšเบ™เบตเป‰เปเบกเปˆเบ™เบเบดเปˆเบ‡เปƒเบซเบเปˆเบซเบผเบฒเบ.

เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™ msg_id เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบš ...

RPC: เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป, เบ„เปเบฒเบ•เบญเบš, เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”. เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™.

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเป„เบ”เป‰เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™, เบšเปเปˆเบกเบตเบ›เบฐเป€เบžเบ”เบžเบดเป€เบชเบ” "เป€เบฎเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป RPC" เบซเบผเบทเบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒเปƒเบ”เป†เปƒเบ™เปเบœเบ™เบงเบฒเบ”, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบตเบ„เปเบฒเบ•เบญเบš. เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป€เบ™เบทเป‰เบญเบซเบฒ! เบ™เบฑเป‰เบ™โ€‹เปเบกเปˆเบ™, เปƒเบ”เป† เบ‚เปเป‰เบ„เบงเบฒเบกเบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป! เบซเบผเบทเบšเปเปˆเบˆเบฐเป€เบ›เบฑเบ™. เบซเบฅเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™, เปเบ•เปˆเบฅเบฐเบ„เบปเบ™ เบกเบตเปเบกเปˆเบ™ msg_id. เปเบ•เปˆเบกเบตเบ„เปเบฒเบ•เบญเบš:

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

เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบ–เบทเบเบฅเบฐเบšเบธเบงเปˆเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ”เป€เบ›เบฑเบ™เบเบฒเบ™เบ•เบญเบš. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡ API, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบˆเบทเปˆเบˆเปเบฒเบงเปˆเบฒเบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบกเปˆเบ™เบซเบเบฑเบ‡ - เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบงเปˆเบฒเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบญเบฐเบ—เบดเบšเบฒเบเบงเปˆเบฒเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบกเปˆเบ™ asynchronous, เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบกเบตเบซเบผเบฒเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบขเบนเปˆเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบ„เปเบฒเบ•เบญเบšเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ„เบทเบ™เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เปƒเบ”? เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™, เบˆเบฒเบเบ‚เปเป‰เบ„เบงเบฒเบกเบ™เบตเป‰เปเบฅเบฐเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบšเบšเปเปˆเบกเบตเบ„เบปเบ™เบ‡เบฒเบ™, เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ—เบตเปˆเบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบซเบฅเบฑเบ‡เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฒเบกเป„เบ”เป‰: เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบฎเบฑเบเบชเบฒเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ 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 (เบ”เบต, เปเบ™เปˆเบ™เบญเบ™, semantics เบ‚เบญเบ‡เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเป€เบ„เบปเบฒเบฅเบปเบš, เปƒเบ™เบšเบฒเบ‡เบšเปˆเบญเบ™เบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเปเบˆเบเบขเบฒเบเปเบšเบšเบชเบธเปˆเบกเบฅเบฐเบซเบงเปˆเบฒเบ‡เบฅเบฐเบซเบฑเบ”), เปเบฅเบฐเป€เบชเบฑเป‰เบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ. CAPITAL_LETTERS_AND_NUMBERS. เบ•เบปเบงเบขเปˆเบฒเบ‡, PHONE_NUMBER_OCCUPIED เบซเบผเบท FILE_PART_ะฅ_MISSING. เบ”เบต, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เป€เบˆเบปเป‰เบฒเบเบฑเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบชเบฑเป‰เบ™เบ™เบตเป‰ เบงเบดเป€เบ„เบฒเบฐ. เบ•เบปเบงเบขเปˆเบฒเบ‡ FLOOD_WAIT_3600 เบˆเบฐเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบฅเปเบ–เป‰เบฒเบซเบ™เบถเปˆเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡, เปเบฅเบฐ PHONE_MIGRATE_5, เบงเปˆเบฒเป€เบšเบตเป‚เบ—เบฅเบฐเบชเบฑเบšเบ—เบตเปˆเบกเบตเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเบ™เบตเป‰เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบขเบนเปˆเปƒเบ™ 5th DC. เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบžเบฒเบชเบฒเบ›เบฐเป€เบžเบ”, เปเบกเปˆเบ™เบšเป? เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบšเปเปˆโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เป‚เบ•เป‰โ€‹เบ–เบฝเบ‡โ€‹เบˆเบฒเบโ€‹เบชเบฐโ€‹เบ•โ€‹เบฃเบดเบ‡โ€‹, เบ„เบปเบ™โ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹เบˆเบฐโ€‹เป€เบฎเบฑเบ”โ€‹เป„เบ”เป‰โ€‹, เบšเปเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เบซเบเบฑเบ‡โ€‹.

เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบซเบ™เป‰เบฒเบ‚เปเป‰เบ„เบงเบฒเบกเบšเปเบฅเบดเบเบฒเบ™, เปเบ•เปˆ, เบ•เบฒเบกเบ›เบปเบเบเบฐเบ•เบดเบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰, เบ‚เปเป‰เบกเบนเบ™เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰ เปƒเบ™เปœเป‰เบฒเป€เบญเบเบฐเบชเบฒเบ™เบญเบทเปˆเบ™. เบซเบฅเบท เบ–เบดเป‰เบกเบ„เบงเบฒเบกเบชเบปเบ‡เปƒเบช. เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เป€เบšเบดเปˆเบ‡, เบเบฒเบ™เบฅเบฐเป€เบกเบตเบ”เบเบฒเบ™เบžเบดเบก / เบŠเบฑเป‰เบ™ - RpcError เบชเบฒเบกเบฒเบ”เบ–เบทเบเบฎเบฑเบ‡เบขเบนเปˆเปƒเบ™ RpcResult. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบšเปเปˆเบขเบนเปˆเบ‚เป‰เบฒเบ‡เบ™เบญเบ? เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบ„เปเบฒโ€‹เบ™โ€‹เบถเบ‡โ€‹เป€เบ–เบดเบ‡โ€‹เบซเบเบฑเบ‡โ€‹?.. เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™โ€‹, เบเบฒเบ™โ€‹เบฎเบฑเบšโ€‹เบ›เบฐโ€‹เบเบฑเบ™โ€‹เบ—เบตเปˆโ€‹เบขเบนเปˆโ€‹เปƒเบชโ€‹ RpcError เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ–เบทเบเบเบฑเบ‡เบขเบนเปˆเปƒเบ™ RpcResult, เปเบ•เปˆเบ–เบทเบเป‚เบ”เบเบเบปเบ‡เบซเบผเบทเบฎเบฑเบ‡เบขเบนเปˆเปƒเบ™เบ›เบฐเป€เบžเบ”เบญเบทเปˆเบ™?.. เปเบฅเบฐเบ–เป‰เบฒเบกเบฑเบ™เป€เบฎเบฑเบ”เบšเปเปˆเป„เบ”เป‰, เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบกเบฑเบ™เบˆเบถเปˆเบ‡เบšเปเปˆเบขเบนเปˆเปƒเบ™เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”, i.e. เบกเบฑเบ™เบ‚เบฒเบ”เบซเบฒเบเป„เบ› req_msg_id ? ..

เปเบ•เปˆเปƒเบซเป‰เบชเบทเบšเบ•เปเปˆเบเปˆเบฝเบงเบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™. เบฅเบนเบเบ„เป‰เบฒเบญเบฒเบ”เบˆเบฐเบ„เบดเบ”เบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบกเปˆเบ™เบ„เบดเบ”เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™เปเบฅเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบ›เบฐเป€เบชเบตเบ”เบ™เบตเป‰:

rpc_drop_answer#58e4a740 req_msg_id:long = RpcDropAnswer;

เบกเบตเบชเบฒเบกเบ„เปเบฒเบ•เบญเบšเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบ–เบฒเบกเบ™เบตเป‰, เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบ•เบฑเบ”เบเบฑเบ™เบเบฑเบšเบเบปเบ™เป„เบเบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™; เบžเบฐเบเบฒเบเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™ (เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™) เปเบกเปˆเบ™เบ›เปˆเบญเบเปƒเบซเป‰เบœเบนเป‰เบญเปˆเบฒเบ™เป€เบ›เบฑเบ™เบงเบฝเบเบšเป‰เบฒเบ™ (เบซเบกเบฒเบเป€เบซเบ”: เบ‚เปเป‰เบกเบนเบ™เปƒเบ™ เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡ Telegram Desktop เบšเปเปˆเบ„เบปเบšเบ–เป‰เบงเบ™).

เบเบฒเบ™เบ•เบดเบ”เบขเบฒเป€เบชเบšเบ•เบดเบ”: เบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบšเบ‚เปเป‰เบ„เบงเบฒเบก

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบง, เบซเบผเบฒเบเป†เบšเปˆเบญเบ™เปƒเบ™ TL, MTProto เปเบฅเบฐ Telegram เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบ”เบทเป‰เบ”เป‰เบฒเบ™, เปเบ•เปˆเบญเบญเบเบˆเบฒเบเบ„เบงเบฒเบกเบชเบธเบžเบฒเบš, เบกเบตเบชเบฐเบ•เบดเบ›เบฑเบ™เบเบฒ เปเบฅเบฐ เบญเบทเปˆเบ™เป†. เบ—เบฑเบเบชเบฐเบญเปˆเบญเบ™เป† เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบกเบดเบ”โ€‹เบ‡เบฝเบšโ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เป€เบฅเบทเปˆเบญเบ‡โ€‹เบ™เบตเป‰โ€‹เบขเปˆเบฒเบ‡โ€‹เบชเบธเบžเบฒเบš, เปเบฅเบฐโ€‹เป„เบ”เป‰โ€‹เป€เบŠเบฑเบ™โ€‹เป€เบŠเบตโ€‹เบ™โ€‹เบ„เบงเบฒเบกโ€‹เบŠเบปเปˆเบงโ€‹เบฎเป‰เบฒเบโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบชเบปเบ™โ€‹เบ—เบฐโ€‹เบ™เบฒ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ™เบตเป‰ะžเบชเปˆเบงเบ™เปƒเบซเบเปˆเบ‚เบญเบ‡เบซเบ™เป‰เบฒเปเบกเปˆเบ™เบเปˆเบฝเบงเบเบฑเบš เบ‚เปเป‰เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบก เบกเบฑเบ™เบซเบ™เป‰เบฒเบ•เบปเบเปƒเบˆเปเบกเปˆเบ™เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบ‚เป‰เบญเบ, เบœเบนเป‰เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป‚เบ›เป‚เบ•เบ„เบญเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™เปเบฅเบฐเป„เบ”เป‰เป€เบซเบฑเบ™เบฅเบปเบ”เบ–เบตเบšเบ—เบตเปˆเบกเบตเบฅเบฐเบ”เบฑเบšเบ„เบงเบฒเบกเป‚เบเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เบกเบฑเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ innocuously, เบ”เป‰เบงเบเบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™. เบ•เปเปˆเป„เบ›เบžเบงเบเป€เบ‚เบปเบฒเบšเบญเบเบžเบงเบเป€เบฎเบปเบฒเบเปˆเบฝเบงเบเบฑเบš

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... เบ•เบปเบงเป€เบฅเบเบญเบทเปˆเบ™เบขเบนเปˆเปƒเบช, Tommy?

เป€เบญเบเบฐเบชเบฒเบ™เบฅเบฐเบšเบธเบงเปˆเบฒ:

เบ„เบงเบฒเบกเบ•เบฑเป‰เบ‡เปƒเบˆเปเบกเปˆเบ™เบงเปˆเบฒเบ„เปˆเบฒ error_code เป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เป€เบ›เบฑเบ™เบเบธเปˆเบก (error_code >> 4): เบ•เบปเบงเบขเปˆเบฒเบ‡, เบฅเบฐเบซเบฑเบ” 0x40 โ€” 0x4f เบเบปเบ‡เบเบฑเบšเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบชเบทเปˆเบญเบกเป‚เบŠเบกเบ‚เบญเบ‡เบšเบฑเบ™เบˆเบธ.

เปเบ•เปˆ, เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เบ—เบดเบ”เบ—เบฒเบ‡เบญเบทเปˆเบ™, เปเบฅเบฐเบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เบกเบฑเบ™เบšเปเปˆ เบชเบณ เบ„เบฑเบ™, เบฅเบฐเบซเบฑเบ”เบญเบทเปˆเบ™เบขเบนเปˆเปƒเบช? เปƒเบ™เบซเบปเบงเบ‚เบญเบ‡เบœเบนเป‰เบ‚เบฝเบ™?.. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™ trifles.

เบชเบดเปˆเบ‡เป€เบชเบšเบ•เบดเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบ‚เปเป‰เบ„เบงเบฒเบก เปเบฅเบฐเบชเบณเป€เบ™เบปเบฒเบ‚เปเป‰เบ„เบงเบฒเบก:

  • เบฎเป‰เบญเบ‡เบ‚เปเบ‚เปเป‰เบกเบนเบ™เบชเบฐเบ–เบฒเบ™เบฐเบ‚เปเป‰เบ„เบงเบฒเบก
    เบ–เป‰เบฒเบเปˆเบฒเบเปƒเบ”เบเปˆเบฒเบเปœเบถเปˆเบ‡เบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบชเบปเปˆเบ‡เบญเบญเบเบกเบฒเป€เบ›เบฑเบ™เป„เบฅเบเบฐเปœเบถเปˆเบ‡, เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบฎเบฝเบเบฎเป‰เบญเบ‡เบˆเบฒเบเบญเบตเบเบเปˆเบฒเบเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡:
    msgs_state_req#da69fb52 msg_ids:Vector long = MsgsStateReq;
  • เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹เปƒเบซเป‰โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบชเบฐโ€‹เบ–เบฒโ€‹เบ™เบฐโ€‹เบžเบฒเบšโ€‹เบ‚เบญเบ‡โ€‹เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹
    msgs_state_info#04deb57d req_msg_id:long info:string = MsgsStateInfo;
    เบ—เบตเปˆเบ™เบตเป‰, info เปเบกเปˆเบ™เบชเบฐเบ•เบฃเบดเบ‡เบ—เบตเปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเปœเบถเปˆเบ‡เป„เบšเบ•เปŒเบ‚เบญเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบชเบณเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฒเบเบฅเบฒเบเบŠเบทเปˆ msg_ids เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒ:

    • 1 = เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบก (msg_id เบ•เปˆเปเบฒเป€เบเบตเบ™เป„เบ›, เบžเบฒเบเบชเปˆเบงเบ™เบญเบทเปˆเบ™เบญเบฒเบ”เบˆเบฐเบฅเบทเบกเบกเบฑเบ™)
    • 2 = เบ‚เปเป‰เบ„เบงเบฒเบกเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบš (msg_id เบขเบนเปˆเปƒเบ™เบ‚เบญเบšเป€เบ‚เบ”เบ‚เบญเบ‡เบ•เบปเบงเบฅเบฐเบšเบธเบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰; เปเบ™เบงเปƒเบ”เบเปเปˆเบ•เบฒเบก, เบžเบฒเบเบชเปˆเบงเบ™เบญเบทเปˆเบ™เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเป€เบŠเบฑเปˆเบ™เบ™เบฑเป‰เบ™)
    • 3 = เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบš (msg_id เบชเบนเบ‡โ€‹เป€เบเบตเบ™โ€‹เป„เบ›โ€‹; เปเบ™เบงโ€‹เปƒเบ”โ€‹เบเปโ€‹เบ•เบฒเบกโ€‹, เบญเบตเบโ€‹เบเปˆเบฒเบโ€‹เปเบ™เปˆโ€‹เบ™เบญเบ™โ€‹เบงเปˆเบฒโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบกเบฑเบ™โ€‹)
    • 4 = เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบš (เปƒเบซเป‰โ€‹เบชเบฑเบ‡โ€‹เป€เบเบ”โ€‹เบงเปˆเบฒโ€‹เบเบฒเบ™โ€‹เบ•เบญเบšโ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ”เบฝเบงโ€‹เบเบฑเบ™โ€‹เบเบฒเบ™โ€‹เบฎเบฑเบšโ€‹เบฎเบนเป‰โ€‹เบเบฒเบ™โ€‹เบฎเบฑเบšโ€‹)
    • +8 = เบ‚เปเป‰เบ„เบงเบฒเบกเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบเบญเบกเบฎเบฑเบšเปเบฅเป‰เบง
    • +16 = เบ‚เปเป‰เบ„เบงเบฒเบกเบšเปเปˆเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบฎเบฑเบšเบฎเบนเป‰
    • +32 = RPC query เบšเบฑเบ™เบˆเบธเบขเบนเปˆเปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบเปเบฒเบฅเบฑเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบซเบผเบทเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เปเบฅเป‰เบง
    • +64 = เบเบฒเบ™เบ•เบญเบšเป‚เบ•เป‰เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป€เบ™เบทเป‰เบญเบซเบฒเบ•เปเปˆเบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปเบฅเป‰เบง
    • +128 = เบžเบฒเบเบชเปˆเบงเบ™เบญเบทเปˆเบ™เบฎเบนเป‰เบ„เบงเบฒเบกเบˆเบดเบ‡เบงเปˆเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเป„เบ”เป‰เบฎเบฑเบšเปเบฅเป‰เบง
      เบ„เปเบฒเบ•เบญเบšเบ™เบตเป‰เบšเปเปˆเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบฎเบฑเบšเบฎเบนเป‰. เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบฎเบฑเบšเบฎเบนเป‰เบ‚เบญเบ‡ msgs_state_req เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡, เปƒเบ™เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡.
      เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ–เป‰เบฒเบกเบฑเบ™เบ›เบฒเบเบปเบ”เบ‚เบทเป‰เบ™เบขเปˆเบฒเบ‡เบเบฐเบ—เบฑเบ™เบซเบฑเบ™เบงเปˆเบฒเบญเบตเบเบเปˆเบฒเบเบšเปเปˆเบกเบตเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบกเบฑเบ™เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบกเบฑเบ™, เบ‚เปเป‰เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™เปƒเบซเบกเปˆ. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบญเบตเบเบเปˆเบฒเบเบ„เบงเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเบญเบ‡เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบŠเปเป‰เบฒเบเบฑเบ™เบˆเบฐเบ–เบทเบเบฅเบฐเป€เบฅเบตเบ. (เบ–เป‰เบฒเป€เบงเบฅเบฒเบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›, เปเบฅเบฐ msg_id เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡, เบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฐเบ–เบทเบเบซเปเปˆเบ”เป‰เบงเบ msg_copy).
  • เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เปเบšเบšเบชเบฐเปเบฑเบเปƒเบˆเบ‚เบญเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก
    เบเปˆเบฒเบเปƒเบ”เบเปˆเบฒเบเปœเบถเปˆเบ‡เบญเบฒเบ”เบชเบฐเปเบฑเบเปƒเบˆเปเบˆเป‰เบ‡เปƒเบซเป‰เบเปˆเบฒเบเบญเบทเปˆเบ™เบฎเบนเป‰เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบชเบปเปˆเบ‡เป‚เบ”เบเบเปˆเบฒเบเบญเบทเปˆเบ™.
    msgs_all_info#8cc0d131 msg_ids:Vector long info:string = MsgsAllInfo
  • เบ‚เบฐเบซเบเบฒเบเบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เปเบšเบšเบชเบฐเปเบฑเบเปƒเบˆเบ‚เบญเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ”เบฝเบง
    ...
    msg_detailed_info#276d3ec6 msg_id:long answer_msg_id:long bytes:int status:int = MsgDetailedInfo;
    msg_new_detailed_info#809db6df answer_msg_id:long bytes:int status:int = MsgDetailedInfo;
  • เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ„เบทเบ™เปƒเปเปˆ
    msg_resend_req#7d861a08 msg_ids:Vector long = MsgResendReq;
    เบเปˆเบฒเบโ€‹เบซเปˆเบฒเบ‡โ€‹เป„เบโ€‹เบชเบญเบโ€‹เบซเบผเบตเบโ€‹เป„เบ”เป‰โ€‹เบ•เบญเบšโ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹เปƒเบ™โ€‹เบ—เบฑเบ™โ€‹เบ—เบตโ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบชเบปเปˆเบ‡โ€‹เบ„เบทเบ™โ€‹เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹เบ—เบตเปˆโ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เป [โ€ฆ]
  • เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบ„เปเบฒเบ•เบญเบšเบ„เบทเบ™
    msg_resend_ans_req#8610baeb msg_ids:Vector long = MsgResendReq;
    เบžเบฒเบเบชเปˆเบงเบ™เบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบเบ•เบญเบšเบ—เบฑเบ™เบ—เบตเป‚เบ”เบเบเบฒเบ™เบชเบปเปˆเบ‡เบ„เบทเบ™ เบ„เปเบฒเบ•เบญเบš เบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบฎเป‰เบญเบ‡เบ‚เป [โ€ฆ]
  • เบชเบณเป€เบ™เบปเบฒเบ‚เปเป‰เบ„เบงเบฒเบก
    เปƒเบ™เบšเบฒเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™, เบ‚เปเป‰เบ„เบงเบฒเบกเป€เบเบปเปˆเบฒเบ—เบตเปˆเบกเบต msg_id เบ—เบตเปˆเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™เปƒเบซเบกเปˆ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบฑเบ™เบ–เบทเบเบซเปเปˆเบขเบนเปˆเปƒเบ™เบ–เบฑเบ‡เบชเปเบฒเป€เบ™เบปเบฒ:
    msg_copy#e06046b2 orig_message:Message = MessageCopy;
    เป€เบกเบทเปˆเบญเป„เบ”เป‰เบฎเบฑเบš, เบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฐเบ–เบทเบเบ›เบธเบ‡เปเบ•เปˆเบ‡เบ„เบทเบเบฑเบšเบงเปˆเบฒ wrapper เบšเปเปˆเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ–เป‰เบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเบขเปˆเบฒเบ‡เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบ‚เปเป‰เบ„เบงเบฒเบก orig_message.msg_id เป„เบ”เป‰เบ–เบทเบเบฎเบฑเบš, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบซเบกเปˆเบšเปเปˆเป„เบ”เป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ (เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบกเบฑเบ™เปเบฅเบฐ orig_message.msg_id เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบเบญเบกเบฎเบฑเบš). เบ„เปˆเบฒเบ‚เบญเบ‡ orig_message.msg_id เบ•เป‰เบญเบ‡เบ•เปเปˆเบฒเบเบงเปˆเบฒ msg_id เบ‚เบญเบ‡เบเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธ.

เปƒเบซเป‰เบ‚เบญเบ‡เปเบกเป‰เปเบ•เปˆเบฎเบฑเบเบชเบฒเบ‡เบฝเบšเบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆ msgs_state_info เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เบซเบนเบ‚เบญเบ‡ TL เบ—เบตเปˆเบšเปเปˆเบชเปเบฒเป€เบฅเบฑเบ”เปเบกเปˆเบ™เบ•เบดเบ”เบญเบญเบ (เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ vector เบ‚เบญเบ‡ bytes, เปเบฅเบฐเปƒเบ™เบชเบญเบ‡ bits เบ•เปˆเปเบฒเบกเบต enum, เปเบฅเบฐเปƒเบ™เบชเบญเบ‡ bits เบชเบนเบ‡เบกเบตเบ—เบธเบ‡). เบˆเบธเบ”เปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบกเบตเปƒเบœเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”? เปƒเบ™เบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ เบˆเปเบฒเป€เบ›เบฑเบ™?.. เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบเบฒเบ, เปเบ•เปˆเบ„เบปเบ™เป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ–เป‰เบฒเบšเบธเบเบ„เบปเบ™เปƒเบ”เบซเบ™เบถเปˆเบ‡เบกเบตเบชเปˆเบงเบ™เบฎเปˆเบงเบกเปƒเบ™เบเบฒเบ™เบ”เบตเบšเบฑเบ, เปเบฅเบฐเปƒเบ™เบฎเบนเบšเปเบšเบšเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš - เบ–เบฒเบกเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบงเปˆเบฒเปเบ™เบงเปƒเบ”เปเบฅเบฐเปเบ™เบงเปƒเบ”. เปเบ•เปˆเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป„เบ”เป‰เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบ เป„เบ›โ€‹เบเบฑเบš.

เบกเบฑเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบงเปˆเบฒเปเบ•เปˆเบฅเบฐเบเปˆเบฒเบเบ•เป‰เบญเบ‡เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เปเบ•เปˆเบเบฑเบ‡เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ•เบปเบงเป€เบญเบ‡, เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ•เปเปˆเบžเบงเบเป€เบ‚เบปเบฒ, เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบšเปเปˆเบฎเบนเป‰เบˆเบฑเบ. เป€เบญเบเบฐเบชเบฒเบ™เบšเปเปˆเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเป€เบ–เบดเบ‡เป€เบงเบฅเบฒ เบซเบผเบท เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบปเบงเบˆเบดเบ‡เบ‚เบญเบ‡เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰. เบšเปเปˆเบกเบตเบ—เบฒเบ‡เปƒเบ”. เบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเบ›เบฐเบซเบฅเบฒเบ”เปƒเบˆเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเบˆเบดเบ‡เปƒเบ™เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™! เบ›เบฒเบเบปเบ”เบ‚เบทเป‰เบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเบšเบญเบเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบฅเบงเบกเบขเบนเปˆเปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ. เป€เบ‚เบปเป‰เบฒเปƒเบˆเบˆเบฒเบเบฅเบฐเบซเบฑเบ” เป€เบ›เบฑเบ™เบซเบเบฑเบ‡, เปเบกเปˆเบ™เบšเปเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ„เบทเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡ TL - เบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™ (เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡) เบชเปˆเบงเบ™เบ—เบตเปˆเป‚เบ”เบ”เบ”เปˆเบฝเบงเบขเปˆเบฒเบ‡เบกเบตเป€เบซเบ”เบœเบปเบ™, เปเบ•เปˆเป€เบ›เบฑเบ™เบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบ—เบตเปˆเบ•เบดเบ”เบเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ, i.e. เบˆเบฐเบ•เป‰เบญเบ‡เปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบเบเบงเปˆเบฒเป€เบเบปเปˆเบฒเป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบฅเบฐเบซเบฑเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ.

Pings เปเบฅเบฐเป€เบงเบฅเบฒ. เบ„เบดเบง.

เบˆเบฒเบเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเบทเปˆเบˆเปเบฒเบเบฒเบ™เบ„เบฒเบ”เป€เบ”เบปเบฒเบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ‚เบญเบ‡เป€เบŠเบตเบŸเป€เบงเบต (เบเบฒเบ™เปเบˆเบเบขเบฒเบเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเปƒเบ™เบ—เบปเปˆเบง backends), เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเป€เบชเบปเป‰เบฒเปƒเบˆเบซเบผเบฒเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบก - เป€เบ–เบดเบ‡เบงเปˆเบฒเบˆเบฐเบกเบตเบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™ TCP (เบ‚เปเป‰เบกเบนเบ™เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡, เบซเบผเบทเบ—เปˆเบฒเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเปเบˆเป‰เบ‡เบเปˆเบฝเบงเบเบฑเบšเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡, เปเบ•เปˆ. เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเบปเปˆเบ‡โ€‹เบเปˆเบญเบ™โ€‹เบ—เบตเปˆโ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹เบˆเบฐโ€‹เป€เบเบตเบ”โ€‹เบ‚เบถเป‰เบ™โ€‹)โ€‹, เบเบฒเบ™โ€‹เบขเบทเบ™โ€‹เบขเบฑเบ™โ€‹เปƒเบ™ MTProto เบ•เบปเบงโ€‹เบกเบฑเบ™โ€‹เป€เบญเบ‡ - เบšเปเปˆเบกเบตเบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™. เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบชเบฒเบกเบฒเบ”เบชเบนเบ™เป€เบชเบเบซเบผเบทเบ–เบดเป‰เบกเบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ‡เปˆเบฒเบ, เปเบฅเบฐเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™, เบžเบฝเบ‡เปเบ•เปˆเปƒเบŠเป‰เป„เบกเป‰เบ„เป‰เบญเบ™เบ›เบฐเป€เบžเบ”เบ•เปˆเบฒเบ‡เป†.

เปเบฅเบฐเบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ” - เปเบ–เบงเบ‚เปเป‰เบ„เบงเบฒเบก. เบ”เบต, เบกเบตเบชเบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ - เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบ•เป‰เบญเบ‡เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปเบฅเบฐ reent. เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเป€เบงเบฅเบฒเปƒเบ”? เปเบฅเบฐ jester เบฎเบนเป‰เบˆเบฑเบเบžเบฃเบฐเบญเบปเบ‡. เบšเบฒเบ‡เบ—เบตเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบ•เบดเบ”เบ‚เบฑเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เบ”เป‰เบงเบเป„เบกเป‰เบ„เป‰เบญเบ™เป€เบ—เบปเป‰เบฒ, เป€เบงเบปเป‰เบฒเบงเปˆเบฒ, เปƒเบ™ Telegram Desktop เบกเบตเบ›เบฐเบกเบฒเบ™ 4 เบ„เบดเบงเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ (เบšเบฒเบ‡เบ—เบตเบญเบฒเบ”เบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปเบฅเป‰เบง, เบชเปเบฒเบฅเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆเบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ‚เบญเบ‡เบกเบฑเบ™เบขเปˆเบฒเบ‡เบˆเบดเบ‡เบˆเบฑเบ‡; เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™. เป€เบงเบฅเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเบกเบฒเป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡; เบˆเปเบฒเบ™เบงเบ™เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบˆเบฒเบเป‚เบ„เบ‡เบเบฒเบ™ MTProto เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบกเบฑเบ™).

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™? เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™, เบœเบนเป‰เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเป€เบŠเบตเบŸเป€เบงเบตเบšเปเปˆเบชเบฒเบกเบฒเบ”เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ„เบงเบฒเบกเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบทเบžเบฒเบเปƒเบ™เบเบธเปˆเบก, เบซเบผเบทเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡ buffering เปƒเบ™เบ•เบปเบงเบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒ, เปเบฅเบฐเป‚เบญเบ™เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เปƒเบซเป‰เบเบฑเบšเบฅเบนเบเบ„เป‰เบฒ. เบญเบญเบเบˆเบฒเบเบ„เบงเบฒเบกเบชเบดเป‰เบ™เบซเบงเบฑเบ‡, Vasily เบžเบฐเบเบฒเบเบฒเบกเบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบชเบญเบ‡เบ„เบดเบง, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบˆเบฒเบ TCP - เบเบฒเบ™เบงเบฑเบ”เปเบ—เบ RTT เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบฅเบฐเบเบฒเบ™เบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡ "เบ›เปˆเบญเบ‡เบขเป‰เบฝเบก" (เปƒเบ™เบ‚เปเป‰เบ„เบงเบฒเบก) เบ‚เบถเป‰เบ™เบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบซเบเบฒเบšเบ„เบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบเบฒเบ™เป‚เบซเบผเบ”เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบกเปˆเบ™เบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ—เบตเปˆเบกเบฑเบ™เบชเบฒเบกเบฒเบ” chew เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เปเบฅเบฐเบšเปเปˆเบชเบนเบ™เป€เบชเบ.

เปเบฅเป‰เบง, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เป€เบˆเบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆ, เปเบกเปˆเบ™เบšเป? เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ” TCP เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบขเบนเปˆเป€เบ—เบดเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™เบ—เบตเปˆเปเบฅเปˆเบ™เบœเปˆเบฒเบ™ TCP, เบ™เบตเป‰เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เป‚เบ›เป‚เบ•เบ„เบญเบ™เบ—เบตเปˆเบ–เบทเบเบญเบญเบเปเบšเบšเบšเปเปˆเบ”เบตเบซเบผเบฒเบ.

เป‚เบญเป‰, เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบ„เบดเบง, เปเบฅเบฐเบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเปเบ™เบงเปƒเบ”เบชเปเบฒเบฅเบฑเบšเบ„เบปเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš API เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡? เป€เบšเบดเปˆเบ‡, เบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป, serialize เบกเบฑเบ™, เปเบ•เปˆเป€เบฅเบทเป‰เบญเบเป†เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบกเบฑเบ™เบ—เบฑเบ™เบ—เบต. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡? เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ„เปเบฒเบ•เบญเบšเบˆเบฐเป€เบ›เบฑเบ™ msg_id, เบŠเบถเปˆเบ‡เป€เบ›เบฑเบ™เบŠเบปเปˆเบงเบ„เบฒเบงะฐเบ‚เป‰เบญเบเป€เบ›เบฑเบ™เบ›เป‰เบฒเบเบŠเบทเปˆ, เบเบฒเบ™เบกเบญเบšเบซเบกเบฒเบเบ—เบตเปˆเบ–เบทเบเป€เบฅเบทเปˆเบญเบ™เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบˆเบปเบ™เบเปˆเบงเบฒเบŠเป‰เบฒเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰ - เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ›เบฐเบ•เบดเป€เบชเบ”เบกเบฑเบ™เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเป€เบงเบฅเบฒเบšเปเปˆเบเบปเบ‡เบเบฑเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบšเบฅเบฒเบง (เปเบ™เปˆเบ™เบญเบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบกเป‰เบ„เป‰เบญเบ™เบ—เบตเปˆเบ›เปˆเบฝเบ™เป€เบงเบฅเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฒเบเบ›เบฐเบˆเบธเบšเบฑเบ™. เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบก delta เบ—เบตเปˆเบ„เบดเบ”เป„เบฅเปˆเบˆเบฒเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ - เบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เปเบ™เบงเบ™เบตเป‰, เปเบ•เปˆเบงเปˆเบฒเบกเบฑเบ™เปเบกเปˆเบ™ crude เปเบฅเบฐเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ buffering). เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เป‰เบงเบเบเบฒเบ™เป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบˆเบฒเบเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”, เบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฐเบœเปˆเบฒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  1. เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เปเบ–เบงเบ”เบฝเบงเปเบฅเบฐเบฅเปเบ–เป‰เบฒเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”.
  2. เปเบ•เปˆเบ‡เบ•เบฑเป‰เบ‡ msg_id เปเบฅเบฐเบ‚เปเป‰เบ„เบงเบฒเบกเป„เบ”เป‰เป„เบ›เบซเบฒเปเบ–เบงเบญเบทเปˆเบ™ - เบเบฒเบ™เบชเบปเปˆเบ‡เบ•เปเปˆเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰; เบชเบปเปˆเบ‡เป„เบ›เบ—เบตเปˆเป€เบ•เบปเป‰เบฒเบฎเบฑเบš.
  3. a) เป€เบŠเบตเบšเป€เบงเบตเบ•เบญเบš MsgsAck - เบ‚เปเป‰เบ„เบงเบฒเบกเบ–เบทเบเบชเบปเปˆเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบฅเบถเบšเบกเบฑเบ™เบญเบญเบเบˆเบฒเบ "เปเบ–เบงเบญเบทเปˆเบ™".
    b) เบซเบผเบทเปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™, เบฅเบฒเบงเบšเปเปˆเบกเบฑเบเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เบฅเบฒเบงเบ•เบญเบš badmsg - เบชเบปเปˆเบ‡เบ„เบทเบ™เบˆเบฒเบ "เปเบ–เบงเบญเบทเปˆเบ™"
    c) เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบ, เบ‚เปเป‰เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™ resent เบˆเบฒเบเปเบ–เบงเบญเบทเปˆเบ™ - เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเบฎเบนเป‰เบˆเบฑเบเปเบ™เปˆเบ™เบญเบ™เปƒเบ™เป€เบงเบฅเบฒเปƒเบ”.
  4. เบชเบธเบ”เบ—เป‰เบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡ RpcResult - เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ•เบปเบงเบˆเบดเบ‡ (เบซเบผเบทเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”) - เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบชเบปเปˆเบ‡, เปเบ•เปˆเบเบฑเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™.

เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเป„เบ”เป‰เบšเบฒเบ‡เบชเปˆเบงเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบŠเปเปˆเบ‚เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ–เบทเบเบšเบฑเบ™เบˆเบธเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบ™เบถเปˆเบ‡, เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ”เป‰เบงเบเบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เปƒเบ™เบซเบ™เบถเปˆเบ‡. msg_id. เปเบ•เปˆเบฅเบฒเบงเบเบฑเบ‡เบˆเบฐเบ›เบฐเบ•เบดเป€เบชเบ”เบŠเบธเบ”เบ™เบตเป‰, เบ–เป‰เบฒเบกเบตเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบœเบดเบ”เบžเบฒเบ”, เบ—เบฑเบ‡เบซเบกเบปเบ”.

เปเบฅเบฐเปƒเบ™เบˆเบธเบ”เบ™เบตเป‰, เบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบ—เบฒเบ‡เบงเบดเบŠเบฒเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบกเบฒเบกเบตเบšเบปเบ”เบšเบฒเบ”. เบˆเบฒเบเบ›เบฐเบชเบปเบšเบเบฒเบ™, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบซเบฑเบ™เป„เบกเป‰เบ„เป‰เบญเบ™เป€เบ—เบปเป‰เบฒเบซเบผเบฒเบเบขเปˆเบฒเบ‡, เปเบฅเบฐเบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเบšเปเปˆเบ”เบตเปเบฅเบฐเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบซเบผเบฒเบเบเบงเปˆเบฒเป€เบเบปเปˆเบฒ - เปƒเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบกเบฑเบ™เบ„เบธเป‰เบกเบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเป„เบงเป‰เบงเบฒเบ‡เปƒเบˆเปเบฅเบฐเบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบšเป? เบ„เปเบฒเบ–เบฒเบกเปเบกเปˆเบ™ rhetorical (เปเบ™เปˆเบ™เบญเบ™เบšเปเปˆเปเบกเปˆเบ™).

เบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบซเบเบฑเบ‡? เบ–เป‰เบฒเบขเบนเปˆเปƒเบ™เบซเบปเบงเบ‚เปเป‰เบ‚เบญเบ‡ "เบ‚เปเป‰เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบšเบขเบฒเป€เบชเบšเบ•เบดเบ”" เป€เบˆเบปเป‰เบฒเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ„เบฒเบ”เป€เบ”เบปเบฒเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ„เบฑเบ”เบ„เป‰เบฒเบ™เป€เบŠเบฑเปˆเบ™: "เป€เบˆเบปเป‰เบฒเป‚เบ‡เปˆ, เป€เบˆเบปเป‰เบฒเบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเปเบœเบ™เบเบฒเบ™เบ—เบตเปˆเบ”เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ!" (เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ‚เบฝเบ™เป€เบญเบเบฐเบชเบฒเบ™เบเปˆเบญเบ™, เบ•เบฒเบกเบ—เบตเปˆเบ„เบปเบ™เบ—เปเบฒเบกเบฐเบ”เบฒเบ„เบงเบ™, เบ”เป‰เบงเบเป€เบซเบ”เบœเบปเบ™เปเบฅเบฐเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบŠเบธเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบปเบ™เบ—เบฐเบ™เบฒ), เป€เบงเบฅเบฒ / เป€เบงเบฅเบฒเบซเบกเบปเบ”เป€เบงเบฅเบฒเปเบกเปˆเบ™เบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เปเบฅเบฐเบชเบฐเป€เบžเบฒเบฐ, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™. เป€เบญเบเบฐเบชเบฒเบ™เบšเบญเบเบซเบเบฑเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เปเบปเบ”เป€เบงเบฅเบฒ?

เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบกเบฑเบเบˆเบฐเบฎเบฑเบšเบฎเบนเป‰เบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฒเบเบฅเบนเบเบ„เป‰เบฒ (เบ•เบฒเบกเบ›เบปเบเบเบฐเบ•เบด, เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก RPC) เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡ RPC. เบ–เป‰เบฒเบเบฒเบ™เบ•เบญเบšเบชเบฐ เปœเบญเบ‡ เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบญเบฒเบ”เบˆเบฐเบชเบปเปˆเบ‡เบเบฒเบ™เบฎเบฑเบšเบฎเบนเป‰เบเบฒเบ™เบฎเบฑเบš, เปเบฅเบฐเบ•เปเปˆเบกเบฒ, เบเบฒเบ™เบ•เบญเบšเบชเบฐ เปœเบญเบ‡ เบ‚เบญเบ‡ RPC เป€เบญเบ‡.

เบฅเบนเบเบ„เป‰เบฒเบ›เบปเบเบเบฐเบ•เบดเบฎเบฑเบšเบฎเบนเป‰เบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ (เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบด, เบ„เปเบฒเบ•เบญเบš RPC) เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบกเบเบฒเบ™เบฎเบฑเบšเบฎเบนเป‰เบเบฑเบšเบ„เปเบฒเบ–เบฒเบก RPC เบ•เปเปˆเป„เบ›เบ–เป‰เบฒเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบชเบปเปˆเบ‡เบŠเป‰เบฒเป€เบเบตเบ™เป„เบ› (เบ–เป‰เบฒเบกเบฑเบ™เบ–เบทเบเบชเป‰เบฒเบ‡, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒ, 60-120 เบงเบดเบ™เบฒเบ—เบตเบซเบผเบฑเบ‡เบˆเบฒเบเป„เบ”เป‰เบฎเบฑเบš. เบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฒเบเป€เบŠเบตเบšเป€เบงเบต). เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ–เป‰เบฒเป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™, เบšเปเปˆเบกเบตเป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเบผเบทเบ–เป‰เบฒเบกเบตเบˆเปเบฒเบ™เบงเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบเบญเบกเบฎเบฑเบšเบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ (เป€เบงเบปเป‰เบฒเบงเปˆเบฒ, เบซเบผเบฒเบเบเบงเปˆเบฒ 16), เบฅเบนเบเบ„เป‰เบฒเบชเบปเปˆเบ‡เบเบฒเบ™เบฎเบฑเบšเบฎเบนเป‰เปเบšเบšเบขเบทเบ™เบขเบนเปˆเบ„เบปเบ™เบ”เบฝเบง.

... เบ‚เป‰เบญเบเปเบ›เบงเปˆเบฒ: เบ•เบปเบงเป€เบฎเบปเบฒเป€เบญเบ‡เบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™เบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”, เบชเบฐเบ™เบฑเป‰เบ™เปƒเบซเป‰เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เปเบšเบšเบ™เบตเป‰.

เปเบฅเบฐโ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบš pingsโ€‹:

เบ‚เปเป‰เบ„เบงเบฒเบก Ping (PING/PONG)

ping#7abe77ec ping_id:long = Pong;

เบเบฒเบ™เบ•เบญเบšเบชเบฐ เปœเบญเบ‡ เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเปเบกเปˆเบ™เบเบฑเบšเบ„เบทเบ™เบชเบนเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ”เบฝเบงเบเบฑเบ™:

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

เบ‚เปเป‰เบ„เบงเบฒเบกเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบšเปเปˆเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบฎเบฑเบšเบฎเบนเป‰. เบ›เบญเบ‡เบ–เบทเบเบชเบปเปˆเบ‡เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบเบฒเบ™เบ•เบญเบšเป‚เบ•เป‰เบเบฑเบš ping เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ ping เบชเบฒเบกเบฒเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป„เบ”เป‰เป‚เบ”เบเบ—เบฑเบ‡เบชเบญเบ‡เบ‚เป‰เบฒเบ‡.

เบเบฒเบ™เป€เบฅเบทเปˆเบญเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ›เบดเบ” + PING

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

เป€เบฎเบฑเบ”เบงเบฝเบเบ„เบทเบเบฑเบš ping. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเป„เบ”เป‰เบฎเบฑเบšเบญเบฑเบ™เบ™เบตเป‰เปเบฅเป‰เบง, เป€เบŠเบตเบšเป€เบงเบตเป€เบฅเบตเปˆเบกเบˆเบฑเบšเป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบ›เบดเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ disconnect_delay เบงเบดเบ™เบฒเบ—เบตเบ•เปเปˆเบกเบฒ เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบซเบกเปˆเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบ•เบฑเป‰เบ‡เป€เบงเบฅเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. เบ–เป‰เบฒเบฅเบนเบเบ„เป‰เบฒเบชเบปเปˆเบ‡ ping เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ—เบธเบเป† 60 เบงเบดเบ™เบฒเบ—เบต, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบเปเบฒเบ™เบปเบ” disconnect_delay เป€เบ—เบปเปˆเบฒเบเบฑเบš 75 เบงเบดเบ™เบฒเบ—เบต.

เป€เบˆเบปเป‰เบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบšเป‰เบฒโ€‹เบซเบงเบฒ?! เปƒเบ™ 60 เบงเบดเบ™เบฒเบ—เบต, เบฅเบปเบ”เป„เบŸเบˆเบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบชเบฐเบ–เบฒเบ™เบต, เบฅเบธเบ”เบฅเบปเบ‡เปเบฅเบฐเป€เบญเบปเบฒเบœเบนเป‰เป‚เบ”เบเบชเบฒเบ™, เปเบฅเบฐเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบชเบนเบ™เป€เบชเบเบเบฒเบ™เบ•เบดเบ”เบ•เปเปˆเปƒเบ™เบญเบธเป‚เบกเบ‡. เปƒเบ™ 120 เบงเบดเบ™เบฒเบ—เบต, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ—เปˆเบฒเบ™เป„เบ”เป‰เบเบดเบ™เบกเบฑเบ™, เบกเบฑเบ™เบˆเบฐเบกเบฒเบฎเบญเบ”เบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡, เปเบฅเบฐเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบญเบฒเบ”เบˆเบฐเปเบ•เบ. เปเบฅเป‰เบง, เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบ‚เบฒเบกเบฒเบˆเบฒเบเปƒเบช - "เบ‚เป‰เบญเบเป„เบ”เป‰เบเบดเบ™เบชเบฝเบ‡เบ”เบฑเบ‡, เปเบ•เปˆเบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเบกเบฑเบ™เบขเบนเปˆเปƒเบช", เบกเบตเบฅเบฐเบšเบปเบšเบ‚เบญเบ‡ Nagl เปเบฅเบฐเบ—เบฒเบ‡เป€เบฅเบทเบญเบ TCP_NODELAY, เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบšเบšเป‚เบ•เป‰เบ•เบญเบš. เปเบ•เปˆ, excuse เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒ, เบ–เบทเบชเบธเบ”เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบกเบฑเบ™ - 200 เบกเบดเบ™เบฅเบตเบงเบดเบ™เบฒเบ—เบต เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบžเบฑเบ™เบฅเบฐเบ™เบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เปเบฅเบฐเบ›เบฐเบซเบเบฑเบ”เบชเบญเบ‡เบชเบฒเบกเปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบซเป‰เบ›เบดเบ”เบกเบฑเบ™เป„เบงเป‰ 5 เบงเบดเบ™เบฒเบ—เบต, เบซเบผเบทเปƒเบ”เบเปเปˆเบ•เบฒเบก "เบœเบนเป‰เปƒเบŠเป‰เบเปเบฒเบฅเบฑเบ‡เบžเบดเบก ... " เบ‚เปเป‰เบ„เบงเบฒเบกเบซเบกเบปเบ”เป€เบงเบฅเบฒเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™. เปเบ•เปˆเบšเปเปˆเบกเบตเบญเบตเบเปเบฅเป‰เบง.

เปเบฅเบฐเบชเบธเบ”เบ—เป‰เบฒเบ, pings. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ TCP. เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ•เบฐเบซเบฅเบปเบ, เปเบ•เปˆเบ›เบฐเบกเบฒเบ™ 10 เบ›เบตเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ‚เบฝเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบœเบนเป‰เบชเบปเปˆเบ‡เบ‚เปˆเบฒเบงเบ‚เบญเบ‡เบซเปเบžเบฑเบเบ‚เบญเบ‡เบ„เบฐเบ™เบฐเบงเบดเบŠเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ - เบœเบนเป‰เบ‚เบฝเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เบเบฑเบ‡เป„เบ”เป‰ ping เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบˆเบฒเบเบฅเบนเบเบ„เป‰เบฒ, เปเบฅเบฐเบšเปเปˆเบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก. เปเบ•เปˆเบ™เบฑเบเบชเบถเบเบชเบฒเบ›เบต 3 เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡, เปเบฅเบฐเบซเป‰เบญเบ‡เบเบฒเบ™เบชเบฒเบเบปเบ™เปเบกเปˆเบ™เบญเบตเบ, เบšเปเปˆเปเบกเปˆเบ™เบšเป?..

เบซเบ™เป‰เบฒเบ—เปเบฒเบญเบดเบ”, เป‚เบ„เบ‡เบเบฒเบ™เบเบฒเบ™เบชเบถเบเบชเบฒเป€เบฅเบฑเบเบ™เป‰เบญเบ. เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ TCP, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบšเปเปˆเบกเบตเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เปเบžเบฑเบเป€เบเบฑเบ”, เบชเบฒเบกเบฒเบ”เบกเบตเบŠเบตเบงเบดเบ”เบขเบนเปˆเป„เบ”เป‰เบซเบผเบฒเบเบญเบฒเบ—เบดเบ”. เบ™เบตเป‰เปเบกเปˆเบ™เบ—เบฑเบ‡เบ”เบตเปเบฅเบฐเบšเปเปˆเบ”เบต, เบ‚เบถเป‰เบ™เบเบฑเบšเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡. เบกเบฑเบ™เบ”เบตเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ SSH เป€เบ›เบตเบ”เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบ—เปˆเบฒเบ™เป„เบ”เป‰เบฅเบธเบเบ‚เบถเป‰เบ™เบˆเบฒเบเบ„เบญเบกเบžเบดเบงเป€เบ•เบต, reboot router, เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™ - เป€เบŠเบ”เบŠเบฑเบ™เบœเปˆเบฒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบˆเบตเบ (เบ—เปˆเบฒเบ™เบšเปเปˆเป„เบ”เป‰เบžเบดเบกเบซเบเบฑเบ‡, เบšเปเปˆเบกเบตเปเบžเบฑเบเป€เบเบฑเบ”) , เบกเบฑเบ™เบชเบฐเบ”เบงเบ. เบกเบฑเบ™เบšเปเปˆเบ”เบตเบ–เป‰เบฒเบกเบตเบฅเบนเบเบ„เป‰เบฒเบซเบฅเบฒเบเบžเบฑเบ™เบ„เบปเบ™เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เปƒเบŠเป‰เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ (เบชเบฐเบšเบฒเบเบ”เบต, Postgres!), เปเบฅเบฐเป€เบˆเบปเป‰เบฒเบžเบฒเบšเบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบญเบฒเบ”เบˆเบฐ rebooted เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰ - เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™.

เบฅเบฐเบšเบปเบšเบชเบปเบ™เบ—เบฐเบ™เบฒ / IM เบ•เบปเบเบขเบนเปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเบชเบญเบ‡เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบซเบ™เบถเปˆเบ‡ - เบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบšเบญเบญเบ™เป„เบฅเบ™เปŒ. เบ–เป‰เบฒเบœเบนเป‰เปƒเบŠเป‰ "เบฅเบปเป‰เบกเบฅเบปเบ‡", เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปเบˆเป‰เบ‡เปƒเบซเป‰เบœเบนเป‰เบ•เบดเบ”เบ•เปเปˆเบ‚เบญเบ‡เบฅเบฒเบงเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰. เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบˆเบฐเบชเบดเป‰เบ™เบชเบธเบ”เบ”เป‰เบงเบเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบœเบนเป‰เบชเป‰เบฒเบ‡ Jabber เป„เบ”เป‰เป€เบฎเบฑเบ” (เปเบฅเบฐเปเบเป‰เป„เบ‚เบชเปเบฒเบฅเบฑเบš 20 เบ›เบต) - เบœเบนเป‰เปƒเบŠเป‰เป„เบ”เป‰เบ•เบฑเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เปเบ•เปˆเบžเบงเบเป€เบ‚เบปเบฒเบเบฑเบ‡เบชเบทเบšเบ•เปเปˆเบ‚เบฝเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบซเบฒเบฅเบฒเบง, เป€เบŠเบทเปˆเบญเบงเปˆเบฒเบฅเบฒเบงเบญเบญเบ™เป„เบฅเบ™เปŒ (เป€เบŠเบดเปˆเบ‡เบเบฑเบ‡เบชเบนเบ™เป€เบชเบเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบชเบดเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰. เบชเบญเบ‡เบชเบฒเบกเบ™เบฒเบ—เบตเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ•เบฑเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป„เบ”เป‰เบ–เบทเบเบ„เบปเป‰เบ™เบžเบปเบš). เบšเปเปˆ, เบ—เบฒเบ‡เป€เบฅเบทเบญเบ TCP_KEEPALIVE, เป€เบŠเบดเปˆเบ‡เบซเบผเบฒเบเบ„เบปเบ™เบ—เบตเปˆเบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเบดเบ—เบตเบเบฒเบ™เบˆเบฑเบšเป€เบงเบฅเบฒ TCP เป€เบฎเบฑเบ”เบงเบฝเบเปเบšเบšเบชเบธเปˆเบก (เป‚เบ”เบเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเบ—เปเบฒเบกเบฐเบŠเบฒเบ”เป€เบŠเบฑเปˆเบ™เบชเบดเบšเบงเบดเบ™เบฒเบ—เบต), เบˆเบฐเบšเปเปˆเบŠเปˆเบงเบเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰ - เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆ OS kernel เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เปเบกเปˆเบ™เบกเบตเบŠเบตเบงเบดเบ”เบขเบนเปˆ, เปเบ•เปˆเบเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบ›เบปเบเบเบฐเบ•เบด, เบชเบฒเบกเบฒเบ”เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เป„เบ”เป‰, เปเบฅเบฐเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡ (เบ—เปˆเบฒเบ™เบ„เบดเบ”เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เปเบŠเปˆเปเบ‚เปเบ‡เป„เบ”เป‰เบšเป? Telegram Desktop เปƒเบ™ Ubuntu 18.04 froze เบชเปเบฒเบฅเบฑเบšเบ‚เป‰เบญเบเบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡).

เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡ ping server เบฅเบนเบเบ„เป‰เบฒ, เปเบฅเบฐเบšเปเปˆเบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก - เบ–เป‰เบฒเบฅเบนเบเบ„เป‰เบฒเป€เบฎเบฑเบ”เปเบšเบšเบ™เบตเป‰, เบ–เป‰เบฒเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ–เบทเบเบ—เปเบฒเบฅเบฒเบ, ping เบˆเบฐเบšเปเปˆเบ–เบทเบเบชเบปเปˆเบ‡, เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบˆเบฐเบšเปเปˆเบšเบฑเบ™เบฅเบธ.

เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบซเบเบฑเบ‡เบขเบนเปˆเปƒเบ™ Telegram? เบกเบฑเบ™เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบกเปเบ—เป‰เป†! เบ”เบต, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™. เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™, เปเบ™เปˆเบ™เบญเบ™, เบ—เบฑเบ‡เบชเบญเบ‡เบเปˆเบฒเบเบชเบฒเบกเบฒเบ” ping เป€เบŠเบดเปˆเบ‡เบเบฑเบ™เปเบฅเบฐเบเบฑเบ™. เปƒเบ™เบ—เบฒเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”, เบฅเบนเบเบ„เป‰เบฒเปƒเบŠเป‰เป„เบกเป‰เบ„เป‰เบญเบ™เป€เบ—เบปเป‰เบฒ ping_delay_disconnect, เป€เบŠเบดเปˆเบ‡เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เบ”เบต, เบ‚เปเป‚เบ—เบ”, เบกเบฑเบ™เบšเปเปˆเบ‚เบถเป‰เบ™เบเบฑเบšเบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเบˆเบฐเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบฅเบฒเบงเบ•เป‰เบญเบ‡เบเบฒเบ™เบญเบฒเป„เบชเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เบ”เบปเบ™เบ›เบฒเบ™เปƒเบ”เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ ping. เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เป‚เบซเบผเบ”เบ‚เบญเบ‡เบกเบฑเบ™, เบฎเบนเป‰เบ”เบตเบเบงเปˆเบฒ. เปเบ•เปˆ, เปเบ™เปˆเบ™เบญเบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบชเบปเบ™เปƒเบˆเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบˆเบฐเป€เบ›เบฑเบ™ Pinocchio เบ—เบตเปˆเบŠเบปเปˆเบงเบฎเป‰เบฒเบเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบญเบ‡, เปเบฅเบฐเป„เบกเป‰เบ„เป‰เบญเบ™เป€เบ—เบปเป‰เบฒเบˆเบฐเป€เบฎเบฑเบ” ...

เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบ–เบทเบเบญเบญเบเปเบšเบšเปเบ™เบงเปƒเบ”?

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบŠเบทเปˆเบญเบงเปˆเบฒเบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ—เบตเปˆเบšเปเปˆเบชเบนเบ‡เบซเบผเบฒเบเบ‚เบญเบ‡เบ—เบตเบกเบ‡เบฒเบ™ Telegram / VKontakte เปƒเบ™เบ‚เบปเบ‡เป€เบ‚เบ”เบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡ (เปเบฅเบฐเบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒ) เบ‚เบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ„เบญเบกเบžเบดเบงเป€เบ•เบตเปเบฅเบฐเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบ•เปเปˆเบฒเปƒเบ™เป€เบฅเบทเปˆเบญเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡.

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบกเบฑเบ™เบˆเบถเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ, เปเบฅเบฐเบ™เบฑเบเบชเบฐเบ–เบฒเบ›เบฐเบ™เบดเบ Telegram เบžเบฐเบเบฒเบเบฒเบกเบ„เบฑเบ”เบ„เป‰เบฒเบ™เปเบ™เบงเปƒเบ”? เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบžเบฐเบเบฒเบเบฒเบกเป€เบฎเบฑเบ”เบเบญเบ‡เบ›เบฐเบŠเบธเบกเบ—เบตเปˆเบฅเบญเบ”เบŠเบตเบงเบดเบ”เบเบฒเบ™เบขเบธเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ TCP, i.e., เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบชเบปเปˆเบ‡เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบปเปˆเบ‡เบ•เปเปˆเบกเบฒ. เบžเบงเบเป€เบ‚เบปเบฒเบญเบฒเบ”เบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเป€เบฎเบฑเบ”เบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡ UDP, เปเบ•เปˆเบžเบงเบเป€เบ‚เบปเบฒเบ›เบฐเบชเบปเบšเบเบฑเบšเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเปเบฅเบฐเบ›เบฐเบ–เบดเป‰เบกเบกเบฑเบ™ (เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบงเปˆเบฒเป€เบญเบเบฐเบชเบฒเบ™เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ - เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ—เบตเปˆเบˆเบฐเป€เบงเบปเป‰เบฒเป‚เบญเป‰เบญเบงเบ”). เปเบ•เปˆเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ‚เบฒเบ”เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเบฐ TCP เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเป€เบฎเบฑเบ”เบงเบฝเบ, เบšเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเบตเบ‡เปƒเบชเปˆเบกเบฑเบ™, เปเบฅเบฐเบšเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบกเบฑเบ™เป€เบญเบ‡ (เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™), เปเบฅเบฐเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบˆเบฐเบชเบปเบกเบ—เบปเบšเบเบฑเบš cryptography "เบชเบญเบ‡เบ™เบปเบเบเบฑเบš. เบซเบตเบ™เบเป‰เบญเบ™เบ”เบฝเบงโ€, เบ™เบตเป‰เปเบกเปˆเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš.

เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”? เบญเบตเบ‡เปƒเบชเปˆเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒ msg_id เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฐเบ—เบฑเบšเบ•เบฒเป€เบงเบฅเบฒเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบˆเบฒเบเบˆเบธเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบฅเบฑเบšเป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เป‚เบˆเบกเบ•เบต replay, เบกเบฑเบ™เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบˆเบฐเปเบ™เบšเบŸเบฑเบ‡เบŠเบฑเบ™เบ•เบปเบงเบฅเบฐเบšเบธเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบเบฑเบšเบกเบฑเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™ (เป€เบกเบทเปˆเบญเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบซเบปเบงเบ‚เปเป‰ API เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเปเบฒเบฅเบฑเบšเบžเบฒเบเบชเปˆเบงเบ™เบญเบทเปˆเบ™เบ‚เบญเบ‡เบŠเบธเบ”เบ™เบตเป‰), เบซเบ™เบถเปˆเบ‡เบˆเบฐเบ•เป‰เบญเบ‡:

  1. เป€เบŠเบตเบšเป€เบงเบตเบ—เบตเปˆเบ–เบทเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ TCP เบเบฑเบšเบฅเบนเบเบ„เป‰เบฒเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบš - เบ–เป‰เบฒเบกเบฑเบ™เป„เบ”เป‰เบญเปˆเบฒเบ™เบˆเบฒเบเบŠเบฑเบญเบเป€เบเบฑเบ”, เบเบฐเบฅเบธเบ™เบฒเบฎเบฑเบšเบฎเบนเป‰, เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบซเบผเบทเบชเบปเปˆเบ‡เบ„เบทเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”, เบšเปเปˆเบกเบตเบเบฒเบ™เบชเบนเบ™เป€เบชเบ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™ vector เบ‚เบญเบ‡ ids, เปเบ•เปˆเบžเบฝเบ‡เปเบ•เปˆ "seq_no เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบชเบธเบ”เบ—เป‰เบฒเบ" - เบžเบฝเบ‡เปเบ•เปˆเบ•เบปเบงเป€เบฅเบ, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบš TCP (เบชเบญเบ‡เบ•เบปเบงเป€เบฅเบ - seq เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบขเบทเบ™เบขเบฑเบ™). เบžเบงเบเป€เบฎเบปเบฒเบขเบนเปˆเปƒเบ™เบเบญเบ‡เบ›เบฐเบŠเบธเบกเบชเบฐเป€เบซเบกเบต, เบšเปเปˆเปเบกเปˆเบ™เบšเป?
  2. เป€เบงเบฅเบฒเป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เป‚เบˆเบกเบ•เบต replay เบเบฒเบเป€เบ›เบฑเบ™เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, a la nonce. เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบเบงเบ”เบชเบญเบš, เปเบ•เปˆเบšเปเปˆเบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบซเบเบฑเบ‡เบญเบตเบ. เบžเบฝเบ‡เบžเปเปเบฅเบฐ uint32 - เบ–เป‰เบฒเป€เบเบทเบญเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ›เปˆเบฝเบ™เปเบ›เบ‡เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบ—เบธเบเป†เป€เบ„เบดเปˆเบ‡เบกเบทเป‰, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบชเบฑเบ™ 16 bits เปƒเบซเป‰เบเบฑเบš bits เบ•เปˆเปเบฒเบ‚เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบกเบ‚เบญเบ‡เป€เบงเบฅเบฒเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™, เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญ - เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เป€เบชเบ”เป€เบซเบผเบทเบญเบ‚เบญเบ‡เบงเบดเบ™เบฒเบ—เบต (เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™).
  3. เบฅเบถเบšเบญเบญเบเปเบฅเป‰เบง msg_id เบ—เบฑเบ‡เบซเบกเบปเบ” - เบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ‚เบญเบ‡เบเบฒเบ™เบˆเปเบฒเปเบ™เบเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปƒเบ™ backends, เบกเบต, เบ—เปเบฒเบญเบดเบ”, id เบฅเบนเบเบ„เป‰เบฒ, เปเบฅเบฐเบญเบฑเบ™เบ—เบตเบชเบญเบ‡, session id, concatenate เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ. เบ•เบฒเบกโ€‹เบ™เบฑเป‰เบ™โ€‹เปเบฅเป‰เบง, เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบชเบดเปˆเบ‡โ€‹เบ”เบฝเบงโ€‹เป€เบ—เบปเปˆเบฒโ€‹เบ™เบฑเป‰เบ™โ€‹เปเบกเปˆเบ™โ€‹เบžเบฝเบ‡โ€‹เบžเปโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เบปเบงโ€‹เบฅเบฐเบšเบธโ€‹เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เป seq_no.

เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”; เปเบšเบšเบชเบธเปˆเบกเบ—เบตเปˆเบชเบปเบกเบšเบนเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบ•เบปเบงเบฅเบฐเบšเบธ - เบ™เบตเป‰เปเบกเปˆเบ™เป€เบฎเบฑเบ”เปเบฅเป‰เบงเปƒเบ™ API เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เปƒเบ™เป€เบงเบฅเบฒเบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก, เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™. เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ„เบทเบ™เปƒเบซเบกเปˆเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบˆเบฒเบเบžเบตเปˆเบ™เป‰เบญเบ‡เบเบฑเบšเบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡, เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เบซเบปเบงเบ‚เปเป‰เบชเปเบฒเบฅเบฑเบšเบžเบฒเบเบชเปˆเบงเบ™เบญเบทเปˆเบ™, เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบ•เบญเบšเบ™เบตเป‰.

API?

เบ•เบฒเบ”เบณ! เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป‚เบ”เบเป„เบ”เป‰เบ•เปเปˆเบชเบนเป‰เบเบฑเบšเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเป€เบ•เบฑเบกเป„เบ›เบ”เป‰เบงเบเบ„เบงเบฒเบกเป€เบˆเบฑเบšเบ›เบงเบ”เปเบฅเบฐเป„เบกเป‰เบ„เป‰เบญเบ™เป€เบ—เบปเป‰เบฒ, เปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเปƒเบ”เป†เป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เปเบฒเบ•เบญเบšเปƒเบ”เป†เบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ (เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ•เปเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป, เปเบ•เปˆเบกเบฑเบ™เป€เบญเบ‡. เบชเบปเปˆเบ‡เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒ, เป€เบŠเบฑเปˆเบ™ PUSH, เบ–เป‰เบฒเปƒเบœเบกเบฑเบ™เบˆเบฐเปเบˆเป‰เบ‡เบเบงเปˆเบฒเบ™เบฑเป‰เบ™).

เป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆ, เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบˆเบฐเบกเบตเบ•เบปเบงเบขเปˆเบฒเบ‡เบ”เบฝเบงเปƒเบ™ Perl เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบก! (เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบšเปเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบš syntax, เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบžเบญเบ™เปเบกเปˆเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธ, เบญเบฑเบ™เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ‚เบญเบ‡เบกเบฑเบ™):

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, เบเบปเบเป€เบงเบฑเป‰เบ™เบงเปˆเบฒเบŠเบฑเป‰เบ™เบฎเบฝเบ™เบเบฑเบ‡เบ•เบดเบ”เบเบฑเบšเบงเบฑเบ”เบ–เบธ?..

เบชเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบกเบฑเบ™ turns เบญเบญเบ ... เบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบเปˆเบฝเบงเบเบฑเบš, comrades?.. เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบซเบผเบฒเบ - เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบขเบธเบ”เป€เบŠเบปเบฒเบเบฒเบ™เบžเบฑเบเบœเปˆเบญเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเป€เบงเบฑเบš. เบžเบฝเบ‡เปเบ•เปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™?..เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆ JSON เบœเปˆเบฒเบ™ HTTPS เบˆเบฐเบ‡เปˆเบฒเบเบเบงเปˆเบฒเบšเป?! เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบซเบเบฑเบ‡เปƒเบ™เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™? เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ„เบธเป‰เบกเบ„เปˆเบฒเบšเป?

เบกเบฒเบ›เบฐเป€เบกเบตเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆ TL+MTProto เบกเบญเบšเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒ เปเบฅเบฐเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปเบ™เบงเปƒเบ”. เบ”เบต, HTTP, เป€เบŠเบดเปˆเบ‡เบชเบธเบกเปƒเบชเปˆเบฎเบนเบšเปเบšเบšเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป, เปเบกเปˆเบ™เป€เบซเบกเบฒเบฐเบชเบปเบกเบ—เบตเปˆเบšเปเปˆเบ”เบต, เปเบ•เปˆเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบขเบนเปˆเป€เบ—เบดเบ‡ TLS?

serialization เบซเบ™เบฒเปเบซเบ™เป‰เบ™. เป€เบšเบดเปˆเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰, เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš JSON, เบ‚เป‰เบญเบเบˆเบทเปˆเป„เบ”เป‰เบงเปˆเบฒเบกเบตเบฅเบธเป‰เบ™ binary เบ‚เบญเบ‡เบกเบฑเบ™. เปƒเบซเป‰เบซเบกเบฒเบ MsgPack เป€เบ›เบฑเบ™เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบšเปเปˆเบžเบฝเบ‡เบžเป, เปเบ•เปˆเบกเบต, เบ•เบปเบงเบขเปˆเบฒเบ‡, CBOR - เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™. RFC 7049. เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบฑเบ‡เป€เบเบ”เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบกเบฑเบ™เบเปเบฒเบ™เบปเบ” เปเบ—เบฑเบ, เป€เบ›เบฑเบ™เบเบปเบ™เป„เบเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบ, เปเบฅเบฐเปƒเบ™เบšเบฑเบ™เบ”เบฒ เป„เบ”เป‰เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปเบฅเป‰เบง เบกเบตเปƒเบซเป‰:

  • 25 + 256 - เบเบฒเบ™เบ›เปˆเบฝเบ™เบชเบฒเบเบ—เบตเปˆเบŠเป‰เปเบฒเบเบฑเบ™เบ”เป‰เบงเบเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ–เบดเบ‡เบˆเปเบฒเบ™เบงเบ™เป€เบชเบฑเป‰เบ™, เป€เบŠเบฑเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบšเบตเบšเบญเบฑเบ”เบฅเบฒเบ„เบฒเบ–เบทเบ
  • 26 - serialized Perl object เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบซเป‰เบญเบ‡เบฎเบฝเบ™ เปเบฅเบฐ constructor arguments
  • 27 - serialized language-independent object with type name and constructor arguments

เบ”เบต, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบžเบฐเบเบฒเบเบฒเบก serialize เบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™เปƒเบ™ TL เปเบฅเบฐเปƒเบ™ CBOR เบ”เป‰เบงเบเบเบฒเบ™เป€เบ›เบตเบ”เบชเบฒเบเปเบฅเบฐเบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆเบงเบฑเบ”เบ–เบธ. เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเป€เบฅเบตเปˆเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปƒเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ‚เบญเบ‡ CBOR เบšเบฒเบ‡เบšเปˆเบญเบ™เบˆเบฒเบ megabyte:

cborlen=1039673 tl_len=1095092

เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™ เบชเบฐเบซเบผเบธเบš: เบกเบตเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบ‡เปˆเบฒเบเบเบงเปˆเบฒเบซเบผเบฒเบเบ—เบตเปˆเบšเปเปˆเบ‚เบถเป‰เบ™เบเบฑเบšเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡ synchronization เบฅเบปเป‰เบกเป€เบซเบผเบง เบซเบผเบทเบ•เบปเบงเบฅเบฐเบšเบธเบ—เบตเปˆเบšเปเปˆเบฎเบนเป‰เบˆเบฑเบ, เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ›เบฝเบšเบ—เบฝเบš.

เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบฑเป‰เบ‡โ€‹เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เป„เบงโ€‹. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบชเบนเบ™ RTT เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ„เบทเบ™เปƒเบซเบกเปˆ (เป€เบกเบทเปˆเบญเบ„เบตเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เปเบฅเป‰เบงเบ„เบฑเป‰เบ‡เบ”เบฝเบง) - เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰เบˆเบฒเบเบ‚เปเป‰เบ„เบงเบฒเบก MTProto เบ—เปเบฒเบญเบดเบ”, เปเบ•เปˆเบงเปˆเบฒเบกเบตเบเบฒเบ™เบˆเบญเบ‡เบšเบฒเบ‡ - เบกเบปเบ™เบ•เบตเป€เบเบทเบญเบ”เบฝเบงเบเบฑเบ™, เป€เบŠเบ”เบŠเบฑเบ™เบšเปเปˆ rotten, เปเบฅเบฐเบญเบทเปˆเบ™เป†. TLS เบชเบฐเป€เปœเบตเบซเบเบฑเบ‡เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเปเบ—เบ™? เบญเป‰เบฒเบ‡เป€เบ–เบดเบ‡เบซเบปเบงเบ‚เปเป‰:

เป€เบกเบทเปˆเบญเปƒเบŠเป‰ PFS เปƒเบ™ TLS, TLS session tickets (RFC 5077) เป€เบžเบทเปˆเบญเบชเบทเบšเบ•เปเปˆเป€เบŠเบ”เบŠเบฑเบ™เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เป„เบงเป‰เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เป€เบˆเบฅเบฐเบˆเบฒเบ„เบทเบ™เปƒเบซเบกเปˆ เปเบฅเบฐเบšเปเปˆเบกเบตเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบขเบนเปˆเปƒเบ™เป€เบŠเบตเบšเป€เบงเบต. เป€เบกเบทเปˆเบญเป€เบ›เบตเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เปเบฒเบญเบดเบ”เปเบฅเบฐเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบˆเบฐเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบฅเบฐเบชเบปเปˆเบ‡เบกเบฑเบ™เป„เบ›เบซเบฒเบฅเบนเบเบ„เป‰เบฒ (เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบ›เบตเป‰เบเบญเบ‡เบ›เบฐเบŠเบธเบก). เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ„เบทเบ™เปƒเบซเบกเปˆ, เบฅเบนเบเบ„เป‰เบฒเบชเบปเปˆเบ‡เบ•เบปเป‹เบงเบเบญเบ‡เบ›เบฐเบŠเบธเบก, เบฅเบงเบกเบ—เบฑเบ‡เบฅเบฐเบซเบฑเบ”เป€เบŠเบ”เบŠเบฑเบ™, เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เบ›เบตเป‰เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ”เป‰เบงเบเบเบฐเปเบˆเบŠเบปเปˆเบงเบ„เบฒเบง (เบฅเบฐเบซเบฑเบ”เบ›เบตเป‰เป€เบŠเบ”เบŠเบฑเบ™), เป€เบŠเบดเปˆเบ‡เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เป€เบŠเบตเบšเป€เบงเบต เปเบฅเบฐเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเปƒเบ™เบšเบฑเบ™เบ”เบฒเป€เบŠเบตเบšเป€เบงเบตเบ”เป‰เบฒเบ™เปœเป‰เบฒเบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบ›เบฐเบกเบงเบ™เบœเบปเบ™ SSL เปƒเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบเบธเปˆเบก.[10]. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡เบ•เบปเป‹เบงเบเบญเบ‡เบ›เบฐเบŠเบธเบกเบญเบฒเบ”เบˆเบฐเบฅเบฐเป€เบกเบตเบ” PFS เบ–เป‰เบฒเบเบฐเปเบˆเป€เบŠเบตเบšเป€เบงเบตเบ–เบทเบเบ—เปเบฒเบฅเบฒเบ, เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบกเบทเปˆเบญเบžเบงเบเบกเบฑเบ™เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™ (OpenSSL, nginx, Apache เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบžเบงเบเบกเบฑเบ™เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเป„เบฅเบเบฐเป€เบงเบฅเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™; เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบ™เบดเบเบปเบกเปƒเบŠเป‰. เบเบธเบ™เปเบˆเป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบซเบผเบฒเบเบŠเบปเปˆเบงเป‚เบกเบ‡, เป€เบ–เบดเบ‡เบกเบทเป‰).

เบ—เบตเปˆเบ™เบตเป‰ RTT เบšเปเปˆเปเบกเปˆเบ™เบชเบนเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปเบฅเบเบ›เปˆเบฝเบ™เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบ ClientHello เปเบฅเบฐ ServerHello, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบฅเบนเบเบ„เป‰เบฒเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบžเป‰เบญเบกเบเบฑเบš Finished. เปเบ•เปˆเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบ„เบงเบ™เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบกเบตเป€เบงเบฑเบš, เบกเบตเบŠเปเปˆเบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบตเปˆเป€เบ›เบตเบ”เปƒเบซเบกเปˆ, เปเบ•เปˆ messenger, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบตเปˆเบกเบฑเบเบˆเบฐเป€เบ›เบฑเบ™เบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบซเบผเบฒเบเบซเบผเบทเบซเบ™เป‰เบญเบ, เบเบฒเบง, เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบชเบฑเป‰เบ™เบเบฑเบšเบซเบ™เป‰เบฒเป€เบงเบฑเบš - เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™ multiplexed. เบžเบฒเบเปƒเบ™. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบเบญเบกเบฎเบฑเบšเป„เบ”เป‰เบซเบผเบฒเบเบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบžเบปเบšเบเบฑเบšเบžเบฒเบเบชเปˆเบงเบ™เบฅเบปเบ”เป„เบŸเปƒเบ•เป‰เบ”เบดเบ™เบ—เบตเปˆเบšเปเปˆเบ”เบตเปเบ—เป‰เป†.

เบฅเบทเบกเบญเบฑเบ™เบญเบทเปˆเบ™เบšเป? เบ‚เบฝเบ™เปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™.

เบ•เบดเบ”โ€‹เบ•เบฒเบกโ€‹เบ•เบญเบ™โ€‹เบ•เปเปˆโ€‹เป„เบ›!

เปƒเบ™เบžเบฒเบเบ—เบตเบชเบญเบ‡เบ‚เบญเบ‡เบซเบปเบงเบ‚เปเป‰เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบšเปเปˆเปเบกเปˆเบ™เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™, เปเบ•เปˆเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบญเบปเบ‡เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡ - เบงเบดเบ—เบตเบเบฒเบ™, เบญเบธเบ”เบปเบกเบเบฒเบ™, เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš, เบ—เบฑเบ”เบชเบฐเบ™เบฐเบ„เบฐเบ•เบดเบ•เปเปˆเบœเบนเป‰เปƒเบŠเป‰, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบญเบตเบ‡เบ•เบฒเบกเบ‚เปเป‰เบกเบนเบ™เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เบ—เบตเปˆเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰.

เบชเปˆเบงเบ™เบ—เบตเบชเบฒเบกเบˆเบฐเบชเบทเบšเบ•เปเปˆเบงเบดเป€เบ„เบฒเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™ / เบ›เบฐเบชเบปเบšเบเบฒเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ. เบ—เปˆเบฒเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ:

  • เบเบฒเบ™เบชเบทเบšเบ•เปเปˆเบ‚เบญเบ‡ pandemonium เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบซเบฅเบฒเบเบซเบฅเบฒเบเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ” TL
  • เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบŠเปˆเบญเบ‡เบ—เบฒเบ‡ เปเบฅเบฐเบเบธเปˆเบกเปƒเบซเบเปˆ
  • เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบเปˆเบญเบ‡เป‚เบ•เป‰เบ•เบญเบšเบˆเบถเปˆเบ‡เบฎเป‰เบฒเบเปเบฎเบ‡เบเบงเปˆเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบเบฒเบ™
  • เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹เบ—เบตเปˆโ€‹เบชเบปเบกโ€‹เบšเบนเบ™โ€‹เปเบฅเบฐโ€‹เบžเบตเปˆโ€‹เบ™เป‰เบญเบ‡โ€‹เบเบฑเบ™โ€‹
  • เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบฎเบนเบšเบžเบฒเบšเปเบฅเบฐเบฎเบนเบšเบžเบฒเบšเปเบกเปˆเบ™เบซเบเบฑเบ‡
  • emoji เปเบŠเบเปเบŠเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ•เบปเบงเบญเบฝเบ‡เปเบ™เบงเปƒเบ”

เปเบฅเบฐเป„เบกเป‰เบ„เป‰เบญเบ™เป€เบ—เบปเป‰เบฒเบญเบทเปˆเบ™เป†! เบ•เบดเบ”เบ•เบฒเบกเบขเบนเปˆ!

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™