MCPcopy
hub / github.com/socketio/socket.io / _maybeUpgrade

Method _maybeUpgrade

packages/engine.io/lib/socket.ts:293–380  ·  view source on GitHub ↗
(transport: Transport)

Source from the content-addressed store, hash-verified

291 * @private
292 */
293 /* private */ _maybeUpgrade(transport: Transport) {
294 debug(
295 'might upgrade socket transport from "%s" to "%s"',
296 this.transport.name,
297 transport.name,
298 );
299
300 this.upgrading = true;
301
302 // set transport upgrade timer
303 const upgradeTimeoutTimer = setTimeout(() => {
304 debug("client did not complete upgrade - closing transport");
305 cleanup();
306 if ("open" === transport.readyState) {
307 transport.close();
308 }
309 }, this.server.opts.upgradeTimeout);
310
311 let checkIntervalTimer;
312
313 const onPacket = (packet) => {
314 if ("ping" === packet.type && "probe" === packet.data) {
315 debug("got probe ping packet, sending pong");
316 transport.send([{ type: "pong", data: "probe" }]);
317 this.emit("upgrading", transport);
318 clearInterval(checkIntervalTimer);
319 checkIntervalTimer = setInterval(check, 100);
320 } else if ("upgrade" === packet.type && this.readyState !== "closed") {
321 debug("got upgrade packet - upgrading");
322 cleanup();
323 this.transport.discard();
324 this.upgraded = true;
325 this.clearTransport();
326 this.setTransport(transport);
327 this.emit("upgrade", transport);
328 this.flush();
329 if (this.readyState === "closing") {
330 transport.close(() => {
331 this.onClose("forced close");
332 });
333 }
334 } else {
335 cleanup();
336 transport.close();
337 }
338 };
339
340 // we force a polling cycle to ensure a fast upgrade
341 const check = () => {
342 if ("polling" === this.transport.name && this.transport.writable) {
343 debug("writing a noop packet to polling for fast upgrade");
344 this.transport.send([{ type: "noop" }]);
345 }
346 };
347
348 const cleanup = () => {
349 this.upgrading = false;
350

Callers 3

callbackMethod · 0.80
onWebTransportSessionFunction · 0.80
onWebSocketMethod · 0.80

Calls 4

debugFunction · 0.85
cleanupFunction · 0.85
closeMethod · 0.45
onMethod · 0.45

Tested by

no test coverage detected