@streamr/dht 100.0.0-pretestnet.2 → 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/ConnectionLockHandler.d.ts +7 -8
- package/dist/src/connection/ConnectionLockHandler.js +16 -14
- package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
- package/dist/src/connection/ConnectionLockRpcLocal.d.ts +20 -0
- package/dist/src/connection/ConnectionLockRpcLocal.js +47 -0
- package/dist/src/connection/ConnectionLockRpcLocal.js.map +1 -0
- package/dist/src/connection/ConnectionLockRpcRemote.d.ts +4 -3
- package/dist/src/connection/ConnectionLockRpcRemote.js +9 -9
- package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
- package/dist/src/connection/ConnectionManager.d.ts +9 -16
- package/dist/src/connection/ConnectionManager.js +101 -132
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/connection/ConnectivityChecker.d.ts +7 -10
- package/dist/src/connection/ConnectivityChecker.js +30 -32
- package/dist/src/connection/ConnectivityChecker.js.map +1 -1
- package/dist/src/connection/ConnectorFacade.d.ts +19 -13
- package/dist/src/connection/ConnectorFacade.js +74 -29
- package/dist/src/connection/ConnectorFacade.js.map +1 -1
- package/dist/src/connection/Handshaker.d.ts +8 -8
- package/dist/src/connection/Handshaker.js +30 -33
- package/dist/src/connection/Handshaker.js.map +1 -1
- package/dist/src/connection/IConnection.d.ts +5 -6
- package/dist/src/connection/IConnection.js.map +1 -1
- package/dist/src/connection/ManagedConnection.d.ts +9 -13
- package/dist/src/connection/ManagedConnection.js +63 -99
- package/dist/src/connection/ManagedConnection.js.map +1 -1
- package/dist/src/connection/ManagedWebrtcConnection.d.ts +7 -0
- package/dist/src/connection/ManagedWebrtcConnection.js +20 -0
- package/dist/src/connection/ManagedWebrtcConnection.js.map +1 -0
- package/dist/src/connection/{Simulator → simulator}/Simulator.js +3 -3
- package/dist/src/connection/{Simulator → simulator}/Simulator.js.map +1 -1
- package/dist/src/connection/{Simulator → simulator}/SimulatorConnection.d.ts +3 -4
- package/dist/src/connection/{Simulator → simulator}/SimulatorConnection.js +25 -24
- package/dist/src/connection/simulator/SimulatorConnection.js.map +1 -0
- package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.d.ts +3 -3
- package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.js +17 -18
- package/dist/src/connection/simulator/SimulatorConnector.js.map +1 -0
- package/dist/src/connection/{Simulator → simulator}/SimulatorTransport.d.ts +1 -1
- package/dist/src/connection/{Simulator → simulator}/SimulatorTransport.js +2 -2
- package/dist/src/connection/simulator/SimulatorTransport.js.map +1 -0
- package/dist/src/connection/{Simulator → simulator}/pings.js.map +1 -1
- package/dist/src/connection/{WebRTC/IWebRtcConnection.d.ts → webrtc/IWebrtcConnection.d.ts} +2 -2
- package/dist/src/connection/{WebRTC/IWebRtcConnection.js → webrtc/IWebrtcConnection.js} +1 -1
- package/dist/src/connection/webrtc/IWebrtcConnection.js.map +1 -0
- package/dist/src/connection/{WebRTC/NodeWebRtcConnection.d.ts → webrtc/NodeWebrtcConnection.d.ts} +6 -7
- package/dist/src/connection/{WebRTC/NodeWebRtcConnection.js → webrtc/NodeWebrtcConnection.js} +41 -42
- package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -0
- package/dist/src/connection/webrtc/WebrtcConnector.d.ts +38 -0
- package/dist/src/connection/webrtc/WebrtcConnector.js +178 -0
- package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -0
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.d.ts +26 -0
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js +99 -0
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js.map +1 -0
- package/dist/src/connection/{WebRTC/WebRtcConnectorRpcRemote.d.ts → webrtc/WebrtcConnectorRpcRemote.d.ts} +4 -4
- package/dist/src/connection/{WebRTC/WebRtcConnectorRpcRemote.js → webrtc/WebrtcConnectorRpcRemote.js} +6 -8
- package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js.map +1 -0
- package/dist/src/connection/{WebRTC → webrtc}/iceServerAsString.d.ts +1 -1
- package/dist/src/connection/{WebRTC → webrtc}/iceServerAsString.js.map +1 -1
- package/dist/src/connection/websocket/AutoCertifierClientFacade.d.ts +26 -0
- package/dist/src/connection/websocket/AutoCertifierClientFacade.js +37 -0
- package/dist/src/connection/websocket/AutoCertifierClientFacade.js.map +1 -0
- package/dist/src/connection/{WebSocket/ClientWebSocket.d.ts → websocket/ClientWebsocket.d.ts} +5 -4
- package/dist/src/connection/{WebSocket/ClientWebSocket.js → websocket/ClientWebsocket.js} +23 -16
- package/dist/src/connection/websocket/ClientWebsocket.js.map +1 -0
- package/dist/src/connection/{WebSocket/ServerWebSocket.d.ts → websocket/ServerWebsocket.d.ts} +2 -2
- package/dist/src/connection/{WebSocket/ServerWebSocket.js → websocket/ServerWebsocket.js} +25 -27
- package/dist/src/connection/websocket/ServerWebsocket.js.map +1 -0
- package/dist/src/connection/websocket/WebsocketConnector.d.ts +53 -0
- package/dist/src/connection/websocket/WebsocketConnector.js +242 -0
- package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -0
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.d.ts +17 -0
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js +26 -0
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js.map +1 -0
- package/dist/src/connection/{WebSocket/WebSocketConnectorRpcRemote.d.ts → websocket/WebsocketConnectorRpcRemote.d.ts} +3 -3
- package/dist/src/connection/{WebSocket/WebSocketConnectorRpcRemote.js → websocket/WebsocketConnectorRpcRemote.js} +6 -11
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js.map +1 -0
- package/dist/src/connection/{WebSocket/WebSocketServer.d.ts → websocket/WebsocketServer.d.ts} +6 -3
- package/dist/src/connection/{WebSocket/WebSocketServer.js → websocket/WebsocketServer.js} +39 -19
- package/dist/src/connection/websocket/WebsocketServer.js.map +1 -0
- package/dist/src/dht/DhtNode.d.ts +11 -19
- package/dist/src/dht/DhtNode.js +135 -163
- package/dist/src/dht/DhtNode.js.map +1 -1
- package/dist/src/dht/DhtNodeRpcLocal.d.ts +22 -0
- package/dist/src/dht/DhtNodeRpcLocal.js +42 -0
- package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -0
- package/dist/src/dht/{RemoteDhtNode.d.ts → DhtNodeRpcRemote.d.ts} +5 -3
- package/dist/src/dht/{RemoteDhtNode.js → DhtNodeRpcRemote.js} +20 -24
- package/dist/src/dht/DhtNodeRpcRemote.js.map +1 -0
- package/dist/src/dht/ExternalApiRpcLocal.d.ts +16 -0
- package/dist/src/dht/ExternalApiRpcLocal.js +30 -0
- package/dist/src/dht/ExternalApiRpcLocal.js.map +1 -0
- package/dist/src/dht/ExternalApiRpcRemote.d.ts +1 -1
- package/dist/src/dht/ExternalApiRpcRemote.js +2 -2
- package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -1
- package/dist/src/dht/contact/Remote.d.ts +4 -1
- package/dist/src/dht/contact/Remote.js +28 -2
- package/dist/src/dht/contact/Remote.js.map +1 -1
- package/dist/src/dht/contact/SortedContactList.d.ts +2 -2
- package/dist/src/dht/contact/SortedContactList.js +3 -3
- package/dist/src/dht/contact/SortedContactList.js.map +1 -1
- package/dist/src/dht/discovery/DiscoverySession.d.ts +9 -7
- package/dist/src/dht/discovery/DiscoverySession.js +9 -9
- package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
- package/dist/src/dht/discovery/PeerDiscovery.d.ts +7 -10
- package/dist/src/dht/discovery/PeerDiscovery.js +6 -6
- package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
- package/dist/src/dht/find/FindRpcLocal.d.ts +14 -0
- package/dist/src/dht/find/FindRpcLocal.js +25 -0
- package/dist/src/dht/find/FindRpcLocal.js.map +1 -0
- package/dist/src/dht/find/{RecursiveFindSession.d.ts → FindSession.d.ts} +12 -13
- package/dist/src/dht/find/{RecursiveFindSession.js → FindSession.js} +17 -15
- package/dist/src/dht/find/FindSession.js.map +1 -0
- package/dist/src/dht/find/FindSessionRpcLocal.d.ts +12 -0
- package/dist/src/dht/find/FindSessionRpcLocal.js +17 -0
- package/dist/src/dht/find/FindSessionRpcLocal.js.map +1 -0
- package/dist/src/dht/find/{RemoteRecursiveFindSession.d.ts → FindSessionRpcRemote.d.ts} +2 -2
- package/dist/src/dht/find/{RemoteRecursiveFindSession.js → FindSessionRpcRemote.js} +5 -5
- package/dist/src/dht/find/FindSessionRpcRemote.js.map +1 -0
- package/dist/src/dht/find/{RecursiveFinder.d.ts → Finder.d.ts} +16 -19
- package/dist/src/dht/find/{RecursiveFinder.js → Finder.js} +50 -46
- package/dist/src/dht/find/Finder.js.map +1 -0
- package/dist/src/dht/routing/FindRpcRemote.d.ts +6 -0
- package/dist/src/dht/routing/FindRpcRemote.js +41 -0
- package/dist/src/dht/routing/FindRpcRemote.js.map +1 -0
- package/dist/src/dht/routing/Router.d.ts +10 -17
- package/dist/src/dht/routing/Router.js +50 -93
- package/dist/src/dht/routing/Router.js.map +1 -1
- package/dist/src/dht/routing/RouterRpcLocal.d.ts +22 -0
- package/dist/src/dht/routing/RouterRpcLocal.js +66 -0
- package/dist/src/dht/routing/RouterRpcLocal.js.map +1 -0
- package/dist/src/dht/routing/RouterRpcRemote.d.ts +0 -1
- package/dist/src/dht/routing/RouterRpcRemote.js +17 -45
- package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -1
- package/dist/src/dht/routing/RoutingSession.d.ts +17 -8
- package/dist/src/dht/routing/RoutingSession.js +124 -131
- package/dist/src/dht/routing/RoutingSession.js.map +1 -1
- package/dist/src/dht/routing/getPreviousPeer.d.ts +2 -0
- package/dist/src/dht/routing/getPreviousPeer.js +9 -0
- package/dist/src/dht/routing/getPreviousPeer.js.map +1 -0
- package/dist/src/dht/store/StoreRpcLocal.d.ts +11 -8
- package/dist/src/dht/store/StoreRpcLocal.js +26 -25
- package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
- package/dist/src/dht/store/StoreRpcRemote.js +6 -10
- package/dist/src/dht/store/StoreRpcRemote.js.map +1 -1
- package/dist/src/exports.d.ts +11 -5
- package/dist/src/exports.js +17 -4
- package/dist/src/exports.js.map +1 -1
- package/dist/src/helpers/Connectivity.d.ts +4 -0
- package/dist/src/helpers/Connectivity.js +24 -0
- package/dist/src/helpers/Connectivity.js.map +1 -0
- package/dist/src/helpers/errors.d.ts +3 -3
- package/dist/src/helpers/errors.js +7 -7
- 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/helpers/protoClasses.js +3 -3
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +56 -39
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +49 -36
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +85 -96
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +82 -71
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +26 -21
- package/dist/src/rpc-protocol/DhtCallContext.d.ts +0 -1
- package/dist/src/rpc-protocol/DhtCallContext.js.map +1 -1
- package/dist/src/transport/ITransport.d.ts +5 -6
- package/dist/src/transport/ListeningRpcCommunicator.d.ts +2 -1
- package/dist/src/transport/ListeningRpcCommunicator.js.map +1 -1
- package/dist/src/transport/RoutingRpcCommunicator.d.ts +2 -1
- package/dist/src/transport/RoutingRpcCommunicator.js +0 -1
- package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
- package/dist/src/types/ServiceID.d.ts +1 -0
- package/dist/src/types/ServiceID.js +3 -0
- package/dist/src/types/ServiceID.js.map +1 -0
- package/karma.config.js +4 -4
- package/package.json +10 -8
- package/protos/DhtRpc.proto +41 -40
- package/src/connection/ConnectionLockHandler.ts +19 -17
- package/src/connection/ConnectionLockRpcLocal.ts +74 -0
- package/src/connection/ConnectionLockRpcRemote.ts +11 -11
- package/src/connection/ConnectionManager.ts +88 -130
- package/src/connection/ConnectivityChecker.ts +36 -34
- package/src/connection/ConnectorFacade.ts +91 -40
- package/src/connection/Handshaker.ts +20 -23
- package/src/connection/IConnection.ts +5 -6
- package/src/connection/ManagedConnection.ts +76 -101
- package/src/connection/{ManagedWebRtcConnection.ts → ManagedWebrtcConnection.ts} +12 -10
- package/src/connection/{Simulator → simulator}/Simulator.ts +4 -4
- package/src/connection/{Simulator → simulator}/SimulatorConnection.ts +27 -27
- package/src/connection/{Simulator → simulator}/SimulatorConnector.ts +22 -23
- package/src/connection/{Simulator → simulator}/SimulatorTransport.ts +2 -2
- package/src/connection/{WebRTC/BrowserWebRtcConnection.ts → webrtc/BrowserWebrtcConnection.ts} +13 -14
- package/src/connection/{WebRTC/IWebRtcConnection.ts → webrtc/IWebrtcConnection.ts} +2 -2
- package/src/connection/{WebRTC/NodeWebRtcConnection.ts → webrtc/NodeWebrtcConnection.ts} +38 -40
- package/src/connection/webrtc/WebrtcConnector.ts +226 -0
- package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +132 -0
- package/src/connection/{WebRTC/WebRtcConnectorRpcRemote.ts → webrtc/WebrtcConnectorRpcRemote.ts} +6 -7
- package/src/connection/{WebRTC → webrtc}/iceServerAsString.ts +1 -1
- package/src/connection/websocket/AutoCertifierClientFacade.ts +91 -0
- package/src/connection/{WebSocket/ClientWebSocket.ts → websocket/ClientWebsocket.ts} +22 -17
- package/src/connection/{WebSocket/ServerWebSocket.ts → websocket/ServerWebsocket.ts} +23 -27
- package/src/connection/websocket/WebsocketConnector.ts +328 -0
- package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +41 -0
- package/src/connection/{WebSocket/WebSocketConnectorRpcRemote.ts → websocket/WebsocketConnectorRpcRemote.ts} +8 -14
- package/src/connection/{WebSocket/WebSocketServer.ts → websocket/WebsocketServer.ts} +40 -22
- package/src/dht/DhtNode.ts +166 -193
- package/src/dht/DhtNodeRpcLocal.ts +68 -0
- package/src/dht/{RemoteDhtNode.ts → DhtNodeRpcRemote.ts} +17 -18
- package/src/dht/ExternalApiRpcLocal.ts +46 -0
- package/src/dht/ExternalApiRpcRemote.ts +4 -4
- package/src/dht/contact/Remote.ts +32 -4
- package/src/dht/contact/SortedContactList.ts +4 -4
- package/src/dht/discovery/DiscoverySession.ts +25 -22
- package/src/dht/discovery/PeerDiscovery.ts +16 -19
- package/src/dht/find/FindRpcLocal.ts +35 -0
- package/src/dht/find/{RecursiveFindSession.ts → FindSession.ts} +25 -25
- package/src/dht/find/FindSessionRpcLocal.ts +25 -0
- package/src/dht/find/{RemoteRecursiveFindSession.ts → FindSessionRpcRemote.ts} +9 -5
- package/src/dht/find/{RecursiveFinder.ts → Finder.ts} +77 -71
- package/src/dht/routing/FindRpcRemote.ts +40 -0
- package/src/dht/routing/Router.ts +78 -109
- package/src/dht/routing/RouterRpcLocal.ts +81 -0
- package/src/dht/routing/RouterRpcRemote.ts +18 -49
- package/src/dht/routing/RoutingSession.ts +58 -63
- package/src/dht/routing/getPreviousPeer.ts +6 -0
- package/src/dht/store/StoreRpcLocal.ts +46 -39
- package/src/dht/store/StoreRpcRemote.ts +8 -12
- package/src/exports.ts +11 -5
- package/src/helpers/Connectivity.ts +19 -0
- package/src/helpers/errors.ts +3 -3
- package/src/helpers/peerIdFromPeerDescriptor.ts +6 -0
- package/src/helpers/protoClasses.ts +6 -6
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +75 -59
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +26 -21
- package/src/proto/packages/dht/protos/DhtRpc.ts +112 -131
- package/src/rpc-protocol/DhtCallContext.ts +0 -1
- package/src/transport/ITransport.ts +5 -8
- package/src/transport/ListeningRpcCommunicator.ts +2 -1
- package/src/transport/RoutingRpcCommunicator.ts +3 -4
- package/src/types/ServiceID.ts +1 -0
- package/test/benchmark/{RecursiveFind.test.ts → Find.test.ts} +7 -7
- package/test/benchmark/KademliaCorrectness.test.ts +3 -3
- package/test/benchmark/kademlia-simulation/SimulationNode.ts +3 -3
- package/test/end-to-end/Layer0-Layer1.test.ts +13 -5
- package/test/end-to-end/Layer0.test.ts +35 -17
- package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +28 -9
- package/test/end-to-end/{Layer0WebRTC-Layer1.test.ts → Layer0Webrtc-Layer1.test.ts} +1 -1
- package/test/end-to-end/{Layer0WebRTC.test.ts → Layer0Webrtc.test.ts} +14 -10
- package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +8 -4
- package/test/end-to-end/{Layer1-Scale-WebRTC.test.ts → Layer1-Scale-Webrtc.test.ts} +2 -2
- package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +52 -0
- package/test/end-to-end/{WebSocketConnectionRequest.test.ts → WebsocketConnectionRequest.test.ts} +16 -8
- package/test/end-to-end/memory-leak.test.ts +85 -0
- package/test/integration/ConnectionLocking.test.ts +10 -7
- package/test/integration/ConnectionManager.test.ts +107 -30
- package/test/integration/DhtJoinPeerDiscovery.test.ts +2 -2
- package/test/integration/DhtNodeExternalAPI.test.ts +10 -10
- package/test/integration/{RemoteDhtNode.test.ts → DhtNodeRpcRemote.test.ts} +10 -10
- package/test/integration/DhtRpc.test.ts +5 -5
- package/test/integration/{RecursiveFind.test.ts → Find.test.ts} +6 -9
- package/test/integration/Layer1-scale.test.ts +1 -1
- package/test/integration/MigrateData.test.ts +8 -7
- package/test/integration/Mock-Layer1-Layer0.test.ts +1 -1
- package/test/integration/MultipleEntryPointJoining.test.ts +8 -8
- package/test/integration/RouteMessage.test.ts +26 -26
- package/test/integration/RpcErrors.test.ts +10 -10
- package/test/integration/ScaleDownDht.test.ts +6 -6
- package/test/integration/SimultaneousConnections.test.ts +10 -7
- package/test/integration/Store.test.ts +4 -7
- package/test/integration/StoreAndDelete.test.ts +4 -7
- package/test/integration/StoreOnDhtWithTwoNodes.test.ts +12 -12
- package/test/integration/{WebRtcConnectionManagement.test.ts → WebrtcConnectionManagement.test.ts} +5 -5
- package/test/integration/{WebRtcConnectorRpc.test.ts → WebrtcConnectorRpc.test.ts} +7 -8
- package/test/integration/{WebSocket.test.ts → Websocket.test.ts} +14 -13
- package/test/integration/{WebSocketConnectionManagement.test.ts → WebsocketConnectionManagement.test.ts} +4 -4
- package/test/integration/{WebSocketConnectorRpc.test.ts → WebsocketConnectorRpc.test.ts} +15 -15
- package/test/unit/AutoCertifierClientFacade.test.ts +58 -0
- package/test/unit/ConnectivityHelpers.test.ts +69 -0
- package/test/unit/{RecursiveFinder.test.ts → Finder.test.ts} +19 -17
- package/test/unit/Router.test.ts +26 -26
- package/test/unit/UUID.test.ts +1 -1
- package/test/unit/{WebSocketConnectorRpcLocal.test.ts → WebsocketConnector.test.ts} +8 -8
- package/test/unit/{WebSocketServer.test.ts → WebsocketServer.test.ts} +20 -14
- package/test/unit/webrtcReplaceInternalIpWithExternalIp.test.ts +1 -1
- package/test/utils/FakeRpcCommunicator.ts +23 -0
- package/test/utils/mock/Transport.ts +1 -1
- package/test/utils/utils.ts +22 -26
- package/tsconfig.browser.json +1 -1
- package/tsconfig.jest.json +3 -2
- package/tsconfig.node.json +3 -2
- package/dist/src/connection/ManagedWebRtcConnection.d.ts +0 -7
- package/dist/src/connection/ManagedWebRtcConnection.js +0 -20
- package/dist/src/connection/ManagedWebRtcConnection.js.map +0 -1
- package/dist/src/connection/Simulator/SimulatorConnection.js.map +0 -1
- package/dist/src/connection/Simulator/SimulatorConnector.js.map +0 -1
- package/dist/src/connection/Simulator/SimulatorTransport.js.map +0 -1
- package/dist/src/connection/WebRTC/IWebRtcConnection.js.map +0 -1
- package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +0 -1
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.d.ts +0 -51
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js +0 -249
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js.map +0 -1
- package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js.map +0 -1
- package/dist/src/connection/WebSocket/ClientWebSocket.js.map +0 -1
- package/dist/src/connection/WebSocket/ServerWebSocket.js.map +0 -1
- package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.d.ts +0 -45
- package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.js +0 -234
- package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.js.map +0 -1
- package/dist/src/connection/WebSocket/WebSocketConnectorRpcRemote.js.map +0 -1
- package/dist/src/connection/WebSocket/WebSocketServer.js.map +0 -1
- package/dist/src/dht/RemoteDhtNode.js.map +0 -1
- package/dist/src/dht/find/RecursiveFindSession.js.map +0 -1
- package/dist/src/dht/find/RecursiveFinder.js.map +0 -1
- package/dist/src/dht/find/RemoteRecursiveFindSession.js.map +0 -1
- package/dist/src/dht/registerExternalApiRpcMethods.d.ts +0 -2
- package/dist/src/dht/registerExternalApiRpcMethods.js +0 -32
- package/dist/src/dht/registerExternalApiRpcMethods.js.map +0 -1
- package/src/connection/WebRTC/WebRtcConnectorRpcLocal.ts +0 -335
- package/src/connection/WebSocket/WebSocketConnectorRpcLocal.ts +0 -295
- package/src/dht/registerExternalApiRpcMethods.ts +0 -44
- package/test/utils/mock/RecursiveFinder.ts +0 -19
- /package/dist/src/connection/{Simulator → simulator}/Simulator.d.ts +0 -0
- /package/dist/src/connection/{Simulator → simulator}/pings.d.ts +0 -0
- /package/dist/src/connection/{Simulator → simulator}/pings.js +0 -0
- /package/dist/src/connection/{WebRTC → webrtc}/iceServerAsString.js +0 -0
- /package/src/connection/{Simulator → simulator}/pings.ts +0 -0
|
@@ -8,11 +8,11 @@ import { PeerIDKey } from '../helpers/PeerID'
|
|
|
8
8
|
import * as Err from '../helpers/errors'
|
|
9
9
|
import {
|
|
10
10
|
areEqualPeerDescriptors,
|
|
11
|
+
getNodeIdFromPeerDescriptor,
|
|
11
12
|
keyFromPeerDescriptor,
|
|
12
13
|
peerIdFromPeerDescriptor
|
|
13
14
|
} from '../helpers/peerIdFromPeerDescriptor'
|
|
14
15
|
import { protoToString } from '../helpers/protoToString'
|
|
15
|
-
import { Empty } from '../proto/google/protobuf/empty'
|
|
16
16
|
import {
|
|
17
17
|
DisconnectMode,
|
|
18
18
|
DisconnectNotice,
|
|
@@ -25,15 +25,15 @@ import {
|
|
|
25
25
|
UnlockRequest
|
|
26
26
|
} from '../proto/packages/dht/protos/DhtRpc'
|
|
27
27
|
import { ConnectionLockRpcClient } from '../proto/packages/dht/protos/DhtRpc.client'
|
|
28
|
-
import {
|
|
28
|
+
import { ITransport, TransportEvents } from '../transport/ITransport'
|
|
29
29
|
import { RoutingRpcCommunicator } from '../transport/RoutingRpcCommunicator'
|
|
30
|
-
import { ConnectionLockHandler } from './ConnectionLockHandler'
|
|
30
|
+
import { ConnectionLockHandler, LockID } from './ConnectionLockHandler'
|
|
31
31
|
import { ConnectorFacade } from './ConnectorFacade'
|
|
32
32
|
import { ManagedConnection, Events as ManagedConnectionEvents } from './ManagedConnection'
|
|
33
33
|
import { ConnectionLockRpcRemote } from './ConnectionLockRpcRemote'
|
|
34
|
-
import {
|
|
34
|
+
import { WEBRTC_CLEANUP } from './webrtc/NodeWebrtcConnection'
|
|
35
35
|
import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
|
|
36
|
-
import {
|
|
36
|
+
import { ConnectionLockRpcLocal } from './ConnectionLockRpcLocal'
|
|
37
37
|
|
|
38
38
|
export interface ConnectionManagerConfig {
|
|
39
39
|
maxConnections?: number
|
|
@@ -67,10 +67,6 @@ enum ConnectionManagerState {
|
|
|
67
67
|
STOPPED = 'stopped'
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
interface ConnectionManagerEvents {
|
|
71
|
-
newConnection: (connection: ManagedConnection) => void
|
|
72
|
-
}
|
|
73
|
-
|
|
74
70
|
export interface ConnectionLocker {
|
|
75
71
|
lockConnection(targetDescriptor: PeerDescriptor, serviceId: ServiceId): void
|
|
76
72
|
unlockConnection(targetDescriptor: PeerDescriptor, serviceId: ServiceId): void
|
|
@@ -88,28 +84,26 @@ export interface TlsCertificate {
|
|
|
88
84
|
certFileName: string
|
|
89
85
|
}
|
|
90
86
|
|
|
91
|
-
export type Events = TransportEvents & ConnectionManagerEvents
|
|
92
|
-
|
|
93
87
|
const INTERNAL_SERVICE_ID = 'system/connection-manager'
|
|
94
88
|
|
|
95
89
|
// Form an string representation from a peer description which can be undefined. This output
|
|
96
90
|
// should only be used only for log output. TODO remove this method if we no longer use
|
|
97
91
|
// peerDescriptors which can be undefined, e.g.
|
|
98
92
|
// - if we refactor ConnectionManager so that it doesn't process handshake requests too early
|
|
99
|
-
// and therefore this.
|
|
93
|
+
// and therefore this.localPeerDescriptor can't be undefine (NET-1129)
|
|
100
94
|
// - if the peerDescriptor of ManagedConnection is always available
|
|
101
95
|
// - if we create stricter types for incoming messages (message.sourceDescriptor or
|
|
102
96
|
// disconnectNotice.peerDescriptor)
|
|
103
97
|
// - if ManagedConnection#peerDescriptor is never undefined
|
|
104
|
-
export const
|
|
98
|
+
export const getNodeIdOrUnknownFromPeerDescriptor = (peerDescriptor: PeerDescriptor | undefined): string => {
|
|
105
99
|
if (peerDescriptor !== undefined) {
|
|
106
|
-
return
|
|
100
|
+
return getNodeIdFromPeerDescriptor(peerDescriptor)
|
|
107
101
|
} else {
|
|
108
102
|
return 'unknown'
|
|
109
103
|
}
|
|
110
104
|
}
|
|
111
105
|
|
|
112
|
-
export class ConnectionManager extends EventEmitter<
|
|
106
|
+
export class ConnectionManager extends EventEmitter<TransportEvents> implements ITransport, ConnectionLocker {
|
|
113
107
|
|
|
114
108
|
private config: ConnectionManagerConfig
|
|
115
109
|
private readonly metricsContext: MetricsContext
|
|
@@ -126,8 +120,9 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
126
120
|
super()
|
|
127
121
|
this.config = config
|
|
128
122
|
this.onData = this.onData.bind(this)
|
|
129
|
-
this.
|
|
130
|
-
this.
|
|
123
|
+
this.send = this.send.bind(this)
|
|
124
|
+
this.onNewConnection = this.onNewConnection.bind(this)
|
|
125
|
+
this.metricsContext = this.config.metricsContext ?? new MetricsContext()
|
|
131
126
|
this.metrics = {
|
|
132
127
|
sendMessagesPerSecond: new RateMetric(),
|
|
133
128
|
sendBytesPerSecond: new RateMetric(),
|
|
@@ -142,29 +137,37 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
142
137
|
this.rpcCommunicator = new RoutingRpcCommunicator(INTERNAL_SERVICE_ID, this.send, {
|
|
143
138
|
rpcRequestTimeout: 10000
|
|
144
139
|
})
|
|
140
|
+
const lockRpcLocal = new ConnectionLockRpcLocal({
|
|
141
|
+
addRemoteLocked: (id: PeerIDKey, serviceId: string) => this.locks.addRemoteLocked(id, serviceId),
|
|
142
|
+
removeRemoteLocked: (id: PeerIDKey, serviceId: string) => this.locks.removeRemoteLocked(id, serviceId),
|
|
143
|
+
closeConnection: (peerDescriptor: PeerDescriptor, gracefulLeave: boolean, reason?: string) => {
|
|
144
|
+
this.closeConnection(peerDescriptor, gracefulLeave, reason)
|
|
145
|
+
},
|
|
146
|
+
getLocalPeerDescriptor: () => this.getLocalPeerDescriptor()
|
|
147
|
+
})
|
|
145
148
|
this.rpcCommunicator.registerRpcMethod(LockRequest, LockResponse, 'lockRequest',
|
|
146
|
-
(req: LockRequest, context: ServerCallContext) =>
|
|
149
|
+
(req: LockRequest, context: ServerCallContext) => lockRpcLocal.lockRequest(req, context))
|
|
147
150
|
this.rpcCommunicator.registerRpcNotification(UnlockRequest, 'unlockRequest',
|
|
148
|
-
(req: UnlockRequest, context: ServerCallContext) =>
|
|
151
|
+
(req: UnlockRequest, context: ServerCallContext) => lockRpcLocal.unlockRequest(req, context))
|
|
149
152
|
this.rpcCommunicator.registerRpcMethod(DisconnectNotice, DisconnectNoticeResponse, 'gracefulDisconnect',
|
|
150
|
-
(req: DisconnectNotice, context: ServerCallContext) =>
|
|
153
|
+
(req: DisconnectNotice, context: ServerCallContext) => lockRpcLocal.gracefulDisconnect(req, context))
|
|
151
154
|
}
|
|
152
155
|
|
|
153
156
|
public garbageCollectConnections(maxConnections: number, lastUsedLimit: number): void {
|
|
154
157
|
if (this.connections.size <= maxConnections) {
|
|
155
158
|
return
|
|
156
159
|
}
|
|
157
|
-
const disconnectionCandidates = new SortedContactList<Contact>(peerIdFromPeerDescriptor(this.
|
|
160
|
+
const disconnectionCandidates = new SortedContactList<Contact>(peerIdFromPeerDescriptor(this.getLocalPeerDescriptor()), 100000)
|
|
158
161
|
this.connections.forEach((connection) => {
|
|
159
162
|
if (!this.locks.isLocked(connection.peerIdKey) && Date.now() - connection.getLastUsed() > lastUsedLimit) {
|
|
160
|
-
logger.trace('disconnecting in timeout interval: ' +
|
|
163
|
+
logger.trace('disconnecting in timeout interval: ' + getNodeIdOrUnknownFromPeerDescriptor(connection.getPeerDescriptor()))
|
|
161
164
|
disconnectionCandidates.addContact(new Contact(connection.getPeerDescriptor()!))
|
|
162
165
|
}
|
|
163
166
|
})
|
|
164
167
|
const sortedCandidates = disconnectionCandidates.getAllContacts()
|
|
165
168
|
const targetNum = this.connections.size - maxConnections
|
|
166
169
|
for (let i = 0; i < sortedCandidates.length && i < targetNum; i++) {
|
|
167
|
-
logger.trace('garbageCollecting ' +
|
|
170
|
+
logger.trace('garbageCollecting ' + getNodeIdFromPeerDescriptor(sortedCandidates[sortedCandidates.length - 1 - i].getPeerDescriptor()))
|
|
168
171
|
this.gracefullyDisconnectAsync(sortedCandidates[sortedCandidates.length - 1 - i].getPeerDescriptor(),
|
|
169
172
|
DisconnectMode.NORMAL).catch((_e) => { })
|
|
170
173
|
}
|
|
@@ -177,8 +180,9 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
177
180
|
this.state = ConnectionManagerState.RUNNING
|
|
178
181
|
logger.trace(`Starting ConnectionManager...`)
|
|
179
182
|
await this.connectorFacade.start(
|
|
180
|
-
(connection: ManagedConnection) => this.
|
|
181
|
-
(peerDescriptor: PeerDescriptor) => this.canConnect(peerDescriptor)
|
|
183
|
+
(connection: ManagedConnection) => this.onNewConnection(connection),
|
|
184
|
+
(peerDescriptor: PeerDescriptor) => this.canConnect(peerDescriptor),
|
|
185
|
+
this
|
|
182
186
|
)
|
|
183
187
|
// Garbage collection of connections
|
|
184
188
|
this.disconnectorIntervalRef = setInterval(() => {
|
|
@@ -209,7 +213,7 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
209
213
|
} else {
|
|
210
214
|
logger.trace('handshake of connection not completed, force-closing')
|
|
211
215
|
const eventReceived = waitForEvent3<ManagedConnectionEvents>(peer, 'disconnected', 2000)
|
|
212
|
-
peer.close(
|
|
216
|
+
peer.close(true)
|
|
213
217
|
try {
|
|
214
218
|
await eventReceived
|
|
215
219
|
logger.trace('resolving after receiving disconnected event from non-handshaked connection')
|
|
@@ -224,10 +228,10 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
224
228
|
this.duplicateMessageDetector.clear()
|
|
225
229
|
this.locks.clear()
|
|
226
230
|
this.removeAllListeners()
|
|
227
|
-
// TODO would it make sense to move this call to
|
|
231
|
+
// TODO would it make sense to move this call to WebrtcConnector#stop()?
|
|
228
232
|
// - but note that we should call this only after connections have been closed
|
|
229
233
|
// (i.e the this.gracefullyDisconnectAsync() calls above)
|
|
230
|
-
|
|
234
|
+
WEBRTC_CLEANUP.cleanUp()
|
|
231
235
|
}
|
|
232
236
|
|
|
233
237
|
public getNumberOfLocalLockedConnections(): number {
|
|
@@ -246,22 +250,20 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
246
250
|
if (this.state === ConnectionManagerState.STOPPED && !doNotMindStopped) {
|
|
247
251
|
return
|
|
248
252
|
}
|
|
249
|
-
|
|
250
253
|
const peerDescriptor = message.targetDescriptor!
|
|
251
254
|
if (this.isConnectionToSelf(peerDescriptor)) {
|
|
252
255
|
throw new Err.CannotConnectToSelf('Cannot send to self')
|
|
253
256
|
}
|
|
254
|
-
logger.trace(`Sending message to: ${
|
|
257
|
+
logger.trace(`Sending message to: ${getNodeIdFromPeerDescriptor(peerDescriptor)}`)
|
|
255
258
|
message = {
|
|
256
259
|
...message,
|
|
257
|
-
|
|
258
|
-
sourceDescriptor: message.sourceDescriptor || this.getOwnPeerDescriptor(),
|
|
260
|
+
sourceDescriptor: this.getLocalPeerDescriptor()
|
|
259
261
|
}
|
|
260
262
|
const peerIdKey = keyFromPeerDescriptor(peerDescriptor)
|
|
261
263
|
let connection = this.connections.get(peerIdKey)
|
|
262
264
|
if (!connection && !doNotConnect) {
|
|
263
265
|
connection = this.connectorFacade.createConnection(peerDescriptor)
|
|
264
|
-
this.
|
|
266
|
+
this.onNewConnection(connection)
|
|
265
267
|
} else if (!connection) {
|
|
266
268
|
throw new Err.SendFailed('No connection to target, doNotConnect flag is true')
|
|
267
269
|
}
|
|
@@ -272,14 +274,14 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
272
274
|
}
|
|
273
275
|
|
|
274
276
|
private isConnectionToSelf(peerDescriptor: PeerDescriptor): boolean {
|
|
275
|
-
return areEqualPeerDescriptors(peerDescriptor, this.
|
|
277
|
+
return areEqualPeerDescriptors(peerDescriptor, this.getLocalPeerDescriptor()) || this.isOwnWebsocketServer(peerDescriptor)
|
|
276
278
|
}
|
|
277
279
|
|
|
278
|
-
private
|
|
279
|
-
const
|
|
280
|
-
if ((peerDescriptor.websocket !== undefined) && (
|
|
281
|
-
return ((peerDescriptor.websocket.port ===
|
|
282
|
-
&& (peerDescriptor.websocket.host ===
|
|
280
|
+
private isOwnWebsocketServer(peerDescriptor: PeerDescriptor): boolean {
|
|
281
|
+
const localPeerDescriptor = this.getLocalPeerDescriptor()
|
|
282
|
+
if ((peerDescriptor.websocket !== undefined) && (localPeerDescriptor.websocket !== undefined)) {
|
|
283
|
+
return ((peerDescriptor.websocket.port === localPeerDescriptor.websocket.port)
|
|
284
|
+
&& (peerDescriptor.websocket.host === localPeerDescriptor.websocket.host))
|
|
283
285
|
} else {
|
|
284
286
|
return false
|
|
285
287
|
}
|
|
@@ -290,13 +292,8 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
290
292
|
return this.connections.get(peerIdKey)
|
|
291
293
|
}
|
|
292
294
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
return this.getOwnPeerDescriptor()
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
private getOwnPeerDescriptor(): PeerDescriptor {
|
|
299
|
-
return this.connectorFacade.getOwnPeerDescriptor()!
|
|
295
|
+
public getLocalPeerDescriptor(): PeerDescriptor {
|
|
296
|
+
return this.connectorFacade.getLocalPeerDescriptor()!
|
|
300
297
|
}
|
|
301
298
|
|
|
302
299
|
public hasConnection(peerDescriptor: PeerDescriptor): boolean {
|
|
@@ -326,7 +323,7 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
326
323
|
return
|
|
327
324
|
}
|
|
328
325
|
if (this.duplicateMessageDetector.isMostLikelyDuplicate(message.messageId)) {
|
|
329
|
-
logger.trace('handleMessage filtered duplicate ' +
|
|
326
|
+
logger.trace('handleMessage filtered duplicate ' + getNodeIdFromPeerDescriptor(message.sourceDescriptor!)
|
|
330
327
|
+ ' ' + message.serviceId + ' ' + message.messageId)
|
|
331
328
|
return
|
|
332
329
|
}
|
|
@@ -334,7 +331,8 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
334
331
|
if (message.serviceId === INTERNAL_SERVICE_ID) {
|
|
335
332
|
this.rpcCommunicator?.handleMessageFromPeer(message)
|
|
336
333
|
} else {
|
|
337
|
-
logger.trace('emit "message" ' +
|
|
334
|
+
logger.trace('emit "message" ' + getNodeIdFromPeerDescriptor(message.sourceDescriptor!)
|
|
335
|
+
+ ' ' + message.serviceId + ' ' + message.messageId)
|
|
338
336
|
this.emit('message', message)
|
|
339
337
|
}
|
|
340
338
|
}
|
|
@@ -361,71 +359,70 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
361
359
|
}
|
|
362
360
|
}
|
|
363
361
|
|
|
364
|
-
private onConnected
|
|
362
|
+
private onConnected(connection: ManagedConnection) {
|
|
365
363
|
const peerDescriptor = connection.getPeerDescriptor()!
|
|
366
364
|
this.emit('connected', peerDescriptor)
|
|
367
|
-
logger.trace(
|
|
365
|
+
logger.trace(getNodeIdFromPeerDescriptor(peerDescriptor) + ' onConnected() ' + connection.connectionType)
|
|
368
366
|
this.onConnectionCountChange()
|
|
369
367
|
}
|
|
370
368
|
|
|
371
|
-
private onDisconnected
|
|
372
|
-
logger.trace(
|
|
369
|
+
private onDisconnected(connection: ManagedConnection, gracefulLeave: boolean) {
|
|
370
|
+
logger.trace(getNodeIdOrUnknownFromPeerDescriptor(connection.getPeerDescriptor()) + ' onDisconnected() gracefulLeave: ' + gracefulLeave)
|
|
373
371
|
|
|
374
372
|
const peerIdKey = keyFromPeerDescriptor(connection.getPeerDescriptor()!)
|
|
375
373
|
const storedConnection = this.connections.get(peerIdKey)
|
|
376
374
|
if (storedConnection && storedConnection.connectionId.equals(connection.connectionId)) {
|
|
377
375
|
this.locks.clearAllLocks(peerIdKey)
|
|
378
376
|
this.connections.delete(peerIdKey)
|
|
379
|
-
logger.trace(
|
|
380
|
-
+ ' deleted connection in onDisconnected() ' +
|
|
381
|
-
this.emit('disconnected', connection.getPeerDescriptor()!,
|
|
377
|
+
logger.trace(getNodeIdOrUnknownFromPeerDescriptor(connection.getPeerDescriptor())
|
|
378
|
+
+ ' deleted connection in onDisconnected() gracefulLeave: ' + gracefulLeave)
|
|
379
|
+
this.emit('disconnected', connection.getPeerDescriptor()!, gracefulLeave)
|
|
382
380
|
this.onConnectionCountChange()
|
|
383
381
|
} else {
|
|
384
|
-
logger.trace(
|
|
382
|
+
logger.trace(getNodeIdOrUnknownFromPeerDescriptor(connection.getPeerDescriptor())
|
|
385
383
|
+ ' onDisconnected() did nothing, no such connection in connectionManager')
|
|
386
384
|
if (storedConnection) {
|
|
387
|
-
logger.trace(
|
|
385
|
+
logger.trace(getNodeIdOrUnknownFromPeerDescriptor(connection.getPeerDescriptor())
|
|
388
386
|
+ ' connectionIds do not match ' + storedConnection.connectionId + ' ' + connection.connectionId)
|
|
389
387
|
}
|
|
390
388
|
}
|
|
391
389
|
|
|
392
390
|
}
|
|
393
391
|
|
|
394
|
-
private
|
|
392
|
+
private onNewConnection(connection: ManagedConnection): boolean {
|
|
395
393
|
if (this.state === ConnectionManagerState.STOPPED) {
|
|
396
394
|
return false
|
|
397
395
|
}
|
|
398
|
-
logger.trace('
|
|
396
|
+
logger.trace('onNewConnection()')
|
|
399
397
|
connection.offeredAsIncoming = true
|
|
400
|
-
if (!this.
|
|
398
|
+
if (!this.acceptNewConnection(connection)) {
|
|
401
399
|
return false
|
|
402
400
|
}
|
|
403
401
|
connection.on('managedData', this.onData)
|
|
404
|
-
connection.on('disconnected', (
|
|
405
|
-
this.onDisconnected(connection,
|
|
402
|
+
connection.on('disconnected', (gracefulLeave: boolean) => {
|
|
403
|
+
this.onDisconnected(connection, gracefulLeave)
|
|
406
404
|
})
|
|
407
|
-
this.emit('newConnection', connection)
|
|
408
405
|
if (connection.isHandshakeCompleted()) {
|
|
409
406
|
this.onConnected(connection)
|
|
410
407
|
} else {
|
|
411
|
-
connection.once('handshakeCompleted', ()=> {
|
|
408
|
+
connection.once('handshakeCompleted', () => {
|
|
412
409
|
this.onConnected(connection)
|
|
413
410
|
})
|
|
414
411
|
}
|
|
415
412
|
return true
|
|
416
413
|
}
|
|
417
414
|
|
|
418
|
-
private
|
|
419
|
-
logger.trace(
|
|
415
|
+
private acceptNewConnection(newConnection: ManagedConnection): boolean {
|
|
416
|
+
logger.trace(getNodeIdFromPeerDescriptor(newConnection.getPeerDescriptor()!) + ' acceptIncomingConnection()')
|
|
420
417
|
const newPeerID = peerIdFromPeerDescriptor(newConnection.getPeerDescriptor()!)
|
|
421
418
|
const peerIdKey = keyFromPeerDescriptor(newConnection.getPeerDescriptor()!)
|
|
422
419
|
if (this.connections.has(peerIdKey)) {
|
|
423
|
-
if (newPeerID.hasSmallerHashThan(peerIdFromPeerDescriptor(this.
|
|
424
|
-
logger.trace(
|
|
420
|
+
if (newPeerID.hasSmallerHashThan(peerIdFromPeerDescriptor(this.getLocalPeerDescriptor()))) {
|
|
421
|
+
logger.trace(getNodeIdOrUnknownFromPeerDescriptor(newConnection.getPeerDescriptor())
|
|
425
422
|
+ ' acceptIncomingConnection() replace current connection')
|
|
426
423
|
// replace the current connection
|
|
427
424
|
const oldConnection = this.connections.get(newPeerID.toKey())!
|
|
428
|
-
logger.trace('replaced: ' +
|
|
425
|
+
logger.trace('replaced: ' + getNodeIdFromPeerDescriptor(newConnection.getPeerDescriptor()!))
|
|
429
426
|
const buffer = oldConnection.stealOutputBuffer()
|
|
430
427
|
|
|
431
428
|
for (const data of buffer) {
|
|
@@ -435,65 +432,64 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
435
432
|
oldConnection.reportBufferSentByOtherConnection()
|
|
436
433
|
oldConnection.replacedByOtherConnection = true
|
|
437
434
|
} else {
|
|
438
|
-
newConnection.rejectedAsIncoming = true
|
|
439
435
|
return false
|
|
440
436
|
}
|
|
441
437
|
}
|
|
442
438
|
|
|
443
|
-
logger.trace(
|
|
439
|
+
logger.trace(getNodeIdFromPeerDescriptor(newConnection.getPeerDescriptor()!) + ' added to connections at acceptIncomingConnection')
|
|
444
440
|
this.connections.set(peerIdKey, newConnection)
|
|
445
441
|
|
|
446
442
|
return true
|
|
447
443
|
}
|
|
448
444
|
|
|
449
|
-
private async closeConnection(peerDescriptor: PeerDescriptor,
|
|
450
|
-
logger.trace(
|
|
445
|
+
private async closeConnection(peerDescriptor: PeerDescriptor, gracefulLeave: boolean, reason?: string): Promise<void> {
|
|
446
|
+
logger.trace(getNodeIdFromPeerDescriptor(peerDescriptor) + ' ' + 'closeConnection() ' + reason)
|
|
451
447
|
const id = keyFromPeerDescriptor(peerDescriptor)
|
|
452
448
|
this.locks.clearAllLocks(id)
|
|
453
449
|
if (this.connections.has(id)) {
|
|
454
450
|
const connectionToClose = this.connections.get(id)!
|
|
455
|
-
await connectionToClose.close(
|
|
451
|
+
await connectionToClose.close(gracefulLeave)
|
|
456
452
|
|
|
457
453
|
} else {
|
|
458
|
-
logger.trace(
|
|
459
|
-
this.emit('disconnected', peerDescriptor,
|
|
454
|
+
logger.trace(getNodeIdFromPeerDescriptor(peerDescriptor) + ' ' + 'closeConnection() this.connections did not have the id')
|
|
455
|
+
this.emit('disconnected', peerDescriptor, false)
|
|
460
456
|
}
|
|
461
457
|
}
|
|
462
458
|
|
|
463
|
-
public lockConnection(targetDescriptor: PeerDescriptor,
|
|
464
|
-
if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.
|
|
459
|
+
public lockConnection(targetDescriptor: PeerDescriptor, lockId: LockID): void {
|
|
460
|
+
if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.getLocalPeerDescriptor())) {
|
|
465
461
|
return
|
|
466
462
|
}
|
|
467
463
|
const peerIdKey = keyFromPeerDescriptor(targetDescriptor)
|
|
468
464
|
const rpcRemote = new ConnectionLockRpcRemote(
|
|
469
|
-
this.
|
|
465
|
+
this.getLocalPeerDescriptor(),
|
|
470
466
|
targetDescriptor,
|
|
471
467
|
toProtoRpcClient(new ConnectionLockRpcClient(this.rpcCommunicator!.getRpcClientTransport()))
|
|
472
468
|
)
|
|
473
|
-
this.locks.addLocalLocked(peerIdKey,
|
|
474
|
-
rpcRemote.lockRequest(
|
|
469
|
+
this.locks.addLocalLocked(peerIdKey, lockId)
|
|
470
|
+
rpcRemote.lockRequest(lockId)
|
|
475
471
|
.then((_accepted) => logger.trace('LockRequest successful'))
|
|
476
472
|
.catch((err) => { logger.debug(err) })
|
|
477
473
|
}
|
|
478
474
|
|
|
479
|
-
public unlockConnection(targetDescriptor: PeerDescriptor,
|
|
480
|
-
if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.
|
|
475
|
+
public unlockConnection(targetDescriptor: PeerDescriptor, lockId: LockID): void {
|
|
476
|
+
if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.getLocalPeerDescriptor())) {
|
|
481
477
|
return
|
|
482
478
|
}
|
|
483
479
|
const peerIdKey = keyFromPeerDescriptor(targetDescriptor)
|
|
484
|
-
this.locks.removeLocalLocked(peerIdKey,
|
|
480
|
+
this.locks.removeLocalLocked(peerIdKey, lockId)
|
|
485
481
|
const rpcRemote = new ConnectionLockRpcRemote(
|
|
486
|
-
this.
|
|
482
|
+
this.getLocalPeerDescriptor(),
|
|
487
483
|
targetDescriptor,
|
|
488
484
|
toProtoRpcClient(new ConnectionLockRpcClient(this.rpcCommunicator!.getRpcClientTransport()))
|
|
489
485
|
)
|
|
490
486
|
if (this.connections.has(peerIdKey)) {
|
|
491
|
-
rpcRemote.unlockRequest(
|
|
487
|
+
rpcRemote.unlockRequest(lockId)
|
|
492
488
|
}
|
|
493
489
|
}
|
|
494
490
|
|
|
495
491
|
public weakLockConnection(targetDescriptor: PeerDescriptor): void {
|
|
496
|
-
if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.
|
|
492
|
+
if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.getLocalPeerDescriptor())) {
|
|
497
493
|
return
|
|
498
494
|
}
|
|
499
495
|
const peerIdKey = keyFromPeerDescriptor(targetDescriptor)
|
|
@@ -501,7 +497,7 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
501
497
|
}
|
|
502
498
|
|
|
503
499
|
public weakUnlockConnection(targetDescriptor: PeerDescriptor): void {
|
|
504
|
-
if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.
|
|
500
|
+
if (this.state === ConnectionManagerState.STOPPED || areEqualPeerDescriptors(targetDescriptor, this.getLocalPeerDescriptor())) {
|
|
505
501
|
return
|
|
506
502
|
}
|
|
507
503
|
const peerIdKey = keyFromPeerDescriptor(targetDescriptor)
|
|
@@ -526,7 +522,7 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
526
522
|
})
|
|
527
523
|
.catch((e) => {
|
|
528
524
|
logger.trace('force-closing connection after timeout ' + e)
|
|
529
|
-
connection.close(
|
|
525
|
+
connection.close(true)
|
|
530
526
|
})
|
|
531
527
|
.finally(() => {
|
|
532
528
|
logger.trace('resolving after receiving disconnected event')
|
|
@@ -544,16 +540,16 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
544
540
|
}
|
|
545
541
|
|
|
546
542
|
private async doGracefullyDisconnectAsync(targetDescriptor: PeerDescriptor, disconnectMode: DisconnectMode): Promise<void> {
|
|
547
|
-
logger.trace(
|
|
543
|
+
logger.trace(getNodeIdFromPeerDescriptor(targetDescriptor) + ' gracefullyDisconnectAsync()')
|
|
548
544
|
const rpcRemote = new ConnectionLockRpcRemote(
|
|
549
|
-
this.
|
|
545
|
+
this.getLocalPeerDescriptor(),
|
|
550
546
|
targetDescriptor,
|
|
551
547
|
toProtoRpcClient(new ConnectionLockRpcClient(this.rpcCommunicator!.getRpcClientTransport()))
|
|
552
548
|
)
|
|
553
549
|
try {
|
|
554
550
|
await rpcRemote.gracefulDisconnect(disconnectMode)
|
|
555
551
|
} catch (ex) {
|
|
556
|
-
logger.trace(
|
|
552
|
+
logger.trace(getNodeIdFromPeerDescriptor(targetDescriptor) + ' remote.gracefulDisconnect() failed' + ex)
|
|
557
553
|
}
|
|
558
554
|
}
|
|
559
555
|
|
|
@@ -563,44 +559,6 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
563
559
|
.map((managedConnection: ManagedConnection) => managedConnection.getPeerDescriptor()!)
|
|
564
560
|
}
|
|
565
561
|
|
|
566
|
-
// ConnectionLockRpc local RPC method
|
|
567
|
-
private async lockRequest(lockRequest: LockRequest, context: ServerCallContext): Promise<LockResponse> {
|
|
568
|
-
const senderPeerDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
|
|
569
|
-
const remotePeerId = peerIdFromPeerDescriptor(senderPeerDescriptor)
|
|
570
|
-
if (areEqualPeerDescriptors(senderPeerDescriptor, this.getOwnPeerDescriptor())) {
|
|
571
|
-
const response: LockResponse = {
|
|
572
|
-
accepted: false
|
|
573
|
-
}
|
|
574
|
-
return response
|
|
575
|
-
}
|
|
576
|
-
this.locks.addRemoteLocked(remotePeerId.toKey(), lockRequest.serviceId)
|
|
577
|
-
const response: LockResponse = {
|
|
578
|
-
accepted: true
|
|
579
|
-
}
|
|
580
|
-
return response
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
// ConnectionLockRpc local RPC method
|
|
584
|
-
private async unlockRequest(unlockRequest: UnlockRequest, context: ServerCallContext): Promise<Empty> {
|
|
585
|
-
const senderPeerDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
|
|
586
|
-
const peerIdKey = keyFromPeerDescriptor(senderPeerDescriptor)
|
|
587
|
-
this.locks.removeRemoteLocked(peerIdKey, unlockRequest.serviceId)
|
|
588
|
-
return {}
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
// ConnectionLockRpc local RPC method
|
|
592
|
-
private async gracefulDisconnect(disconnectNotice: DisconnectNotice, context: ServerCallContext): Promise<Empty> {
|
|
593
|
-
const senderPeerDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
|
|
594
|
-
logger.trace(keyOrUnknownFromPeerDescriptor(senderPeerDescriptor) + ' received gracefulDisconnect notice')
|
|
595
|
-
|
|
596
|
-
if (disconnectNotice.disconnectMode === DisconnectMode.LEAVING) {
|
|
597
|
-
this.closeConnection(senderPeerDescriptor, 'INCOMING_GRACEFUL_LEAVE', 'graceful leave notified')
|
|
598
|
-
} else {
|
|
599
|
-
this.closeConnection(senderPeerDescriptor, 'INCOMING_GRACEFUL_DISCONNECT', 'graceful disconnect notified')
|
|
600
|
-
}
|
|
601
|
-
return {}
|
|
602
|
-
}
|
|
603
|
-
|
|
604
562
|
private onConnectionCountChange() {
|
|
605
563
|
this.metrics.connectionAverageCount.record(this.connections.size)
|
|
606
564
|
}
|