From be09b582c207ee0a4e5303c96fa579d50cc83f02 Mon Sep 17 00:00:00 2001 From: patr0nus Date: Wed, 14 Oct 2020 23:09:58 +0800 Subject: [PATCH] Respect existing "Sec-WebSocket-Key" in client requests --- src/handshake/client.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/handshake/client.rs b/src/handshake/client.rs index 745da90..0032691 100644 --- a/src/handshake/client.rs +++ b/src/handshake/client.rs @@ -31,7 +31,7 @@ impl ClientHandshake { /// Initiate a client handshake. pub fn start( stream: S, - request: Request, + mut request: Request, config: Option, ) -> Result> { if request.method() != http::Method::GET { @@ -49,7 +49,12 @@ impl ClientHandshake { // Check the URI scheme: only ws or wss are supported let _ = crate::client::uri_mode(request.uri())?; - let key = generate_key(); + let key = if let Some(key) = request.headers_mut().remove("Sec-WebSocket-Key") { + key.to_str()?.to_owned() + } + else { + generate_key() + }; let machine = { let req = generate_request(request, &key)?;