Pagkatapos basahin ng Beast ang CONNECT response header ng isang proxy, suriin ang parehong status ng response at ang dynamic na buffer. Maaaring kunin ng read operation ang mga byte na lampas sa dulo ng header at itago ang mga ito sa ibinigay na buffer. Kapag pinasimulan ang TLS gamit ang overload na nagbabasa lamang ng socket, nananatili ang mga nakatagong byte na iyon sa labas ng TLS input path.

Para sa WebSocket stream na ang susunod na layer ay ang SSL stream, gamitin ang buffered handshake overload. Sa umiiral na yield_context session, habang pinananatiling buhay ang buffer sa lahat ng operasyon:

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

Ang mga maagang return ay ang failure exits ng session; ikabit doon ang karaniwang error reporting at paglilinis. Tanging matagumpay na CONNECT response lamang ang nagtatatag ng tunnel. Hindi dapat maging TLS input ang isang rejection page.

Nagtatapos ang buffered overload na may error code at byte count. Inilalarawan ng count na iyon kung ilang byte ang ginamit nito mula sa mga ibinigay na buffer. Pagkatapos makumpleto, alisin nang eksakto ang prefix na iyon gamit ang consume(used). Huwag i-clear ang buffer bago magsimula ang operasyon, huwag baguhin ang storage nito habang nakabinbin ang handshake, at huwag ipagpalagay na ginamit ng operasyon ang bawat ibinigay na byte.

Sa karaniwang client-initiated TLS kaagad pagkatapos ng CONNECT, maaaring walang laman ang buffer. Hinahawakan din ng overload ang kasong iyon. Ang layunin nito ay pangalagaan ang mga hangganan ng stream; hindi nito ginagawang wastong TLS ang anumang karagdagang proxy data. Panatilihin ang pagpapatunay ng destinasyong hostname at ang SNI configuration sa SSL layer bago ang handshake, at simulan ang WebSocket upgrade pagkatapos lamang na magtagumpay ang TLS.

Kaugnay na mga artikulo