Ka dib marka Beast akhriyo madaxa jawaabta CONNECT ee proxy, hubi xaaladda jawaabta iyo buffer-ka firfircoon labadaba. Hawlgalka akhrinta wuxuu keeni karaa baytitaal ka baxsan dhammaadka madaxa oo ku hayaa buffer-ka la bixiyay. Haddii aad TLS ku bilowdo nooc akhriya kaliya socket-ka, baytitaalkaas la hayo waxay ka baxsadaan dariiqa gelinta TLS.

WebSocket stream-ka lakabka xiga uu yahay SSL stream, isticmaal nooca handshake ee buffer leh. Gudaha yield_context jira, iyadoo buffer lagu hayo nool inta hawlgallada socdaan:

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

Soo noqoshada hore waa meelaha guuldarrada ee fadhiga; ku xidh warbixinta khaladaadka caadiga ah iyo nadiifinta halkaas. Kaliya jawaab CONNECT guulaysata ayaa dhisto tunnel-ka. Bogga diidmada waa in aanu noqon gelinta TLS.

Nooca buffer leh wuxuu ku dhammaadaa kood khalad iyo tiro baytitaal ah. Tiradaas waxay sharraxaysaa inta baytitaal ee uu ka isticmaalay buffer-yada la bixiyay. Ka dib dhammaadka, ka saar sax ahaanshaha prefix-kaas consume(used). Ha nadiifin buffer-ka ka hor bilowga hawlgalka, ha beddelin kaydintiisa inta handshake-ku sugayo, oo ha u malayn in hawlgalku isticmaalay baytitaal kasta oo la bixiyay.

TLS-ka caadiga ah ee macmiilku bilaabo isla markiiba CONNECT ka dib, buffer-ku wuu madhanayn karaa. Nooca ayaa sidoo kale maareeya xaaladaas. Ujeeddadiisu waa ilaalinta xuduudaha stream-ka; ma ka dhigto xog proxy oo kasta oo xigta TLS ansax ah. Ku hay xaqiijinta magaca host-ka loo socdo iyo habaynta SNI lakabka SSL ka hor handshake-ka, oo bilow casriyaynta WebSocket kaliya ka dib marka TLS guulaysto.

Maqaallo la xiriira