@streamr/dht 100.0.0-pretestnet.2 → 100.0.0-pretestnet.3
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 +6 -6
- package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
- package/dist/src/connection/ConnectionManager.d.ts +5 -8
- package/dist/src/connection/ConnectionManager.js +77 -107
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/connection/ConnectivityChecker.d.ts +7 -6
- package/dist/src/connection/ConnectivityChecker.js +23 -20
- package/dist/src/connection/ConnectivityChecker.js.map +1 -1
- package/dist/src/connection/ConnectorFacade.d.ts +15 -12
- package/dist/src/connection/ConnectorFacade.js +61 -26
- package/dist/src/connection/ConnectorFacade.js.map +1 -1
- package/dist/src/connection/Handshaker.d.ts +2 -2
- package/dist/src/connection/Handshaker.js +28 -28
- 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 +3 -4
- package/dist/src/connection/ManagedConnection.js +30 -30
- 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 +22 -22
- package/dist/src/connection/simulator/SimulatorConnection.js.map +1 -0
- package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.d.ts +2 -2
- package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.js +11 -11
- package/dist/src/connection/{Simulator → simulator}/SimulatorConnector.js.map +1 -1
- 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} +36 -36
- 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} +20 -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} +23 -27
- package/dist/src/connection/websocket/ServerWebsocket.js.map +1 -0
- package/dist/src/connection/{WebSocket/WebSocketConnectorRpcLocal.d.ts → websocket/WebsocketConnector.d.ts} +23 -15
- package/dist/src/connection/{WebSocket/WebSocketConnectorRpcLocal.js → websocket/WebsocketConnector.js} +107 -101
- 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} +5 -10
- package/dist/src/connection/{WebSocket/WebSocketConnectorRpcRemote.js.map → websocket/WebsocketConnectorRpcRemote.js.map} +1 -1
- 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 +119 -150
- 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} +17 -21
- 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 +8 -8
- 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 +5 -5
- 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 +47 -90
- 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 +15 -43
- 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 +25 -24
- package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
- package/dist/src/dht/store/StoreRpcRemote.js +3 -7
- 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/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 +64 -84
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +64 -66
- 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 +32 -35
- package/src/connection/ConnectionLockHandler.ts +19 -17
- package/src/connection/ConnectionLockRpcLocal.ts +74 -0
- package/src/connection/ConnectionLockRpcRemote.ts +7 -6
- package/src/connection/ConnectionManager.ts +59 -95
- package/src/connection/ConnectivityChecker.ts +30 -26
- package/src/connection/ConnectorFacade.ts +74 -34
- package/src/connection/Handshaker.ts +9 -9
- package/src/connection/IConnection.ts +5 -6
- package/src/connection/ManagedConnection.ts +21 -22
- package/src/connection/{ManagedWebRtcConnection.ts → ManagedWebrtcConnection.ts} +9 -9
- package/src/connection/{Simulator → simulator}/Simulator.ts +4 -4
- package/src/connection/{Simulator → simulator}/SimulatorConnection.ts +23 -24
- package/src/connection/{Simulator → simulator}/SimulatorConnector.ts +13 -13
- package/src/connection/{Simulator → simulator}/SimulatorTransport.ts +2 -2
- package/src/connection/{WebRTC/BrowserWebRtcConnection.ts → webrtc/BrowserWebrtcConnection.ts} +12 -13
- package/src/connection/{WebRTC/IWebRtcConnection.ts → webrtc/IWebrtcConnection.ts} +2 -2
- package/src/connection/{WebRTC/NodeWebRtcConnection.ts → webrtc/NodeWebrtcConnection.ts} +32 -33
- package/src/connection/webrtc/WebrtcConnector.ts +225 -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} +19 -17
- package/src/connection/{WebSocket/ServerWebSocket.ts → websocket/ServerWebsocket.ts} +21 -27
- package/src/connection/{WebSocket/WebSocketConnectorRpcLocal.ts → websocket/WebsocketConnector.ts} +109 -100
- package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +41 -0
- package/src/connection/{WebSocket/WebSocketConnectorRpcRemote.ts → websocket/WebsocketConnectorRpcRemote.ts} +6 -12
- package/src/connection/{WebSocket/WebSocketServer.ts → websocket/WebsocketServer.ts} +40 -22
- package/src/dht/DhtNode.ts +144 -179
- package/src/dht/DhtNodeRpcLocal.ts +68 -0
- package/src/dht/{RemoteDhtNode.ts → DhtNodeRpcRemote.ts} +12 -13
- 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 +23 -20
- package/src/dht/discovery/PeerDiscovery.ts +14 -17
- 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 +69 -105
- package/src/dht/routing/RouterRpcLocal.ts +81 -0
- package/src/dht/routing/RouterRpcRemote.ts +15 -45
- package/src/dht/routing/RoutingSession.ts +56 -61
- package/src/dht/routing/getPreviousPeer.ts +6 -0
- package/src/dht/store/StoreRpcLocal.ts +44 -37
- package/src/dht/store/StoreRpcRemote.ts +4 -8
- package/src/exports.ts +11 -5
- package/src/helpers/Connectivity.ts +19 -0
- package/src/helpers/errors.ts +3 -3
- 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 +87 -114
- 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} +6 -6
- package/test/benchmark/KademliaCorrectness.test.ts +2 -2
- 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 +24 -6
- 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 +4 -4
- package/test/integration/ConnectionManager.test.ts +37 -28
- 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} +3 -3
- package/test/integration/Layer1-scale.test.ts +1 -1
- package/test/integration/MigrateData.test.ts +6 -5
- package/test/integration/Mock-Layer1-Layer0.test.ts +1 -1
- package/test/integration/MultipleEntryPointJoining.test.ts +6 -6
- package/test/integration/RouteMessage.test.ts +26 -26
- package/test/integration/RpcErrors.test.ts +10 -10
- package/test/integration/ScaleDownDht.test.ts +3 -3
- package/test/integration/SimultaneousConnections.test.ts +10 -7
- package/test/integration/Store.test.ts +1 -1
- package/test/integration/StoreAndDelete.test.ts +1 -1
- package/test/integration/StoreOnDhtWithTwoNodes.test.ts +12 -12
- package/test/integration/{WebRtcConnectionManagement.test.ts → WebrtcConnectionManagement.test.ts} +4 -4
- 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 +14 -24
- 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/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.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/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
|
@@ -6,17 +6,10 @@ import { RoutingRpcCommunicator } from '../../transport/RoutingRpcCommunicator'
|
|
|
6
6
|
import { PeerIDKey } from '../../helpers/PeerID'
|
|
7
7
|
import { DuplicateDetector } from './DuplicateDetector'
|
|
8
8
|
import { ConnectionManager } from '../../connection/ConnectionManager'
|
|
9
|
-
import {
|
|
9
|
+
import { DhtNodeRpcRemote } from '../DhtNodeRpcRemote'
|
|
10
10
|
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
|
-
}
|
|
11
|
+
import { RouterRpcLocal, createRouteMessageAck } from './RouterRpcLocal'
|
|
12
|
+
import { ServiceID } from '../../types/ServiceID'
|
|
20
13
|
|
|
21
14
|
export enum RoutingErrors {
|
|
22
15
|
NO_CANDIDATES_FOUND = 'No routing candidates found',
|
|
@@ -25,11 +18,13 @@ export enum RoutingErrors {
|
|
|
25
18
|
|
|
26
19
|
export interface RouterConfig {
|
|
27
20
|
rpcCommunicator: RoutingRpcCommunicator
|
|
28
|
-
|
|
29
|
-
connections: Map<PeerIDKey,
|
|
21
|
+
localPeerDescriptor: PeerDescriptor
|
|
22
|
+
connections: Map<PeerIDKey, DhtNodeRpcRemote>
|
|
30
23
|
addContact: (contact: PeerDescriptor, setActive?: boolean) => void
|
|
31
|
-
serviceId:
|
|
24
|
+
serviceId: ServiceID
|
|
32
25
|
connectionManager?: ConnectionManager
|
|
26
|
+
rpcRequestTimeout?: number
|
|
27
|
+
|
|
33
28
|
}
|
|
34
29
|
|
|
35
30
|
interface ForwardingTableEntry {
|
|
@@ -37,7 +32,7 @@ interface ForwardingTableEntry {
|
|
|
37
32
|
peerDescriptors: PeerDescriptor[]
|
|
38
33
|
}
|
|
39
34
|
|
|
40
|
-
interface
|
|
35
|
+
export interface IRouter {
|
|
41
36
|
doRouteMessage(routedMessage: RouteMessageWrapper, mode: RoutingMode, excludedPeer?: PeerDescriptor): RouteMessageAck
|
|
42
37
|
send(msg: Message, reachableThrough: PeerDescriptor[]): Promise<void>
|
|
43
38
|
isMostLikelyDuplicate(requestId: string): boolean
|
|
@@ -47,17 +42,13 @@ interface IRouterFunc {
|
|
|
47
42
|
stop(): void
|
|
48
43
|
}
|
|
49
44
|
|
|
50
|
-
export interface IRouter extends Omit<IRouterRpc, 'findRecursively'>, IRouterFunc {}
|
|
51
|
-
|
|
52
45
|
const logger = new Logger(module)
|
|
53
46
|
|
|
54
47
|
export class Router implements IRouter {
|
|
55
48
|
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
|
|
49
|
+
private readonly localPeerDescriptor: PeerDescriptor
|
|
50
|
+
private readonly connections: Map<PeerIDKey, DhtNodeRpcRemote>
|
|
51
|
+
private readonly serviceId: ServiceID
|
|
61
52
|
private readonly forwardingTable: Map<string, ForwardingTableEntry> = new Map()
|
|
62
53
|
private ongoingRoutingSessions: Map<string, RoutingSession> = new Map()
|
|
63
54
|
private readonly duplicateRequestDetector: DuplicateDetector = new DuplicateDetector(100000, 100)
|
|
@@ -65,19 +56,48 @@ export class Router implements IRouter {
|
|
|
65
56
|
|
|
66
57
|
constructor(config: RouterConfig) {
|
|
67
58
|
this.rpcCommunicator = config.rpcCommunicator
|
|
68
|
-
this.
|
|
59
|
+
this.localPeerDescriptor = config.localPeerDescriptor
|
|
69
60
|
this.connections = config.connections
|
|
70
|
-
this.addContact = config.addContact
|
|
71
61
|
this.serviceId = config.serviceId
|
|
72
|
-
this.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
62
|
+
this.registerLocalRpcMethods(config)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private registerLocalRpcMethods(config: RouterConfig) {
|
|
66
|
+
const rpcLocal = new RouterRpcLocal({
|
|
67
|
+
doRouteMessage: (routedMessage: RouteMessageWrapper, mode?: RoutingMode) => this.doRouteMessage(routedMessage, mode),
|
|
68
|
+
addContact: (contact: PeerDescriptor, setActive: boolean) => config.addContact(contact, setActive),
|
|
69
|
+
setForwardingEntries: (routedMessage: RouteMessageWrapper) => this.setForwardingEntries(routedMessage),
|
|
70
|
+
duplicateRequestDetector: this.duplicateRequestDetector,
|
|
71
|
+
localPeerDescriptor: this.localPeerDescriptor,
|
|
72
|
+
connectionManager: config.connectionManager
|
|
73
|
+
})
|
|
74
|
+
this.rpcCommunicator.registerRpcMethod(
|
|
75
|
+
RouteMessageWrapper,
|
|
76
|
+
RouteMessageAck,
|
|
77
|
+
'routeMessage',
|
|
78
|
+
async (routedMessage: RouteMessageWrapper) => {
|
|
79
|
+
if (this.stopped) {
|
|
80
|
+
return createRouteMessageAck(routedMessage, 'routeMessage() service is not running')
|
|
81
|
+
}
|
|
82
|
+
return rpcLocal.routeMessage(routedMessage)
|
|
83
|
+
}
|
|
84
|
+
)
|
|
85
|
+
this.rpcCommunicator.registerRpcMethod(
|
|
86
|
+
RouteMessageWrapper,
|
|
87
|
+
RouteMessageAck,
|
|
88
|
+
'forwardMessage',
|
|
89
|
+
async (forwardMessage: RouteMessageWrapper) => {
|
|
90
|
+
if (this.stopped) {
|
|
91
|
+
return createRouteMessageAck(forwardMessage, 'forwardMessage() service is not running')
|
|
92
|
+
}
|
|
93
|
+
return rpcLocal.forwardMessage(forwardMessage)
|
|
94
|
+
}
|
|
95
|
+
)
|
|
96
|
+
|
|
77
97
|
}
|
|
78
98
|
|
|
79
99
|
public async send(msg: Message, reachableThrough: PeerDescriptor[]): Promise<void> {
|
|
80
|
-
msg.sourceDescriptor = this.
|
|
100
|
+
msg.sourceDescriptor = this.localPeerDescriptor
|
|
81
101
|
const targetPeerDescriptor = msg.targetDescriptor!
|
|
82
102
|
const forwardingEntry = this.forwardingTable.get(keyFromPeerDescriptor(targetPeerDescriptor))
|
|
83
103
|
if (forwardingEntry && forwardingEntry.peerDescriptors.length > 0) {
|
|
@@ -86,7 +106,7 @@ export class Router implements IRouter {
|
|
|
86
106
|
message: msg,
|
|
87
107
|
requestId: v4(),
|
|
88
108
|
destinationPeer: forwardingPeer,
|
|
89
|
-
sourcePeer: this.
|
|
109
|
+
sourcePeer: this.localPeerDescriptor,
|
|
90
110
|
reachableThrough,
|
|
91
111
|
routingPath: []
|
|
92
112
|
}
|
|
@@ -96,7 +116,7 @@ export class Router implements IRouter {
|
|
|
96
116
|
message: msg,
|
|
97
117
|
requestId: v4(),
|
|
98
118
|
destinationPeer: targetPeerDescriptor,
|
|
99
|
-
sourcePeer: this.
|
|
119
|
+
sourcePeer: this.localPeerDescriptor,
|
|
100
120
|
reachableThrough,
|
|
101
121
|
routingPath: []
|
|
102
122
|
}
|
|
@@ -104,23 +124,23 @@ export class Router implements IRouter {
|
|
|
104
124
|
}
|
|
105
125
|
}
|
|
106
126
|
|
|
107
|
-
public doRouteMessage(routedMessage: RouteMessageWrapper, mode = RoutingMode.ROUTE
|
|
127
|
+
public doRouteMessage(routedMessage: RouteMessageWrapper, mode = RoutingMode.ROUTE): RouteMessageAck {
|
|
108
128
|
if (this.stopped) {
|
|
109
129
|
return createRouteMessageAck(routedMessage, RoutingErrors.STOPPED)
|
|
110
130
|
}
|
|
111
131
|
logger.trace(`Routing message ${routedMessage.requestId} from ${keyFromPeerDescriptor(routedMessage.sourcePeer!)} `
|
|
112
132
|
+ `to ${keyFromPeerDescriptor(routedMessage.destinationPeer!)}`)
|
|
113
|
-
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
133
|
+
const session = this.createRoutingSession(routedMessage, mode)
|
|
134
|
+
const contacts = session.findMoreContacts()
|
|
135
|
+
if (contacts.length > 0) {
|
|
136
|
+
this.addRoutingSession(session)
|
|
117
137
|
// eslint-disable-next-line promise/catch-or-return
|
|
118
138
|
logger.trace('starting to raceEvents from routingSession: ' + session.sessionId)
|
|
119
139
|
let eventReceived: Promise<unknown>
|
|
120
140
|
executeSafePromise(async () => {
|
|
121
141
|
eventReceived = raceEvents3<RoutingSessionEvents>(
|
|
122
142
|
session,
|
|
123
|
-
['routingSucceeded', 'partialSuccess', 'routingFailed', 'stopped'
|
|
143
|
+
['routingSucceeded', 'partialSuccess', 'routingFailed', 'stopped'],
|
|
124
144
|
null
|
|
125
145
|
)
|
|
126
146
|
})
|
|
@@ -134,33 +154,29 @@ export class Router implements IRouter {
|
|
|
134
154
|
session.stop()
|
|
135
155
|
this.removeRoutingSession(session.sessionId)
|
|
136
156
|
})
|
|
137
|
-
session.
|
|
138
|
-
|
|
139
|
-
|
|
157
|
+
session.sendMoreRequests(contacts)
|
|
158
|
+
return createRouteMessageAck(routedMessage)
|
|
159
|
+
} else {
|
|
160
|
+
if (areEqualPeerDescriptors(routedMessage.sourcePeer!, this.localPeerDescriptor)) {
|
|
140
161
|
logger.warn(
|
|
141
|
-
`Failed to send (routeMessage: ${this.serviceId}) to ${keyFromPeerDescriptor(routedMessage.destinationPeer!)}
|
|
162
|
+
`Failed to send (routeMessage: ${this.serviceId}) to ${keyFromPeerDescriptor(routedMessage.destinationPeer!)}`
|
|
142
163
|
)
|
|
143
164
|
}
|
|
165
|
+
logger.trace('noCandidatesFound sessionId: ' + session.sessionId)
|
|
144
166
|
return createRouteMessageAck(routedMessage, RoutingErrors.NO_CANDIDATES_FOUND)
|
|
145
167
|
}
|
|
146
|
-
return createRouteMessageAck(routedMessage)
|
|
147
168
|
}
|
|
148
169
|
|
|
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 )
|
|
170
|
+
private createRoutingSession(routedMessage: RouteMessageWrapper, mode: RoutingMode): RoutingSession {
|
|
171
|
+
logger.trace('routing session created with connections: ' + this.connections.size)
|
|
155
172
|
return new RoutingSession(
|
|
156
173
|
this.rpcCommunicator,
|
|
157
|
-
this.
|
|
174
|
+
this.localPeerDescriptor,
|
|
158
175
|
routedMessage,
|
|
159
176
|
this.connections,
|
|
160
|
-
areEqualPeerDescriptors(this.
|
|
177
|
+
areEqualPeerDescriptors(this.localPeerDescriptor, routedMessage.sourcePeer!) ? 2 : 1,
|
|
161
178
|
mode,
|
|
162
|
-
|
|
163
|
-
excludedPeers
|
|
179
|
+
routedMessage.routingPath.map((descriptor) => peerIdFromPeerDescriptor(descriptor))
|
|
164
180
|
)
|
|
165
181
|
}
|
|
166
182
|
|
|
@@ -192,32 +208,10 @@ export class Router implements IRouter {
|
|
|
192
208
|
this.forwardingTable.clear()
|
|
193
209
|
this.duplicateRequestDetector.clear()
|
|
194
210
|
}
|
|
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
211
|
|
|
218
212
|
private setForwardingEntries(routedMessage: RouteMessageWrapper): void {
|
|
219
213
|
const reachableThroughWithoutSelf = routedMessage.reachableThrough.filter((peer) => {
|
|
220
|
-
return !areEqualPeerDescriptors(peer, this.
|
|
214
|
+
return !areEqualPeerDescriptors(peer, this.localPeerDescriptor)
|
|
221
215
|
})
|
|
222
216
|
|
|
223
217
|
if (reachableThroughWithoutSelf.length > 0) {
|
|
@@ -236,34 +230,4 @@ export class Router implements IRouter {
|
|
|
236
230
|
this.forwardingTable.set(sourceKey, forwardingEntry)
|
|
237
231
|
}
|
|
238
232
|
}
|
|
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
233
|
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Logger } from '@streamr/utils'
|
|
2
|
+
import { ConnectionManager } from '../../connection/ConnectionManager'
|
|
3
|
+
import { areEqualPeerDescriptors, keyFromPeerDescriptor } 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 ${keyFromPeerDescriptor(routedMessage.sourcePeer!)} `
|
|
39
|
+
+ `to ${keyFromPeerDescriptor(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 ${keyFromPeerDescriptor(forwardMessage.sourcePeer!)} `
|
|
58
|
+
+ `to ${keyFromPeerDescriptor(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
|
+
}
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
import { IRouterRpcClient } from '../../proto/packages/dht/protos/DhtRpc.client'
|
|
9
9
|
import { Remote } from '../contact/Remote'
|
|
10
10
|
import { Logger } from '@streamr/utils'
|
|
11
|
+
import { getPreviousPeer } from './getPreviousPeer'
|
|
11
12
|
|
|
12
13
|
const logger = new Logger(module)
|
|
13
14
|
|
|
@@ -17,15 +18,12 @@ export class RouterRpcRemote extends Remote<IRouterRpcClient> {
|
|
|
17
18
|
const message: RouteMessageWrapper = {
|
|
18
19
|
destinationPeer: params.destinationPeer,
|
|
19
20
|
sourcePeer: params.sourcePeer,
|
|
20
|
-
previousPeer: params.previousPeer,
|
|
21
21
|
message: params.message,
|
|
22
|
-
requestId: params.requestId
|
|
23
|
-
reachableThrough: params.reachableThrough
|
|
22
|
+
requestId: params.requestId ?? v4(),
|
|
23
|
+
reachableThrough: params.reachableThrough ?? [],
|
|
24
24
|
routingPath: params.routingPath
|
|
25
25
|
}
|
|
26
|
-
const options = this.formDhtRpcOptions(
|
|
27
|
-
timeout: 10000
|
|
28
|
-
})
|
|
26
|
+
const options = this.formDhtRpcOptions()
|
|
29
27
|
try {
|
|
30
28
|
const ack = await this.getClient().routeMessage(message, options)
|
|
31
29
|
// Success signal if sent to destination and error includes duplicate
|
|
@@ -38,8 +36,10 @@ export class RouterRpcRemote extends Remote<IRouterRpcClient> {
|
|
|
38
36
|
return false
|
|
39
37
|
}
|
|
40
38
|
} catch (err) {
|
|
41
|
-
const
|
|
42
|
-
|
|
39
|
+
const previousPeer = getPreviousPeer(params)
|
|
40
|
+
const fromNode = previousPeer
|
|
41
|
+
? peerIdFromPeerDescriptor(previousPeer)
|
|
42
|
+
: keyFromPeerDescriptor(params.sourcePeer!)
|
|
43
43
|
logger.trace(`Failed to send routeMessage from ${fromNode} to ${keyFromPeerDescriptor(this.getPeerDescriptor())} with: ${err}`)
|
|
44
44
|
return false
|
|
45
45
|
}
|
|
@@ -50,24 +50,22 @@ export class RouterRpcRemote extends Remote<IRouterRpcClient> {
|
|
|
50
50
|
const message: RouteMessageWrapper = {
|
|
51
51
|
destinationPeer: params.destinationPeer,
|
|
52
52
|
sourcePeer: params.sourcePeer,
|
|
53
|
-
previousPeer: params.previousPeer,
|
|
54
53
|
message: params.message,
|
|
55
|
-
requestId: params.requestId
|
|
56
|
-
reachableThrough: params.reachableThrough
|
|
54
|
+
requestId: params.requestId ?? v4(),
|
|
55
|
+
reachableThrough: params.reachableThrough ?? [],
|
|
57
56
|
routingPath: params.routingPath
|
|
58
57
|
}
|
|
59
|
-
const options = this.formDhtRpcOptions(
|
|
60
|
-
timeout: 10000
|
|
61
|
-
})
|
|
58
|
+
const options = this.formDhtRpcOptions()
|
|
62
59
|
try {
|
|
63
60
|
const ack = await this.getClient().forwardMessage(message, options)
|
|
64
61
|
if (ack.error.length > 0) {
|
|
65
62
|
return false
|
|
66
63
|
}
|
|
67
64
|
} catch (err) {
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
65
|
+
const previousPeer = getPreviousPeer(params)
|
|
66
|
+
const fromNode = previousPeer
|
|
67
|
+
? keyFromPeerDescriptor(previousPeer)
|
|
68
|
+
: keyFromPeerDescriptor(params.sourcePeer!)
|
|
71
69
|
logger.trace(
|
|
72
70
|
`Failed to send forwardMessage from ${fromNode} to ${keyFromPeerDescriptor(this.getPeerDescriptor())} with: ${err}`
|
|
73
71
|
)
|
|
@@ -75,32 +73,4 @@ export class RouterRpcRemote extends Remote<IRouterRpcClient> {
|
|
|
75
73
|
}
|
|
76
74
|
return true
|
|
77
75
|
}
|
|
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
76
|
}
|