Cludo bwfer CONNECT Beast i’r TLS handshake
Trosglwyddwch y beitiau a gedwir ar ôl ymateb CONNECT i handshake TLS byfferog Asio, yna defnyddiwch yn union faint a ddefnyddiodd.
Ar ôl i Beast ddarllen pennawd ymateb CONNECT dirprwy, archwiliwch statws yr ymateb a’r bwfer deinamig ill dau. Gall y llawdriniaeth ddarllen nôl beitiau y tu hwnt i derfynydd y pennawd a’u cadw yn y bwfer a roddwyd. Mae cychwyn TLS â gorlwythiad sy’n darllen y soced yn unig yn gadael y beitiau a gedwir y tu allan i lwybr mewnbwn TLS.
Ar gyfer ffrwd WebSocket y mae ei haen nesaf yn ffrwd SSL, defnyddiwch y gorlwythiad handshake byfferog. Mewn sesiwn yield_context bresennol, gyda buffer yn cael ei gadw’n fyw drwy’r holl lawdriniaethau:
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);
Mae’r dychweliadau cynnar yn gynlluniau methiant y sesiwn; atodwch yr adroddiad gwallau arferol a’r glanhau yno. Dim ond ymateb CONNECT llwyddiannus sy’n sefydlu’r twnnel. Rhaid i dudalen wrthod beidio â dod yn fewnbwn TLS.
Mae’r gorlwythiad byfferog yn gorffen â chod gwall a chyfrif beitiau. Mae’r cyfrif hwnnw’n disgrifio faint o feitiau a ddefnyddiodd o’r byfferau a roddwyd. Ar ôl cwblhau, tynnwch yn union y rhagddodiad hwnnw gyda consume(used). Peidiwch â chlirio’r bwfer cyn dechrau’r llawdriniaeth, peidiwch â newid ei storio tra bod y handshake yn disgwyl, ac na thybiwch fod y llawdriniaeth wedi defnyddio pob beit a roddwyd.
Gyda TLS arferol a gychwynnir gan y cleient yn syth ar ôl CONNECT, gall y bwfer fod yn wag. Mae’r gorlwythiad yn trin y cyflwr hwnnw hefyd. Ei bwrpas yw cadw ffiniau ffrwd; nid yw’n gwneud data dirprwy ôl-ddilynol mympwyol yn TLS dilys. Cadwch y gwaith o wirio enw’r lluosogwr cyrchfan a chyfluniad SNI ar haen SSL cyn y handshake, a dechreuwch yr uwchraddiad WebSocket dim ond ar ôl i TLS lwyddo.