Après que Beast a lu l’en-tête de réponse CONNECT d’un proxy, examinez à la fois le statut de la réponse et le tampon dynamique. L’opération de lecture peut récupérer des octets au-delà du terminateur d’en-tête et les conserver dans le tampon fourni. Démarrer TLS avec une surcharge qui ne lit que la socket laisse ces octets conservés hors du chemin d’entrée TLS.

Pour un flux WebSocket dont la couche suivante est le flux SSL, utilisez la surcharge de poignée de main tamponnée. Dans une session yield_context existante, en gardant buffer en vie pendant toutes les opérations :

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);

Les retours anticipés représentent les sorties d’échec de la session ; rattachez-y le rapport d’erreurs et le nettoyage habituels. Seule une réponse CONNECT réussie établit le tunnel. Une page de rejet ne doit pas devenir une entrée TLS.

La surcharge tamponnée se termine avec un code d’erreur et un nombre d’octets. Ce nombre décrit combien d’octets elle a consommés dans les tampons fournis. Après la fin, retirez exactement ce préfixe avec consume(used). Ne videz pas le tampon avant de commencer, ne modifiez pas son stockage pendant que la poignée de main est en attente et ne supposez pas que l’opération a consommé tous les octets fournis.

Avec un TLS ordinaire lancé par le client juste après CONNECT, le tampon peut être vide. La surcharge gère aussi ce cas. Son but est de préserver les frontières de flux ; elle ne rend pas de données proxy arbitraires valides pour TLS. Gardez la vérification du nom d’hôte de destination et la configuration SNI sur la couche SSL avant la poignée de main, et ne lancez la mise à niveau WebSocket qu’après la réussite de TLS.

Articles similaires