(response)
| 15186 | useParallelQueue: true, |
| 15187 | dispatcher: options.dispatcher, |
| 15188 | processResponse(response) { |
| 15189 | if (response.type === "error" || response.status !== 101) { |
| 15190 | if (response.socket?.session == null) { |
| 15191 | failWebsocketConnection(handler, 1002, "Received network error or non-101 status code.", response.error); |
| 15192 | return; |
| 15193 | } |
| 15194 | if (response.status !== 200) { |
| 15195 | failWebsocketConnection(handler, 1002, "Received network error or non-200 status code.", response.error); |
| 15196 | return; |
| 15197 | } |
| 15198 | } |
| 15199 | if (warningEmitted === false && response.socket?.session != null) { |
| 15200 | process.emitWarning("WebSocket over HTTP2 is experimental, and subject to change.", "ExperimentalWarning"); |
| 15201 | warningEmitted = true; |
| 15202 | } |
| 15203 | if (protocols.length !== 0 && !response.headersList.get("Sec-WebSocket-Protocol")) { |
| 15204 | failWebsocketConnection(handler, 1002, "Server did not respond with sent protocols."); |
| 15205 | return; |
| 15206 | } |
| 15207 | if (response.socket.session == null && response.headersList.get("Upgrade")?.toLowerCase() !== "websocket") { |
| 15208 | failWebsocketConnection(handler, 1002, 'Server did not set Upgrade header to "websocket".'); |
| 15209 | return; |
| 15210 | } |
| 15211 | if (response.socket.session == null && response.headersList.get("Connection")?.toLowerCase() !== "upgrade") { |
| 15212 | failWebsocketConnection(handler, 1002, 'Server did not set Connection header to "upgrade".'); |
| 15213 | return; |
| 15214 | } |
| 15215 | const secWSAccept = response.headersList.get("Sec-WebSocket-Accept"); |
| 15216 | const digest = crypto.hash("sha1", keyValue + uid, "base64"); |
| 15217 | if (secWSAccept !== digest) { |
| 15218 | failWebsocketConnection(handler, 1002, "Incorrect hash received in Sec-WebSocket-Accept header."); |
| 15219 | return; |
| 15220 | } |
| 15221 | const secExtension = response.headersList.get("Sec-WebSocket-Extensions"); |
| 15222 | let extensions; |
| 15223 | if (secExtension !== null) { |
| 15224 | extensions = parseExtensions(secExtension); |
| 15225 | if (!extensions.has("permessage-deflate")) { |
| 15226 | failWebsocketConnection(handler, 1002, "Sec-WebSocket-Extensions header does not match."); |
| 15227 | return; |
| 15228 | } |
| 15229 | } |
| 15230 | const secProtocol = response.headersList.get("Sec-WebSocket-Protocol"); |
| 15231 | if (secProtocol !== null) { |
| 15232 | const requestProtocols = getDecodeSplit("sec-websocket-protocol", request.headersList); |
| 15233 | if (!requestProtocols.includes(secProtocol)) { |
| 15234 | failWebsocketConnection(handler, 1002, "Protocol was not set in the opening handshake."); |
| 15235 | return; |
| 15236 | } |
| 15237 | } |
| 15238 | response.socket.on("data", handler.onSocketData); |
| 15239 | response.socket.on("close", handler.onSocketClose); |
| 15240 | response.socket.on("error", handler.onSocketError); |
| 15241 | handler.wasEverConnected = true; |
| 15242 | handler.onConnectionEstablished(response, extensions); |
| 15243 | } |
| 15244 | }); |
| 15245 | return controller; |
nothing calls this directly
no test coverage detected
searching dependent graphs…