Dem Beast säi CONNECT-Puffer an den TLS-Handshake iwwerhuelen
Gitt d’Bitten, déi no enger CONNECT-Äntwert iwwreg bleiwen, un dem Asio säi gepufferte TLS-Handshake weider, a verbraucht duerno genee déi Quantitéit, déi en benotzt huet.
Nodeem Beast den CONNECT-Äntwertsheader vun engem Proxy gelies huet, kontrolléiert souwuel den Äntwertsstatus wéi och den dynamesche Puffer. D’Liesoperatioun kann Bitten iwwer d’Header-Ende eraus huelen an se am geliwwerte Puffer halen. Wann Dir TLS mat enger Iwwerlaascht start, déi just de Socket liest, bleiwen déi opgehalte Bitten ausserhalb vum TLS-Inputwee.
Fir e WebSocket-Stream, deem seng nächst Schicht den SSL-Stream ass, benotzt d’gepuffert Handshake-Iwwerlaascht. An enger bestoender yield_context-Sessioun, mam buffer deen iwwer all Operatiounen am Liewen gehal gëtt:
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);
Déi fréi Retouren sinn d’Feelerausgäng vun der Sessioun; befestegt do déi üblech Feelerberichtserklappung an d’Botzen. Nëmmen eng erfollegräich CONNECT-Äntwert baut den Tunnel op. Eng Ofleehnungssäit däerf net TLS-Input ginn.
Déi gepuffert Iwwerlaascht endet mat engem Feelerkode an enger Bit-Zuel. Déi Zuel beschreift, wéi vill Bitten se aus de geliwwerte Pufferen verbraucht huet. Nodeem se fäerdeg ass, huelt genee dee Prefix mat consume(used) ewech. Maacht de Puffer net eidel virum Ufank vun der Operatioun, ännert säi Späicher net, wärend den Handshake aussteet, a gitt net dovun aus, datt d’Operatioun all geliwwert Bit verbraucht huet.
Bei gewéinlechen, vum Client direkt nom CONNECT gestarteten TLS ka de Puffer eidel sinn. D’Iwwerlaascht behandelt och dee Fall. Hir Zweck ass d’Erhalen vu Stream-Grenzen; se mécht arbiträr duerno Proxy-Daten net zu valabelen TLS. Halt d’Iwwerpréiwung vum Zilhostnumm an d’SNI-Konfiguratioun op der SSL-Schicht virum Handshake a start d’WebSocket-Upgrade just nodeem TLS gelungen ass.