Dra Beast se CONNECT-buffer in die TLS-handskud in
Gee die grepe wat ná ’n CONNECT-antwoord behoue bly aan Asio se gebufferde TLS-handskud, en verbruik dan presies die hoeveelheid wat dit gebruik het.
Nadat Beast die CONNECT-antwoordkop van ’n proxy gelees het, ondersoek beide die antwoordstatus en die dinamiese buffer. Die leesbewerking kan grepe verby die kopafsluiter haal en dit in die verskafde buffer hou. As jy TLS begin met ’n oorlaai wat net die sokket lees, bly daardie behoue grepe buite die TLS-invoerpad.
Vir ’n WebSocket-stroom waarvan die volgende laag die SSL-stroom is, gebruik die gebufferde handskud-oorlaai. In ’n bestaande yield_context-sessie, met buffer wat deur al die bewerkings lewendig gehou word:
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);
Die vroeë terugkerings verteenwoordig die sessie se foutuitgange; heg die normale foutrapportering en opruiming daar. Slegs ’n suksesvolle CONNECT-antwoord vestig die tonnel. ’n Verwerpingsbladsy mag nie TLS-invoer word nie.
Die gebufferde oorlaai voltooi met ’n foutkode en ’n grepetelling. Daardie telling beskryf hoeveel grepe dit uit die verskafde buffers verbruik het. Verwyder presies daardie voorvoegsel met consume(used), nadat dit voltooi is. Moenie die buffer skoonmaak voordat die bewerking begin nie, die stoordering verander terwyl die handskud hang nie, of aanvaar dat die bewerking elke verskafde greep verbruik het nie.
Met gewone kliënt-geïnisieerde TLS onmiddellik ná CONNECT kan die buffer leeg wees. Die oorlaai hanteer ook daardie geval. Die doel daarvan is om stroomgrense te bewaar; dit maak nie willekeurige agterste proxy-data geldige TLS nie. Hou die toepassing se bestemmingsgasheernaamverifikasie en SNI-konfigurasie op die SSL-laag voor die handskud, en begin die WebSocket-opgradering eers nadat TLS geslaag het.