@streamr/dht 100.0.0-pretestnet.3 → 100.0.0-pretestnet.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/connection/ConnectionLockRpcLocal.js +1 -1
- package/dist/src/connection/ConnectionLockRpcLocal.js.map +1 -1
- package/dist/src/connection/ConnectionLockRpcRemote.js +3 -3
- package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
- package/dist/src/connection/ConnectionManager.d.ts +4 -8
- package/dist/src/connection/ConnectionManager.js +30 -31
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/connection/ConnectivityChecker.d.ts +0 -4
- package/dist/src/connection/ConnectivityChecker.js +13 -18
- package/dist/src/connection/ConnectivityChecker.js.map +1 -1
- package/dist/src/connection/ConnectorFacade.d.ts +6 -3
- package/dist/src/connection/ConnectorFacade.js +33 -23
- package/dist/src/connection/ConnectorFacade.js.map +1 -1
- package/dist/src/connection/Handshaker.d.ts +6 -6
- package/dist/src/connection/Handshaker.js +10 -13
- package/dist/src/connection/Handshaker.js.map +1 -1
- package/dist/src/connection/ManagedConnection.d.ts +7 -10
- package/dist/src/connection/ManagedConnection.js +43 -79
- package/dist/src/connection/ManagedConnection.js.map +1 -1
- package/dist/src/connection/ManagedWebrtcConnection.js.map +1 -1
- package/dist/src/connection/simulator/SimulatorConnection.js +16 -15
- package/dist/src/connection/simulator/SimulatorConnection.js.map +1 -1
- package/dist/src/connection/simulator/SimulatorConnector.d.ts +2 -2
- package/dist/src/connection/simulator/SimulatorConnector.js +10 -11
- package/dist/src/connection/simulator/SimulatorConnector.js.map +1 -1
- package/dist/src/connection/webrtc/NodeWebrtcConnection.js +8 -9
- package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -1
- package/dist/src/connection/webrtc/WebrtcConnector.d.ts +1 -1
- package/dist/src/connection/webrtc/WebrtcConnector.js +6 -6
- package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -1
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.d.ts +1 -1
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js +4 -4
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js.map +1 -1
- package/dist/src/connection/websocket/ClientWebsocket.js +3 -0
- package/dist/src/connection/websocket/ClientWebsocket.js.map +1 -1
- package/dist/src/connection/websocket/ServerWebsocket.js +2 -0
- package/dist/src/connection/websocket/ServerWebsocket.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnector.d.ts +5 -5
- package/dist/src/connection/websocket/WebsocketConnector.js +37 -35
- package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.d.ts +1 -1
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js +1 -1
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js +1 -1
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js.map +1 -1
- package/dist/src/dht/DhtNode.js +18 -15
- package/dist/src/dht/DhtNode.js.map +1 -1
- package/dist/src/dht/DhtNodeRpcLocal.js +2 -2
- package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -1
- package/dist/src/dht/DhtNodeRpcRemote.js +4 -4
- package/dist/src/dht/DhtNodeRpcRemote.js.map +1 -1
- package/dist/src/dht/discovery/DiscoverySession.js +1 -1
- package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
- package/dist/src/dht/discovery/PeerDiscovery.js +1 -1
- package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
- package/dist/src/dht/find/FindRpcLocal.js +2 -2
- package/dist/src/dht/find/FindRpcLocal.js.map +1 -1
- package/dist/src/dht/routing/FindRpcRemote.js +3 -3
- package/dist/src/dht/routing/FindRpcRemote.js.map +1 -1
- package/dist/src/dht/routing/Router.js +3 -3
- package/dist/src/dht/routing/Router.js.map +1 -1
- package/dist/src/dht/routing/RouterRpcLocal.js +4 -4
- package/dist/src/dht/routing/RouterRpcLocal.js.map +1 -1
- package/dist/src/dht/routing/RouterRpcRemote.js +6 -6
- package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -1
- package/dist/src/dht/routing/RoutingSession.js +1 -1
- package/dist/src/dht/routing/RoutingSession.js.map +1 -1
- package/dist/src/dht/store/StoreRpcLocal.js +1 -1
- package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
- package/dist/src/dht/store/StoreRpcRemote.js +3 -3
- package/dist/src/dht/store/StoreRpcRemote.js.map +1 -1
- package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +1 -0
- package/dist/src/helpers/peerIdFromPeerDescriptor.js +7 -1
- package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +21 -12
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +20 -7
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/package.json +5 -5
- package/protos/DhtRpc.proto +9 -5
- package/src/connection/ConnectionLockRpcLocal.ts +2 -2
- package/src/connection/ConnectionLockRpcRemote.ts +4 -5
- package/src/connection/ConnectionManager.ts +30 -36
- package/src/connection/ConnectivityChecker.ts +13 -15
- package/src/connection/ConnectorFacade.ts +36 -25
- package/src/connection/Handshaker.ts +15 -18
- package/src/connection/ManagedConnection.ts +63 -87
- package/src/connection/ManagedWebrtcConnection.ts +4 -2
- package/src/connection/simulator/SimulatorConnection.ts +17 -16
- package/src/connection/simulator/SimulatorConnector.ts +12 -13
- package/src/connection/webrtc/BrowserWebrtcConnection.ts +2 -2
- package/src/connection/webrtc/NodeWebrtcConnection.ts +9 -10
- package/src/connection/webrtc/WebrtcConnector.ts +7 -6
- package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +5 -5
- package/src/connection/websocket/ClientWebsocket.ts +3 -0
- package/src/connection/websocket/ServerWebsocket.ts +2 -0
- package/src/connection/websocket/WebsocketConnector.ts +63 -39
- package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +2 -2
- package/src/connection/websocket/WebsocketConnectorRpcRemote.ts +2 -2
- package/src/dht/DhtNode.ts +24 -16
- package/src/dht/DhtNodeRpcLocal.ts +3 -3
- package/src/dht/DhtNodeRpcRemote.ts +5 -5
- package/src/dht/discovery/DiscoverySession.ts +2 -2
- package/src/dht/discovery/PeerDiscovery.ts +2 -2
- package/src/dht/find/FindRpcLocal.ts +3 -3
- package/src/dht/routing/FindRpcRemote.ts +4 -4
- package/src/dht/routing/Router.ts +10 -5
- package/src/dht/routing/RouterRpcLocal.ts +5 -5
- package/src/dht/routing/RouterRpcRemote.ts +7 -8
- package/src/dht/routing/RoutingSession.ts +2 -2
- package/src/dht/store/StoreRpcLocal.ts +2 -2
- package/src/dht/store/StoreRpcRemote.ts +4 -4
- package/src/helpers/peerIdFromPeerDescriptor.ts +6 -0
- package/src/proto/packages/dht/protos/DhtRpc.ts +25 -17
- package/test/benchmark/Find.test.ts +2 -2
- package/test/benchmark/KademliaCorrectness.test.ts +2 -2
- package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +4 -3
- package/test/integration/ConnectionLocking.test.ts +7 -4
- package/test/integration/ConnectionManager.test.ts +72 -4
- package/test/integration/Find.test.ts +3 -6
- package/test/integration/MigrateData.test.ts +4 -4
- package/test/integration/MultipleEntryPointJoining.test.ts +2 -2
- package/test/integration/ScaleDownDht.test.ts +4 -4
- package/test/integration/Store.test.ts +3 -6
- package/test/integration/StoreAndDelete.test.ts +3 -6
- package/test/integration/WebrtcConnectionManagement.test.ts +1 -1
- package/test/utils/utils.ts +8 -2
|
@@ -17,6 +17,7 @@ import { ManagedConnection } from '../ManagedConnection'
|
|
|
17
17
|
import { toProtoRpcClient } from '@streamr/proto-rpc'
|
|
18
18
|
import {
|
|
19
19
|
areEqualPeerDescriptors,
|
|
20
|
+
getNodeIdFromPeerDescriptor,
|
|
20
21
|
keyFromPeerDescriptor,
|
|
21
22
|
peerIdFromPeerDescriptor
|
|
22
23
|
} from '../../helpers/peerIdFromPeerDescriptor'
|
|
@@ -67,23 +68,23 @@ export class WebrtcConnector {
|
|
|
67
68
|
|
|
68
69
|
constructor(
|
|
69
70
|
config: WebrtcConnectorConfig,
|
|
70
|
-
|
|
71
|
+
onNewConnection: (connection: ManagedConnection) => boolean
|
|
71
72
|
) {
|
|
72
73
|
this.config = config
|
|
73
74
|
this.iceServers = config.iceServers ?? []
|
|
74
75
|
this.rpcCommunicator = new ListeningRpcCommunicator(WebrtcConnector.WEBRTC_CONNECTOR_SERVICE_ID, config.transport, {
|
|
75
76
|
rpcRequestTimeout: 15000
|
|
76
77
|
})
|
|
77
|
-
this.registerLocalRpcMethods(config,
|
|
78
|
+
this.registerLocalRpcMethods(config, onNewConnection)
|
|
78
79
|
}
|
|
79
80
|
|
|
80
81
|
private registerLocalRpcMethods(
|
|
81
82
|
config: WebrtcConnectorConfig,
|
|
82
|
-
|
|
83
|
+
onNewConnection: (connection: ManagedConnection) => boolean
|
|
83
84
|
) {
|
|
84
85
|
const localRpc = new WebrtcConnectorRpcLocal({
|
|
85
86
|
connect: (targetPeerDescriptor: PeerDescriptor) => this.connect(targetPeerDescriptor),
|
|
86
|
-
|
|
87
|
+
onNewConnection,
|
|
87
88
|
ongoingConnectAttempts: this.ongoingConnectAttempts,
|
|
88
89
|
rpcCommunicator: this.rpcCommunicator,
|
|
89
90
|
getLocalPeerDescriptor: () => this.localPeerDescriptor!,
|
|
@@ -132,7 +133,7 @@ export class WebrtcConnector {
|
|
|
132
133
|
throw new Err.CannotConnectToSelf('Cannot open WebRTC Connection to self')
|
|
133
134
|
}
|
|
134
135
|
|
|
135
|
-
logger.trace(`Opening WebRTC connection to ${
|
|
136
|
+
logger.trace(`Opening WebRTC connection to ${getNodeIdFromPeerDescriptor(targetPeerDescriptor)}`)
|
|
136
137
|
|
|
137
138
|
const peerKey = keyFromPeerDescriptor(targetPeerDescriptor)
|
|
138
139
|
const existingConnection = this.ongoingConnectAttempts.get(peerKey)
|
|
@@ -158,7 +159,7 @@ export class WebrtcConnector {
|
|
|
158
159
|
managedConnection = new ManagedWebrtcConnection(this.localPeerDescriptor!, undefined, connection)
|
|
159
160
|
}
|
|
160
161
|
|
|
161
|
-
managedConnection.
|
|
162
|
+
managedConnection.setRemotePeerDescriptor(targetPeerDescriptor)
|
|
162
163
|
|
|
163
164
|
this.ongoingConnectAttempts.set(keyFromPeerDescriptor(targetPeerDescriptor), managedConnection)
|
|
164
165
|
|
|
@@ -24,7 +24,7 @@ const logger = new Logger(module)
|
|
|
24
24
|
|
|
25
25
|
interface WebrtcConnectorRpcLocalConfig {
|
|
26
26
|
connect: (targetPeerDescriptor: PeerDescriptor) => ManagedConnection
|
|
27
|
-
|
|
27
|
+
onNewConnection: (connection: ManagedConnection) => boolean
|
|
28
28
|
// TODO pass accessor methods instead of passing a mutable entity
|
|
29
29
|
ongoingConnectAttempts: Map<PeerIDKey, ManagedWebrtcConnection>
|
|
30
30
|
rpcCommunicator: ListeningRpcCommunicator
|
|
@@ -46,8 +46,8 @@ export class WebrtcConnectorRpcLocal implements IWebrtcConnectorRpc {
|
|
|
46
46
|
return {}
|
|
47
47
|
}
|
|
48
48
|
const managedConnection = this.config.connect(targetPeerDescriptor)
|
|
49
|
-
managedConnection.
|
|
50
|
-
this.config.
|
|
49
|
+
managedConnection.setRemotePeerDescriptor(targetPeerDescriptor)
|
|
50
|
+
this.config.onNewConnection(managedConnection)
|
|
51
51
|
return {}
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -60,9 +60,9 @@ export class WebrtcConnectorRpcLocal implements IWebrtcConnectorRpc {
|
|
|
60
60
|
if (!managedConnection) {
|
|
61
61
|
connection = new NodeWebrtcConnection({ remotePeerDescriptor: remotePeer })
|
|
62
62
|
managedConnection = new ManagedWebrtcConnection(this.config.getLocalPeerDescriptor(), undefined, connection)
|
|
63
|
-
managedConnection.
|
|
63
|
+
managedConnection.setRemotePeerDescriptor(remotePeer)
|
|
64
64
|
this.config.ongoingConnectAttempts.set(peerKey, managedConnection)
|
|
65
|
-
this.config.
|
|
65
|
+
this.config.onNewConnection(managedConnection)
|
|
66
66
|
const remoteConnector = new WebrtcConnectorRpcRemote(
|
|
67
67
|
this.config.getLocalPeerDescriptor(),
|
|
68
68
|
remotePeer,
|
|
@@ -87,6 +87,8 @@ export class ClientWebsocket extends EventEmitter<ConnectionEvents> implements I
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
public async close(gracefulLeave: boolean): Promise<void> {
|
|
90
|
+
this.emit('disconnected', gracefulLeave, undefined, 'close() called')
|
|
91
|
+
this.removeAllListeners()
|
|
90
92
|
if (!this.destroyed) {
|
|
91
93
|
logger.trace(`Closing socket for connection ${this.connectionId.toString()}`)
|
|
92
94
|
this.socket?.close(gracefulLeave === true ? GOING_AWAY : undefined)
|
|
@@ -105,6 +107,7 @@ export class ClientWebsocket extends EventEmitter<ConnectionEvents> implements I
|
|
|
105
107
|
}
|
|
106
108
|
|
|
107
109
|
public destroy(): void {
|
|
110
|
+
logger.trace('destroy() a connection')
|
|
108
111
|
if (!this.destroyed) {
|
|
109
112
|
this.removeAllListeners()
|
|
110
113
|
if (this.socket) {
|
|
@@ -80,6 +80,8 @@ export class ServerWebsocket extends EventEmitter<ConnectionEvents> implements I
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
public async close(gracefulLeave: boolean): Promise<void> {
|
|
83
|
+
this.emit('disconnected', gracefulLeave, undefined, 'close() called')
|
|
84
|
+
this.removeAllListeners()
|
|
83
85
|
if (!this.stopped) {
|
|
84
86
|
this.socket?.close(gracefulLeave === true ? GOING_AWAY : undefined)
|
|
85
87
|
} else {
|
|
@@ -7,6 +7,7 @@ import { WebsocketConnectorRpcRemote } from './WebsocketConnectorRpcRemote'
|
|
|
7
7
|
import {
|
|
8
8
|
ConnectivityMethod,
|
|
9
9
|
ConnectivityResponse,
|
|
10
|
+
HandshakeError,
|
|
10
11
|
PeerDescriptor,
|
|
11
12
|
WebsocketConnectionRequest,
|
|
12
13
|
WebsocketConnectionResponse
|
|
@@ -21,7 +22,7 @@ import { PeerIDKey } from '../../helpers/PeerID'
|
|
|
21
22
|
import { ServerWebsocket } from './ServerWebsocket'
|
|
22
23
|
import { toProtoRpcClient } from '@streamr/proto-rpc'
|
|
23
24
|
import { Handshaker } from '../Handshaker'
|
|
24
|
-
import { keyFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
25
|
+
import { areEqualPeerDescriptors, keyFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
25
26
|
import { ParsedUrlQuery } from 'querystring'
|
|
26
27
|
import { range, sample } from 'lodash'
|
|
27
28
|
import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
|
|
@@ -30,16 +31,18 @@ import { WebsocketServerStartError } from '../../helpers/errors'
|
|
|
30
31
|
import { AutoCertifierClientFacade } from './AutoCertifierClientFacade'
|
|
31
32
|
const logger = new Logger(module)
|
|
32
33
|
|
|
33
|
-
export
|
|
34
|
-
|
|
34
|
+
export type Action = 'connectivityRequest' | 'connectivityProbe'
|
|
35
|
+
|
|
36
|
+
export const connectivityMethodToWebsocketUrl = (ws: ConnectivityMethod, action?: Action): string => {
|
|
37
|
+
return (ws.tls ? 'wss://' : 'ws://') + ws.host + ':' + ws.port + ((action !== undefined) ? '?action=' + action : '')
|
|
35
38
|
}
|
|
36
39
|
|
|
37
40
|
const ENTRY_POINT_CONNECTION_ATTEMPTS = 5
|
|
38
41
|
|
|
39
|
-
interface WebsocketConnectorConfig {
|
|
42
|
+
export interface WebsocketConnectorConfig {
|
|
40
43
|
transport: ITransport
|
|
41
44
|
canConnect: (peerDescriptor: PeerDescriptor) => boolean
|
|
42
|
-
|
|
45
|
+
onNewConnection: (connection: ManagedConnection) => boolean
|
|
43
46
|
portRange?: PortRange
|
|
44
47
|
maxMessageSize?: number
|
|
45
48
|
host?: string
|
|
@@ -58,7 +61,7 @@ export class WebsocketConnector {
|
|
|
58
61
|
private readonly websocketServer?: WebsocketServer
|
|
59
62
|
private connectivityChecker?: ConnectivityChecker
|
|
60
63
|
private readonly ongoingConnectRequests: Map<PeerIDKey, ManagedConnection> = new Map()
|
|
61
|
-
private
|
|
64
|
+
private onNewConnection: (connection: ManagedConnection) => boolean
|
|
62
65
|
private host?: string
|
|
63
66
|
private readonly entrypoints?: PeerDescriptor[]
|
|
64
67
|
private readonly tlsCertificate?: TlsCertificate
|
|
@@ -79,7 +82,7 @@ export class WebsocketConnector {
|
|
|
79
82
|
maxMessageSize: config.maxMessageSize,
|
|
80
83
|
enableTls: config.serverEnableTls
|
|
81
84
|
}) : undefined
|
|
82
|
-
this.
|
|
85
|
+
this.onNewConnection = config.onNewConnection
|
|
83
86
|
this.host = config.host
|
|
84
87
|
this.entrypoints = config.entrypoints
|
|
85
88
|
this.tlsCertificate = config.tlsCertificate
|
|
@@ -97,7 +100,7 @@ export class WebsocketConnector {
|
|
|
97
100
|
const rpcLocal = new WebsocketConnectorRpcLocal({
|
|
98
101
|
canConnect: (peerDescriptor: PeerDescriptor) => config.canConnect(peerDescriptor),
|
|
99
102
|
connect: (targetPeerDescriptor: PeerDescriptor) => this.connect(targetPeerDescriptor),
|
|
100
|
-
|
|
103
|
+
onNewConnection: (connection: ManagedConnection) => config.onNewConnection(connection),
|
|
101
104
|
abortSignal: this.abortController.signal
|
|
102
105
|
})
|
|
103
106
|
this.rpcCommunicator.registerRpcMethod(
|
|
@@ -116,8 +119,8 @@ export class WebsocketConnector {
|
|
|
116
119
|
|
|
117
120
|
private attachHandshaker(connection: IConnection) {
|
|
118
121
|
const handshaker = new Handshaker(this.localPeerDescriptor!, connection)
|
|
119
|
-
handshaker.once('handshakeRequest', (
|
|
120
|
-
this.onServerSocketHandshakeRequest(
|
|
122
|
+
handshaker.once('handshakeRequest', (localPeerDescriptor: PeerDescriptor, remotePeerDescriptor?: PeerDescriptor) => {
|
|
123
|
+
this.onServerSocketHandshakeRequest(localPeerDescriptor, connection, remotePeerDescriptor)
|
|
121
124
|
})
|
|
122
125
|
}
|
|
123
126
|
|
|
@@ -143,19 +146,14 @@ export class WebsocketConnector {
|
|
|
143
146
|
public async start(): Promise<void> {
|
|
144
147
|
if (!this.abortController.signal.aborted && this.websocketServer) {
|
|
145
148
|
this.websocketServer.on('connected', (connection: IConnection) => {
|
|
146
|
-
|
|
147
149
|
const serverSocket = connection as unknown as ServerWebsocket
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
logger.trace('Received connectivity probe connection from ' + serverSocket.getRemoteAddress())
|
|
156
|
-
} else {
|
|
157
|
-
this.attachHandshaker(connection)
|
|
158
|
-
}
|
|
150
|
+
const query = serverSocket.resourceURL.query as unknown as (ParsedUrlQuery | null)
|
|
151
|
+
const action = query?.action as (Action | undefined)
|
|
152
|
+
logger.trace('WebSocket client connected', { action, remoteAddress: serverSocket.getRemoteAddress() })
|
|
153
|
+
if (action === 'connectivityRequest') {
|
|
154
|
+
this.connectivityChecker!.listenToIncomingConnectivityRequests(serverSocket)
|
|
155
|
+
} else if (action === 'connectivityProbe') {
|
|
156
|
+
// no-op
|
|
159
157
|
} else {
|
|
160
158
|
this.attachHandshaker(connection)
|
|
161
159
|
}
|
|
@@ -190,7 +188,7 @@ export class WebsocketConnector {
|
|
|
190
188
|
}
|
|
191
189
|
return preconfiguredConnectivityResponse
|
|
192
190
|
} else {
|
|
193
|
-
// Do real connectivity checking
|
|
191
|
+
// Do real connectivity checking
|
|
194
192
|
return await this.connectivityChecker!.sendConnectivityRequest(entryPoint, selfSigned)
|
|
195
193
|
}
|
|
196
194
|
}
|
|
@@ -225,8 +223,14 @@ export class WebsocketConnector {
|
|
|
225
223
|
|
|
226
224
|
const url = connectivityMethodToWebsocketUrl(targetPeerDescriptor.websocket!)
|
|
227
225
|
|
|
228
|
-
const managedConnection = new ManagedConnection(
|
|
229
|
-
|
|
226
|
+
const managedConnection = new ManagedConnection(
|
|
227
|
+
this.localPeerDescriptor!,
|
|
228
|
+
ConnectionType.WEBSOCKET_CLIENT,
|
|
229
|
+
socket,
|
|
230
|
+
undefined,
|
|
231
|
+
targetPeerDescriptor
|
|
232
|
+
)
|
|
233
|
+
managedConnection.setRemotePeerDescriptor(targetPeerDescriptor)
|
|
230
234
|
|
|
231
235
|
this.connectingConnections.set(keyFromPeerDescriptor(targetPeerDescriptor), managedConnection)
|
|
232
236
|
|
|
@@ -255,32 +259,52 @@ export class WebsocketConnector {
|
|
|
255
259
|
)
|
|
256
260
|
remoteConnector.requestConnection(localPeerDescriptor.websocket!.host, localPeerDescriptor.websocket!.port)
|
|
257
261
|
})
|
|
258
|
-
const managedConnection = new ManagedConnection(
|
|
262
|
+
const managedConnection = new ManagedConnection(
|
|
263
|
+
this.localPeerDescriptor!,
|
|
264
|
+
ConnectionType.WEBSOCKET_SERVER,
|
|
265
|
+
undefined,
|
|
266
|
+
undefined,
|
|
267
|
+
targetPeerDescriptor
|
|
268
|
+
)
|
|
259
269
|
managedConnection.on('disconnected', () => this.ongoingConnectRequests.delete(keyFromPeerDescriptor(targetPeerDescriptor)))
|
|
260
|
-
managedConnection.
|
|
270
|
+
managedConnection.setRemotePeerDescriptor(targetPeerDescriptor)
|
|
261
271
|
this.ongoingConnectRequests.set(keyFromPeerDescriptor(targetPeerDescriptor), managedConnection)
|
|
262
272
|
return managedConnection
|
|
263
273
|
}
|
|
264
274
|
|
|
265
|
-
private onServerSocketHandshakeRequest(
|
|
266
|
-
|
|
267
|
-
|
|
275
|
+
private onServerSocketHandshakeRequest(
|
|
276
|
+
sourcePeerDescriptor: PeerDescriptor,
|
|
277
|
+
serverWebsocket: IConnection,
|
|
278
|
+
targetPeerDescriptor?: PeerDescriptor
|
|
279
|
+
) {
|
|
280
|
+
const peerId = peerIdFromPeerDescriptor(sourcePeerDescriptor)
|
|
268
281
|
|
|
269
282
|
if (this.ongoingConnectRequests.has(peerId.toKey())) {
|
|
270
|
-
const
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
283
|
+
const ongoingConnectRequest = this.ongoingConnectRequests.get(peerId.toKey())!
|
|
284
|
+
ongoingConnectRequest.attachImplementation(serverWebsocket)
|
|
285
|
+
if (targetPeerDescriptor && !areEqualPeerDescriptors(this.localPeerDescriptor!, targetPeerDescriptor)) {
|
|
286
|
+
ongoingConnectRequest.rejectHandshake(HandshakeError.INVALID_TARGET_PEER_DESCRIPTOR)
|
|
287
|
+
} else {
|
|
288
|
+
ongoingConnectRequest.acceptHandshake()
|
|
289
|
+
this.ongoingConnectRequests.delete(peerId.toKey())
|
|
290
|
+
}
|
|
274
291
|
} else {
|
|
275
|
-
const managedConnection = new ManagedConnection(
|
|
292
|
+
const managedConnection = new ManagedConnection(
|
|
293
|
+
this.localPeerDescriptor!,
|
|
294
|
+
ConnectionType.WEBSOCKET_SERVER,
|
|
295
|
+
undefined,
|
|
296
|
+
serverWebsocket,
|
|
297
|
+
targetPeerDescriptor
|
|
298
|
+
)
|
|
276
299
|
|
|
277
|
-
managedConnection.
|
|
300
|
+
managedConnection.setRemotePeerDescriptor(sourcePeerDescriptor)
|
|
278
301
|
|
|
279
|
-
if (this.
|
|
302
|
+
if (targetPeerDescriptor && !areEqualPeerDescriptors(this.localPeerDescriptor!, targetPeerDescriptor)) {
|
|
303
|
+
managedConnection.rejectHandshake(HandshakeError.INVALID_TARGET_PEER_DESCRIPTOR)
|
|
304
|
+
} else if (this.onNewConnection(managedConnection)) {
|
|
280
305
|
managedConnection.acceptHandshake()
|
|
281
306
|
} else {
|
|
282
|
-
managedConnection.rejectHandshake(
|
|
283
|
-
managedConnection.destroy()
|
|
307
|
+
managedConnection.rejectHandshake(HandshakeError.DUPLICATE_CONNECTION)
|
|
284
308
|
}
|
|
285
309
|
}
|
|
286
310
|
}
|
|
@@ -11,7 +11,7 @@ import { ManagedConnection } from '../ManagedConnection'
|
|
|
11
11
|
interface WebsocketConnectorRpcLocalConfig {
|
|
12
12
|
canConnect: (peerDescriptor: PeerDescriptor) => boolean
|
|
13
13
|
connect: (targetPeerDescriptor: PeerDescriptor) => ManagedConnection
|
|
14
|
-
|
|
14
|
+
onNewConnection: (connection: ManagedConnection) => boolean
|
|
15
15
|
abortSignal: AbortSignal
|
|
16
16
|
}
|
|
17
17
|
|
|
@@ -31,7 +31,7 @@ export class WebsocketConnectorRpcLocal implements IWebsocketConnectorRpc {
|
|
|
31
31
|
return
|
|
32
32
|
}
|
|
33
33
|
const connection = this.config.connect(senderPeerDescriptor)
|
|
34
|
-
this.config.
|
|
34
|
+
this.config.onNewConnection(connection)
|
|
35
35
|
})
|
|
36
36
|
return { accepted: true }
|
|
37
37
|
} else {
|
|
@@ -6,7 +6,7 @@ import { IWebsocketConnectorRpcClient } from '../../proto/packages/dht/protos/Dh
|
|
|
6
6
|
import { Logger } from '@streamr/utils'
|
|
7
7
|
import * as Err from '../../helpers/errors'
|
|
8
8
|
import { ProtoRpcClient } from '@streamr/proto-rpc'
|
|
9
|
-
import {
|
|
9
|
+
import { getNodeIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
10
10
|
import { Remote } from '../../dht/contact/Remote'
|
|
11
11
|
|
|
12
12
|
const logger = new Logger(module)
|
|
@@ -22,7 +22,7 @@ export class WebsocketConnectorRpcRemote extends Remote<IWebsocketConnectorRpcCl
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
async requestConnection(ip: string, port: number): Promise<boolean> {
|
|
25
|
-
logger.trace(`Requesting WebSocket connection from ${
|
|
25
|
+
logger.trace(`Requesting WebSocket connection from ${getNodeIdFromPeerDescriptor(this.getLocalPeerDescriptor())}`)
|
|
26
26
|
const request: WebsocketConnectionRequest = {
|
|
27
27
|
ip,
|
|
28
28
|
port
|
package/src/dht/DhtNode.ts
CHANGED
|
@@ -33,7 +33,12 @@ import {
|
|
|
33
33
|
import { toProtoRpcClient } from '@streamr/proto-rpc'
|
|
34
34
|
import { RandomContactList } from './contact/RandomContactList'
|
|
35
35
|
import { Any } from '../proto/google/protobuf/any'
|
|
36
|
-
import {
|
|
36
|
+
import {
|
|
37
|
+
areEqualPeerDescriptors,
|
|
38
|
+
getNodeIdFromPeerDescriptor,
|
|
39
|
+
keyFromPeerDescriptor,
|
|
40
|
+
peerIdFromPeerDescriptor
|
|
41
|
+
} from '../helpers/peerIdFromPeerDescriptor'
|
|
37
42
|
import { Router } from './routing/Router'
|
|
38
43
|
import { Finder, FindResult } from './find/Finder'
|
|
39
44
|
import { StoreRpcLocal } from './store/StoreRpcLocal'
|
|
@@ -375,22 +380,22 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
375
380
|
} else {
|
|
376
381
|
logger.trace('new connection not set to connections, there is already a connection with the peer ID')
|
|
377
382
|
}
|
|
378
|
-
logger.trace('connected: ' +
|
|
383
|
+
logger.trace('connected: ' + getNodeIdFromPeerDescriptor(peerDescriptor) + ' ' + this.connections.size)
|
|
379
384
|
this.emit('connected', peerDescriptor)
|
|
380
385
|
}
|
|
381
386
|
|
|
382
387
|
private onTransportDisconnected(peerDescriptor: PeerDescriptor, gracefulLeave: boolean): void {
|
|
383
|
-
logger.trace('disconnected: ' +
|
|
388
|
+
logger.trace('disconnected: ' + getNodeIdFromPeerDescriptor(peerDescriptor))
|
|
384
389
|
this.connections.delete(keyFromPeerDescriptor(peerDescriptor))
|
|
385
390
|
// only remove from bucket if we are on layer 0
|
|
386
391
|
if (this.connectionManager) {
|
|
387
392
|
this.bucket!.remove(peerDescriptor.kademliaId)
|
|
388
393
|
|
|
389
394
|
if (gracefulLeave === true) {
|
|
390
|
-
logger.trace(
|
|
395
|
+
logger.trace(getNodeIdFromPeerDescriptor(peerDescriptor) + ' ' + 'onTransportDisconnected with gracefulLeave ' + gracefulLeave)
|
|
391
396
|
this.removeContact(peerDescriptor)
|
|
392
397
|
} else {
|
|
393
|
-
logger.trace(
|
|
398
|
+
logger.trace(getNodeIdFromPeerDescriptor(peerDescriptor) + ' ' + 'onTransportDisconnected with gracefulLeave ' + gracefulLeave)
|
|
394
399
|
}
|
|
395
400
|
}
|
|
396
401
|
|
|
@@ -444,11 +449,12 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
444
449
|
|
|
445
450
|
private handleMessage(message: Message): void {
|
|
446
451
|
if (message.serviceId === this.config.serviceId) {
|
|
447
|
-
logger.trace('callig this.handleMessageFromPeer ' +
|
|
452
|
+
logger.trace('callig this.handleMessageFromPeer ' + getNodeIdFromPeerDescriptor(message.sourceDescriptor!)
|
|
448
453
|
+ ' ' + message.serviceId + ' ' + message.messageId)
|
|
449
454
|
this.rpcCommunicator?.handleMessageFromPeer(message)
|
|
450
455
|
} else {
|
|
451
|
-
logger.trace('emit "message" ' +
|
|
456
|
+
logger.trace('emit "message" ' + getNodeIdFromPeerDescriptor(message.sourceDescriptor!)
|
|
457
|
+
+ ' ' + message.serviceId + ' ' + message.messageId)
|
|
452
458
|
this.emit('message', message)
|
|
453
459
|
}
|
|
454
460
|
}
|
|
@@ -479,7 +485,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
479
485
|
return
|
|
480
486
|
}
|
|
481
487
|
this.connectionManager?.weakUnlockConnection(contact.getPeerDescriptor())
|
|
482
|
-
logger.trace(`Removed contact ${
|
|
488
|
+
logger.trace(`Removed contact ${getNodeIdFromPeerDescriptor(contact.getPeerDescriptor())}`)
|
|
483
489
|
if (this.bucket!.count() === 0
|
|
484
490
|
&& !this.peerDiscovery!.isJoinOngoing()
|
|
485
491
|
&& this.config.entryPoints
|
|
@@ -501,14 +507,14 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
501
507
|
// Important to lock here, before the ping result is known
|
|
502
508
|
this.connectionManager?.weakLockConnection(contact.getPeerDescriptor())
|
|
503
509
|
if (this.connections.has(contact.getPeerId().toKey())) {
|
|
504
|
-
logger.trace(`Added new contact ${
|
|
510
|
+
logger.trace(`Added new contact ${getNodeIdFromPeerDescriptor(contact.getPeerDescriptor())}`)
|
|
505
511
|
} else { // open connection by pinging
|
|
506
|
-
logger.trace('starting ping ' +
|
|
512
|
+
logger.trace('starting ping ' + getNodeIdFromPeerDescriptor(contact.getPeerDescriptor()))
|
|
507
513
|
contact.ping().then((result) => {
|
|
508
514
|
if (result) {
|
|
509
|
-
logger.trace(`Added new contact ${
|
|
515
|
+
logger.trace(`Added new contact ${getNodeIdFromPeerDescriptor(contact.getPeerDescriptor())}`)
|
|
510
516
|
} else {
|
|
511
|
-
logger.trace('ping failed ' +
|
|
517
|
+
logger.trace('ping failed ' + getNodeIdFromPeerDescriptor(contact.getPeerDescriptor()))
|
|
512
518
|
this.connectionManager?.weakUnlockConnection(contact.getPeerDescriptor())
|
|
513
519
|
this.removeContact(contact.getPeerDescriptor())
|
|
514
520
|
this.addClosestContactToBucket()
|
|
@@ -559,7 +565,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
559
565
|
return
|
|
560
566
|
}
|
|
561
567
|
if (!areEqualPeerDescriptors(contact, this.localPeerDescriptor!)) {
|
|
562
|
-
logger.trace(`Adding new contact ${
|
|
568
|
+
logger.trace(`Adding new contact ${getNodeIdFromPeerDescriptor(contact)}`)
|
|
563
569
|
const rpcRemote = new DhtNodeRpcRemote(
|
|
564
570
|
this.localPeerDescriptor!,
|
|
565
571
|
contact,
|
|
@@ -591,7 +597,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
591
597
|
if (!this.started || this.stopped) {
|
|
592
598
|
return
|
|
593
599
|
}
|
|
594
|
-
logger.trace(`Removing contact ${
|
|
600
|
+
logger.trace(`Removing contact ${getNodeIdFromPeerDescriptor(contact)}`)
|
|
595
601
|
const peerId = peerIdFromPeerDescriptor(contact)
|
|
596
602
|
this.bucket!.remove(peerId.value)
|
|
597
603
|
this.neighborList!.removeContact(peerId)
|
|
@@ -722,8 +728,10 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
722
728
|
this.router!.stop()
|
|
723
729
|
this.finder!.stop()
|
|
724
730
|
this.peerDiscovery!.stop()
|
|
725
|
-
if (this.
|
|
726
|
-
|
|
731
|
+
if (this.config.transport === undefined) {
|
|
732
|
+
// if the transport was not given in config, the instance was created in start() and
|
|
733
|
+
// this component is responsible for stopping it
|
|
734
|
+
await this.transport!.stop()
|
|
727
735
|
}
|
|
728
736
|
this.transport = undefined
|
|
729
737
|
this.connectionManager = undefined
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
|
|
2
2
|
import { Logger } from '@streamr/utils'
|
|
3
3
|
import KBucket from 'k-bucket'
|
|
4
|
-
import {
|
|
4
|
+
import { getNodeIdFromPeerDescriptor } from '../helpers/peerIdFromPeerDescriptor'
|
|
5
5
|
import { Empty } from '../proto/google/protobuf/empty'
|
|
6
6
|
import {
|
|
7
7
|
ClosestPeersRequest,
|
|
@@ -48,7 +48,7 @@ export class DhtNodeRpcLocal implements IDhtNodeRpc {
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
async ping(request: PingRequest, context: ServerCallContext): Promise<PingResponse> {
|
|
51
|
-
logger.trace('received ping request: ' +
|
|
51
|
+
logger.trace('received ping request: ' + getNodeIdFromPeerDescriptor((context as DhtCallContext).incomingSourceDescriptor!))
|
|
52
52
|
setImmediate(() => {
|
|
53
53
|
this.config.addNewContact((context as DhtCallContext).incomingSourceDescriptor!)
|
|
54
54
|
})
|
|
@@ -61,7 +61,7 @@ export class DhtNodeRpcLocal implements IDhtNodeRpc {
|
|
|
61
61
|
async leaveNotice(_request: LeaveNotice, context: ServerCallContext): Promise<Empty> {
|
|
62
62
|
// TODO check signature??
|
|
63
63
|
const sender = (context as DhtCallContext).incomingSourceDescriptor!
|
|
64
|
-
logger.trace('received leave notice: ' +
|
|
64
|
+
logger.trace('received leave notice: ' + getNodeIdFromPeerDescriptor(sender))
|
|
65
65
|
this.config.removeContact(sender)
|
|
66
66
|
return {}
|
|
67
67
|
}
|
|
@@ -10,7 +10,7 @@ import { Logger } from '@streamr/utils'
|
|
|
10
10
|
import { ProtoRpcClient } from '@streamr/proto-rpc'
|
|
11
11
|
import { Remote } from './contact/Remote'
|
|
12
12
|
import { PeerID } from '../helpers/PeerID'
|
|
13
|
-
import {
|
|
13
|
+
import { getNodeIdFromPeerDescriptor, peerIdFromPeerDescriptor } from '../helpers/peerIdFromPeerDescriptor'
|
|
14
14
|
import { ServiceID } from '../types/ServiceID'
|
|
15
15
|
|
|
16
16
|
const logger = new Logger(module)
|
|
@@ -40,7 +40,7 @@ export class DhtNodeRpcRemote extends Remote<IDhtNodeRpcClient> implements KBuck
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
async getClosestPeers(kademliaId: Uint8Array): Promise<PeerDescriptor[]> {
|
|
43
|
-
logger.trace(`Requesting getClosestPeers on ${this.getServiceId()} from ${
|
|
43
|
+
logger.trace(`Requesting getClosestPeers on ${this.getServiceId()} from ${getNodeIdFromPeerDescriptor(this.getPeerDescriptor())}`)
|
|
44
44
|
const request: ClosestPeersRequest = {
|
|
45
45
|
kademliaId,
|
|
46
46
|
requestId: v4()
|
|
@@ -55,7 +55,7 @@ export class DhtNodeRpcRemote extends Remote<IDhtNodeRpcClient> implements KBuck
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
async ping(): Promise<boolean> {
|
|
58
|
-
logger.trace(`Requesting ping on ${this.getServiceId()} from ${
|
|
58
|
+
logger.trace(`Requesting ping on ${this.getServiceId()} from ${getNodeIdFromPeerDescriptor(this.getPeerDescriptor())}`)
|
|
59
59
|
const request: PingRequest = {
|
|
60
60
|
requestId: v4()
|
|
61
61
|
}
|
|
@@ -66,13 +66,13 @@ export class DhtNodeRpcRemote extends Remote<IDhtNodeRpcClient> implements KBuck
|
|
|
66
66
|
return true
|
|
67
67
|
}
|
|
68
68
|
} catch (err) {
|
|
69
|
-
logger.trace(`ping failed on ${this.getServiceId()} to ${
|
|
69
|
+
logger.trace(`ping failed on ${this.getServiceId()} to ${getNodeIdFromPeerDescriptor(this.getPeerDescriptor())}: ${err}`)
|
|
70
70
|
}
|
|
71
71
|
return false
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
leaveNotice(): void {
|
|
75
|
-
logger.trace(`Sending leaveNotice on ${this.getServiceId()} from ${
|
|
75
|
+
logger.trace(`Sending leaveNotice on ${this.getServiceId()} from ${getNodeIdFromPeerDescriptor(this.getPeerDescriptor())}`)
|
|
76
76
|
const request: LeaveNotice = {
|
|
77
77
|
serviceId: this.getServiceId()
|
|
78
78
|
}
|
|
@@ -8,7 +8,7 @@ import { PeerDescriptor } from '../../proto/packages/dht/protos/DhtRpc'
|
|
|
8
8
|
import { DhtNodeRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
|
|
9
9
|
import { SortedContactList } from '../contact/SortedContactList'
|
|
10
10
|
import { DhtNodeRpcRemote } from '../DhtNodeRpcRemote'
|
|
11
|
-
import { areEqualPeerDescriptors,
|
|
11
|
+
import { areEqualPeerDescriptors, getNodeIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
12
12
|
import { ServiceID } from '../../types/ServiceID'
|
|
13
13
|
|
|
14
14
|
const logger = new Logger(module)
|
|
@@ -71,7 +71,7 @@ export class DiscoverySession {
|
|
|
71
71
|
if (this.stopped) {
|
|
72
72
|
return []
|
|
73
73
|
}
|
|
74
|
-
logger.trace(`Getting closest peers from contact: ${
|
|
74
|
+
logger.trace(`Getting closest peers from contact: ${getNodeIdFromPeerDescriptor(contact.getPeerDescriptor())}`)
|
|
75
75
|
this.outgoingClosestPeersRequestsCounter++
|
|
76
76
|
this.config.neighborList.setContacted(contact.getPeerId())
|
|
77
77
|
const returnedContacts = await contact.getClosestPeers(this.config.targetId)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DiscoverySession } from './DiscoverySession'
|
|
2
2
|
import { DhtNodeRpcRemote } from '../DhtNodeRpcRemote'
|
|
3
|
-
import { areEqualPeerDescriptors,
|
|
3
|
+
import { areEqualPeerDescriptors, getNodeIdFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
4
4
|
import { PeerDescriptor } from '../../proto/packages/dht/protos/DhtRpc'
|
|
5
5
|
import { Logger, scheduleAtInterval, setAbortableTimeout } from '@streamr/utils'
|
|
6
6
|
import KBucket from 'k-bucket'
|
|
@@ -49,7 +49,7 @@ export class PeerDiscovery {
|
|
|
49
49
|
this.joinCalled = true
|
|
50
50
|
logger.debug(
|
|
51
51
|
`Joining ${this.config.serviceId === 'layer0' ? 'The Streamr Network' : `Control Layer for ${this.config.serviceId}`}`
|
|
52
|
-
+ ` via entrypoint ${
|
|
52
|
+
+ ` via entrypoint ${getNodeIdFromPeerDescriptor(entryPointDescriptor)}`
|
|
53
53
|
)
|
|
54
54
|
if (areEqualPeerDescriptors(entryPointDescriptor, this.config.localPeerDescriptor)) {
|
|
55
55
|
return
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Logger } from '@streamr/utils'
|
|
2
2
|
import { PeerDescriptor, RouteMessageAck, RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
|
|
3
3
|
import { IFindRpc } from '../../proto/packages/dht/protos/DhtRpc.server'
|
|
4
|
-
import {
|
|
4
|
+
import { getNodeIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
5
5
|
import { createRouteMessageAck } from '../routing/RouterRpcLocal'
|
|
6
6
|
import { getPreviousPeer } from '../routing/getPreviousPeer'
|
|
7
7
|
|
|
@@ -26,8 +26,8 @@ export class FindRpcLocal implements IFindRpc {
|
|
|
26
26
|
if (this.config.isMostLikelyDuplicate(routedMessage.requestId)) {
|
|
27
27
|
return createRouteMessageAck(routedMessage, 'message given to routeFindRequest() service is likely a duplicate')
|
|
28
28
|
}
|
|
29
|
-
const
|
|
30
|
-
logger.trace(`Received routeFindRequest call from ${
|
|
29
|
+
const senderId = getNodeIdFromPeerDescriptor(getPreviousPeer(routedMessage) ?? routedMessage.sourcePeer!)
|
|
30
|
+
logger.trace(`Received routeFindRequest call from ${senderId}`)
|
|
31
31
|
this.config.addContact(routedMessage.sourcePeer!, true)
|
|
32
32
|
this.config.addToDuplicateDetector(routedMessage.requestId)
|
|
33
33
|
return this.config.doRouteFindRequest(routedMessage)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
|
|
2
2
|
import { v4 } from 'uuid'
|
|
3
|
-
import {
|
|
3
|
+
import { getNodeIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
4
4
|
import { Remote } from '../contact/Remote'
|
|
5
5
|
import { Logger } from '@streamr/utils'
|
|
6
6
|
import { IFindRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
|
|
@@ -29,10 +29,10 @@ export class FindRpcRemote extends Remote<IFindRpcClient> {
|
|
|
29
29
|
} catch (err) {
|
|
30
30
|
const previousPeer = getPreviousPeer(params)
|
|
31
31
|
const fromNode = previousPeer
|
|
32
|
-
?
|
|
33
|
-
:
|
|
32
|
+
? getNodeIdFromPeerDescriptor(previousPeer)
|
|
33
|
+
: getNodeIdFromPeerDescriptor(params.sourcePeer!)
|
|
34
34
|
// eslint-disable-next-line max-len
|
|
35
|
-
logger.debug(`Failed to send routeFindRequest message from ${fromNode} to ${
|
|
35
|
+
logger.debug(`Failed to send routeFindRequest message from ${fromNode} to ${getNodeIdFromPeerDescriptor(this.getPeerDescriptor())} with: ${err}`)
|
|
36
36
|
return false
|
|
37
37
|
}
|
|
38
38
|
return true
|