MCPcopy Index your code
hub / github.com/nodejs/node / processResponse

Function processResponse

deps/undici/undici.js:15188–15243  ·  view source on GitHub ↗
(response)

Source from the content-addressed store, hash-verified

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;

Callers

nothing calls this directly

Calls 8

hashMethod · 0.80
includesMethod · 0.80
failWebsocketConnectionFunction · 0.70
parseExtensionsFunction · 0.70
getDecodeSplitFunction · 0.70
getMethod · 0.65
hasMethod · 0.65
onMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…