Eftir at Beast hevur lisið CONNECT-svarhøvdið frá einum proxy, kann bæði svarstøðuna og tað dynamiska buffurið. Lesiaðgerðin kann heinta bytir handan høvdaenda og varðveita tær í buffurinum, sum varð givið. Um tú byrjar TLS við eini yvirbyrðu, sum bert les sokkulin, verða hesar goymdu bytini uttan fyri inntaksleið TLS.

Fyri ein WebSocket-streym, har næsta lag er SSL-streymurin, brúka ta bufferadu handshak-yvirbyrðuna. Í eini verandi yield_context-setu, við buffer hildið livandi gjøgnum allar aðgerðirnar:

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

Tíðligu afturkomurnar eru feilútgongdir setunnar; fest har vanliga feilrapportering og reinskil. Bert eitt væleydnað CONNECT-svar stovnar tunnilin. Ein avvísingarsíða má ikki verða TLS-inntak.

Bufferaða yvirbyrðan endar við einum feilkóta og einum bytantali. Hetta talið lýsir, hvussu nógvar bytir hon brúkti úr buffurunum, sum vórðu givin. Eftir at hon er liðug, tak júst hendan forliðin burt við consume(used). Tøm ikki buffurið, áðrenn aðgerðin byrjar, broyt ikki goymsluna, meðan handshakið bíðar, og rokna ikki við, at aðgerðin brúkti hvørja givna byt.

Við vanligum TLS, sum klienturin byrjar beint eftir CONNECT, kann buffurið vera tómt. Yvirbyrðan viðger eisini hetta førið. Endamálið er at varðveita streymmark; hon ger ikki vilkárlig síðani proxy-dátu at gildum TLS. Halt váttan av málnýtsluhostnavninum og SNI-stillingina á SSL-lagnum áðrenn handshakið, og byrja WebSocket-uppstigingina bert eftir at TLS er eydnast.

Skyldar greinar