Te whakahee mo te kawa me nga huarahi whakahaere o Telegram. Wāhanga 1, hangarau: wheako ki te tuhi i tetahi kaihoko mai i te wahanga - TL, MT

I tata nei, ko nga panui e pa ana ki te pai o Telegram, he pehea te mohio me te mohio o nga tuakana o Durov ki te hanga i nga punaha whatunga, me etahi atu kua timata te puta ake i runga i te Habré. I te wa ano, he iti noa nga tangata kua ruku ki roto i te taputapu hangarau - i te nuinga o te waa, ka whakamahia e ratou he tino ngawari (me te rereke rereke mai i te MTProto) JSON-based Bot API, a ka whakaae noa. i runga i te whakapono nga mihi katoa me te PR e huri haere ana i te karere. Tata ki te kotahi tau me te hawhe ki muri, ka timata taku hoa mahi i te Eshelon NGO Vasily (he kino, ko tana kaute i runga i a Habré i murua me te tauira) ka timata te tuhi i tana ake kaihoko Telegram mai i te wahanga i Perl, a i muri mai ka uru mai te kaituhi o enei rarangi. He aha a Perl, ka patai tonu etahi? Na te mea kei te noho kee nga kaupapa penei i etahi atu reo. whare pukapuka kua rite, a na reira me haere te kaituhi i nga huarahi katoa Tuhinga ka whai mai. I tua atu, ko te tuhinga tuhi he mea whakawhirinaki, engari manatoko. Ma te hua e whai ana ki te haumarutanga, kaore e taea e koe te whakawhirinaki noa ki te whare pukapuka kua oti te hanga mai i te kaihanga me te whakawhirinaki matapo (heoi, he kaupapa tenei mo te waahanga tuarua). I tenei wa, he pai te mahi a te whare pukapuka i te taumata "toharite" (ka taea e koe te tono tono API).

Heoi, karekau e nui te whakamunatanga, te pangarau ranei i roto i tenei raupapa panui. Engari he maha atu nga korero hangarau me nga tootoo hangahanga (he whai hua ano mo te hunga kaore e tuhi mai i te waa, engari ka whakamahi i te whare pukapuka i roto i tetahi reo). Na, ko te kaupapa matua ko te ngana ki te whakatinana i te kiritaki mai i te wahanga e ai ki nga tuhinga whaimana. Arā, me whakaaro kua katia te waehere puna o nga kaihoko whaimana (ano, i te waahanga tuarua ka korerohia e matou nga korero mo te meka he pono tenei. ka tupu na), engari, pera i nga ra o mua, hei tauira, he paerewa penei i te RFC - ka taea ranei te tuhi i tetahi kaihoko kia rite ki te whakaritenga anake, "kaore e titiro" ki te waehere puna, ahakoa he mana (Te Papamahi Telegram, pūkoro), Telethon kore mana ranei?

Ripanga ihirangi:

Tuhinga... kei te noho tonu, tika? He pono?..

Ko nga kongakonga o nga korero mo tenei tuhinga i timata ki te kohikohi i tera raumati. I tenei wa katoa i runga i te paetukutuku mana https://core.telegram.org Ko nga tuhinga no te Apa 23, i.e. i mau ki tetahi wahi i te tau 2014 (mahara, kaore ano he hongere i tera wa?). Ae ra, i roto i te ariā, me whakaae tenei ki a maatau ki te whakatinana i tetahi kaihoko whai mahi i tera wa i te tau 2014. Engari ahakoa i roto i tenei ahuatanga, ko nga tuhinga, tuatahi, kaore i oti, tuarua, i nga waahi ka whakahē i a ia ano. Neke atu i te marama ki muri, i te marama o Hepetema 2019 i te mate I kitea he nui te whakahou o nga tuhinga i runga i te pae, mo te Paparanga 105 tata tonu nei, me te tuhipoka inaianei me panui ano nga mea katoa. Inaha, e rave rahi mau tumu parau i hi‘opoahia, e rave rahi râ tei ore i taui. No reira, ka panui koe i nga whakahee i raro iho nei mo nga tuhinga, me mahara koe kua kore etahi o enei mea e whai kiko ana, engari he ahua tonu etahi. I muri i nga mea katoa, ko te 5 tau i roto i te ao hou ehara i te wa roa noa, engari tino nui o. Mai i era wa (ina koa kaore koe e whai whakaaro ki nga waahi o nga waahi geochat kua whakakorehia me te whakaora mai i tera wa), kua piki te maha o nga tikanga API i roto i te kaupapa mai i te rau ki te neke atu i te rua rau rima tekau!

Me timata ki hea hei kaituhi taitamariki?

Kaore he aha mena ka tuhi koe mai i te waahi ka whakamahi ranei, hei tauira, nga whare pukapuka kua rite Telethon mo Python ranei Madeline mo PHP, ahakoa, ka hiahia koe i te tuatahi rēhitatia tō tono - tiki tawhā api_id и api_hash (ko te hunga i mahi tahi me te VKontakte API ka mohio tonu) ma te kaimau e tohu te tono. Tenei ki te mahia mo nga take ture, engari ka korero ake mo te take kaore e taea e nga kaituhi whare pukapuka te whakaputa i te waahanga tuarua. Ka makona pea koe ki nga uara whakamatautau, ahakoa he iti rawa - ko te mea ka taea e koe te rehita inaianei kotahi anake taupānga, na kaua e tere ki roto.

Na, mai i te tirohanga hangarau, me aro tatou ki te mea i muri i te rehitatanga me whiwhi whakamohiotanga mai i Telegram mo nga whakahoutanga ki nga tuhinga, kawa, aha atu. Arā, ka taea e tetahi te whakaaro ko te waahi me nga tauranga i whakarerea noa, ka mahi tonu ki te hunga i timata ki te mahi kaihoko, na te mea he ngawari ake. Engari kaore, kaore he mea pera i kitea, kaore he korero i tae mai.

A, ki te tuhi koe mai i te wahanga, katahi ka roa tonu te whakamahi i nga tawhā kua whiwhi. Ahakoa https://core.telegram.org/ me te korero mo ratou i roto i te Timatatanga tuatahi, inaa, me whakatinana koe i te tuatahi MTProto kawa - engari ki te whakapono koe tahora kia rite ki te tauira OSI i te mutunga o te wharangi mo te whakamaarama whanui mo te kawa, katahi ka tino horihori.

Inaa, i mua i muri mai i muri mai i te MTProto, i runga i nga taumata maha i te wa kotahi (i te mea e kii ana te hunga whatunga kee e mahi ana i te kernel OS, he takahi paparanga), he kaupapa nui, mamae me te whakamataku ka pa ki te huarahi ...

Te raupapa-rua: TL (Momo Reo) me tana kaupapa, me nga paparanga, me te maha atu o nga kupu whakamataku.

Ko tenei kaupapa, he pono, ko te matua ki nga raruraru a Telegram. A he maha nga kupu whakamataku mena ka ngana koe ki te ruku ki roto.

Na, anei te hoahoa. Ki te puta mai tenei kupu ki to hinengaro, mea atu, Kaupapa JSON, I tika to whakaaro. He rite tonu te whainga: etahi reo hei whakaahua i te huinga raraunga tuku. I konei ka mutu nga ritenga. Mena mai i te wharangi MTProto kawa, mai i te rakau puna o te kiritaki whai mana, ka ngana tatou ki te whakatuwhera i etahi kaupapa, ka kite tatou i tetahi mea penei:

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;

Ko te tangata ka kite i tenei mo te wa tuatahi ka mohio he waahanga noa iho o nga mea kua tuhia - he pai, he ahua nei nga hanganga (ahakoa kei hea te ingoa, kei te taha maui, kei te taha matau ranei?), he mara kei roto, muri iho ka whai tetahi momo i muri i te kopirua... pea. I konei kei roto i nga taiapa koki tera pea he tauira penei i te C++ (mehemea, engari ehara i te tino). He aha te tikanga o era atu tohu katoa, tohu patai, tohu tangi, pahekeheke, tohu hash (he rerekee te tikanga o nga mea rereke i nga waahi rereke), i etahi wa ka noho, i etahi wa kaore, nga nama hautekauono - me te mea nui, me pehea te tiki mai i tenei auau (e kore e paopaohia e te tūmau) awa paita? Me panui koe i nga tuhinga (ae, he hononga ki te aronuinga kei te putanga JSON tata - engari kaore e tino marama ake).

Whakatuwheratia te wharangi Whakaraupapa Raraunga-rua ka ruku ki te ao makutu o te harore me te pangarau motuhake, he ahua rite ki te matan i te tau tuawha. Te reta, te momo, te uara, te whakakotahi, te whakakotahitanga mahi, te ahua noa, te momo hiato, te momo polymorphic... a koinei anake te wharangi tuatahi! Kei te tatari koe ki muri TL Reo, ahakoa kei roto kee he tauira o te tono me te whakautu iti, kaore he whakautu mo etahi atu keehi, ko te tikanga me haere koe ki roto i te korero ano o te pangarau kua whakamaoritia mai i te reo Rīhia ki te reo Ingarihi i runga i etahi atu e waru kua mau. wharangi!

Ko nga kaipanui e mohio ana ki nga reo mahi me te momo momo aunoa ka kite i te reo whakaahuatanga i roto i tenei reo, ahakoa mai i te tauira, he maamaa ake, ka taea te kii ehara tenei i te mea kino i roto i te kaupapa. Ko nga whakahee mo tenei ko:

  • āe цель he pai te tangi, engari aue, ko ia kaore i tutuki
  • He rereke te maatauranga i nga whare wananga o Ruhia i waenga i nga tohungatanga IT - kaore nga tangata katoa i whai i nga akoranga e rite ana
  • Ka mutu, ka kite tatou, i roto i te mahi kaua e hiahiatia, i te mea he iti noa te waahanga o te TL i whakaahuatia ka whakamahia

Ka rite ki te korero LeoNerd i runga i te hongere #perl i roto i te whatunga FreeNode IRC, nana i ngana ki te whakatinana i tetahi kuaha mai i Telegram ki Matrix (kaore i te tika te whakamaoritanga o te korero mai i te maharatanga):

Te ahua nei i whakaurua tetahi ki te pato i te ariā mo te wa tuatahi, ka hikaka, ka tiimata ki te takaro ki a ia, kaore i te tino aro mena ka hiahiatia i roto i nga mahi.

Tirohia koe, mena ko te hiahia mo nga momo koretake (int, roa, me etahi atu) hei mea timatanga kaore e puta he patai - i te mutunga me whakatinana a-ringa - hei tauira, me ngana ki te whakaputa mai i a raatau. vector. Ko te tikanga, he putiha, ki te kiia e koe nga mea ka puta ki o ratou ingoa tika.

Engari i mua

He whakamaarama poto mo tetahi waahanga o te TL syntax mo te hunga kaore i te panui i nga tuhinga whaimana

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;

Ka timata tonu te whakamaramatanga kaiawhina, i muri i te whiriwhiri (i roto i te mahi - i nga wa katoa) ma te tohu # me kia CRC32 mai i te aho whakaahuatanga o tenei momo. Ka whai ake he whakaahuatanga mo nga mara; mena kei te noho, kei te noho kau te momo. Ka mutu enei katoa ki te tohu rite, ko te ingoa o te momo kei a ia tenei kaihanga - ara, ko te momo-iti. Ko te tangata kei te taha matau o te tohu rite polymorphic - ara, he maha nga momo momo ka rite ki a ia.

Mena ka puta te whakamaramatanga i muri i te raina ---functions---, ka noho tonu te wetereo, engari ka rere ke te tikanga: ko te kaihanga ka waiho hei ingoa mo te mahi RPC, ka noho nga mara hei tawhā (he pai, ara, ka noho rite tonu te hanganga kua hoatu, penei i te korero i raro nei. , koinei te tikanga kua tohua), me te "momo polymorphic" - te momo o te hua kua whakahokia mai. Pono, ka noho tonu te polymorphic - kua tautuhia ki te waahanga ---types---, engari ko tenei kaihanga "kaore e whakaarohia". Te utaina i nga momo mahi e kiia ana e o ratou tohenga, i.e. Mo etahi take, he maha nga mahi me te ingoa kotahi engari he rereke nga waitohu, penei i te C++, kaore i te whakaratohia i roto i te TL.

He aha te "kaihanga" me te "polymorphic" mena ehara i te OOP? Inaa, he maamaa ake mo te tangata ki te whakaaro mo tenei i roto i nga kupu OOP - he momo polymorphic hei karaehe waitara, a ko nga kaihanga ko ona karaehe uri tika, a final i roto i nga kupu o te maha o nga reo. Ko te tikanga, ko konei anake ritenga me nga tikanga hanga tino taumaha i roto i nga reo whakahōtaka OO. I te mea he hanganga raraunga noa tenei, karekau he tikanga (ahakoa ko te whakamaarama o nga mahi me nga tikanga ka kaha ki te hanga i te whakama i roto i te mahunga kei te noho, engari he mea rereke tera) - ka taea e koe te whakaaro he kaihanga hei uara mai ko wai kei te hangaia pato i te panui i te awa paita.

Me pehea e tupu ai? Ko te deserializer, e panui ana i nga wa katoa 4 paita, ka kite i te uara 0xcrc32 - me te mohio ki nga mea ka puta i muri mai field1 me te momo int, i.e. he 4 nga paita tika, kei runga i tenei te mara o runga me te momo PolymorType panui. Ka kite 0x2crc32 me te mohio e rua nga mara i tua atu, tuatahi long, ko te tikanga ka panui tatou 8 paita. Na ka ano he momo matatini, e deserialized i roto i te ara ano. Hei tauira, Type3 ka taea te korero i roto i te ara iahiko i te wa e rua nga kaihanga, katahi ka tutaki raua 0x12abcd34, ka mutu me panui kia 4 atu nga paita int, ranei 0x6789cdef, kare he mea i muri iho. Ko tetahi atu mea - me maka e koe he okotahi. Heoi ano, i muri i tenei ka hoki ano ki te panui 4 paita int mara field_c в constructorTwo a ka mutu ta matou korero PolymorType.

Ka mutu, mena ka mau koe 0xdeadcrc ki constructorThree, katahi ka uaua ake nga mea katoa. Ko ta matou mara tuatahi bit_flags_of_what_really_present me te momo # - inaa, he ingoa ingoa noa tenei mo te momo nat, te tikanga "tau maori". Ko te tikanga, ko te int kaore i hainatia, ko te keehi anake ka puta nga nama kore haina ki nga iahiko tuuturu. Na, i muri mai ko te hanga me te tohu patai, ko te tikanga ko tenei mara - ka noho ki runga waea mena ka whakatauhia te moka e rite ana ki te mara e kiia ana (he rite ki te kaiwhakahaere ternary). Na, me kii tatou kua whakaritea tenei moka, ko te tikanga me panui ano tatou i tetahi mara penei Type, i roto i ta maatau tauira e 2 nga kaihanga. Kei te putua tetahi (ko te kaitautuhi anake), he mara tetahi ids me te momo ids:Vector<long>.

Ka whakaaro pea koe kei roto nga tauira me nga momo kano kei roto i te hunga pai, i te Java ranei. Engari kaore. Tata tonu. Tenei te anake take o te whakamahi taiapa koki i roto i te ara iahiko tūturu, ka whakamahia mo te Vector ANAKE. I roto i te awa paita, ka 4 CRC32 paita enei mo te momo Vector ake, he rite tonu, ka 4 paita - te maha o nga huānga huānga, katahi ko enei huānga ake.

Taapirihia ki tenei meka ka puta te raupapatanga i nga kupu o te 4 paita, he maha nga momo katoa - ka whakaahuahia ano nga momo hanga-i roto. bytes и string me te raupapa-a-ringa o te roa me tenei tirohanga ma te 4 - he pai te ahua o te tangi noa me te whai hua? Ahakoa e kii ana a TL he raupapatanga takirua whai hua, ki te reinga ki a raatau, me te whanui o nga mea katoa, tae noa ki nga uara Boolean me nga aho tohu-kotahi ki te 4 paita, ka nui ake te matotoru o JSON? Titiro, ahakoa nga mara koretake ka taea te pekehia me nga haki moka, he pai nga mea katoa, ka taea hoki mo nga ra kei te heke mai, no reira he aha koe e kore ai e taapiri i nga mara taapiri hou ki te kaihanga i muri mai?

Engari kaore, ki te kore koe e panui i taku korero poto, engari ko nga tuhinga katoa, me te whakaaro mo te whakatinanatanga. Tuatahi, ko te CRC32 o te kaihanga ka tatauhia i runga i te rarangi kua whakaritea o te whakaahuatanga kuputuhi o te kaupapa (tangohia te mokowāmaa, me etahi atu) - na mena ka taapirihia he mara hou, ka huri te rarangi whakaahuatanga momo, no reira ko tana CRC32 me , na reira, te raupapatanga. A he aha te mahi a te kiritaki tawhito mena ka whiwhi ia i tetahi mara me nga haki hou kua whakatakotoria, a kaore ia e mohio he aha te mahi i muri mai?..

Tuarua, kia maumahara tatou CRC32, e whakamahia ana i konei tino rite mahi hash ki te whakatau motuhake he aha te momo kei te (de)whakarangarangatia. I konei ka pa ki te raruraru o te tukinga - kao, ehara i te mea kotahi i roto i te 232, engari he nui ake. Ko wai i mahara i hangaia te CRC32 ki te kite (me te whakatika) i nga hapa i roto i te hongere whakawhitiwhiti korero, a na reira ka whakapai ake i enei taonga ki te kino o etahi atu? Hei tauira, karekau he whakaaro ki te whakatikatika i nga paita: mena ka tatau koe i te CRC32 mai i nga raina e rua, i te tuarua ka huri koe i nga paita 4 tuatahi me nga paita e 4 e whai ake nei - ka rite tonu. I te mea ko ta matou whakaurunga he aho kupu mai i te piapa Latina (me te tohu tohu iti), a ehara enei ingoa i te mea ohorere, ka tino piki ake te ahua o taua whakarereketanga.

Na wai i tirotiro he aha kei reira? tino CRC32? Ko tetahi o nga waehere puna tuatahi (ara i mua i a Waltman) he mahi hash e whakareatia ana ia ahua ki te nama 239, e arohaina ana e enei tangata, ha ha!

Ka mutu, pai, i mohio matou ko nga kaihanga he momo mara Vector<int> и Vector<PolymorType> ka whai CRC32 rereke. Me pehea te mahinga ipurangi? A mai i te tirohanga ariā, ka waiho tenei hei waahanga o te momo? Me kii kua paahitia e tatou te huinga o te tekau mano tau, pai Vector<int> he maamaa nga mea katoa, te roa me etahi atu 40000 paita. He aha mehemea ko tenei Vector<Type2>, he kotahi noa te mara int a ko ia anake kei roto i te momo - me whakahoki ano i te 10000xabcdef0 34 nga wa ka 4 paita int, ka taea ranei e te reo te WHAKAMAHI ma tatou mai i te kaihanga fixedVec a hei utu mo te 80000 paita, whakawhiti ano i te 40000 anake?

Ehara tenei i te patai ariā mangere - whakaarohia ka whiwhi koe i te rarangi o nga kaiwhakamahi roopu, kei ia tangata he id, ingoa tuatahi, ingoa whanau - he mea nui te rereketanga o te nui o nga raraunga i whakawhitia i runga i te hononga pūkoro. Ko te tino whai hua o te raupapatanga Telegram e panuitia ana ki a maatau.

Na…

Vector, kaore i tukuna

Mena ka ngana koe ki te haere i roto i nga wharangi whakaahuatanga o nga whakakotahi me etahi atu, ka kite koe kei te ngana okawa te vector (me te matrix) ki te whakaputa ma roto i nga tuple o etahi rau. Engari i te mutunga ka wareware ratou, ka pekehia te mahi whakamutunga, ka tukuna noa te whakamaramatanga o te vector, kaore ano kia herea ki tetahi momo. He aha te take? I roto i nga reo whakamahere, ina koa ko nga mea mahi, he ahua noa ki te whakaahua i te hanganga - ka mohio te kaitoi me tana arotake mangere ka mahi i nga mea katoa. I te reo raupapa raraunga Ko te mea e hiahiatia ana ko te WHAKAMAHI: he nui noa te korero rārangi, i.e. te hanganga o nga huānga e rua - ko te tuatahi he huānga raraunga, ko te tuarua he rite tonu te hanganga, he waahi kau ranei mo te hiku (cons) i te Lisp). Engari ka tino hiahiatia tenei Tuhinga o mua Ka whakapaua e te huānga he 4 paita taapiri (CRC32 i roto i te keehi i TL) hei whakaahua i tona momo. Ka taea hoki te whakaahua ngawari i tetahi huinga rahi whakaritea, engari mo te huinga o te roa e kore e mohiotia i mua, ka pakaru tatou.

No reira, i te mea kaore a TL e whakaae ki te whakaputa i tetahi vector, me taapiri atu ki te taha. I te mutunga ka kii nga tuhinga:

Ka whakamahia e te Rangatūranga te rite tonu te kaihanga “vector” (const 0x1cb5c415 = crc32(“vector t:Momo # [t] = Vector t”) kaore i te whakawhirinaki ki te uara motuhake o te taurangi o te momo t.

Ko te uara o te tawhā kōwhiringa t e kore e uru ki roto i te raupapatanga mai i te mea i ahu mai i te momo hua (mohiotia tonutia i mua i te whakamaaramatanga).

Titiro ake: vector {t:Type} # [ t ] = Vector t - engari kore ake Ko tenei whakamaramatanga ake kaore e kii me rite te tau tuatahi ki te roa o te vector! A e kore e puta mai i hea. He mea homai tenei me mau tonu ki roto i te hinengaro me te whakatinana ki o ringaringa. I etahi atu waahi, ko nga tuhinga e kii pono ana ko te momo ehara i te mea pono:

Ko te Vector t polymorphic pseudotype he "momo" ko tona uara he raupapa o nga uara o tetahi momo t, ahakoa he pouaka, he koretake ranei.

... engari kaore e aro ki runga. I a koe e ngenge ana ki te haere i roto i te totoro o te pangarau (kei te mohio pea koe mai i te akoranga o te whare wananga), ka whakatau koe ki te tuku me te tino titiro ki te mahi me te mahi i roto i nga mahi, ko te whakaaro kei roto i to mahunga he Tino Tino tenei. Ko te pangarau te kaupapa matua, na Cool People (e rua nga tohunga pangarau - toa ACM), ehara ko te tangata anake. Ko te whainga - ki te whakaatu - kua tutuki.

Ma te ara, mo te tau. Kia maumahara matou ki a koe # he kupu taurite nat, tau māori:

He momo korero (momo-expr) me ngā kīanga tau (nat-expr). Heoi ano, he rite tonu te whakamaramatanga.

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

engari i roto i te wetereo he rite tonu te korero, ara. Me maumahara ano tenei rereketanga me te whakauru ki te whakatinanatanga a-ringa.

Ae, nga momo tauira (vector<int>, vector<User>) he tautohu noa (#1cb5c415), i.e. ki te mohio koe ka panuitia te piiraa hei

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

ka kore koe e tatari mo te vector noa, engari he vector mo nga kaiwhakamahi. He tika ake, kia tika tatari - i roto i te waehere tuuturu, ko nga huānga katoa, mena ehara i te momo karekau, ka whai kaihanga, a ma te pai o te whakatinanatanga ka tika kia tirohia - engari i tukuna tika mai i ia waahanga o tenei vector. taua momo? He aha mena he momo PHP tera, kei roto i tetahi huinga he momo momo rereke o nga huānga rereke?

I tenei wa ka timata koe ki te whakaaro - me penei te TL? Akene pea mo te kaata ka taea te whakamahi i te raupapatanga tangata, te protobuf ano i mua? Koia te ariā, me titiro ki te mahi.

Ko nga whakatinanatanga TL kei roto i te waehere

I whanau a TL i te hohonutanga o VKontakte i mua i nga huihuinga rongonui me te hoko o te hea a Durov me (he pono), ahakoa i mua i te tiimata o te whanaketanga o Telegram. Na i te puna tuwhera waehere puna o te whakatinanatanga tuatahi ka kitea e koe he maha o nga tootoo rorirori. A ko te reo ake i whakatinanahia ki reira nui atu i te mea kei a Telegram inaianei. Hei tauira, karekau rawa e whakamahia nga hashes i roto i te kaupapa (te tikanga he pseudotype hanga-i roto (penei i te vector) me te whanonga rereke). Ranei

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

engari me whakaaro tatou, mo te tino tika, ki te whai, me kii, te whanaketanga o te Rapa Whakaaro.

#define ZHUKOV_BYTES_HACK

#ifdef ZHUKOV_BYTES_HACK

/* dirty hack for Zhukov request */

Ko tenei ataahua ranei:

    static const char *reserved_words_polymorhic[] = {

      "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta", NULL

      };

Ko tenei wahanga e pa ana ki nga tauira penei:

intHash {alpha:Type} vector<coupleInt<alpha>> = IntHash<alpha>;

Koinei te whakamaramatanga o te momo tauira mahere hash hei vector o int - Momo takirua. I roto i te C++ ka penei te ahua:

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

na, alpha - kupu matua! Engari i roto i te C ++ anake ka taea e koe te tuhi T, engari me tuhi koe i te alpha, beta ... Engari kaua e neke ake i te 8 tawhā, kei reira te mutunga o te wawata. Te ahua nei i mua i St. Petersburg etahi korero penei:

-- Надо сделать в TL шаблоны
-- Бл... Ну пусть параметры зовут альфа, бета,... Какие там ещё буквы есть... О, тэта!
-- Грамматика? Ну потом напишем

-- Смотрите, какой я синтаксис придумал для шаблонов и вектора!
-- Ты долбанулся, как мы это парсить будем?
-- Да не ссыте, он там один в схеме, захаркодить -- и ок

Engari ko tenei mo te whakatinanatanga tuatahi o te TL "i te nuinga". Me haere tonu ki te whai whakaaro ki nga whakatinanatanga i roto i nga kaihoko Telegram ake.

Kupu ki a Vasily:

Vasily, [09.10.18 17:07] Ko te mea nui, he wera te kaihe na te mea i hanga e ratou he paihere tangohanga, katahi ka patu i te raka ki runga, ka hipokina te kaihanga waehere ki te tootoo.
Ko te mutunga, tuatahi mai i te tauranga pilot.jpg
Na mai i te waehere dzhekichan.webp

Ae ra, mai i nga tangata e mohio ana ki nga algorithms me te pangarau, ka taea e tatou te tumanako kua panui ratou i a Aho, Ullmann, me te mohio ki nga taputapu kua waiho hei paerewa pono i roto i te ahumahi i roto i nga tekau tau mo te tuhi i o raatau DSL, tika?..

Na waea-cli Ko Vitaly Valtman, ka taea te mohio mai i te putanga o te whakatakotoranga TLO i waho o ona rohe (cli), he mema o te roopu - inaianei kua tohatohahia he whare pukapuka mo te TL parsing motuhake, he aha te ahua o ia TL parser? ..

16.12 04:18 Vasily: Ki taku whakaaro karekau tetahi i mohio ki te lex+yacc
16.12 04:18 Vasily: Kaore e taea e au te whakamarama atu
16.12 04:18 Vasily: pai, i utua ranei mo te maha o nga raina i roto i te VK
16.12 04:19 Vasily: 3k+ rārangi etc.<censored> hei utu mo te parser

He rereke pea? Kia kite tatou me pehea e Koinei te kaihoko KAUPAPA - 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+ nga raina i roto i te Python, e rua nga korero auau + nga keehi motuhake penei i te vector, ko te tikanga, ka whakaatuhia i roto i te kaupapa kia rite ki te TL syntax, engari i whakawhirinaki ratou ki tenei syntax ki te tarai ... Ka puta te patai, he aha te mea he merekara katoa?иHe paparanga ake mena karekau he tangata e tarai i runga i nga tuhinga ano?!

Ma te ara... Kia mahara i korero matou mo te tirotiro CRC32? Na, kei roto i te Waehere Waehere Papamahi Telegram he rarangi o nga tuunga mo era momo e kiia ana ko te CRC32. kaore e taurite me te mea kua tohua ki te hoahoa!

Vasily, [18.12/22 49:XNUMX] i konei ka whakaaro au mehemea e hiahiatia ana taua TL
Mena kei te pirangi au ki te raru ki etahi atu whakatinanatanga, ka tiimata ahau ki te whakauru i nga wehenga raina, ka pakaru te haurua o nga kaiporoporo i runga i nga whakamaramatanga raina-maha.
tdesktop, heoi ano

Kia mahara ki te korero mo te raina kotahi, ka hoki mai ano tatou ki reira.

Kaati, kaore he mana o te waea-cli, he mana te Papamahi Telegram, engari me pehea etahi atu? Ko wai e mohio ana?.. I roto i te waehere kiritaki Android karekau he parser schema i te katoa (e whakaara ake ana i nga patai mo te puna tuwhera, engari mo te waahanga tuarua tenei), engari he maha atu nga waahanga rorirori o te waehere, engari he nui ake i runga i a raatau i roto i te te wahanga i raro iho nei.

He aha etahi atu patai ka whakaarahia e te raupapatanga i roto i nga mahi? Hei tauira, he maha nga mea i mahia e ratou, me nga mara moka me nga mara here:

Vasily: flags.0? true
ko te tikanga kei te noho tonu te mara, ka rite ki te pono mena ka whakatakotoria te haki

Vasily: flags.1? int
ko te tikanga kei te waahi te mara me te whakakorehia

Vasily: Kaihe, kaua e manukanuka ki taau mahi!
Vasily: He korero kei roto i te tuhinga ko te pono he momo kore-roa, engari kaore e taea te kohi i tetahi mea mai i a raatau tuhinga.
Vasily: I roto i nga mahinga tuwhera puna kaore ano tenei, engari he paihere nga tootoo me nga tautoko.

Me pehea a Telethon? Kei te titiro whakamua ki te kaupapa o MTProto, he tauira - kei roto i nga tuhinga kei nga waahanga penei, engari ko te tohu % e whakaahuatia ana ko "e rite ana ki tetahi momo-a-whare" i.e. i roto i nga tauira i raro nei he hapa, he mea kore tuhinga ranei:

Vasily, [22.06.18 18:38] I tetahi waahi:

msg_container#73f1f8dc messages:vector message = MessageContainer;

I roto i tetahi rereke:

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

A ko enei e rua nga rereketanga nui, i roto i te ora tonu ka tae mai etahi momo vector tahanga

Kare ano au i kite i tetahi whakamaramatanga vector tahanga, kaore ano kia kite i tetahi

Ka tuhia te tātaritanga ma te ringaringa ki te waea waea

Kei roto i tana hoahoa te whakamaaramatanga e korerohia ana msg_container

Ano, ka noho tonu te patai mo te %. Kaore i te whakaahuahia.

Vadim Goncharov, [22.06.18 19:22] me te papamahi?

Vasily, [22.06.18 19:23] Engari ko ta raatau TL parser i runga i nga miihini auau kare pea e kai i tenei

// parsed manually

Ko te TL he tangohanga ataahua, kaore he tangata e tino whakatinana

A, ko te % karekau i roto i ta raatau putanga o te kaupapa

Engari i konei ka whakahē te tuhinga ki a ia ano, na idk

I kitea i roto i te wetereo, kua wareware noa ratou ki te whakaahua i nga kupu oro

I kite koe i te tuhinga i runga i te TL, kaore e taea e koe te whakaaro me te kore he hawhe rita

"Ae, me kii," ka kii tetahi atu kaipānui, "kei te whakahe koe i tetahi mea, na, whakaatu mai me pehea te mahi."

Ka whakahoki a Vasily: "Ko te kai korero, he pai ki ahau nga mea penei

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

te ahua pai ake i tera

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

ranei

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

koinei te KATOA 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];

aua. Ko te mea ngawari ko te ngawari."

I te nuinga o te wa, ka uru te poroporo me te kaihanga waehere mo te waahanga o te TL i whakamahia ki roto i te 100 rarangi wetereo me te ~300 rarangi o te kaihanga ( tatau katoa printKo te waehere i hangaia), tae atu ki nga momo momo pai mo te tirotiro i ia akomanga. Ka huri ia momo polymorphic ki te karaehe turanga waitara kau, ka riro mai i nga kaihanga ka whai tikanga mo te rangatū me te whakaheke.

Te kore o nga momo o te momo reo

He mea pai te tuhi kaha, tika? Kao, ehara tenei i te holivar (ahakoa e pai ake ana ahau ki nga reo hihiri), engari he panui i roto i te anga o TL. I runga i tera, ma te reo e tuku nga momo arowhai katoa mo tatou. Ae, pai, ehara pea i a ia ake, engari ko te whakatinanatanga, engari me whakaahua e ia. A he aha te ahua o nga waahi e hiahia ana tatou?

Tuatahi, nga here. I konei ka kite tatou i nga tuhinga mo te tuku i nga konae:

Ka wehea te ihirangi rua o te konae ki etahi wahanga. Me rite te rahi o nga waahanga katoa ( waahanga_rahi ) me tutuki nga tikanga e whai ake nei:

  • part_size % 1024 = 0 (whakawehea e 1KB)
  • 524288 % part_size = 0 (512KB me wehe taurite ma te waahanga_rahi)

Ko te waahanga whakamutunga kaore e tika kia tutuki enei tikanga, mena he iti ake te rahi i te waahanga_rahi.

Me whai nama raupapa ia wahanga, wāhanga_kōnae, me te uara mai i te 0 ki te 2,999.

I muri i te wehewehenga o te konae me whiriwhiri koe i tetahi tikanga mo te penapena i runga i te tūmau. Whakamahi upload.saveBigFilePart i te mea he nui ake te rahi o te konae i te 10 MB me te upload.saveFilePart mo nga konae iti ake.
[…] ka whakahokia pea tetahi o nga hapa whakauru raraunga e whai ake nei:

  • FILE_PARTS_INVALID — He muhu te maha o nga waahanga. Ko te uara kaore i waenga 1..3000

Kei te hoahoa tetahi o enei? Ka taea te whakaatu ma te whakamahi i te TL? Kao. Engari kia mihi mai, ara ko Turbo Pascal o koroua i kaha ki te whakaahua i nga momo kua tohua awhe. Na ka mohio ia ki tetahi atu mea, kua mohiotia inaianei ko enum - he momo e mau ana i te tatau o te tau (iti) o nga uara. I roto i nga reo penei i te C - numeric, kia mahara kua korero noa matou mo nga momo nama. Engari he raupapa ano, he aho... hei tauira, he pai ki te whakaahua he nama waea anake tenei aho, tika?

Kaore tetahi o tenei i roto i te TL. Engari tera ano, hei tauira, kei te JSON Schema. A, ki te tautohetohe tetahi atu mo te wehewehenga o te 512 KB, me tirotiro tonu tenei i roto i te waehere, katahi ka tino mohio te kaihoko Kaore i taea e au tukuna he nama kei waho o te awhe 1..3000 (a kaore pea te hapa e pa ana) ka taea, tika?..

Ma te ara, mo nga hapa me te whakahoki i nga uara. Ahakoa ko te hunga i mahi tahi me TL, ka pouri o ratou kanohi - kaore i tino marama ki a matou ia tangata Ka taea e tetahi mahi i roto i te TL te whakahoki mai i te momo whakahoki kua whakaahuahia, engari he hapa ano. Engari kaore e taea te whakatau i tenei ma te whakamahi i te TL ake. Ko te tikanga, kua marama kee, kaore he take mo tetahi mea i roto i nga mahi (ahakoa ko te tikanga, ka taea te mahi RPC i roto i nga huarahi rereke, ka hoki mai ano tatou ki tenei) - engari me pehea te Maama o nga ariā o te Mathematics of Abstract Types no te ao rangi?.. I tikina e au te toka - kia rite.

Ka mutu, me pehea te panui? Ana, i reira, i te nuinga, ka pirangi au whakaahuatanga kia tika i roto i te kaupapa (i roto i te kaupapa JSON, ano, ko ia ano), engari mena kua raru koe ki a koe, me pehea te taha mahi - he iti rawa te titiro ki nga rereketanga i nga wa whakahou? Tirohia koe i tino tauira:

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

ranei

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

Ka whakawhirinaki ki nga tangata katoa, engari ko GitHub, hei tauira, kaore e pai ki te whakaatu i nga huringa i roto i nga raina roa. Ko te keemu "kitea nga rereketanga 10", a ko te mea ka kite tonu te roro ko nga timatanga me nga mutunga i roto i nga tauira e rua he rite tonu, me panui koe i tetahi waahi i waenganui ... Ki taku whakaaro, ehara tenei i te mea i roto i te ariā anake, engari ma te titiro noa paru me te pohehe.

I te ara, mo te ma o te ariā. He aha tatou e hiahia ai ki nga mara moka? Kaore ranei i te ahua ko ratou kakara kino i te tirohanga o te momo ariā? Ka kitea te whakamaramatanga i nga putanga o mua o te hoahoa. I te tuatahi, ae, he penei te ahua, mo ia tihe ka hangaia he momo hou. Kei te noho tonu enei kaupapa i tenei ahua, hei tauira:

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;

Inaianei whakaarohia, mena kei a koe nga waahanga 5 kei roto i to hanganga, ka hiahia koe kia 32 nga momo mo nga whiringa ka taea. Pahūtanga whakakotahi. No reira, ka pakaru ano te parakore o te ariā TL ki te kaihe rino-rino o te tino uaua o te raupapatanga.

I tua atu, i etahi waahi ka takahia e enei taangata i a raatau ake tohu. Hei tauira, i roto i te MTProto (upoko e whai ake nei) ka taea e Gzip te whakautu te whakautu, he pai nga mea katoa - engari ka takahia nga paparanga me te ara iahiko. Ano ano, ehara i te RpcResult ake i kokoti, engari ko nga mea o roto. Kaati, he aha tenei mahi?.. Me tapahi ahau ki roto i te tootoo kia pai te mahi o te kopeke ki hea.

Ko tetahi atu tauira, i kitea e matou he hapa - kua tukuna InputPeerUser Tuhinga o mua InputUser. He rereke ranei. Engari i whai hua! Arā, kāre te tūmau i aro ki te momo. Me pehea tenei? Ko te whakautu ka tukuna mai ki a maatau ma nga waahanga waehere mai i te 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);

I etahi atu kupu, koinei te waahi ka mahia te raupapa A-TAHI, kaore i hangaia he waehere! He rite tonu te whakatinanatanga o te kaimau? Koinei te take i waihangahia ai te kaupapa? Na konei ka neke atu ki te patai e whai ake nei.

Putanga. Paparanga

He aha te take i kiia ai nga putanga hoahoa he paparanga ka taea anake te whakaaro i runga i te hitori o nga raarangi kua whakaputaina. Ko te ahua, i te tuatahi ka whakaaro nga kaituhi ka taea te mahi ma te whakamahi i te kaupapa kaore i whakarereketia, a ko nga waahi anake e tika ana, mo nga tono motuhake, ka tohu kei te mahia ma te whakamahi i tetahi waahanga rereke. I roto i te tikanga, ahakoa he whakaaro pai - a ko te mea hou ka "whakaranu" ki runga ake o te tawhito. Engari kia kite tatou i pehea te mahi. He pono, kaore i taea e au te titiro mai i te timatanga - he rorirori, engari kaore noa te hoahoa o te paparanga turanga. I timata nga papa ki te 2. Ko nga tuhinga e korero ana mo tetahi ahuatanga TL motuhake:

Mena kei te tautoko tetahi kaihoko i te Apa 2, me whakamahi te kaihanga e whai ake nei:

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

I roto i te mahi, ko te tikanga tenei i mua i nga waea API katoa, he int me te uara 0x289dd1f6 me tapiri i mua i te tau tikanga.

He tangi noa. Eaha râ tei tupu i muri iho? Katahi ka puta

invokeWithLayer3#b7475268 query:!X = X;

Na he aha te mea ka whai ake? Ka whakaaro pea koe,

invokeWithLayer4#dea0d430 query:!X = X;

rorirori? Kao, he moata rawa ki te kata, whakaaro mo tera ia takitahi he tono mai i tetahi atu paparanga me takai ki tetahi momo motuhake - mena he rereke katoa mo koe, me pehea e taea ai e koe te wehewehe? A ko te taapiri i te 4 paita ki mua he tikanga tino pai. Na,

invokeWithLayer5#417a57ae query:!X = X;

Engari e kitea ana i muri i etahi wa ka waiho tenei hei momo bacchanalia. Na ka tae mai te otinga:

Whakahou: Ka timata me te Apa 9, nga tikanga kaiawhina invokeWithLayerN ka taea te whakamahi tahi me initConnection

Hore! Whai muri i nga putanga e 9, i te mutunga ka tae matou ki nga mahi i mahia i roto i nga tikanga Ipurangi i nga tau 80 - ka whakaae ki te putanga kotahi i te timatanga o te hononga!

Na he aha te mea ka whai ake?..

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

Inaianei ka kata tonu koe. I muri noa iho i etahi atu paparanga 9, ka taapirihia he kaihanga ao me te nama putanga, me karanga kotahi anake i te timatanga o te hononga, me te ahua kua ngaro te tikanga o nga paparanga, inaianei he putanga here noa, penei nga wahi katoa. Kua whakaoti rapanga.

tika?..

Vasily, [16.07.18 14:01] Ahakoa i te Paraire ka whakaaro ahau:
Ka tukuna e te teleserver nga kaupapa kaore he tono. Me takai nga tono ki te InvokeWithLayer. Karekau te tūmau e takai i ngā whakahōutanga; karekau he hanganga mō te tākai whakautu me ngā whakahōutanga.

Ko era. e kore e taea e te kiritaki te tautuhi i te paparanga e hiahia ana ia ki nga whakahou

Vadim Goncharov, [16.07.18 14:02] ehara a InvokeWithLayer i te maapono?

Vasily, [16.07.18 14:02] Ko tenei anake te huarahi

Vadim Goncharov, [16.07.18 14:02] ko te tikanga me whakaae ki te paparanga i te timatanga o te huihuinga.

Ma te ara, e whai ana kaore i te whakaratohia te whakahekenga o nga kaihoko

Whakahoutanga, i.e. momo Updates i roto i te kaupapa, koinei te mea ka tukuna e te tūmau ki te kiritaki ehara i te whakautu ki te tono API, engari motuhake ina puta he huihuinga. He kaupapa uaua tenei ka korerohia i tetahi atu panui, engari mo tenei wa he mea nui kia mohio kei te tiakina e te tūmau nga Whakahou ahakoa kei te tuimotu te kaihoko.

Na, ki te kore koe e pai ki te takai Tuhinga o mua mōkihi hei tohu i tana putanga, ka puta tenei ki nga raru e whai ake nei:

  • ka tukuna e te tūmau nga whakahou ki te kiritaki ahakoa i mua i te korero a te kiritaki ko tehea putanga e tautokohia ana e ia
  • me aha ahau i muri i te whakapai ake i te kiritaki?
  • ko wai taurangie kore e huri te whakaaro o te tūmau mo te tau paparanga i te wā o te hātepe?

Ki to whakaaro he whakaaro noa tenei, a, i roto i nga mahi kaore e taea tenei, na te mea kua tuhia tika te tūmau (i te iti rawa, he pai te whakamatautau)? Ha! Ahakoa pehea!

Koia tonu te mea i tutuki i a matou i te marama o Akuhata. I te 14 o Akuhata, i puta nga panui kei te whakahouhia tetahi mea i runga i nga kaitoro Telegram... katahi ka uru ki nga raarangi:

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.

katahi ka maha nga megabytes o nga tohu puranga (he pai, i te wa ano ka whakatikahia te takiuru). I muri i nga mea katoa, ki te kore e mohiotia tetahi mea i roto i to TL, he takirua ma te hainatanga, kei raro ake i te raina KATOA ka haere, ka kore e taea te wetewete. Me aha koe i roto i tenei ahuatanga?

Ana, ko te mea tuatahi ka puta ki te hinengaro o tetahi ko te momotu ka ngana ano. Kaore i awhina. Ka google matou i te CRC32 - i puta mai he taonga mai i te kaupapa 73, ahakoa i mahi matou i te 82. Ka ata tirohia e matou nga raarangi - kei reira nga tohu tohu mai i nga kaupapa rereke e rua!

Tena pea ko te raru kei roto i ta maatau kaihoko kore mana? Kao, ka whakarewahia e matou te Telegram Desktop 1.2.17 (putanga i tukuna i roto i te maha o nga tohatoha Linux), ka tuhia ki te raarangi Whakaaetanga: MTP Id momo ohorere #b5223b0f panui i MTPMessageMedia…

Te whakahee mo te kawa me nga huarahi whakahaere o Telegram. Wāhanga 1, hangarau: wheako ki te tuhi i tetahi kaihoko mai i te wahanga - TL, MT

I whakaatu a Google kua pa ano tetahi raru ki tetahi o nga kaihoko kore mana, engari ko nga nama putanga, na reira, he rereke nga whakaaro ...

Na me aha tatou? I wehea maua ko Vasily: ka ngana ia ki te whakahou i te ara iahiko ki te 91, ka whakatau ahau ki te tatari mo etahi ra ka whakamatau i te 73. I mahi nga tikanga e rua, engari na te mea he maamaa, kaore he maarama mo te maha o nga putanga ki runga, ki raro ranei e hiahia ana koe ki te peke, me pehea ranei te roa e tatari ana koe .

I muri mai ka taea e au te whakaputa i te ahuatanga: ka whakarewahia e matou te kiritaki, ka whakawetohia, ka whakahiato ano i te ara iahiko ki tetahi atu paparanga, ka whakaara ano, ka mau ano te raru, ka hoki ki te waa o mua - aue, kaore he nui o te huringa ara iahiko me te whakaara ano i te kiritaki mo te ka awhina etahi meneti. Ka whiwhi koe i te ranunga o nga hanganga raraunga mai i nga paparanga rereke.

Whakamaramatanga? Ka taea e koe te whakaaro mai i nga tohu rereke rereke, he maha nga tukanga o nga momo rereke i runga i nga miihini rereke. Ko te nuinga o te waa, ko te kaimau e mau ana ki te "buffering" i hoatu ki roto i te rarangi nga mea i hoatu e ona rangatira ki a ia, a ka hoatu e ratou i roto i te kaupapa i whakaritea i te wa o te whakatipuranga. A tae noa ki tenei rarangi "pirau", kaore e taea te mahi.

Tena pea... engari he toka whakamataku tenei?!.. Kao, i mua i te whakaaro mo nga whakaaro porangi, me titiro ki te waehere o nga kiritaki whai mana. I roto i te putanga Android kaore matou e kite i tetahi parser TL, engari ka kitea e matou he konae nui (kare a GitHub e pai ki te pa atu) me te (de)serialization. Anei nga wahanga waehere:

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;

ranei

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

Hmm... ahua mohoao. Engari, pea, he waehere hanga tenei, katahi ka pai?.. Engari ka tino tautoko i nga putanga katoa! He pono, kaore i te maarama he aha nga mea katoa i konatunatuahia, nga korerorero ngaro, me nga momo mea katoa _old7 te ahua e kore e rite ki te hanga miihini ... Heoi, ko te nuinga o nga mea katoa i puhipuhi ahau

TL_message_layer104
TL_message_layer104_2
TL_message_layer104_3

E tama, kare e taea e koe te whakatau he aha kei roto i tetahi paparanga?! Kaati, pai, me kii "e rua" i tukuna he hapa, he pai, ka tupu, engari TORU?.. I te wa tonu, ko taua rake ano? He aha te ahua o te pakiwaitara tenei, pouri?..

I roto i te waehere puna o Telegram Papamahi, i te ara, he rite ano te tupu - mena, he maha nga mahi i roto i te rarangi ki te kaupapa kaore e huri i tana nama paparanga, engari ka whakatika i tetahi mea. I roto i nga ahuatanga kaore he puna korero mana mo te kaupapa, ka taea te tiki mai i hea, engari mo te waehere puna o te kaihoko mana? A, ki te tangohia e koe i reira, kaore koe e tino mohio kei te tino tika te kaupapa kia whakamatau ra ano koe i nga tikanga katoa.

Me pehea e taea ai te whakamatautau? Kei te tumanako ahau ka uru nga kaiwhaiwhai o te waahanga, mahi me etahi atu whakamatautau ki nga korero.

Kaati, me titiro ki tetahi atu waahanga waehere:

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;

Ko tenei korero "i hangaia ma te ringa" e kii ana ko tetahi waahanga noa o tenei konae i tuhia ma te ringa (ka taea e koe te whakaaro i te moemoea o te tiakitanga katoa?), Ko te toenga he mea hanga miihini. Heoi ano, ka ara ake ano tetahi patai - kei te waatea nga puna e kore rawa (a la GPL blobs i roto i te kernel Linux), engari he kaupapa tenei mo te waahanga tuarua.

Engari nui. Me neke atu ki te kawa kei runga ake e whakahaere ana enei raupapatanga katoa.

MTPoto

Na, kia tuwhera whakamārama whānui и te whakamaarama taipitopito o te kawa a ko te mea tuatahi e tutuki ai tatou ko nga kupu. Me te nui o nga mea katoa. I te nuinga o te waa, he ahua rangatira tenei o Telegram - he rereke te karanga ki nga waahi rereke, ki nga mea rereke me te kupu kotahi, he rereke ranei (hei tauira, i roto i te API taumata teitei, mena ka kite koe i tetahi kete whakapiri, ehara i whakaaro koe).

Hei tauira, he rereke te tikanga o te "karere" me te "waatū" i konei mai i te atanga kiritaki o Telegram. Ana, he maamaa nga mea katoa me te panui, ka taea te whakamaori ki nga kupu OOP, ka kiia noa iho ko te kupu "packet" - he iti tenei, he taumata kawe waka, kaore he rite ki nga karere i roto i te atanga, he maha nga karere ratonga. . Engari ko te wahanga... engari ko te tuatahi.

paparanga kawe

Ko te mea tuatahi ko te kawe. Ka korero mai ratou mo nga whiringa 5:

  • TCP
  • Paetukutuku
  • Tukutuku i runga HTTPS
  • HTTP
  • HTTPS

Vasily, [15.06.18 15:04] He kawe UDP ano, engari kaore i tuhia

Me te TCP i roto i nga momo rereke e toru

Ko te mea tuatahi he rite ki te UDP i runga i te TCP, kei ia paatete he nama raupapa me te crc
He aha i tino mamae ai te panui i nga tuhinga kei runga kaata?

Ana, kei reira inaianei TCP kua 4 nga momo rereke:

  • Whakakaui
  • Intermediate
  • Papa takawaenga
  • Full

Ana, pai, Padded intermediate mo MTProxy, no muri mai ka taapirihia tenei na nga huihuinga rongonui. Engari he aha te take e rua ano nga putanga (e toru te katoa) ka taea e koe te whiwhi me te kotahi? He rereke nga mea e wha ki te whakatakoto i te roa me te utu o te MTProto matua, ka korerohia ano:

  • i Abridged he 1, 4 paita ranei, engari kaua ko te 0xef, katahi ko te tinana
  • i roto i te Takawaenga he 4 paita te roa me tetahi mara, me te wa tuatahi me tuku e te kiritaki 0xeeeeeeee hei tohu he Waenga
  • i roto i te Full te tino faatîtîraa, mai i te tirohanga o te whatunga: te roa, te tau raupapa, me te KORE KO TE TAHI ko MTProto te nuinga, tinana, CRC32. Ae, ko enei katoa kei runga ake o TCP. Ma tenei e whakarato ana i te kawe pono i roto i te ahua o te awa paita raupapa; kaore e hiahiatia he raupapa, ina koa nga arowhai. Kaati, inaianei ka whakahē tetahi ki a au kei a TCP he 16-bit taki, no reira ka pakaru nga raraunga. He pai, engari kei a matou he kawa cryptographic me nga hashes he roa ake i te 16 paita, enei hapa katoa - me te maha atu - ka mau i te rereketanga SHA i te taumata teitei ake. KORE he tohu i CRC32 kei runga ake o tenei.

Me whakatairitehia te Abridged, ka taea te kotahi paita o te roa, me te Takawaenga, e tika ana "Mena ka hiahiatia kia 4-paita te tirohanga raraunga," he tino poauau. He aha, e whakaponohia ana he tino koretake nga kaihōtaka Telegram e kore e taea e raatau te panui raraunga mai i te turanga ki roto i te kaapiri kua whakaritea? Me mahi tonu koe i tenei, na te mea ka taea e te panui te whakahoki mai ki a koe te maha o nga paita (a kei reira ano hoki nga kaiwhakarato takawaenga, hei tauira...). Ko tetahi atu taha, he aha te poraka Abridged mena ka nui tonu te kapi i runga ake i te 16 paita - tiakina 3 paita i etahi wa ?

Ka puta te whakaaro he tino pai a Nikolai Durov ki te whakahou i nga wira, tae atu ki nga kawa whatunga, kaore he tino hiahia.

Ko etahi atu huarahi waka, incl. Tukutuku me MTProxy, e kore matou e whakaaro inaianei, tera pea i tetahi atu panui, mena he tono. Mo tenei MTProxy ano, me mahara noa tatou inaianei i muri tata mai i tana tukunga i te tau 2018, ka tere te ako a nga kaiwhakarato ki te aukati i a ia, i whakaarohia mo karohia te aukatikia rite ki rahi mōkihi! A ko te meka ko te tūmau MTProxy i tuhia (na Waltman ano) i roto i te C i tino herea ki nga korero motuhake o Linux, ahakoa kaore tenei i tino hiahiatia (ka whakamanahia e Phil Kulin), a he rite tonu te tūmau i roto i a Go or Node.js. he iti iho i te kotahi rau nga rarangi.

Engari ka whakatauhia e matou te matauranga hangarau o enei tangata i te mutunga o te wahanga, i muri i te whakaaro ki etahi atu take. I tenei wa, me neke atu ki te paparanga OSI 5, he huihuinga - i tuuhia e ratou he waahi MTProto.

Kī, karere, hui, Diffie-Hellman

I whakatakotohia e ratou ki reira kaore i tino tika... Ko te huihuinga ehara i te rite ki te waahi ka kitea i roto i te atanga i raro i nga huihuinga Active. Engari i runga i te raupapa.

Te whakahee mo te kawa me nga huarahi whakahaere o Telegram. Wāhanga 1, hangarau: wheako ki te tuhi i tetahi kaihoko mai i te wahanga - TL, MT

Na ka riro mai he aho paita e mohiotia ana te roa mai i te paparanga kawe. He karere whakamunatia, he kupu maataki ranei - mena kei te waahi tonu tatou i te waahanga whakaaetanga matua kei te mahi tonu. Ko tehea o nga huinga ariā e kiia nei ko "matua" e korero ana tatou? Ma tatou e whakamarama tenei take mo te roopu Telegram ake (E mihi ana ahau mo te whakamaori i aku ake tuhinga mai i te reo Ingarihi me te roro ngenge i te 4 i te ata, he ngawari ake te waiho i etahi kianga penei tonu):

E rua nga hinonga e kiia ana wātū - tetahi i roto i te UI o nga kaihoko whai mana i raro i nga "waahanga o naianei", kei te rite ia huihuinga ki tetahi taputapu / OS katoa.
Ko te tuarua ko Wātū MTProto, kei a ia te nama raupapa o te karere (i roto i te tikanga taumata-iti) kei roto, me tehea ka roa pea i waenga i nga hononga TCP rereke. He maha nga waahi MTProto ka taea te whakauru i te wa kotahi, hei tauira, kia tere ake te tango i nga konae.

I waenganui i enei e rua he ariā whakaaetanga. I roto i te take whakaheke, ka taea e tatou te kii Wātū UI he rite tonu ki whakaaetanga, engari aue, he uaua nga mea katoa. Kia titiro tatou:

  • Ko te kaiwhakamahi i runga i te taputapu hou ka whakaputa tuatahi mana_matua ka herea ki te kaute, hei tauira ma te SMS - na reira whakaaetanga
  • I tupu i roto i te tuatahi Wātū MTProto, kua session_id roto koe.
  • I tenei taahiraa, ko te huinga whakaaetanga и session_id ka taea te karanga tauira - ka puta tenei kupu i roto i nga tuhinga me nga waehere a etahi o nga kaihoko
  • Na, ka taea e te kiritaki te whakatuwhera maha Nga huihuinga MTProto i raro i te taua mana_matua - ki taua DC.
  • Na, i tetahi ra ka hiahia te kaihoko ki te tono mai i te konae tetahi atu DC - a mo tenei DC ka hangaia he mea hou mana_matua !
  • Hei whakamohio i te punaha ehara i te kaiwhakamahi hou e rehita ana, engari he rite tonu whakaaetanga (Wātū UI), ka whakamahia e te kiritaki nga waea API auth.exportAuthorization i te kainga DC auth.importAuthorization i roto i te DC hou.
  • He rite nga mea katoa, he maha pea ka tuwhera Nga huihuinga MTProto (me ia ake session_id) ki tenei DC hou, i raro tona mana_matua.
  • Ka mutu, ka hiahia pea te kaihoko ki te Huna Whakamua. Ia mana_matua ko Tūturu kī - ia DC - ka taea e te kiritaki te waea auth.bindTempAuthKey hei whakamahi poto mana_matua - a ano, kotahi anake temp_auth_key ia DC, noa ki te katoa Nga huihuinga MTProto ki tenei DC.

Kia maarama te tote (me nga tote a meake nei) he kotahi ano mana_matua aua. tiritahi ki waenga i te katoa Nga huihuinga MTProto ki taua DC.

He aha te tikanga "i waenganui i nga hononga TCP rereke"? Na ko te tikanga tenei tetahi mea penei pihikete whakamana i runga i te paetukutuku - ka mau tonu (ka ora) nga hononga TCP maha ki tetahi tūmau, engari i tetahi ra ka kino. Kaore i rite ki te HTTP, i roto i te MTProto nga karere i roto i tetahi huihuinga ka tohua, ka whakaūhia; ki te uru ratou ki te kauhanga, ka pakaru te hononga - i muri i te whakatuu hononga hou, ka tukuna e te kaimau nga mea katoa i tenei huihuinga kaore i tukuna i mua. hononga TCP.

Heoi, ko nga korero i runga ake nei ka whakarapopotohia i muri i nga marama maha o te tirotiro. I tenei wa, kei te whakatinanahia e taatau kaihoko mai i te waa? - kia hoki ki te timatanga.

Na kia whakaputa tatou auth_key i runga i Nga putanga Diffie-Hellman mai i Telegram. Me ngana ki te mohio ki nga tuhinga...

Vasily, [19.06.18 20:05] data_with_hash := SHA1(raraunga) + raraunga + (tetahi paita matapōkere); kia rite te roa ki te 255 paita;
raraunga_whakamuna := RSA(raunga_me_hash, server_public_key); he 255-paita te roa (nui te endian) ka whakaarahia ki te mana e tika ana ki runga i te waahanga e hiahiatia ana, ka penapenahia te hua hei tau 256-paita.

Kei a ratou etahi DH dope

Ehara i te ahua o te DH o te tangata hauora
Karekau e rua nga taviri tūmatanui i te dx

Kaati, i te mutunga ka whakatauhia tenei, engari he toenga - he tohu mahi na te kaihoko ka taea e ia te tatau te nama. Momo whakamarumaru ki nga whakaeke DoS. A kotahi anake te whakamahi i te taviri RSA i te huarahi kotahi, mo te whakamunatanga new_nonce. Engari ahakoa ka angitu tenei mahi ngawari, he aha nga mea ka pa ki a koe?

Vasily, [20.06.18/00/26 XNUMX:XNUMX] Kare ano au kia tae ki te tono tono

I tukuna e ahau tenei tono ki a DH

A, i roto i te tauranga waka e kii ana ka taea e ia te whakautu me te 4 paita o te waehere hapa. Heoi ano

Kaati, i kii mai ia ki ahau -404, he aha?

Na ka kii atu ahau ki a ia: "Hopukia to puru kua whakamunatia me te taviri tūmau me te tohu maihao penei, kei te pirangi au ki te DH," a ka whakahoki mai ki te 404 poauau.

He aha to whakaaro mo tenei whakautu tūmau? Me aha? Karekau he tangata hei patai (engari mo tera i te wahanga tuarua).

I konei ka mahia nga hiahia katoa i runga i te tauranga

Karekau he mahi ke atu, i moemoea noa ahau ki te huri i nga tau ki muri, ki tua atu

E rua nga tau moka 32. I kiki ahau i a raatau penei i era atu

Engari kao, me tapiri enei e rua ki te rarangi tuatahi hei BE

Vadim Goncharov, [20.06.18 15:49] a na tenei 404?

Vasily, [20.06.18 15:49] Ae!

Vadim Goncharov, [20.06.18 15:50] no reira kare au i te marama he aha tana "kaore i kitea"

Vasily, [20.06.18 15:50] tata

Kaore i kitea e au te ahua o te pirau ki roto i nga mea matua%)

Kaore ano matou i whakahaere i nga purongo hapa

Vasily, [20.06.18 20:18] Aue, kei reira ano a MD5. E toru nga tohu rereke

Ko te matimati matua ka tatauhia penei:

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

SHA1 me sha2

Na me whakatakoto auth_key i whiwhi matou i te 2048 paraka te rahi ma te whakamahi i te Diffie-Hellman. He aha to muri mai? I muri mai ka kitea e tatou ko nga moka iti 1024 o tenei matua kaore i te whakamahia i tetahi huarahi ... engari me whakaaro tatou mo tenei inaianei. I tenei taahiraa, he mea ngaro taatau ki te tūmau. Kua whakatauhia he taapiri mo te huihuinga TLS, he tikanga tino utu. Engari kaore tonu te kaimau i te mohio mo wai matou! Kaore ano, mau. whakamanatanga. Ko era. Mena i whakaaro koe mo te "takiuru-kupuhipa", pera i a koe i mua i te ICQ, i te iti rawa ranei "takiuru-matua", penei i te SSH (hei tauira, i runga i etahi gitlab/github). I whiwhi matou i tetahi ingoamuna. He aha mena ka kii mai te kaimau ki a maatau "kei te tukuna enei nama waea e tetahi atu DC"? Ranei "kua rahuitia to nama waea"? Ko te mea pai ka taea e tatou ko te pupuri i te ki i runga i te tumanako ka whai hua, ka kore e pirau i tera wa.

Ma te ara, "i whiwhi" matou me nga rahui. Hei tauira, ka whakawhirinaki tatou ki te tūmau? He aha mehemea he rūpahu? Ka hiahiatia nga arowhai cryptographic:

Vasily, [21.06.18 17:53] Ka tukuna e ratou nga kaihoko pūkoro ki te tirotiro i te nama 2kbit mo te tuatahi%)

Engari kaore i te tino marama, nafeijoa

Vasily, [21.06.18 18:02] Karekau te tuhinga e kii he aha te mahi mena ka puta mai ehara i te mea ngawari.

Kaore i kiia. Kia kite tatou he aha te mahi a te kaihoko Android mana i tenei keehi? A koia tena (ae, he pai te katoa o te konae) - e kii ana ratou, ka waiho e au ki konei:

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

Kao, o te akoranga kei reira tonu etahi He whakamatautau mo te tuatahitanga o tetahi tau, engari ko ahau ake kua kore au e tino mohio ki te pangarau.

Kaati, kua riro mai i a maatau te matua matua. Hei takiuru, i.e. tuku tono, me mahi ano koe i te whakamunatanga, ma te whakamahi i te AES.

Ko te kī karere kua tautuhia ko te 128 moka waenganui o te SHA256 o te tinana karere (tae atu ki te waahi, te ID karere, me etahi atu), tae atu ki nga paita papaa, kua tohua e te 32 paita i tangohia mai i te kii whakamana.

Vasily, [22.06.18 14:08] Toharite, uwha, moka

Kua riro auth_key. Katoa. I tua atu i a raatau ... kaore i te maarama mai i te tuhinga. Kia pai ki te ako i te waehere puna tuwhera.

Kia mahara ko MTProto 2.0 e hiahia ana mai i te 12 ki te 1024 paita o te paita, kei raro tonu i te tikanga ko te roa o te karere ka wehea ki te 16 paita.

Na kia pehea te nui o te padding hei taapiri?

Ae, he 404 ano kei te he

Mena ka ata ako tetahi ki te hoahoa me nga tuhinga o nga tuhinga, ka kite ratou kaore he MAC i reira. A ka whakamahia taua AES ki tetahi aratau IGE kaore i whakamahia ki hea atu. Ko te tikanga, ka tuhi ratou mo tenei i roto i ta raatau FAQ ... I konei, penei, ko te taviri karere ano ko te SHA hash o nga raraunga kua whakakorehia, ka whakamahia hei tirotiro i te pono - a ki te kore e rite, ko nga tuhinga mo etahi take E taunaki ana kia kaua e aro ki a raatau (engari me pehea te haumarutanga, mena ka pakaru tatou?).

Ehara ahau i te kaitoha, tera pea kaore he he o tenei aratau i tenei keehi mai i te tirohanga ariā. Engari ka taea e au te whakaingoatia he raru whaitake, ma te whakamahi i te Papamahi Telegram hei tauira. Ka whakamuna te keteroki rohe (ko enei D877F783D5D3EF8C katoa) kia rite ki nga karere i roto i te MTProto (anake i tenei keehi putanga 1.0), i.e. tuatahi ko te kī karere, katahi ko te raraunga ake (me tetahi waahi ki te taha o te matua nui auth_key 256 paita, karekau msg_key huakore). Na, ka kitea te raru i runga i nga konae nui. Ara, me pupuri e koe kia rua nga kape o nga raraunga - whakamunatia me te wetemuna. A, ki te mea he megabytes, he riipene whakaata ranei, hei tauira? Engari me MTProto me mahi koe i te tuatahi whakamuna, wetemuna ranei te katoa o te karere, katahi ka whakawhiti ki te whatunga, ki te kopae ranei. Na reira, i roto i nga putanga hou o Telegram Papamahi i roto i te keteroki i roto i user_data Ka whakamahia ano tetahi atu whakatakotoranga - me te AES i te aratau CTR.

Vasily, [21.06.18 01:27] Aue, i kitea e au he aha te IGE: Ko IGE te ngana tuatahi ki te "ahua whakamunatanga whakamotuhēhē," i tuatahi mo Kerberos. Ko te nganatanga i rahua (kaore i te tiaki tika), me tango. Koira te timatanga o te rapunga 20 tau mo te aratau whakamunatanga whakamotuhēhē e whai hua ana, katahi ano ka eke ki nga momo ahua penei i te OCB me te GCM.

Na inaianei ko nga tautohetohe mai i te taha o te kaata:

Ko te kapa kei muri i a Telegram, ko Nikolai Durov te kaiarahi, e ono nga toa ACM, ko te haurua o ratou he Ph.D i te pangarau. Tata ki te rua tau te roa ki te whakaputa i te putanga o naianei o MTProto.

He rorirori tera. E rua tau ki te taumata o raro

Ka taea ranei e koe te tango tls

Kaati, me kii kua mahia e matou te whakamunatanga me etahi atu ahuatanga. I te mutunga ka taea te tuku i nga tono kua raupapahia i roto i te TL me te whakakore i nga whakautu? Na me pehea me pehea e tuku ai koe? Anei, me kii, ko te tikanga initConnection, koinei pea?

Vasily, [25.06.18 18:46] Ka timata te hononga me te tiaki i nga korero mo te taputapu me te tono a te kaiwhakamahi.

Ka whakaaehia e ia te taupānga_id, te tauira_kaiwhakarere, te_putanga_naha, te_putanga_huatanga me te lang_code.

Me etahi patai

Tuhinga ka rite tonu. Kia pai ki te ako i te puna tuwhera

Mena he maamaa nga mea katoa me te invokeWithLayer, he aha te he i konei? Te ahua nei, me kii kei a matou - he mea ke te kaihoko ki te patai ki te kaimau - he tono i hiahia matou ki te tuku:

Vasily, [25.06.18 19:13] Ki te whakatau i te waehere, ka takai te karanga tuatahi ki tenei paru, ka takai ano te paru ki te invokewithlayer

He aha i kore ai te initConnection he waea motuhake, engari me takai? Ae, i te mea i puta mai, me mahi i nga wa katoa i te timatanga o ia wahanga, kaua e kotahi, penei me te matua matua. Engari! Kaore e taea te karanga e tetahi kaiwhakamahi kore mana! Inaianei kua tae ki te waahi e tika ana Ko tenei wharangi tuhinga - a ka korero mai ki a maatau...

He waahanga iti noa o nga tikanga API e waatea ana ki nga kaiwhakamahi kore mana:

  • auth.sendCode
  • auth.resendCode
  • account.getPassword
  • auth.checkPassword
  • auth.checkWaea
  • auth.signUp
  • auth.signIn
  • mana.importWhakaaetanga
  • help.getConfig
  • help.getNearestDc
  • help.getAppUpdate
  • help.getCdnConfig
  • langpack.getLangPack
  • langpack.getStrings
  • langpack.getDifference
  • langpack.getLanguages
  • langpack.getLanguage

Ko te tuatahi o ratou, auth.sendCode, a tera ano te tono tuatahi e tukuna ana e matou te api_id me te api_hash, a muri iho ka tae mai he SMS me te waehere. A, ki te he tatou i roto i te DC (tau waea i roto i tenei whenua e mahi i tetahi, hei tauira), ka riro tatou he hapa ki te maha o te DC e hiahiatia ana. Kia mohio koe ko tehea wahitau IP ma te nama DC me hono koe, awhina mai help.getConfig. I tetahi wa e 5 noa nga whakaurunga, engari i muri i nga huihuinga rongonui o te tau 2018, kua tino piki ake te nama.

Inaianei kia maumahara tatou kua tae mai tatou ki tenei wahanga i runga i te tūmau ma te ingoamuna. Ehara i te mea utu nui ki te tiki noa i tetahi wahitau IP? He aha e kore ai e mahi i tenei, me etahi atu mahi, i te waahanga kore whakamuna o MTProto? Ka rongo ahau i te whakahē: "me pehea e mohio ai ehara i te RKN te whakautu me nga korero teka?" Ki tenei ka mahara matou e, i roto i te whānui, kiritaki mana Kua mau nga taviri RSA, i.e. ka taea e koe anake ohauru enei korero. Inaa, kua mahia tenei mo nga korero mo te aukati i te aukati ka whakawhiwhia e nga kaihoko mai i etahi atu hongere (he arorau, kaore e taea te mahi i roto i te MTProto ake; me mohio ano koe ki hea e hono ai).

pai. I tenei wahanga o te whakamanatanga a te kiritaki, kaore ano matou kia whakamanahia, kaore ano kia rehitatia ta matou tono. Kei te hiahia noa matou ki te kite mo tenei wa he aha te whakautu a te tūmau ki nga tikanga e waatea ana ki tetahi kaiwhakamahi kore mana. Na konei…

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;

I roto i te kaupapa, tuatahi ka tuarua

I roto i te aronuinga tdesktop ko te uara tuatoru

Ae, mai i tera wa, ko te tikanga, kua whakahoutia nga tuhinga. Ahakoa ka roa pea ka kore e whai tikanga ano. Me pehea te mohio o te kaiwhakawhanake tauhou? Akene ka rehita koe i to tono, ma ratou koe e whakamohio? I mahia e Vasily tenei, engari, kaore i tukuna e ratou tetahi mea ki a ia (ano, ka korero tatou mo tenei i te waahanga tuarua).

...I kite koe kua nuku kee matou ki te API, ara. ki te taumata e whai ake nei, ka ngaro tetahi mea i roto i te kaupapa MTProto? Kaore he ohorere:

Vasily, [28.06.18 02:04] Mm, kei te ruku ratou i etahi o nga algorithms i runga i te e2e

Ka tautuhia e Mtproto nga algorithm whakamunatanga me nga taviri mo nga rohe e rua, me te ahua o te hanganga takai.

Engari i nga wa katoa ka whakaranuhia nga taumata rereke o te puranga, na reira kaore i te maarama i nga wa katoa i mutu ai te mtproto ka timata te taumata o muri.

Me pehea e uru ai? Ana, koinei te taviri poto mo te PFS, hei tauira (ma te ara, kaore e taea e Telegram Desktop te mahi). Ka mahia e te tono API auth.bindTempAuthKey, i.e. mai i te taumata o runga. Engari i te wa ano ka pokanoa ki te whakamunatanga i te taumata o raro - i muri mai, hei tauira, me mahi ano koe initConnection etc., ehara tenei tika tono noa. Ko te mea motuhake ka taea e koe KOTAHI anake te kii mo ia DC, ahakoa ko te mara auth_key_id i roto i ia karere ka taea e koe te whakarereke i te kii i te iti rawa o nga karere katoa, me te mana o te tūmau ki te "wareware" i te kii rangitahi i nga wa katoa - kaore nga tuhinga e kii he aha te mahi i tenei keehi ... he aha i taea ai 'Kare koe he maha nga ki, penei me te huinga o nga tote a muri ake nei, me te?..

He iti ano etahi mea hei tohu mo te kaupapa MTProto.

Karere karere, msg_id, msg_seqno, whakaū, pings i te huarahi he me etahi atu momo rerekee

He aha koe me mohio mo ratou? Na te mea ka "patu" ki te taumata teitei ake, me mohio koe ki a raatau i te wa e mahi tahi ana me te API. Me whakaaro tatou kaore tatou e aro ki te msg_key; na te taumata o raro i wetemuna nga mea katoa mo tatou. Engari kei roto i nga raraunga wetemuna kei a maatau nga mara e whai ake nei (me te roa o nga raraunga, na reira ka mohio tatou kei hea te papa, engari ehara tera i te mea nui):

  • te tote - int64
  • session_id - int64
  • karere_id — int64
  • seq_no - int32

Me whakamahara koe he tote kotahi mo te DC katoa. He aha i mohio ai mo ia? Ehara i te mea he tono noa get_future_salts, e korero ana ki a koe ko nga waahi ka whai mana, engari na te mea he "piro" to tote, ka ngaro noa te karere (tono). Ko te kaimau, ko te tikanga, ka ripoata te tote hou ma te tuku new_session_created - engari me te mea tawhito me tuku ano e koe, hei tauira. A ka pa tenei take ki te hoahoanga tono.

Ka whakaaetia te tūmau ki te taka katoa i ngā wātū me te whakautu pēnei mō ngā take maha. Inaa, he aha te huihuinga MTProto mai i te taha kiritaki? E rua enei tau session_id и seq_no karere i roto i tenei wahanga. Ana, me te hononga TCP o raro, o te akoranga. Me kii karekau tonu to taatau kiritaki e mohio ki te mahi i nga mahi maha, ka motuhia e ia ka hono ano. Mena ka tere tenei - ka haere tonu te waahi tawhito i roto i te hononga TCP hou, piki ake seq_no atu. Mena ka roa te waa, ka taea e te kaimau te whakakore, na te mea kei tona taha he rarangi ano, pera i ta matou i mohio ai.

Me aha seq_no? Aue, he patai uaua tena. Ngana ki te mohio pono ki te tikanga:

Karere e pa ana ki te ihirangi

He karere e hiahia ana kia tino mihi. Kei roto i enei ko te katoa o te kaiwhakamahi me te maha o nga karere ratonga, tata ki te katoa haunga nga ipu me nga mihi.

Tau Raupapa Karere (msg_seqno)

He nama moka-32 e rite ana ki te rua o te maha o nga karere "e pa ana ki te ihirangi" (ko nga mea e tika ana kia mihi, inaa ko nga mea ehara i te ipu) i hangaia e te kaituku i mua i tenei karere, ka piki ake ki te kotahi mena ko te karere o naianei he karere e pa ana ki te ihirangi. Ka hangaia he ipu i nga wa katoa i muri i ona mea katoa; no reira, he nui ake, he rite ranei tona tau raupapa ki nga tau raupapa o nga karere kei roto.

He aha te ahua o te circus tenei me te pikinga ma te 1, katahi ano ka 2?.. Ki taku whakaaro i te tuatahi ko te tikanga "te iti rawa mo te ACK, ko te toenga he nama", engari kaore i te rite te hua - ina koa, ka puta mai, ka taea te tuku maha he rite tonu nga whakapumautanga seq_no! Me pehea? Ae, hei tauira, ka tukuna mai e te kaimau tetahi mea ki a matou, ka tukuna mai, ka noho puku tonu matou, ka whakautu noa me nga karere ratonga e whakau ana i te whiwhinga o ana karere. I tenei keehi, ko o maatau whakapumautanga ka puta he rite tonu te nama puta. Mena kei te mohio koe ki te TCP me te whakaaro he ahua mohoao tenei, engari kaore i te tino mohoao, na te mea kei TCP seq_no e kore e huri, engari ka haere te whakau ki seq_no i tera taha, ka hohoro ahau ki te whakapouri i a koe. Kei te MTProto nga whakapumautanga NOT i runga i seq_no, pera i roto i te TCP, engari na msg_id !

He aha tenei msg_id, te mea tino nui o enei mara? He kaitautuhi karere ahurei, e ai ki te ingoa. Kua tautuhia he nama 64-bit, ko nga moka iti rawa atu he makutu "server-not-server", ko te toenga he tohu wa Unix, tae atu ki te wahanga hautanga, kua nekehia te 32 paraka ki te taha maui. Ko era. waitohuwā mo ia (me nga karere he rereke nga waa ka paopaohia e te tūmau). Mai i tenei ka puta ko te nuinga he tohu tenei mo te ao mo te kiritaki. I runga i tera - kia maumahara tatou session_id - ka whakamanahia matou: I raro i nga ahuatanga kaore e taea te tuku korero mo te huihuinga kotahi ki tetahi huihuinga rereke. Arā, kua puta kē kei reira kē e toru taumata - wātū, tau wātū, karere id. He aha te nui o te uaua, he tino nui tenei mea ngaro.

Na msg_id e hiahiatia ana mo...

RPC: tono, whakautu, hapa. Whakapumautanga.

I kite pea koe, karekau he momo "hanga tono RPC" motuhake mo nga waahi katoa o te hoahoa, ahakoa he whakautu. I muri i nga mea katoa, kei a matou nga korero e pa ana ki te ihirangi! Arā, o tetahi he tono pea te karere! Kaore ranei kia noho. Ka mutu, Tuhinga o mua ko msg_id. Engari tera ano nga whakautu:

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

I konei ka tohuhia ko tehea karere tenei hei whakautu. Na reira, i te taumata o runga o te API, me mahara koe he aha te maha o to tono - Ki taku whakaaro kaore he take ki te whakamarama he koretake te mahi, a he maha nga tono kei te haere tonu i te wa kotahi, ko nga whakautu ka taea te whakahoki mai i nga tikanga katoa? Ko te tikanga, mai i tenei me nga karere hapa penei i te kore kaimahi, ka taea te whai i te hoahoanga o muri o tenei: ko te tūmau e pupuri ana i te hononga TCP ki a koe he taurite o mua, ka tuku tono ki nga pito o muri ka kohia ma te message_id. Te ahua nei he marama, he arorau, he pai nga mea katoa i konei.

Ae?.. A ki te whakaaro koe? I muri i nga mea katoa, ko te whakautu RPC ano he mara msg_id! Me tangi tatou ki te kaimau "kare koe e whakahoki mai i taku whakautu!"? Ae, he aha i reira mo nga whakapumautanga? Mo te wharangi karere mo nga karere ka korero mai he aha

msgs_ack#62d6b459 msg_ids:Vector long = MsgsAck;

a me mahi ma ia taha. Engari ehara i nga wa katoa! Mena kua whiwhi koe i tetahi RpcResult, ka noho tonu hei whakau. Arā, ka taea e te tūmau te whakautu ki to tono me MsgsAck - penei, "I whiwhi ahau." Ka taea e RpcResult te whakautu wawe. Ka rua pea.

Ae, me whakautu tonu e koe te whakautu! Whakapumautanga. Ki te kore, ka whakaarohia e te tūmau kaore e taea te tuku ka whakahokia mai ano ki a koe. Ahakoa i muri i te hono ano. Engari i konei, ko te tikanga, ka ara ake te take mo te wa poto. Ka titiro tatou ki a raatau i muri tata nei.

I tenei wa, me titiro ki nga hapa o te mahi patai.

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

Aue, ka karanga tetahi, he ahua tangata ake tenei - he raina! Tangohia to wa. I konei rarangi o nga hapa, engari kaore i oti. Mai i reira ka ako tatou ko te waehere tetahi mea penei Ko nga hapa HTTP (he pai, ko te tikanga, kaore i te whakautehia nga tohu o nga whakautu, i etahi waahi ka tohatoha noa i roto i nga waehere), me te ahua o te raina. CAPITAL_LETTERS_AND_NUMBERS. Hei tauira, PHONE_NUMBER_OCCUPIED, FILE_PART_Х_MISSING ranei. Ana, ara, ka hiahia tonu koe ki tenei raina poroporoaki. Hei tauira, FLOOD_WAIT_3600 ko te tikanga me tatari koe mo te haora, a PHONE_MIGRATE_5, me rehitatia he nama waea me tenei prefix ki te 5th DC. He momo reo to tatou, e tika? Kaore e hiahiatia he tautohetohe mai i te aho, ka mahia e nga tikanga, pai.

Ano, kaore tenei i runga i te wharangi karere ratonga, engari, pera i nga wa o mua o tenei kaupapa, ka kitea nga korero i tetahi atu wharangi tuhinga. Ranei maka te whakapae. Tuatahi, titiro, patopato/paparanga takahi - RpcError ka taea te kohanga ki roto RpcResult. He aha i kore ai i waho? He aha te mea kaore i whakaarohia e matou?.. No reira, kei hea te taurangi RpcError KORE pea e whakauruhia ki roto RpcResult, engari kia tika, kia kohanga ranei ki tetahi atu momo?.. A ki te kore e taea, he aha i kore ai i te taumata o runga, ara. kei te ngaro req_msg_id ? ..

Engari kia haere tonu mo nga karere ratonga. Ka whakaaro pea te kaihoko kei te whakaaro te kaimau mo te wa roa, ka tono i tenei tono whakamiharo:

rpc_drop_answer#58e4a740 req_msg_id:long = RpcDropAnswer;

E toru nga whakautu ka taea ki tenei patai, ka hono ano ki te tikanga whakau; e ngana ana ki te mohio he aha nga mea e tika ana (me te aha te rarangi whanui o nga momo kaore e hiahiatia kia whakamanahia) ka waiho ki te kaipanui hei mahi kaainga (note: nga korero kei roto kaore i oti te waehere puna Papamahi Telegram).

Te mooni tarukino: nga ahuatanga karere

I te nuinga o te waa, he maha nga waahi kei roto i te TL, MTProto me Telegram i te nuinga o te waa ka waiho he ahua pakeke, engari na te whakaaro nui, te mohio me etahi atu. nga pukenga ngohengohe I noho wahangu matou mo taua mea, me te aukati i nga korero kino i roto i nga korero. Heoi, ko tenei waahiОte nuinga o te wharangi e pa ana karere mo nga karere He tino ohorere ki ahau, kua roa nei e mahi ana me nga kawa whatunga me te kite i nga paihikara rereke o te kopikopiko.

Ka timata ma te harakore, me nga whakapumautanga. I muri mai ka korero mai ki a matou

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;

Ana, ko nga tangata katoa e timata ana ki te mahi me MTProto me mahi ki a raatau; i roto i te huringa "whakatika - kua whakahiato - kua whakarewahia" he mea noa te whiwhi hapa nama, tote ranei i kaha kino i nga wa whakatikatika. Engari, e rua nga waahanga i konei:

  1. Ko te tikanga kua ngaro te karere taketake. Me hanga e tatou etahi rarangi, ka titiro tatou ki tera.
  2. He aha enei tau hapa rereke? 16, 17, 18, 19, 20, 32, 33, 34, 35, 48, 64... kei hea etahi atu tau, Tommy?

E kii ana te tuhinga:

Ko te hiahia ko nga uara error_code kua whakarōpūhia (error_code >> 4): hei tauira, ko nga waehere 0x40 — 0x4f e rite ana ki nga hapa o te pirau ipu.

engari, tuatahi, ko te neke ki tera atu huarahi, tuarua, karekau he aha, kei hea etahi atu waehere? I roto i te mahunga o te kaituhi?.. Heoi, he mea iti enei.

Ka timata te waranga i roto i nga karere mo nga ahuatanga karere me nga kape karere:

  • Tono mo nga korero mo te Turanga Karere
    Mena kaore tetahi roopu i whiwhi korero mo te ahuatanga o ana karere puta mo tetahi wa, tera pea ka tono mai i tera taha:
    msgs_state_req#da69fb52 msg_ids:Vector long = MsgsStateReq;
  • Karere korero e pa ana ki te ahuatanga o nga Karere
    msgs_state_info#04deb57d req_msg_id:long info:string = MsgsStateInfo;
    I konei, info he aho kei roto kotahi te paita o te mana karere mo ia karere mai i te rarangi msg_ids taumai:

    • 1 = karekau he mohio mo te karere (msg_id he iti rawa, kua wareware pea tera atu)
    • 2 = karekau i tae mai te karere (ka uru te msg_id ki roto i te awhe o nga kaitautuhi kua rongoatia; heoi, karekau i tae mai he karere penei i tera atu taha)
    • 3 = karekau i tae mai te karere (msg_id he tiketike rawa; heoi, kare ano i tae atu ki tera taha)
    • 4 = kua tae mai te karere (kia mahara ko tenei whakautu i te wa ano he whakaaetanga rihīti)
    • +8 = karere kua whakaaehia
    • +16 = karekau e hiahia kia mihi
    • +32 = Uiui RPC kei roto i te karere e tukatukahia ana kua oti ranei te mahi
    • +64 = whakautu e pa ana ki te ihirangi ki te karere kua oti kee
    • +128 = e mohio ana etahi atu kua tae mai te karere
      Ko tenei whakautu kaore e hiahiatia he mihi. He mihi ki te msgs_state_req e tika ana, i roto ano hoki.
      Kia mahara, ki te puta ohorere mai karekau he karere a tera taha e ahua ana kua tukuna atu ki a ia, ka taea noa te tuku ano i te karere. Ahakoa kia rua nga kape o te karere ka riro i tera taha i te wa kotahi, ka warewarehia te taarua. (Ki te nui rawa te wa kua pahemo, a kua kore te msg_id taketake i te whaimana, me takai te karere ki te msg_copy).
  • Whakawhitinga Tuoha mo te Turanga o nga Karere
    Ka taea e tetahi taha ki te whakamohio ki tetahi atu taha mo te mana o nga karere i tukuna e tera taha.
    msgs_all_info#8cc0d131 msg_ids:Vector long info:string = MsgsAllInfo
  • Te Whakawhitinga Tuotea Whakaroa mo te Mana o te Karere Kotahi
    ...
    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;
  • Tono Maama ki te Tukua Anō i nga Karere
    msg_resend_req#7d861a08 msg_ids:Vector long = MsgResendReq;
    Ka whakautu wawe te roopu amamao ma te tuku ano i nga karere i tonoa […]
  • Tono Maama ki te Tukua Anō i nga Whakautu
    msg_resend_ans_req#8610baeb msg_ids:Vector long = MsgResendReq;
    Ka whakautu tonu te roopu mamao ma te tuku ano whakautu ki nga karere i tonoa […]
  • Karere Karere
    I etahi ahuatanga, me tuku ano he karere tawhito me te msg_id kua kore e whaimana. Na, ka takai ki te ipu kape:
    msg_copy#e06046b2 orig_message:Message = MessageCopy;
    Kia tae mai, ka tukatukahia te karere me te mea karekau te takai i reira. Heoi, ki te tino mohio kua tae mai te karere orig_message.msg_id, karekau te karere hou i te tukatuka (i te wa ano, ka whakaaehia me orig_message.msg_id). Ko te uara o orig_message.msg_id me iti ake i te msg_id o te ipu.

Kia noho puku tatou mo te aha msgs_state_info Ko nga taringa o te TL kaore ano kia oti te u mai (e hiahia ana matou he vector paita, kei nga moka e rua o raro he enum, kei nga moka e rua teitei ake he haki). He rereke te tohu. Kei te mohio tetahi he aha enei mea katoa e mahi ana? i roto i te tino kiritaki me te uaua? Engari i konei ka whakaahuahia nga tono haere huri noa.

E whai ana kia kaua ia roopu e whakamuna me te tuku karere anake, engari me penapena raraunga mo ratou ano, mo nga whakautu ki a raatau, mo te wa e kore e mohiotia. Karekau nga tuhinga e whakaatu ana i nga wa, i te whai tikanga ranei o enei ahuatanga. kahore he ara. Ko te mea tino whakamiharo ko te mea ka whakamahia i roto i te waehere o nga kaihoko whai mana! Ko te ahua i korerotia ki a ratou tetahi mea kaore i whakauruhia ki roto i nga tuhinga a te iwi. Kia mohio mai i te waehere he aha, kua kore e rite ki te ahua o te TL - ehara i te mea he (ahua) te waahanga motuhake, engari he waahanga kua herea ki te hoahoanga tono, ara. ka nui ake te wa ki te mohio ki te waehere tono.

Pings me nga wa. Tūtira.

Mai i nga mea katoa, mena ka mahara tatou ki nga whakaaro mo te hoahoanga o te tūmau (te tohatoha o nga tono puta noa i nga tuara), he mea tino pouri te whai - ahakoa nga taurangi tuku katoa i roto i te TCP (ka tukuna nga raraunga, ka whakamohiohia ranei koe mo te wehenga, engari ka tukuna nga raraunga kia puta ra ano te raru), ko nga whakapumautanga kei MTProto ano - kahore he taurangi. Ka taea e te tūmau te ngaro, te maka ranei i to karere, kaore he mea e taea, me whakamahi noa i nga momo toka.

Tuatahi o nga mea katoa - nga rarangi karere. Ae, me te mea kotahi i kitea nga mea katoa mai i te timatanga - me pupuri he panui kaore i whakamanahia me te riri. A i muri i tehea wa? Na ka mohio te tangata whakahiato ki a ia. Akene pea ko nga karere ratonga kaingākau ki te whakaoti i tenei raru me nga tootoo, hei ki atu, kei te Papamahi Telegram kei te 4 nga rarangi e pa ana ki a raatau (penei ano pea, penei i te korero kua korerohia, mo tenei ka hiahia koe ki te ruku ki roto i tana waehere me te hoahoanga; i taua wa ano. te wa, e mohio ana matou kaore e taea te tango hei tauira; he maha nga momo momo mai i te kaupapa MTProto kaore e whakamahia ki roto).

He aha te take i penei ai? Akene, kaore i taea e nga kaitakataka kaitoro te whakapumau i te pono i roto i te kapoi, te aukati ranei i te taurite o mua, me te whakawhiti i tenei raru ki te kaihoko. Na te pouri, ka ngana a Vasily ki te whakatinana i tetahi whiringa rereke, me te rua noa nga rarangi, ma te whakamahi i nga algorithms mai i te TCP - te ine i te RTT ki te tūmau me te whakatika i te rahi o te "matapihi" (i roto i nga karere) i runga i te maha o nga tono kaore i whakamanahia. Arā, ko te heuristic taikaha mo te aromatawai i te kawenga a te tūmau ko te maha o a tatou tono ka taea e ia te ngaungau i te wa kotahi ka kore e ngaro.

Kaati, ara, kei te mohio koe, e tika? Mena me whakauru ano koe i te TCP ki runga ake o te kawa e whakahaere ana i runga i te TCP, he tohu tenei he kawa tino kino te hoahoa.

Ae, he aha koe me nui ake i te kotahi te rarangi, a he aha te tikanga mo te tangata e mahi ana me te API taumata teitei? Titiro, ka tono koe, whakarangatirahia, engari kaore e taea e koe te tuku tonu. He aha? No te mea ko te whakautu msg_id, he rangitahi neiаHe tapanga ahau, ko te mahi e pai ana ki te whakaroa kia tae noa ki te wa e taea ana - mena ka whakakorehia e te kaimau na te kore o te wa i waenganui i a tatou me ia (ae, ka taea e tatou te hanga i te toka hei huri i to tatou wa mai i tenei wa. ki te tūmau mā te tāpiri i tētahi delta kua tātaihia mai i ngā whakautu a te tūmau - ka mahia e ngā kiritaki whai mana, engari he kino, he hē na te aukati). No reira, ka tono koe me te waea mahi a rohe mai i te whare pukapuka, ka haere te karere ki nga waahanga e whai ake nei:

  1. E takoto ana i te rarangi kotahi me te tatari whakamunatanga.
  2. Kua tohua msg_id ka haere te karere ki tetahi atu rarangi - ka taea te tuku whakamua; tuku ki te turanga.
  3. a) I whakautu te tūmau i a MsgsAck - i tukuna te karere, ka mukua e matou mai i te "atu rarangi".
    b) He rereke ranei, kaore ia i pai ki tetahi mea, ka whakautu ia ki te kino - tukuna mai i "tetahi atu rarangi"
    c) Karekau he mea e mohiotia ana, me whakaparahako te karere mai i tetahi atu rarangi - engari kaore i te tino mohio ki te wa.
  4. I te mutunga ka whakahoki te tūmau RpcResult - te whakautu tika (he hapa ranei) - ehara i te tuku noa, engari i tukatuka ano.

Mahalo, ka taea e te whakamahi ipu te whakaoti i te raru. Koinei te wa ka whakakiia te roopu o nga karere ki roto i te kotahi, ka whakahoki te tūmau me te whakaū ki a ratou katoa i te wa kotahi, i roto i te kotahi msg_id. Engari ka paopao ano ia ki tenei kete, ki te he tetahi mea, i tona katoa.

A i tenei wa ka uru mai nga whakaaro kore-hangarau. Mai i nga wheako, kua kite matou i te maha o nga tootoo, a hei taapiri, ka kite tatou i etahi atu tauira o nga tohutohu kino me nga hoahoanga - i roto i enei ahuatanga, he pai ki te whakawhirinaki me te whakatau i enei whakatau? Ko te patai he whaikorero (kaore rawa).

He aha ta tatou e korero nei? Mena i runga i te kaupapa "karere rongoa mo nga karere" ka taea tonu e koe te whakapae me nga whakahē penei "he poauau koe, kaore koe i mohio ki ta maatau mahere maamaa!" (no reira tuhia nga tuhinga i te tuatahi, kia rite ki nga tangata noa, me nga whakaaro me nga tauira o te whakawhiti putea, katahi ka korerohia), katahi ko nga waahi/waahi he patai tino whaitake me te motuhake, ko nga mea katoa i konei kua mohiotia mo te wa roa. He aha ta te tuhinga e korero ana mo nga wa mutunga?

I te nuinga o te wa ka whakaae te tūmau ki te rironga mai o te karere mai i te kiritaki (te tikanga, he patai RPC) ma te whakamahi i te whakautu RPC. Mena ka roa te whakautu, ka tukuna e te tūmau he mihinga rihīti i te tuatahi, ā, i muri mai, ko te whakautu RPC ake.

Ko te tikanga ka whakaae te kaihoko ki te rironga mai o tetahi karere mai i tetahi tūmau (te nuinga o te waa, he whakautu RPC) ma te taapiri i tetahi mihi ki te patai RPC e whai ake nei mena kaore i te tuku i te mutunga rawa (mehemea ka hangaia, me kii, 60-120 hēkona i muri i te whiwhinga. o te karere mai i te tūmau). Engari, mehemea mo te wa roa kaore he take ki te tuku karere ki te tūmau, ki te nui ranei o nga karere kaore i te mohiotia mai i te tūmau (mehemea, neke atu i te 16), ka tukuna e te kiritaki he mihi motuhake.

... Ko taku whakamaori: ko tatou ake kaore e mohio ki te nui me te pehea e hiahiatia ana e tatou, no reira me whakaaro tatou me penei.

A mo nga ping:

Nga Karere Ping (PING/PONG)

ping#7abe77ec ping_id:long = Pong;

Ko te tikanga ka whakahokia mai he whakautu ki te hononga kotahi:

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

Ko enei karere kaore e hiahiatia he mihi. Ka tukuna he pong hei whakautu ki te ping ka taea te timata te ping ki tetahi taha.

Katinga Hononga Whakatarewa + PING

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

He rite te mahi ping. I tua atu, i muri i te whiwhinga o tenei, ka timata te kaimataiwa ka kati i te hononga o naianei disconnect_delay hekona i muri mai mena ka tae mai he karere hou o taua momo ka tautuhi aunoa i nga wa katoa o mua. Mena ka tukuna e te kiritaki enei pings kotahi ia 60 hēkona, hei tauira, ka tautuhia te disconnect_delay kia rite ki te 75 hēkona.

Kei te haurangi koe?! I roto i te 60 hēkona, ka uru te tereina ki te teihana, ka heke iho ka tiki i nga kaihihi, ka ngaro ano te whakapiri ki roto i te kauhanga. I roto i te 120 hēkona, i a koe e rongo ana, ka tae ki tetahi atu, ka mutu pea te hononga. Ana, he maamaa kei hea nga waewae - "I rongo ahau i te tangi, engari kaore au i te mohio kei hea", kei reira ko te algorithm a Nagl me te whiringa TCP_NODELAY, mo te mahi whakawhitiwhiti. Engari, tena ra, mau tonu ki tana uara taunoa - 200 Mirihēkona Mena kei te pirangi koe ki te whakaatu i tetahi mea penei me te penapena i runga i nga paatete e rua ka taea, katahi ka whakawetohia mo te 5 hēkona, ahakoa he aha te "Kei te patopato te Kaiwhakamahi ..." kua mutu te korero inaianei. Engari kare atu.

Ka mutu, pings. Arā, te tirotiro i te ora o te hononga TCP. He rorirori, engari tata ki te 10 tau ki muri ka tuhia e au tetahi tuhinga whakahirahira mo te kaikawe o te whare wananga o to maatau kaiako - na nga kaituhi i reira i pingi te kaimau mai i te kaihoko, kaore he rereke. Engari ko nga tauira tau 3 tetahi mea, he tari o te ao tetahi atu, tika?..

Tuatahi, he kaupapa ako iti. Ko te hononga TCP, i te kore o te whakawhiti putea, ka ora mo nga wiki. He pai, he kino hoki tenei, i runga ano i te kaupapa. He pai mena he hononga SSH koe e tuwhera ana ki te tūmau, ka whakatika koe i te rorohiko, ka whakaara ano i te pouara, ka hoki mai ki to waahi - kaore i haea te waahi ma tenei tūmau (kaore koe i pato i tetahi mea, kaore he putea) , he watea. He kino mena he mano nga kaihoko kei runga i te tūmau, kei te tango rauemi a ia tangata (kia ora, Postgres!), a kua roa ke ano te kaihautu o te kiritaki - engari kaore matou e mohio.

Ka taka nga punaha korerorero/IM ki te keehi tuarua mo tetahi atu take - nga mana ipurangi. Mena "kua hinga" te kaiwhakamahi, me whakamohio atu koe ki ana hoa korero mo tenei. Ki te kore, ka mutu koe ki te he i mahia e nga kaihanga o Jabber (me te whakatika mo te 20 tau) - kua momotu te kaiwhakamahi, engari kei te tuhi tonu ratou i nga karere ki a ia, me te whakapono kei te ipurangi ia (i ngaro katoa i enei he meneti i mua i te kitenga o te momotu). Kao, ko te whiringa TCP_KEEPALIVE, he maha nga taangata kaore i te mohio ki te mahi a nga kaitawā TCP ka maka matapōkeretia (ma te whakarite i nga uara mohoao penei i te tekau hēkona), karekau e awhina i konei - me tino mohio koe ehara ko te kernel OS anake o te miihini a te kaiwhakamahi kei te ora, engari kei te mahi noa, i te kaha ki te whakautu, me te tono ano (ki to whakaaro kaore e taea te whakatio? Telegram Papamahi i runga i te Ubuntu 18.04 i maroke mo au neke atu i te kotahi).

No reira me ping koe tūmau te kiritaki, kaore he rereke - ki te mahia e te kiritaki tenei, ki te pakaru te hononga, kaore e tukuna te ping, kaore e tutuki te kaupapa.

He aha ta tatou e kite ana i runga Telegram? Ko te ritenga ke! Na, ko tera. Ko te tikanga, ka taea e nga taha e rua te ping tetahi ki tetahi. I roto i te mahi, ka whakamahi nga kaihoko i te toka ping_delay_disconnect, e whakatakoto ana i te taima ki runga i te tūmau. Kaati, tena ra, ehara ma te kaihoko e whakatau kia pehea te roa o tana hiahia ki te noho ki reira kaore he ping. Ko te tūmau, i runga i tana kawenga, he pai ake te mohio. Engari, ko te tikanga, ki te kore koe e whakaaro ki nga rauemi, ka waiho koe ko koe ake Pinocchio kino, a ka mahi te toki...

Me pehea te hoahoa?

E whakapono ana ahau ko nga korero o runga ake nei e whakaatu marama ana ko te roopu Telegram/VKontakte kaore i te tino mohio ki nga waahanga kawe (me raro) o nga whatunga rorohiko me o raatau tohu iti mo nga take e tika ana.

He aha te take i tino uaua ai, me pehea e ngana ai nga Kaihanga Telegram ki te whakahee? Ko te mea i ngana ratou ki te hanga i tetahi huihuinga ka ora i te hononga TCP ka pakaru, ara, ko nga mea kaore i tukuna inaianei, ka tukuna e matou i muri mai. I ngana ano pea ratou ki te kawe waka UDP, engari ka raru ratou ka whakarerea e ratou (koira te noho kau o nga tuhinga - kaore he mea hei whakamanamana). Engari na te kore o te mohio ki te mahi a nga whatunga whanui me te TCP, ka taea e koe te whakawhirinaki ki runga, me te waahi e hiahia ana koe ki te mahi i a koe ano (me pehea), me te ngana ki te whakakotahi i tenei ki te tuhinga tuhi "e rua nga manu me kotahi te kohatu”, koinei te hua.

Me pehea i tika ai? I runga i te meka e msg_id he tohu wa e tika ana mai i te tirohanga cryptographic hei aukati i nga whakaeke tukurua, he he ki te taapiri i tetahi mahi tohu motuhake ki a ia. No reira, me te kore e whakarereke i te hoahoanga o naianei (i te wa e hangaia ai te awa Whakahoutanga, he kaupapa API taumata-tiketike tera mo tetahi atu waahanga o tenei raupapa whakairinga), me:

  1. Ko te tūmau e pupuri ana i te hononga TCP ki te kiritaki te kawenga - mena kua panui mai i te turanga, whakaae mai, tukatuka, whakahokia mai ranei he hapa, kaore he mate. Na ko te whakapumautanga ehara i te vector o nga id, engari "ko te whakamutunga kua riro seq_no" - he nama noa, pera i roto i te TCP (e rua nga nama - to seq me te mea kua whakapumautia). Kei roto tonu tatou i te huihuinga, kaore?
  2. Ko te tohu wa hei aukati i nga whakaeke tukurua ka waiho hei mara motuhake, a la nonce. Ka tirohia, engari kaore e pa ki tetahi atu mea. Kati a uint32 - ki te huri to tatou tote i te iti rawa ia haurua o te ra, ka taea e tatou te toha 16 moka ki nga moka raupapa iti o te wahanga tauoti o te wa o naianei, te toenga - ki te wahanga hautanga o te tuarua (penei i naianei).
  3. Kua tangohia msg_id i nga mea katoa - mai i te tirohanga o te wehewehe i nga tono i runga i nga tuara, kei reira, ko te tuatahi, ko te id kiritaki, tuarua, ko te id huihuinga, whakakotahihia. No reira, kotahi noa te mea e tika ana hei tohu tono seq_no.

Ehara hoki tenei i te whiringa tino angitu; ka taea te mahi matapōkere katoa hei tohu - kua oti kē tenei i te API taumata-tiketike i te wa e tuku karere ana. He pai ke ki te whakahou i te hoahoanga mai i te whanaungatanga ki te tino, engari he kaupapa tenei mo tetahi atu waahanga, ehara i tenei pou.

API?

Ta-daam! Na, i te tohe i roto i te huarahi e ki tonu ana i te mamae me te tootoo, i te mutunga ka taea e matou te tuku tono ki te tūmau me te whiwhi whakautu ki a raatau, me te whiwhi whakahōutanga mai i te tūmau (kaore i te whakautu ki te tono, engari ko ia ano. ka tukuna mai ki a matou, penei i te PUSH, mena he maamaa ake tera).

Kia tupato, inaianei ko te tauira anake i Perl i roto i te tuhinga! (mo te hunga kaore i te mohio ki te syntax, ko te tohenga tuatahi mo te manaaki ko te hanganga raraunga o te ahanoa, ko te tuarua ko tana karaehe):

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

Ae, ehara i te kaipahua - mena kaore ano koe i panui, haere ki mua ka mahia!

Aue, wai~~... he aha te ahua o tenei? He mea tino mohio... koinei pea te hanganga raraunga o te API Tukutuku angamaheni i JSON, engari ko nga karaehe e piri ana ki nga taonga?..

Koia nei te ahua... He aha tena, e hoa?.. Ka nui te whakapau kaha - ka mutu matou ki te okioki ki te waahi o nga kaiwhakaputa paetukutuku. timata noa?..E kore e pai ake te JSON i runga i te HTTPS?! He aha ta tatou i whiwhi hei utu? I whai hua te kaha?

Kia arotakehia he aha ta TL+MTProto i homai me he aha nga huarahi ka taea. Ae, ko te HTTP, e arotahi ana ki te tauira tono-whakautu, he kino te pai, engari he mea iti rawa i runga ake o TLS?

raupapa kiato. I te kite i tenei hanganga raraunga, he rite ki a JSON, ka mahara ahau kei reira nga waahanga rua. Me tohu a MsgPack he iti rawa te whanui, engari tera ano, hei tauira, CBOR - na te mea, he paerewa kua whakaahuatia i roto RFC 7049. He mea rongonui mo te meka e tautuhi ana tūtohu, hei tikanga roha, me etahi atu kua paerewatia wātea:

  • 25 + 256 - te whakakapi i nga raina tukurua me te tohutoro ki te nama raina, he tikanga iti noa tenei.
  • 26 - rangatū ahanoa Perl me te ingoa akomanga me nga tohenga kaihanga
  • 27 - rangatū ahanoa reo-motuhake me te ingoa momo me nga tohenga kaihanga

Kaati, i ngana ahau ki te whakariterite i nga raraunga ano i roto i te TL me te CBOR me te aho me te tarapi ahanoa kua whakahohea. I timata te hua ki te rereke mo te CBOR mai i te megabyte:

cborlen=1039673 tl_len=1095092

Na whakatau: He tino ngawari ake nga whakatakotoranga karekau i raro i te raru o te rahunga tukutahitanga me te kaitautuhi e kore e mohiotia, he pai te rite.

Te whakatu hononga tere. Ko te tikanga ko te kore RTT i muri i te hono atu (i te mea kua oti te kii te hanga kotahi) - e tika ana mai i te karere MTProto tuatahi, engari me etahi rahui - ka pa ki te tote kotahi, kaore i te pirau te waahi, aha atu. He aha ta TLS e tuku ana ki a maatau? Korero mo te kaupapa:

Ina whakamahi ana i te PFS i roto i te TLS, nga tikiti hui TLS (RFC 5077) ki te whakaara ano i tetahi huihuinga whakamunatia me te kore e whiriwhiria ano nga taviri me te kore e pupuri i nga korero matua ki runga i te tūmau. I te whakatuwheratanga o te hononga tuatahi me te hanga i nga taviri, ka whakamuna te tūmau i te tūnga hononga ka tukuna ki te kiritaki (i te ahua o te tiiti hui). Na reira, ka hoki ano te hononga, ka tukuna e te kiritaki he tikiti hui, tae atu ki te matua o te huihuinga, hoki ki te tūmau. Ko te tikiti ake kua whakamunatia ki te taviri rangitahi (kī tikiti hui), ka rongoa ki runga i te tūmau me te tohatoha ki waenga i nga tūmau o mua e mahi ana i te SSL i roto i nga otinga rapoi.[10]. No reira, ko te whakaurunga o te tiiti huihuinga ka takahi i te PFS mena ka takahia nga taviri tūmau rangitahi, hei tauira, i te wa e rongoa ana mo te wa roa (OpenSSL, nginx, Apache ka penapena taunoa mo te roanga o te kaupapa; whakamahia nga waahi rongonui. te matua mo etahi haora, tae noa ki nga ra).

I konei ehara te RTT i te kore, me whakawhiti koe i te iti rawa ClientHello me ServerHello, ka mutu ka taea e te kiritaki te tuku raraunga me te Mutu. Engari i konei me mahara tatou karekau he Tukutuku, me ona roopu o nga hononga hou kua whakatuwherahia, engari he karere, he maha nga wa kotahi me te iti ake, iti ake ranei te roa, nga tono poto ki nga wharangi Tukutuku - he maha nga mea katoa. o roto. Arā, ka tino manakohia mena kaore i kitea e matou tetahi waahanga o te riraro kino.

Kua wareware tetahi atu mea? Tuhia ki roto i nga korero.

Kia haere tonu!

I te waahanga tuarua o tenei raupapa o nga pou ka whakaarohia e matou ehara i te mea hangarau, engari ko nga take whakahaere - nga huarahi, te whakaaro, te atanga, te whakaaro ki nga kaiwhakamahi, me era atu. Heoi, i runga i nga korero hangarau i whakaatuhia ki konei.

Ko te waahanga tuatoru ka haere tonu ki te tātari i te waahanga hangarau / wheako whanaketanga. Ka ako koe, ina koa:

  • te haere tonu o te pandemonium me nga momo momo TL
  • nga mea e kore e mohiotia mo nga hongere me nga roopu nui
  • he aha te take he kino atu nga korero i te rarangi ingoa
  • e pā ana ki te korero korero tino me te whanaungatanga
  • he aha te rereketanga o te whakaahua me te ahua
  • me pehea te whakararu a emoji ki nga kupu tuhi

me etahi atu tootoo! Kia mau tonu!

Source: will.com

Tāpiri i te kōrero