Beast ප්‍රොක්සියක CONNECT ප්‍රතිචාර ශීර්ෂය කියවා අවසන් වූ පසු ප්‍රතිචාර තත්ත්වය සහ ගතික බෆරය යන දෙකම පරීක්ෂා කරන්න. කියවීමේ ක්‍රියාව ශීර්ෂයේ අවසානයෙන් ඔබ්බට ඇති බයිට් ගෙන එමින් ඒවා ලබා දුන් බෆරයේ තබා ගත හැක. සොකට්ටුව පමණක් කියවන ඕවර්ලෝඩයකින් TLS ආරම්භ කළහොත් එම තබා ගත් බයිට් TLS ආදාන මාර්ගයෙන් පිටත රැඳේ.

ඊළඟ ස්ථරය SSL ස්ට්‍රීම් වන WebSocket ස්ට්‍රීම් සඳහා බෆර සහිත හැන්ඩ්ෂේක් ඕවර්ලෝඩය භාවිත කරන්න. පවතින yield_context සැසියේ, සියලු ක්‍රියාවලි තුළ buffer ජීවමානව තබා ගනිමින්:

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

මුල් ආපසු පැමිණීම් සැසියේ අසාර්ථක පිටවීම් වේ; එහි සාමාන්‍ය දෝෂ වාර්තා කිරීම සහ පිරිසිදු කිරීම සම්බන්ධ කරන්න. සාර්ථක CONNECT ප්‍රතිචාරයක් පමණක් උමං මාර්ගය ස්ථාපිත කරයි. ප්‍රතික්ෂේප පිටුවක් TLS ආදානය විය යුතු නැත.

බෆර සහිත ඕවර්ලෝඩය දෝෂ කේතයක් සහ බයිට් ගණනක් සමඟ අවසන් වේ. එම ගණන ලබා දුන් බෆරවලින් එය පරිභෝජනය කළ බයිට් කීයක් දැයි විස්තර කරයි. අවසන් වූ පසු consume(used) භාවිතයෙන් හරියටම එම උපසර්ගය ඉවත් කරන්න. ක්‍රියාව ආරම්භ කිරීමට පෙර බෆරය හිස් නොකරන්න, හැන්ඩ්ෂේකය බලාපොරොත්තුවෙන් සිටියදී එහි ගබඩාව වෙනස් නොකරන්න, සහ ක්‍රියාව ලබා දුන් සෑම බයිටයක්ම පරිභෝජනය කළ යැයි නොසිතන්න.

CONNECT ට පසුව වහාම සේවාදායකය විසින් ආරම්භ කරන සාමාන්‍ය TLS හි බෆරය හිස් විය හැක. ඕවර්ලෝඩය එම අවස්ථාව ද හසුරුවයි. එහි අරමුණ ස්ට්‍රීම් මායිම් සුරක්ෂිත කිරීමයි; එය ඕනෑම අමතර ප්‍රොක්සි දත්තයක් වලංගු TLS බවට පත් නොකරයි. හැන්ඩ්ෂේකයට පෙර SSL ස්ථරයේ ගමනාන්ත සත්කාරක නාම සත්‍යාපනය සහ SNI වින්‍යාසය තබා ගන්න, සහ TLS සාර්ථක වූ පසුව පමණක් WebSocket උත්ශ්‍රේණි කිරීම ආරම්භ කරන්න.

අදාළ ලිපි