From 7f1bce6550a1a6ea947f63ba98cfdb81e7ec88a3 Mon Sep 17 00:00:00 2001 From: Isla Koenigsknecht Date: Fri, 17 May 2024 16:30:18 -0400 Subject: [PATCH] More logging and improvements to connections --- packages/backend/src/nest/app.module.ts | 5 +++-- packages/backend/src/nest/libp2p/libp2p.service.ts | 5 ++++- .../backend/src/nest/websocketOverTor/index.ts | 14 ++++++++++++-- packages/desktop/package.json | 2 +- packages/mobile/ios/NodeJsMobile/NodeRunner.mm | 2 +- 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/packages/backend/src/nest/app.module.ts b/packages/backend/src/nest/app.module.ts index 01b421593..e575fb302 100644 --- a/packages/backend/src/nest/app.module.ts +++ b/packages/backend/src/nest/app.module.ts @@ -99,8 +99,9 @@ export class AppModule { allowedHeaders: ['authorization'], credentials: true, }, - pingInterval: 1000_000, - pingTimeout: 1000_000, + pingInterval: 10_000, + pingTimeout: 2_000, + connectTimeout: 60_000, }) io.engine.use((req, res, next) => { const authHeader = req.headers['authorization'] diff --git a/packages/backend/src/nest/libp2p/libp2p.service.ts b/packages/backend/src/nest/libp2p/libp2p.service.ts index 788d349f8..5b552217e 100644 --- a/packages/backend/src/nest/libp2p/libp2p.service.ts +++ b/packages/backend/src/nest/libp2p/libp2p.service.ts @@ -208,7 +208,10 @@ export class Libp2pService extends EventEmitter { }), ], dht: kadDHT(), - pubsub: gossipsub({ allowPublishToZeroPeers: true }), + pubsub: gossipsub({ + allowPublishToZeroPeers: true, + doPX: true, + }), }) } catch (err) { this.logger.error('Create libp2p:', err) diff --git a/packages/backend/src/nest/websocketOverTor/index.ts b/packages/backend/src/nest/websocketOverTor/index.ts index c0b116021..ef17b19e7 100644 --- a/packages/backend/src/nest/websocketOverTor/index.ts +++ b/packages/backend/src/nest/websocketOverTor/index.ts @@ -18,6 +18,7 @@ import { type ServerOptions, type WebSocketServer as ItWsWebsocketServer } from import { multiaddr } from '@multiformats/multiaddr' import { type MultiaddrConnection, type Connection } from '@libp2p/interface-connection' import logger from '../common/logger' +import { DuplexWebSocket } from 'it-ws/dist/src/duplex' const log = logger('libp2p:websockets') @@ -73,10 +74,11 @@ export class WebSockets extends EventEmitter { async dial(ma: Multiaddr, options: DialOptions) { let conn: Connection - let socket + let socket: DuplexWebSocket let maConn: MultiaddrConnection try { + log(`Connecting socket with ${ma.toString()}`) socket = await this._connect(ma, { websocket: { ...this._websocketOpts, @@ -88,6 +90,7 @@ export class WebSockets extends EventEmitter { throw e } try { + log(`Creating multiaddr connection from socket with ${ma.toString()}`) maConn = socketToMaConn(socket, ma, { signal: options.signal }) log('new outbound connection %s', maConn.remoteAddr) } catch (e) { @@ -96,6 +99,7 @@ export class WebSockets extends EventEmitter { } try { + log(`Upgrading outbound connection with ${maConn.remoteAddr.toString()}`) conn = await options.upgrader.upgradeOutbound(maConn) log('outbound connection %s upgraded', maConn.remoteAddr) return conn @@ -120,6 +124,7 @@ export class WebSockets extends EventEmitter { const myUri = `${toUri(ma)}/?remoteAddress=${encodeURIComponent(this.localAddress)}` + log(`Creating raw socket connection to ${ma.toString()}`) const rawSocket = connect(myUri, Object.assign({ binary: true }, options)) if (rawSocket.socket.on) { @@ -129,6 +134,7 @@ export class WebSockets extends EventEmitter { } if (!options.signal) { + log(`Waiting for socket connection to ${ma.toString()} with no abort signal`) await Promise.race([rawSocket.connected(), errorPromise.promise]) log(`${this.localAddress} connected %s`, ma) @@ -155,6 +161,7 @@ export class WebSockets extends EventEmitter { }) try { + log(`Waiting for socket connection to ${ma.toString()}`) await Promise.race([abort, errorPromise.promise, rawSocket.connected()]) } finally { options.signal.removeEventListener('abort', onAbort) @@ -200,8 +207,10 @@ export class WebSockets extends EventEmitter { if (!query.remoteAddress) return const remoteAddress = query.remoteAddress.toString() + const ma = multiaddr(remoteAddress) try { - maConn = socketToMaConn(stream, multiaddr(remoteAddress)) + log(`Creating multiaddr connection for inbound peer ${ma.toString()}`) + maConn = socketToMaConn(stream, ma) const peer = { id: PeerId.createFromB58String(remoteAddress.split('/p2p/')[1]), multiaddrs: [maConn.remoteAddr], @@ -214,6 +223,7 @@ export class WebSockets extends EventEmitter { } try { + log(`Upgrading inbound connection with ${maConn.remoteAddr.toString()}`) conn = await upgrader.upgradeInbound(maConn) } catch (err) { log.error('inbound connection failed to upgrade', err) diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 07f86bae9..d47552958 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -116,7 +116,7 @@ "build:renderer:prod": "webpack --config webpack/webpack.config.renderer.prod.js", "postBuild": "node scripts/postBuild.js", "prestart": "npm run build:main", - "start": "cross-env DEBUG='backend*,quiet*,state-manager*,desktop*,utils*,libp2p:websockets:listener:backend,libp2p:connection-manager:auto-dialler,libp2p:pnet' npm run start:renderer", + "start": "cross-env DEBUG='backend*,quiet*,state-manager*,desktop*,utils*,libp2p:websockets:listener:backend,libp2p:connection-manager:auto-dialler,libp2p:pnet,libp2p:upgrader' npm run start:renderer", "start:main": "cross-env NODE_ENV=development electron .", "start:renderer": "cross-env NODE_ENV=development webpack-dev-server --config webpack/webpack.config.renderer.dev.js", "storybook": "export NODE_OPTIONS=--openssl-legacy-provider && start-storybook -p 6006", diff --git a/packages/mobile/ios/NodeJsMobile/NodeRunner.mm b/packages/mobile/ios/NodeJsMobile/NodeRunner.mm index 35f909e79..8ee169bbf 100644 --- a/packages/mobile/ios/NodeJsMobile/NodeRunner.mm +++ b/packages/mobile/ios/NodeJsMobile/NodeRunner.mm @@ -205,7 +205,7 @@ - (void) startEngineWithArguments:(NSArray*)arguments:(NSString*)builtinModulesP nodePath = [nodePath stringByAppendingString:builtinModulesPath]; } setenv([@"NODE_PATH" UTF8String], (const char*)[nodePath UTF8String], 1); - setenv([@"DEBUG" UTF8String], "backend:*,state-manager:*,libp2p:pnet", 1); + setenv([@"DEBUG" UTF8String], "backend:*,state-manager:*,libp2p:websockets:listener:backend,libp2p:connection-manager:auto-dialler,libp2p:pnet,libp2p:upgrader", 1); int c_arguments_size=0;