Wara li Beast jaqra l-intestatura tar-risposta CONNECT ta’ proxy, iċċekkja kemm l-istat tar-risposta kif ukoll il-buffer dinamiku. L-operazzjoni tal-qari tista’ ġġib bytes lil hinn mit-tmiem tal-intestatura u żżommhom fil-buffer fornuta. Jekk tibda TLS b’overload li jaqra biss is-socket, dawk il-bytes miżmuma jibqgħu barra mill-passaġġ tal-input TLS.

Għal stream WebSocket li s-saff li jmiss tiegħu huwa l-stream SSL, uża l-overload tal-handshake bil-buffer. F’sessjoni yield_context eżistenti, billi żżomm buffer ħaj matul l-operazzjonijiet kollha:

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

Ir-ritorni bikrija huma l-ħruġ tal-falliment tas-sessjoni; hemmhekk waħħal ir-rappurtar normal tal-iżbalji u t-tindif. Risposta CONNECT biss li tirnexxi tistabbilixxi t-tunnel. Paġna ta’ rifjut m’għandhiex issir input TLS.

L-overload bil-buffer jitlesta b’kodi ta’ żball u għadd ta’ bytes. Dak l-għadd jiddeskrivi kemm-il byte ikkonsma mill-buffers fornuti. Wara t-tlestija, neħħi eżatt dak il-prefiss b’consume(used). Tnaddafx il-buffer qabel ma tibda l-operazzjoni, tibdilx il-ħażna tiegħu waqt li l-handshake jkun pendenti, u tassumix li l-operazzjoni kkonsmat kull byte fornuta.

B’TLS ordinarju mibdi mill-klijent immedjatament wara CONNECT, il-buffer jista’ jkun vojt. L-overload jimmaniġġja wkoll dak il-każ. L-iskop tiegħu huwa li jippreserva l-fruntieri tal-stream; ma jagħmilx data proxy arbitrarja sussegwenti TLS validu. Żomm il-verifika tal-isem tal-host tad-destinazzjoni u l-konfigurazzjoni SNI fuq is-saff SSL qabel il-handshake, u ibda l-upgrade WebSocket biss wara li TLS jirnexxi.

Artikli relatati