የBeast CONNECT ቋትን ወደ TLS ሃንድሼክ ማምጣት
ከCONNECT ምላሽ በኋላ የቀሩትን ባይቶች ወደ Asio ቋት ያለው TLS ሃንድሼክ ያስተላልፉ፣ ከዚያም የተጠቀመውን መጠን በትክክል ይውሰዱ።
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 አያደርግም። የመዳረሻ አስተናጋጅ ስም ማረጋገጫና SNI ውቅርን ከሃንድሼኩ በፊት በSSL ንብርብር ላይ ያቆዩ፣ የWebSocket ማሻሻያውን የሚጀምሩት TLS ከተሳካ በኋላ ብቻ ነው።