@streamr/dht 0.0.1-tatum.6 → 0.0.1-tatum.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/dist/src/connection/ConnectionLockHandler.d.ts +1 -1
  2. package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
  3. package/dist/src/connection/ConnectionLockRpcRemote.d.ts +10 -0
  4. package/dist/src/connection/{RemoteConnectionLocker.js → ConnectionLockRpcRemote.js} +21 -35
  5. package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -0
  6. package/dist/src/connection/ConnectionManager.d.ts +17 -41
  7. package/dist/src/connection/ConnectionManager.js +148 -212
  8. package/dist/src/connection/ConnectionManager.js.map +1 -1
  9. package/dist/src/connection/ConnectivityChecker.js +16 -13
  10. package/dist/src/connection/ConnectivityChecker.js.map +1 -1
  11. package/dist/src/connection/ConnectorFacade.d.ts +49 -0
  12. package/dist/src/connection/ConnectorFacade.js +83 -0
  13. package/dist/src/connection/ConnectorFacade.js.map +1 -0
  14. package/dist/src/connection/Handshaker.d.ts +1 -2
  15. package/dist/src/connection/Handshaker.js +1 -4
  16. package/dist/src/connection/Handshaker.js.map +1 -1
  17. package/dist/src/connection/ManagedConnection.d.ts +2 -6
  18. package/dist/src/connection/ManagedConnection.js +27 -36
  19. package/dist/src/connection/ManagedConnection.js.map +1 -1
  20. package/dist/src/connection/ManagedWebRtcConnection.d.ts +1 -1
  21. package/dist/src/connection/ManagedWebRtcConnection.js +2 -2
  22. package/dist/src/connection/ManagedWebRtcConnection.js.map +1 -1
  23. package/dist/src/connection/Simulator/Simulator.d.ts +0 -2
  24. package/dist/src/connection/Simulator/Simulator.js +0 -5
  25. package/dist/src/connection/Simulator/Simulator.js.map +1 -1
  26. package/dist/src/connection/Simulator/SimulatorConnection.js +16 -13
  27. package/dist/src/connection/Simulator/SimulatorConnection.js.map +1 -1
  28. package/dist/src/connection/Simulator/SimulatorConnector.d.ts +2 -3
  29. package/dist/src/connection/Simulator/SimulatorConnector.js +12 -14
  30. package/dist/src/connection/Simulator/SimulatorConnector.js.map +1 -1
  31. package/dist/src/connection/Simulator/SimulatorTransport.js +6 -1
  32. package/dist/src/connection/Simulator/SimulatorTransport.js.map +1 -1
  33. package/dist/src/connection/WebRTC/NodeWebRtcConnection.d.ts +3 -1
  34. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js +12 -12
  35. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +1 -1
  36. package/dist/src/connection/WebRTC/{WebRtcConnector.d.ts → WebRtcConnectorRpcLocal.d.ts} +13 -13
  37. package/dist/src/connection/WebRTC/{WebRtcConnector.js → WebRtcConnectorRpcLocal.js} +46 -38
  38. package/dist/src/connection/WebRTC/WebRtcConnectorRpcLocal.js.map +1 -0
  39. package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.d.ts +11 -0
  40. package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js +55 -0
  41. package/dist/src/connection/WebRTC/WebRtcConnectorRpcRemote.js.map +1 -0
  42. package/dist/src/connection/WebRTC/iceServerAsString.d.ts +1 -1
  43. package/dist/src/connection/WebSocket/{WebSocketConnector.d.ts → WebSocketConnectorRpcLocal.d.ts} +21 -11
  44. package/dist/src/connection/WebSocket/{WebSocketConnector.js → WebSocketConnectorRpcLocal.js} +80 -59
  45. package/dist/src/connection/WebSocket/WebSocketConnectorRpcLocal.js.map +1 -0
  46. package/dist/src/connection/WebSocket/WebSocketConnectorRpcRemote.d.ts +8 -0
  47. package/dist/src/connection/WebSocket/{RemoteWebSocketConnector.js → WebSocketConnectorRpcRemote.js} +12 -16
  48. package/dist/src/connection/WebSocket/WebSocketConnectorRpcRemote.js.map +1 -0
  49. package/dist/src/connection/WebSocket/WebSocketServer.d.ts +11 -1
  50. package/dist/src/connection/WebSocket/WebSocketServer.js +15 -10
  51. package/dist/src/connection/WebSocket/WebSocketServer.js.map +1 -1
  52. package/dist/src/dht/DhtNode.d.ts +18 -55
  53. package/dist/src/dht/DhtNode.js +122 -145
  54. package/dist/src/dht/DhtNode.js.map +1 -1
  55. package/dist/src/dht/{RemoteExternalApi.d.ts → ExternalApiRpcRemote.d.ts} +2 -2
  56. package/dist/src/dht/{RemoteExternalApi.js → ExternalApiRpcRemote.js} +5 -6
  57. package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -0
  58. package/dist/src/dht/{DhtPeer.d.ts → RemoteDhtNode.d.ts} +2 -3
  59. package/dist/src/dht/{DhtPeer.js → RemoteDhtNode.js} +21 -19
  60. package/dist/src/dht/RemoteDhtNode.js.map +1 -0
  61. package/dist/src/dht/contact/ContactList.d.ts +0 -1
  62. package/dist/src/dht/contact/ContactList.js +0 -3
  63. package/dist/src/dht/contact/ContactList.js.map +1 -1
  64. package/dist/src/dht/contact/RandomContactList.d.ts +0 -1
  65. package/dist/src/dht/contact/RandomContactList.js +0 -3
  66. package/dist/src/dht/contact/RandomContactList.js.map +1 -1
  67. package/dist/src/dht/contact/SortedContactList.d.ts +0 -3
  68. package/dist/src/dht/contact/SortedContactList.js +0 -9
  69. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  70. package/dist/src/dht/discovery/DiscoverySession.d.ts +5 -7
  71. package/dist/src/dht/discovery/DiscoverySession.js +9 -10
  72. package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
  73. package/dist/src/dht/discovery/PeerDiscovery.d.ts +12 -11
  74. package/dist/src/dht/discovery/PeerDiscovery.js +33 -37
  75. package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
  76. package/dist/src/dht/find/RecursiveFindSession.d.ts +9 -10
  77. package/dist/src/dht/find/RecursiveFindSession.js +13 -13
  78. package/dist/src/dht/find/RecursiveFindSession.js.map +1 -1
  79. package/dist/src/dht/find/RecursiveFinder.d.ts +9 -11
  80. package/dist/src/dht/find/RecursiveFinder.js +35 -36
  81. package/dist/src/dht/find/RecursiveFinder.js.map +1 -1
  82. package/dist/src/dht/find/RemoteRecursiveFindSession.d.ts +1 -1
  83. package/dist/src/dht/find/RemoteRecursiveFindSession.js +4 -4
  84. package/dist/src/dht/find/RemoteRecursiveFindSession.js.map +1 -1
  85. package/dist/src/dht/registerExternalApiRpcMethods.d.ts +1 -1
  86. package/dist/src/dht/registerExternalApiRpcMethods.js +4 -3
  87. package/dist/src/dht/registerExternalApiRpcMethods.js.map +1 -1
  88. package/dist/src/dht/routing/DuplicateDetector.d.ts +1 -2
  89. package/dist/src/dht/routing/DuplicateDetector.js +2 -7
  90. package/dist/src/dht/routing/DuplicateDetector.js.map +1 -1
  91. package/dist/src/dht/routing/Router.d.ts +12 -15
  92. package/dist/src/dht/routing/Router.js +30 -33
  93. package/dist/src/dht/routing/Router.js.map +1 -1
  94. package/dist/src/dht/routing/{RemoteRouter.d.ts → RouterRpcRemote.d.ts} +2 -2
  95. package/dist/src/dht/routing/{RemoteRouter.js → RouterRpcRemote.js} +5 -5
  96. package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -0
  97. package/dist/src/dht/routing/RoutingSession.d.ts +3 -4
  98. package/dist/src/dht/routing/RoutingSession.js +6 -5
  99. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  100. package/dist/src/dht/store/{DataStore.d.ts → StoreRpcLocal.d.ts} +6 -6
  101. package/dist/src/dht/store/{DataStore.js → StoreRpcLocal.js} +34 -34
  102. package/dist/src/dht/store/StoreRpcLocal.js.map +1 -0
  103. package/dist/src/dht/store/{RemoteStore.d.ts → StoreRpcRemote.d.ts} +2 -2
  104. package/dist/src/dht/store/{RemoteStore.js → StoreRpcRemote.js} +4 -4
  105. package/dist/src/dht/store/StoreRpcRemote.js.map +1 -0
  106. package/dist/src/exports.d.ts +2 -8
  107. package/dist/src/exports.js +2 -14
  108. package/dist/src/exports.js.map +1 -1
  109. package/dist/src/helpers/PeerID.d.ts +0 -1
  110. package/dist/src/helpers/PeerID.js +0 -6
  111. package/dist/src/helpers/PeerID.js.map +1 -1
  112. package/dist/src/helpers/browser/isBrowserEnvironment.d.ts +1 -0
  113. package/dist/src/helpers/browser/isBrowserEnvironment.js +6 -0
  114. package/dist/src/helpers/browser/isBrowserEnvironment.js.map +1 -0
  115. package/dist/src/helpers/browser/isBrowserEnvironment_override.d.ts +1 -0
  116. package/dist/src/helpers/browser/isBrowserEnvironment_override.js +7 -0
  117. package/dist/src/helpers/browser/isBrowserEnvironment_override.js.map +1 -0
  118. package/dist/src/helpers/kademliaId.d.ts +1 -0
  119. package/dist/src/helpers/kademliaId.js +14 -0
  120. package/dist/src/helpers/kademliaId.js.map +1 -0
  121. package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +1 -1
  122. package/dist/src/helpers/peerIdFromPeerDescriptor.js +3 -3
  123. package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
  124. package/dist/src/helpers/protoClasses.js +2 -2
  125. package/dist/src/helpers/protoClasses.js.map +1 -1
  126. package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +29 -29
  127. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +39 -39
  128. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
  129. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +49 -162
  130. package/dist/src/proto/packages/dht/protos/DhtRpc.js +47 -88
  131. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  132. package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +15 -15
  133. package/dist/src/transport/RoutingRpcCommunicator.js +1 -0
  134. package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
  135. package/package.json +10 -9
  136. package/protos/DhtRpc.proto +30 -60
  137. package/src/connection/ConnectionLockHandler.ts +1 -1
  138. package/src/connection/ConnectionLockRpcRemote.ts +62 -0
  139. package/src/connection/ConnectionManager.ts +178 -274
  140. package/src/connection/ConnectivityChecker.ts +15 -12
  141. package/src/connection/ConnectorFacade.ts +140 -0
  142. package/src/connection/Handshaker.ts +0 -5
  143. package/src/connection/ManagedConnection.ts +26 -40
  144. package/src/connection/ManagedWebRtcConnection.ts +0 -2
  145. package/src/connection/Simulator/Simulator.ts +0 -7
  146. package/src/connection/Simulator/SimulatorConnection.ts +16 -13
  147. package/src/connection/Simulator/SimulatorConnector.ts +13 -19
  148. package/src/connection/Simulator/SimulatorTransport.ts +6 -1
  149. package/src/connection/WebRTC/NodeWebRtcConnection.ts +15 -14
  150. package/src/connection/WebRTC/{WebRtcConnector.ts → WebRtcConnectorRpcLocal.ts} +68 -56
  151. package/src/connection/WebRTC/WebRtcConnectorRpcRemote.ts +71 -0
  152. package/src/connection/WebRTC/iceServerAsString.ts +1 -1
  153. package/src/connection/WebSocket/{WebSocketConnector.ts → WebSocketConnectorRpcLocal.ts} +102 -79
  154. package/src/connection/WebSocket/WebSocketConnectorRpcRemote.ts +45 -0
  155. package/src/connection/WebSocket/WebSocketServer.ts +26 -8
  156. package/src/dht/DhtNode.ts +176 -203
  157. package/src/dht/{RemoteExternalApi.ts → ExternalApiRpcRemote.ts} +3 -4
  158. package/src/dht/{DhtPeer.ts → RemoteDhtNode.ts} +11 -9
  159. package/src/dht/contact/ContactList.ts +0 -4
  160. package/src/dht/contact/RandomContactList.ts +0 -4
  161. package/src/dht/contact/SortedContactList.ts +0 -12
  162. package/src/dht/discovery/DiscoverySession.ts +20 -23
  163. package/src/dht/discovery/PeerDiscovery.ts +47 -45
  164. package/src/dht/find/RecursiveFindSession.ts +21 -22
  165. package/src/dht/find/RecursiveFinder.ts +45 -49
  166. package/src/dht/find/RemoteRecursiveFindSession.ts +6 -6
  167. package/src/dht/registerExternalApiRpcMethods.ts +8 -5
  168. package/src/dht/routing/DuplicateDetector.ts +3 -10
  169. package/src/dht/routing/Router.ts +39 -45
  170. package/src/dht/routing/{RemoteRouter.ts → RouterRpcRemote.ts} +4 -4
  171. package/src/dht/routing/RoutingSession.ts +15 -15
  172. package/src/dht/store/{DataStore.ts → StoreRpcLocal.ts} +42 -42
  173. package/src/dht/store/{RemoteStore.ts → StoreRpcRemote.ts} +2 -2
  174. package/src/exports.ts +2 -8
  175. package/src/helpers/PeerID.ts +0 -7
  176. package/src/helpers/browser/isBrowserEnvironment.ts +1 -0
  177. package/src/helpers/browser/isBrowserEnvironment_override.ts +3 -0
  178. package/src/helpers/kademliaId.ts +8 -0
  179. package/src/helpers/peerIdFromPeerDescriptor.ts +1 -1
  180. package/src/helpers/protoClasses.ts +4 -4
  181. package/src/proto/packages/dht/protos/DhtRpc.client.ts +54 -54
  182. package/src/proto/packages/dht/protos/DhtRpc.server.ts +15 -15
  183. package/src/proto/packages/dht/protos/DhtRpc.ts +77 -216
  184. package/src/transport/RoutingRpcCommunicator.ts +1 -0
  185. package/test/benchmark/KademliaCorrectness.test.ts +4 -2
  186. package/test/benchmark/RecursiveFind.test.ts +6 -6
  187. package/test/end-to-end/Layer0-Layer1.test.ts +9 -9
  188. package/test/end-to-end/Layer0WebRTC-Layer1.test.ts +5 -5
  189. package/test/end-to-end/Layer0WebRTC.test.ts +5 -6
  190. package/test/end-to-end/Layer1-Scale-WebRTC.test.ts +13 -8
  191. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +15 -10
  192. package/test/end-to-end/WebSocketConnectionRequest.test.ts +5 -5
  193. package/test/integration/ConnectionLocking.test.ts +32 -26
  194. package/test/integration/ConnectionManager.test.ts +90 -93
  195. package/test/integration/DhtJoinPeerDiscovery.test.ts +53 -0
  196. package/test/integration/DhtRpc.test.ts +4 -6
  197. package/test/integration/Layer1-scale.test.ts +8 -8
  198. package/test/integration/MigrateData.test.ts +9 -9
  199. package/test/integration/Mock-Layer1-Layer0.test.ts +1 -2
  200. package/test/integration/RecursiveFind.test.ts +5 -5
  201. package/test/integration/{DhtPeer.test.ts → RemoteDhtNode.test.ts} +11 -12
  202. package/test/integration/RouteMessage.test.ts +7 -9
  203. package/test/integration/{RemoteRouter.test.ts → RouterRpcRemote.test.ts} +13 -14
  204. package/test/integration/RpcErrors.test.ts +25 -10
  205. package/test/integration/ScaleDownDht.test.ts +8 -8
  206. package/test/integration/SimultaneousConnections.test.ts +35 -36
  207. package/test/integration/Store.test.ts +8 -9
  208. package/test/integration/StoreAndDelete.test.ts +11 -11
  209. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +7 -7
  210. package/test/integration/{RemoteStore.test.ts → StoreRpcRemote.test.ts} +17 -18
  211. package/test/integration/WebRtcConnectionManagement.test.ts +26 -19
  212. package/test/integration/WebRtcConnectorRpc.test.ts +17 -32
  213. package/test/integration/WebSocket.test.ts +4 -2
  214. package/test/integration/WebSocketConnectionManagement.test.ts +30 -17
  215. package/test/integration/WebSocketConnectorRpc.test.ts +10 -15
  216. package/test/unit/DuplicateDetector.test.ts +3 -4
  217. package/test/unit/LocalDataStore.test.ts +6 -8
  218. package/test/unit/RandomContactList.test.ts +1 -1
  219. package/test/unit/RecursiveFinder.test.ts +13 -18
  220. package/test/unit/Router.test.ts +18 -21
  221. package/test/unit/WebSocketConnectorRpcLocal.test.ts +64 -0
  222. package/test/unit/WebSocketServer.test.ts +24 -12
  223. package/test/unit/{webrtcReplaceInternalIpWithExternalIp.ts → webrtcReplaceInternalIpWithExternalIp.test.ts} +1 -1
  224. package/test/utils/mock/RecursiveFinder.ts +2 -2
  225. package/test/utils/mock/Router.ts +9 -11
  226. package/test/utils/mock/Transport.ts +2 -2
  227. package/test/utils/utils.ts +55 -74
  228. package/dist/src/connection/RemoteConnectionLocker.d.ts +0 -13
  229. package/dist/src/connection/RemoteConnectionLocker.js.map +0 -1
  230. package/dist/src/connection/WebRTC/RemoteWebrtcConnector.d.ts +0 -12
  231. package/dist/src/connection/WebRTC/RemoteWebrtcConnector.js +0 -74
  232. package/dist/src/connection/WebRTC/RemoteWebrtcConnector.js.map +0 -1
  233. package/dist/src/connection/WebRTC/WebRtcConnector.js.map +0 -1
  234. package/dist/src/connection/WebSocket/RemoteWebSocketConnector.d.ts +0 -9
  235. package/dist/src/connection/WebSocket/RemoteWebSocketConnector.js.map +0 -1
  236. package/dist/src/connection/WebSocket/WebSocketConnector.js.map +0 -1
  237. package/dist/src/dht/DhtPeer.js.map +0 -1
  238. package/dist/src/dht/RemoteExternalApi.js.map +0 -1
  239. package/dist/src/dht/routing/RemoteRouter.js.map +0 -1
  240. package/dist/src/dht/store/DataStore.js.map +0 -1
  241. package/dist/src/dht/store/RemoteStore.js.map +0 -1
  242. package/dist/src/helpers/browser/isBrowser.d.ts +0 -1
  243. package/dist/src/helpers/browser/isBrowser.js +0 -6
  244. package/dist/src/helpers/browser/isBrowser.js.map +0 -1
  245. package/dist/src/helpers/browser/isNodeJS.d.ts +0 -1
  246. package/dist/src/helpers/browser/isNodeJS.js +0 -6
  247. package/dist/src/helpers/browser/isNodeJS.js.map +0 -1
  248. package/src/connection/RemoteConnectionLocker.ts +0 -84
  249. package/src/connection/WebRTC/RemoteWebrtcConnector.ts +0 -93
  250. package/src/connection/WebSocket/RemoteWebSocketConnector.ts +0 -49
  251. package/src/helpers/browser/isBrowser.ts +0 -1
  252. package/src/helpers/browser/isNodeJS.ts +0 -1
  253. package/test/integration/DhtWithMockConnectionLatencies.test.ts +0 -46
  254. package/test/integration/DhtWithMockConnections.test.ts +0 -46
  255. package/test/integration/DhtWithRealConnectionLatencies.test.ts +0 -47
@@ -1,27 +1,26 @@
1
1
  import {
2
2
  DataEntry,
3
- FindMode,
4
3
  Message,
5
4
  MessageType,
6
5
  NodeType,
7
6
  PeerDescriptor,
8
- RecursiveFindRequest,
7
+ FindRequest,
9
8
  RouteMessageAck,
10
9
  RouteMessageWrapper
11
10
  } from '../../proto/packages/dht/protos/DhtRpc'
12
11
  import { PeerID, PeerIDKey } from '../../helpers/PeerID'
13
12
  import { createRouteMessageAck, RoutingErrors, IRouter } from '../routing/Router'
14
13
  import { RoutingMode } from '../routing/RoutingSession'
15
- import { keyFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
14
+ import { areEqualPeerDescriptors, keyFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
16
15
  import { Logger, runAndWaitForEvents3 } from '@streamr/utils'
17
16
  import { RoutingRpcCommunicator } from '../../transport/RoutingRpcCommunicator'
18
17
  import { RemoteRecursiveFindSession } from './RemoteRecursiveFindSession'
19
18
  import { v4 } from 'uuid'
20
19
  import { RecursiveFindSession, RecursiveFindSessionEvents } from './RecursiveFindSession'
21
- import { DhtPeer } from '../DhtPeer'
20
+ import { RemoteDhtNode } from '../RemoteDhtNode'
22
21
  import { ITransport } from '../../transport/ITransport'
23
22
  import { LocalDataStore } from '../store/LocalDataStore'
24
- import { IRoutingService } from '../../proto/packages/dht/protos/DhtRpc.server'
23
+ import { IRouterRpc } from '../../proto/packages/dht/protos/DhtRpc.server'
25
24
  import { ListeningRpcCommunicator } from '../../transport/ListeningRpcCommunicator'
26
25
  import { RecursiveFindSessionServiceClient } from '../../proto/packages/dht/protos/DhtRpc.client'
27
26
  import { toProtoRpcClient } from '@streamr/proto-rpc'
@@ -30,10 +29,9 @@ import { SortedContactList } from '../contact/SortedContactList'
30
29
  interface RecursiveFinderConfig {
31
30
  rpcCommunicator: RoutingRpcCommunicator
32
31
  sessionTransport: ITransport
33
- connections: Map<PeerIDKey, DhtPeer>
32
+ connections: Map<PeerIDKey, RemoteDhtNode>
34
33
  router: IRouter
35
34
  ownPeerDescriptor: PeerDescriptor
36
- ownPeerId: PeerID
37
35
  serviceId: string
38
36
  localDataStore: LocalDataStore
39
37
  addContact: (contact: PeerDescriptor, setActive?: boolean) => void
@@ -41,10 +39,10 @@ interface RecursiveFinderConfig {
41
39
  }
42
40
 
43
41
  interface RecursiveFinderFunc {
44
- startRecursiveFind(idToFind: Uint8Array, findMode?: FindMode): Promise<RecursiveFindResult>
42
+ startRecursiveFind(idToFind: Uint8Array, fetchData?: boolean): Promise<RecursiveFindResult>
45
43
  }
46
44
 
47
- export interface IRecursiveFinder extends Pick<IRoutingService, 'findRecursively'>, RecursiveFinderFunc {}
45
+ export interface IRecursiveFinder extends Pick<IRouterRpc, 'findRecursively'>, RecursiveFinderFunc {}
48
46
 
49
47
  export interface RecursiveFindResult { closestNodes: Array<PeerDescriptor>, dataEntries?: Array<DataEntry> }
50
48
 
@@ -54,10 +52,9 @@ export class RecursiveFinder implements IRecursiveFinder {
54
52
 
55
53
  private readonly rpcCommunicator: RoutingRpcCommunicator
56
54
  private readonly sessionTransport: ITransport
57
- private readonly connections: Map<PeerIDKey, DhtPeer>
55
+ private readonly connections: Map<PeerIDKey, RemoteDhtNode>
58
56
  private readonly router: IRouter
59
57
  private readonly ownPeerDescriptor: PeerDescriptor
60
- private readonly ownPeerId: PeerID
61
58
  private readonly serviceId: string
62
59
  private readonly localDataStore: LocalDataStore
63
60
  private readonly addContact: (contact: PeerDescriptor, setActive?: boolean) => void
@@ -71,7 +68,6 @@ export class RecursiveFinder implements IRecursiveFinder {
71
68
  this.connections = config.connections
72
69
  this.router = config.router
73
70
  this.ownPeerDescriptor = config.ownPeerDescriptor
74
- this.ownPeerId = config.ownPeerId
75
71
  this.serviceId = config.serviceId
76
72
  this.localDataStore = config.localDataStore
77
73
  this.addContact = config.addContact
@@ -82,7 +78,7 @@ export class RecursiveFinder implements IRecursiveFinder {
82
78
 
83
79
  public async startRecursiveFind(
84
80
  idToFind: Uint8Array,
85
- findMode: FindMode = FindMode.NODE,
81
+ fetchData: boolean = false,
86
82
  excludedPeer?: PeerDescriptor
87
83
  ): Promise<RecursiveFindResult> {
88
84
  if (this.stopped) {
@@ -91,15 +87,15 @@ export class RecursiveFinder implements IRecursiveFinder {
91
87
  const sessionId = v4()
92
88
  const recursiveFindSession = new RecursiveFindSession({
93
89
  serviceId: sessionId,
94
- rpcTransport: this.sessionTransport,
90
+ transport: this.sessionTransport,
95
91
  kademliaIdToFind: idToFind,
96
- ownPeerID: this.ownPeerId,
92
+ ownPeerId: peerIdFromPeerDescriptor(this.ownPeerDescriptor),
97
93
  waitedRoutingPathCompletions: this.connections.size > 1 ? 2 : 1,
98
- mode: findMode
94
+ fetchData
99
95
  })
100
96
  if (this.connections.size === 0) {
101
97
  const data = this.localDataStore.getEntry(PeerID.fromValue(idToFind))
102
- recursiveFindSession.doReportRecursiveFindResult(
98
+ recursiveFindSession.doSendFindResponse(
103
99
  [this.ownPeerDescriptor],
104
100
  [this.ownPeerDescriptor],
105
101
  data ? Array.from(data.values()) : [],
@@ -107,7 +103,7 @@ export class RecursiveFinder implements IRecursiveFinder {
107
103
  )
108
104
  return recursiveFindSession.getResults()
109
105
  }
110
- const routeMessage = this.wrapRecursiveFindRequest(idToFind, sessionId, findMode)
106
+ const routeMessage = this.wrapFindRequest(idToFind, sessionId, fetchData)
111
107
  this.ongoingSessions.set(sessionId, recursiveFindSession)
112
108
  try {
113
109
  await runAndWaitForEvents3<RecursiveFindSessionEvents>(
@@ -116,30 +112,30 @@ export class RecursiveFinder implements IRecursiveFinder {
116
112
  15000
117
113
  )
118
114
  } catch (err) {
119
- logger.debug(`doFindRecursively failed with error ${this.ownPeerDescriptor.nodeName} ${err}`)
115
+ logger.debug(`doFindRecursively failed with error ${err}`)
120
116
  }
121
- this.findAndReportLocalData(idToFind, findMode, [], this.ownPeerDescriptor, sessionId)
117
+ this.findAndReportLocalData(idToFind, fetchData, [], this.ownPeerDescriptor, sessionId)
122
118
  this.ongoingSessions.delete(sessionId)
123
119
  recursiveFindSession.stop()
124
120
  return recursiveFindSession.getResults()
125
121
  }
126
122
 
127
- private wrapRecursiveFindRequest(idToFind: Uint8Array, sessionId: string, findMode: FindMode): RouteMessageWrapper {
123
+ private wrapFindRequest(idToFind: Uint8Array, sessionId: string, fetchData: boolean): RouteMessageWrapper {
128
124
  const targetDescriptor: PeerDescriptor = {
129
125
  kademliaId: idToFind,
130
126
  type: NodeType.VIRTUAL
131
127
  }
132
- const request: RecursiveFindRequest = {
133
- recursiveFindSessionId: sessionId,
134
- findMode
128
+ const request: FindRequest = {
129
+ sessionId,
130
+ fetchData
135
131
  }
136
132
  const msg: Message = {
137
133
  messageType: MessageType.RECURSIVE_FIND_REQUEST,
138
134
  messageId: v4(),
139
135
  serviceId: this.serviceId,
140
136
  body: {
141
- oneofKind: 'recursiveFindRequest',
142
- recursiveFindRequest: request
137
+ oneofKind: 'findRequest',
138
+ findRequest: request
143
139
  }
144
140
  }
145
141
  const routeMessage: RouteMessageWrapper = {
@@ -155,29 +151,29 @@ export class RecursiveFinder implements IRecursiveFinder {
155
151
 
156
152
  private findAndReportLocalData(
157
153
  idToFind: Uint8Array,
158
- findMode: FindMode,
154
+ fetchData: boolean,
159
155
  routingPath: PeerDescriptor[],
160
156
  sourcePeer: PeerDescriptor,
161
157
  sessionId: string
162
158
  ): boolean {
163
- if (findMode === FindMode.DATA) {
159
+ if (fetchData) {
164
160
  const data = this.localDataStore.getEntry(PeerID.fromValue(idToFind))
165
161
  if (data.size > 0) {
166
- this.reportRecursiveFindResult(routingPath, sourcePeer, sessionId, [], data, true)
162
+ this.sendFindResponse(routingPath, sourcePeer, sessionId, [], data, true)
167
163
  return true
168
164
  }
169
165
  }
170
166
  return false
171
167
  }
172
168
 
173
- private findLocalData(idToFind: Uint8Array, findMode: FindMode): Map<PeerIDKey, DataEntry> | undefined {
174
- if (findMode === FindMode.DATA) {
169
+ private findLocalData(idToFind: Uint8Array, fetchData: boolean): Map<PeerIDKey, DataEntry> | undefined {
170
+ if (fetchData) {
175
171
  return this.localDataStore.getEntry(PeerID.fromValue(idToFind))
176
172
  }
177
173
  return undefined
178
174
  }
179
175
 
180
- private reportRecursiveFindResult(
176
+ private sendFindResponse(
181
177
  routingPath: PeerDescriptor[],
182
178
  targetPeerDescriptor: PeerDescriptor,
183
179
  serviceId: string,
@@ -186,10 +182,10 @@ export class RecursiveFinder implements IRecursiveFinder {
186
182
  noCloserNodesFound: boolean = false
187
183
  ): void {
188
184
  const dataEntries = data ? Array.from(data.values(), DataEntry.create.bind(DataEntry)) : []
189
- const isOwnPeerId = this.ownPeerId.equals(PeerID.fromValue(targetPeerDescriptor.kademliaId))
190
- if (isOwnPeerId && this.ongoingSessions.has(serviceId)) {
185
+ const isOwnNode = areEqualPeerDescriptors(this.ownPeerDescriptor, targetPeerDescriptor)
186
+ if (isOwnNode && this.ongoingSessions.has(serviceId)) {
191
187
  this.ongoingSessions.get(serviceId)!
192
- .doReportRecursiveFindResult(routingPath, closestNodes, dataEntries, noCloserNodesFound)
188
+ .doSendFindResponse(routingPath, closestNodes, dataEntries, noCloserNodesFound)
193
189
  } else {
194
190
  const remoteCommunicator = new ListeningRpcCommunicator(serviceId, this.sessionTransport, { rpcRequestTimeout: 15000 })
195
191
  const remoteSession = new RemoteRecursiveFindSession(
@@ -198,7 +194,7 @@ export class RecursiveFinder implements IRecursiveFinder {
198
194
  serviceId,
199
195
  toProtoRpcClient(new RecursiveFindSessionServiceClient(remoteCommunicator.getRpcClientTransport()))
200
196
  )
201
- remoteSession.reportRecursiveFindResult(routingPath, closestNodes, dataEntries, noCloserNodesFound)
197
+ remoteSession.sendFindResponse(routingPath, closestNodes, dataEntries, noCloserNodesFound)
202
198
  }
203
199
  }
204
200
 
@@ -206,20 +202,20 @@ export class RecursiveFinder implements IRecursiveFinder {
206
202
  if (this.stopped) {
207
203
  return createRouteMessageAck(routedMessage, 'DhtNode Stopped')
208
204
  }
209
- const idToFind = PeerID.fromValue(routedMessage.destinationPeer!.kademliaId)
205
+ const idToFind = peerIdFromPeerDescriptor(routedMessage.destinationPeer!)
210
206
  const msg = routedMessage.message
211
- const recursiveFindRequest = msg?.body.oneofKind === 'recursiveFindRequest' ? msg.body.recursiveFindRequest : undefined
207
+ const findRequest = msg?.body.oneofKind === 'findRequest' ? msg.body.findRequest : undefined
212
208
  const closestPeersToDestination = this.getClosestConnections(routedMessage.destinationPeer!.kademliaId, 5)
213
- const data = this.findLocalData(idToFind.value, recursiveFindRequest!.findMode)
214
- if (this.ownPeerId.equals(idToFind)) {
215
- this.reportRecursiveFindResult(routedMessage.routingPath, routedMessage.sourcePeer!, recursiveFindRequest!.recursiveFindSessionId,
209
+ const data = this.findLocalData(idToFind.value, findRequest!.fetchData)
210
+ if (areEqualPeerDescriptors(this.ownPeerDescriptor, routedMessage.destinationPeer!)) {
211
+ this.sendFindResponse(routedMessage.routingPath, routedMessage.sourcePeer!, findRequest!.sessionId,
216
212
  closestPeersToDestination, data, true)
217
213
  return createRouteMessageAck(routedMessage)
218
214
  }
219
215
  const ack = this.router.doRouteMessage(routedMessage, RoutingMode.RECURSIVE_FIND, excludedPeer)
220
216
  if (ack.error === RoutingErrors.NO_CANDIDATES_FOUND) {
221
- logger.trace(`findRecursively Node ${this.ownPeerDescriptor.nodeName} found no candidates`)
222
- this.reportRecursiveFindResult(routedMessage.routingPath, routedMessage.sourcePeer!, recursiveFindRequest!.recursiveFindSessionId,
217
+ logger.trace(`findRecursively Node found no candidates`)
218
+ this.sendFindResponse(routedMessage.routingPath, routedMessage.sourcePeer!, findRequest!.sessionId,
223
219
  closestPeersToDestination, data, true)
224
220
  } else if (ack.error) {
225
221
  return ack
@@ -229,7 +225,7 @@ export class RecursiveFinder implements IRecursiveFinder {
229
225
  && routedMessage.previousPeer
230
226
  && !this.isPeerCloserToIdThanSelf(closestPeersToDestination[0], idToFind)
231
227
  )
232
- this.reportRecursiveFindResult(routedMessage.routingPath, routedMessage.sourcePeer!, recursiveFindRequest!.recursiveFindSessionId,
228
+ this.sendFindResponse(routedMessage.routingPath, routedMessage.sourcePeer!, findRequest!.sessionId,
233
229
  closestPeersToDestination, data, noCloserContactsFound)
234
230
  }
235
231
  return ack
@@ -237,7 +233,7 @@ export class RecursiveFinder implements IRecursiveFinder {
237
233
 
238
234
  private getClosestConnections(kademliaId: Uint8Array, limit: number): PeerDescriptor[] {
239
235
  const connectedPeers = Array.from(this.connections.values())
240
- const closestPeers = new SortedContactList<DhtPeer>(
236
+ const closestPeers = new SortedContactList<RemoteDhtNode>(
241
237
  PeerID.fromValue(kademliaId),
242
238
  limit,
243
239
  undefined,
@@ -248,17 +244,17 @@ export class RecursiveFinder implements IRecursiveFinder {
248
244
  return closestPeers.getClosestContacts(limit).map((peer) => peer.getPeerDescriptor())
249
245
  }
250
246
 
251
- // IRoutingService method
247
+ // IRouterRpc method
252
248
  async findRecursively(routedMessage: RouteMessageWrapper): Promise<RouteMessageAck> {
253
249
  if (this.stopped) {
254
250
  return createRouteMessageAck(routedMessage, 'findRecursively() service is not running')
255
- } else if (this.router.checkDuplicate(routedMessage.requestId)) {
251
+ } else if (this.router.isMostLikelyDuplicate(routedMessage.requestId)) {
256
252
  return createRouteMessageAck(routedMessage, 'message given to findRecursively() service is likely a duplicate')
257
253
  }
258
254
  const senderKey = keyFromPeerDescriptor(routedMessage.previousPeer || routedMessage.sourcePeer!)
259
- logger.trace(`Node ${this.ownPeerId.toKey()} received findRecursively call from ${senderKey}`)
255
+ logger.trace(`Received findRecursively call from ${senderKey}`)
260
256
  this.addContact(routedMessage.sourcePeer!, true)
261
- this.router.addToDuplicateDetector(routedMessage.requestId, keyFromPeerDescriptor(routedMessage.sourcePeer!))
257
+ this.router.addToDuplicateDetector(routedMessage.requestId)
262
258
  return this.doFindRecursevily(routedMessage)
263
259
  }
264
260
 
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  DataEntry,
3
3
  PeerDescriptor,
4
- RecursiveFindReport
4
+ FindResponse
5
5
  } from '../../proto/packages/dht/protos/DhtRpc'
6
6
  import { IRecursiveFindSessionServiceClient } from '../../proto/packages/dht/protos/DhtRpc.client'
7
7
  import { Logger } from '@streamr/utils'
@@ -11,16 +11,16 @@ const logger = new Logger(module)
11
11
 
12
12
  export class RemoteRecursiveFindSession extends Remote<IRecursiveFindSessionServiceClient> {
13
13
 
14
- reportRecursiveFindResult(routingPath: PeerDescriptor[], closestNodes: PeerDescriptor[],
14
+ sendFindResponse(routingPath: PeerDescriptor[], closestNodes: PeerDescriptor[],
15
15
  dataEntries: DataEntry[], noCloserNodesFound: boolean): void {
16
- const report: RecursiveFindReport = {
16
+ const report: FindResponse = {
17
17
  routingPath,
18
- nodes: closestNodes,
18
+ closestConnectedPeers: closestNodes,
19
19
  dataEntries,
20
20
  noCloserNodesFound
21
21
  }
22
- this.getClient().reportRecursiveFindResult(report, this.formDhtRpcOptions()).catch((_e) => {
23
- logger.trace('Failed to send RecursiveFindResult')
22
+ this.getClient().sendFindResponse(report, this.formDhtRpcOptions()).catch((_e) => {
23
+ logger.trace('Failed to send FindResult')
24
24
  })
25
25
  }
26
26
  }
@@ -1,5 +1,7 @@
1
- import { DhtNode } from '../exports'
2
- import { ExternalStoreDataRequest, ExternalStoreDataResponse, FindDataRequest, FindDataResponse, FindMode } from '../proto/packages/dht/protos/DhtRpc'
1
+ import { DhtNode } from '../dht/DhtNode'
2
+ import { ExternalStoreDataRequest, ExternalStoreDataResponse, FindDataRequest, FindDataResponse } from '../proto/packages/dht/protos/DhtRpc'
3
+ import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
4
+ import { DhtCallContext } from '../rpc-protocol/DhtCallContext'
3
5
 
4
6
  export const registerExternalApiRpcMethods = (thisNode: DhtNode): void => {
5
7
  const rpcCommunicator = thisNode.getRpcCommunicator()
@@ -7,7 +9,7 @@ export const registerExternalApiRpcMethods = (thisNode: DhtNode): void => {
7
9
  FindDataRequest,
8
10
  FindDataResponse,
9
11
  'findData',
10
- (req: FindDataRequest) => findData(thisNode, req),
12
+ (req: FindDataRequest, context: ServerCallContext) => findData(thisNode, req, context),
11
13
  { timeout: 10000 }
12
14
  )
13
15
  rpcCommunicator.registerRpcMethod(
@@ -20,8 +22,9 @@ export const registerExternalApiRpcMethods = (thisNode: DhtNode): void => {
20
22
  }
21
23
 
22
24
  // IDHTRpcService method for external findRecursive calls
23
- const findData = async (thisNode: DhtNode, findDataRequest: FindDataRequest): Promise<FindDataResponse> => {
24
- const result = await thisNode.startRecursiveFind(findDataRequest.kademliaId, FindMode.DATA, findDataRequest.requestor)
25
+ const findData = async (thisNode: DhtNode, findDataRequest: FindDataRequest, context: ServerCallContext): Promise<FindDataResponse> => {
26
+ const senderPeerDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
27
+ const result = await thisNode.startRecursiveFind(findDataRequest.kademliaId, true, senderPeerDescriptor)
25
28
  if (result.dataEntries) {
26
29
  return FindDataResponse.create({ dataEntries: result.dataEntries })
27
30
  } else {
@@ -1,6 +1,4 @@
1
- import { Message } from '../../proto/packages/dht/protos/DhtRpc'
2
-
3
- type QueueEntry = [timeStamp: number, value: string, senderId: string, message?: Message]
1
+ type QueueEntry = [timestamp: number, value: string]
4
2
 
5
3
  export class DuplicateDetector {
6
4
 
@@ -17,13 +15,9 @@ export class DuplicateDetector {
17
15
  this.maxAge = maxAgeInSeconds * 1000
18
16
  }
19
17
 
20
- public add(value: string, senderId: string, message?: Message): void {
18
+ public add(value: string): void {
21
19
  this.values.add(value)
22
- if (message) {
23
- this.queue.push([Date.now(), value, senderId, message])
24
- } else {
25
- this.queue.push([Date.now(), value, senderId])
26
- }
20
+ this.queue.push([Date.now(), value])
27
21
  this.cleanUp()
28
22
  }
29
23
 
@@ -49,5 +43,4 @@ export class DuplicateDetector {
49
43
  this.values.clear()
50
44
  this.queue = []
51
45
  }
52
-
53
46
  }
@@ -1,21 +1,18 @@
1
1
  import { Message, PeerDescriptor, RouteMessageAck, RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
2
- import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
3
- import { keyFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
2
+ import { areEqualPeerDescriptors, keyFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
4
3
  import { RoutingMode, RoutingSession, RoutingSessionEvents } from './RoutingSession'
5
4
  import { Logger, executeSafePromise, raceEvents3, withTimeout } from '@streamr/utils'
6
5
  import { RoutingRpcCommunicator } from '../../transport/RoutingRpcCommunicator'
7
- import { PeerID, PeerIDKey } from '../../helpers/PeerID'
6
+ import { PeerIDKey } from '../../helpers/PeerID'
8
7
  import { DuplicateDetector } from './DuplicateDetector'
9
8
  import { ConnectionManager } from '../../connection/ConnectionManager'
10
- import { DhtPeer } from '../DhtPeer'
9
+ import { RemoteDhtNode } from '../RemoteDhtNode'
11
10
  import { v4 } from 'uuid'
12
- import { IRoutingService } from '../../proto/packages/dht/protos/DhtRpc.server'
11
+ import { IRouterRpc } from '../../proto/packages/dht/protos/DhtRpc.server'
13
12
 
14
13
  export const createRouteMessageAck = (routedMessage: RouteMessageWrapper, error?: string): RouteMessageAck => {
15
14
  const ack: RouteMessageAck = {
16
15
  requestId: routedMessage.requestId,
17
- destinationPeer: routedMessage.sourcePeer,
18
- sourcePeer: routedMessage.destinationPeer,
19
16
  error: error ? error : ''
20
17
  }
21
18
  return ack
@@ -29,8 +26,7 @@ export enum RoutingErrors {
29
26
  export interface RouterConfig {
30
27
  rpcCommunicator: RoutingRpcCommunicator
31
28
  ownPeerDescriptor: PeerDescriptor
32
- ownPeerId: PeerID
33
- connections: Map<PeerIDKey, DhtPeer>
29
+ connections: Map<PeerIDKey, RemoteDhtNode>
34
30
  addContact: (contact: PeerDescriptor, setActive?: boolean) => void
35
31
  serviceId: string
36
32
  connectionManager?: ConnectionManager
@@ -44,42 +40,40 @@ interface ForwardingTableEntry {
44
40
  interface IRouterFunc {
45
41
  doRouteMessage(routedMessage: RouteMessageWrapper, mode: RoutingMode, excludedPeer?: PeerDescriptor): RouteMessageAck
46
42
  send(msg: Message, reachableThrough: PeerDescriptor[]): Promise<void>
47
- checkDuplicate(messageId: string): boolean
48
- addToDuplicateDetector(messageId: string, senderId: string, message?: Message): void
43
+ isMostLikelyDuplicate(requestId: string): boolean
44
+ addToDuplicateDetector(requestId: string): void
49
45
  addRoutingSession(session: RoutingSession): void
50
46
  removeRoutingSession(sessionId: string): void
51
47
  stop(): void
52
48
  }
53
49
 
54
- export interface IRouter extends Omit<IRoutingService, 'findRecursively'>, IRouterFunc {}
50
+ export interface IRouter extends Omit<IRouterRpc, 'findRecursively'>, IRouterFunc {}
55
51
 
56
52
  const logger = new Logger(module)
57
53
 
58
54
  export class Router implements IRouter {
59
55
  private readonly rpcCommunicator: RoutingRpcCommunicator
60
56
  private readonly ownPeerDescriptor: PeerDescriptor
61
- private readonly ownPeerId: PeerID
62
- private readonly connections: Map<PeerIDKey, DhtPeer>
57
+ private readonly connections: Map<PeerIDKey, RemoteDhtNode>
63
58
  private readonly addContact: (contact: PeerDescriptor, setActive?: boolean) => void
64
59
  private readonly serviceId: string
65
60
  private readonly connectionManager?: ConnectionManager
66
61
  private readonly forwardingTable: Map<string, ForwardingTableEntry> = new Map()
67
62
  private ongoingRoutingSessions: Map<string, RoutingSession> = new Map()
68
- private readonly routerDuplicateDetector: DuplicateDetector = new DuplicateDetector(100000, 100)
63
+ private readonly duplicateRequestDetector: DuplicateDetector = new DuplicateDetector(100000, 100)
69
64
  private stopped = false
70
65
 
71
66
  constructor(config: RouterConfig) {
72
67
  this.rpcCommunicator = config.rpcCommunicator
73
68
  this.ownPeerDescriptor = config.ownPeerDescriptor
74
- this.ownPeerId = config.ownPeerId
75
69
  this.connections = config.connections
76
70
  this.addContact = config.addContact
77
71
  this.serviceId = config.serviceId
78
72
  this.connectionManager = config.connectionManager
79
73
  this.rpcCommunicator.registerRpcMethod(RouteMessageWrapper, RouteMessageAck, 'forwardMessage',
80
- (forwardMessage: RouteMessageWrapper, context) => this.forwardMessage(forwardMessage, context))
74
+ (forwardMessage: RouteMessageWrapper) => this.forwardMessage(forwardMessage))
81
75
  this.rpcCommunicator.registerRpcMethod(RouteMessageWrapper, RouteMessageAck, 'routeMessage',
82
- (routedMessage: RouteMessageWrapper, context) => this.routeMessage(routedMessage, context))
76
+ (routedMessage: RouteMessageWrapper) => this.routeMessage(routedMessage))
83
77
  }
84
78
 
85
79
  public async send(msg: Message, reachableThrough: PeerDescriptor[]): Promise<void> {
@@ -114,8 +108,8 @@ export class Router implements IRouter {
114
108
  if (this.stopped) {
115
109
  return createRouteMessageAck(routedMessage, RoutingErrors.STOPPED)
116
110
  }
117
- logger.trace(`Peer ${this.ownPeerId.value} routing message ${routedMessage.requestId}
118
- from ${routedMessage.sourcePeer?.kademliaId} to ${routedMessage.destinationPeer?.kademliaId}`)
111
+ logger.trace(`Routing message ${routedMessage.requestId} from ${keyFromPeerDescriptor(routedMessage.sourcePeer!)} `
112
+ + `to ${keyFromPeerDescriptor(routedMessage.destinationPeer!)}`)
119
113
  routedMessage.routingPath.push(this.ownPeerDescriptor)
120
114
  const session = this.createRoutingSession(routedMessage, mode, excludedPeer)
121
115
  this.addRoutingSession(session)
@@ -141,7 +135,7 @@ export class Router implements IRouter {
141
135
  })
142
136
  session.start()
143
137
  } catch (e) {
144
- if (peerIdFromPeerDescriptor(routedMessage.sourcePeer!).equals(this.ownPeerId)) {
138
+ if (areEqualPeerDescriptors(routedMessage.sourcePeer!, this.ownPeerDescriptor)) {
145
139
  logger.warn(
146
140
  `Failed to send (routeMessage: ${this.serviceId}) to ${keyFromPeerDescriptor(routedMessage.destinationPeer!)}: ${e}`
147
141
  )
@@ -162,19 +156,19 @@ export class Router implements IRouter {
162
156
  this.ownPeerDescriptor,
163
157
  routedMessage,
164
158
  this.connections,
165
- this.ownPeerId.equals(peerIdFromPeerDescriptor(routedMessage.sourcePeer!)) ? 2 : 1,
159
+ areEqualPeerDescriptors(this.ownPeerDescriptor, routedMessage.sourcePeer!) ? 2 : 1,
166
160
  mode,
167
161
  undefined,
168
162
  excludedPeers
169
163
  )
170
164
  }
171
165
 
172
- public checkDuplicate(messageId: string): boolean {
173
- return this.routerDuplicateDetector.isMostLikelyDuplicate(messageId)
166
+ public isMostLikelyDuplicate(requestId: string): boolean {
167
+ return this.duplicateRequestDetector.isMostLikelyDuplicate(requestId)
174
168
  }
175
169
 
176
- public addToDuplicateDetector(messageId: string, senderId: string, message?: Message): void {
177
- this.routerDuplicateDetector.add(messageId, senderId, message)
170
+ public addToDuplicateDetector(requestId: string): void {
171
+ this.duplicateRequestDetector.add(requestId)
178
172
  }
179
173
 
180
174
  public addRoutingSession(session: RoutingSession): void {
@@ -195,23 +189,23 @@ export class Router implements IRouter {
195
189
  clearTimeout(entry.timeout)
196
190
  })
197
191
  this.forwardingTable.clear()
198
- this.routerDuplicateDetector.clear()
192
+ this.duplicateRequestDetector.clear()
199
193
  }
200
194
 
201
- // IRoutingService method
202
- async routeMessage(routedMessage: RouteMessageWrapper, _context: ServerCallContext): Promise<RouteMessageAck> {
195
+ // IRouterRpc method
196
+ async routeMessage(routedMessage: RouteMessageWrapper): Promise<RouteMessageAck> {
203
197
  if (this.stopped) {
204
198
  return createRouteMessageAck(routedMessage, 'routeMessage() service is not running')
205
- } else if (this.routerDuplicateDetector.isMostLikelyDuplicate(routedMessage.requestId)) {
206
- logger.trace(`Peer ${this.ownPeerId?.value} routing message ${routedMessage.requestId}
207
- from ${routedMessage.sourcePeer!.kademliaId} to ${routedMessage.destinationPeer!.kademliaId} is likely a duplicate`)
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`)
208
202
  return createRouteMessageAck(routedMessage, 'message given to routeMessage() service is likely a duplicate')
209
203
  }
210
204
  logger.trace(`Processing received routeMessage ${routedMessage.requestId}`)
211
205
  this.addContact(routedMessage.sourcePeer!, true)
212
- this.addToDuplicateDetector(routedMessage.requestId, keyFromPeerDescriptor(routedMessage.sourcePeer!))
213
- if (this.ownPeerId.equals(peerIdFromPeerDescriptor(routedMessage.destinationPeer!))) {
214
- logger.trace(`${this.ownPeerDescriptor.nodeName} routing message targeted to self ${routedMessage.requestId}`)
206
+ this.addToDuplicateDetector(routedMessage.requestId)
207
+ if (areEqualPeerDescriptors(this.ownPeerDescriptor, routedMessage.destinationPeer!)) {
208
+ logger.trace(`routing message targeted to self ${routedMessage.requestId}`)
215
209
  this.setForwardingEntries(routedMessage)
216
210
  this.connectionManager?.handleMessage(routedMessage.message!)
217
211
  return createRouteMessageAck(routedMessage)
@@ -222,7 +216,7 @@ export class Router implements IRouter {
222
216
 
223
217
  private setForwardingEntries(routedMessage: RouteMessageWrapper): void {
224
218
  const reachableThroughWithoutSelf = routedMessage.reachableThrough.filter((peer) => {
225
- return !peerIdFromPeerDescriptor(peer).equals(this.ownPeerId)
219
+ return !areEqualPeerDescriptors(peer, this.ownPeerDescriptor)
226
220
  })
227
221
 
228
222
  if (reachableThroughWithoutSelf.length > 0) {
@@ -242,19 +236,19 @@ export class Router implements IRouter {
242
236
  }
243
237
  }
244
238
 
245
- // IRoutingService method
246
- async forwardMessage(forwardMessage: RouteMessageWrapper, _context: ServerCallContext): Promise<RouteMessageAck> {
239
+ // IRouterRpc method
240
+ async forwardMessage(forwardMessage: RouteMessageWrapper): Promise<RouteMessageAck> {
247
241
  if (this.stopped) {
248
242
  return createRouteMessageAck(forwardMessage, 'forwardMessage() service is not running')
249
- } else if (this.routerDuplicateDetector.isMostLikelyDuplicate(forwardMessage.requestId)) {
250
- logger.trace(`Peer ${this.ownPeerId.value} forwarding message ${forwardMessage.requestId}
251
- from ${forwardMessage.sourcePeer?.kademliaId} to ${forwardMessage.destinationPeer?.kademliaId} is likely a duplicate`)
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`)
252
246
  return createRouteMessageAck(forwardMessage, 'message given to forwardMessage() service is likely a duplicate')
253
247
  }
254
248
  logger.trace(`Processing received forward routeMessage ${forwardMessage.requestId}`)
255
249
  this.addContact(forwardMessage.sourcePeer!, true)
256
- this.addToDuplicateDetector(forwardMessage.requestId, keyFromPeerDescriptor(forwardMessage.sourcePeer!))
257
- if (this.ownPeerId.equals(peerIdFromPeerDescriptor(forwardMessage.destinationPeer!))) {
250
+ this.addToDuplicateDetector(forwardMessage.requestId)
251
+ if (areEqualPeerDescriptors(this.ownPeerDescriptor, forwardMessage.destinationPeer!)) {
258
252
  return this.forwardToDestination(forwardMessage)
259
253
  } else {
260
254
  return this.doRouteMessage(forwardMessage, RoutingMode.FORWARD)
@@ -262,9 +256,9 @@ export class Router implements IRouter {
262
256
  }
263
257
 
264
258
  private forwardToDestination(routedMessage: RouteMessageWrapper): RouteMessageAck {
265
- logger.trace(`Peer ${this.ownPeerId.value} forwarding found message targeted to self ${routedMessage.requestId}`)
259
+ logger.trace(`Forwarding found message targeted to self ${routedMessage.requestId}`)
266
260
  const forwardedMessage = routedMessage.message!
267
- if (this.ownPeerId.equals(peerIdFromPeerDescriptor(forwardedMessage.targetDescriptor!))) {
261
+ if (areEqualPeerDescriptors(this.ownPeerDescriptor, forwardedMessage.targetDescriptor!)) {
268
262
  this.connectionManager?.handleMessage(forwardedMessage)
269
263
  return createRouteMessageAck(routedMessage)
270
264
  }
@@ -1,17 +1,17 @@
1
1
  import { RouteMessageWrapper } from '../../proto/packages/dht/protos/DhtRpc'
2
2
  import { v4 } from 'uuid'
3
3
  import {
4
- isSamePeerDescriptor,
4
+ areEqualPeerDescriptors,
5
5
  keyFromPeerDescriptor,
6
6
  peerIdFromPeerDescriptor
7
7
  } from '../../helpers/peerIdFromPeerDescriptor'
8
- import { IRoutingServiceClient } from '../../proto/packages/dht/protos/DhtRpc.client'
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
11
 
12
12
  const logger = new Logger(module)
13
13
 
14
- export class RemoteRouter extends Remote<IRoutingServiceClient> {
14
+ export class RouterRpcRemote extends Remote<IRouterRpcClient> {
15
15
 
16
16
  async routeMessage(params: RouteMessageWrapper): Promise<boolean> {
17
17
  const message: RouteMessageWrapper = {
@@ -30,7 +30,7 @@ export class RemoteRouter extends Remote<IRoutingServiceClient> {
30
30
  const ack = await this.getClient().routeMessage(message, options)
31
31
  // Success signal if sent to destination and error includes duplicate
32
32
  if (
33
- isSamePeerDescriptor(params.destinationPeer!, this.getPeerDescriptor())
33
+ areEqualPeerDescriptors(params.destinationPeer!, this.getPeerDescriptor())
34
34
  && ack.error.includes('duplicate')
35
35
  ) {
36
36
  return true