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 سەپلىمىسىنى ساقلاڭ، WebSocket يۈكسەلدۈرۈشىنى پەقەت TLS مۇۋەپپەقىيەتلىك بولغاندىن كېيىن باشلاڭ.

مۇناسىۋەتلىك ماقالىلەر