Færðu CONNECT-biðminni Beast inn í TLS-handslagið
Sendu bætin sem verða eftir eftir CONNECT-svar í biðminnistengda TLS-handslagið hjá Asio og neyttu þá nákvæmlega sama magns og það notaði.
Eftir að Beast hefur lesið CONNECT-svarhaus stéttarþjóns skal skoða bæði stöðu svarsins og virka biðminnið. Lesaðgerðin getur sótt bæti handan við hausendann og haldið þeim í biðminninu sem var gefið. Ef TLS er ræst með yfirferð sem les aðeins sokkinn verða þessi geymdu bæti utan við inntaksleið TLS.
Fyrir WebSocket-strauma þar sem næsta lag er SSL-strauminn skal nota biðminnistengdu handslagsyfirferðina. Í fyrirliggjandi yield_context-lotu, með buffer haldið lifandi í gegnum 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);
Snemmskilaboðin eru bilunarútgöngur lotunnar; festu venjulega villutilkynningu og hreinsun þar. Aðeins árangursríkt CONNECT-svar myndar göngin. Synjunarblað má ekki verða inntak TLS.
Biðminnistengda yfirferðin lýkur með villukóða og bætatölu. Sú tala lýsir því hversu mörgum bætum hún neytti úr biðminnunum sem voru gefin. Eftir að henni lýkur skal fjarlægja nákvæmlega þann forskeyti með consume(used). Hreinsaðu ekki biðminnið áður en aðgerðin hefst, breyttu ekki geymslu þess meðan handslagið er í bið, og gerðu ekki ráð fyrir að aðgerðin hafi neytt hvers gefins bætis.
Með venjulegu TLS sem biðlarinn ræsir strax eftir CONNECT getur biðminnið verið tómt. Yfirferðin sinnir einnig því tilviki. Tilgangur hennar er að varðveita straummörk; hún gerir ekki handahófskennd síðari stéttargögn að gildum TLS. Haltu staðfestingu áfangahýsilsnafns og SNI-stillingu á SSL-laginu fyrir handslagið og byrjaðu WebSocket-uppfærsluna aðeins eftir að TLS heppnast.