* Handles an Engine.IO HTTP Upgrade.
(
req: IncomingMessage,
socket: Duplex,
upgradeHead: Buffer,
)
| 829 | * Handles an Engine.IO HTTP Upgrade. |
| 830 | */ |
| 831 | public handleUpgrade( |
| 832 | req: IncomingMessage, |
| 833 | socket: Duplex, |
| 834 | upgradeHead: Buffer, |
| 835 | ) { |
| 836 | const engineRequest = req as EngineRequest; |
| 837 | |
| 838 | this.prepare(engineRequest); |
| 839 | |
| 840 | const res = new WebSocketResponse(engineRequest, socket); |
| 841 | const callback: ErrorCallback = (errorCode, errorContext) => { |
| 842 | if (errorCode !== undefined) { |
| 843 | this.emit("connection_error", { |
| 844 | req: engineRequest, |
| 845 | code: errorCode, |
| 846 | message: Server.errorMessages[errorCode], |
| 847 | context: errorContext, |
| 848 | }); |
| 849 | abortUpgrade(socket, errorCode, errorContext); |
| 850 | return; |
| 851 | } |
| 852 | |
| 853 | const head = Buffer.from(upgradeHead); |
| 854 | upgradeHead = null; |
| 855 | |
| 856 | // some middlewares (like express-session) wait for the writeHead() call to flush their headers |
| 857 | // see https://github.com/expressjs/session/blob/1010fadc2f071ddf2add94235d72224cf65159c6/index.js#L220-L244 |
| 858 | res.writeHead(); |
| 859 | |
| 860 | // delegate to ws |
| 861 | this.ws.handleUpgrade(engineRequest, socket, head, (websocket) => { |
| 862 | this.onWebSocket(engineRequest, socket, websocket); |
| 863 | }); |
| 864 | }; |
| 865 | |
| 866 | this._applyMiddlewares( |
| 867 | engineRequest, |
| 868 | res as unknown as ServerResponse, |
| 869 | (err) => { |
| 870 | if (err) { |
| 871 | callback(Server.errors.BAD_REQUEST, { name: "MIDDLEWARE_FAILURE" }); |
| 872 | } else { |
| 873 | this.verify(engineRequest, true, callback); |
| 874 | } |
| 875 | }, |
| 876 | ); |
| 877 | } |
| 878 | |
| 879 | /** |
| 880 | * Called upon a ws.io connection. |
no test coverage detected