@streamr/dht 100.0.0-pretestnet.0 → 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} +108 -102
- 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} +18 -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} +51 -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 +48 -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 +5 -1
- package/dist/src/transport/ListeningRpcCommunicator.js +8 -2
- 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} +110 -101
- 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} +26 -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} +78 -71
- package/src/dht/routing/FindRpcRemote.ts +40 -0
- package/src/dht/routing/Router.ts +70 -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 +14 -4
- 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
|
})
|
|
@@ -131,35 +151,32 @@ export class Router implements IRouter {
|
|
|
131
151
|
} catch (e) {
|
|
132
152
|
logger.trace('raceEvents timed out for routingSession ' + session.sessionId)
|
|
133
153
|
}
|
|
154
|
+
session.stop()
|
|
134
155
|
this.removeRoutingSession(session.sessionId)
|
|
135
156
|
})
|
|
136
|
-
session.
|
|
137
|
-
|
|
138
|
-
|
|
157
|
+
session.sendMoreRequests(contacts)
|
|
158
|
+
return createRouteMessageAck(routedMessage)
|
|
159
|
+
} else {
|
|
160
|
+
if (areEqualPeerDescriptors(routedMessage.sourcePeer!, this.localPeerDescriptor)) {
|
|
139
161
|
logger.warn(
|
|
140
|
-
`Failed to send (routeMessage: ${this.serviceId}) to ${keyFromPeerDescriptor(routedMessage.destinationPeer!)}
|
|
162
|
+
`Failed to send (routeMessage: ${this.serviceId}) to ${keyFromPeerDescriptor(routedMessage.destinationPeer!)}`
|
|
141
163
|
)
|
|
142
164
|
}
|
|
165
|
+
logger.trace('noCandidatesFound sessionId: ' + session.sessionId)
|
|
143
166
|
return createRouteMessageAck(routedMessage, RoutingErrors.NO_CANDIDATES_FOUND)
|
|
144
167
|
}
|
|
145
|
-
return createRouteMessageAck(routedMessage)
|
|
146
168
|
}
|
|
147
169
|
|
|
148
|
-
private createRoutingSession(routedMessage: RouteMessageWrapper, mode: RoutingMode
|
|
149
|
-
|
|
150
|
-
if (excludedPeer) {
|
|
151
|
-
excludedPeers.push(peerIdFromPeerDescriptor(excludedPeer))
|
|
152
|
-
}
|
|
153
|
-
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)
|
|
154
172
|
return new RoutingSession(
|
|
155
173
|
this.rpcCommunicator,
|
|
156
|
-
this.
|
|
174
|
+
this.localPeerDescriptor,
|
|
157
175
|
routedMessage,
|
|
158
176
|
this.connections,
|
|
159
|
-
areEqualPeerDescriptors(this.
|
|
177
|
+
areEqualPeerDescriptors(this.localPeerDescriptor, routedMessage.sourcePeer!) ? 2 : 1,
|
|
160
178
|
mode,
|
|
161
|
-
|
|
162
|
-
excludedPeers
|
|
179
|
+
routedMessage.routingPath.map((descriptor) => peerIdFromPeerDescriptor(descriptor))
|
|
163
180
|
)
|
|
164
181
|
}
|
|
165
182
|
|
|
@@ -191,32 +208,10 @@ export class Router implements IRouter {
|
|
|
191
208
|
this.forwardingTable.clear()
|
|
192
209
|
this.duplicateRequestDetector.clear()
|
|
193
210
|
}
|
|
194
|
-
|
|
195
|
-
// IRouterRpc method
|
|
196
|
-
async routeMessage(routedMessage: RouteMessageWrapper): Promise<RouteMessageAck> {
|
|
197
|
-
if (this.stopped) {
|
|
198
|
-
return createRouteMessageAck(routedMessage, 'routeMessage() service is not running')
|
|
199
|
-
} else if (this.duplicateRequestDetector.isMostLikelyDuplicate(routedMessage.requestId)) {
|
|
200
|
-
logger.trace(`Routing message ${routedMessage.requestId} from ${keyFromPeerDescriptor(routedMessage.sourcePeer!)} `
|
|
201
|
-
+ `to ${keyFromPeerDescriptor(routedMessage.destinationPeer!)} is likely a duplicate`)
|
|
202
|
-
return createRouteMessageAck(routedMessage, 'message given to routeMessage() service is likely a duplicate')
|
|
203
|
-
}
|
|
204
|
-
logger.trace(`Processing received routeMessage ${routedMessage.requestId}`)
|
|
205
|
-
this.addContact(routedMessage.sourcePeer!, true)
|
|
206
|
-
this.addToDuplicateDetector(routedMessage.requestId)
|
|
207
|
-
if (areEqualPeerDescriptors(this.ownPeerDescriptor, routedMessage.destinationPeer!)) {
|
|
208
|
-
logger.trace(`routing message targeted to self ${routedMessage.requestId}`)
|
|
209
|
-
this.setForwardingEntries(routedMessage)
|
|
210
|
-
this.connectionManager?.handleMessage(routedMessage.message!)
|
|
211
|
-
return createRouteMessageAck(routedMessage)
|
|
212
|
-
} else {
|
|
213
|
-
return this.doRouteMessage(routedMessage)
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
211
|
|
|
217
212
|
private setForwardingEntries(routedMessage: RouteMessageWrapper): void {
|
|
218
213
|
const reachableThroughWithoutSelf = routedMessage.reachableThrough.filter((peer) => {
|
|
219
|
-
return !areEqualPeerDescriptors(peer, this.
|
|
214
|
+
return !areEqualPeerDescriptors(peer, this.localPeerDescriptor)
|
|
220
215
|
})
|
|
221
216
|
|
|
222
217
|
if (reachableThroughWithoutSelf.length > 0) {
|
|
@@ -235,34 +230,4 @@ export class Router implements IRouter {
|
|
|
235
230
|
this.forwardingTable.set(sourceKey, forwardingEntry)
|
|
236
231
|
}
|
|
237
232
|
}
|
|
238
|
-
|
|
239
|
-
// IRouterRpc method
|
|
240
|
-
async forwardMessage(forwardMessage: RouteMessageWrapper): Promise<RouteMessageAck> {
|
|
241
|
-
if (this.stopped) {
|
|
242
|
-
return createRouteMessageAck(forwardMessage, 'forwardMessage() service is not running')
|
|
243
|
-
} else if (this.duplicateRequestDetector.isMostLikelyDuplicate(forwardMessage.requestId)) {
|
|
244
|
-
logger.trace(`Forwarding message ${forwardMessage.requestId} from ${keyFromPeerDescriptor(forwardMessage.sourcePeer!)} `
|
|
245
|
-
+ `to ${keyFromPeerDescriptor(forwardMessage.destinationPeer!)} is likely a duplicate`)
|
|
246
|
-
return createRouteMessageAck(forwardMessage, 'message given to forwardMessage() service is likely a duplicate')
|
|
247
|
-
}
|
|
248
|
-
logger.trace(`Processing received forward routeMessage ${forwardMessage.requestId}`)
|
|
249
|
-
this.addContact(forwardMessage.sourcePeer!, true)
|
|
250
|
-
this.addToDuplicateDetector(forwardMessage.requestId)
|
|
251
|
-
if (areEqualPeerDescriptors(this.ownPeerDescriptor, forwardMessage.destinationPeer!)) {
|
|
252
|
-
return this.forwardToDestination(forwardMessage)
|
|
253
|
-
} else {
|
|
254
|
-
return this.doRouteMessage(forwardMessage, RoutingMode.FORWARD)
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
private forwardToDestination(routedMessage: RouteMessageWrapper): RouteMessageAck {
|
|
259
|
-
logger.trace(`Forwarding found message targeted to self ${routedMessage.requestId}`)
|
|
260
|
-
const forwardedMessage = routedMessage.message!
|
|
261
|
-
if (areEqualPeerDescriptors(this.ownPeerDescriptor, forwardedMessage.targetDescriptor!)) {
|
|
262
|
-
this.connectionManager?.handleMessage(forwardedMessage)
|
|
263
|
-
return createRouteMessageAck(routedMessage)
|
|
264
|
-
}
|
|
265
|
-
return this.doRouteMessage({ ...routedMessage, destinationPeer: forwardedMessage.targetDescriptor })
|
|
266
|
-
}
|
|
267
|
-
|
|
268
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
|
}
|