Gbe bafa CONNECT Beast wọ inú handshake TLS
Fi àwọn byte tó kù lẹ́yìn ìdáhùn CONNECT ránṣẹ́ sí handshake TLS tó ní bafa ti Asio, kí o sì lo gangan iye tó lo.
Lẹ́yìn tí Beast bá ka àkọlé ìdáhùn CONNECT ti proxy, yẹwò ipò ìdáhùn àti bafa aláìgbé ìgbà yẹn. Iṣẹ́ kíkà lè gbé àwọn byte tó rékọjá òpin àkọlé wá, kí ó sì pa wọ́n mọ́ nínú bafa tí a fún ọ. Bí o bá bẹ̀rẹ̀ TLS pẹ̀lú overload tí ń ka socket nìkan, àwọn byte tí a pa mọ́ yẹn yóò wà níta ọ̀nà ìwọlé TLS.
Fún ìṣàn WebSocket tí ìpele tó kàn ń bọ̀ jẹ́ ìṣàn SSL, lo overload handshake tó ní bafa. Nínú ìpàdé yield_context tó wà tẹ́lẹ̀, kí o máa pa buffer mọ́ láàyè ní gbogbo iṣẹ́:
http::response_parser<http::empty_body> response;
http::async_read_header(
beast::get_lowest_layer(ws), buffer, response, yield[ec]);
if (ec) return;
auto status = response.get().result_int();
if (status < 200 || status >= 300) return;
std::size_t used = ws.next_layer().async_handshake(
ssl::stream_base::client, buffer.data(), yield[ec]);
if (ec) return;
buffer.consume(used);
Àwọn ìpadàbọ̀ àkọ́kọ́ ni àwọn ọ̀nà ìkùnà ìpàdé; so ìròyìn àṣìṣe àti ìmọ́tótó deede mọ́ ibẹ̀. Ìdáhùn CONNECT tó ṣẹ́gun nìkan ni ó ń dá tunnel kalẹ̀. Ojú-ìwé ìkọ̀sílẹ̀ kò gbọdọ̀ di ìwọlé TLS.
Overload tó ní bafa ń parí pẹ̀lú kóòdù àṣìṣe àti iye byte. Iye yẹn ń ṣàlàyé iye byte tó lo láti inú àwọn bafa tí a fún. Lẹ́yìn tí ó bá parí, yọ gangan àkọ́sọ́ yẹn kúrò pẹ̀lú consume(used). Má ṣe sọ bafa di òfo kí iṣẹ́ tó bẹ̀rẹ̀, má ṣe yí ibi ìpamọ́ rẹ̀ padà nígbà tí handshake ń dúró, kí o má sì rò pé iṣẹ́ lo gbogbo byte tí a fún.
Nínú TLS deede tí alábàáṣiṣẹ́pọ̀ bẹ̀rẹ̀ lẹ́sẹ̀kẹsẹ̀ lẹ́yìn CONNECT, bafa lè jẹ́ òfo. Overload ń ṣojú ipò yẹn pẹ̀lú. Èrò rẹ̀ ni láti dáàbò bo ààlà ìṣàn; kò sọ àwọn dátà proxy àìdábọ̀ tó ń bọ̀ di TLS tó wúlò. Pa ìmúdájú orúkọ agbàlejò ibi-ìlọ àti ìṣètò SNI mọ́ lórí ìpele SSL kí handshake tó bẹ̀rẹ̀, kí o sì bẹ̀rẹ̀ ìgbéga WebSocket lẹ́yìn tí TLS bá ṣẹ́gun.