Support permessage-deflate web socket extension (#2846)
This commit is contained in:
parent
f70a73bb89
commit
5a1f62a8fb
|
@ -120,7 +120,7 @@ export class Vscode {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public async handleWebSocket(socket: net.Socket, query: Query, _permessageDeflate: boolean): Promise<true> {
|
public async handleWebSocket(socket: net.Socket, query: Query, permessageDeflate: boolean): Promise<true> {
|
||||||
if (!query.reconnectionToken) {
|
if (!query.reconnectionToken) {
|
||||||
throw new Error('Reconnection token is missing from query parameters');
|
throw new Error('Reconnection token is missing from query parameters');
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,8 @@ export class Vscode {
|
||||||
reconnectionToken: <string>query.reconnectionToken,
|
reconnectionToken: <string>query.reconnectionToken,
|
||||||
reconnection: query.reconnection === 'true',
|
reconnection: query.reconnection === 'true',
|
||||||
skipWebSocketFrames: query.skipWebSocketFrames === 'true',
|
skipWebSocketFrames: query.skipWebSocketFrames === 'true',
|
||||||
// TODO: permessageDeflate,
|
permessageDeflate,
|
||||||
|
recordInflateBytes: permessageDeflate,
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
await this.connect(await protocol.handshake(), protocol);
|
await this.connect(await protocol.handshake(), protocol);
|
||||||
|
|
|
@ -199,16 +199,20 @@ wsRouter.ws("/", ensureAuthenticated, async (req) => {
|
||||||
.createHash("sha1")
|
.createHash("sha1")
|
||||||
.update(req.headers["sec-websocket-key"] + magic)
|
.update(req.headers["sec-websocket-key"] + magic)
|
||||||
.digest("base64")
|
.digest("base64")
|
||||||
req.ws.write(
|
|
||||||
[
|
const responseHeaders = [
|
||||||
"HTTP/1.1 101 Switching Protocols",
|
"HTTP/1.1 101 Switching Protocols",
|
||||||
"Upgrade: websocket",
|
"Upgrade: websocket",
|
||||||
"Connection: Upgrade",
|
"Connection: Upgrade",
|
||||||
`Sec-WebSocket-Accept: ${reply}`,
|
`Sec-WebSocket-Accept: ${reply}`,
|
||||||
].join("\r\n") + "\r\n\r\n",
|
]
|
||||||
)
|
|
||||||
// TODO: Parse this header properly. Currently unused so haven't bothered.
|
// TODO: Parse this header properly.
|
||||||
const extensions = req.headers["sec-websocket-extensions"]
|
const extensions = req.headers["sec-websocket-extensions"]
|
||||||
const permessageDeflate = extensions ? extensions.includes("permessage-deflate") : false
|
const permessageDeflate = extensions ? extensions.includes("permessage-deflate") : false
|
||||||
|
responseHeaders.push("Sec-WebSocket-Extensions: permessage-deflate; server_max_window_bits=15")
|
||||||
|
|
||||||
|
req.ws.write(responseHeaders.join("\r\n") + "\r\n\r\n")
|
||||||
|
|
||||||
await vscode.sendWebsocket(req.ws, req.query, permessageDeflate)
|
await vscode.sendWebsocket(req.ws, req.query, permessageDeflate)
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue