Skip to content

Commit 5a1f62a

Browse files
authored
Support permessage-deflate web socket extension (#2846)
1 parent f70a73b commit 5a1f62a

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

lib/vscode/src/vs/server/node/server.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -120,15 +120,16 @@ export class Vscode {
120120
};
121121
}
122122

123-
public async handleWebSocket(socket: net.Socket, query: Query, _permessageDeflate: boolean): Promise<true> {
123+
public async handleWebSocket(socket: net.Socket, query: Query, permessageDeflate: boolean): Promise<true> {
124124
if (!query.reconnectionToken) {
125125
throw new Error('Reconnection token is missing from query parameters');
126126
}
127127
const protocol = new Protocol(socket, {
128128
reconnectionToken: <string>query.reconnectionToken,
129129
reconnection: query.reconnection === 'true',
130130
skipWebSocketFrames: query.skipWebSocketFrames === 'true',
131-
// TODO: permessageDeflate,
131+
permessageDeflate,
132+
recordInflateBytes: permessageDeflate,
132133
});
133134
try {
134135
await this.connect(await protocol.handshake(), protocol);

src/node/routes/vscode.ts

+13-9
Original file line numberDiff line numberDiff line change
@@ -199,16 +199,20 @@ wsRouter.ws("/", ensureAuthenticated, async (req) => {
199199
.createHash("sha1")
200200
.update(req.headers["sec-websocket-key"] + magic)
201201
.digest("base64")
202-
req.ws.write(
203-
[
204-
"HTTP/1.1 101 Switching Protocols",
205-
"Upgrade: websocket",
206-
"Connection: Upgrade",
207-
`Sec-WebSocket-Accept: ${reply}`,
208-
].join("\r\n") + "\r\n\r\n",
209-
)
210-
// TODO: Parse this header properly. Currently unused so haven't bothered.
202+
203+
const responseHeaders = [
204+
"HTTP/1.1 101 Switching Protocols",
205+
"Upgrade: websocket",
206+
"Connection: Upgrade",
207+
`Sec-WebSocket-Accept: ${reply}`,
208+
]
209+
210+
// TODO: Parse this header properly.
211211
const extensions = req.headers["sec-websocket-extensions"]
212212
const permessageDeflate = extensions ? extensions.includes("permessage-deflate") : false
213+
responseHeaders.push("Sec-WebSocket-Extensions: permessage-deflate; server_max_window_bits=15")
214+
215+
req.ws.write(responseHeaders.join("\r\n") + "\r\n\r\n")
216+
213217
await vscode.sendWebsocket(req.ws, req.query, permessageDeflate)
214218
})

0 commit comments

Comments
 (0)