Pärast seda, kui Beast on proxy CONNECT-vastuse päise lugenud, kontrolli nii vastuse olekut kui ka dünaamilist puhvrit. Lugemisoperatsioon võib tuua baite päise lõpetajast kaugemalt ja jätta need antud puhvrisse. Kui alustada TLS-i ülekoormusega, mis loeb ainult soklit, jäävad need alles hoitud baidid TLS-i sisendteelt välja.

WebSocket-voo jaoks, mille järgmine kiht on SSL-voog, kasuta puhverdatud käetluse ülekoormust. Olemasolevas yield_context-seansis, hoides buffer kogu operatsioonide ajal elus:

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

Varajased tagastused on seansi veaväljapääsud; kinnita sinna tavaline veateade ja puhastus. Tunneli loob ainult edukas CONNECT-vastus. Keeldumisleht ei tohi saada TLS-i sisendiks.

Puhverdatud ülekoormus lõpeb veakoodi ja baitide arvuga. See arv kirjeldab, kui palju baite see antud puhvritest tarbis. Pärast lõppu eemalda täpselt see eesliide consume(used) abil. Ära tühjenda puhvrit enne operatsiooni algust, ära muuda selle salvestusruumi käetluse ootamise ajal ja ära eelda, et operatsioon tarbis iga antud baidi.

Tavalise kliendipoolt vahetult pärast CONNECT-i käivitatud TLS-i puhul võib puhver olla tühi. Ülekoormus käsitleb ka seda juhtumit. Selle eesmärk on säilitada voo piire; see ei muuda suvalisi järelmisi proxy-andmeid kehtivaks TLS-iks. Hoia sihtkoha hostinime kontroll ja SNI-konfiguratsioon enne käetlust SSL-kihil ning alusta WebSocketi uuendust alles pärast TLS-i õnnestumist.

Seotud artiklid