Beast ৰ CONNECT বাফাৰ TLS হেণ্ডশ্বেকলৈ লৈ যাওক
CONNECT সঁহাৰিৰ পিছত ৰৈ যোৱা বাইটবোৰ Asio ৰ বাফাৰযুক্ত TLS হেণ্ডশ্বেকলৈ পঠিয়াওক, তাৰ পিছত ই ব্যৱহাৰ কৰা পৰিমাণটো সঠিকভাৱে গ্ৰহণ কৰক।
Beast এ প্ৰক্সীৰ CONNECT সঁহাৰিৰ হেডাৰ পঢ়াৰ পিছত, সঁহাৰিৰ স্থিতি আৰু গতিশীল বাফাৰ দুয়োটা পৰীক্ষা কৰক। পঢ়া কাৰ্যই হেডাৰৰ সমাপ্তিৰ পৰা অতিৰিক্ত বাইট আনিব পাৰে আৰু সেইবোৰ দিয়া বাফাৰত ৰাখিব পাৰে। কেৱল চকেট পঢ়া অ’ভাৰলোডেৰে TLS আৰম্ভ কৰিলে সেই ৰখা বাইটবোৰ TLS ইনপুট পথৰ বাহিৰত থাকে।
যি WebSocket স্ট্ৰিমৰ পৰৱৰ্তী স্তৰ SSL স্ট্ৰিম, তাৰ বাবে বাফাৰযুক্ত হেণ্ডশ্বেক অ’ভাৰলোড ব্যৱহাৰ কৰক। বৰ্তমানৰ 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 আপগ্ৰেড আৰম্ভ কৰক।