@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
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
import { Message, PeerDescriptor, RouteMessageAck, RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
areEqualPeerDescriptors,
|
|
4
|
+
getNodeIdFromPeerDescriptor,
|
|
5
|
+
keyFromPeerDescriptor,
|
|
6
|
+
peerIdFromPeerDescriptor
|
|
7
|
+
} from '../../helpers/peerIdFromPeerDescriptor'
|
|
3
8
|
import { RoutingMode, RoutingSession, RoutingSessionEvents } from './RoutingSession'
|
|
4
9
|
import { Logger, executeSafePromise, raceEvents3, withTimeout } from '@streamr/utils'
|
|
5
10
|
import { RoutingRpcCommunicator } from '../../transport/RoutingRpcCommunicator'
|
|
6
11
|
import { PeerIDKey } from '../../helpers/PeerID'
|
|
7
12
|
import { DuplicateDetector } from './DuplicateDetector'
|
|
8
13
|
import { ConnectionManager } from '../../connection/ConnectionManager'
|
|
9
|
-
import {
|
|
14
|
+
import { DhtNodeRpcRemote } from '../DhtNodeRpcRemote'
|
|
10
15
|
import { v4 } from 'uuid'
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
export const createRouteMessageAck = (routedMessage: RouteMessageWrapper, error?: string): RouteMessageAck => {
|
|
14
|
-
const ack: RouteMessageAck = {
|
|
15
|
-
requestId: routedMessage.requestId,
|
|
16
|
-
error: error ? error : ''
|
|
17
|
-
}
|
|
18
|
-
return ack
|
|
19
|
-
}
|
|
16
|
+
import { RouterRpcLocal, createRouteMessageAck } from './RouterRpcLocal'
|
|
17
|
+
import { ServiceID } from '../../types/ServiceID'
|
|
20
18
|
|
|
21
19
|
export enum RoutingErrors {
|
|
22
20
|
NO_CANDIDATES_FOUND = 'No routing candidates found',
|
|
@@ -25,11 +23,13 @@ export enum RoutingErrors {
|
|
|
25
23
|
|
|
26
24
|
export interface RouterConfig {
|
|
27
25
|
rpcCommunicator: RoutingRpcCommunicator
|
|
28
|
-
|
|
29
|
-
connections: Map<PeerIDKey,
|
|
26
|
+
localPeerDescriptor: PeerDescriptor
|
|
27
|
+
connections: Map<PeerIDKey, DhtNodeRpcRemote>
|
|
30
28
|
addContact: (contact: PeerDescriptor, setActive?: boolean) => void
|
|
31
|
-
serviceId:
|
|
29
|
+
serviceId: ServiceID
|
|
32
30
|
connectionManager?: ConnectionManager
|
|
31
|
+
rpcRequestTimeout?: number
|
|
32
|
+
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
interface ForwardingTableEntry {
|
|
@@ -37,7 +37,7 @@ interface ForwardingTableEntry {
|
|
|
37
37
|
peerDescriptors: PeerDescriptor[]
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
interface
|
|
40
|
+
export interface IRouter {
|
|
41
41
|
doRouteMessage(routedMessage: RouteMessageWrapper, mode: RoutingMode, excludedPeer?: PeerDescriptor): RouteMessageAck
|
|
42
42
|
send(msg: Message, reachableThrough: PeerDescriptor[]): Promise<void>
|
|
43
43
|
isMostLikelyDuplicate(requestId: string): boolean
|
|
@@ -47,17 +47,13 @@ interface IRouterFunc {
|
|
|
47
47
|
stop(): void
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
export interface IRouter extends Omit<IRouterRpc, 'findRecursively'>, IRouterFunc {}
|
|
51
|
-
|
|
52
50
|
const logger = new Logger(module)
|
|
53
51
|
|
|
54
52
|
export class Router implements IRouter {
|
|
55
53
|
private readonly rpcCommunicator: RoutingRpcCommunicator
|
|
56
|
-
private readonly
|
|
57
|
-
private readonly connections: Map<PeerIDKey,
|
|
58
|
-
private readonly
|
|
59
|
-
private readonly serviceId: string
|
|
60
|
-
private readonly connectionManager?: ConnectionManager
|
|
54
|
+
private readonly localPeerDescriptor: PeerDescriptor
|
|
55
|
+
private readonly connections: Map<PeerIDKey, DhtNodeRpcRemote>
|
|
56
|
+
private readonly serviceId: ServiceID
|
|
61
57
|
private readonly forwardingTable: Map<string, ForwardingTableEntry> = new Map()
|
|
62
58
|
private ongoingRoutingSessions: Map<string, RoutingSession> = new Map()
|
|
63
59
|
private readonly duplicateRequestDetector: DuplicateDetector = new DuplicateDetector(100000, 100)
|
|
@@ -65,19 +61,48 @@ export class Router implements IRouter {
|
|
|
65
61
|
|
|
66
62
|
constructor(config: RouterConfig) {
|
|
67
63
|
this.rpcCommunicator = config.rpcCommunicator
|
|
68
|
-
this.
|
|
64
|
+
this.localPeerDescriptor = config.localPeerDescriptor
|
|
69
65
|
this.connections = config.connections
|
|
70
|
-
this.addContact = config.addContact
|
|
71
66
|
this.serviceId = config.serviceId
|
|
72
|
-
this.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
67
|
+
this.registerLocalRpcMethods(config)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
private registerLocalRpcMethods(config: RouterConfig) {
|
|
71
|
+
const rpcLocal = new RouterRpcLocal({
|
|
72
|
+
doRouteMessage: (routedMessage: RouteMessageWrapper, mode?: RoutingMode) => this.doRouteMessage(routedMessage, mode),
|
|
73
|
+
addContact: (contact: PeerDescriptor, setActive: boolean) => config.addContact(contact, setActive),
|
|
74
|
+
setForwardingEntries: (routedMessage: RouteMessageWrapper) => this.setForwardingEntries(routedMessage),
|
|
75
|
+
duplicateRequestDetector: this.duplicateRequestDetector,
|
|
76
|
+
localPeerDescriptor: this.localPeerDescriptor,
|
|
77
|
+
connectionManager: config.connectionManager
|
|
78
|
+
})
|
|
79
|
+
this.rpcCommunicator.registerRpcMethod(
|
|
80
|
+
RouteMessageWrapper,
|
|
81
|
+
RouteMessageAck,
|
|
82
|
+
'routeMessage',
|
|
83
|
+
async (routedMessage: RouteMessageWrapper) => {
|
|
84
|
+
if (this.stopped) {
|
|
85
|
+
return createRouteMessageAck(routedMessage, 'routeMessage() service is not running')
|
|
86
|
+
}
|
|
87
|
+
return rpcLocal.routeMessage(routedMessage)
|
|
88
|
+
}
|
|
89
|
+
)
|
|
90
|
+
this.rpcCommunicator.registerRpcMethod(
|
|
91
|
+
RouteMessageWrapper,
|
|
92
|
+
RouteMessageAck,
|
|
93
|
+
'forwardMessage',
|
|
94
|
+
async (forwardMessage: RouteMessageWrapper) => {
|
|
95
|
+
if (this.stopped) {
|
|
96
|
+
return createRouteMessageAck(forwardMessage, 'forwardMessage() service is not running')
|
|
97
|
+
}
|
|
98
|
+
return rpcLocal.forwardMessage(forwardMessage)
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
|
|
77
102
|
}
|
|
78
103
|
|
|
79
104
|
public async send(msg: Message, reachableThrough: PeerDescriptor[]): Promise<void> {
|
|
80
|
-
msg.sourceDescriptor = this.
|
|
105
|
+
msg.sourceDescriptor = this.localPeerDescriptor
|
|
81
106
|
const targetPeerDescriptor = msg.targetDescriptor!
|
|
82
107
|
const forwardingEntry = this.forwardingTable.get(keyFromPeerDescriptor(targetPeerDescriptor))
|
|
83
108
|
if (forwardingEntry && forwardingEntry.peerDescriptors.length > 0) {
|
|
@@ -86,7 +111,7 @@ export class Router implements IRouter {
|
|
|
86
111
|
message: msg,
|
|
87
112
|
requestId: v4(),
|
|
88
113
|
destinationPeer: forwardingPeer,
|
|
89
|
-
sourcePeer: this.
|
|
114
|
+
sourcePeer: this.localPeerDescriptor,
|
|
90
115
|
reachableThrough,
|
|
91
116
|
routingPath: []
|
|
92
117
|
}
|
|
@@ -96,7 +121,7 @@ export class Router implements IRouter {
|
|
|
96
121
|
message: msg,
|
|
97
122
|
requestId: v4(),
|
|
98
123
|
destinationPeer: targetPeerDescriptor,
|
|
99
|
-
sourcePeer: this.
|
|
124
|
+
sourcePeer: this.localPeerDescriptor,
|
|
100
125
|
reachableThrough,
|
|
101
126
|
routingPath: []
|
|
102
127
|
}
|
|
@@ -104,23 +129,23 @@ export class Router implements IRouter {
|
|
|
104
129
|
}
|
|
105
130
|
}
|
|
106
131
|
|
|
107
|
-
public doRouteMessage(routedMessage: RouteMessageWrapper, mode = RoutingMode.ROUTE
|
|
132
|
+
public doRouteMessage(routedMessage: RouteMessageWrapper, mode = RoutingMode.ROUTE): RouteMessageAck {
|
|
108
133
|
if (this.stopped) {
|
|
109
134
|
return createRouteMessageAck(routedMessage, RoutingErrors.STOPPED)
|
|
110
135
|
}
|
|
111
|
-
logger.trace(`Routing message ${routedMessage.requestId} from ${
|
|
112
|
-
+ `to ${
|
|
113
|
-
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
136
|
+
logger.trace(`Routing message ${routedMessage.requestId} from ${getNodeIdFromPeerDescriptor(routedMessage.sourcePeer!)} `
|
|
137
|
+
+ `to ${getNodeIdFromPeerDescriptor(routedMessage.destinationPeer!)}`)
|
|
138
|
+
const session = this.createRoutingSession(routedMessage, mode)
|
|
139
|
+
const contacts = session.findMoreContacts()
|
|
140
|
+
if (contacts.length > 0) {
|
|
141
|
+
this.addRoutingSession(session)
|
|
117
142
|
// eslint-disable-next-line promise/catch-or-return
|
|
118
143
|
logger.trace('starting to raceEvents from routingSession: ' + session.sessionId)
|
|
119
144
|
let eventReceived: Promise<unknown>
|
|
120
145
|
executeSafePromise(async () => {
|
|
121
146
|
eventReceived = raceEvents3<RoutingSessionEvents>(
|
|
122
147
|
session,
|
|
123
|
-
['routingSucceeded', 'partialSuccess', 'routingFailed', 'stopped'
|
|
148
|
+
['routingSucceeded', 'partialSuccess', 'routingFailed', 'stopped'],
|
|
124
149
|
null
|
|
125
150
|
)
|
|
126
151
|
})
|
|
@@ -134,33 +159,29 @@ export class Router implements IRouter {
|
|
|
134
159
|
session.stop()
|
|
135
160
|
this.removeRoutingSession(session.sessionId)
|
|
136
161
|
})
|
|
137
|
-
session.
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
162
|
+
session.sendMoreRequests(contacts)
|
|
163
|
+
return createRouteMessageAck(routedMessage)
|
|
164
|
+
} else {
|
|
165
|
+
if (areEqualPeerDescriptors(routedMessage.sourcePeer!, this.localPeerDescriptor)) {
|
|
166
|
+
logger.debug(
|
|
167
|
+
`Failed to send (routeMessage: ${this.serviceId}) to ${getNodeIdFromPeerDescriptor(routedMessage.destinationPeer!)}`
|
|
142
168
|
)
|
|
143
169
|
}
|
|
170
|
+
logger.trace('noCandidatesFound sessionId: ' + session.sessionId)
|
|
144
171
|
return createRouteMessageAck(routedMessage, RoutingErrors.NO_CANDIDATES_FOUND)
|
|
145
172
|
}
|
|
146
|
-
return createRouteMessageAck(routedMessage)
|
|
147
173
|
}
|
|
148
174
|
|
|
149
|
-
private createRoutingSession(routedMessage: RouteMessageWrapper, mode: RoutingMode
|
|
150
|
-
|
|
151
|
-
if (excludedPeer) {
|
|
152
|
-
excludedPeers.push(peerIdFromPeerDescriptor(excludedPeer))
|
|
153
|
-
}
|
|
154
|
-
logger.trace(' routing session created with connections: ' + this.connections.size )
|
|
175
|
+
private createRoutingSession(routedMessage: RouteMessageWrapper, mode: RoutingMode): RoutingSession {
|
|
176
|
+
logger.trace('routing session created with connections: ' + this.connections.size)
|
|
155
177
|
return new RoutingSession(
|
|
156
178
|
this.rpcCommunicator,
|
|
157
|
-
this.
|
|
179
|
+
this.localPeerDescriptor,
|
|
158
180
|
routedMessage,
|
|
159
181
|
this.connections,
|
|
160
|
-
areEqualPeerDescriptors(this.
|
|
182
|
+
areEqualPeerDescriptors(this.localPeerDescriptor, routedMessage.sourcePeer!) ? 2 : 1,
|
|
161
183
|
mode,
|
|
162
|
-
|
|
163
|
-
excludedPeers
|
|
184
|
+
routedMessage.routingPath.map((descriptor) => peerIdFromPeerDescriptor(descriptor))
|
|
164
185
|
)
|
|
165
186
|
}
|
|
166
187
|
|
|
@@ -192,32 +213,10 @@ export class Router implements IRouter {
|
|
|
192
213
|
this.forwardingTable.clear()
|
|
193
214
|
this.duplicateRequestDetector.clear()
|
|
194
215
|
}
|
|
195
|
-
|
|
196
|
-
// IRouterRpc method
|
|
197
|
-
async routeMessage(routedMessage: RouteMessageWrapper): Promise<RouteMessageAck> {
|
|
198
|
-
if (this.stopped) {
|
|
199
|
-
return createRouteMessageAck(routedMessage, 'routeMessage() service is not running')
|
|
200
|
-
} else if (this.duplicateRequestDetector.isMostLikelyDuplicate(routedMessage.requestId)) {
|
|
201
|
-
logger.trace(`Routing message ${routedMessage.requestId} from ${keyFromPeerDescriptor(routedMessage.sourcePeer!)} `
|
|
202
|
-
+ `to ${keyFromPeerDescriptor(routedMessage.destinationPeer!)} is likely a duplicate`)
|
|
203
|
-
return createRouteMessageAck(routedMessage, 'message given to routeMessage() service is likely a duplicate')
|
|
204
|
-
}
|
|
205
|
-
logger.trace(`Processing received routeMessage ${routedMessage.requestId}`)
|
|
206
|
-
this.addContact(routedMessage.sourcePeer!, true)
|
|
207
|
-
this.addToDuplicateDetector(routedMessage.requestId)
|
|
208
|
-
if (areEqualPeerDescriptors(this.ownPeerDescriptor, routedMessage.destinationPeer!)) {
|
|
209
|
-
logger.trace(`routing message targeted to self ${routedMessage.requestId}`)
|
|
210
|
-
this.setForwardingEntries(routedMessage)
|
|
211
|
-
this.connectionManager?.handleMessage(routedMessage.message!)
|
|
212
|
-
return createRouteMessageAck(routedMessage)
|
|
213
|
-
} else {
|
|
214
|
-
return this.doRouteMessage(routedMessage)
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
216
|
|
|
218
217
|
private setForwardingEntries(routedMessage: RouteMessageWrapper): void {
|
|
219
218
|
const reachableThroughWithoutSelf = routedMessage.reachableThrough.filter((peer) => {
|
|
220
|
-
return !areEqualPeerDescriptors(peer, this.
|
|
219
|
+
return !areEqualPeerDescriptors(peer, this.localPeerDescriptor)
|
|
221
220
|
})
|
|
222
221
|
|
|
223
222
|
if (reachableThroughWithoutSelf.length > 0) {
|
|
@@ -236,34 +235,4 @@ export class Router implements IRouter {
|
|
|
236
235
|
this.forwardingTable.set(sourceKey, forwardingEntry)
|
|
237
236
|
}
|
|
238
237
|
}
|
|
239
|
-
|
|
240
|
-
// IRouterRpc method
|
|
241
|
-
async forwardMessage(forwardMessage: RouteMessageWrapper): Promise<RouteMessageAck> {
|
|
242
|
-
if (this.stopped) {
|
|
243
|
-
return createRouteMessageAck(forwardMessage, 'forwardMessage() service is not running')
|
|
244
|
-
} else if (this.duplicateRequestDetector.isMostLikelyDuplicate(forwardMessage.requestId)) {
|
|
245
|
-
logger.trace(`Forwarding message ${forwardMessage.requestId} from ${keyFromPeerDescriptor(forwardMessage.sourcePeer!)} `
|
|
246
|
-
+ `to ${keyFromPeerDescriptor(forwardMessage.destinationPeer!)} is likely a duplicate`)
|
|
247
|
-
return createRouteMessageAck(forwardMessage, 'message given to forwardMessage() service is likely a duplicate')
|
|
248
|
-
}
|
|
249
|
-
logger.trace(`Processing received forward routeMessage ${forwardMessage.requestId}`)
|
|
250
|
-
this.addContact(forwardMessage.sourcePeer!, true)
|
|
251
|
-
this.addToDuplicateDetector(forwardMessage.requestId)
|
|
252
|
-
if (areEqualPeerDescriptors(this.ownPeerDescriptor, forwardMessage.destinationPeer!)) {
|
|
253
|
-
return this.forwardToDestination(forwardMessage)
|
|
254
|
-
} else {
|
|
255
|
-
return this.doRouteMessage(forwardMessage, RoutingMode.FORWARD)
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
private forwardToDestination(routedMessage: RouteMessageWrapper): RouteMessageAck {
|
|
260
|
-
logger.trace(`Forwarding found message targeted to self ${routedMessage.requestId}`)
|
|
261
|
-
const forwardedMessage = routedMessage.message!
|
|
262
|
-
if (areEqualPeerDescriptors(this.ownPeerDescriptor, forwardedMessage.targetDescriptor!)) {
|
|
263
|
-
this.connectionManager?.handleMessage(forwardedMessage)
|
|
264
|
-
return createRouteMessageAck(routedMessage)
|
|
265
|
-
}
|
|
266
|
-
return this.doRouteMessage({ ...routedMessage, destinationPeer: forwardedMessage.targetDescriptor })
|
|
267
|
-
}
|
|
268
|
-
|
|
269
238
|
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Logger } from '@streamr/utils'
|
|
2
|
+
import { ConnectionManager } from '../../connection/ConnectionManager'
|
|
3
|
+
import { areEqualPeerDescriptors, getNodeIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
4
|
+
import { PeerDescriptor, RouteMessageAck, RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
|
|
5
|
+
import { IRouterRpc } from '../../proto/packages/dht/protos/DhtRpc.server'
|
|
6
|
+
import { DuplicateDetector } from './DuplicateDetector'
|
|
7
|
+
import { RoutingMode } from './RoutingSession'
|
|
8
|
+
|
|
9
|
+
interface RouterRpcLocalConfig {
|
|
10
|
+
doRouteMessage: (routedMessage: RouteMessageWrapper, mode?: RoutingMode) => RouteMessageAck
|
|
11
|
+
addContact: (contact: PeerDescriptor, setActive: boolean) => void
|
|
12
|
+
setForwardingEntries: (routedMessage: RouteMessageWrapper) => void
|
|
13
|
+
duplicateRequestDetector: DuplicateDetector
|
|
14
|
+
localPeerDescriptor: PeerDescriptor
|
|
15
|
+
connectionManager?: ConnectionManager
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const logger = new Logger(module)
|
|
19
|
+
|
|
20
|
+
export const createRouteMessageAck = (routedMessage: RouteMessageWrapper, error?: string): RouteMessageAck => {
|
|
21
|
+
const ack: RouteMessageAck = {
|
|
22
|
+
requestId: routedMessage.requestId,
|
|
23
|
+
error: error ? error : ''
|
|
24
|
+
}
|
|
25
|
+
return ack
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export class RouterRpcLocal implements IRouterRpc {
|
|
29
|
+
|
|
30
|
+
private readonly config: RouterRpcLocalConfig
|
|
31
|
+
|
|
32
|
+
constructor(config: RouterRpcLocalConfig) {
|
|
33
|
+
this.config = config
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async routeMessage(routedMessage: RouteMessageWrapper): Promise<RouteMessageAck> {
|
|
37
|
+
if (this.config.duplicateRequestDetector.isMostLikelyDuplicate(routedMessage.requestId)) {
|
|
38
|
+
logger.trace(`Routing message ${routedMessage.requestId} from ${getNodeIdFromPeerDescriptor(routedMessage.sourcePeer!)} `
|
|
39
|
+
+ `to ${getNodeIdFromPeerDescriptor(routedMessage.destinationPeer!)} is likely a duplicate`)
|
|
40
|
+
return createRouteMessageAck(routedMessage, 'message given to routeMessage() service is likely a duplicate')
|
|
41
|
+
}
|
|
42
|
+
logger.trace(`Processing received routeMessage ${routedMessage.requestId}`)
|
|
43
|
+
this.config.addContact(routedMessage.sourcePeer!, true)
|
|
44
|
+
this.config.duplicateRequestDetector.add(routedMessage.requestId)
|
|
45
|
+
if (areEqualPeerDescriptors(this.config.localPeerDescriptor, routedMessage.destinationPeer!)) {
|
|
46
|
+
logger.trace(`routing message targeted to self ${routedMessage.requestId}`)
|
|
47
|
+
this.config.setForwardingEntries(routedMessage)
|
|
48
|
+
this.config.connectionManager?.handleMessage(routedMessage.message!)
|
|
49
|
+
return createRouteMessageAck(routedMessage)
|
|
50
|
+
} else {
|
|
51
|
+
return this.config.doRouteMessage(routedMessage)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async forwardMessage(forwardMessage: RouteMessageWrapper): Promise<RouteMessageAck> {
|
|
56
|
+
if (this.config.duplicateRequestDetector.isMostLikelyDuplicate(forwardMessage.requestId)) {
|
|
57
|
+
logger.trace(`Forwarding message ${forwardMessage.requestId} from ${getNodeIdFromPeerDescriptor(forwardMessage.sourcePeer!)} `
|
|
58
|
+
+ `to ${getNodeIdFromPeerDescriptor(forwardMessage.destinationPeer!)} is likely a duplicate`)
|
|
59
|
+
return createRouteMessageAck(forwardMessage, 'message given to forwardMessage() service is likely a duplicate')
|
|
60
|
+
}
|
|
61
|
+
logger.trace(`Processing received forward routeMessage ${forwardMessage.requestId}`)
|
|
62
|
+
this.config.addContact(forwardMessage.sourcePeer!, true)
|
|
63
|
+
this.config.duplicateRequestDetector.add(forwardMessage.requestId)
|
|
64
|
+
if (areEqualPeerDescriptors(this.config.localPeerDescriptor, forwardMessage.destinationPeer!)) {
|
|
65
|
+
return this.forwardToDestination(forwardMessage)
|
|
66
|
+
} else {
|
|
67
|
+
return this.config.doRouteMessage(forwardMessage, RoutingMode.FORWARD)
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
private forwardToDestination(routedMessage: RouteMessageWrapper): RouteMessageAck {
|
|
72
|
+
logger.trace(`Forwarding found message targeted to self ${routedMessage.requestId}`)
|
|
73
|
+
const forwardedMessage = routedMessage.message!
|
|
74
|
+
if (areEqualPeerDescriptors(this.config.localPeerDescriptor, forwardedMessage.targetDescriptor!)) {
|
|
75
|
+
this.config.connectionManager?.handleMessage(forwardedMessage)
|
|
76
|
+
return createRouteMessageAck(routedMessage)
|
|
77
|
+
}
|
|
78
|
+
return this.config.doRouteMessage({ ...routedMessage, destinationPeer: forwardedMessage.targetDescriptor })
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
}
|
|
@@ -2,12 +2,12 @@ import { RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
|
|
|
2
2
|
import { v4 } from 'uuid'
|
|
3
3
|
import {
|
|
4
4
|
areEqualPeerDescriptors,
|
|
5
|
-
|
|
6
|
-
peerIdFromPeerDescriptor
|
|
5
|
+
getNodeIdFromPeerDescriptor
|
|
7
6
|
} from '../../helpers/peerIdFromPeerDescriptor'
|
|
8
7
|
import { IRouterRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
|
|
9
8
|
import { Remote } from '../contact/Remote'
|
|
10
9
|
import { Logger } from '@streamr/utils'
|
|
10
|
+
import { getPreviousPeer } from './getPreviousPeer'
|
|
11
11
|
|
|
12
12
|
const logger = new Logger(module)
|
|
13
13
|
|
|
@@ -17,15 +17,12 @@ export class RouterRpcRemote extends Remote<IRouterRpcClient> {
|
|
|
17
17
|
const message: RouteMessageWrapper = {
|
|
18
18
|
destinationPeer: params.destinationPeer,
|
|
19
19
|
sourcePeer: params.sourcePeer,
|
|
20
|
-
previousPeer: params.previousPeer,
|
|
21
20
|
message: params.message,
|
|
22
|
-
requestId: params.requestId
|
|
23
|
-
reachableThrough: params.reachableThrough
|
|
21
|
+
requestId: params.requestId ?? v4(),
|
|
22
|
+
reachableThrough: params.reachableThrough ?? [],
|
|
24
23
|
routingPath: params.routingPath
|
|
25
24
|
}
|
|
26
|
-
const options = this.formDhtRpcOptions(
|
|
27
|
-
timeout: 10000
|
|
28
|
-
})
|
|
25
|
+
const options = this.formDhtRpcOptions()
|
|
29
26
|
try {
|
|
30
27
|
const ack = await this.getClient().routeMessage(message, options)
|
|
31
28
|
// Success signal if sent to destination and error includes duplicate
|
|
@@ -38,9 +35,11 @@ export class RouterRpcRemote extends Remote<IRouterRpcClient> {
|
|
|
38
35
|
return false
|
|
39
36
|
}
|
|
40
37
|
} catch (err) {
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
const previousPeer = getPreviousPeer(params)
|
|
39
|
+
const fromNode = previousPeer
|
|
40
|
+
? getNodeIdFromPeerDescriptor(previousPeer)
|
|
41
|
+
: getNodeIdFromPeerDescriptor(params.sourcePeer!)
|
|
42
|
+
logger.trace(`Failed to send routeMessage from ${fromNode} to ${getNodeIdFromPeerDescriptor(this.getPeerDescriptor())} with: ${err}`)
|
|
44
43
|
return false
|
|
45
44
|
}
|
|
46
45
|
return true
|
|
@@ -50,57 +49,27 @@ export class RouterRpcRemote extends Remote<IRouterRpcClient> {
|
|
|
50
49
|
const message: RouteMessageWrapper = {
|
|
51
50
|
destinationPeer: params.destinationPeer,
|
|
52
51
|
sourcePeer: params.sourcePeer,
|
|
53
|
-
previousPeer: params.previousPeer,
|
|
54
52
|
message: params.message,
|
|
55
|
-
requestId: params.requestId
|
|
56
|
-
reachableThrough: params.reachableThrough
|
|
53
|
+
requestId: params.requestId ?? v4(),
|
|
54
|
+
reachableThrough: params.reachableThrough ?? [],
|
|
57
55
|
routingPath: params.routingPath
|
|
58
56
|
}
|
|
59
|
-
const options = this.formDhtRpcOptions(
|
|
60
|
-
timeout: 10000
|
|
61
|
-
})
|
|
57
|
+
const options = this.formDhtRpcOptions()
|
|
62
58
|
try {
|
|
63
59
|
const ack = await this.getClient().forwardMessage(message, options)
|
|
64
60
|
if (ack.error.length > 0) {
|
|
65
61
|
return false
|
|
66
62
|
}
|
|
67
63
|
} catch (err) {
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
64
|
+
const previousPeer = getPreviousPeer(params)
|
|
65
|
+
const fromNode = previousPeer
|
|
66
|
+
? getNodeIdFromPeerDescriptor(previousPeer)
|
|
67
|
+
: getNodeIdFromPeerDescriptor(params.sourcePeer!)
|
|
71
68
|
logger.trace(
|
|
72
|
-
`Failed to send forwardMessage from ${fromNode} to ${
|
|
69
|
+
`Failed to send forwardMessage from ${fromNode} to ${getNodeIdFromPeerDescriptor(this.getPeerDescriptor())} with: ${err}`
|
|
73
70
|
)
|
|
74
71
|
return false
|
|
75
72
|
}
|
|
76
73
|
return true
|
|
77
74
|
}
|
|
78
|
-
|
|
79
|
-
async findRecursively(params: RouteMessageWrapper): Promise<boolean> {
|
|
80
|
-
const message: RouteMessageWrapper = {
|
|
81
|
-
destinationPeer: params.destinationPeer,
|
|
82
|
-
sourcePeer: params.sourcePeer,
|
|
83
|
-
previousPeer: params.previousPeer,
|
|
84
|
-
message: params.message,
|
|
85
|
-
requestId: params.requestId || v4(),
|
|
86
|
-
reachableThrough: params.reachableThrough || [],
|
|
87
|
-
routingPath: params.routingPath
|
|
88
|
-
}
|
|
89
|
-
const options = this.formDhtRpcOptions({
|
|
90
|
-
timeout: 10000
|
|
91
|
-
})
|
|
92
|
-
try {
|
|
93
|
-
const ack = await this.getClient().findRecursively(message, options)
|
|
94
|
-
if (ack.error.length > 0) {
|
|
95
|
-
logger.debug('Next hop responded with error ' + ack.error)
|
|
96
|
-
return false
|
|
97
|
-
}
|
|
98
|
-
} catch (err) {
|
|
99
|
-
const fromNode = params.previousPeer ? keyFromPeerDescriptor(params.previousPeer) : keyFromPeerDescriptor(params.sourcePeer!)
|
|
100
|
-
logger.debug(`Failed to send recursiveFind message from ${fromNode} to ${keyFromPeerDescriptor(this.getPeerDescriptor())} with: ${err}`)
|
|
101
|
-
return false
|
|
102
|
-
}
|
|
103
|
-
return true
|
|
104
|
-
}
|
|
105
|
-
|
|
106
75
|
}
|