æè¿ãTelegram ãããã«åªããŠããããDurov å åŒããããã¯ãŒã¯ ã·ã¹ãã ã®æ§ç¯ã«ãããŠã©ãã»ã©åªç§ã§çµéšè±å¯ã§ããããªã©ã«ã€ããŠã®æçš¿ã Habré ã«é »ç¹ã«è¡šç€ºãããããã«ãªããŸããã åæã«ãæè¡çãªããã€ã¹ã«å®éã«æ²¡é ããŠãã人ã¯ã»ãšãã©ããŸããããããããããªãåçŽãª (MTProto ãšã¯å€§ããç°ãªã) JSON ããŒã¹ã® Bot API ã䜿çšããã ãã§ãéåžžã¯åã«åãå ¥ããã ãã§ãã ä¿¡ä»°ã«ã€ã㊠ãã¹ãŠã®è³è³ã PR ã¯ã¡ãã»ã³ãžã£ãŒãäžå¿ã«å±éãããŸãã ã»ãŒ XNUMX 幎ååãNPO Echelon Vasily ã®ç§ã®åå (æ®å¿µãªããšã«ãHabré ã«é¢ãã圌ã®ã¢ã«ãŠã³ãã¯èçš¿ãšãšãã«åé€ãããŸãã) ã Perl ã§ç¬èªã® Telegram ã¯ã©ã€ã¢ã³ããäžããæžãå§ãããã®åŸããããã®è¡ã®èè ãå ãããŸããã ãªã Perl ãªã®ã§ãããã?ãšããã«çåã«æã人ãããã§ãããã ãªããªããä»ã®èšèªã§ããã®ãããªãããžã§ã¯ãããã§ã«ååšããããã§ããå®éãããã¯éèŠã§ã¯ãªããä»ã®èšèªã§ãå¯èœã§ãã å®æããã©ã€ãã©ãªãããã£ãŠãäœè ã¯æåŸãŸã§è¡ããªããã°ãªããŸãã ãŒãããã ããã«ãæå·åãšã¯ãä¿¡é Œãããã®ã§ãããæ€èšŒãããã®ã§ãã ã»ãã¥ãªãã£ã«éç¹ã眮ãã補åã§ã¯ããã³ããŒã®æ¢è£œã©ã€ãã©ãªã«äŸåããŠç²ç®çã«ä¿¡ããããšã¯ã§ããŸãã (ãã ããããã«ã€ããŠã¯ç¬¬ XNUMX éšã§è©³ãã説æããŸã)ã çŸæç¹ã§ã¯ãã©ã€ãã©ãªã¯ãäžéãã¬ãã«ã§éåžžã«ããŸãæ©èœããŸã (ãããã API ãªã¯ãšã¹ããè¡ãããšãã§ããŸã)ã
ãã ãããã®äžé£ã®æçš¿ã«ã¯æå·åŠãšæ°åŠã¯ããŸãå«ãŸããŸããã ãã ããä»ã«ãå€ãã®æè¡çãªè©³çŽ°ãã¢ãŒããã¯ãã£äžã®èŠç¹ãååšããŸã (ãŒãããäœæããã®ã§ã¯ãªããä»»æã®èšèªã§ã©ã€ãã©ãªã䜿çšãã人ã«ã圹ç«ã¡ãŸã)ã ãããã£ãŠãäž»ãªç®æšã¯ãã¯ã©ã€ã¢ã³ããæåããå®è£ ããŠã¿ãããšã§ãã å ¬åŒããã¥ã¡ã³ãã«ãããšã ã€ãŸããå ¬åŒã¯ã©ã€ã¢ã³ãã®ãœãŒã¹ã³ãŒããã¯ããŒãºãããŠãããšä»®å®ããŸãïŒãããå®éã«ã¯äœã§ãããã«ã€ããŠã¯ãåŸåã§ããã«è©³ããæããã«ããŸãïŒ èµ·ãããŸã ãã) ããããæãšåãããã«ãããšãã°ãRFC ã®ãããªæšæºããããŸããå ¬åŒ (Telegram ãã¹ã¯ããããã¢ãã€ã«) ã§ãã£ãŠãããœãŒã¹ããèŠãããšãªãããä»æ§ã ãã«åŸã£ãŠã¯ã©ã€ã¢ã³ããäœæããããšã¯å¯èœã§ãã? ãéå ¬åŒã®ãã¬ãœã³ã§ãïŒ
ç®æ¬¡ïŒ
ããã¥ã¡ã³ãâŠãããŸããïŒ æ¬åœã§ãã?. è¥ãäœå®¶ãšããŠã©ãããå§ããŸããïŒ ãã€ã㪠ã·ãªã¢ã«å: TL (Type Language) ãšãã®ã¹ããŒã ãã¬ã€ã€ãŒããã®ä»ã®æãããåèªã®æ°ã MTããã APIïŒ ã€ã¥ãïŒ
ããã¥ã¡ã³ãâŠãããŸããïŒ æ¬åœã§ãã?.
ãã®èšäºã®ããã®ã¡ã¢ã®æçã¯ãæšå¹Žã®å€ããåéããå§ããŸããã ä»åã¯å
¬åŒãµã€ãã§
è¥ãäœå®¶ãšããŠã©ãããå§ããŸããïŒ
æåããäœæããããããšãã°æ¬¡ã®ãããªæ¢è£œã®ã©ã€ãã©ãªã䜿çšãããã¯é¢ä¿ãããŸããã api_id
О api_hash
(VKontakte API ã䜿çšããããšã®ãã人ã¯ããã«ç解ã§ããŸã) ãµãŒããŒã¯ããã«ãã£ãŠã¢ããªã±ãŒã·ã§ã³ãèå¥ããŸãã ãã ãããå¿
èŠããããŸã æ³çãªçç±ããã§ãããã ããã©ã€ãã©ãªã®èè
ããããåºçã§ããªãçç±ã«ã€ããŠã¯ã第 XNUMX éšã§è©³ãã説æããŸãã ããããããã¹ãå€ã¯éåžžã«éãããŠããŸãããæºè¶³ã§ããã§ããããå®éãä»ã§ã¯èªåã®çªå·ã«ç»é²ã§ããã®ã§ãã XNUMXã€ã ã æ¥ãã§ç³è«ããªãã§ãã ããã
ããŠãæè¡çãªèŠ³ç¹ããèŠããšãç»é²åŸã«ããã¥ã¡ã³ãããããã³ã«ãªã©ã®æŽæ°ã«é¢ããéç¥ã Telegram ããåä¿¡ããå¿ èŠããããšããäºå®ã«èå³ãããã¯ãã§ãã ã€ãŸããããã¯ã®ãããµã€ãã¯åã«ãã¹ã³ã¢ãªã³ã°ããããã¯ã©ã€ã¢ã³ããäœãå§ãããµã€ããšç¹å¥ã«é£æºãç¶ãããšèããããšãã§ããŸãã ãã®ã»ããç°¡åã§ãã ãããããããããã®ãããªãã®ã¯äœã芳å¯ããããæ å ±ãæ¥ãŸããã§ããã
ãŸããæåããäœæããå Žåãåãåã£ããã©ã¡ãŒã¿ã䜿çšããã®ã¯å®éã«ã¯ãŸã é ãã§ãã ããã§ã
å®éãMTProto ã®å°å ¥åãå°å ¥åŸããäžåºŠã«è€æ°ã®ã¬ãã« (OS ã«ãŒãã«ã§åãæµ·å€ã®ãããã¯ãŒã«ãŒãèšãããã«ãã¬ã€ã€ãŒéå) ã§ã倧ãããçãŸãããæããããããã¯ãéªéãããããšã«ãªããŸã...
ãã€ã㪠ã·ãªã¢ã«å: TL (Type Language) ãšãã®ã¹ããŒã ãã¬ã€ã€ãŒããã®ä»ã®æãããåèªã®æ°ã
å®éããã®ãããã¯ã¯ Telegram ã®åé¡ã®éµã§ãã ãããŠããããæãäžããããšãããšãã²ã©ãèšèããããããããŸãã
ããã§ãèšç»ã ãã®èšèãèŠããŠãããªããããèšã£ãŠãã ããã
int ? = Int;
long ? = Long;
double ? = Double;
string ? = String;
vector#1cb5c415 {t:Type} # [ t ] = Vector t;
rpc_error#2144ca19 error_code:int error_message:string = RpcError;
rpc_answer_unknown#5e2ad36e = RpcDropAnswer;
rpc_answer_dropped_running#cd78e586 = RpcDropAnswer;
rpc_answer_dropped#a43ad8b7 msg_id:long seq_no:int bytes:int = RpcDropAnswer;
msg_container#73f1f8dc messages:vector<%Message> = MessageContainer;
---functions---
set_client_DH_params#f5045f1f nonce:int128 server_nonce:int128 encrypted_data:bytes = Set_client_DH_params_answer;
ping#7abe77ec ping_id:long = Pong;
ping_delay_disconnect#f3427b8c ping_id:long disconnect_delay:int = Pong;
invokeAfterMsg#cb9f372d msg_id:long query:!X = X;
invokeAfterMsgs#3dc4b4f0 msg_ids:Vector<long> query:!X = X;
account.updateProfile#78515775 flags:# first_name:flags.0?string last_name:flags.1?string about:flags.2?string = User;
account.sendChangePhoneCode#8e57deb flags:# allow_flashcall:flags.0?true phone_number:string current_number:flags.0?Bool = auth.SentCode;
ãããåããŠèŠã人ã¯ãæžãããŠããããšã®äžéšã ããçŽæçã«èªèããã§ãããããããã¯æããã«æ§é ç©ã§ã (ãã ããååã¯å·ŠåŽãŸãã¯å³åŽã®ã©ãã«ãããŸãã?)ããã®äžã«ã¯ãã£ãŒã«ããããããã®åŸã«ãã£ãŒã«ãããããŸããåã¯ã³ãã³ãééããŸã...ããããã ããã§ãå±±æ¬åŒ§å ã«ã¯ããããã C++ ã®ãããªãã³ãã¬ãŒãããããŸã (å®éã«ã¯ã ããªãã§ã¯ãªãïŒã ãããŠãä»ã®ãã¹ãŠã®èšå·ã¯äœãæå³ããã®ããçå笊ãæå笊ãããŒã»ã³ããŒãžãæ ŒåïŒãããŠæããã«ãå Žæã«ãã£ãŠç°ãªãæå³ãæã¡ãŸãïŒãã©ããã«ååšããããã©ããã«ã¯ååšããªããXNUMX é²æ°ããããŠæãéèŠãªã®ã¯ãããããã©ã®ããã«ååŸãããã§ãã å³ (ãµãŒããŒã«ãã£ãŠæåŠãããŸãã) ãã€ãã¹ããªãŒã ? ããã¥ã¡ã³ããèªãŸãªããã°ãªããŸãã (ã¯ããè¿ãã« JSON ããŒãžã§ã³ã®ã¹ããŒããžã®ãªã³ã¯ããããŸãããããã§ã¯æ確ã«ãªããŸãã).
ããŒãžãéã
é¢æ°åèšèªãšèªååæšè«ã«ç²ŸéããŠããèªè ã¯ããã¡ããããã®èšèªã®èª¬æãäŸããèŠãŠãã¯ããã«èŠªãã¿ããããããã¯åççã«ã¯äžè¬çã«æªããªããšèšããã§ãããã ããã«å¯Ÿããåè«ã¯æ¬¡ã®ãšããã§ãã
- ã¯ãã ç®æš è¯ãããã§ãããæ®å¿µãªãã éæãããŠããªã
- ãã·ã¢ã®å€§åŠã§ã®æè²ã¯ITå°éåéã«ãã£ãŠãç°ãªãã誰ãã察å¿ããã³ãŒã¹ãèªãã§ããããã§ã¯ãªã
- æåŸã«ãããããèŠãããã«ãå®éã«ã¯æ¬¡ã®ããã«ãªããŸãã äžèŠãèšè¿°ããã TL ã®éããããµãã»ããã®ã¿ã䜿çšãããããã
èšã£ãããã« #perl
FreeNode IRC ãããã¯ãŒã¯äžã§ãTelegram ãã Matrix ãžã®ã²ãŒããå®è£
ããããšããŠããŸã (åŒçšç¬Šã®ç¿»èš³ã¯ã¡ã¢ãªããã§ã¯äžæ£ç¢ºã§ã)ã
åããŠåçè«ã玹ä»ãããŠããããå®éã«å¿ èŠãã©ãããªã©ããŸãæ°ã«ãããè奮ããŠããããããå§ãã人ã®ããã«æããŸãã
åºæ¬çãªãã®ãšããŠè£žã®å (intãlong ãªã©) ãå¿ èŠãã©ããã¯èªåã®ç®ã§ç¢ºèªããŠãã ãããæçµçã«ã¯æåã§å®è£ ããå¿ èŠããããŸããããšãã°ãããããã掟çããŠã¿ãŸãã ãã¯ãã«ã ã€ãŸããå®éã«ã¯ã é å, çµæãšããŠåŸããããã®ãåºæåã§åŒã¶å Žåã
ãããåã«
å
¬åŒããã¥ã¡ã³ããèªãŸãªã人ã®ããã® TL æ§æã®ãµãã»ããã®ç°¡åãªèª¬æ
constructor = Type;
myVec ids:Vector<long> = Type;
fixed#abcdef34 id:int = Type2;
fixedVec set:Vector<Type2> = FixedVec;
constructorOne#crc32 field1:int = PolymorType;
constructorTwo#2crc32 field_a:long field_b:Type3 field_c:int = PolymorType;
constructorThree#deadcrc bit_flags_of_what_really_present:# optional_field4:bit_flags_of_what_really_present.1?Type = PolymorType;
an_id#12abcd34 id:int = Type3;
a_null#6789cdef = Type3;
åžžã«å®çŸ©ãéå§ããŸã ã³ã³ã¹ãã©ã¯ã¿ããã®åŸããªãã·ã§ã³ã§ (å®éã«ã¯åžžã«) ã·ã³ãã«ãä»ã㊠#
ã§ãªããã°ãªããŸãã CRC32 æå®ãããã¿ã€ãã®æ£èŠåããã説ææååããã 次ã«ããã£ãŒã«ãã®èª¬æãç¶ããŸã (ãã£ãŒã«ããããå Žåãã¿ã€ãã¯ç©ºã«ããããšãã§ããŸã)ã ãã¹ãŠã¯çå·ã§çµãããŸããããã¯ãæå®ãããã³ã³ã¹ãã©ã¯ã¿ãŒ (å®éã«ã¯ãµãã¿ã€ã) ãå±ããåã®ååã§ãã çå·ã®å³åŽã®åã¯æ¬¡ã®ãšããã§ãã å€æ
æ§ã® - ã€ãŸããããã€ãã®ç¹å®ã®ã¿ã€ãã«å¯Ÿå¿ã§ããŸãã
å®çŸ©ã次ã®è¡ã®åŸã«ããå Žå ---functions---
ãã®å Žåãæ§æã¯åããŸãŸã§ãããæå³ã¯ç°ãªããŸããã³ã³ã¹ãã©ã¯ã¿ãŒã¯ RPC é¢æ°ã®ååã«ãªãããã£ãŒã«ãã¯ãã©ã¡ãŒã¿ãŒã«ãªããŸã (ã€ãŸãã以äžã§èª¬æããããã«ãäžããããæ§é ã¯ãŸã£ããåããŸãŸã«ãªããŸããããã¯åã«äžããããæå³ã«ãªããŸã)ããå€æ
æ§å ãã¯è¿ãããçµæã®åã§ãã 確ãã«ãããã¯ãŸã å€æ
æ§ã®ãŸãŸã§ã - ã»ã¯ã·ã§ã³ã§å®çŸ©ãããŠããã ãã§ã ---types---
ããã®ã³ã³ã¹ãã©ã¯ã¿ãŒã¯èæ
®ãããŸããã åŒæ°ã«ããåŒã³åºãããé¢æ°ã®åãªãŒããŒããŒãã äœããã®çç±ã§ãC++ ã®ããã«ãååã¯åãã ãã·ã°ããã£ãç°ãªãããã€ãã®é¢æ°ã¯ TL ã§ã¯æäŸãããŸããã
OOP ã§ã¯ãªãã®ã«ããªããã³ã³ã¹ãã©ã¯ã¿ãŒããšãããªã¢ãŒãã£ãã¯ããªã®ã§ãããã? å®éãOOP ã®èŠ³ç¹ããèããæ¹ãç°¡åã§ããOOP ã¯æœè±¡ã¯ã©ã¹ãšããŠã®å€æ
æ§åã§ãããã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãã®çŽæ¥ã®åå«ã¯ã©ã¹ã§ãã final
å€ãã®èšèªã®çšèªã§ã å®ã¯ããã§ããã¡ãã é¡äŒŒæ§ OO ããã°ã©ãã³ã°èšèªã®å®éã®ãªãŒããŒããŒããããã³ã³ã¹ãã©ã¯ã¿ãŒ ã¡ãœããã䜿çšããŸãã ããã«ã¯ããŒã¿æ§é ã ãããããããã¡ãœããã¯ãããŸãã (ãã ãã以äžã®é¢æ°ãšã¡ãœããã®èª¬æã§ã¯ãããããäœã§ãããã«ã€ããŠé ã®äžã«æ··ä¹±ãåŒãèµ·ããå¯èœæ§ããããŸãããããã¯å¥ã®ããšã§ã)ãã³ã³ã¹ãã©ã¯ã¿ãŒã¯æ¬¡ã®ããã«èããããšãã§ããŸããã©ã®å€ãã 建èšäž ãã€ãã®ã¹ããªãŒã ãèªã¿åããšãã®ã¿ã€ãã
ããã¯ã©ãããŠèµ·ããã®ã§ãããã? åžžã« 4 ãã€ããèªã¿åããã·ãªã¢ã©ã€ã¶ãŒã¯ããã®å€ãåç
§ããŸãã 0xcrc32
- ãããŠæ¬¡ã«äœãèµ·ããããç解ããŠããŸã field1
ã¿ã€ãä»ã int
ãã€ãŸãtype ãæã€ãã®äžã«ãããã£ãŒã«ãã§ãæ£ç¢ºã« 4 ãã€ããèªã¿åããŸã PolymorType
èªãã èŠã 0x2crc32
ããã« XNUMX ã€ã®ãã£ãŒã«ããããããšãç解ããŠããŸãã long
, ãããã£ãŠã8ãã€ããèªã¿åããŸãã 次ã«ãåãæ¹æ³ã§éã·ãªã¢ã«åãããè€ååã§ãã äŸãã°ã Type3
XNUMX ã€ã®ã³ã³ã¹ãã©ã¯ã¿ãŒããããããããã«æ¬¡ã®ãããããæºãããªããã°ãªããªããšããã«ã¹ããŒãå
ã§å®£èšã§ããŸãã 0x12abcd34
ããã®åŸããã« 4 ãã€ããèªã¿åãå¿
èŠããããŸã int
ãŸã㯠0x6789cdef
ããã®åŸã¯äœããªããªããŸãã ãã以å€ã®å Žåã¯ãäŸå€ãã¹ããŒããå¿
èŠããããŸãã ãããã«ããããã®åŸã¯ 4 ãã€ãã®èªã¿åãã«æ»ããŸãã int
äœçœ field_c
в constructorTwo
ãããŠãããèžãŸããŠç§ãã¡ã¯èªã¿çµããŸã PolymorType
.
æåŸã«ãæãŸã£ãå Žåã¯ã 0xdeadcrc
ã®ããã« constructorThree
, ãã®åŸãäºæ
ã¯ããã«è€éã«ãªããŸãã ç§ãã¡ã®æåã®ãã£ãŒã«ã bit_flags_of_what_really_present
ã¿ã€ãä»ã #
- å®éãããã¯åã®åãªããšã€ãªã¢ã¹ã§ã nat
ãèªç¶æ°ããšããæå³ã ã€ãŸããå®éã®ã¹ããŒã ã§ç¬Šå·ãªãæ°å€ãèŠã€ããå Žåã¯ãå®éã«ã¯ unsigned int ã ãã§ãã ãããã£ãŠã次ã¯çå笊ã®ä»ããæ§é ã§ããããã¯ãããããã£ãŒã«ãã§ããããšãæå³ããŸããåç
§ããããã£ãŒã«ãã«å¯Ÿå¿ããããããèšå®ãããŠããå Žåã«ã®ã¿ããã®ãã£ãŒã«ãããããã¯ãŒã¯äžã«ååšããŸã (äžé
æŒç®åãšã»ãŒåãã§ã)ã ãããã£ãŠããã®ãããããªã³ã ã£ããšä»®å®ãããšã次ã®ãããªãã£ãŒã«ããèªã¿åãå¿
èŠããããŸãã Type
ããã®äŸã§ã¯ 2 ã€ã®ã³ã³ã¹ãã©ã¯ã¿ãŒããããŸãã XNUMX ã€ã¯ç©º (èå¥åã®ã¿ã§æ§æããã) ã§ããã XNUMX ã€ã¯ãã£ãŒã«ãããããŸã ids
ã¿ã€ãä»ã ids:Vector<long>
.
ãã³ãã¬ãŒããšãžã§ããªãã¯ã®äž¡æ¹ãè¯ãããŸã㯠Java ãè¯ããšæããããããŸããã ããããããã§ã¯ãããŸããã ã»ãšãã©ã ãã ã·ã³ã°ã« å®éã®åè·¯ã§ã¯å±±æ¬åŒ§ã®å Žåã«äœ¿çšããããã¯ãã«ã«ã®ã¿äœ¿çšãããŸãã ãã€ã ã¹ããªãŒã ã§ã¯ããã㯠Vector åèªäœã® 4 CRC32 ãã€ã (åžžã«åã)ã次㫠4 ãã€ã (é åèŠçŽ ã®æ°)ããããŠãããã®èŠçŽ èªäœã«ãªããŸãã
ããã«å ããŠãã·ãªã¢ã«åã¯åžžã« 4 ãã€ãã®ã¯ãŒãã§çºçãããã¹ãŠã®åã¯ãã®åæ°ã«ãªããŸããçµã¿èŸŒã¿åã«ã€ããŠã説æããŸãã bytes
О string
é·ããæåã§ã·ãªã¢ã«åãããã®äœçœ®ã 4 ã§èª¿æŽãããšãæ£åžžã«èãããããã«ãªããæ¯èŒçå¹ççã«ãªãããã«æããŸãã? TL ã¯å¹ççãªãã€ã㪠ã·ãªã¢ã«åã§ãããšäž»åŒµãããŠããŸããããšãã§ããªããããŒã«å€ãæ倧 4 ãã€ãã®åäžæååãå«ããããããã®ãæ¡åŒµãããšãJSON ã¯ããã«åããªãã®ã§ãããã? ã»ããäžèŠãªãã£ãŒã«ããããã ãã©ã°ã§ã¹ãããã§ããŸãããã¹ãŠåé¡ãªããå°æ¥ã«åããŠæ¡åŒµå¯èœã§ããåŸã§ã³ã³ã¹ãã©ã¯ã¿ãŒã«æ°ãããªãã·ã§ã³ã®ãã£ãŒã«ããè¿œå ããŸããã?
ããããç§ã®ç°¡åãªèª¬æã§ã¯ãªããå®å šãªããã¥ã¡ã³ããèªãã§å®è£ ã«ã€ããŠèããŠããã ããã°ãããã§ã¯ãããŸããã ãŸããã³ã³ã¹ãã©ã¯ã¿ãŒã® CRC32 ã¯ãæ£èŠåãããã¹ããŒã ããã¹ãã®èª¬ææåå (äœåãªç©ºçœãªã©ãåé€ãã) ã«ãã£ãŠèšç®ãããŸãããã®ãããæ°ãããã£ãŒã«ããè¿œå ããããšãåã®èª¬ææååãå€æŽããããã®çµæ CRC32 ãå€æŽããããã®çµæã·ãªã¢ã«åãå€æŽãããŸãã ãããŠãå€ãã¯ã©ã€ã¢ã³ãã¯ãæ°ãããã©ã°ãèšå®ããããã£ãŒã«ããåãåã£ããã®ã®ã次ã«ãããã©ãããã°ãããåãããªãã£ãå Žåãã©ãããã§ãããã? ..
第äºã«ãèŠããŠãããŸããã CRC32ãããã§ã¯åºæ¬çã«æ¬¡ã®ããã«äœ¿çšãããŸã ããã·ã¥é¢æ° ã©ã®åã (é) ã·ãªã¢ã«åãããŠããããäžæã«æ±ºå®ããŸãã ããã§ç§ãã¡ã¯è¡çªã®åé¡ã«çŽé¢ããŸããããããã®ç¢ºç㯠232 åã® 32 ã§ã¯ãªããããããã¯ããã«é«ãã®ã§ãã CRC32 ãéä¿¡ãã£ãã«å ã®ãšã©ãŒãæ€åº (ããã³ä¿®æ£) ããããã«èšèšãããŠãããããã«å¿ããŠãããã®ç¹æ§ãæ¹åããŠä»ã®ãã®ã«äžå©çãããããããšã誰ãèŠããŠããã§ããããã ããšãã°ã圌女ã¯ãã€ãã®äžŠã¹æ¿ããæ°ã«ããŸããã4 ã€ã®è¡ãã CRC4 ãæ°ãããšãXNUMX çªç®ã®è¡ã§ã¯æåã® XNUMX ãã€ããšæ¬¡ã® XNUMX ãã€ãã亀æããŸã - ããã¯åãã«ãªããŸãã å ¥åãšããŠã©ãã³èªã®ã¢ã«ãã¡ãããã®ããã¹ãæåå (ããã³å°ãã®å¥èªç¹) ãããããããã®ååãç¹ã«ã©ã³ãã ã§ã¯ãªãå Žåããã®ãããªé åãçºçãã確çã¯å€§å¹ ã«å¢å ããŸãã
ãšããã§ã誰ãããã«äœããããããã§ãã¯ããŸããã æ¬åœã« CRC32? åæã®æ å ±æºã® 239 〠(ãŠã©ã«ããã³ä»¥å) ã«ã¯ãåæåã« XNUMX ãšããæ°åãæããããã·ã¥é¢æ°ãããããã®é¢æ°ã¯ãããã®äººã ã«ãšãŠãæãããŠããŸããã
æåŸã«ããã£ãŒã«ãåãæã€ã³ã³ã¹ãã©ã¯ã¿ãŒã Vector<int>
О Vector<PolymorType>
CRC32ãç°ãªããŸãã ã§ã¯ããªã³ã©ã€ã³ã§ã®ãã¬ãŒã³ããŒã·ã§ã³ã«ã€ããŠã¯ã©ãã§ãããã? ãããŠçè«çã«èšãã°ã ããã¯åã®äžéšã«ãªããŸãã? XNUMX äžã®æ°å€ã®é
åãæž¡ããšããŸãããã Vector<int>
é·ããšããã« 40000 ãã€ãã¯ãã¹ãŠæããã§ãã ãããŠããããªã Vector<Type2>
ããã£ãŒã«ã㯠XNUMX ã€ã ãã§æ§æãããŸã int
ãããŠããã¯ãã®åã®å¯äžã®ãã®ã§ã - 10000xabcdef0 ã 34 åç¹°ãè¿ããŠãã 4 ãã€ãã«ããå¿
èŠããããŸãã? int
ããŸãã¯èšèªãã³ã³ã¹ãã©ã¯ã¿ãŒããããã衚瀺ã§ãã fixedVec
80000 ãã€ãã®ä»£ããã«ã40000 ãã€ãã ããå転éããŸãã?
ããã¯ãŸã£ããç¡æå³ãªçè«çãªè³ªåã§ã¯ãããŸãããã°ã«ãŒã ãŠãŒã¶ãŒã®ãªã¹ããååŸããåãŠãŒã¶ãŒã« IDãåãå§ããããšæ³åããŠãã ãããã¢ãã€ã«æ¥ç¶ãä»ããŠè»¢éãããããŒã¿éã®éãã¯ãé倧ãªå ŽåããããŸãã ç§ãã¡ã«å®£äŒãããŠããã®ã¯ããã¬ã°ã©ã é£èŒã®æå¹æ§ã§ãã
ã ãã... ...
æšå®ã§ããªãã£ããã¯ãã«
ã³ã³ãããŒã¿ãªã©ã®èª¬æããŒãžãèªã¿é²ããŠã¿ããšããã¯ãã« (ããã«ã¯è¡å) ãã¿ãã«ãéããŠåœ¢åŒçã«è€æ°ã®ã·ãŒããæšå®ããããšããŠããããšãããããŸãã ããããæçµçã«ã¯ããããã¯æã¡ã®ããããæåŸã®ã¹ãããã¯ã¹ããããããåã«ãã¯ãã«ã®å®çŸ©ãäžããããã ãã§ããããããåã«æçžãããŸããã ããã§äœãåé¡ã§ããïŒ èšèªã§ ããã°ã©ãã³ã°ç¹ã«é¢æ°åã®ãã®ã§ã¯ãæ§é ãååž°çã«èšè¿°ããã®ãéåžžã«äžè¬çã§ããé
延è©äŸ¡ãåããã³ã³ãã€ã©ãŒã¯ãã¹ãŠãç解ããŠãããå®è¡ããŸãã èšèªã§ ããŒã¿ã®ã·ãªã¢ã«å ããããå¹çæ§ãå¿
èŠã§ããç°¡åã«èª¬æããã ãã§ååã§ãã ãªã¹ããã€ãŸãXNUMX ã€ã®èŠçŽ ã®æ§é - æåã®èŠçŽ ã¯ããŒã¿èŠçŽ ãXNUMX çªç®ã¯åãæ§é èªäœããŸãã¯æ«å°Ÿã®ç©ºã®ã¹ããŒã¹ (ããã¯) (cons)
Lisp ã§ã¯)ã ããããããã«ã¯æããã«å¿
èŠã«ãªããŸã ããããã® èŠçŽ ã¯ããã®ã¿ã€ããèšè¿°ããããã«ããã« 4 ãã€ã (TL ã®å Žå㯠CRC32) ãè²»ãããŸãã é
åã®èšè¿°ãç°¡å åºå®ãµã€ãºãã ãã以åã«æªç¥ã®é·ãã®é
åã®å Žåã¯äžæãããŸãã
ãããã£ãŠãTL ã§ã¯ãã¯ãã«ãåºåã§ããªããããåŽã«ãã¯ãã«ãè¿œå ããå¿ èŠããããŸããã æçµçã«ããã¥ã¡ã³ãã«ã¯æ¬¡ã®ããã«æžãããŠããŸãã
ã·ãªã¢ã«åã§ã¯ãå t ã®å€æ°ã®ç¹å®ã®å€ã«äŸåããªãåãã³ã³ã¹ãã©ã¯ã¿ãŒ "vector" (const 0x1cb5c415 = crc32("vector t:Type # [ t ] = Vector t") ãåžžã«äœ¿çšãããŸãã
ãªãã·ã§ã³ã®ãã©ã¡ãŒã¿ãŒ t ã®å€ã¯ãçµæã®åãã掟çãããã (éã·ãªã¢ã«åã®åã«åžžã«æ¢ç¥ã§ãã)ãã·ãªã¢ã«åã«ã¯é¢äžããŸããã
ãã£ãšããèŠãªããïŒ vector {t:Type} # [ t ] = Vector t
- ããã ã©ãã«ã å®çŸ©èªäœã¯ãæåã®æ°å€ããã¯ãã«ã®é·ããšçãããªããã°ãªããªããšã¯èšã£ãŠããŸããã ãããŠããã¯ã©ãããã§ãç¶ããã®ã§ã¯ãããŸããã ããã¯åœç¶ã®ããšã§ããã念é ã«çœ®ããŠå®éã«å®è¡ããå¿
èŠããããŸãã ããã¥ã¡ã³ãã®ä»ã®å Žæã§ã¯ãåãåœã§ãããšæ£çŽã«è¿°ã¹ãŠããŸãã
Vector t å€æ æ§æ¬äŒŒåã¯ããã®å€ãããã¯ã¹åãŸãã¯ãã¢ã®ä»»æã®å t ã®å€ã®ã·ãŒã±ã³ã¹ã§ãããåãã§ãã
âŠããããããã«ã¯çŠç¹ãåœãŠãŠããŸããã è€éãªæ°åŠ (倧åŠã®ææ¥ã§ç¥ã£ãŠãããããããŸãã) ãæ©ãåãã®ã«ããããããæ¡ç¹ã決ããŠãå®éã«æ°åŠãå®éã«ã©ã®ããã«æ±ããã芳å¯ãããšããã®å°è±¡ãé ã®äžã«æ®ããŸããããã§ã®æ¬æ Œçãªæ°åŠã¯ã以äžã«åºã¥ããŠããŸãã ãæããã«ã¯ãŒã«ããŒãã«ïŒXNUMX人ã®æ°åŠè - ACMã®åªåè ïŒã§ããã誰ã§ãã§ã¯ãããŸããã æ£è²¡ãããšããç®æšã¯éæãããŸããã
ãšããã§ãæ°åã«ã€ããŠã æ³èµ·
#
ããã¯å矩èªã§ãnat
ã èªç¶æ°ïŒååŒããããŸã (typeexpr) ããã³æ°å€åŒ (nat-exprïŒã ãã ãããããã¯åãããã«å®çŸ©ãããŸãã
type-expr ::= expr nat-expr ::= expr
ããããææ³ã§ã¯åãããã«èšè¿°ãããŸãã ãã®éãããŸãèŠããŠãããŠãæäœæ¥ã§å®è£ ããå¿ èŠããããŸãã
ããã§ããããã³ãã¬ãŒãã®çš®é¡ (vector<int>
, vector<User>
) å
±éã®èå¥å (#1cb5c415
)ãã€ãŸãåŒã³åºãã次ã®ããã«å®£èšãããŠããããšãããã£ãŠããå Žå
users.getUsers#d91a548 id:Vector<InputUser> = Vector<User>;
ãã®å Žåãåãªããã¯ãã«ã§ã¯ãªãããŠãŒã¶ãŒã®ãã¯ãã«ãåŸ ã£ãŠããããšã«ãªããŸãã ããæ£ç¢ºã«ã ãã¹ãã§ãã åŸ ã£ãŠãã ãã - å®éã®ã³ãŒãã§ã¯ã裞ã®åã§ã¯ãªãã«ããŠããåèŠçŽ ã«ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒããããå®è£ ã§ã¯è¯ãæå³ã§ãã§ãã¯ããå¿ èŠããããŸã - ãããŠããã®ãã¯ãã«ã®åèŠçŽ ã§æ£ç¢ºã«éä¿¡ãããŸãã ãã®ã¿ã€ã? ãããŠãããããé åã®ããŸããŸãªèŠçŽ ã«ããŸããŸãªåãå«ããããšãã§ããããã皮㮠PHP ã ã£ããã©ãã§ãããã?
ãã®æç¹ã§ãããã®ãã㪠TL ã¯å¿ èŠãªã®ã§ãããã?ããšçåã«æãå§ããŸãã ããããã«ãŒãã«ã¯ãåœææ¢ã«ååšããŠãããã®ãšåã protobuf ã§ãã人éã®ã·ãªã¢ã©ã€ã¶ãŒã䜿çšã§ããã®ã§ã¯ãªãã§ãããã? ããã¯çè«ã§ãããå®è·µãèŠãŠã¿ãŸãããã
ã³ãŒãå
ã®æ¢åã® TL å®è£
TLã¯ããã¥ããã®æ ªã®å£²åŽãšããæåãªåºæ¥äºãèµ·ããåã«ããã³ã³ã¿ã¯ãã®å
éšã§çãŸããŸããã確ãã«ïŒããã¬ã°ã©ã ãéçºãããåããã§ãã ãããŠãªãŒãã³ãœãŒã¹ã§ã¯
Templates are not used now. Instead, the same universal constructors (for example, vector {t:Type} [t] = Vector t) are used w
ããããå®å šãæãããã«ãããã°æèã®å·šäººã®é²åããã©ãããã«ããã®å šäœåãèããŠã¿ãŸãããã
#define ZHUKOV_BYTES_HACK
#ifdef ZHUKOV_BYTES_HACK
/* dirty hack for Zhukov request */
ãããã¯ããã®çŸãããã®:
static const char *reserved_words_polymorhic[] = {
"alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta", NULL
};
ãã®ãã©ã°ã¡ã³ãã¯æ¬¡ã®ãããªãã³ãã¬ãŒãã«é¢ãããã®ã§ãã
intHash {alpha:Type} vector<coupleInt<alpha>> = IntHash<alpha>;
ããã¯ã int ãš Type ã®ãã¢ã®ãã¯ãã«ãšããŠã®ããã·ã¥ããã ãã³ãã¬ãŒã ã¿ã€ãã®å®çŸ©ã§ãã C++ ã§ã¯æ¬¡ã®ããã«ãªããŸãã
template <T> class IntHash {
vector<pair<int,T>> _map;
}
ããã§ã alpha
- ããŒã¯ãŒãïŒ ãã ããT ãèšè¿°ã§ããã®ã¯ C++ ã ãã§ãããã¢ã«ãã¡ãããŒã¿ãèšè¿°ããå¿
èŠããããŸãããã ãããã©ã¡ãŒã¿ã¯ 8 ã€ãŸã§ã§ãããå¹»æ³ã¯ã·ãŒã¿ã§çµãããŸããã ããã§ããã€ãŠãµã³ã¯ãããã«ãã«ã¯ã§ã¯ã»ãŒæ¬¡ã®ãããªå¯Ÿè©±ããã£ãããã§ãã
-- ÐаЎП ÑЎелаÑÑ Ð² TL ÑаблПМÑ
-- Ðл... ÐÑ Ð¿ÑÑÑÑ Ð¿Ð°ÑаЌеÑÑÑ Ð·ÐŸÐ²ÑÑ Ð°Ð»ÑÑа, беÑа,... ÐакОе ÑаЌ еÑÑ Ð±ÑÐºÐ²Ñ ÐµÑÑÑ... Ð, ÑÑÑа!
-- ÐÑаЌЌаÑОка? ÐÑ Ð¿ÐŸÑПЌ МапОÑеЌ
-- СЌПÑÑОÑе, какПй Ñ ÑОМÑакÑÐžÑ Ð¿ÑОЎÑЌал ÐŽÐ»Ñ ÑаблПМПв О векÑПÑа!
-- Ð¢Ñ ÐŽÐŸÐ»Ð±Ð°ÐœÑлÑÑ, как ÐŒÑ ÑÑП паÑÑОÑÑ Ð±ÑЎеЌ?
-- Ðа Ме ÑÑÑÑе, ПМ ÑаЌ ПЎОМ в ÑÑ
еЌе, заÑ
аÑкПЎОÑÑ -- О Пк
ããããããã¯ãäžè¬çãªãTL ã®æåã«ã¬ã€ã¢ãŠããããå®è£ ã«é¢ãããã®ã§ããã å®éã® Telegram ã¯ã©ã€ã¢ã³ãã§ã®å®è£ ã®æ€èšã«ç§»ããŸãããã
ããžã«ã®èšèïŒ
Vasilyã[09.10.18/17/07 XNUMX:XNUMX] äœãããã圌ãã倧éã®æœè±¡æŠå¿µãå°ç¡ãã«ããŠããã«ããæã¡èŸŒã¿ãã³ãŒãã²ãŒã¬ãŒã«æŸèæãã€ãããšããäºå®ã«ããå°»ãç±ããªããŸãã
ãã®çµæããŸãããã¯ããpilot.jpg
次ã«ãjekichan.webp ã³ãŒããã
ãã¡ãããã¢ã«ãŽãªãºã ãæ°åŠã«ç²ŸéããŠãã人ãªãããAho, Ullmanããèªãã§ãããæ°å幎ã«ããã£ãŠ DSL ã³ã³ãã€ã©ãäœæããããã®äºå®äžã®æ¥çæšæºããŒã«ã«ç²ŸéããŠãããšäºæ³ã§ããŸããã?
ã«ãã£ãŠ
16.12 04:18 Vasily: ç§ã®æèŠã§ã¯ãlex + yacc ããã¹ã¿ãŒããŠããªã人ããããšæããŸã
16.12 04:18 ãŽã¡ã·ãªãŒ: ããããªããšèª¬æã§ããªã
16.12 04:18 Vasily: ããã§ããããããšã VK ã®è¡æ°ã«å¯ŸããŠæ¯æãããã®ã§ãã
16.12 04:19 Vasily: ãã®ä»ã® 3 è¡ä»¥äž<censored>
ããŒãµãŒã®ä»£ããã«
ããããããäŸå€ããïŒ æ¹æ³ãèŠãŠã¿ãŸããã
nametype = re.match(r'([a-zA-Z.0-9_]+)(#[0-9a-f]+)?([^=]*)=s*([a-zA-Z.<>0-9_]+);', line);
if (not nametype):
if (not re.match(r'vector#1cb5c415 {t:Type} # [ t ] = Vector t;', line)):
print('Bad line found: ' + line);
Python ã® 1100 以äžã®è¡ãããã€ãã®æ£èŠè¡šçŸ + ãã¯ãã«åã®ç¹æ®ãªã±ãŒã¹ããã¡ããããã㯠TL æ§æã«åŸã£ãŠã¹ããŒã å ã§å®£èšãããŠããŸããã圌ãã¯ããããã®æ§æã«çœ®ããããã«è§£æããŸãã ...åé¡ã¯ããªããã®ãããªå¥è·¡ãããããè¡ãã®ããšããããšã§ãОãšã«ãã誰ãããã¥ã¡ã³ãã«åŸã£ãŠè§£æããªãã®ãªãããã£ãšãµãããŠãã ãã?!
ãšããã§... CRC32 ãã§ãã¯ã«ã€ããŠè©±ããã®ãèŠããŠããŸãã? ãããã£ãŠãTelegram Desktop ã³ãŒã ãžã§ãã¬ãŒã¿ãŒã«ã¯ãCRC32 ãèšç®ãããã¿ã€ãã®äŸå€ã®ãªã¹ãããããŸãã äžèŽããŠããŸãã å³ã«ç€ºãããŠããããã«ïŒ
Vasilyã[18.12 22:49] ãããŠããã§ããã®ãã㪠TL ãå¿ èŠãã©ãããèããå¿ èŠããããŸã
代æ¿å®è£ ããããããå Žåã¯ãæ¹è¡ãæ¿å ¥ãå§ãããšãããŒãµãŒã®ååãè€æ°è¡ã®å®çŸ©ã§æ¹è¡ããŠããŸããŸãã
ãã ããtdesktopã
ã¯ã³ã©ã€ããŒã«ã€ããŠã®ãã€ã³ããèŠããŠãããŠãã ãããå°ãåŸã§æ»ããŸãã
Telegram-cli ã¯éå ¬åŒã§ãTelegram Desktop ã¯å ¬åŒã§ãããä»ã®ãã®ã¯ã©ãã§ãã? ãããŠèª°ã«ãããããŸãããAndroid ã¯ã©ã€ã¢ã³ã ã³ãŒãã«ã¯ã¹ããŒã ããŒãµãŒããŸã£ãããããŸããã§ãã (ããã¯ãªãŒãã³ ãœãŒã¹ã«é¢ããçåãåŒãèµ·ãããŸããããã㯠XNUMX çªç®ã®éšåã§ã)ãä»ã«ãããã€ãã®é¢çœãã³ãŒãããããŸãããããããã«ã€ããŠã¯æ¬¡ã®ãšããã§ãã以äžã®ãµãã»ã¯ã·ã§ã³ã
å®éã«ã·ãªã¢ã«åã«ãã£ãŠä»ã«ã©ã®ãããªçåãçããŸãã? ããšãã°ããã¡ãããããã ãã£ãŒã«ããšæ¡ä»¶ä»ããã£ãŒã«ãã§å€±æããŸããã
ãŽã¡ã·ãªãŒ:
flags.0? true
ãã£ãŒã«ããååšããããšãæå³ãããã©ã°ãèšå®ãããŠããå Žå㯠trueãŽã¡ã·ãªãŒ:
flags.1? int
ãã£ãŒã«ããååšããéã·ãªã¢ã«åããå¿ èŠãããããšãæå³ããŸããŽã¡ã·ãªãŒ: ããã©ããªãã§ãäœããŠãã®ïŒ
Vasily: ããã¥ã¡ã³ãã®ã©ããã«ãtrue ã¯é·ããŒãã®è£žã®åã§ãããšããèšè¿°ããããŸãããããã¥ã¡ã³ãããäœããåéããã®ã¯éçŸå®çã§ãã
Vasily: ãªãŒãã³å®è£ ã«ããã®ãããªãã®ã¯ãããŸããããæŸèæãå°éå ·ã¯ãããããããŸã
ãã¬ããœã³ã¯ã©ãã§ããïŒ MTProto ã®ãããã¯ãäŸã«æãããšãããã¥ã¡ã³ãã«ã¯ãã®ãããªéšåããããŸããã %
ãæå®ããããã¢ã¿ã€ãã«å¯Ÿå¿ããããšã ã説æãããŠããŸãã 以äžã®äŸã§ã¯ããšã©ãŒãææžåãããŠããªãäœããçºçããŠããŸãã
Vasilyã[22.06.18/18/38 XNUMX:XNUMX] ããå Žæ:
msg_container#73f1f8dc messages:vector message = MessageContainer;
å¥ã®å Žå:
msg_container#73f1f8dc messages:vector<%Message> = MessageContainer;
ããã㯠XNUMX ã€ã®å€§ããªéãã§ãããçŸå®ã®ç掻ã§ã¯ãããçš®ã®è£žã®ãã¯ãã«ãçããŸãã
裞ã®ãã¯ãã«å®çŸ©ãèŠãããšããªããééããããšããããŸãã
é»è©±ã§ææžãã§æžããåæ
圌ã®ã¹ããŒãã¯å®çŸ©ãã³ã¡ã³ãã¢ãŠãããŸãã
msg_container
ããã§ãã% ã«ã€ããŠçåãæ®ããŸãã ããã¯èª¬æãããŠããŸããã
Vadim Goncharovã[22.06.18/19/22 XNUMX:XNUMX PM]ããããŠãã¹ã¯ãããã§ããïŒ
Vasilyã[22.06.18/19/23 XNUMX:XNUMX] ããããèŠå¶åœå±ã® TL ããŒãµãŒããããããããé£ã¹ãªãã ãã
// parsed manually
TL ã¯çŸããæœè±¡åã§ããããããå®å šã«å®è£ ããŠãã人ã¯ããŸãã
ãããŠã圌ãã®ããŒãžã§ã³ã®ã¹ããŒã ã«ã¯ % ããããŸãã
ããããããã§ã¯ããã¥ã¡ã³ãèªäœãççŸããŠãããããxs
ããã¯ææ³ã§èŠã€ãã£ãããæå³è«ã®èª¬æãå¿ããã ããããããªã
ããã§ãããTLã§ããã¯ãèŠãŸããããXNUMXãªããã«ããªããã°ãããç解ããããšã¯ã§ããŸãã
ãããã§ãããããšãã°ãããªãã¯ãã¹ãŠãæ¹å€ããŠããã®ã§ããããããã¹ã姿ãèŠããŠãã ããããšå¥ã®èªè ã¯èšãã§ãããã
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 ) ); }
;
ã©ããããããããããã䌌ãŠããŸã
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)
ããã¯ã¬ã¯ãµãŒå šäœã§ã:
---functions--- return FUNCTIONS;
---types--- return TYPES;
[a-z][a-zA-Z0-9_]* yylval.string = strdup(yytext); return LC_ID;
[A-Z][a-zA-Z0-9_]* yylval.string = strdup(yytext); return UC_ID;
[0-9]+ yylval.number = atoi(yytext); return NUM;
#[0-9a-fA-F]{1,8} yylval.number = strtol(yytext+1, NULL, 16); return ID_HASH;
n /* skip new line */
[ t]+ /* skip spaces */
//.*$ /* skip comments */
/*.**/ /* skip comments */
. return (int)yytext[0];
ãããã®ã æ§ããã«èšã£ãŠãç°¡åã§ããã
äžè¬ã«ãå®éã«äœ¿çšããã TL ã®ãµãã»ããã®ããŒãµãŒãšã³ãŒã ãžã§ãã¬ãŒã¿ãŒã¯ãæçµçã«ã¯çŽ 100 è¡ã®ææ³ãšçŽ 300 è¡ã®ãžã§ãã¬ãŒã¿ãŒ (ãã¹ãŠãå«ã) ã«åãŸããŸãã print
ã®çæãããã³ãŒãïŒã«ã¯ãåã°ããºãåã¯ã©ã¹ã®ã€ã³ããã¹ãã¯ã·ã§ã³çšã®åæ
å ±ãå«ãŸããŸãã åå€æ
æ§åã¯ç©ºã®æœè±¡åºæ¬ã¯ã©ã¹ã«å€æãããã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãããç¶æ¿ããã·ãªã¢ã«åããã³éã·ãªã¢ã«åã®ã¡ãœãããæã¡ãŸãã
ã¿ã€ãèšèªã«åãäžè¶³ããŠãã
匷ãåä»ãã¯è¯ãããšã§ããã? ããããããã¯ããªã㌠(ç§ã¯åçèšèªã®æ¹ã奜ãã§ãã) ã§ã¯ãªããTL å ã®ä»®èª¬ã§ãã ããã«åºã¥ããŠãèšèªã¯ããããçš®é¡ã®ãã§ãã¯ãæäŸããå¿ èŠããããŸãã ãŸããããããŸããã圌ã§ã¯ãªãå®è£ ã«ããŸãããããããã圌ã¯å°ãªããšããããã説æããå¿ èŠããããŸãã ãããŠãç§ãã¡ã¯ã©ã®ãããªæ©äŒãæãã§ããã§ããããïŒ
ãŸãã¯å¶çŽã§ãã ãã¡ã€ã«ã®ã¢ããããŒãã«é¢ããããã¥ã¡ã³ãã«ã¯æ¬¡ã®ãããªãã®ããããŸãã
ãã¡ã€ã«ã®ãã€ã㪠ã³ã³ãã³ãã¯è€æ°ã®éšåã«åå²ãããŸãã ãã¹ãŠã®ããŒãã¯åããµã€ãºã§ãªããã°ãªããŸãã ( ããŒããµã€ãº )ã次ã®æ¡ä»¶ãæºããå¿ èŠããããŸãã
part_size % 1024 = 0
(1KBã§å²ãåãã)524288 % part_size = 0
(512KB ã¯ãpart_size ã§åçã«å²ãåããå¿ èŠããããŸã)æåŸã®éšåã¯ããã®ãµã€ãºãpart_sizeæªæºã§ããã°ããããã®æ¡ä»¶ãæºããå¿ èŠã¯ãããŸããã
åããŒãã«ã¯ã·ãŒã±ã³ã¹çªå·ãå¿ èŠã§ãã ãã¡ã€ã«ããŒããå€ã®ç¯å²ã¯ 0 ïœ 2,999 ã§ãã
ãã¡ã€ã«ãããŒãã£ã·ã§ã³åå²ããåŸããµãŒããŒã«ãã¡ã€ã«ãä¿åããæ¹æ³ãéžæããå¿ èŠããããŸãã 䜿çš
ã¢ããããŒã.saveBigFilePart ãã¡ã€ã«ã®ãã«ãµã€ãºã 10 MB ãè¶ ããå Žåãããã³ã¢ããããŒã.saveFilePart å°ãããã¡ã€ã«çšã
[âŠ]次ã®ããŒã¿å ¥åãšã©ãŒã®ãããããè¿ãããå ŽåããããŸãã
- FILE_PARTS_INVALID - ããŒãã®æ°ãç¡å¹ã§ãã å€ã次ã®ç¯å²ã«ãããŸãã
1..3000
ãããã®ãããããã¹ããŒãã«ååšããŸãã? TLã§ãªããšãè¡šçŸã§ããªãã§ããããïŒ ãããã ãããã倱瀌ã§ãããæãªããã® Turbo Pascal ã§ãã次ã®åŒã§äžããããåãèšè¿°ããããšãã§ããŸããã ç¯å²ã ãããŠåœŒã¯ããäžã€ãä»ã§ã¯ãã£ãšããç¥ãããŠããããšãã§ããã¯ãã§ãã enum
- åºå®ïŒå°æ°ïŒã®å€ã®åæã§æ§æãããåã C ã®ãããªèšèªã§ã¯ãæ°å€ã«ã€ããŠæ³šæããŠãã ããããããŸã§ã¯åã«ã€ããŠã®ã¿èª¬æããŠããŸããã æ°åã ããããé
åãæååããããŸã...ããšãã°ããã®æååã«ã¯é»è©±çªå·ã®ã¿ãå«ããããšãã§ãããšèšè¿°ãããšäŸ¿å©ã§ãããã
ããã¯TLã«ãããŸããã ããããããšãã° JSON ã¹ããŒãã«ã¯ããããããŸãã ãããŠãä»ã®èª°ãã 512 KB ã®å²ãç®ã«ã€ããŠã³ãŒãå
ã§ãã§ãã¯ããå¿
èŠããããšå察ã§ããå Žåã¯ãã¯ã©ã€ã¢ã³ããåçŽã« ã§ããªãã£ã ç¯å²å€ã®çªå·ãéä¿¡ãã 1..3000
(察å¿ãããšã©ãŒã¯çºçããŸããã§ãã) ããã¯å¯èœã§ããã? ..
ã¡ãªã¿ã«ãšã©ãŒãšæ»ãå€ã«ã€ããŠã TL ã§ä»äºãããããšã®ãã人ã§ããç®ããŒãããŠããŸããç§ãã¡ã¯ããã«ã¯ãã®ããšã«æ°ã¥ããŸããã§ããã ãããã TL ã®é¢æ°ã¯ãå®éã«ã¯ã説æãããæ»ãå€ã®åã ãã§ãªãããšã©ãŒãè¿ãããšãã§ããŸãã ãããããã㯠TL èªäœããã¯æšæž¬ã§ããŸããã ãã¡ãããããã¯ãããã«ããŠãç解ã§ããŸãããå®éã«ã¯ nafig ã¯å¿ èŠãããŸãã (å®éã«ã¯ãRPC ã¯ããŸããŸãªæ¹æ³ã§å®è¡ã§ããŸãããããã«ã€ããŠã¯åŸã§èª¬æããŸã)ããããã倩åœããã®æœè±¡åã®æ°åŠã®æŠå¿µã®çŽç²ãã¯ã©ãã§ãããããäžç? .. 綱åŒããã€ããã - ããã§äžèŽããŸãã
æåŸã«ãèªã¿ãããã«ã€ããŠã¯ã©ãã§ãããã? ããŠãäžè¬çã«ãç§ã¯ãããããã®ã§ããã 説æ ãããã¹ããŒãå
ã«æ£ããé
眮ããŸã (ç¹°ãè¿ãã«ãªããŸãããJSON ã¹ããŒãå
ã«ãããŸã)ããããããã§ã«ããã«è² æ
ãããã£ãŠããå Žåã¯ãå®éçãªåŽé¢ã¯ã©ããªãã®ã§ãããããå°ãªããšããæŽæ°äžã«å·®åã確èªããã®ã¯ãããµããããšã§ã¯ãªãã§ããããã ã§èªåã®ç®ã§ç¢ºèªããŠãã ãã
- channelFull#76af5481 flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector<BotInfo> migrated_from_chat_id:flags.4?int migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int = ChatFull;
+channelFull#1c87a71a flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_view_stats:flags.12?true id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector<BotInfo> migrated_from_chat_id:flags.4?int migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int = ChatFull;
ãŸãã¯
- message#44f9b43d flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long = Message;
+message#44f9b43d flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true from_scheduled:flags.18?true id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long = Message;
ããã奜ã人ãããŸãããããšãã° GitHub ã¯ããã®ãããªé·ãè¡å ã®å€æŽã匷調衚瀺ããããšãæåŠããŠããŸãã ã²ãŒã ã¯ã10 åã®éããèŠã€ããããã®ã§ãè³ãããã«ç解ããã®ã¯ãäž¡æ¹ã®äŸã®å§ãŸããšçµãããåãã§ãããšããããšã§ããéäžã®ã©ãããéå±ã«èªãå¿ èŠããããŸã...ç§ã®æèŠã§ã¯ãããã¯åãªãçè«äžã®ããšã§ã¯ãªãããããçŽç²ã«èŠèŠçã«èŠããŸã æ±ããŠä¹±éãª.
ã¡ãªã¿ã«ãçè«ã®çŽåºŠã«ã€ããŠã ãªãããããã£ãŒã«ããå¿ èŠãªã®ã§ãããã? ããã§ã¯ãããŸããã åã åçè«ã®èŠ³ç¹ããã¯æªãã§ããïŒ èª¬æã¯ãã¹ããŒãã®ä»¥åã®ããŒãžã§ã³ã§åç §ã§ããŸãã æåã¯ãããã§ãããããã¿ããšã«æ°ããã¿ã€ããäœæãããŸããã ãããã®åºæ¬ã¯ã次ã®ãããªåœ¢åŒã§ãŸã æ®ã£ãŠããŸãã
storage.fileUnknown#aa963b05 = storage.FileType;
storage.filePartial#40bc6f52 = storage.FileType;
storage.fileJpeg#7efe0e = storage.FileType;
storage.fileGif#cae1aadf = storage.FileType;
storage.filePng#a4f63c0 = storage.FileType;
storage.filePdf#ae1e508d = storage.FileType;
storage.fileMp3#528a0677 = storage.FileType;
storage.fileMov#4b09ebbc = storage.FileType;
storage.fileMp4#b3cea0e4 = storage.FileType;
storage.fileWebp#1081464c = storage.FileType;
ããããæ§é å ã« 5 ã€ã®ãªãã·ã§ã³ã®ãã£ãŒã«ããããå Žåãèãããããã¹ãŠã®ãªãã·ã§ã³ã«å¯Ÿã㊠32 ã®åãå¿ èŠã«ãªããšæ³åããŠãã ããã çµã¿åããççºã ããããŠãTL çè«ã®çŽç²ãã¯ãé£èŒãšããå³ããçŸå®ãšããé³éã®ãå°»ã«åã³è¡çªããã®ã§ãã
ããã«ãå Žæã«ãã£ãŠã¯ã圌ãèªèº«ãã¿ã€ãã³ã°ã«éåããŠããŸãã ããšãã°ãMTProto (次ã®ç« ) ã§ã¯ãå¿çã Gzip ã§å§çž®ã§ããŸããã¬ã€ã€ãŒãšã¹ããŒãã®éåãé€ããŠããã¹ãŠãé©åã§ãã äžåºŠãRpcResult èªäœãååŸããã®ã§ã¯ãªãããã®å 容ãååŸããŸããã ã§ã¯ããªããããè¡ãã®ã§ãããã? ã©ãã§ãå§çž®ã§ããããã«æŸèæã䜿çšããå¿ èŠããããŸããã
ãŸãã¯ãå¥ã®äŸãšããŠãäžåºŠãšã©ãŒãèŠã€ããŠéä¿¡ããŸããã InputPeerUser
代ããã« InputUser
ã ãããã¯ãã®éãåæ§ã§ãã ã§ããããŸããããŸããïŒ ã€ãŸãããµãŒããŒã¯ã¿ã€ããæ°ã«ããŸããã§ããã ã©ãããã°ããã®ïŒ ããããããã®çãã¯ã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);
ã€ãŸããããã§ã·ãªã¢ã«åãå®äºããŸã æåã§ãçæãããã³ãŒãã§ã¯ãããŸããã ãããããµãŒããŒãåæ§ã®æ¹æ³ã§å®è£ ãããŠããã®ã§ã¯ãªãã§ãããã?.ååãšããŠãããã¯äžåºŠå®è¡ããã°æ©èœããŸãããåŸã§æŽæ°ã§ã©ã®ããã«ãµããŒãã§ããã§ãããã? ããããã®èšç»ã®ç®çã§ã¯ãªãã£ãã§ããããïŒ ãããŠã次ã®è³ªåã«ç§»ããŸãã
ããŒãžã§ã³ç®¡çã ã¬ã€ã€ãŒ
ã¹ããŒã ããŒãžã§ã³ãã¬ã€ã€ãŒãšåŒã°ããçç±ã¯ãå ¬éãããã¹ããŒãã®å±¥æŽã«åºã¥ããŠã®ã¿æšæž¬ã§ããŸãã ã©ããããæåã¯ãåºæ¬çãªããšã¯å€æŽãããŠããªãã¹ããŒã ã§å®è¡ã§ããå¿ èŠãªå Žåã«ã®ã¿ãç¹å®ã®èŠæ±ã«å¯ŸããŠå¥ã®ããŒãžã§ã³ã«åŸã£ãŠå®è¡ãããããšã瀺ãããšãã§ãããšäœè ã¯èããããã§ãã ååãšããŠãããšãè¯ãã¢ã€ãã¢ã§ãã£ãŠããæ°ããã¢ã€ãã¢ã¯ããã°ãæ··ãåããããŠãå€ãã¢ã€ãã¢ã®äžã«éããããŸãã ãããããããã©ã®ããã«è¡ãããããèŠãŠã¿ãŸãããã 確ãã«ãæåããèŠãããšã¯äžå¯èœã§ãã - ããã¯é¢çœãã§ãããããŒã¹ã¬ã€ã€ãŒã¹ããŒã ã¯åã«ååšããŸããã ã¬ã€ã€ãŒã¯ 2 ããå§ãŸããŸãããããã¥ã¡ã³ãã«ã¯ãç¹å¥ãª TL æ©èœã«ã€ããŠèšèŒãããŠããŸãã
ã¯ã©ã€ã¢ã³ããã¬ã€ã€ãŒ 2 ããµããŒãããŠããå Žåã¯ã次ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããå¿ èŠããããŸãã
invokeWithLayer2#289dd1f6 {X:Type} query:!X = X;
å®éã«ã¯ãããã¯ããã¹ãŠã® API åŒã³åºãã®åã«ãå€ãå«ã int ãè¿ãããããšãæå³ããŸãã
0x289dd1f6
ã¡ãœããçªå·ã®åã«è¿œå ããå¿ èŠããããŸãã
倧äžå€«ã§ããã ãããã次ã«äœãèµ·ãã£ãã®ã§ããããïŒ ããããæ¥ãŸãã
invokeWithLayer3#b7475268 query:!X = X;
ããã§ã次ã¯äœã§ããããïŒ æšæž¬ããããã®ã§
invokeWithLayer4#dea0d430 query:!X = X;
é¢çœãïŒ ãããç¬ãã®ã¯ãŸã æ©ããèããŠã¿ãŠãã ãã ãããã å¥ã®ã¬ã€ã€ãŒããã®ãªã¯ãšã¹ãã¯ããã®ãããªç¹å¥ãªã¿ã€ãã§ã©ããããå¿ èŠããããŸãããããããã¹ãŠç°ãªãå Žåãä»ã«ã©ã®ããã«åºå¥ããã®ã§ãããã? åã« 4 ãã€ãã ããè¿œå ããã®ã¯éåžžã«å¹ççãªæ¹æ³ã§ãã ããã§
invokeWithLayer5#417a57ae query:!X = X;
ãããããã°ãããããšãããããã«ããªã¢ã«ãªãããšã¯æããã§ãã ãããŠè§£æ±ºçã¯æ¬¡ã®ãšããã§ããã
æŽæ°: ã¬ã€ã€ 9 以éããã«ã㌠ã¡ãœãã
invokeWithLayerN
ãšäžç·ã«äœ¿çšã§ããŸãinitConnection
äžæ³ïŒ 9 ã€ã®ããŒãžã§ã³ãçµãŠãã€ãã« 80 幎代ã®ã€ã³ã¿ãŒããã ãããã³ã«ã§è¡ãããŠããããšãã€ãŸãæ¥ç¶ã®éå§æã« XNUMX åããŒãžã§ã³ ããŽã·ãšãŒã·ã§ã³ãè¡ãããããã«ãªããŸããã
ããã§ã次ã¯äœã§ãã?
invokeWithLayer10#39620c41 query:!X = X;
...
invokeWithLayer18#1c900537 query:!X = X;
ãããŠä»ãããªãã¯ç¬ãããšãã§ããŸãã ããã« 9 ã€ã®ã¬ã€ã€ãŒãçµãŠãããŒãžã§ã³çªå·ãæã€ãŠãããŒãµã« ã³ã³ã¹ãã©ã¯ã¿ãŒãæçµçã«è¿œå ãããŸãããããã¯ãæ¥ç¶ã®éå§æã« XNUMX åã ãåŒã³åºãå¿ èŠããããŸããã¬ã€ã€ãŒã®æå³ã¯å€±ãããŠããããã§ããçŸåšã¯ã次ã®ãããªåãªãæ¡ä»¶ä»ãããŒãžã§ã³ã§ããä»ã®ã©ãã§ãã åé¡ã解決ããŸããã
å³ïŒ..
Vasilyã[16.07.18/14/01 XNUMX:XNUMX PM] éææ¥ãç§ã¯ããæããŸããã
ãã¬ãµãŒããŒã¯ãªã¯ãšã¹ããªãã§ã€ãã³ããéä¿¡ããŸãã ãªã¯ãšã¹ã㯠InvokeWithLayer ã§ã©ããããå¿ èŠããããŸãã ãµãŒããŒã¯æŽæ°ãã©ããããŸãããå¿çãšæŽæ°ãã©ããããããã®æ§é ããããŸããããããã®ã ã¯ã©ã€ã¢ã³ãã¯æŽæ°ãåžæããã¬ã€ã€ãŒãæå®ã§ããŸãã
Vadim Goncharovã[16.07.18/14/02 XNUMX:XNUMX PM] InvokeWithLayer ã¯ååãšããŠæŸèæã§ã¯ãããŸããã?
Vasilyã[16.07.18/14/02 XNUMX:XNUMX PM] ãããå¯äžã®æ¹æ³ã§ã
Vadim Goncharovã[16.07.18/14/02 XNUMX:XNUMX PM] ããã¯æ¬è³ªçã«ãã»ãã·ã§ã³ã®éå§æã«ã¬ã€ã€ãŒãäœæããããšãæå³ããã¯ãã§ã
ã¡ãªã¿ã«ããã®ããšãããã¯ã©ã€ã¢ã³ãã®ããŠã³ã°ã¬ãŒãã¯æäŸãããªãããšãããããŸãã
ã¢ããããŒããã€ãŸãã¿ã€ã Updates
ãã®ã¹ããŒã ã§ã¯ãããã¯ãµãŒããŒã API ãªã¯ãšã¹ãã«å¿çããã®ã§ã¯ãªããã€ãã³ããçºçãããšãã«ç¬èªã«ã¯ã©ã€ã¢ã³ãã«éä¿¡ãããã®ã§ãã ããã¯è€éãªãããã¯ã§ãããå¥ã®æçš¿ã§èª¬æããŸãããããã§ã¯ãã¯ã©ã€ã¢ã³ãããªãã©ã€ã³ã®å Žåã§ããµãŒããŒã¯æŽæ°ãèç©ããããšãç¥ã£ãŠããããšãéèŠã§ãã
ãããã£ãŠãã©ããã³ã°ãæåŠããå Žåã¯ã ããããã® ããã±ãŒãžã«ããŒãžã§ã³ã瀺ãå¿ èŠããããããè«ççã«æ¬¡ã®ãããªåé¡ãçºçããå¯èœæ§ããããŸãã
- ã¯ã©ã€ã¢ã³ãããµããŒãããããŒãžã§ã³ãéç¥ããåã«ããµãŒããŒã¯ã¯ã©ã€ã¢ã³ãã«æŽæ°ãéä¿¡ããŸãã
- ã¯ã©ã€ã¢ã³ããã¢ããã°ã¬ãŒãããåŸã¯äœããã¹ãã§ãã?
- 誰ã ä¿èšŒããã¬ã€ã€ãŒçªå·ã«é¢ãããµãŒããŒã®æèŠã¯ããã»ã¹äžã«å€æŽãããªãã®ã§ãããã?
ããã¯çŽç²ã«çè«çãªèãæ¹ã§ããããµãŒããŒã¯æ£ããèšè¿°ãããŠãã (ãããã«ããŠããååã«ãã¹ããããŠãã) ãããå®éã«ã¯ãã®ãããªããšã¯èµ·ããåŸãªããšæããŸãã? ã¯ãïŒ ã©ããªã«ïŒ
ããã¯ãŸãã«ç§ãã¡ã 14 æã«ééããããšã§ãã XNUMX æ XNUMX æ¥ã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.
ãããŠãæ°ã¡ã¬ãã€ãã®ã¹ã¿ã㯠ãã¬ãŒã¹ãè¿œå ãããŸãã (åæã«ããã°èšé²ãä¿®æ£ãããŸãã)ã çµå±ã®ãšãããTL ã§äœããèªèãããªãã£ãå Žåãã¹ããªãŒã ã®ããã«å ã®çœ²åã«ãã£ãŠãã€ããªã«ãªããŸãã ALL ãããããšãã³ãŒãã§ããªããªããŸãã ãã®ãããªç¶æ³ã§ã¯ã©ãããã°ããã§ãããã?
ããã§ããã誰ã§ãæåã«æãã€ãã®ã¯ãæ¥ç¶ãåæããŠåè©Šè¡ããããšã§ãã 圹ã«ç«ã¡ãŸããã§ããã CRC32 ãã°ãŒã°ã«æ€çŽ¢ããŸãã - ãããã¯ã¹ããŒã 73 ã§äœæ¥ããŠããŸããããã¹ããŒã 82 ã®ãªããžã§ã¯ãã§ããããšãå€æããŸããããã°ã泚ææ·±ã調ã¹ãŸã - XNUMX ã€ã®ç°ãªãã¹ããŒã ããã®èå¥åããããŸãã
ããããåé¡ã¯åã«éå ¬åŒã¯ã©ã€ã¢ã³ãã«ããã®ã§ãããã? ããããTelegram Desktop 1.2.17 (å€ãã® Linux ãã£ã¹ããªãã¥ãŒã·ã§ã³ã§æäŸãããããŒãžã§ã³) ãå®è¡ãããšãäŸå€ãã°ã«æ¬¡ã®ããã«æžã蟌ãŸããŸã: MTP Unexpected type id #b5223b0f read in MTPMessageMediaâŠ
Google ã¯ãåæ§ã®åé¡ãéå ¬åŒã¯ã©ã€ã¢ã³ãã® XNUMX ã€ã§ãã§ã«çºçããŠããããšã瀺ããŸãããããã®åŸãããŒãžã§ã³çªå·ãããã³ããã«å¿ããŠæ³å®ãç°ãªã£ãŠããŸãã...
ãããäœãããã°ããã®ïŒ Vasily ãšç§ã¯å¥ããŸããã圌ã¯ã¹ããŒã ã 91 ã«æŽæ°ããããšããŸããããç§ã¯æ°æ¥åŸ ã£ãŠ 73 ã«æŽæ°ããŠã¿ãããšã«ããŸãããã©ã¡ãã®æ¹æ³ãæ©èœããŸããããçµéšçãªãã®ã§ãããããããã€ã®ããŒãžã§ã³ã«ãžã£ã³ãããå¿ èŠããããã¯ããããŸããããŸãã¯ããŠã³ãã©ããããåŸ ã€å¿ èŠããããã
ãã®åŸãç§ã¯ç¶æ³ãåçŸããããšãã§ããŸãããã¯ã©ã€ã¢ã³ããèµ·åããé»æºãåããã¹ããŒã ãå¥ã®ã¬ã€ã€ãŒã«åã³ã³ãã€ã«ããåèµ·åããåé¡ãå床ãã£ããããåã®ã¬ãã«ã«æ»ããŸãããã£ãšãã¹ããŒã ãåãæ¿ããããã¯ã©ã€ã¢ã³ããåèµ·åãããããããšã¯ãããŸããã§ãããæ°åã圹ã«ç«ã¡ãŸãã ããŸããŸãªã¬ã€ã€ãŒããæ··åãããããŒã¿æ§é ãåãåããŸãã
説æïŒ ããŸããŸãªéæ¥çãªçç¶ããæšæž¬ã§ããããã«ããµãŒããŒã¯ããŸããŸãªãã·ã³äžã®ããŸããŸãªçš®é¡ã®ããã»ã¹ã§æ§æãããŠããŸãã æãå¯èœæ§ãé«ãã®ã¯ãããããã¡ãªã³ã°ããæ åœãããµãŒããŒã® XNUMX ã€ããäžäœã®ãµãŒããŒãæäŸãããã®ããã¥ãŒã«å ¥ããçææã®ã¹ããŒã ã§æäŸããããšã§ãã ãããŠããã®è¡åããè ãããŸã§ã¯ãäœãããããšãã§ããŸããã§ããã
ãã ã...ããããããã¯ã²ã©ãåé¡ã§ãã?!...ããããã¯ã¬ã€ãžãŒãªã¢ã€ãã¢ã«ã€ããŠèããåã«ãå ¬åŒã¯ã©ã€ã¢ã³ãã®ã³ãŒããèŠãŠã¿ãŸãããã Android ããŒãžã§ã³ã§ã¯ãTL ããŒãµãŒã¯èŠã€ãããŸãããã(é) ã·ãªã¢ã«åããã巚倧ãªãã¡ã€ã« (github ãã«ã©ãŒãªã³ã°ãæåŠãã) ãèŠã€ããŸãã ã³ãŒãã¹ããããã¯æ¬¡ã®ãšããã§ãã
public static class TL_message_layer68 extends TL_message {
public static int constructor = 0xc09be45f;
//...
//еÑе паÑка пПЎПбМÑÑ
//...
public static class TL_message_layer47 extends TL_message {
public static int constructor = 0xc992e15c;
public static Message TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) {
Message result = null;
switch (constructor) {
case 0x1d86f70e:
result = new TL_messageService_old2();
break;
case 0xa7ab1991:
result = new TL_message_old3();
break;
case 0xc3060325:
result = new TL_message_old4();
break;
case 0x555555fa:
result = new TL_message_secret();
break;
case 0x555555f9:
result = new TL_message_secret_layer72();
break;
case 0x90dddc11:
result = new TL_message_layer72();
break;
case 0xc09be45f:
result = new TL_message_layer68();
break;
case 0xc992e15c:
result = new TL_message_layer47();
break;
case 0x5ba66c13:
result = new TL_message_old7();
break;
case 0xc06b9607:
result = new TL_messageService_layer48();
break;
case 0x83e5de54:
result = new TL_messageEmpty();
break;
case 0x2bebfa86:
result = new TL_message_old6();
break;
case 0x44f9b43d:
result = new TL_message_layer104();
break;
case 0x1c9b1027:
result = new TL_message_layer104_2();
break;
case 0xa367e716:
result = new TL_messageForwarded_old2(); //custom
break;
case 0x5f46804:
result = new TL_messageForwarded_old(); //custom
break;
case 0x567699b3:
result = new TL_message_old2(); //custom
break;
case 0x9f8d60bb:
result = new TL_messageService_old(); //custom
break;
case 0x22eb6aba:
result = new TL_message_old(); //custom
break;
case 0x555555F8:
result = new TL_message_secret_old(); //custom
break;
case 0x9789dac4:
result = new TL_message_layer104_3();
break;
ãŸãã¯
boolean fixCaption = !TextUtils.isEmpty(message) &&
(media instanceof TLRPC.TL_messageMediaPhoto_old ||
media instanceof TLRPC.TL_messageMediaPhoto_layer68 ||
media instanceof TLRPC.TL_messageMediaPhoto_layer74 ||
media instanceof TLRPC.TL_messageMediaDocument_old ||
media instanceof TLRPC.TL_messageMediaDocument_layer68 ||
media instanceof TLRPC.TL_messageMediaDocument_layer74)
&& message.startsWith("-1");
ããŒã...ã¯ã¬ã€ãžãŒã§ããã ããããããããããã¯çæãããã³ãŒããªã®ã§å€§äžå€«ã§ãããã? .. ãããã確ãã«ãã¹ãŠã®ããŒãžã§ã³ããµããŒãããŠããŸãã 確ãã«ããªããã¹ãŠã XNUMX ã€ã®å±±ã«æ··åšããç§å¯ã®ãã£ãããããããçš®é¡ã®ãã®ãæ··åšããŠããã®ãã¯äžæã§ãã _old7
ã©ããããããæ©æ¢°äžä»£ãšã¯äŒŒãŠããŸãã...ããããäœãããç§ã¯æåãã倢äžã«ãªããŸãã
TL_message_layer104
TL_message_layer104_2
TL_message_layer104_3
çãããXNUMXã€ã®ã¬ã€ã€ãŒå ã§ãã決ããããšãã§ããªãã®ã§ããïŒ ããã§ããããXNUMXãããšã©ãŒã§ãªãªãŒã¹ããããšããŸãããããŸããããã¯èµ·ãããŸãããXNUMX? .. ããã«ãŸãåãçæã§ïŒ ããããªãããããã¯äœã®ãã«ãã§ãã?
ã¡ãªã¿ã«ãTelegram Desktop ãœãŒã¹ã§ãåæ§ã®ããšãèµ·ãããŸããããã§ããã°ãã¹ããŒã ã«é£ç¶ããŠããã€ãã®ã³ããããè¡ããšãã¬ã€ã€ãŒçªå·ã¯å€æŽãããŸããããäœããä¿®æ£ãããŸãã ã¹ããŒã ã®å ¬åŒããŒã¿ ãœãŒã¹ããªãç¶æ³ã§ã¯ãå ¬åŒã¯ã©ã€ã¢ã³ã ãœãŒã¹ä»¥å€ã®ã©ãããããŒã¿ ãœãŒã¹ãå ¥æã§ããŸãã? ããããèããŠã¿ããšããã¹ãŠã®ã¡ãœããããã¹ããããŸã§ã¯ããã®ã¹ããŒã ãå®å šã«æ£ãããã©ããã¯ããããŸããã
ãããã©ããã£ãŠãã¹ãã§ããã®ã§ããããïŒ åäœãã¹ããæ©èœãã¹ãããã®ä»ã®ãã¹ãã®ãã¡ã³ãã³ã¡ã³ããå ±æããŠãããããšãé¡ã£ãŠããŸãã
ããŠãå¥ã®ã³ãŒããèŠãŠã¿ãŸãããã
public static class TL_folders_deleteFolder extends TLObject {
public static int constructor = 0x1c295881;
public int folder_id;
public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) {
return Updates.TLdeserialize(stream, constructor, exception);
}
public void serializeToStream(AbstractSerializedData stream) {
stream.writeInt32(constructor);
stream.writeInt32(folder_id);
}
}
//manually created
//RichText start
public static abstract class RichText extends TLObject {
public String url;
public long webpage_id;
public String email;
public ArrayList<RichText> texts = new ArrayList<>();
public RichText parentRichText;
public static RichText TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) {
RichText result = null;
switch (constructor) {
case 0x1ccb966a:
result = new TL_textPhone();
break;
case 0xc7fb5e01:
result = new TL_textSuperscript();
break;
ããã§ã®ãæåã§äœæãããããšããã³ã¡ã³ãã¯ããã®ãã¡ã€ã«ã®äžéšã ããæåã§æžã蟌ãŸããŠãã (ã¡ã³ããã³ã¹ã®æªå€¢ãæ³åã§ããŸãã?)ãæ®ãã¯æ©æ¢°ã«ãã£ãŠçæãããããšã瀺åããŠããŸãã ãã ãããœãŒã¹ã¯å ¥æå¯èœããšããå¥ã®çåãçããŸãã ããããšãããããŸã (Linux ã«ãŒãã«ã® GPL ã«åºã¥ã BLOB ã®ããã«) ããããããã¯ãã§ã«ç¬¬ XNUMX éšã®ãããã¯ã§ãã
ã§ãååã§ãã ãã®é£èŒå šäœãè¿œããããŠãããããã³ã«ã«ç§»ããŸãããã
MTããã
ããã§ã¯ãéããŸããã
ããšãã°ããã¡ãã»ãŒãžã (ã¡ãã»ãŒãž) ãšãã»ãã·ã§ã³ã (ã»ãã·ã§ã³) ã¯ãããã§ã¯ Telegram ã¯ã©ã€ã¢ã³ãã®éåžžã®ã€ã³ã¿ãŒãã§ã€ã¹ãšã¯ç°ãªãæå³ãæã¡ãŸãã ããã§ãããã¡ãã»ãŒãžã¯ãã¹ãŠæããã§ããOOP ã®èŠ³ç¹ãã解éããããšããåã«ãããã±ãŒãžããšããèšèã§åŒã¶ããšãã§ããŸããããã¯äœããã©ã³ã¹ããŒã ã¬ãã«ã§ãããã€ã³ã¿ãŒãã§ã€ã¹ã®ã¡ãã»ãŒãžãšåãã¡ãã»ãŒãžã¯ãªãããããããããŸãããµãŒãã¹ã®ãã®ã ããããã»ãã·ã§ã³...ãããããŸãæåã«ã
ãã©ã³ã¹ããŒãå±€
ãŸãã¯äº€éæ段ã§ãã 5ã€ã®ãªãã·ã§ã³ã«ã€ããŠèª¬æãããŸãã
- TCP
- ãŠã§ããœã±ãã
- HTTPS çµç±ã® WebSocket
- HTTP
- HTTPS
Vasilyã[15.06.18/15/04 XNUMX:XNUMX PM] UDP ãã©ã³ã¹ããŒãããããŸãããææžåãããŠããŸãã
ãã㊠TCP ã«ã¯ XNUMX ã€ã®ããªãšãŒã·ã§ã³ããããŸã
XNUMX ã€ç®ã¯ UDP over TCP ã«äŒŒãŠãããåãã±ããã«ã¯ã·ãŒã±ã³ã¹çªå·ãš CRC ãå«ãŸããŸãã
ã«ãŒãã«ä¹ã£ãŠããã¯ãèªãã®ã¯ãªããããªã«èŠçãªã®ã§ãããã?
ããŠãããã§ã¯
- èŠçŽ
- äžçŽ
- ãããå ¥ãäžé
- ãã«
ããããŸãããMTProxy ã®ããã£ã³ã°ãããäžéã§ããããã¯æ¢ç¥ã®ã€ãã³ãã«ããåŸã§è¿œå ãããŸããã ããããXNUMX ã€ã§ã§ããã®ã«ããªãããã« XNUMX ã€ã®ããŒãžã§ã³ (åèš XNUMX ã€) ãã§ããã®ã§ãããã? XNUMX ã€ãšãåºæ¬çã«ã¯ãå®éã®ã¡ã€ã³ MTProto ã®é·ããšãã€ããŒããèšå®ããæ¹æ³ã®ã¿ãç°ãªããŸããããã«ã€ããŠã¯åŸã§èª¬æããŸãã
- ç瞮圢ã§ã¯ 1 ãŸã㯠4 ãã€ãã§ããã0xef ã§ã¯ãªããæ¬æã§ã
- Intermediate ã§ã¯ããã㯠4 ãã€ãã®é·ããšãã£ãŒã«ãã§ãããã¯ã©ã€ã¢ã³ããåããŠéä¿¡ããå¿
èŠããããŸãã
0xeeeeeeee
äžçŽã§ããããšã瀺ã - ãããã¯ãŒã«ãŒã®èŠ³ç¹ããèŠããšãæãäžæ¯æ§ã®é«ããã«ã§ããé·ããã·ãŒã±ã³ã¹çªå·ããããŠåºæ¬çã« MTProtoãæ¬äœãCRC32 ã§ã¯ãããŸããã ã¯ããããã¯ãã¹ãŠ TCP çµç±ã§ãã ããã«ããããã€ãã®ã·ãªã¢ã« ã¹ããªãŒã ã®åœ¢åŒã§ä¿¡é Œæ§ã®é«ã転éãæäŸãããã·ãŒã±ã³ã¹ãç¹ã«ãã§ãã¯ãµã ã¯å¿ èŠãããŸããã ããŠãããã§ãTCP ã«ã¯ 16 ãããã®ãã§ãã¯ãµã ããããããããŒã¿ç Žæãçºçãããšããããšã«å察ããã§ãããã å®éã« 16 ãã€ããè¶ ããããã·ã¥ãæã€æå·åãããã³ã«ã䜿çšããŠããããšãé€ãã°ãããããã¹ãŠã®ãšã©ãŒãããã«ã¯ãã以äžã®ãšã©ãŒããããé«ãã¬ãã«ã§ SHA ã®äžäžèŽã§æ€åºãããŸãã ããã«é¢ããŠã¯ CRC32 ã«ã¯æå³ããããŸããã
4 ãã€ãã®é·ããå¯èœãª Abridged ãšãã16 ãã€ãã®ããŒã¿ ã¢ã©ã€ã¡ã³ããå¿ èŠãªå Žåã«åããŠããšæ£åœåããã Intermediate ãæ¯èŒããŠã¿ãŸããããããã¯éåžžã«ãã³ã»ã³ã¹ã§ãã Telegram ããã°ã©ããŒã¯éåžžã«äžåšçšãªã®ã§ããœã±ããããæŽåããããããã¡ãŒã«ããŒã¿ãèªã¿èŸŒãããšãã§ããªããšèããããŠããŸãã èªã¿åããšä»»æã®æ°ã®ãã€ããè¿ãããå¯èœæ§ãããããããããè¡ãå¿ èŠããããŸã (ãããã· ãµãŒããŒãªã©ããããŸã)ã ãããã¯ãéã«ãå é ã® 3 ãã€ããããŸã 倧éã®ããã£ã³ã°ãæ®ã£ãŠããã®ã§ããã°ããªããããã Abridged ã䜿ãå¿ èŠãããã®ã§ãããã - XNUMX ãã€ããç¯çŽã§ããŸã æã ?
ãã³ã©ã€ã»ãã¥ããã¯ãå®éã®å®çšçãªå¿ èŠæ§ã䌎ããã«ããããã¯ãŒã¯ãããã³ã«ãå«ãèªè»¢è»ãçºæããã®ãéåžžã«å¥œãã§ãããšããå°è±¡ãåããŸãã
ãã®ä»ã®äº€éæ段Web ãš MTProxy ã«ã€ããŠã¯ãçŸæç¹ã§ã¯æ€èšããŸãããããèŠæãããã°å¥ã®æçš¿ã§æ€èšããäºå®ã§ãã ãã® MTProxy ã«ã€ããŠã¯ã2018 幎ã®ãªãªãŒã¹çŽåŸããããã€ããŒãããã«ãããæ£ç¢ºã«ãããã¯ããæ¹æ³ãåŠç¿ããããšãæãåºããŠãã ããã ãããã¯ãã€ãã¹ã〠ãã±ãããµã€ãºïŒ ãŸããC ã§æžããã (ããã Waltman ã«ãã£ãŠ) MTProxy ãµãŒããŒãããŸã£ããå¿ èŠã§ã¯ãªãã£ãã«ãããããã (Phil Kulin ã確èªããã§ããã)ãLinux ã®ä»æ§ã«äžå¿ èŠã«çµã³ä»ããããŠãããšããäºå®ãšãåæ§ã®ãµãŒããŒã Go ãŸã㯠Node.js äžã«ååšãããšããäºå®ããããŸãã XNUMX è¡æªæºã«åãŸããŸãã
ãã ãããããã®äººã ã®æè¡çãªãã©ã·ãŒã«ã€ããŠã¯ãä»ã®åé¡ãæ€èšããåŸããã®ã»ã¯ã·ã§ã³ã®æåŸã§çµè«ãå°ãåºããŸãã ããã§ã¯ã5 çªç®ã® OSI å±€ã§ããã»ãã·ã§ã³ã«ç§»ããŸããããMTProto ã»ãã·ã§ã³ã¯ãã®å±€ã«é 眮ãããŠããŸãã
ããŒãã¡ãã»ãŒãžãã»ãã·ã§ã³ããã£ãã£ãŒ ãã«ãã³
圌ãã¯ãããå®å šã«æ£ããããã«é 眮ããŠããŸãã...ã»ãã·ã§ã³ã¯ãã¢ã¯ãã£ãã»ãã·ã§ã³ã®äžã®ã€ã³ã¿ãŒãã§ã€ã¹ã«è¡šç€ºãããã»ãã·ã§ã³ãšåãã§ã¯ãããŸããã ã§ãé çªéãã«ã
ããã§ã¯ããã©ã³ã¹ããŒãå±€ããæ¢ç¥ã®é·ãã®ãã€ãåãåä¿¡ããŸããã ããã¯ããŸã éµããŽã·ãšãŒã·ã§ã³ã®æ®µéã«ãããå®éã«ããŽã·ãšãŒã·ã§ã³ãè¡ã£ãŠããå Žåã«ã¯ãæå·åãããã¡ãã»ãŒãžãŸãã¯å¹³æã®ããããã§ãã ãããŒããšåŒã°ããäžé£ã®æŠå¿µã®ãã¡ã©ãã«ã€ããŠè©±ããŠããã®ã§ãããã? Telegram ããŒã èªèº«ã®ããã«ãã®åé¡ãæ確ã«ããŸããã (åå 4 æã«ç²ããè³ã®ãããç§èªèº«ã®ããã¥ã¡ã³ããè±èªãã翻蚳ããããšããè©«ã³ããŸããããã€ãã®ãã¬ãŒãºããã®ãŸãŸã«ããŠããæ¹ãç°¡åã§ãã)ã
ãšåŒã°ãã XNUMX ã€ã®ãšã³ãã£ãã£ããããŸã ã»ãã·ã§ã³ - ãçŸåšã®ã»ãã·ã§ã³ãã®äžã«ããå ¬åŒã¯ã©ã€ã¢ã³ãã® UI ã« XNUMX ã€ãããåã»ãã·ã§ã³ã¯ããã€ã¹/OS å šäœã«å¯Ÿå¿ããŸãã
第2ã«ã MTProtoã»ãã·ã§ã³ãããã«ã¯ïŒäœã¬ãã«ã®æå³ã§ã®ïŒã¡ãã»ãŒãž ã·ãŒã±ã³ã¹çªå·ãå«ãŸããŠããã ç°ãªã TCP æ¥ç¶ã®éã§ãæç¶ããå¯èœæ§ããããŸãã ããšãã°ããã¡ã€ã«ã®ããŠã³ããŒããé«éåããããã«ãè€æ°ã® MTProto ã»ãã·ã§ã³ãåæã«ã»ããã¢ããã§ããŸãããã®äºäººã®é㧠ã»ãã·ã§ã³ ãã³ã³ã»ããã§ã æ¿èªã éåããå Žåã次ã®ããã«èšããŸãã UIã»ãã·ã§ã³ ãšåãã§ã æ¿èªããããæ®å¿µãªããšã«ãããã¯è€éã§ãã ç§ãã¡ãèŠãŸãïŒ
- æ°ããããã€ã¹äžã®ãŠãŒã¶ãŒã¯æåã« èªèšŒã㌠ãããŠããããããšãã° SMS ã«ãã£ãŠã¢ã«ãŠã³ãã«ãã€ã³ãããŸã - ã ãããã æ¿èª
- ããã¯æåã®å éšã§èµ·ãããŸãã MTProtoã»ãã·ã§ã³ã
session_id
èªåèªèº«ã®äžã«ã- ãã®æ®µéã§ã®çµã¿åããã¯ã æ¿èª О
session_id
ååãä»ãããããããããªã - ãã®åèªã¯äžéšã®ã¯ã©ã€ã¢ã³ãã®ããã¥ã¡ã³ããšã³ãŒãã§èŠã€ãããŸãã- ãã®åŸãã¯ã©ã€ã¢ã³ãã¯éãããšãã§ããŸã ããã€ãã® MTProtoã»ãã·ã§ã³ åãäžã«ãã èªèšŒã㌠- åã DC ã«ã
- ãããŠããæ¥ãã¯ã©ã€ã¢ã³ãã¯æ¬¡ã®ãã¡ã€ã«ããªã¯ãšã¹ãããå¿ èŠããããŸãã å¥ã®DC - ãããŠããã® DC ã«å¯ŸããŠæ°ãã DC ãçæãããŸã èªèšŒã㌠!
- ããã¯æ°èŠãŠãŒã¶ãŒç»é²ã§ã¯ãªããåããŠãŒã¶ãŒç»é²ã§ããããšãã·ã¹ãã ã«äŒãããã æ¿èª (UIã»ãã·ã§ã³)ãã¯ã©ã€ã¢ã³ã㯠API åŒã³åºãã䜿çšããŸã
auth.exportAuthorization
æã家ã®DCã§auth.importAuthorization
æ°ããDCã§ã- ããã§ããããã€ãéããŠããå¯èœæ§ããããŸã MTProtoã»ãã·ã§ã³ (ããããç¬èªã®
session_id
) ãã®æ°ãã DC ã«ã 圌㮠èªèšŒããŒ.- æåŸã«ãã¯ã©ã€ã¢ã³ã㯠Perfect Forward Secrecy ãå¿ èŠãšããå ŽåããããŸãã æ¯æ¥ èªèšŒã㌠ããã§ãã æä¹ ç㪠ã㌠- DC ããš - ããã³ã¯ã©ã€ã¢ã³ãã¯åŒã³åºãããšãã§ããŸã
auth.bindTempAuthKey
䜿çšããããã« äžæç èªèšŒã㌠- ãããŠç¹°ãè¿ãã«ãªããŸãããXNUMX ã€ã ã temp_auth_key DCããšããã¹ãŠã«å ±é MTProtoã»ãã·ã§ã³ ãã®DCãžã泚æããŠãã ãã å¡© (ãããŠå°æ¥ã®å¡©ã) èªèšŒã㌠ãããã®ã å šå¡ã§å ±æãã MTProtoã»ãã·ã§ã³ åãDCã«ã
ãç°ãªã TCP æ¥ç¶éããšã¯äœãæå³ããŸãã? ãšããããšã¯ããã㯠äœãã®ãããªãã® Web ãµã€ãäžã®èªèšŒ Cookie - ãã®ãµãŒããŒãžã®å€ãã® TCP æ¥ç¶ãç¶æ (åç¶) ããŸããããã€ãã¯æ©èœããªããªããŸãã HTTP ãšã¯ç°ãªããŸãããMTProto ã§ã¯ãã»ãã·ã§ã³å ã§ã¡ãã»ãŒãžã«é çªã«çªå·ãä»ãããã確èªãããŸããã¡ãã»ãŒãžã¯ãã³ãã«ã«å ¥ããæ¥ç¶ãåæãããŸãããæ°ããæ¥ç¶ã確ç«ããåŸããµãŒããŒã¯èŠªåã«ãããã®ã»ãã·ã§ã³ã§é ä¿¡ã§ããªãã£ããã¹ãŠã®ãã®ãéä¿¡ããŸãã以åã® TCP æ¥ç¶ã
ããããäžèšã®æ å ±ã¯äœã¶æã«ãããã蚎èšãçµãŠçµãåºããããã®ã§ãã ãããŸã§ã®éãã¯ã©ã€ã¢ã³ããæåããå®è£ ããã®ã§ãããã? - æåã«æ»ããŸãããã
ããã§ç§ãã¡ã¯çæããŸã auth_key
äžã®
Vasilyã[19.06.18/20/05 1:255] data_with_hash := SHAXNUMX(ããŒã¿) + ããŒã¿ + (ä»»æã®ã©ã³ãã ãªãã€ã); é·ãã XNUMX ãã€ãã«ãªãããã«ããŸãã
encrypted_data := RSA(data_with_hashãserver_public_key); 255 ãã€ãã®é·ãã®æ°å€ (ããã° ãšã³ãã£ã¢ã³) ãå¿ èŠãªä¿æ°ã§å¿ èŠãªã¹ãä¹ãããçµæã 256 ãã€ãã®æ°å€ãšããŠæ ŒçŽãããŸãã圌ãã¯ããŒããªDHãæã«å ¥ãã
å¥åº·ãªäººã®DHã«ã¯èŠããªã
dx ã«ã¯ XNUMX ã€ã®å ¬ééµã¯ãããŸãã
çµå±ãç§ãã¡ã¯ãããç解ããŸããããæ²æ®¿ç©ã¯æ®ããŸãããã¯ã©ã€ã¢ã³ããæ°å€ãå æ°å解ã§ãããšããäœæ¥ã®èšŒæãè¡ãããŸãã DoS æ»æã«å¯Ÿããä¿è·ã®ã¿ã€ãã RSA ããŒã¯ãåºæ¬çã«æå·åã®ããã«äžæ¹åã« XNUMX åã ã䜿çšãããŸãã new_nonce
ã ãããããã®äžèŠåçŽãªäœæŠã¯æåããäžæ¹ã§ãäœã«çŽé¢ããªããã°ãªããªãã®ã§ãããã?
Vasilyã[20.06.18/00/26 XNUMX:XNUMX] ãŸã appid ãªã¯ãšã¹ãã«å°éããŠããŸãã
DHã«ãªã¯ãšã¹ããéä¿¡ããŸãã
ãããŠããã©ã³ã¹ããŒãã®ããã¯ã«ã¯ã4ãã€ãã®ãšã©ãŒã³ãŒãã§å¿çã§ãããšæžãããŠããŸãã 以äžã§ã
ããã§ããã圌ã¯ç§ã« -404 ãšèšã£ãã®ã§ãäœã§ããïŒ
ç§ã¯åœŒã«ããèšã£ãŠããŸããããµãŒããŒããŒã§æå·åãããããªãã®ãšãã£ãã£ããããããã®æçŽã§æå·åããŠãã ãããDHãå¿ èŠã§ããããããšãæããªå¿ç404
ãã®ãããªãµãŒããŒå¿çã«ã€ããŠã©ãæããŸãã? äœããã¹ããïŒ å°ãããã人ã¯èª°ãããŸãã (ãã ããããã«ã€ããŠã¯åŸåã§è©³ãã説æããŸã)ã
ããã¯ã«é¢ãããã¹ãŠã®é¢å¿ã¯ããã§è¡ãããŸã
ä»ã«äœãããããšããªããæ°åãååŸã«å€æããããšã ãã倢èŠãŠãã
32 ã€ã® XNUMX ãããæ°å€ã ä»ã®äººãšåãããã«æ¢±å ããŸãã
ããããããããBE ãšããŠæåã«å¿ èŠãªã®ã¯ããã XNUMX ã€ã§ã
Vadim Goncharovã[20.06.18/15/49 404:XNUMX PM] ãããŠãã® XNUMX ã®ããã§ããããïŒ
ãŽã¡ã·ãªãŒã[20.06.18/15/49 XNUMX:XNUMX PM] ã¯ã!
Vadim Goncharovã[20.06.18/15/50 XNUMX:XNUMX PM] ã ããã圌ãäœããèŠã€ããããªãã£ããã®ãç解ã§ããŸãã
ãŽã¡ã·ãªãŒã[20.06.18 15:50] ããã
åçŽãªçŽæ°ãžã®ãã®ãããªå解ã¯èŠã€ãããŸããã§ãã%)
ãšã©ãŒå ±åããç¿åŸã§ããŠããªã
Vasilyã[20.06.18/20/18 5:XNUMX PM] ãããMDXNUMX ããããŸãã ãã§ã« XNUMX ã€ã®ç°ãªãããã·ã¥
ããŒã®ãã£ã³ã¬ãŒããªã³ãã¯æ¬¡ã®ããã«èšç®ãããŸãã
digest = md5(key + iv) fingerprint = substr(digest, 0, 4) XOR substr(digest, 4, 4)
SHA1 ãš SHA2
ããã§ã¯ãå
¥ããŠã¿ãŸããã auth_key
Diffie-Hellman ã«ããã°ããµã€ãºã¯ 2048 ãããã§ãã 次ã¯äœã§ããïŒ æ¬¡ã«ããã®ããŒã®äžäœ 1024 ãããããŸã£ãã䜿çšãããŠããªãããšãããããŸã...ããããä»ã¯ããã«ã€ããŠèããŠã¿ãŸãããã ãã®ã¹ãããã§ã¯ããµãŒããŒãšã®å
±æç§å¯ãååŸããŸãã TLS ã»ãã·ã§ã³ã®é¡äŒŒç©ã確ç«ãããŠããŸãããããã¯éåžžã«ã³ã¹ãã®ãããæé ã§ãã ãããããµãŒããŒã¯ç§ãã¡ã誰ã§ãããããŸã äœãç¥ããŸããã å®ã¯ãŸã ã§ã èªå¯ã ãããã®ã ICQ ã§äœ¿çšãããŠããããã°ã€ã³ ãã¹ã¯ãŒããããŸã㯠SSH (ããšãã°ãgitlab / github) ã§ã®å°ãªããšãããã°ã€ã³ ããŒãã®èŠ³ç¹ããèããå Žåã å¿åã«ãªããŸããã ãããŠããµãŒããŒãããããã®é»è©±çªå·ã¯å¥ã® DC ã«ãã£ãŠæäŸãããŠããŸãããšå¿çããå Žåã¯ã©ãã§ããããã ãããšããããªãã®é»è©±çªå·ã¯çŠæ¢ãããŠããŸããïŒ ç§ãã¡ãã§ããæåã®ããšã¯ããã®æãŸã§ã«ããŒããŸã 圹ã«ç«ã¡ãè
ããªãããšãé¡ã£ãŠããŒãä¿åããããšã§ãã
ã¡ãªã¿ã«äºçŽã§ãããã ããŸãããã ããšãã°ããµãŒããŒãä¿¡é Œã§ããŸãã? 圌ã¯åœç©ã§ããïŒ æå·åãã§ãã¯ãå¿ èŠã§ãã
Vasilyã[21.06.18/17/53 2:XNUMX PM] ç°¡åã«ããããã«ã¢ãã€ã« ã¯ã©ã€ã¢ã³ãã« XNUMXkbit çªå·ããã§ãã¯ããããæäŸããŠããŸã%)
ã§ãå šç¶ã¯ã£ããããªããã ããããã§ã€ãžã§ã¢
Vasilyã[21.06.18/18/02 XNUMX:XNUMX] ããã¯ã¯ããããåçŽã§ã¯ãªãããšãå€æããå Žåã«äœããã¹ããã«ã€ããŠã¯è¿°ã¹ãŠããŸãã
èšãããŠããªãã ãã®å ŽåãAndroid ã®å
¬åŒã¯ã©ã€ã¢ã³ããäœããããèŠãŠã¿ãŸãããã ã
278 static const char *goodPrime = "c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b";
279 if (!strcasecmp(prime, goodPrime)) {
ããããã¡ãããããŸãã ããã€ã æ°å€ã®åçŽãã®ãã§ãã¯ã¯ãããŸãããå人çã«ã¯æ°åŠã®ç¥èãååã§ã¯ãããŸããã
ããããã¹ã¿ãŒããŒãæã«å ¥ããã ãã°ã€ã³ããã«ã¯ãã€ãŸããªã¯ãšã¹ããéä¿¡ããã«ã¯ããã§ã« AES ã䜿çšããŠããã«æå·åãå®è¡ããå¿ èŠããããŸãã
ã¡ãã»ãŒãž ããŒã¯ãã¡ãã»ãŒãžæ¬æ (ã»ãã·ã§ã³ãã¡ãã»ãŒãž ID ãªã©ãå«ã) ã® SHA128 ã®äžé 256 ããã (ããã£ã³ã° ãã€ããå«ã) ã«ãèªå¯ããŒããååŸãã 32 ãã€ããä»å ããããã®ãšããŠå®çŸ©ãããŸãã
ãŽã¡ã·ãªãŒã[22.06.18/14/08 XNUMX:XNUMX PM] å¹³åçãªéç¬
åãåã£ã
auth_key
ã å šãŠã ããã«ãããã¯...ããã¯ããã¯æããã§ã¯ãããŸããã ãªãŒãã³ãœãŒã¹ ã³ãŒããèªç±ã«ç 究ããŠãã ãããMTProto 2.0 ã§ã¯ 12 ïœ 1024 ãã€ãã®ããã£ã³ã°ãå¿ èŠã§ãããçµæãšããŠåŸãããã¡ãã»ãŒãžã®é·ãã 16 ãã€ãã§å²ãåãããšããæ¡ä»¶ãé©çšãããããšã«æ³šæããŠãã ããã
ã§ã¯ãã©ã®ãããã®éã®ããããå ¥ããã°ããã®ã§ããããïŒ
ãããŠãã¯ããããã§ãããšã©ãŒã®å Žå㯠404
誰ããå³ãšããã¥ã¡ã³ãã®ããã¹ãã泚ææ·±ã調ã¹ãå Žåãããã«ã¯ MAC ãååšããªãããšã«æ°ã¥ããŸããã ãŸããAES ã¯ãä»ã®å Žæã§ã¯äœ¿çšãããŠããªãäžéšã® IGE ã¢ãŒãã§äœ¿çšãããŸãã ãã¡ããã圌ã㯠FAQ ã«ããã«ã€ããŠæžããŠããŸã...ããã§ã¯ãã¡ãã»ãŒãž ããŒèªäœããåæã«æŽåæ§ããã§ãã¯ããããã«äœ¿çšããã埩å·åãããããŒã¿ã® SHA ããã·ã¥ã§ããããŸããäžäžèŽã®å Žåã¯ãããã¥ã¡ã³ããå¿ èŠã«ãªããŸããäœããã®çç±ã§ãããããé»ã£ãŠç¡èŠããããšããå§ãããŸãïŒããããã»ãã¥ãªãã£ã¯ã©ããªãã®ã§ãããããçªç¶ç§ãã¡ãå£ãã®ã§ããããïŒïŒã
ç§ã¯æå·åŠè
ã§ã¯ãããŸãããããããããã®å Žåããã®ã¢ãŒãã§ã¯çè«çãªèŠ³ç¹ããäœãåé¡ã¯ãããŸããã ããããTelegram Desktop ã®äŸã䜿çšãããšãå®éçãªåé¡ã確å®ã«æããããšãã§ããŸãã MTProto (ãã®å Žåã®ã¿ãããŒãžã§ã³ 877) ã®ã¡ãã»ãŒãžãšåãæ¹æ³ã§ãããŒã«ã« ãã£ãã·ã¥ (ããããã¹ãŠã® D783F5D3D8EF1.0C) ãæå·åããŸãã æåã«ã¡ãã»ãŒãžããŒã次ã«ããŒã¿èªäœïŒãããŠã¡ã€ã³ã®å€§ããªããŒã¯å¥ã®å ŽæïŒ auth_key
256ãã€ãïŒãããé€ãïŒ msg_key
䜿ãç©ã«ãªããªãïŒã ãããã£ãŠããã®åé¡ã¯å€§ããªãã¡ã€ã«ã§é¡èã«ãªããŸãã ã€ãŸããããŒã¿ã® XNUMX ã€ã®ã³ã㌠(æå·åããããã®ãšåŸ©å·åããããã®) ãä¿æããå¿
èŠããããŸãã ãããŠãããšãã°ãã¡ã¬ãã€ããã¹ããªãŒãã³ã° ãããªãããå Žåã¯? æå·æã®åŸã« MAC ã䜿çšããåŸæ¥ã®æ¹åŒã䜿çšãããšãæå·æãã¹ããªãŒãã³ã°ã§èªã¿åããããã«è»¢éã§ããŸãã MTProto ã䜿çšãããšã次ã®ããšãè¡ãå¿
èŠããããŸãã æå ã¡ãã»ãŒãžå
šäœãæå·åãŸãã¯åŸ©å·åããŠããããããã¯ãŒã¯ãŸãã¯ãã£ã¹ã¯ã«è»¢éããŸãã ãããã£ãŠãTelegram Desktop ã®ææ°ããŒãžã§ã³ã§ã¯ã user_data
å¥ã®åœ¢åŒããã§ã«äœ¿çšãããŠãããCTR ã¢ãŒãã® AES ã䜿çšãããŠããŸãã
Vasilyã[21.06.18/01/27 20:XNUMX AM] ãããIGE ãšã¯äœããç¥ããŸãããIGE ã¯ãå ã 㯠Kerberos çšã®ãèªèšŒæå·åã¢ãŒãããžã®æåã®è©Šã¿ã§ããã ããã¯å€±æããè©Šã¿ã§ãã£ããã (æŽåæ§ä¿è·ã¯æäŸãããŸãã)ãåé€ããå¿ èŠããããŸããã ããã¯ãæ©èœããèªèšŒæå·åã¢ãŒããæ±ãã XNUMX 幎ã«ãããæ¢æ±ã®å§ãŸãã§ãããæè¿ã§ã¯ OCB ã GCM ãªã©ã®ã¢ãŒãã§é ç¹ã«éããŸããã
ãããŠã«ãŒãåŽããã®åŒæ°ã¯æ¬¡ã®ãšããã§ãã
ãã³ã©ã€ã»ãã¥ããçãããã¬ã°ã©ã ã®ããŒã 㯠XNUMX 人㮠ACM ãã£ã³ããªã³ã§æ§æãããŠããããã®åæ°ã¯æ°åŠã®å士å·ãæã£ãŠããŸãã MTProto ã®çŸåšã®ããŒãžã§ã³ãå±éããã®ã«çŽ XNUMX 幎ããããŸããã
äœãããããã®ã äžäœã¬ãã«ãŸã§ XNUMX 幎
ãããã¯ãTLS ãååŸããããšãã§ããŸã
ããŠãæå·åãšãã®ä»ã®ãã¥ã¢ã³ã¹ãèšå®ãããšããŸãããã æçµçã«ãTL ã·ãªã¢ã«åããããªã¯ãšã¹ããéä¿¡ããå¿çãéã·ãªã¢ã«åã§ããããã«ãªããŸãã? ã§ã¯ãäœãã©ã®ããã«éãã°ããã®ã§ãããã? æ¹æ³ã¯æ¬¡ã®ãšããã§ã
Vasilyã[25.06.18/18/46 XNUMX:XNUMX PM] æ¥ç¶ãåæåãããŠãŒã¶ãŒã®ããã€ã¹ãšã¢ããªã±ãŒã·ã§ã³ã®æ å ±ãä¿åããŸãã
app_idãdevice_modelãsystem_versionãapp_versionãlang_code ãåãå ¥ããŸãã
ãããŠããã€ãã®è³ªå
ãã€ãã®ããã«ããã¥ã¡ã³ãã ãªãŒãã³ãœãŒã¹ãæ°è»œã«å匷ããŠã¿ãŸããã
invokeWithLayer ã§ãã¹ãŠãã»ãŒæ確ã«ãªã£ãå Žåãããã¯äœã§ãããã? ã¯ã©ã€ã¢ã³ãããµãŒããŒã«åãåãããå 容ããã§ã«æã£ãŠãããšä»®å®ãããšãéä¿¡ããããªã¯ãšã¹ããããããšãããããŸããã
Vasilyã[25.06.18/19/13 XNUMX:XNUMX] ã³ãŒãããå€æãããšãæåã®åŒã³åºãã¯ãã®ã¬ããŒãžã§ã©ãããããŠãããã¬ããŒãžèªäœã¯ invokewithlayer ã«ãããŸãã
initConnection ãåå¥ã®åŒã³åºãã«ããããšãã§ãããã©ãããŒã«ããå¿
èŠãããã®ã¯ãªãã§ãã? ã¯ããçµå±ã®ãšãããã¡ã€ã³ããŒã®å Žåã®ããã«äžåºŠã ãã§ã¯ãªããåã»ãã·ã§ã³ã®éå§æã«æ¯åå®è¡ããå¿
èŠããããŸãã ãããïŒ æš©éã®ãªããŠãŒã¶ãŒã¯åŒã³åºãããšãã§ããŸããã ããã§ãããé©çšã§ãã段éã«éããŸãã
æš©éã®ãªããŠãŒã¶ãŒã䜿çšã§ããã®ã¯ãAPI ã¡ãœããã®ããäžéšã®ã¿ã§ãã
- auth.sendCode
- auth.resendCode
- ã¢ã«ãŠã³ã.getãã¹ã¯ãŒã
- auth.checkãã¹ã¯ãŒã
- auth.checkPhone
- èªèšŒãµã€ã³ã¢ãã
- èªèšŒãµã€ã³ã€ã³
- 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 ã®çªå·ã«é¢ãããšã©ãŒã衚瀺ãããŸãã DC çªå·ã«ãã£ãŠæ¥ç¶ããå¿
èŠããã IP ã¢ãã¬ã¹ãèŠã€ããã«ã¯ã次ã®å©ããåããŸãã help.getConfig
ã ãã€ãŠã¯ãšã³ããªãŒã 5 件ãããããŸããã§ãããã2018 幎ã®æåãªã€ãã³ãã®åŸããã®æ°ã¯å€§å¹
ã«å¢å ããŸããã
ããã§ããã®æ®µéã§ã¯å¿åãµãŒããŒã䜿çšããŠããããšãæãåºããŠãã ããã IPã¢ãã¬ã¹ãååŸããã ãã§ãè²»çšãããããããŸãããïŒ ãããä»ã®æäœã MTProto ã®éæå·åéšåã§å®è¡ããŠã¿ãŠã¯ãããã§ãããã? ãåœã®ã¢ãã¬ã¹ã§å¿çããã®ã RKN ã§ã¯ãªãããšãã©ããã£ãŠç¢ºèªã§ããã®ã§ãã?ããšããåè«ãèãããŸãã ããã«ã€ããŠãå®éãå ¬åŒã¯ã©ã€ã¢ã³ãã§ã¯æ¬¡ã®ããšãæãåºããŸãã åã蟌㿠RSA ããŒãã€ãŸãããªãã¯ãã ã§ããŸã ãµã€ã³ ãã®æ å ±ã å®éãããã¯ãã¯ã©ã€ã¢ã³ããä»ã®ãã£ãã«ãéããŠåä¿¡ããããã¯ã®ãã€ãã¹ã«é¢ããæ å ±ã®ããã«ãã§ã«è¡ãããŠããŸã (æ¥ç¶å ãç¥ãå¿ èŠããããããããã MTProto èªäœã§å®è¡ã§ããªãã®ã¯è«ççã§ã)ã
OKã ã¯ã©ã€ã¢ã³ãèªèšŒã®ãã®æ®µéã§ã¯ããŸã èªèšŒãããŠããããã¢ããªã±ãŒã·ã§ã³ãç»é²ãããŠããŸããã çŸæç¹ã§ã¯ãæš©éã®ãªããŠãŒã¶ãŒãå©çšã§ããã¡ãœããã«å¯ŸããŠãµãŒããŒãã©ã®ãããªå¿çããããã確èªãããã ãã§ãã ãããŠããâŠ
ãŽã¡ã·ãªãŒã[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;
ãã®ã¹ããŒã ã§ã¯ãæåãXNUMX çªç®ãæ¥ãŸãã
tdesktop ã¹ããŒãã® XNUMX çªç®ã®å€ã¯æ¬¡ã®ãšããã§ãã
ã¯ãããã以æ¥ããã¡ããããã¥ã¡ã³ãã¯æŽæ°ãããŠããŸãã ããã«ãŸãæå³ããªããªã£ãŠããŸããããããŸãããã åå¿è ã®éçºè ã¯ã©ã®ããã«ç¥ã£ãŠããã¹ãã§ãããã? ã¢ããªã±ãŒã·ã§ã³ãç»é²ããã°éç¥ããŠãããããïŒ ãŽã¡ã·ãªãŒã¯ãããè¡ããŸããããæ®å¿µãªããšã«ã圌ã«ã¯äœãéä¿¡ãããŸããã§ããïŒããã«ã€ããŠã¯åŸåã§èª¬æããŸãïŒã
...ãã§ã«äœããã®åœ¢ã§ API ã«ç§»è¡ããŠããããšã«æ°ã¥ããã§ãããã 次ã®ã¬ãã«ã«é²ãã§ããŠãMTProto ããŒãã§äœããèŠéããŠããŸããã? é©ãã¹ãããšã¯äœããããŸãã:
Vasilyã[28.06.18/02/04 2:XNUMX AM] ããŒãã圌ã㯠eXNUMXe ã®ã¢ã«ãŽãªãºã ã®äžéšã調ã¹ãŠããŸãã
Mtproto ã¯ãäž¡æ¹ã®ãã¡ã€ã³ã®æå·åã¢ã«ãŽãªãºã ãšããŒãããã³å°ãã®ã©ãããŒæ§é ãå®çŸ©ããŸãã
ããããåžžã«ç°ãªãã¹ã¿ã㯠ã¬ãã«ãæ··åšããŠãããããmtproto ãã©ãã§çµäºãã次ã®ã¬ãã«ãå§ãŸã£ãã®ããå¿ ãããæ確ã§ã¯ãããŸããã
ãããã¯ã©ã®ããã«æ··åãããŸãã? ããšãã°ããã㯠PFS çšã®åãäžæããŒã§ã (ã¡ãªã¿ã«ãTelegram Desktop ã¯ãã®æ¹æ³ãç¥ããŸãã)ã APIãªã¯ãšã¹ãã«ããå®è¡ãããŸã auth.bindTempAuthKey
ãã€ãŸããããã¬ãã«ããã ãããåæã«ãäžäœã¬ãã«ã§ã®æå·åã劚ããããŸããããšãã°ãæå·ååŸã¯å床æå·åãè¡ãå¿
èŠããããŸãã initConnection
ãªã©ãããã¯ããã§ã¯ãããŸãã ã¡ããã© éåžžã®ãªã¯ãšã¹ãã ãããšã¯å¥ã«ããã£ãŒã«ã㯠auth_key_id
åã¡ãã»ãŒãžã§ã¯ãå°ãªããšãã¡ãã»ãŒãžããšã«ããŒãå€æŽã§ããŸãããŸãããµãŒããŒã¯ãã€ã§ãäžæããŒããå¿ãããæš©å©ããããŸãããã®å Žåãã©ãããã°ããããããã¥ã¡ã³ãã«ã¯èšèŒãããŠããŸãã...ãŸãããªãã§ããå°æ¥ã®ãœã«ãã®ã»ããã®ããã«ãè€æ°ã®ããŒãæã€ããšã¯ã§ããŸãããã?.
MTProto ããŒãã«ã¯ä»ã«ã泚ç®ã«å€ãããã®ãããã€ããããŸãã
ã¡ãã»ãŒãžã¡ãã»ãŒãžãmsg_idãmsg_seqnoã確èªå¿çãééã£ãæ¹åã® pingãããã³ãã®ä»ã®ç¹ç°æ§
ãªã圌ãã«ã€ããŠç¥ãå¿ èŠãããã®ã§ãããã? ããã㯠XNUMX ã€äžã®ã¬ãã«ã§ããªãŒã¯ããããããAPI ã䜿çšãããšãã«ãããã«ã€ããŠç¥ã£ãŠããå¿ èŠããããŸãã msg_key ã«ã¯èå³ããªããäžäœã¬ãã«ããã¹ãŠã埩å·åãããšããŸãã ãã ãã埩å·åãããããŒã¿å ã«ã¯æ¬¡ã®ãã£ãŒã«ãããããŸã (ããã£ã³ã°ã®å Žæãç¥ãããã®ããŒã¿ã®é·ããå«ãŸããŸãããããã¯éèŠã§ã¯ãããŸãã)ã
- å¡©-int64
- session_id - int64
- message_id - int64
- seq_no-int32
DC å
šäœã«å¯ŸããŠãœã«ã㯠XNUMX ã€ã ãã§ããããšãæãåºããŠãã ããã ãªã圌女ã®ããšãç¥ã£ãŠããã®ã§ããããïŒ ãªã¯ãšã¹ããããããã ãã§ã¯ãªã get_future_salts
ããã¯ãã©ã®ééãæå¹ã§ãããã瀺ããŸãããå¡©ããè
ã£ãŠãããå Žåãã¡ãã»ãŒãž (ãªã¯ãšã¹ã) ãåçŽã«å€±ãããããã§ããããŸãã ãã¡ããããµãŒããŒã¯æ¬¡ã®ã³ãã³ããçºè¡ããŠæ°ãããœã«ããå ±åããŸãã new_session_created
- ãã ããå€ããã®ã§ã¯ãããšãã°ãäœããã®æ¹æ³ã§åéä¿¡ããå¿
èŠããããŸãã ãããŠããã®è³ªåã¯ã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ã«åœ±é¿ããŸãã
ãµãŒããŒã¯ãããŸããŸãªçç±ã§ã»ãã·ã§ã³ãå®å
šã«ãããããããã®ããã«å¿çããããšãã§ããŸãã å®éãã¯ã©ã€ã¢ã³ãåŽããèŠãMTProtoã»ãã·ã§ã³ãšã¯äœã§ãããã? ããã㯠XNUMX ã€ã®æ°åã§ã session_id
О seq_no
ãã®ã»ãã·ã§ã³å
ã®ã¡ãã»ãŒãžã ãã¡ãããåºç€ãšãªã TCP æ¥ç¶ãåæ§ã§ãã ç§ãã¡ã®ã¯ã©ã€ã¢ã³ãããåæããããåæ¥ç¶ããããããªãããå€ãã®ããšãè¡ãæ¹æ³ããŸã ç¥ããªããšããŸãã ãããããã«çºçããå Žå - å€ãã»ãã·ã§ã³ãæ°ãã TCP æ¥ç¶ã§ç¶ç¶ãããŠããå Žåã¯ãæ¥ç¶ãå¢ãããŸãã seq_no
ããã«é ãã æéããããå ŽåããµãŒããŒåŽã§ã¯ãã¥ãŒã§ãããããããµãŒããŒã«ãã£ãŠåé€ãããå¯èœæ§ããããŸãã
ã©ãããã¹ãã seq_no
? ãããããã¯é£ãã質åã§ããã æå³ãããšãããæ£çŽã«ç解ããŠã¿ãŠãã ããã
ã³ã³ãã³ãé¢é£ã®ã¡ãã»ãŒãž
æ瀺çãªç¢ºèªãå¿ èŠãšããã¡ãã»ãŒãžã ãããã«ã¯ããã¹ãŠã®ãŠãŒã¶ãŒãšå€ãã®ãµãŒãã¹ ã¡ãã»ãŒãžãå«ãŸããã³ã³ãããšç¢ºèªå¿çãé€ãå®è³ªçã«ãã¹ãŠãå«ãŸããŸãã
ã¡ãã»ãŒãžã·ãŒã±ã³ã¹çªå· (msg_seqno)
ãã®ã¡ãã»ãŒãžã®åã«éä¿¡è ã«ãã£ãŠäœæããããã³ã³ãã³ãé¢é£ãã¡ãã»ãŒãž (確èªå¿çãå¿ èŠãªã¡ãã»ãŒãžãç¹ã«ã³ã³ããã§ã¯ãªãã¡ãã»ãŒãž) ã®æ°ã® 32 åã«çãã XNUMX ãããã®æ°å€ãçŸåšã®ã¡ãã»ãŒãžãã³ã³ãã³ãé¢é£ã®ã¡ãã»ãŒãžã ã³ã³ããã¯åžžã«ãã®å å®¹å šäœã®åŸã«çæãããŸãã ãããã£ãŠããã®ã·ãŒã±ã³ã¹çªå·ã¯ãããã«å«ãŸããã¡ãã»ãŒãžã®ã·ãŒã±ã³ã¹çªå·ä»¥äžã«ãªããŸãã
1 ãã€å¢å ããããã« 2 å¢å ãããšããã®ã¯ãã©ã®ãããªãµãŒã«ã¹ã§ãããã? .. æ¬æ¥ã®æå³ã¯ãACK ã®äžäœããããæ®ãã¯æ°å€ãã ã£ãã®ã§ã¯ãªãããšæããŸãããçµæã¯ãŸã£ããæ£ãããããŸãããç¹ã«ãéä¿¡ã§ããããšãå€æ ããã€ãã® åãå
容ã®ç¢ºèª seq_no
ïŒ ã©ããã£ãŠïŒ ããšãã°ããµãŒããŒã¯ç§ãã¡ã«äœããéä¿¡ããéä¿¡ããŸãããç§ãã¡èªèº«ã¯æ²é»ããŠãããã¡ãã»ãŒãžã®åä¿¡ã«é¢ãããµãŒãã¹ç¢ºèªã¡ãã»ãŒãžã§å¿çããã ãã§ãã ãã®å Žåãéä¿¡ããã確èªã«ã¯åãéä¿¡çªå·ãä»ããŸãã TCP ã«ç²ŸéããŠããŠãããã¯ã¡ãã£ãšã¯ã¬ã€ãžãŒã«èããããšæã£ããããããŸããããTCP ã§ã¯ããã»ã©ã¯ã€ã«ãã§ã¯ãªãããã§ãã seq_no
å€åããªãããã確èªãè¡ãããŸãã seq_no
åå¯ŸåŽ - ããããç§ã¯æ¥ãã§åæºããŸãã MTProtoã«ç¢ºèªãæ¥ãŠããŸã NOT äžã® seq_no
TCP ãšåæ§ã§ããã msg_id
!
ããã¯äœã§ãã msg_id
ããããã®åéã®äžã§æãéèŠã§ãã? ååã瀺ãããã«ãã¡ãã»ãŒãžã®äžæã® IDã ãã㯠64 ãããã®æ°å€ãšããŠå®çŸ©ããããã®æäžäœãããã«ããµãŒããŒéãµãŒããŒããžãã¯ããããæ®ãã¯å°æ°éšåãå«ã Unix ã¿ã€ã ã¹ã¿ã³ããå·Šã« 32 ãããã·ãããããã®ã§ãã ãããã®ã ã¿ã€ã ã¹ã¿ã³ãèªäœ (æå»ãéããããã¡ãã»ãŒãžã¯ãµãŒããŒã«ãã£ãŠæåŠãããŸã)ã ãã®ããšãããäžè¬ã«ãããã¯ã¯ã©ã€ã¢ã³ãã«ãšã£ãŠã°ããŒãã«ãªèå¥åã§ããããšãããããŸãã ãã®é - èŠããŠãããŠãã ãã session_id
- ç§ãã¡ã¯æ¬¡ã®ããšãä¿èšŒããŸã: ãããªãç¶æ³ã§ããããã»ãã·ã§ã³åãã®ã¡ãã»ãŒãžãå¥ã®ã»ãã·ã§ã³ã«éä¿¡ããããšã¯ã§ããŸãããã ã€ãŸãããã§ã«ååšããŠããããšãããããŸã 3 ã¬ãã« â ã»ãã·ã§ã³ãã»ãã·ã§ã³çªå·ãã¡ãã»ãŒãž IDã ãªããã®ãããªè€éãããã®ãããã®è¬ã¯éåžžã«å€§ããã§ãã
ãã®ããã«ã msg_id
âŠã«å¿
èŠãª
RPC: ãªã¯ãšã¹ããã¬ã¹ãã³ã¹ããšã©ãŒã 確èªäºé
ã
ãæ°ã¥ãããšæããŸãããçãã¯ãããŸããããRPC ãªã¯ãšã¹ããäœæããããšããç¹å¥ãªåãé¢æ°ã¯ã¹ããŒãã®ã©ãã«ããããŸããã çµå±ã®ãšãããã³ã³ãã³ãã«é¢é£ããã¡ãââã»ãŒãžããããŸãã ããã¯ã ä»»æã® ã¡ãã»ãŒãžã¯ãªã¯ãšã¹ãã§ãæ§ããŸããïŒ ãããã¯ããã§ã¯ãªãã çµå±ã ããããã® ããã msg_id
ã ãããŠçãã¯æ¬¡ã®ãšããã§ãã
rpc_result#f35c6d01 req_msg_id:long result:Object = RpcResult;
ããã«ã¯ããããã©ã®ã¡ãã»ãŒãžã«å¯Ÿããå¿çã§ãããã瀺ãããŸãã ãããã£ãŠãAPI ã®ãããã¬ãã«ã§ã¯ããªã¯ãšã¹ãã®çªå·ãèŠããŠããå¿
èŠããããŸããäœæ¥ã¯éåæã§ãããåæã«è€æ°ã®ãªã¯ãšã¹ããååšããå¯èœæ§ãããããšã説æããå¿
èŠã¯ãªããšæããŸããã©ã®é åºã§ãè¿åã§ããŸããïŒ ååãšããŠããããšã¯ãŒã«ãŒãããªããªã©ã®ãšã©ãŒ ã¡ãã»ãŒãžããããã®èåŸã«ããã¢ãŒããã¯ãã£ã远跡ã§ããŸããTCP æ¥ç¶ãç¶æãããµãŒããŒã¯ããã³ããšã³ã ãã©ã³ãµãŒã§ããããªã¯ãšã¹ããããã¯ãšã³ãã«éä¿¡ããããã¯ãšã³ãã«æ²¿ã£ãŠãªã¯ãšã¹ããåéããŸãã message_id
ã ããã§ã¯ãã¹ãŠãæ確ã§è«ççã§ãè¯å¥œã§ããããã«èŠããŸãã
ã¯ã?..èããŠã¿ãã°ïŒ çµå±ã®ãšãããRPC å¿çèªäœã«ããã£ãŒã«ãããããŸãã msg_id
ïŒ ãµãŒããŒã«ãç§ã®çãã«å¿çããŠããŸãã!ããšæ鳎ãå¿
èŠãããã§ãããã? ã¯ãã確èªã«ã€ããŠã¯äœããããŸããã? æŠèŠããŒãž
msgs_ack#62d6b459 msg_ids:Vector long = MsgsAck;
ãããŠããããã®åŽããããããªããã°ãªããŸããã ããããã€ãã§ã¯ãªãïŒ RpcResult ãåä¿¡ããå Žåãããèªäœã確èªå¿çãšããŠæ©èœããŸãã ã€ãŸãããµãŒããŒã¯ãåä¿¡ããŸãããã®ãã㪠MsgsAck ã§ãªã¯ãšã¹ãã«å¿çã§ããŸãã RpcResult ã«ããã«å¿çã§ããŸãã äž¡æ¹ã§ããå¯èœæ§ããããŸãã
ãããŠã¯ããããªãã¯ãŸã çããè¿ããªããã°ãªããŸããïŒ ç¢ºèªã ããããªããšããµãŒããŒã¯ãã®ã¡ãã»ãŒãžãé ä¿¡ãããŠããªããšèŠãªããå床ãŠãŒã¶ãŒã«éä¿¡ããŸãã åæ¥ç¶åŸãã ããããããã§ã¯åœç¶ãã¿ã€ã ã¢ãŠãã®åé¡ãçããŸãã ããå°ãåŸã§èŠãŠã¿ãŸãããã
ãããŸã§ã®éãã¯ãšãªå®è¡æã«çºçããå¯èœæ§ã®ãããšã©ãŒã«ã€ããŠèããŠã¿ãŸãããã
rpc_error#2144ca19 error_code:int error_message:string = RpcError;
ããã誰ããå«ã¶ã§ããããããã«ã¯ãã£ãšäººéçãªåœ¢åŒããããŸã - è¡ããããŸãïŒ ãã£ããããŠãã ããã ãã FLOOD_WAIT_3600
XNUMXæéåŸ
ããªããã°ãªããªãããšãæå³ãã PHONE_MIGRATE_5
ãã®ãã¬ãã£ãã¯ã¹ãæã€é»è©±çªå·ã¯ 5 çªç®ã® DC ã«ç»é²ããå¿
èŠããããŸãã åèšèªã¯ãããŸãããïŒ æååããã®åŒæ°ã¯å¿
èŠãããŸãããæ£èŠè¡šçŸã§ååã§ãã
ç¹°ãè¿ããŸãããããã¯ãµãŒãã¹ ã¡ãã»ãŒãž ããŒãžã«ã¯ãããŸãããããã®ãããžã§ã¯ãã§ã¯ãã§ã«æ
£äŸãšãªã£ãŠããããã«ãæ
å ±ã¯æ¬¡ã®ãšããã§ãã å¥ã®ããã¥ã¡ã³ãããŒãžã§ã ãŸã㯠çæãåŒãèµ·ããã ãŸããèŠãŠãã ãããã¿ã€ãã³ã°/ã¬ã€ã€ãŒã®éå - RpcError
ã«æè³ã§ãã RpcResult
ã ãªãå€ã§ã¯ã ããªã®ã§ããããïŒ ç§ãã¡ã¯äœãèæ
®ããŠããªãã®ã§ãããã?. ãããã£ãŠã次ã®ä¿èšŒã¯ã©ãã«ãããŸãã? RpcError
ã«ã¯æè³ã§ããªããããããªã RpcResult
ãããããçŽæ¥ããŸãã¯å¥ã®åã«ãã¹ããããŠããŸãã? ãããæ¬ ããŠããŸã req_msg_id
ïŒ..
ãµãŒãã¹ ã¡ãã»ãŒãžã«ã€ããŠç¶ããŸãããã ã¯ã©ã€ã¢ã³ãã¯ããµãŒããŒãé·ãéèããŠãããšèããŠã次ã®ãããªçŽ æŽããããªã¯ãšã¹ããè¡ãå¯èœæ§ããããŸãã
rpc_drop_answer#58e4a740 req_msg_id:long = RpcDropAnswer;
ããã«å¯Ÿããèããããçã㯠XNUMX ã€ãããããã確èªã¡ã«ããºã ãšé¢é£ããŠãããããããã©ã®ãããªãã®ã§ããã¹ãã (ãããŠãäžè¬çã«ç¢ºèªãå¿ èŠãšããªãã¿ã€ãã®ãªã¹ãã¯äœã§ããã) ãç解ããããšããŸããèªè ã«ã¯å®¿é¡ãšããŠæ®ãããŸã (泚: Telegram Desktop ãœãŒã¹ã®æ å ±ã¯å®å šã§ã¯ãããŸãã)ã
ã¢ãã£ã¯ã·ã§ã³: ã¡ãã»ãŒãžæçš¿ã¹ããŒã¿ã¹
äžè¬ã«ãTLãMTProtoãããã³ Telegram ã®å€ãã®å Žæã§ã¯ãäžè¬çã«é åºãªå°è±¡ãæ®ããŸããã瀌åæ£ãããæ©è»¢ãªã©ããã§ãã ãœããã¹ãã« ç§ãã¡ã¯ãã®ããšã«ã€ããŠã¯äžéã«æ²é»ãå®ããäŒè©±äžã®ç¥è€»ãªè¡šçŸã¯æ€é²ãããã ãããããã®å Žæã¯ãÐããŒãžã®ã»ãšãã©ã¯
ããã¯ç¡å®³ã«å§ãŸãã確èªãè¡ãããŸãã 次ã«èªãããã®ã¯ã
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 ã䜿ãå§ãã人ã¯èª°ã§ãããä¿®æ£ - åã³ã³ãã€ã« - èµ·åããµã€ã¯ã«ã®äžã§ãç·šéäžã«æ°å€ãšã©ãŒãçºçãããããœã«ããè ã£ããããã®ã¯ããããããšã§ãã ãã ããããã§ãã€ã³ãã XNUMX ã€ãããŸãã
- ãããã£ãŠãå ã®ã¡ãã»ãŒãžã¯å€±ãããŸãã ããã€ãã®ãã¥ãŒãå²ãå¿ èŠããããŸããããã«ã€ããŠã¯åŸã§æ€èšããŸãã
- å¥åŠãªãšã©ãŒçªå·ã¯äœã§ãã? 16ã17ã18ã19ã20ã32ã33ã34ã35ã48ã64...æ®ãã®æ°åã¯ã©ãã«ããã®ããããŒïŒ
ããã¥ã¡ã³ãã«ã¯æ¬¡ã®ããã«èšèŒãããŠããŸãã
ãã®ç®çã¯ãerror_code å€ãã°ã«ãŒãåãããããšã§ã (error_code >> 4)ãããšãã°ãã³ãŒã 0x40 ïœ 0x4f ã¯ã³ã³ãããŒå解ã®ãšã©ãŒã«å¯Ÿå¿ããŸãã
ãããã第äžã«ãä»ã®æ¹åãžã®ã·ããããããŠç¬¬äºã«ãæ®ãã®ã³ãŒããã©ãã«ãããã¯åé¡ã§ã¯ãªãã§ãããã? èè ã®é ã®äžã§ã¯?. ãããããããã¯äºçŽ°ãªããšã§ãã
äŸåçã¯æçš¿ã¹ããŒã¿ã¹ ã¡ãã»ãŒãžãšæçš¿ã³ããŒããå§ãŸããŸãã
- ã¡ãã»ãŒãžã¹ããŒã¿ã¹æ
å ±ã®èŠæ±
ããããã®åœäºè ãéä¿¡ã¡ãã»ãŒãžã®ã¹ããŒã¿ã¹ã«é¢ããæ å ±ããã°ããåãåã£ãŠããªãå Žåãçžææ¹ããæ瀺çã«æ å ±ãèŠæ±ããããšããããŸãã
msgs_state_req#da69fb52 msg_ids:Vector long = MsgsStateReq;
- ã¡ãã»ãŒãžã®ã¹ããŒã¿ã¹ã«é¢ããæ
å ±ã¡ãã»ãŒãž
msgs_state_info#04deb57d req_msg_id:long info:string = MsgsStateInfo;
ããã§ã¯ãinfo
ã¯ãåä¿¡ msg_ids ãªã¹ãããã®åã¡ãã»ãŒãžã®ã¡ãã»ãŒãž ã¹ããŒã¿ã¹ã XNUMX ãã€ãã ãå«ãæååã§ãã- 1 = ã¡ãã»ãŒãžã«ã€ããŠã¯äœãããã£ãŠããŸãã (msg_id ãäœããããããçžæãã¡ãã»ãŒãžãå¿ããŠããå¯èœæ§ããããŸã)
- 2 = ã¡ãã»ãŒãžã¯åä¿¡ãããŸãã (msg_id ã¯ä¿åãããŠããèå¥åã®ç¯å²å ã«ãããŸãããçžæã¯ãã®ãããªã¡ãã»ãŒãžãåä¿¡ããŠââããªãããšã¯ç¢ºãã§ã)
- 3 = ã¡ãã»ãŒãžã¯åä¿¡ãããŠããŸãã (msg_id ãé«ãããŸãããã ããçžæã¯ç¢ºå®ã«ãŸã ã¡ãã»ãŒãžãåä¿¡ããŠââããŸãã)
- 4 = ã¡ãã»ãŒãžãåä¿¡ããŸãã (ãã®å¿çã¯åæã«å信確èªã§ãããããšã«æ³šæããŠãã ãã)
- +8 = ã¡ãã»ãŒãžã¯ãã§ã«ç¢ºèªæžã¿ã§ã
- +16 = 確èªå¿çãå¿ èŠãšããªãã¡ãã»ãŒãž
- +32 = åŠçäžã®ã¡ãã»ãŒãžããŸãã¯åŠçããã§ã«å®äºããã¡ãã»ãŒãžã« RPC ã¯ãšãªãå«ãŸããŠããŸã
- +64 = ãã§ã«çæãããã¡ãã»ãŒãžã«å¯Ÿããã³ã³ãã³ãé¢é£ã®å¿ç
- +128 = çžæã¯ã¡ãã»ãŒãžããã§ã«åä¿¡ãããŠããããšãç¥ã£ãŠããŸã
ãã®å¿çã«ã¯ç¢ºèªå¿çã¯å¿ èŠãããŸããã ããã¯ãããèªäœãé¢é£ãã msgs_state_req ã®ç¢ºèªå¿çã§ãã
çžæãéä¿¡ãããšæãããã¡ãã»ãŒãžãæã£ãŠããªãããšãçªç¶å€æããå Žåã¯ãã¡ãã»ãŒãžãåéä¿¡ããã ãã§æžãããšã«æ³šæããŠãã ããã çžæãã¡ãã»ãŒãžã® XNUMX ã€ã®ã³ããŒãåæã«åä¿¡ããå Žåã§ããéè€ããã¡ãã»ãŒãžã¯ç¡èŠãããŸãã (æéãçµéããããŠãå ã® msg_id ãæå¹ã§ãªããªã£ãå Žåãã¡ãã»ãŒãžã¯ msg_copy ã«ã©ãããããŸã)ã
- ã¡ãã»ãŒãžç¶æ³ã®èªäž»çãªé£çµ¡
ãããã®åœäºè ããçžææ¹ã«ãã£ãŠéä¿¡ãããã¡ãã»ãŒãžã®ã¹ããŒã¿ã¹ãèªçºçã«çžææ¹ã«éç¥ããããšãã§ããŸãã
msgs_all_info#8cc0d131 msg_ids:Vector long info:string = MsgsAllInfo
- XNUMX ã€ã®ã¡ãã»ãŒãžã®ã¹ããŒã¿ã¹ã®æ¡åŒµãããèªäž»çãªéä¿¡
...
msg_detailed_info#276d3ec6 msg_id:long answer_msg_id:long bytes:int status:int = MsgDetailedInfo;
msg_new_detailed_info#809db6df answer_msg_id:long bytes:int status:int = MsgDetailedInfo;
- ã¡ãã»ãŒãžã®åéä¿¡ã®æ瀺çãªãªã¯ãšã¹ã
msg_resend_req#7d861a08 msg_ids:Vector long = MsgResendReq;
çžæã¯èŠæ±ãããã¡ãã»ãŒãžãåéä¿¡ããããšã§ããã«å¿çããŸã [âŠ] - åçã®åéä¿¡ã®æ瀺çãªãªã¯ãšã¹ã
msg_resend_ans_req#8610baeb msg_ids:Vector long = MsgResendReq;
çžæã¯ããã«åéä¿¡ããŠå¿çããŸãã åç ãªã¯ãšã¹ããããã¡ãã»ãŒãžã« [âŠ] - ã¡ãã»ãŒãžã®ã³ããŒ
ç¶æ³ã«ãã£ãŠã¯ãç¡å¹ã«ãªã£ã msg_id ãæã€å€ãã¡ãã»ãŒãžãåéä¿¡ããå¿ èŠãããããšããããŸãã 次ã«ãã³ã㌠ã³ã³ãããŒã«ã©ãããããŸãã
msg_copy#e06046b2 orig_message:Message = MessageCopy;
ã¡ãã»ãŒãžãåä¿¡ãããšãã©ãããŒãååšããªããã®ããã«åŠçãããŸãã ãã ããã¡ãã»ãŒãž orig_message.msg_id ãåä¿¡ãããããšã確å®ã«ããã£ãŠããå Žåãæ°ããã¡ãã»ãŒãžã¯åŠçãããŸãã (åæã«ãã¡ãã»ãŒãžãš orig_message.msg_id ã¯ç¢ºèªãããŸã)ã orig_message.msg_id ã®å€ã¯ãã³ã³ãããŒã® msg_id ãããå°ããå¿ èŠããããŸãã
ãšããäºå®ã«ã€ããŠãé»ã£ãŠãããã msgs_state_info
ããã§ããæªå®æã® TL ã®è³ãçªãåºãŠããŸã (ãã€ãã®ãã¯ãã«ãåæåã®äžäœ XNUMX ããããããã³å€ããããã®ãã©ã°ãå¿
èŠã§ãã)ã ãã€ã³ãã¯å¥ã®ãšããã«ãããŸãã ãªããããå®éã«è¡ãããã®ãç解ããŠãã人ã¯ããŸãã å®éã®ã¯ã©ã€ã¢ã³ã㧠å¿
èŠã§ãã?.. é£ããããšã§ããã人ã察話ã¢ãŒãã§ãããã°ã«åãçµãã§ããå ŽåããµãŒããŒã«äœãã©ã®ããã«è³ªåãããã«ãã£ãŠãããçšåºŠã®å©ç¹ãããããšã¯æ³åã§ããŸãã ãã ãããªã¯ãšã¹ãã¯ããã«èšèŒãããŠããŸã åŸåŸ©.
ãã®ããšãããååŽã¯ã¡ãã»ãŒãžãæå·åããŠéä¿¡ããã ãã§ãªããã¡ãã»ãŒãžãã¡ãã»ãŒãžã«å¯Ÿããåçã«é¢ããããŒã¿ããæªç¥ã®æéä¿åããå¿ èŠããããšããããšã«ãªããŸãã ããã¥ã¡ã³ãã§ã¯ããããã®æ©èœã®ã¿ã€ãã³ã°ãå®éã®é©çšå¯èœæ§ã«ã€ããŠã¯èª¬æãããŠããŸããã ãªãæ¹æ³ã§ã æãé©ãã¹ãããšã¯ãããããå®éã«å ¬åŒã¯ã©ã€ã¢ã³ãã®ã³ãŒãã§äœ¿çšãããŠããããšã§ãã ã©ããã圌ãã¯ãå ¬éãããŠããææžã«ã¯å«ãŸããŠããªãããšãåããããããã§ãã ã³ãŒãããç解ãã çç±ããã¯ã TL ã®å Žåã»ã©åçŽã§ã¯ãããŸããããã㯠(æ¯èŒç) è«ççã«åé¢ãããéšåã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ ã¢ãŒããã¯ãã£ã«é¢é£ä»ããããéšåã§ãã ã¢ããªã±ãŒã·ã§ã³ ã³ãŒããç解ããã«ã¯ããã«å€ãã®æéãå¿ èŠã«ãªããŸãã
Ping ãšã¿ã€ãã³ã°ã è¡åã
ãã¹ãŠã®ããšããããµãŒã㌠ã¢ãŒããã¯ã㣠(ããã¯ãšã³ãéã§ã®ãªã¯ãšã¹ãã®åæ£) ã«é¢ããæšæž¬ãæãåºããšãTCP ã§ã¯é ä¿¡ãä¿èšŒãããŠããã«ãããããã (ããŒã¿ãé ä¿¡ãããããããŒã¿ãé ä¿¡ãããããšã«ã€ããŠéç¥ããã)ãããªãéå±ãªããšãç¶ããŸãããã¬ãŒã¯ããŸãããããŒã¿ã¯åé¡ãçºçããç¬éãŸã§é ä¿¡ãããŸã)ãMTProto èªäœã§ãã®ç¢ºèªãè¡ãããŸã - ä¿èšŒã¯ãããŸããã ãµãŒããŒã¯ã¡ãã»ãŒãžãç°¡åã«å€±ã£ããç Žæ£ãããããå¯èœæ§ããããããã«å¯ŸããŠã¯äœãããããšãã§ãããããŸããŸãªçš®é¡ã®æŸèæãå²ãã ãã§ãã
ãããŠãŸã第äžã«ãã¡ãã»ãŒãžãã¥ãŒã§ãã ãŸããæåãããã¹ãŠãæããã§ãããæªç¢ºèªã®ã¡ãã»ãŒãžã¯ä¿åããŠåéä¿¡ããå¿ èŠããããŸãã ãããŠäœæ以éã§ããïŒ ãããŠéååž«ã¯åœŒãç¥ã£ãŠããŸãã ããããããããã®äžæ¯ãµãŒãã¹ã¡ãã»ãŒãžãäœããã®åœ¢ã§ãã®åé¡ãæŸèæã§è§£æ±ºããŸããããšãã°ãTelegram Desktop ã«ã¯ããããã«å¯Ÿå¿ãããã¥ãŒãçŽ 4 ã€ãããŸã (ãã§ã«è¿°ã¹ãããã«ãããããããã«å€ãã®ãã¥ãŒããããããã³ãŒããšã¢ãŒããã¯ãã£ãããçå£ã«èª¿æ»ããå¿ èŠããããŸããçŸæç¹ã§ã¯ãMTProto ã¹ããŒã ã®ç¹å®ã®æ°ã®åããµã³ãã«ãšããŠäœ¿çšãããŠããªãããããµã³ãã«ãšããŠååŸã§ããªãããšãããã£ãŠããŸã)ã
ãªããããªã£ãïŒ ããããããµãŒã㌠ããã°ã©ããŒã¯ã¯ã©ã¹ã¿ãŒå ã®ä¿¡é Œæ§ãå°ãªããšãããã³ã ãã©ã³ãµãŒã§ã®ãããã¡ãªã³ã°ãããä¿èšŒã§ããããã®åé¡ãã¯ã©ã€ã¢ã³ãã«ç§»ããã®ã§ãããã 絶æçãªæ°æã¡ãããVasily ã¯ãTCP ã®ã¢ã«ãŽãªãºã ã䜿çšããŠããã¥ãŒã XNUMX ã€ã ã䜿çšãããµãŒããŒãžã® RTT ã枬å®ããæªç¢ºèªã®ãªã¯ãšã¹ãã®æ°ã«å¿ã㊠(ã¡ãã»ãŒãžå ã®) ããŠã£ã³ããŠããµã€ãºã調æŽãã代æ¿ãªãã·ã§ã³ãå®è£ ããããšããŸããã ã€ãŸãããµãŒããŒã®è² è·ãèŠç©ããããã®å€§ãŸããªãã¥ãŒãªã¹ãã£ãã¯ãã€ãŸããåæã«åŠçããŠå€±ãããªããªã¯ãšã¹ãã®æ°ã§ãã
ãŸããã€ãŸããããããŸãããïŒ TCP äžã§åäœãããããã³ã«ã®äžã« TCP ãå床å®è£ ããå¿ èŠãããå Žåãããã¯ãããã³ã«ã®èšèšãéåžžã«äžååã§ããããšã瀺ããŠããŸãã
ããããããªãè€æ°ã®ãã¥ãŒãå¿
èŠãªã®ã§ãããããäžè¬ã«ãããã¯é«ã¬ãã« API ã䜿çšãã人ã«ãšã£ãŠäœãæå³ããã®ã§ãããã? ãªã¯ãšã¹ããäœæããã·ãªã¢ã«åããŸãããããã«éä¿¡ã§ããªãããšããããããŸãã ãªãïŒ çãã¯ãããªããã msg_id
ãããã¯äžæçãªãã®ã§ãаç§ã¯ã©ãã«ã§ãããã®äºå®ã¯ã§ããã ãé
ã延æããã»ããããã§ããç§ãã¡ãšã©ãã«ã®éã®æéãäžèŽããªããããçªç¶ãµãŒããŒããããæåŠããŸã (ãã¡ãããçŸåšããæéããããæŸèæãäœãããšã¯ã§ããŸã)ãµãŒããŒã®å¿çããèšç®ããããã«ã¿ããµãŒããŒæéã«è¿œå ããŸããå
¬åŒã®ã¯ã©ã€ã¢ã³ãã¯ãããè¡ããŸããããã®æ¹æ³ã¯ç²éã§ããããããã¡ãªã³ã°ã®ããäžæ£ç¢ºã§ã)ã ãããã£ãŠãã©ã€ãã©ãªããããŒã«ã«é¢æ°åŒã³åºãã䜿çšããŠãªã¯ãšã¹ããè¡ããšãã¡ãã»ãŒãžã¯æ¬¡ã®æ®µéãçµãŸãã
- åããã¥ãŒå ã«ãããæå·åãåŸ æ©ããŠããŸãã
- ä»»åœ
msg_id
ãããŠã¡ãã»ãŒãžã¯å¥ã®ãã¥ãŒã«éãããŸãã - 転éã®å¯èœæ§ããããŸãã ãœã±ããã«éä¿¡ããŸãã - a) ãµãŒããŒã¯ MsgsAck ã«å¿çããŸãã - ã¡ãã»ãŒãžã¯é
ä¿¡ãããã®ã§ããä»ã®ãã¥ãŒãããåé€ããŸãã
b) ãŸãã¯ãã®éã圌ã¯äœãæ°ã«å ¥ããªãã£ãã®ã§ãbadmsg ã«çããŸãã - ãä»ã®ãã¥ãŒãããåéä¿¡ããŸã
c) äœãäžæã§ããå¥ã®ãã¥ãŒããã¡ãã»ãŒãžãåéä¿¡ããå¿ èŠããããŸãããæ£ç¢ºã«ãã€éä¿¡ããããã¯äžæã§ãã - ãµãŒããŒãã€ãã«å¿çããŸãã
RpcResult
- å®éã®å¿ç (ãŸãã¯ãšã©ãŒ) - é ä¿¡ãããã ãã§ãªããåŠçãè¡ãããŸãã
å€åãã³ã³ããã䜿çšãããšåé¡ãéšåçã«è§£æ±ºã§ããå¯èœæ§ããããŸãã ããã¯ãå€æ°ã®ã¡ãã»ãŒãžã XNUMX ã€ã«ããã¯ãããŠããããµãŒããŒããã¹ãŠã®ã¡ãã»ãŒãžã«å¯ŸããŠäžåºŠã« XNUMX ã€ã®ã¡ãã»ãŒãžã§ç¢ºèªå¿çãè¿ããå Žåã§ãã msg_id
ã ããããããäœãåé¡ããã£ãå Žåã圌ã¯ãã®ããã¯ãæåŠãããã¹ãŠãæåŠããã§ãããã
ãããŠãã®æç¹ã§ãæè¡ç以å€ã®èæ ®äºé ãé¢ä¿ããŸãã çµéšãããç§ãã¡ã¯å€ãã®æŸèæãèŠãŠããŸããããããã«ä»åŸãæªãã¢ããã€ã¹ãã¢ãŒããã¯ãã£ã®äŸãããã«å¢ããã§ãããããã®ãããªç¶æ³ã§ãä¿¡é ŒããŠãã®ãããªæ±ºå®ãäžã䟡å€ãããã§ãããã? ãã®è³ªåã¯ä¿®èŸçã§ãïŒãã¡ããããã§ã¯ãããŸããïŒã
ç§ãã¡ã¯äœã«ã€ããŠè©±ããŠããŸããïŒ ãã¡ãã»ãŒãžã«é¢ããäžæ¯ã¡ãã»ãŒãžããšãããããã¯ã«ã€ããŠã¯ããããªãã¯æãã ãç§ãã¡ã®çŽ æŽãããã¢ã€ãã¢ãç解ããŠããªãã£ãïŒãã®ãããªåè«ãããªããæšæž¬ããããšãã§ããŸãã (éåžžã®äººãè¡ãã¹ãããã«ãæåã«ããã¥ã¡ã³ããäœæããçè«çæ ¹æ ãšãã±ãã亀æã®äŸã瀺ããŠãã話ããŸã)ããã®åŸãã¿ã€ãã³ã°/ã¿ã€ã ã¢ãŠãã¯çŽç²ã«å®çšçã§å ·äœçãªåé¡ã§ãããããã§ã¯ãã¹ãŠãé·ãéç¥ãããŠããŸãã ããããããã¥ã¡ã³ãã«ã¯ã¿ã€ã ã¢ãŠãã«ã€ããŠäœãæžãããŠããã®ã§ãããã?
ãµãŒããŒã¯éåžžãRPC å¿çã䜿çšããŠã¯ã©ã€ã¢ã³ãããã®ã¡ãã»ãŒãž (é垞㯠RPC ã¯ãšãª) ã®åä¿¡ã確èªããŸãã å¿çãå±ããŸã§ã«æéããããå ŽåããµãŒããŒã¯æåã«å信確èªãéä¿¡ããå°ãé ã㊠RPC å¿çèªäœãéä¿¡ããããšããããŸãã
ã¯ã©ã€ã¢ã³ãã¯éåžžãã¡ãã»ãŒãžã®éä¿¡ãé ãããªãå Žå (åä¿¡åŸ 60 ïœ 120 ç§åŸã«çæãããå Žå)ã次㮠RPC ã¯ãšãªã«ç¢ºèªå¿çãè¿œå ããããšã§ããµãŒããŒããã®ã¡ãã»ãŒãž (é垞㯠RPC å¿ç) ã®åä¿¡ã確èªããŸãããµãŒããŒããã®ã¡ãã»ãŒãžã®å 容ïŒã ãã ããé·æéã«ããã£ãŠãµãŒããŒã«ã¡ãã»ãŒãžãéä¿¡ããçç±ããªãå ŽåããŸãã¯ãµãŒããŒããã®æªç¢ºèªã®ã¡ãã»ãŒãžãå€æ° (ããšãã° 16 ãè¶ ãã) ããå Žåãã¯ã©ã€ã¢ã³ãã¯ã¹ã¿ã³ãã¢ãã³ã®ç¢ºèªå¿çãéä¿¡ããŸãã
...ç§ã¯ç¿»èš³ããŸãïŒç§ãã¡èªèº«ã¯ãããã©ãã ãããããŠã©ã®ããã«å¿ èŠãªã®ãããããŸããããŸããããããã®ããã«èŠç©ãã£ãŠã¿ãŸãããã
ãããŠpingã«ã€ããŠïŒ
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 ã®ããã«æ©èœããŸãã ããã«ããããåä¿¡ããåŸããµãŒããŒã¯ã以åã®ãã¹ãŠã®ã¿ã€ããŒãèªåçã«ãªã»ããããåãã¿ã€ãã®æ°ããã¡ãã»ãŒãžãåä¿¡ããªãéããæ°ç§åŸã«çŸåšã®æ¥ç¶ãéããã¿ã€ããŒãéå§ããŸãã ããšãã°ãã¯ã©ã€ã¢ã³ãããããã® ping ã 60 ç§ããšã«éä¿¡ããå Žåãdisconnect_lay ã 75 ç§ã«èšå®ããå¯èœæ§ããããŸãã
ããªãã¯æ£æ°ã§ããïŒïŒ 60 ç§ä»¥å ã«åè»ã¯é§ ã«å ¥ããä¹å®¢ãéãããŠä¹ããŸããããã³ãã«å ã§åã³éä¿¡ãé絶ããŸãã ããªãããã¡ãã¡ãèŠããŠããéã« 120 ç§ä»¥å ã«åœŒã¯å¥ã®å Žæã«å°çããæ¥ç¶ã¯ããããåæãããã§ãããã ããã§ãããã©ããã足ãçããŠããã®ãã¯æããã§ãããåŒã³åºãé³ã¯èãããŸããããã©ãã«ããã®ãããããŸããããšããå Žåã«ã¯ãNagle ã¢ã«ãŽãªãºã ãšãã€ã³ã¿ã©ã¯ãã£ããªäœæ¥ãç®çãšãã TCP_NODELAY ãªãã·ã§ã³ããããŸãã ãã ããç³ãèš³ãããŸããããããã©ã«ãå€ã® 200 ãé ãããŠãã ããã ããªç§ã æ¬åœã«äŒŒããããªããšãè¡šçŸããŠããã±ããã®ãã¢ãç¯çŽãããå Žåã¯ãå°ãªããšã 5 ç§éããŸãã¯ããŠãŒã¶ãŒãå ¥åäžã§ã...ããšããã¡ãã»ãŒãžã®ã¿ã€ã ã¢ãŠããçŸåšçããæéãŸã§ãããã延æããŸãã ããããããã ãã§ãã
ãããŠæåŸã«pingã§ãã ã€ãŸããTCP æ¥ç¶ã®æŽ»æ§åºŠããã§ãã¯ããŸãã é¢çœãããšã§ãããçŽ 10 幎åãç§ã¯åŠéšã®å¯®ã®ã¡ãã»ã³ãžã£ãŒã«ã€ããŠæ¹å€çãªæç« ãæžããŸãããããã§ãèè ã¯ã¯ã©ã€ã¢ã³ããããµãŒããŒã« ping ãéä¿¡ããŸãããããã®éã¯è¡ãããŸããã§ããã ã§ãã3幎çãšåœéäºåæã¯å¥ã§ãããïŒ
ãŸããå°ããªæè²ããã°ã©ã ã§ãã TCP æ¥ç¶ã¯ããã±ãã亀æããªãå Žåãæ°é±éåç¶ããå¯èœæ§ããããŸãã ããã¯ç®çã«ãã£ãŠã¯è¯ãããšãæªãããšãå€ãããŸãã ããã§ããããµãŒããŒãžã® SSH æ¥ç¶ãéããŠããå Žåãã³ã³ãã¥ãŒã¿ãŒããç«ã¡äžãã£ãŠé»æºã«ãŒã¿ãŒãåèµ·åããå ã®å Žæã«æ»ããŸããããã®ãµãŒããŒãä»ããã»ãã·ã§ã³ã¯äžæãããŸããã§ãã (äœãå ¥åããããã±ããããããŸããã§ãã)ã䟿å©ã ãµãŒããŒäžã«äœåãã®ã¯ã©ã€ã¢ã³ãããããããããããªãœãŒã¹ãæ¶è²»ã (Postgres ã§ã!)ãã¯ã©ã€ã¢ã³ã ãã¹ããããªãåã«åèµ·åãããŠããå¯èœæ§ããããŸãããããã«ã€ããŠã¯ããããŸããã
ãã£ãã/IM ã·ã¹ãã ã¯ããªã³ã©ã€ã³ ã¹ããŒã¿ã¹ãšããå¥ã®è¿œå ã®çç±ãã 20 çªç®ã®ã±ãŒã¹ã«å±ããŸãã ãŠãŒã¶ãŒããèœã¡ããå Žåã¯ã察話è ã«ããã«ã€ããŠç¥ãããå¿ èŠããããŸãã ããããªããšãJabber ã®äœæè ãç¯ããééã (ãã㊠18.04 幎éä¿®æ£ããŠãã) ãååšããããšã«ãªããŸãããŠãŒã¶ãŒã¯åæãããŸãããããŠãŒã¶ãŒã¯ãªã³ã©ã€ã³ã§ãããšä¿¡ããŠã¡ãã»ãŒãžãæžãç¶ããŸã (ã¡ãã»ãŒãžãããã®æ°åéã§å®å šã«å€±ãããŠããŸãã)ãç ŽããçºèŠãããŸããïŒã ããããTCP ã¿ã€ããŒã®ä»çµã¿ãç解ããŠããªãå€ãã®äººã (æ°åç§ãªã©ã®ã¯ã€ã«ããªå€ãèšå®ããããšã§) ã©ãã§ãããããã TCP_KEEPALIVE ãªãã·ã§ã³ã¯ãããã§ã¯åœ¹ã«ç«ã¡ãŸãããOS ã«ãŒãã«ã ãã§ãªãããŠãŒã¶ãŒã®ãã·ã³ã¯çããŠããŸãããå¿çããããšãã§ããããã¢ããªã±ãŒã·ã§ã³èªäœãæ£åžžã«æ©èœããŸã (ããªãŒãºããªããšæããŸãã? Ubuntu XNUMX äžã® Telegram ãã¹ã¯ããããç¹°ãè¿ããã³ã°ã¢ããããŸãã)ã
ã ããããpingãæã€ã¹ããªã®ã§ã ãµãŒã ã¯ã©ã€ã¢ã³ãããããè¡ããšãæ¥ç¶ãåæããããšãã« ping ãé ä¿¡ããããç®çã¯éæãããŸããã
Telegram ã«ã¯äœã衚瀺ãããã®ã§ãããã? ãã¹ãŠãæ£å察ã§ãïŒ ãŸããã€ãŸãã ãã¡ããã圢åŒçã«ã¯ãåæ¹ãçžäºã« ping ãéä¿¡ã§ããŸãã å®éã«ã¯ãã¯ã©ã€ã¢ã³ãã¯æŸèæã䜿çšããŸã ping_delay_disconnect
ããµãŒããŒäžã§ã¿ã€ããŒãèµ·åããŸãã ããã§ãããç³ãèš³ãããŸããããping ãªãã§ããã«ã©ããããã®æéäœã¿ãããã決ããã®ã¯ã¯ã©ã€ã¢ã³ãã®ä»äºã§ã¯ãããŸããã ãµãŒããŒã¯ããã®è² è·ã«åºã¥ããŠãããæ£ç¢ºã«èªèããŸãã ãããããã¡ããããªãœãŒã¹ãæ®å¿µã«æããªãå Žåã¯ãéªæªãªããããªèªäœãåå ã§ãããæŸèæã¯éããŠããã§ããã...
ã©ã®ããã«èšèšãããã¹ãã ã£ãã®ã§ãããã?
äžèšã®äºå®ã¯ãã³ã³ãã¥ãŒã¿ ãããã¯ãŒã¯ã®ãã©ã³ã¹ããŒã (ããã³äžäœ) ã¬ãã«ã®åéã«ããã Telegram / VKontakte ããŒã ã®èœåãããã»ã©é«ããªããé¢é£äºé ã«ãããè³æ Œãäœãããšãéåžžã«æ確ã«ç€ºããŠãããšæããŸãã
ãªãããã»ã©è€éã«ãªã£ãã®ã§ãããã?Telegram ã¢ãŒããã¯ãã¯ã©ã®ããã«å察ã§ããã®ã§ãããã? TCP æ¥ç¶ãåæãããŠãåç¶ããã»ãã·ã§ã³ãäœæããããšãããšããäºå®ãã€ãŸããä»æäŸã§ããªãã£ãããšã¯ãåŸã§æäŸããŸãã ãããã UDP ãã©ã³ã¹ããŒããäœæããããšããã®ã§ãããããå°é£ã«ééããŠæ念ããŸãã (ãã®ãããããã¥ã¡ã³ãã¯ç©ºã§ããèªæ ¢ã§ãããã®ã¯äœããããŸããã§ãã)ã ãããããããã¯ãŒã¯äžè¬ãšç¹ã« TCP ãã©ã®ããã«æ©èœããã®ããã©ãã«äŸåã§ããã®ããã©ããèªåã§è¡ãå¿ èŠãããã®ãââ (ãããŠãã®æ¹æ³) ã«ã€ããŠã®ç解ãäžè¶³ããŠããããããããæå·åãšçµã¿åãããããšããè©Šã¿ã¯ãäžåäž¡æãã§ããäžç³ã®é³¥ã - ãã®ãããªæ»äœãå€æããŸããã
ã©ãããã¹ãã§ãããïŒ ãšããäºå®ã«åºã¥ããŠã msg_id
ã¯ããªãã¬ã€æ»æãé²ãããã«æå·çã«å¿
èŠãªã¿ã€ã ã¹ã¿ã³ãã§ãããããããã«äžæã®èå¥åé¢æ°ãä»å ããããšã¯ãšã©ãŒã§ãã ãããã£ãŠãçŸåšã®ã¢ãŒããã¯ãã£ã倧å¹
ã«å€æŽããã« (æŽæ°ã¹ã¬ããã圢æããããšããããã¯ãã®äžé£ã®æçš¿ã®å¥ã®éšåã®é«ã¬ãã« API ãããã¯ã§ã)ã次ã®ããšãè¡ãå¿
èŠããããŸãã
- ã¯ã©ã€ã¢ã³ããžã® TCP æ¥ç¶ãä¿æããŠãããµãŒããŒã責任ãè² ããŸãããœã±ããããå·®ãåŒããå Žåã¯ã確èªãåŠçããŸãã¯ãšã©ãŒãè¿ããŠãã ãããæ倱ã¯ãããŸããã ãã®å Žåã確èªã¯ ID ã®ãã¯ãã«ã§ã¯ãªããåã«ãæåŸã«åä¿¡ãã seq_noããã€ãŸã TCP ã®ãããªåãªãæ°å€ (XNUMX ã€ã®æ°å€ - èªåèªèº«ã® seq ãšç¢ºèªæžã¿) ã§ãã ç§ãã¡ã¯ãã€ãã»ãã·ã§ã³äžã§ãããïŒ
- ãªãã¬ã€æ»æãé²ãããã®ã¿ã€ã ã¹ã¿ã³ãã¯ãå¥åã®ãã£ãŒã«ãã«ãªããŸãã ãã§ãã¯ã¯å
¥ã£ãŠããŸãããä»ã«ã¯äœã圱é¿ããŸããã ååã§ããã
uint32
- ãœã«ããå°ãªããšãåæ¥ããšã«å€æŽãããå Žåã16 ããããçŸåšã®æå»ã®æŽæ°éšåã®äžäœãããã«å²ãåœãŠãæ®ããç§ã®å°æ°éšåã«å²ãåœãŠãããšãã§ããŸã (çŸåšã®ããã«)ã - æ ŒçŽããã
msg_id
ããã¯ãšã³ãã§ãªã¯ãšã¹ããåºå¥ãããšãã芳ç¹ããã¯ããŸãã¯ã©ã€ã¢ã³ã IDã次ã«ã»ãã·ã§ã³ ID ããããããããé£çµããŸãã ãããã£ãŠããªã¯ãšã¹ãèå¥åã¯äžã€ã ãã§ååã§ããseq_no
.
ãããæè¯ã®éžæè¢ã§ã¯ãããŸããããå®å šãªã©ã³ãã ãèå¥åãšããŠæ©èœããå¯èœæ§ããããŸããã¡ãªã¿ã«ãããã¯ã¡ãã»ãŒãžéä¿¡æã«é«ã¬ãã« API ã§ãã§ã«è¡ãããŠããŸãã ã¢ãŒããã¯ãã£ãçžå¯Ÿãã絶察ã«å®å šã«å€æŽããæ¹ãè¯ãã§ãããããããã¯ãã®èšäºã§ã¯ãªãå¥ã®éšåã§ã®ãããã¯ã§ãã
APIïŒ
ã¿ãã ïŒ ãã®ãããçã¿ãšæŸèæã«æºã¡ãéãéã£ãŠãæçµçã«ãµãŒããŒã«ãªã¯ãšã¹ããéä¿¡ããããã«å¯Ÿããåçãåãåãããšãã§ããããã«ãµãŒããŒããæŽæ°ãåãåãããšãã§ããããã«ãªããŸããïŒãªã¯ãšã¹ããžã®å¿çãšããŠã§ã¯ãããŸããããããæ確ã§ããã°ãPUSH ãªã©ã®ã¡ãã»ãŒãžèªäœãéä¿¡ãããŸã)ã
泚æããŠãã ããããã®èšäºã«ã¯ Perl ã®äŸã XNUMX ã€ã ããããŸãã (æ§æã«è©³ãããªã人ã®ããã«èª¬æãããšãæåã®åŒæ°ã¯ãªããžã§ã¯ãã®ããŒã¿æ§é ã§ãããXNUMX çªç®ã®åŒæ°ã¯ãã®ã¯ã©ã¹ã§ã)ã
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' )
};
ã¯ããç¹ã«ãã¿ãã¬ã¯é¿ããŠãã ããããŸã èªãã§ããªãå Žåã¯ããã²èªãã§ãã ããã
ããããâŠã©ããªæãã§ããïŒ éåžžã«èŠæ £ãããã®ã§ã...ããããããã¯ãã¯ã©ã¹ããªããžã§ã¯ãã«ã¢ã¿ãããããŠããããšãé€ãã°ãJSON ã®å žåç㪠Web API ã®ããŒã¿æ§é ã§ãã
ããã§ãçµå±ã®ãšãã...äœã§ãããåå¿ïŒ..ãšãŠãèŠåŽããŸãã-ãããŠãç§ãã¡ã¯Webããã°ã©ããŒãããå Žæã§äŒæ©ããããã«ç«ã¡æ¢ãŸããŸãã å§ããã°ããã§ã?.. JSON over HTTPS ã®ã»ããç°¡åã§ã¯ãªãã§ãããã?! ãããŠããã®ä»£ããã«ç§ãã¡ã¯äœãæã«å ¥ããã®ã§ããããïŒ ãããã®åªåã¯äŸ¡å€ããããŸãããïŒ
TL+MTProto ãç§ãã¡ã«äœããããããŠãããã®ãããããŠã©ã®ãããªä»£æ¿æ段ãå¯èœãªã®ããè©äŸ¡ããŠã¿ãŸãããã ããã§ãããHTTP ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã¯é©åããŸããããå°ãªããšã TLS ã®äžã«äœãããã®ã§ã¯ãªãã§ãããã?
ã³ã³ãã¯ããªé£èŒã ãã®ããŒã¿æ§é ãèŠããšãJSON ãšåæ§ã«ããã€ããªã®ããªã¢ã³ããããããšãæãåºãããŸãã MsgPack ãæ¡åŒµæ§ãäžååã§ãããšããŒã¯ããŸãããããã ããããšãã° CBOR ããããŸããã¡ãªã¿ã«ããã®æšæºã¯ã
- 25 + 256 - éè€è¡ãè¡çªå·åç §ã«çœ®ãæããããã®ãããªå®äŸ¡ãªå§çž®æ¹æ³
- 26 - ã¯ã©ã¹åãšã³ã³ã¹ãã©ã¯ã¿ãŒåŒæ°ãæã€ã·ãªã¢ã«åããã Perl ãªããžã§ã¯ã
- 27 - ååãšã³ã³ã¹ãã©ã¯ã¿ãŒåŒæ°ãæã€ã·ãªã¢ã«åãããèšèªã«äŸåããªããªããžã§ã¯ã
ããŠãæååãšãªããžã§ã¯ãã®ãããã³ã°ãæå¹ã«ããŠãTL ãš CBOR ã§åãããŒã¿ãã·ãªã¢ã«åããããšããŸããã çµæã¯ãã¡ã¬ãã€ãããã©ãã㧠CBOR ãæ¯æããããã«å€ããå§ããŸããã
cborlen=1039673 tl_len=1095092
ãã®ããã«ã çµè«: åæ倱æãäžæãªèå¥åã®åé¡ã®åœ±é¿ãåãããåçã®å¹çãåãããå®è³ªçã«åçŽãªåœ¢åŒããããŸãã
é«éæ¥ç¶ã®ç¢ºç«ã ããã¯ãåæ¥ç¶åŸã® RTT ããŒãã§ããããšãæå³ããŸã (ããŒããã§ã« XNUMX åçæãããŠããå Žå)ãæåã® MTProto ã¡ãã»ãŒãžããé©çšãããŸãããããã€ãã®çä¿äºé ããããŸããåããœã«ãç¶æ ã«ãªããã»ãã·ã§ã³ã¯è ããŸããã§ããã TLS ã¯ç§ãã¡ã«äœãæäŸããŠãããã®ã§ãããã? é¢é£åŒçš:
TLS 㧠PFS ã䜿çšããå ŽåãTLS ã»ãã·ã§ã³ ãã±ãã (
RFC 5077 ) ããŒãåããŽã·ãšãŒããããããŒæ å ±ããµãŒããŒã«ä¿åããã«ãæå·åãããã»ãã·ã§ã³ãåéããŸãã æåã®æ¥ç¶ãéããŠããŒãçæãããšãã«ããµãŒããŒã¯æ¥ç¶ã®ç¶æ ãæå·åããããã (ã»ãã·ã§ã³ ãã±ããã®åœ¢åŒã§) ã¯ã©ã€ã¢ã³ãã«éä¿¡ããŸãã ãããã£ãŠãæ¥ç¶ãåéããããšãã¯ã©ã€ã¢ã³ãã¯ãšãããã»ãã·ã§ã³ããŒãå«ãã»ãã·ã§ã³ãã±ããããµãŒããŒã«éãè¿ããŸãã ãã±ããèªäœã¯äžæã㌠(ã»ãã·ã§ã³ ãã±ãã ããŒ) ã§æå·åããããµãŒããŒã«ä¿åãããã¯ã©ã¹ã¿ãŒåãœãªã¥ãŒã·ã§ã³ã§ SSL ãåŠçãããã¹ãŠã®ããã³ããšã³ã ãµãŒããŒã«é åžããå¿ èŠããããŸãã[10]ã ãããã£ãŠãã»ãã·ã§ã³ ãã±ããã®å°å ¥ã¯ãäžæãµãŒã㌠ããŒãé·æéä¿åãããŠããå Žåãªã©ã«äŸµå®³ãããå Žåã« PFS ã«éåããå¯èœæ§ããããŸã (OpenSSLãnginxãApache ã§ã¯ãããã©ã«ãã§ããã°ã©ã ã®å®è¡äžãã£ãšä¿åãããŸãã人æ°ã®ãããµã€ã)ãããŒã¯æ°æéããæ°æ¥é䜿çšããŸã)ã
ãã㧠RTT ã¯ãŒãã§ã¯ãããŸãããå°ãªããšã ClientHello ãš ServerHello ã亀æããå¿ èŠããããŸãããã®åŸãFinished ãšãšãã«ãã¯ã©ã€ã¢ã³ãã¯ãã§ã«ããŒã¿ãéä¿¡ã§ããŸãã ããããããã§èŠããŠããã¹ããªã®ã¯ãæ°ããéãããæ¥ç¶ããããããã Web ã§ã¯ãªããã¡ãã»ã³ãžã£ãŒã§ããããã®æ¥ç¶ã¯å€ãã®å Žå XNUMX ã€ã§ãå€ããå°ãªããåç¶æéãé·ããWeb ããŒãžã«å¯Ÿããæ¯èŒççããªã¯ãšã¹ãã§ãããã¹ãŠãå éšã§å€éåãããŠããŸãã ã€ãŸããéåžžã«ã²ã©ãå°äžéã»ã¯ã·ã§ã³ã«ééããªããã°ãããã¯ãŸã£ãã蚱容ç¯å²ã§ãã
ä»ã«äœãå¿ããŸãããïŒ ã³ã¡ã³ãã«æžããŠãã ããã
ã€ã¥ãïŒ
ãã®äžé£ã®æçš¿ã®ç¬¬ XNUMX éšã§ã¯ãæè¡çãªåé¡ã§ã¯ãªããã¢ãããŒããã€ããªãã®ãŒãã€ã³ã¿ãŒãã§ã€ã¹ããŠãŒã¶ãŒã«å¯Ÿããæ 床ãªã©ãçµç¹çãªåé¡ã«ã€ããŠæ€èšããŸãã ãã ããããã§çŽ¹ä»ãããŠããæè¡æ å ±ã«åºã¥ããŠããŸãã
XNUMX çªç®ã®ããŒãã§ã¯ãæè¡ã³ã³ããŒãã³ã/éçºçµéšã®åæãç¶ããŸãã ç¹ã«æ¬¡ã®ããšãåŠã³ãŸãã
- ããŸããŸãªTLã¿ã€ãã«ãã倧混乱ã®ç¶ç¶
- ãã£ã³ãã«ãšã¹ãŒããŒã°ã«ãŒãã«ã€ããŠã®äžæãªããš
- ãã€ã¢ãã°ãããåç°¿ãããæªã
- ã¡ãã»ãŒãžã®çµ¶å¯Ÿã¢ãã¬ã¹æå®ãšçžå¯Ÿã¢ãã¬ã¹æå®ã«ã€ããŠ
- åçãšç»åã®éãã¯äœã§ãã
- çµµæåãæäœã®ããã¹ãã«ã©ã®ããã«å¹²æžããã
ãããŠä»ã®æŸèæïŒ ä¹ããæåŸ ïŒ
åºæïŒ habr.com