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 ஆக்காது. கைக்குலுக்கலுக்கு முன் SSL அடுக்கில் இலக்கு ஹோஸ்ட்பெயர் சரிபார்ப்பு மற்றும் SNI உள்ளமைவை வைத்திருந்து, TLS வெற்றியடைந்த பிறகே WebSocket மேம்படுத்தலைத் தொடங்கவும்.