@streamr/dht 0.0.1-tatum.6 → 0.0.1-tatum.8
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/ConnectionLockHandler.d.ts +1 -1
- package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
- package/dist/src/connection/ConnectionLockRpcRemote.d.ts +10 -0
- package/dist/src/connection/{RemoteConnectionLocker.js → ConnectionLockRpcRemote.js} +21 -35
- package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -0
- package/dist/src/connection/ConnectionManager.d.ts +17 -41
- package/dist/src/connection/ConnectionManager.js +148 -212
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/connection/ConnectivityChecker.js +16 -13
- package/dist/src/connection/ConnectivityChecker.js.map +1 -1
- package/dist/src/connection/ConnectorFacade.d.ts +49 -0
- package/dist/src/connection/ConnectorFacade.js +83 -0
- package/dist/src/connection/ConnectorFacade.js.map +1 -0
- package/dist/src/connection/Handshaker.d.ts +1 -2
- package/dist/src/connection/Handshaker.js +1 -4
- package/dist/src/connection/Handshaker.js.map +1 -1
- package/dist/src/connection/ManagedConnection.d.ts +2 -6
- package/dist/src/connection/ManagedConnection.js +27 -36
- package/dist/src/connection/ManagedConnection.js.map +1 -1
- package/dist/src/connection/ManagedWebRtcConnection.d.ts +1 -1
- package/dist/src/connection/ManagedWebRtcConnection.js +2 -2
- package/dist/src/connection/ManagedWebRtcConnection.js.map +1 -1
- package/dist/src/connection/Simulator/Simulator.d.ts +0 -2
- package/dist/src/connection/Simulator/Simulator.js +0 -5
- package/dist/src/connection/Simulator/Simulator.js.map +1 -1
- package/dist/src/connection/Simulator/SimulatorConnection.js +16 -13
- package/dist/src/connection/Simulator/SimulatorConnection.js.map +1 -1
- package/dist/src/connection/Simulator/SimulatorConnector.d.ts +2 -3
- package/dist/src/connection/Simulator/SimulatorConnector.js +12 -14
- package/dist/src/connection/Simulator/SimulatorConnector.js.map +1 -1
- package/dist/src/connection/Simulator/SimulatorTransport.js +6 -1
- package/dist/src/connection/Simulator/SimulatorTransport.js.map +1 -1
- package/dist/src/connection/WebRTC/NodeWebRtcConnection.d.ts +3 -1
- package/dist/src/connection/WebRTC/NodeWebRtcConnection.js +12 -12
- package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +1 -1
- package/dist/src/connection/WebRTC/{WebRtcConnector.d.ts → WebRtcConnectorRpcLocal.d.ts} +13 -13
- package/dist/src/connection/WebRTC/{WebRtcConnector.js → WebRtcConnectorRpcLocal.js} +46 -38
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js.map +1 -0
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.d.ts +11 -0
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js +55 -0
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js.map +1 -0
- package/dist/src/connection/WebRTC/iceServerAsString.d.ts +1 -1
- package/dist/src/connection/WebSocket/{WebSocketConnector.d.ts → WebSocketConnectorRpcLocal.d.ts} +21 -11
- package/dist/src/connection/WebSocket/{WebSocketConnector.js → WebSocketConnectorRpcLocal.js} +80 -59
- package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.js.map +1 -0
- package/dist/src/connection/WebSocket/WebSocketConnectorRpcRemote.d.ts +8 -0
- package/dist/src/connection/WebSocket/{RemoteWebSocketConnector.js → WebSocketConnectorRpcRemote.js} +12 -16
- package/dist/src/connection/WebSocket/WebSocketConnectorRpcRemote.js.map +1 -0
- package/dist/src/connection/WebSocket/WebSocketServer.d.ts +11 -1
- package/dist/src/connection/WebSocket/WebSocketServer.js +15 -10
- package/dist/src/connection/WebSocket/WebSocketServer.js.map +1 -1
- package/dist/src/dht/DhtNode.d.ts +18 -55
- package/dist/src/dht/DhtNode.js +122 -145
- package/dist/src/dht/DhtNode.js.map +1 -1
- package/dist/src/dht/{RemoteExternalApi.d.ts → ExternalApiRpcRemote.d.ts} +2 -2
- package/dist/src/dht/{RemoteExternalApi.js → ExternalApiRpcRemote.js} +5 -6
- package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -0
- package/dist/src/dht/{DhtPeer.d.ts → RemoteDhtNode.d.ts} +2 -3
- package/dist/src/dht/{DhtPeer.js → RemoteDhtNode.js} +21 -19
- package/dist/src/dht/RemoteDhtNode.js.map +1 -0
- package/dist/src/dht/contact/ContactList.d.ts +0 -1
- package/dist/src/dht/contact/ContactList.js +0 -3
- package/dist/src/dht/contact/ContactList.js.map +1 -1
- package/dist/src/dht/contact/RandomContactList.d.ts +0 -1
- package/dist/src/dht/contact/RandomContactList.js +0 -3
- package/dist/src/dht/contact/RandomContactList.js.map +1 -1
- package/dist/src/dht/contact/SortedContactList.d.ts +0 -3
- package/dist/src/dht/contact/SortedContactList.js +0 -9
- package/dist/src/dht/contact/SortedContactList.js.map +1 -1
- package/dist/src/dht/discovery/DiscoverySession.d.ts +5 -7
- package/dist/src/dht/discovery/DiscoverySession.js +9 -10
- package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
- package/dist/src/dht/discovery/PeerDiscovery.d.ts +12 -11
- package/dist/src/dht/discovery/PeerDiscovery.js +33 -37
- package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
- package/dist/src/dht/find/RecursiveFindSession.d.ts +9 -10
- package/dist/src/dht/find/RecursiveFindSession.js +13 -13
- package/dist/src/dht/find/RecursiveFindSession.js.map +1 -1
- package/dist/src/dht/find/RecursiveFinder.d.ts +9 -11
- package/dist/src/dht/find/RecursiveFinder.js +35 -36
- package/dist/src/dht/find/RecursiveFinder.js.map +1 -1
- package/dist/src/dht/find/RemoteRecursiveFindSession.d.ts +1 -1
- package/dist/src/dht/find/RemoteRecursiveFindSession.js +4 -4
- package/dist/src/dht/find/RemoteRecursiveFindSession.js.map +1 -1
- package/dist/src/dht/registerExternalApiRpcMethods.d.ts +1 -1
- package/dist/src/dht/registerExternalApiRpcMethods.js +4 -3
- package/dist/src/dht/registerExternalApiRpcMethods.js.map +1 -1
- package/dist/src/dht/routing/DuplicateDetector.d.ts +1 -2
- package/dist/src/dht/routing/DuplicateDetector.js +2 -7
- package/dist/src/dht/routing/DuplicateDetector.js.map +1 -1
- package/dist/src/dht/routing/Router.d.ts +12 -15
- package/dist/src/dht/routing/Router.js +30 -33
- package/dist/src/dht/routing/Router.js.map +1 -1
- package/dist/src/dht/routing/{RemoteRouter.d.ts → RouterRpcRemote.d.ts} +2 -2
- package/dist/src/dht/routing/{RemoteRouter.js → RouterRpcRemote.js} +5 -5
- package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -0
- package/dist/src/dht/routing/RoutingSession.d.ts +3 -4
- package/dist/src/dht/routing/RoutingSession.js +6 -5
- package/dist/src/dht/routing/RoutingSession.js.map +1 -1
- package/dist/src/dht/store/{DataStore.d.ts → StoreRpcLocal.d.ts} +6 -6
- package/dist/src/dht/store/{DataStore.js → StoreRpcLocal.js} +34 -34
- package/dist/src/dht/store/StoreRpcLocal.js.map +1 -0
- package/dist/src/dht/store/{RemoteStore.d.ts → StoreRpcRemote.d.ts} +2 -2
- package/dist/src/dht/store/{RemoteStore.js → StoreRpcRemote.js} +4 -4
- package/dist/src/dht/store/StoreRpcRemote.js.map +1 -0
- package/dist/src/exports.d.ts +2 -8
- package/dist/src/exports.js +2 -14
- package/dist/src/exports.js.map +1 -1
- package/dist/src/helpers/PeerID.d.ts +0 -1
- package/dist/src/helpers/PeerID.js +0 -6
- package/dist/src/helpers/PeerID.js.map +1 -1
- package/dist/src/helpers/browser/isBrowserEnvironment.d.ts +1 -0
- package/dist/src/helpers/browser/isBrowserEnvironment.js +6 -0
- package/dist/src/helpers/browser/isBrowserEnvironment.js.map +1 -0
- package/dist/src/helpers/browser/isBrowserEnvironment_override.d.ts +1 -0
- package/dist/src/helpers/browser/isBrowserEnvironment_override.js +7 -0
- package/dist/src/helpers/browser/isBrowserEnvironment_override.js.map +1 -0
- package/dist/src/helpers/kademliaId.d.ts +1 -0
- package/dist/src/helpers/kademliaId.js +14 -0
- package/dist/src/helpers/kademliaId.js.map +1 -0
- package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +1 -1
- package/dist/src/helpers/peerIdFromPeerDescriptor.js +3 -3
- package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
- package/dist/src/helpers/protoClasses.js +2 -2
- package/dist/src/helpers/protoClasses.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +29 -29
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +39 -39
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +49 -162
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +47 -88
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +15 -15
- package/dist/src/transport/RoutingRpcCommunicator.js +1 -0
- package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
- package/package.json +10 -9
- package/protos/DhtRpc.proto +30 -60
- package/src/connection/ConnectionLockHandler.ts +1 -1
- package/src/connection/ConnectionLockRpcRemote.ts +62 -0
- package/src/connection/ConnectionManager.ts +178 -274
- package/src/connection/ConnectivityChecker.ts +15 -12
- package/src/connection/ConnectorFacade.ts +140 -0
- package/src/connection/Handshaker.ts +0 -5
- package/src/connection/ManagedConnection.ts +26 -40
- package/src/connection/ManagedWebRtcConnection.ts +0 -2
- package/src/connection/Simulator/Simulator.ts +0 -7
- package/src/connection/Simulator/SimulatorConnection.ts +16 -13
- package/src/connection/Simulator/SimulatorConnector.ts +13 -19
- package/src/connection/Simulator/SimulatorTransport.ts +6 -1
- package/src/connection/WebRTC/NodeWebRtcConnection.ts +15 -14
- package/src/connection/WebRTC/{WebRtcConnector.ts → WebRtcConnectorRpcLocal.ts} +68 -56
- package/src/connection/WebRTC/WebRtcConnectorRpcRemote.ts +71 -0
- package/src/connection/WebRTC/iceServerAsString.ts +1 -1
- package/src/connection/WebSocket/{WebSocketConnector.ts → WebSocketConnectorRpcLocal.ts} +102 -79
- package/src/connection/WebSocket/WebSocketConnectorRpcRemote.ts +45 -0
- package/src/connection/WebSocket/WebSocketServer.ts +26 -8
- package/src/dht/DhtNode.ts +176 -203
- package/src/dht/{RemoteExternalApi.ts → ExternalApiRpcRemote.ts} +3 -4
- package/src/dht/{DhtPeer.ts → RemoteDhtNode.ts} +11 -9
- package/src/dht/contact/ContactList.ts +0 -4
- package/src/dht/contact/RandomContactList.ts +0 -4
- package/src/dht/contact/SortedContactList.ts +0 -12
- package/src/dht/discovery/DiscoverySession.ts +20 -23
- package/src/dht/discovery/PeerDiscovery.ts +47 -45
- package/src/dht/find/RecursiveFindSession.ts +21 -22
- package/src/dht/find/RecursiveFinder.ts +45 -49
- package/src/dht/find/RemoteRecursiveFindSession.ts +6 -6
- package/src/dht/registerExternalApiRpcMethods.ts +8 -5
- package/src/dht/routing/DuplicateDetector.ts +3 -10
- package/src/dht/routing/Router.ts +39 -45
- package/src/dht/routing/{RemoteRouter.ts → RouterRpcRemote.ts} +4 -4
- package/src/dht/routing/RoutingSession.ts +15 -15
- package/src/dht/store/{DataStore.ts → StoreRpcLocal.ts} +42 -42
- package/src/dht/store/{RemoteStore.ts → StoreRpcRemote.ts} +2 -2
- package/src/exports.ts +2 -8
- package/src/helpers/PeerID.ts +0 -7
- package/src/helpers/browser/isBrowserEnvironment.ts +1 -0
- package/src/helpers/browser/isBrowserEnvironment_override.ts +3 -0
- package/src/helpers/kademliaId.ts +8 -0
- package/src/helpers/peerIdFromPeerDescriptor.ts +1 -1
- package/src/helpers/protoClasses.ts +4 -4
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +54 -54
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +15 -15
- package/src/proto/packages/dht/protos/DhtRpc.ts +77 -216
- package/src/transport/RoutingRpcCommunicator.ts +1 -0
- package/test/benchmark/KademliaCorrectness.test.ts +4 -2
- package/test/benchmark/RecursiveFind.test.ts +6 -6
- package/test/end-to-end/Layer0-Layer1.test.ts +9 -9
- package/test/end-to-end/Layer0WebRTC-Layer1.test.ts +5 -5
- package/test/end-to-end/Layer0WebRTC.test.ts +5 -6
- package/test/end-to-end/Layer1-Scale-WebRTC.test.ts +13 -8
- package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +15 -10
- package/test/end-to-end/WebSocketConnectionRequest.test.ts +5 -5
- package/test/integration/ConnectionLocking.test.ts +32 -26
- package/test/integration/ConnectionManager.test.ts +90 -93
- package/test/integration/DhtJoinPeerDiscovery.test.ts +53 -0
- package/test/integration/DhtRpc.test.ts +4 -6
- package/test/integration/Layer1-scale.test.ts +8 -8
- package/test/integration/MigrateData.test.ts +9 -9
- package/test/integration/Mock-Layer1-Layer0.test.ts +1 -2
- package/test/integration/RecursiveFind.test.ts +5 -5
- package/test/integration/{DhtPeer.test.ts → RemoteDhtNode.test.ts} +11 -12
- package/test/integration/RouteMessage.test.ts +7 -9
- package/test/integration/{RemoteRouter.test.ts → RouterRpcRemote.test.ts} +13 -14
- package/test/integration/RpcErrors.test.ts +25 -10
- package/test/integration/ScaleDownDht.test.ts +8 -8
- package/test/integration/SimultaneousConnections.test.ts +35 -36
- package/test/integration/Store.test.ts +8 -9
- package/test/integration/StoreAndDelete.test.ts +11 -11
- package/test/integration/StoreOnDhtWithTwoNodes.test.ts +7 -7
- package/test/integration/{RemoteStore.test.ts → StoreRpcRemote.test.ts} +17 -18
- package/test/integration/WebRtcConnectionManagement.test.ts +26 -19
- package/test/integration/WebRtcConnectorRpc.test.ts +17 -32
- package/test/integration/WebSocket.test.ts +4 -2
- package/test/integration/WebSocketConnectionManagement.test.ts +30 -17
- package/test/integration/WebSocketConnectorRpc.test.ts +10 -15
- package/test/unit/DuplicateDetector.test.ts +3 -4
- package/test/unit/LocalDataStore.test.ts +6 -8
- package/test/unit/RandomContactList.test.ts +1 -1
- package/test/unit/RecursiveFinder.test.ts +13 -18
- package/test/unit/Router.test.ts +18 -21
- package/test/unit/WebSocketConnectorRpcLocal.test.ts +64 -0
- package/test/unit/WebSocketServer.test.ts +24 -12
- package/test/unit/{webrtcReplaceInternalIpWithExternalIp.ts → webrtcReplaceInternalIpWithExternalIp.test.ts} +1 -1
- package/test/utils/mock/RecursiveFinder.ts +2 -2
- package/test/utils/mock/Router.ts +9 -11
- package/test/utils/mock/Transport.ts +2 -2
- package/test/utils/utils.ts +55 -74
- package/dist/src/connection/RemoteConnectionLocker.d.ts +0 -13
- package/dist/src/connection/RemoteConnectionLocker.js.map +0 -1
- package/dist/src/connection/WebRTC/RemoteWebrtcConnector.d.ts +0 -12
- package/dist/src/connection/WebRTC/RemoteWebrtcConnector.js +0 -74
- package/dist/src/connection/WebRTC/RemoteWebrtcConnector.js.map +0 -1
- package/dist/src/connection/WebRTC/WebRtcConnector.js.map +0 -1
- package/dist/src/connection/WebSocket/RemoteWebSocketConnector.d.ts +0 -9
- package/dist/src/connection/WebSocket/RemoteWebSocketConnector.js.map +0 -1
- package/dist/src/connection/WebSocket/WebSocketConnector.js.map +0 -1
- package/dist/src/dht/DhtPeer.js.map +0 -1
- package/dist/src/dht/RemoteExternalApi.js.map +0 -1
- package/dist/src/dht/routing/RemoteRouter.js.map +0 -1
- package/dist/src/dht/store/DataStore.js.map +0 -1
- package/dist/src/dht/store/RemoteStore.js.map +0 -1
- package/dist/src/helpers/browser/isBrowser.d.ts +0 -1
- package/dist/src/helpers/browser/isBrowser.js +0 -6
- package/dist/src/helpers/browser/isBrowser.js.map +0 -1
- package/dist/src/helpers/browser/isNodeJS.d.ts +0 -1
- package/dist/src/helpers/browser/isNodeJS.js +0 -6
- package/dist/src/helpers/browser/isNodeJS.js.map +0 -1
- package/src/connection/RemoteConnectionLocker.ts +0 -84
- package/src/connection/WebRTC/RemoteWebrtcConnector.ts +0 -93
- package/src/connection/WebSocket/RemoteWebSocketConnector.ts +0 -49
- package/src/helpers/browser/isBrowser.ts +0 -1
- package/src/helpers/browser/isNodeJS.ts +0 -1
- package/test/integration/DhtWithMockConnectionLatencies.test.ts +0 -46
- package/test/integration/DhtWithMockConnections.test.ts +0 -46
- package/test/integration/DhtWithRealConnectionLatencies.test.ts +0 -47
|
@@ -10,7 +10,7 @@ import { ClientWebSocket } from './WebSocket/ClientWebSocket'
|
|
|
10
10
|
import { v4 } from 'uuid'
|
|
11
11
|
import { NatType } from './ConnectionManager'
|
|
12
12
|
import { ServerWebSocket } from './WebSocket/ServerWebSocket'
|
|
13
|
-
import { connectivityMethodToWebSocketUrl } from './WebSocket/
|
|
13
|
+
import { connectivityMethodToWebSocketUrl } from './WebSocket/WebSocketConnectorRpcLocal'
|
|
14
14
|
|
|
15
15
|
const logger = new Logger(module)
|
|
16
16
|
|
|
@@ -21,7 +21,7 @@ const logger = new Logger(module)
|
|
|
21
21
|
export enum ConnectionMode { REQUEST = 'connectivityRequest', PROBE = 'connectivityProbe' }
|
|
22
22
|
export class ConnectivityChecker {
|
|
23
23
|
|
|
24
|
-
private static readonly CONNECTIVITY_CHECKER_SERVICE_ID = 'system/
|
|
24
|
+
private static readonly CONNECTIVITY_CHECKER_SERVICE_ID = 'system/connectivity-checker'
|
|
25
25
|
private static readonly CONNECTIVITY_CHECKER_TIMEOUT = 5000
|
|
26
26
|
private destroyed = false
|
|
27
27
|
private readonly webSocketPort: number
|
|
@@ -49,7 +49,7 @@ export class ConnectivityChecker {
|
|
|
49
49
|
mode: ConnectionMode.REQUEST
|
|
50
50
|
})
|
|
51
51
|
} catch (e) {
|
|
52
|
-
throw new Err.ConnectionFailed(
|
|
52
|
+
throw new Err.ConnectionFailed(`Failed to connect to the entrypoint ${connectivityMethodToWebSocketUrl(entryPoint.websocket!)}`, e)
|
|
53
53
|
}
|
|
54
54
|
// send connectivity request
|
|
55
55
|
const connectivityRequestMessage: ConnectivityRequest = { port: this.webSocketPort, host: this.host, tls: this.tls }
|
|
@@ -72,6 +72,7 @@ export class ConnectivityChecker {
|
|
|
72
72
|
try {
|
|
73
73
|
const message: Message = Message.fromBinary(bytes)
|
|
74
74
|
if (message.body.oneofKind === 'connectivityResponse') {
|
|
75
|
+
logger.trace('ConnectivityResponse received: ' + JSON.stringify(Message.toJson(message)))
|
|
75
76
|
const connectivityResponseMessage = message.body.connectivityResponse
|
|
76
77
|
outgoingConnection!.off('data', listener)
|
|
77
78
|
clearTimeout(timeoutId)
|
|
@@ -88,9 +89,8 @@ export class ConnectivityChecker {
|
|
|
88
89
|
}
|
|
89
90
|
try {
|
|
90
91
|
const retPromise = responseAwaiter()
|
|
91
|
-
logger.trace('trying to send connectivity request')
|
|
92
92
|
outgoingConnection.send(Message.toBinary(msg))
|
|
93
|
-
logger.
|
|
93
|
+
logger.trace('ConnectivityRequest sent: ' + JSON.stringify(Message.toJson(msg)))
|
|
94
94
|
return await retPromise
|
|
95
95
|
} catch (e) {
|
|
96
96
|
logger.error('error getting connectivityresponse')
|
|
@@ -104,7 +104,7 @@ export class ConnectivityChecker {
|
|
|
104
104
|
try {
|
|
105
105
|
const message = Message.fromBinary(data)
|
|
106
106
|
if (message.body.oneofKind === 'connectivityRequest') {
|
|
107
|
-
logger.trace('received
|
|
107
|
+
logger.trace('ConnectivityRequest received: ' + JSON.stringify(Message.toJson(message)))
|
|
108
108
|
this.handleIncomingConnectivityRequest(connectionToListenTo, message.body.connectivityRequest).then(() => {
|
|
109
109
|
logger.trace('handleIncomingConnectivityRequest ok')
|
|
110
110
|
return
|
|
@@ -130,12 +130,14 @@ export class ConnectivityChecker {
|
|
|
130
130
|
let connectivityResponseMessage: ConnectivityResponse | undefined
|
|
131
131
|
const host = connectivityRequest.host ?? connection.getRemoteAddress()
|
|
132
132
|
try {
|
|
133
|
+
const wsServerInfo = {
|
|
134
|
+
host,
|
|
135
|
+
port: connectivityRequest.port,
|
|
136
|
+
tls: connectivityRequest.tls
|
|
137
|
+
}
|
|
138
|
+
logger.trace(`Attempting Connectivity Check to ${connectivityMethodToWebSocketUrl(wsServerInfo)}`)
|
|
133
139
|
outgoingConnection = await this.connectAsync({
|
|
134
|
-
wsServerInfo
|
|
135
|
-
host,
|
|
136
|
-
port: connectivityRequest.port,
|
|
137
|
-
tls: connectivityRequest.tls
|
|
138
|
-
},
|
|
140
|
+
wsServerInfo,
|
|
139
141
|
mode: ConnectionMode.PROBE
|
|
140
142
|
})
|
|
141
143
|
} catch (err) {
|
|
@@ -148,7 +150,7 @@ export class ConnectivityChecker {
|
|
|
148
150
|
}
|
|
149
151
|
if (outgoingConnection) {
|
|
150
152
|
outgoingConnection.close('OTHER')
|
|
151
|
-
logger.trace('Connectivity test produced positive result, communicating reply to the requester')
|
|
153
|
+
logger.trace('Connectivity test produced positive result, communicating reply to the requester ' + host + ':' + connectivityRequest.port)
|
|
152
154
|
connectivityResponseMessage = {
|
|
153
155
|
openInternet: true,
|
|
154
156
|
host,
|
|
@@ -165,6 +167,7 @@ export class ConnectivityChecker {
|
|
|
165
167
|
}
|
|
166
168
|
}
|
|
167
169
|
connection.send(Message.toBinary(msg))
|
|
170
|
+
logger.trace('ConnectivityResponse sent: ' + JSON.stringify(Message.toJson(msg)))
|
|
168
171
|
}
|
|
169
172
|
|
|
170
173
|
// eslint-disable-next-line class-methods-use-this
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { Logger } from '@streamr/utils'
|
|
2
|
+
import {
|
|
3
|
+
ConnectivityResponse,
|
|
4
|
+
PeerDescriptor
|
|
5
|
+
} from '../proto/packages/dht/protos/DhtRpc'
|
|
6
|
+
import { ITransport } from '../transport/ITransport'
|
|
7
|
+
import { PortRange, TlsCertificate } from './ConnectionManager'
|
|
8
|
+
import { ManagedConnection } from './ManagedConnection'
|
|
9
|
+
import { Simulator } from './Simulator/Simulator'
|
|
10
|
+
import { SimulatorConnector } from './Simulator/SimulatorConnector'
|
|
11
|
+
import { IceServer, WebRtcConnectorRpcLocal } from './WebRTC/WebRtcConnectorRpcLocal'
|
|
12
|
+
import { WebSocketConnectorRpcLocal } from './WebSocket/WebSocketConnectorRpcLocal'
|
|
13
|
+
|
|
14
|
+
export interface ConnectorFacade {
|
|
15
|
+
createConnection: (peerDescriptor: PeerDescriptor) => ManagedConnection
|
|
16
|
+
getOwnPeerDescriptor: () => PeerDescriptor | undefined
|
|
17
|
+
start: (
|
|
18
|
+
onIncomingConnection: (connection: ManagedConnection) => boolean,
|
|
19
|
+
canConnect: (peerDescriptor: PeerDescriptor) => boolean
|
|
20
|
+
) => Promise<void>
|
|
21
|
+
stop: () => Promise<void>
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const logger = new Logger(module)
|
|
25
|
+
|
|
26
|
+
export interface DefaultConnectorFacadeConfig {
|
|
27
|
+
transport: ITransport
|
|
28
|
+
websocketHost?: string
|
|
29
|
+
websocketPortRange?: PortRange
|
|
30
|
+
entryPoints?: PeerDescriptor[]
|
|
31
|
+
iceServers?: IceServer[]
|
|
32
|
+
webrtcAllowPrivateAddresses?: boolean
|
|
33
|
+
webrtcDatachannelBufferThresholdLow?: number
|
|
34
|
+
webrtcDatachannelBufferThresholdHigh?: number
|
|
35
|
+
webrtcNewConnectionTimeout?: number
|
|
36
|
+
externalIp?: string
|
|
37
|
+
webrtcPortRange?: PortRange
|
|
38
|
+
maxMessageSize?: number
|
|
39
|
+
tlsCertificate?: TlsCertificate
|
|
40
|
+
createOwnPeerDescriptor: (connectivityResponse: ConnectivityResponse) => PeerDescriptor
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export class DefaultConnectorFacade implements ConnectorFacade {
|
|
44
|
+
|
|
45
|
+
private readonly config: DefaultConnectorFacadeConfig
|
|
46
|
+
private ownPeerDescriptor?: PeerDescriptor
|
|
47
|
+
private webSocketConnector?: WebSocketConnectorRpcLocal
|
|
48
|
+
private webrtcConnector?: WebRtcConnectorRpcLocal
|
|
49
|
+
|
|
50
|
+
constructor(config: DefaultConnectorFacadeConfig) {
|
|
51
|
+
this.config = config
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async start(
|
|
55
|
+
onIncomingConnection: (connection: ManagedConnection) => boolean,
|
|
56
|
+
canConnect: (peerDescriptor: PeerDescriptor) => boolean
|
|
57
|
+
): Promise<void> {
|
|
58
|
+
logger.trace(`Creating WebSocketConnector`)
|
|
59
|
+
this.webSocketConnector = new WebSocketConnectorRpcLocal({
|
|
60
|
+
transport: this.config.transport!,
|
|
61
|
+
// TODO should we use canConnect also for WebRtcConnector? (NET-1142)
|
|
62
|
+
canConnect: (peerDescriptor: PeerDescriptor) => canConnect(peerDescriptor),
|
|
63
|
+
onIncomingConnection,
|
|
64
|
+
portRange: this.config.websocketPortRange,
|
|
65
|
+
host: this.config.websocketHost,
|
|
66
|
+
entrypoints: this.config.entryPoints,
|
|
67
|
+
tlsCertificate: this.config.tlsCertificate,
|
|
68
|
+
maxMessageSize: this.config.maxMessageSize
|
|
69
|
+
})
|
|
70
|
+
logger.trace(`Creating WebRTCConnector`)
|
|
71
|
+
this.webrtcConnector = new WebRtcConnectorRpcLocal({
|
|
72
|
+
transport: this.config.transport!,
|
|
73
|
+
iceServers: this.config.iceServers,
|
|
74
|
+
allowPrivateAddresses: this.config.webrtcAllowPrivateAddresses,
|
|
75
|
+
bufferThresholdLow: this.config.webrtcDatachannelBufferThresholdLow,
|
|
76
|
+
bufferThresholdHigh: this.config.webrtcDatachannelBufferThresholdHigh,
|
|
77
|
+
connectionTimeout: this.config.webrtcNewConnectionTimeout,
|
|
78
|
+
externalIp: this.config.externalIp,
|
|
79
|
+
portRange: this.config.webrtcPortRange,
|
|
80
|
+
maxMessageSize: this.config.maxMessageSize
|
|
81
|
+
}, onIncomingConnection)
|
|
82
|
+
await this.webSocketConnector.start()
|
|
83
|
+
const connectivityResponse = await this.webSocketConnector.checkConnectivity()
|
|
84
|
+
const ownPeerDescriptor = this.config.createOwnPeerDescriptor(connectivityResponse)
|
|
85
|
+
this.ownPeerDescriptor = ownPeerDescriptor
|
|
86
|
+
this.webSocketConnector.setOwnPeerDescriptor(ownPeerDescriptor)
|
|
87
|
+
this.webrtcConnector.setOwnPeerDescriptor(ownPeerDescriptor)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
createConnection(peerDescriptor: PeerDescriptor): ManagedConnection {
|
|
91
|
+
if (this.webSocketConnector!.isPossibleToFormConnection(peerDescriptor)) {
|
|
92
|
+
return this.webSocketConnector!.connect(peerDescriptor)
|
|
93
|
+
} else {
|
|
94
|
+
return this.webrtcConnector!.connect(peerDescriptor)
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
getOwnPeerDescriptor(): PeerDescriptor | undefined {
|
|
99
|
+
return this.ownPeerDescriptor
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
async stop(): Promise<void> {
|
|
103
|
+
await this.webSocketConnector!.destroy()
|
|
104
|
+
await this.webrtcConnector!.stop()
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export class SimulatorConnectorFacade implements ConnectorFacade {
|
|
109
|
+
|
|
110
|
+
private readonly ownPeerDescriptor: PeerDescriptor
|
|
111
|
+
private simulatorConnector?: SimulatorConnector
|
|
112
|
+
private simulator: Simulator
|
|
113
|
+
|
|
114
|
+
constructor(ownPeerDescriptor: PeerDescriptor, simulator: Simulator) {
|
|
115
|
+
this.ownPeerDescriptor = ownPeerDescriptor
|
|
116
|
+
this.simulator = simulator
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
async start(onIncomingConnection: (connection: ManagedConnection) => boolean): Promise<void> {
|
|
120
|
+
logger.trace(`Creating SimulatorConnector`)
|
|
121
|
+
this.simulatorConnector = new SimulatorConnector(
|
|
122
|
+
this.ownPeerDescriptor,
|
|
123
|
+
this.simulator,
|
|
124
|
+
onIncomingConnection
|
|
125
|
+
)
|
|
126
|
+
this.simulator.addConnector(this.simulatorConnector)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
createConnection(peerDescriptor: PeerDescriptor): ManagedConnection {
|
|
130
|
+
return this.simulatorConnector!.connect(peerDescriptor)
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
getOwnPeerDescriptor(): PeerDescriptor {
|
|
134
|
+
return this.ownPeerDescriptor
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
async stop(): Promise<void> {
|
|
138
|
+
await this.simulatorConnector!.stop()
|
|
139
|
+
}
|
|
140
|
+
}
|
|
@@ -16,17 +16,14 @@ export class Handshaker extends EventEmitter<HandshakerEvents> {
|
|
|
16
16
|
|
|
17
17
|
private static readonly HANDSHAKER_SERVICE_ID = 'system/handshaker'
|
|
18
18
|
private ownPeerDescriptor: PeerDescriptor
|
|
19
|
-
private protocolVersion: string
|
|
20
19
|
private connection: IConnection
|
|
21
20
|
|
|
22
21
|
constructor(
|
|
23
22
|
ownPeerDescriptor: PeerDescriptor,
|
|
24
|
-
protocolVersion: string,
|
|
25
23
|
connection: IConnection
|
|
26
24
|
) {
|
|
27
25
|
super()
|
|
28
26
|
this.ownPeerDescriptor = ownPeerDescriptor
|
|
29
|
-
this.protocolVersion = protocolVersion
|
|
30
27
|
this.connection = connection
|
|
31
28
|
this.connection.on('data', this.onData)
|
|
32
29
|
}
|
|
@@ -57,7 +54,6 @@ export class Handshaker extends EventEmitter<HandshakerEvents> {
|
|
|
57
54
|
public sendHandshakeRequest(): void {
|
|
58
55
|
const outgoingHandshake: HandshakeRequest = {
|
|
59
56
|
sourceId: this.ownPeerDescriptor.kademliaId,
|
|
60
|
-
protocolVersion: this.protocolVersion,
|
|
61
57
|
peerDescriptor: this.ownPeerDescriptor
|
|
62
58
|
}
|
|
63
59
|
const msg: Message = {
|
|
@@ -76,7 +72,6 @@ export class Handshaker extends EventEmitter<HandshakerEvents> {
|
|
|
76
72
|
public sendHandshakeResponse(error?: string): void {
|
|
77
73
|
const outgoingHandshakeResponse: HandshakeResponse = {
|
|
78
74
|
sourceId: this.ownPeerDescriptor.kademliaId,
|
|
79
|
-
protocolVersion: this.protocolVersion,
|
|
80
75
|
peerDescriptor: this.ownPeerDescriptor
|
|
81
76
|
}
|
|
82
77
|
if (error) {
|
|
@@ -7,6 +7,7 @@ import EventEmitter from 'eventemitter3'
|
|
|
7
7
|
import { PeerIDKey } from '../helpers/PeerID'
|
|
8
8
|
import { keyFromPeerDescriptor } from '../helpers/peerIdFromPeerDescriptor'
|
|
9
9
|
import { DisconnectionType } from '../transport/ITransport'
|
|
10
|
+
import { keyOrUnknownFromPeerDescriptor } from './ConnectionManager'
|
|
10
11
|
|
|
11
12
|
export interface ManagedConnectionEvents {
|
|
12
13
|
managedData: (bytes: Uint8Array, remotePeerDescriptor: PeerDescriptor) => void
|
|
@@ -23,8 +24,6 @@ const logger = new Logger(module)
|
|
|
23
24
|
export type Events = ManagedConnectionEvents & ConnectionEvents
|
|
24
25
|
export class ManagedConnection extends EventEmitter<Events> {
|
|
25
26
|
|
|
26
|
-
private static objectCounter = 0
|
|
27
|
-
public objectId = 0
|
|
28
27
|
private implementation?: IConnection
|
|
29
28
|
|
|
30
29
|
private outputBuffer: Uint8Array[] = []
|
|
@@ -46,25 +45,20 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
46
45
|
private closing = false
|
|
47
46
|
public replacedByOtherConnection = false
|
|
48
47
|
private ownPeerDescriptor: PeerDescriptor
|
|
49
|
-
private protocolVersion: string
|
|
50
48
|
protected outgoingConnection?: IConnection
|
|
51
49
|
protected incomingConnection?: IConnection
|
|
52
50
|
|
|
53
51
|
constructor(
|
|
54
52
|
ownPeerDescriptor: PeerDescriptor,
|
|
55
|
-
protocolVersion: string,
|
|
56
53
|
connectionType: ConnectionType,
|
|
57
54
|
outgoingConnection?: IConnection,
|
|
58
55
|
incomingConnection?: IConnection,
|
|
59
56
|
) {
|
|
60
57
|
super()
|
|
61
|
-
this.objectId = ManagedConnection.objectCounter
|
|
62
|
-
ManagedConnection.objectCounter++
|
|
63
58
|
|
|
64
59
|
this.send = this.send.bind(this)
|
|
65
60
|
|
|
66
61
|
this.ownPeerDescriptor = ownPeerDescriptor
|
|
67
|
-
this.protocolVersion = protocolVersion
|
|
68
62
|
this.outgoingConnection = outgoingConnection
|
|
69
63
|
this.incomingConnection = incomingConnection
|
|
70
64
|
this.connectionType = connectionType
|
|
@@ -72,24 +66,23 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
72
66
|
|
|
73
67
|
this.onDisconnected = this.onDisconnected.bind(this)
|
|
74
68
|
|
|
75
|
-
logger.trace('creating ManagedConnection of type: ' + connectionType
|
|
69
|
+
logger.trace('creating ManagedConnection of type: ' + connectionType)
|
|
76
70
|
if (incomingConnection && outgoingConnection) {
|
|
77
71
|
throw new Err.IllegalArguments('Managed connection constructor only accepts either an incoming connection OR a outgoing connection')
|
|
78
72
|
}
|
|
79
73
|
|
|
80
74
|
if (outgoingConnection) {
|
|
81
|
-
this.handshaker = new Handshaker(this.ownPeerDescriptor,
|
|
75
|
+
this.handshaker = new Handshaker(this.ownPeerDescriptor, outgoingConnection)
|
|
82
76
|
|
|
83
77
|
this.handshaker.once('handshakeFailed', (errorMessage) => {
|
|
84
|
-
logger.trace(
|
|
78
|
+
logger.trace(keyOrUnknownFromPeerDescriptor(this.peerDescriptor) + ' handshakeFailed: ' + errorMessage)
|
|
85
79
|
this.emit('handshakeFailed')
|
|
86
80
|
})
|
|
87
81
|
|
|
88
82
|
this.handshaker.on('handshakeCompleted', (peerDescriptor: PeerDescriptor) => {
|
|
89
|
-
logger.trace('handshake completed for outgoing connection '
|
|
90
|
-
', ' + this.peerDescriptor
|
|
83
|
+
logger.trace('handshake completed for outgoing connection '
|
|
84
|
+
+ ', ' + keyOrUnknownFromPeerDescriptor(this.peerDescriptor)
|
|
91
85
|
+ ' outputBuffer.length: ' + this.outputBuffer.length)
|
|
92
|
-
|
|
93
86
|
this.attachImplementation(outgoingConnection)
|
|
94
87
|
this.onHandshakeCompleted(peerDescriptor)
|
|
95
88
|
})
|
|
@@ -102,7 +95,7 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
102
95
|
|
|
103
96
|
} else {
|
|
104
97
|
if (incomingConnection) {
|
|
105
|
-
this.handshaker = new Handshaker(this.ownPeerDescriptor,
|
|
98
|
+
this.handshaker = new Handshaker(this.ownPeerDescriptor, incomingConnection)
|
|
106
99
|
this.handshaker.on('handshakeRequest', (peerDescriptor: PeerDescriptor) => {
|
|
107
100
|
this.setPeerDescriptor(peerDescriptor)
|
|
108
101
|
this.emit('handshakeRequest', peerDescriptor)
|
|
@@ -124,7 +117,7 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
124
117
|
): this {
|
|
125
118
|
if (event === 'managedData' && this.listenerCount('managedData') === 0) {
|
|
126
119
|
while (this.inputBuffer.length > 0) {
|
|
127
|
-
logger.trace('emptying inputBuffer
|
|
120
|
+
logger.trace('emptying inputBuffer')
|
|
128
121
|
const data = this.inputBuffer.shift()!
|
|
129
122
|
fn(data, this.getPeerDescriptor())
|
|
130
123
|
}
|
|
@@ -142,7 +135,7 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
142
135
|
if (event === 'managedData' && this.listenerCount('managedData') === 0) {
|
|
143
136
|
if (this.inputBuffer.length > 0) {
|
|
144
137
|
while (this.inputBuffer.length > 0) {
|
|
145
|
-
logger.trace('emptying inputBuffer
|
|
138
|
+
logger.trace('emptying inputBuffer')
|
|
146
139
|
const data = this.inputBuffer.shift()!
|
|
147
140
|
fn(data, this.getPeerDescriptor())
|
|
148
141
|
}
|
|
@@ -179,17 +172,16 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
179
172
|
this.handshakeCompleted = true
|
|
180
173
|
|
|
181
174
|
while (this.outputBuffer.length > 0) {
|
|
182
|
-
logger.trace('emptying outputBuffer
|
|
183
|
-
|
|
175
|
+
logger.trace('emptying outputBuffer')
|
|
184
176
|
this.implementation!.send(this.outputBuffer.shift()!)
|
|
185
177
|
}
|
|
186
178
|
|
|
187
|
-
logger.trace('emitting handshake_completed
|
|
179
|
+
logger.trace('emitting handshake_completed')
|
|
188
180
|
this.emit('handshakeCompleted', peerDescriptor)
|
|
189
181
|
}
|
|
190
182
|
|
|
191
|
-
public attachImplementation(impl: IConnection
|
|
192
|
-
logger.trace('attachImplementation()
|
|
183
|
+
public attachImplementation(impl: IConnection): void {
|
|
184
|
+
logger.trace('attachImplementation()')
|
|
193
185
|
this.implementation = impl
|
|
194
186
|
|
|
195
187
|
impl.on('data', (bytes: Uint8Array) => {
|
|
@@ -215,8 +207,8 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
215
207
|
impl.on('disconnected', this.onDisconnected)
|
|
216
208
|
}
|
|
217
209
|
|
|
218
|
-
private onDisconnected(disconnectionType: DisconnectionType
|
|
219
|
-
logger.trace(
|
|
210
|
+
private onDisconnected(disconnectionType: DisconnectionType): void {
|
|
211
|
+
logger.trace(keyOrUnknownFromPeerDescriptor(this.peerDescriptor) + ' onDisconnected() ' + disconnectionType)
|
|
220
212
|
if (this.bufferSentbyOtherConnection) {
|
|
221
213
|
return
|
|
222
214
|
}
|
|
@@ -238,7 +230,7 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
238
230
|
} else if (this.implementation) {
|
|
239
231
|
this.implementation.send(data)
|
|
240
232
|
} else {
|
|
241
|
-
logger.trace('adding data to outputBuffer
|
|
233
|
+
logger.trace('adding data to outputBuffer')
|
|
242
234
|
|
|
243
235
|
let result: RunAndRaceEventsReturnType<Events>
|
|
244
236
|
|
|
@@ -248,7 +240,7 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
248
240
|
result = await runAndRaceEvents3<Events>([() => { this.outputBuffer.push(data) }], this, ['handshakeCompleted', 'handshakeFailed',
|
|
249
241
|
'bufferSentByOtherConnection', 'closing', 'internal_disconnected'], 15000)
|
|
250
242
|
} catch (e) {
|
|
251
|
-
logger.debug(`Connection
|
|
243
|
+
logger.debug(`Connection to ${keyOrUnknownFromPeerDescriptor(this.peerDescriptor)} timed out`)
|
|
252
244
|
throw e
|
|
253
245
|
}
|
|
254
246
|
|
|
@@ -256,7 +248,7 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
256
248
|
this.doNotEmitDisconnected = false
|
|
257
249
|
this.doDisconnect('OTHER')
|
|
258
250
|
} else if (result.winnerName === 'handshakeFailed') {
|
|
259
|
-
logger.trace(
|
|
251
|
+
logger.trace(keyOrUnknownFromPeerDescriptor(this.peerDescriptor) + ' handshakeFailed received')
|
|
260
252
|
|
|
261
253
|
if (this.bufferSentbyOtherConnection) {
|
|
262
254
|
logger.trace('bufferSentByOtherConnection already true')
|
|
@@ -269,8 +261,8 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
269
261
|
result2 = await raceEvents3<Events>(this,
|
|
270
262
|
['bufferSentByOtherConnection', 'closing', 'disconnected'], 15000)
|
|
271
263
|
} catch (ex) {
|
|
272
|
-
logger.trace(
|
|
273
|
-
' Exception from raceEvents3 while waiting bufferSentByOtherConnection or closing ' + ex)
|
|
264
|
+
logger.trace(keyOrUnknownFromPeerDescriptor(this.peerDescriptor)
|
|
265
|
+
+ ' Exception from raceEvents3 while waiting bufferSentByOtherConnection or closing ' + ex)
|
|
274
266
|
throw ex
|
|
275
267
|
}
|
|
276
268
|
if (result2.winnerName === 'bufferSentByOtherConnection') {
|
|
@@ -294,13 +286,13 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
294
286
|
if (this.implementation) {
|
|
295
287
|
this.implementation.send(data)
|
|
296
288
|
} else {
|
|
297
|
-
logger.trace('adding data to outputBuffer
|
|
289
|
+
logger.trace('adding data to outputBuffer')
|
|
298
290
|
this.outputBuffer.push(data)
|
|
299
291
|
}
|
|
300
292
|
}
|
|
301
293
|
|
|
302
294
|
public reportBufferSentByOtherConnection(): void {
|
|
303
|
-
logger.trace(
|
|
295
|
+
logger.trace(keyOrUnknownFromPeerDescriptor(this.peerDescriptor) + ' reportBufferSentByOtherConnection')
|
|
304
296
|
if (this.handshaker) {
|
|
305
297
|
this.handshaker.removeAllListeners()
|
|
306
298
|
}
|
|
@@ -309,16 +301,11 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
309
301
|
this.emit('bufferSentByOtherConnection')
|
|
310
302
|
}
|
|
311
303
|
|
|
312
|
-
public reportBufferSendingByOtherConnectionFailed(): void {
|
|
313
|
-
logger.trace('reportBufferSendingByOtherConnectionFailed')
|
|
314
|
-
this.doDisconnect('OTHER')
|
|
315
|
-
}
|
|
316
|
-
|
|
317
304
|
public acceptHandshake(): void {
|
|
318
305
|
// This happens when connectionRequest has been made and answered
|
|
319
306
|
if (this.implementation) {
|
|
320
307
|
if (!this.handshaker) {
|
|
321
|
-
this.handshaker = new Handshaker(this.ownPeerDescriptor, this.
|
|
308
|
+
this.handshaker = new Handshaker(this.ownPeerDescriptor, this.implementation)
|
|
322
309
|
}
|
|
323
310
|
|
|
324
311
|
this.handshaker.sendHandshakeResponse()
|
|
@@ -336,14 +323,13 @@ export class ManagedConnection extends EventEmitter<Events> {
|
|
|
336
323
|
}
|
|
337
324
|
|
|
338
325
|
private doDisconnect(disconnectionType: DisconnectionType) {
|
|
339
|
-
logger.trace(
|
|
326
|
+
logger.trace(keyOrUnknownFromPeerDescriptor(this.peerDescriptor) + ' doDisconnect() emitting')
|
|
340
327
|
|
|
341
328
|
if (!this.doNotEmitDisconnected) {
|
|
342
|
-
logger.trace(
|
|
329
|
+
logger.trace(keyOrUnknownFromPeerDescriptor(this.peerDescriptor) + ' emitting disconnected')
|
|
343
330
|
this.emit('disconnected', disconnectionType)
|
|
344
331
|
} else {
|
|
345
|
-
logger.trace(
|
|
346
|
-
' not emitting disconnected because doNotEmitDisconnected flag is set')
|
|
332
|
+
logger.trace(keyOrUnknownFromPeerDescriptor(this.peerDescriptor) + ' not emitting disconnected because doNotEmitDisconnected flag is set')
|
|
347
333
|
}
|
|
348
334
|
}
|
|
349
335
|
|
|
@@ -6,12 +6,10 @@ import { NodeWebRtcConnection } from './WebRTC/NodeWebRtcConnection'
|
|
|
6
6
|
export class ManagedWebRtcConnection extends ManagedConnection {
|
|
7
7
|
|
|
8
8
|
constructor(ownPeerDescriptor: PeerDescriptor,
|
|
9
|
-
protocolVersion: string,
|
|
10
9
|
connectingConnection?: NodeWebRtcConnection,
|
|
11
10
|
connectedConnection?: NodeWebRtcConnection) {
|
|
12
11
|
super(
|
|
13
12
|
ownPeerDescriptor,
|
|
14
|
-
protocolVersion,
|
|
15
13
|
ConnectionType.WEBRTC,
|
|
16
14
|
connectingConnection,
|
|
17
15
|
connectedConnection)
|
|
@@ -110,7 +110,6 @@ export class Simulator extends EventEmitter<ConnectionSourceEvents> {
|
|
|
110
110
|
private fixedLatency?: number
|
|
111
111
|
|
|
112
112
|
private loopCounter = 0
|
|
113
|
-
private operationCounter = 0
|
|
114
113
|
private MAX_LOOPS = 1000
|
|
115
114
|
|
|
116
115
|
private operationQueue: Heap<SimulatorOperation> = new Heap<SimulatorOperation>((a: SimulatorOperation, b: SimulatorOperation) => {
|
|
@@ -273,8 +272,6 @@ export class Simulator extends EventEmitter<ConnectionSourceEvents> {
|
|
|
273
272
|
&& this.operationQueue.peek()!.executionTime <= currentTime) {
|
|
274
273
|
const operation = this.operationQueue.pop()
|
|
275
274
|
|
|
276
|
-
this.operationCounter++
|
|
277
|
-
|
|
278
275
|
if (operation instanceof ConnectOperation) {
|
|
279
276
|
this.executeConnectOperation(operation)
|
|
280
277
|
} else if (operation instanceof CloseOperation) {
|
|
@@ -296,10 +293,6 @@ export class Simulator extends EventEmitter<ConnectionSourceEvents> {
|
|
|
296
293
|
this.scheduleNextTimeout()
|
|
297
294
|
}
|
|
298
295
|
|
|
299
|
-
public getOperationCounter(): number {
|
|
300
|
-
return this.operationCounter
|
|
301
|
-
}
|
|
302
|
-
|
|
303
296
|
private scheduleNextTimeout(): void {
|
|
304
297
|
if (this.simulatorTimeout) {
|
|
305
298
|
clearTimeout(this.simulatorTimeout)
|
|
@@ -5,6 +5,7 @@ import { Connection } from '../Connection'
|
|
|
5
5
|
import { Logger } from '@streamr/utils'
|
|
6
6
|
import { protoToString } from '../../helpers/protoToString'
|
|
7
7
|
import { DisconnectionType } from '../../transport/ITransport'
|
|
8
|
+
import { keyFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
8
9
|
|
|
9
10
|
const logger = new Logger(module)
|
|
10
11
|
|
|
@@ -45,35 +46,36 @@ export class SimulatorConnection extends Connection implements IConnection {
|
|
|
45
46
|
this.simulator.send(this, data)
|
|
46
47
|
|
|
47
48
|
} else {
|
|
48
|
-
logger.error(
|
|
49
|
+
logger.error(keyFromPeerDescriptor(this.ownPeerDescriptor) + ', ' + keyFromPeerDescriptor(this.targetPeerDescriptor) +
|
|
49
50
|
'tried to send() on a stopped connection')
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
public async close(disconnectionType: DisconnectionType): Promise<void> {
|
|
54
|
-
logger.trace(
|
|
55
|
+
logger.trace(keyFromPeerDescriptor(this.ownPeerDescriptor) + ', ' + keyFromPeerDescriptor(this.targetPeerDescriptor) + ' close()')
|
|
55
56
|
|
|
56
57
|
if (!this.stopped) {
|
|
57
|
-
logger.trace(
|
|
58
|
+
logger.trace(keyFromPeerDescriptor(this.ownPeerDescriptor) + ', '
|
|
59
|
+
+ keyFromPeerDescriptor(this.targetPeerDescriptor) + ' close() not stopped')
|
|
58
60
|
this.stopped = true
|
|
59
61
|
|
|
60
62
|
try {
|
|
61
|
-
logger.trace(
|
|
63
|
+
logger.trace(keyFromPeerDescriptor(this.ownPeerDescriptor) + ', ' + keyFromPeerDescriptor(this.targetPeerDescriptor) +
|
|
62
64
|
' close() calling simulator.disconnect()')
|
|
63
65
|
this.simulator.close(this)
|
|
64
|
-
logger.trace(
|
|
66
|
+
logger.trace(keyFromPeerDescriptor(this.ownPeerDescriptor) + ', ' + keyFromPeerDescriptor(this.targetPeerDescriptor) +
|
|
65
67
|
' close() simulator.disconnect returned')
|
|
66
68
|
} catch (e) {
|
|
67
|
-
logger.trace(
|
|
69
|
+
logger.trace(keyFromPeerDescriptor(this.ownPeerDescriptor) + ', ' + keyFromPeerDescriptor(this.targetPeerDescriptor) +
|
|
68
70
|
'close aborted' + e)
|
|
69
71
|
} finally {
|
|
70
|
-
logger.trace(
|
|
72
|
+
logger.trace(keyFromPeerDescriptor(this.ownPeerDescriptor) + ', ' + keyFromPeerDescriptor(this.targetPeerDescriptor) +
|
|
71
73
|
' calling this.doDisconnect')
|
|
72
74
|
this.doDisconnect(disconnectionType)
|
|
73
75
|
}
|
|
74
76
|
|
|
75
77
|
} else {
|
|
76
|
-
logger.trace(
|
|
78
|
+
logger.trace(keyFromPeerDescriptor(this.ownPeerDescriptor) + ', ' + keyFromPeerDescriptor(this.targetPeerDescriptor) +
|
|
77
79
|
' close() tried to close a stopped connection')
|
|
78
80
|
}
|
|
79
81
|
}
|
|
@@ -107,7 +109,7 @@ export class SimulatorConnection extends Connection implements IConnection {
|
|
|
107
109
|
|
|
108
110
|
public handleIncomingDisconnection(): void {
|
|
109
111
|
if (!this.stopped) {
|
|
110
|
-
logger.trace(this.ownPeerDescriptor
|
|
112
|
+
logger.trace(keyFromPeerDescriptor(this.ownPeerDescriptor) + ' handleIncomingDisconnection()')
|
|
111
113
|
this.stopped = true
|
|
112
114
|
this.doDisconnect('OTHER')
|
|
113
115
|
} else {
|
|
@@ -117,19 +119,20 @@ export class SimulatorConnection extends Connection implements IConnection {
|
|
|
117
119
|
|
|
118
120
|
public destroy(): void {
|
|
119
121
|
if (!this.stopped) {
|
|
120
|
-
logger.trace(this.ownPeerDescriptor
|
|
122
|
+
logger.trace(keyFromPeerDescriptor(this.ownPeerDescriptor) + ' destroy()')
|
|
121
123
|
this.removeAllListeners()
|
|
122
124
|
this.close('OTHER').catch((_e) => { })
|
|
123
125
|
} else {
|
|
124
|
-
logger.trace(this.ownPeerDescriptor
|
|
126
|
+
logger.trace(keyFromPeerDescriptor(this.ownPeerDescriptor) + ' tried to call destroy() a stopped connection')
|
|
125
127
|
}
|
|
126
128
|
}
|
|
127
129
|
|
|
128
130
|
private doDisconnect(disconnectionType: DisconnectionType) {
|
|
129
|
-
logger.trace(this.ownPeerDescriptor
|
|
131
|
+
logger.trace(keyFromPeerDescriptor(this.ownPeerDescriptor) + ' doDisconnect()')
|
|
130
132
|
this.stopped = true
|
|
131
133
|
|
|
132
|
-
logger.trace(
|
|
134
|
+
logger.trace(keyFromPeerDescriptor(this.ownPeerDescriptor) + ', '
|
|
135
|
+
+ keyFromPeerDescriptor(this.targetPeerDescriptor) + ' doDisconnect emitting')
|
|
133
136
|
|
|
134
137
|
this.emit('disconnected', disconnectionType)
|
|
135
138
|
|