@streamr/dht 0.0.1-tatum.5 → 0.0.1-tatum.6
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/ConnectionManager.d.ts +1 -0
- package/dist/src/connection/ConnectionManager.js +14 -2
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/dht/DhtNode.d.ts +1 -3
- package/dist/src/dht/DhtNode.js +12 -11
- package/dist/src/dht/DhtNode.js.map +1 -1
- package/dist/src/dht/DhtPeer.d.ts +2 -0
- package/dist/src/dht/DhtPeer.js +4 -0
- package/dist/src/dht/DhtPeer.js.map +1 -1
- package/dist/src/dht/contact/Contact.d.ts +1 -15
- package/dist/src/dht/contact/Contact.js +1 -9
- package/dist/src/dht/contact/Contact.js.map +1 -1
- package/dist/src/dht/contact/ContactList.d.ts +13 -2
- package/dist/src/dht/contact/ContactList.js +9 -1
- package/dist/src/dht/contact/ContactList.js.map +1 -1
- package/dist/src/dht/contact/RandomContactList.d.ts +3 -2
- package/dist/src/dht/contact/RandomContactList.js +4 -5
- package/dist/src/dht/contact/RandomContactList.js.map +1 -1
- package/dist/src/dht/contact/Remote.d.ts +1 -5
- package/dist/src/dht/contact/Remote.js +0 -5
- package/dist/src/dht/contact/Remote.js.map +1 -1
- package/dist/src/dht/contact/SortedContactList.d.ts +3 -2
- package/dist/src/dht/contact/SortedContactList.js +9 -10
- package/dist/src/dht/contact/SortedContactList.js.map +1 -1
- package/dist/src/dht/routing/RemoteRouter.js +3 -3
- package/dist/src/dht/routing/RemoteRouter.js.map +1 -1
- package/dist/src/dht/routing/RoutingSession.d.ts +0 -1
- package/dist/src/dht/routing/RoutingSession.js +15 -10
- package/dist/src/dht/routing/RoutingSession.js.map +1 -1
- package/dist/src/exports.d.ts +0 -1
- package/dist/src/exports.js +1 -3
- package/dist/src/exports.js.map +1 -1
- package/package.json +4 -4
- package/src/connection/ConnectionManager.ts +16 -3
- package/src/dht/DhtNode.ts +17 -16
- package/src/dht/DhtPeer.ts +5 -0
- package/src/dht/contact/Contact.ts +1 -18
- package/src/dht/contact/ContactList.ts +16 -2
- package/src/dht/contact/RandomContactList.ts +6 -7
- package/src/dht/contact/Remote.ts +1 -10
- package/src/dht/contact/SortedContactList.ts +12 -13
- package/src/dht/find/RecursiveFinder.ts +1 -1
- package/src/dht/routing/RemoteRouter.ts +3 -3
- package/src/dht/routing/RoutingSession.ts +29 -20
- package/src/exports.ts +0 -1
- package/test/benchmark/KademliaCorrectness.test.ts +2 -1
- package/test/end-to-end/Layer0-Layer1.test.ts +10 -10
- package/test/integration/DhtWithMockConnectionLatencies.test.ts +1 -1
- package/test/integration/DhtWithMockConnections.test.ts +1 -1
- package/test/integration/DhtWithRealConnectionLatencies.test.ts +1 -1
- package/test/unit/RandomContactList.test.ts +26 -75
- package/test/unit/SortedContactList.test.ts +62 -112
|
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.SortedContactList = void 0;
|
|
7
7
|
const k_bucket_1 = __importDefault(require("k-bucket"));
|
|
8
|
-
const Contact_1 = require("./Contact");
|
|
9
8
|
const ContactList_1 = require("./ContactList");
|
|
10
9
|
class SortedContactList extends ContactList_1.ContactList {
|
|
11
10
|
constructor(ownId, maxSize, defaultContactQueryLimit, allowOwnPeerId = false, peerIdDistanceLimit, excludedPeerIDs) {
|
|
@@ -32,20 +31,20 @@ class SortedContactList extends ContactList_1.ContactList {
|
|
|
32
31
|
}
|
|
33
32
|
if (!this.contactsById.has(contact.getPeerId().toKey())) {
|
|
34
33
|
if (this.contactIds.length < this.maxSize) {
|
|
35
|
-
this.contactsById.set(contact.getPeerId().toKey(), new
|
|
34
|
+
this.contactsById.set(contact.getPeerId().toKey(), new ContactList_1.ContactState(contact));
|
|
36
35
|
this.contactIds.push(contact.getPeerId());
|
|
37
36
|
this.contactIds.sort(this.compareIds);
|
|
38
37
|
}
|
|
39
38
|
else if (this.compareIds(this.contactIds[this.maxSize - 1], contact.getPeerId()) > 0) {
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
this.contactsById.delete(
|
|
43
|
-
this.contactsById.set(contact.getPeerId().toKey(), new
|
|
39
|
+
const removedId = this.contactIds.pop();
|
|
40
|
+
const removedContact = this.contactsById.get(removedId.toKey()).contact;
|
|
41
|
+
this.contactsById.delete(removedId.toKey());
|
|
42
|
+
this.contactsById.set(contact.getPeerId().toKey(), new ContactList_1.ContactState(contact));
|
|
44
43
|
this.contactIds.push(contact.getPeerId());
|
|
45
44
|
this.contactIds.sort(this.compareIds);
|
|
46
|
-
this.emit('contactRemoved',
|
|
45
|
+
this.emit('contactRemoved', removedContact, this.getClosestContacts());
|
|
47
46
|
}
|
|
48
|
-
this.emit('newContact', contact
|
|
47
|
+
this.emit('newContact', contact, this.getClosestContacts());
|
|
49
48
|
}
|
|
50
49
|
}
|
|
51
50
|
addContacts(contacts) {
|
|
@@ -109,11 +108,11 @@ class SortedContactList extends ContactList_1.ContactList {
|
|
|
109
108
|
}
|
|
110
109
|
removeContact(id) {
|
|
111
110
|
if (this.contactsById.has(id.toKey())) {
|
|
112
|
-
const
|
|
111
|
+
const removed = this.contactsById.get(id.toKey()).contact;
|
|
113
112
|
const index = this.contactIds.findIndex((element) => element.equals(id));
|
|
114
113
|
this.contactIds.splice(index, 1);
|
|
115
114
|
this.contactsById.delete(id.toKey());
|
|
116
|
-
this.emit('contactRemoved',
|
|
115
|
+
this.emit('contactRemoved', removed, this.getClosestContacts());
|
|
117
116
|
return true;
|
|
118
117
|
}
|
|
119
118
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SortedContactList.js","sourceRoot":"","sources":["../../../../src/dht/contact/SortedContactList.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA8B;AAE9B
|
|
1
|
+
{"version":3,"file":"SortedContactList.js","sourceRoot":"","sources":["../../../../src/dht/contact/SortedContactList.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ class RemoteRouter extends Remote_1.Remote {
|
|
|
34
34
|
catch (err) {
|
|
35
35
|
const fromNode = params.previousPeer ?
|
|
36
36
|
(0, peerIdFromPeerDescriptor_1.peerIdFromPeerDescriptor)(params.previousPeer) : (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(params.sourcePeer);
|
|
37
|
-
logger.trace(`Failed to send routeMessage from ${fromNode} to ${
|
|
37
|
+
logger.trace(`Failed to send routeMessage from ${fromNode} to ${(0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(this.getPeerDescriptor())} with: ${err}`);
|
|
38
38
|
return false;
|
|
39
39
|
}
|
|
40
40
|
return true;
|
|
@@ -61,7 +61,7 @@ class RemoteRouter extends Remote_1.Remote {
|
|
|
61
61
|
catch (err) {
|
|
62
62
|
const fromNode = params.previousPeer ?
|
|
63
63
|
(0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(params.previousPeer) : (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(params.sourcePeer);
|
|
64
|
-
logger.trace(`Failed to send forwardMessage from ${fromNode} to ${
|
|
64
|
+
logger.trace(`Failed to send forwardMessage from ${fromNode} to ${(0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(this.getPeerDescriptor())} with: ${err}`);
|
|
65
65
|
return false;
|
|
66
66
|
}
|
|
67
67
|
return true;
|
|
@@ -88,7 +88,7 @@ class RemoteRouter extends Remote_1.Remote {
|
|
|
88
88
|
}
|
|
89
89
|
catch (err) {
|
|
90
90
|
const fromNode = params.previousPeer ? (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(params.previousPeer) : (0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(params.sourcePeer);
|
|
91
|
-
logger.debug(`Failed to send recursiveFind message from ${fromNode} to ${
|
|
91
|
+
logger.debug(`Failed to send recursiveFind message from ${fromNode} to ${(0, peerIdFromPeerDescriptor_1.keyFromPeerDescriptor)(this.getPeerDescriptor())} with: ${err}`);
|
|
92
92
|
return false;
|
|
93
93
|
}
|
|
94
94
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteRouter.js","sourceRoot":"","sources":["../../../../src/dht/routing/RemoteRouter.ts"],"names":[],"mappings":";;;AACA,+BAAyB;AACzB,qFAI+C;AAE/C,8CAA0C;AAC1C,0CAAuC;AAEvC,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAEjC,MAAa,YAAa,SAAQ,eAA6B;IAE3D,KAAK,CAAC,YAAY,CAAC,MAA2B;QAC1C,MAAM,OAAO,GAAwB;YACjC,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAA,SAAE,GAAE;YACnC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,EAAE;YAC/C,WAAW,EAAE,MAAM,CAAC,WAAW;SAClC,CAAA;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACnC,OAAO,EAAE,KAAK;SACjB,CAAC,CAAA;QACF,IAAI;YACA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YACjE,qEAAqE;YACrE,IACI,IAAA,+CAAoB,EAAC,MAAM,CAAC,eAAgB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;mBACpE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EACpC;gBACE,OAAO,IAAI,CAAA;aACd;iBAAM,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7B,OAAO,KAAK,CAAA;aACf;SACJ;QAAC,OAAO,GAAG,EAAE;YACV,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;gBAClC,IAAA,mDAAwB,EAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAA,gDAAqB,EAAC,MAAM,CAAC,UAAW,CAAC,CAAA;YAC7F,MAAM,CAAC,KAAK,CAAC,oCAAoC,QAAQ,OAAO,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"RemoteRouter.js","sourceRoot":"","sources":["../../../../src/dht/routing/RemoteRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,6 @@ export declare class RoutingSession extends EventEmitter<RoutingSessionEvents> {
|
|
|
35
35
|
private onRequestSucceeded;
|
|
36
36
|
private sendRouteMessageRequest;
|
|
37
37
|
private findMoreContacts;
|
|
38
|
-
getClosestContacts: (limit: number) => PeerDescriptor[];
|
|
39
38
|
private sendMoreRequests;
|
|
40
39
|
start(): void;
|
|
41
40
|
stop(): void;
|
|
@@ -12,8 +12,18 @@ const uuid_1 = require("uuid");
|
|
|
12
12
|
const RemoteRouter_1 = require("./RemoteRouter");
|
|
13
13
|
const DhtRpc_client_1 = require("../../proto/packages/dht/protos/DhtRpc.client");
|
|
14
14
|
const proto_rpc_1 = require("@streamr/proto-rpc");
|
|
15
|
+
const Contact_1 = require("../contact/Contact");
|
|
15
16
|
const logger = new utils_1.Logger(module);
|
|
16
17
|
const MAX_FAILED_HOPS = 2;
|
|
18
|
+
class RemoteContact extends Contact_1.Contact {
|
|
19
|
+
constructor(peer, ownPeerDescriptor, rpcCommunicator) {
|
|
20
|
+
super(peer.getPeerDescriptor());
|
|
21
|
+
this.router = new RemoteRouter_1.RemoteRouter(ownPeerDescriptor, peer.getPeerDescriptor(), peer.getServiceId(), (0, proto_rpc_1.toProtoRpcClient)(new DhtRpc_client_1.RoutingServiceClient(rpcCommunicator.getRpcClientTransport())));
|
|
22
|
+
}
|
|
23
|
+
getRouter() {
|
|
24
|
+
return this.router;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
17
27
|
var RoutingMode;
|
|
18
28
|
(function (RoutingMode) {
|
|
19
29
|
RoutingMode[RoutingMode["ROUTE"] = 0] = "ROUTE";
|
|
@@ -76,20 +86,21 @@ class RoutingSession extends eventemitter3_1.default {
|
|
|
76
86
|
if (this.stopped) {
|
|
77
87
|
return false;
|
|
78
88
|
}
|
|
89
|
+
const router = contact.getRouter();
|
|
79
90
|
if (this.mode === RoutingMode.FORWARD) {
|
|
80
|
-
return
|
|
91
|
+
return router.forwardMessage({
|
|
81
92
|
...this.messageToRoute,
|
|
82
93
|
previousPeer: this.ownPeerDescriptor
|
|
83
94
|
});
|
|
84
95
|
}
|
|
85
96
|
else if (this.mode === RoutingMode.RECURSIVE_FIND) {
|
|
86
|
-
return
|
|
97
|
+
return router.findRecursively({
|
|
87
98
|
...this.messageToRoute,
|
|
88
99
|
previousPeer: this.ownPeerDescriptor
|
|
89
100
|
});
|
|
90
101
|
}
|
|
91
102
|
else {
|
|
92
|
-
return
|
|
103
|
+
return router.routeMessage({
|
|
93
104
|
...this.messageToRoute,
|
|
94
105
|
previousPeer: this.ownPeerDescriptor
|
|
95
106
|
});
|
|
@@ -100,16 +111,10 @@ class RoutingSession extends eventemitter3_1.default {
|
|
|
100
111
|
// the contents of the connections might have changed between the rounds
|
|
101
112
|
// addContacts() will only add new contacts that were not there yet
|
|
102
113
|
const contacts = Array.from(this.connections.values())
|
|
103
|
-
.map((
|
|
104
|
-
return new RemoteRouter_1.RemoteRouter(this.ownPeerDescriptor, contact.getPeerDescriptor(), contact.getServiceId(), (0, proto_rpc_1.toProtoRpcClient)(new DhtRpc_client_1.RoutingServiceClient(this.rpcCommunicator.getRpcClientTransport())));
|
|
105
|
-
});
|
|
114
|
+
.map((peer) => new RemoteContact(peer, this.ownPeerDescriptor, this.rpcCommunicator));
|
|
106
115
|
this.contactList.addContacts(contacts);
|
|
107
116
|
return this.contactList.getUncontactedContacts(this.parallelism);
|
|
108
117
|
};
|
|
109
|
-
this.getClosestContacts = (limit) => {
|
|
110
|
-
const contacts = this.contactList.getClosestContacts(limit);
|
|
111
|
-
return contacts.map((contact) => contact.getPeerDescriptor());
|
|
112
|
-
};
|
|
113
118
|
this.sendMoreRequests = (uncontacted) => {
|
|
114
119
|
logger.trace('sendMoreRequests() sessionId: ' + this.sessionId);
|
|
115
120
|
if (this.stopped) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoutingSession.js","sourceRoot":"","sources":["../../../../src/dht/routing/RoutingSession.ts"],"names":[],"mappings":";;;;;;AAEA,oEAAgE;AAChE,iDAAwD;AACxD,0CAAuC;AACvC,kEAAwC;AACxC,+BAAyB;AAEzB,iDAA6C;AAE7C,iFAAoF;AACpF,kDAAqD;
|
|
1
|
+
{"version":3,"file":"RoutingSession.js","sourceRoot":"","sources":["../../../../src/dht/routing/RoutingSession.ts"],"names":[],"mappings":"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"}
|
package/dist/src/exports.d.ts
CHANGED
|
@@ -7,7 +7,6 @@ export { PeerDescriptor, Message, NodeType, DataEntry } from './proto/packages/d
|
|
|
7
7
|
export { ITransport } from './transport/ITransport';
|
|
8
8
|
export { ConnectionManager, ConnectionLocker, PortRange, TlsCertificate } from './connection/ConnectionManager';
|
|
9
9
|
export { PeerID, PeerIDKey } from './helpers/PeerID';
|
|
10
|
-
export { DhtPeer } from './dht/DhtPeer';
|
|
11
10
|
export { UUID } from './helpers/UUID';
|
|
12
11
|
export { DhtRpcOptions } from './rpc-protocol/DhtRpcOptions';
|
|
13
12
|
export { protoClasses } from './helpers/protoClasses';
|
package/dist/src/exports.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DhtCallContext = exports.isSamePeerDescriptor = exports.keyFromPeerDescriptor = exports.peerIdFromPeerDescriptor = exports.Remote = exports.Contact = exports.SortedContactList = exports.protoClasses = exports.UUID = exports.
|
|
3
|
+
exports.DhtCallContext = exports.isSamePeerDescriptor = exports.keyFromPeerDescriptor = exports.peerIdFromPeerDescriptor = exports.Remote = exports.Contact = exports.SortedContactList = exports.protoClasses = exports.UUID = exports.PeerID = exports.ConnectionManager = exports.DataEntry = exports.NodeType = exports.Message = exports.PeerDescriptor = exports.getRegionDelayMatrix = exports.getRandomRegion = exports.SimulatorTransport = exports.LatencyType = exports.Simulator = exports.ListeningRpcCommunicator = exports.DhtNode = void 0;
|
|
4
4
|
var DhtNode_1 = require("./dht/DhtNode");
|
|
5
5
|
Object.defineProperty(exports, "DhtNode", { enumerable: true, get: function () { return DhtNode_1.DhtNode; } });
|
|
6
6
|
var ListeningRpcCommunicator_1 = require("./transport/ListeningRpcCommunicator");
|
|
@@ -22,8 +22,6 @@ var ConnectionManager_1 = require("./connection/ConnectionManager");
|
|
|
22
22
|
Object.defineProperty(exports, "ConnectionManager", { enumerable: true, get: function () { return ConnectionManager_1.ConnectionManager; } });
|
|
23
23
|
var PeerID_1 = require("./helpers/PeerID");
|
|
24
24
|
Object.defineProperty(exports, "PeerID", { enumerable: true, get: function () { return PeerID_1.PeerID; } });
|
|
25
|
-
var DhtPeer_1 = require("./dht/DhtPeer");
|
|
26
|
-
Object.defineProperty(exports, "DhtPeer", { enumerable: true, get: function () { return DhtPeer_1.DhtPeer; } });
|
|
27
25
|
var UUID_1 = require("./helpers/UUID");
|
|
28
26
|
Object.defineProperty(exports, "UUID", { enumerable: true, get: function () { return UUID_1.UUID; } });
|
|
29
27
|
var protoClasses_1 = require("./helpers/protoClasses");
|
package/dist/src/exports.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/exports.ts"],"names":[],"mappings":";;;AAAA,yCAAsE;AAA7D,kGAAA,OAAO,OAAA;AAChB,iFAA+E;AAAtE,oIAAA,wBAAwB,OAAA;AACjC,8DAAyE;AAAhE,sGAAA,SAAS,OAAA;AAAE,wGAAA,WAAW,OAAA;AAC/B,gFAA8E;AAArE,wHAAA,kBAAkB,OAAA;AAC3B,sDAAoF;AAA3E,wGAAA,eAAe,OAAA;AAAE,6GAAA,oBAAoB,OAAA;AAC9C,6DAAiG;AAAxF,wGAAA,cAAc,OAAA;AAAE,iGAAA,OAAO,OAAA;AAAE,kGAAA,QAAQ,OAAA;AAAE,mGAAA,SAAS,OAAA;AAErD,oEAA+G;AAAtG,sHAAA,iBAAiB,OAAA;AAC1B,2CAAoD;AAA3C,gGAAA,MAAM,OAAA;AACf,
|
|
1
|
+
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/exports.ts"],"names":[],"mappings":";;;AAAA,yCAAsE;AAA7D,kGAAA,OAAO,OAAA;AAChB,iFAA+E;AAAtE,oIAAA,wBAAwB,OAAA;AACjC,8DAAyE;AAAhE,sGAAA,SAAS,OAAA;AAAE,wGAAA,WAAW,OAAA;AAC/B,gFAA8E;AAArE,wHAAA,kBAAkB,OAAA;AAC3B,sDAAoF;AAA3E,wGAAA,eAAe,OAAA;AAAE,6GAAA,oBAAoB,OAAA;AAC9C,6DAAiG;AAAxF,wGAAA,cAAc,OAAA;AAAE,iGAAA,OAAO,OAAA;AAAE,kGAAA,QAAQ,OAAA;AAAE,mGAAA,SAAS,OAAA;AAErD,oEAA+G;AAAtG,sHAAA,iBAAiB,OAAA;AAC1B,2CAAoD;AAA3C,gGAAA,MAAM,OAAA;AACf,uCAAqC;AAA5B,4FAAA,IAAI,OAAA;AAEb,uDAAqD;AAA5C,4GAAA,YAAY,OAAA;AACrB,qEAAmE;AAA1D,sHAAA,iBAAiB,OAAA;AAC1B,iDAA+C;AAAtC,kGAAA,OAAO,OAAA;AAChB,+CAA6C;AAApC,gGAAA,MAAM,OAAA;AAEf,+EAA0H;AAAjH,oIAAA,wBAAwB,OAAA;AAAE,iIAAA,qBAAqB,OAAA;AAAE,gIAAA,oBAAoB,OAAA;AAE9E,gEAA8D;AAArD,gHAAA,cAAc,OAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@streamr/dht",
|
|
3
|
-
"version": "0.0.1-tatum.
|
|
3
|
+
"version": "0.0.1-tatum.6",
|
|
4
4
|
"description": "Streamr Network DHT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@protobuf-ts/runtime": "^2.8.2",
|
|
33
33
|
"@protobuf-ts/runtime-rpc": "^2.8.2",
|
|
34
|
-
"@streamr/proto-rpc": "0.0.1-tatum.
|
|
35
|
-
"@streamr/utils": "0.0.1-tatum.
|
|
34
|
+
"@streamr/proto-rpc": "0.0.1-tatum.6",
|
|
35
|
+
"@streamr/utils": "0.0.1-tatum.6",
|
|
36
36
|
"eventemitter3": "^5.0.0",
|
|
37
37
|
"heap": "^0.2.6",
|
|
38
38
|
"ipaddr.js": "^2.0.1",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@streamr/browser-test-runner": "^0.0.1",
|
|
48
|
-
"@streamr/test-utils": "0.0.1-tatum.
|
|
48
|
+
"@streamr/test-utils": "0.0.1-tatum.6",
|
|
49
49
|
"@types/express": "^4.17.19",
|
|
50
50
|
"@types/heap": "^0.2.32",
|
|
51
51
|
"@types/k-bucket": "^5.0.1",
|
|
@@ -38,6 +38,7 @@ import {
|
|
|
38
38
|
keyFromPeerDescriptor,
|
|
39
39
|
peerIdFromPeerDescriptor
|
|
40
40
|
} from '../helpers/peerIdFromPeerDescriptor'
|
|
41
|
+
import { isPrivateIPv4 } from '../helpers/AddressTools'
|
|
41
42
|
|
|
42
43
|
export class ConnectionManagerConfig {
|
|
43
44
|
transportLayer?: ITransport
|
|
@@ -207,7 +208,7 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
207
208
|
if (this.connections.size <= maxConnections) {
|
|
208
209
|
return
|
|
209
210
|
}
|
|
210
|
-
const disconnectionCandidates = new SortedContactList(peerIdFromPeerDescriptor(this.ownPeerDescriptor!), 100000)
|
|
211
|
+
const disconnectionCandidates = new SortedContactList<Contact>(peerIdFromPeerDescriptor(this.ownPeerDescriptor!), 100000)
|
|
211
212
|
this.connections.forEach((connection) => {
|
|
212
213
|
if (!this.locks.isLocked(connection.peerIdKey) && Date.now() - connection.getLastUsed() > lastUsedLimit) {
|
|
213
214
|
logger.trace('disconnecting in timeout interval: ' + this.ownPeerDescriptor?.nodeName + ', '
|
|
@@ -359,14 +360,26 @@ export class ConnectionManager extends EventEmitter<Events> implements ITranspor
|
|
|
359
360
|
private createConnection(peerDescriptor: PeerDescriptor): ManagedConnection {
|
|
360
361
|
if (this.simulatorConnector) {
|
|
361
362
|
return this.simulatorConnector.connect(peerDescriptor)
|
|
362
|
-
} else if (peerDescriptor.websocket || this.ownPeerDescriptor!.websocket) {
|
|
363
|
-
if (
|
|
363
|
+
} else if ((peerDescriptor.websocket || this.ownPeerDescriptor!.websocket)) {
|
|
364
|
+
if (this.canOpenWsConnection(peerDescriptor)) {
|
|
364
365
|
return this.webSocketConnector!.connect(peerDescriptor)
|
|
365
366
|
}
|
|
366
367
|
}
|
|
367
368
|
return this.webrtcConnector!.connect(peerDescriptor)
|
|
368
369
|
}
|
|
369
370
|
|
|
371
|
+
private canOpenWsConnection(peerDescriptor: PeerDescriptor): boolean {
|
|
372
|
+
if (!(this.ownPeerDescriptor!.type === NodeType.BROWSER || peerDescriptor.type === NodeType.BROWSER)) {
|
|
373
|
+
return true
|
|
374
|
+
}
|
|
375
|
+
if (this.ownPeerDescriptor!.websocket) {
|
|
376
|
+
return (peerDescriptor.type === NodeType.BROWSER && this.ownPeerDescriptor!.websocket!.tls)
|
|
377
|
+
|| (this.ownPeerDescriptor!.websocket!.host === 'localhost' || (isPrivateIPv4(this.ownPeerDescriptor!.websocket!.host)))
|
|
378
|
+
}
|
|
379
|
+
return (this.ownPeerDescriptor!.type === NodeType.BROWSER && peerDescriptor.websocket!.tls)
|
|
380
|
+
|| (peerDescriptor.websocket!.host === 'localhost' || (isPrivateIPv4(peerDescriptor.websocket!.host)))
|
|
381
|
+
}
|
|
382
|
+
|
|
370
383
|
public getConnection(peerDescriptor: PeerDescriptor): ManagedConnection | undefined {
|
|
371
384
|
const hexId = keyFromPeerDescriptor(peerDescriptor)
|
|
372
385
|
return this.connections.get(hexId)
|
package/src/dht/DhtNode.ts
CHANGED
|
@@ -142,7 +142,8 @@ export const createPeerDescriptor = (msg?: ConnectivityResponse, peerId?: string
|
|
|
142
142
|
} else {
|
|
143
143
|
kademliaId = hexToBinary(peerId!)
|
|
144
144
|
}
|
|
145
|
-
const
|
|
145
|
+
const nodeType = isNodeJS() ? NodeType.NODEJS : NodeType.BROWSER
|
|
146
|
+
const ret: PeerDescriptor = { kademliaId, nodeName: nodeName ? nodeName : binaryToHex(kademliaId), type: nodeType }
|
|
146
147
|
if (msg && msg.websocket) {
|
|
147
148
|
ret.websocket = { host: msg.websocket.host, port: msg.websocket.port, tls: msg.websocket.tls }
|
|
148
149
|
ret.openInternet = true
|
|
@@ -319,29 +320,29 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
319
320
|
// TODO: Update contact info to the connection manager and reconnect
|
|
320
321
|
})
|
|
321
322
|
this.neighborList = new SortedContactList(selfId, this.config.maxNeighborListSize)
|
|
322
|
-
this.neighborList.on('contactRemoved', (
|
|
323
|
+
this.neighborList.on('contactRemoved', (removedContact: DhtPeer, activeContacts: DhtPeer[]) => {
|
|
323
324
|
if (this.stopped) {
|
|
324
325
|
return
|
|
325
326
|
}
|
|
326
|
-
this.emit('contactRemoved',
|
|
327
|
+
this.emit('contactRemoved', removedContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
|
|
327
328
|
this.randomPeers!.addContact(
|
|
328
329
|
new DhtPeer(
|
|
329
330
|
this.ownPeerDescriptor!,
|
|
330
|
-
|
|
331
|
+
removedContact.getPeerDescriptor(),
|
|
331
332
|
toProtoRpcClient(new DhtRpcServiceClient(this.rpcCommunicator!.getRpcClientTransport())),
|
|
332
333
|
this.config.serviceId
|
|
333
334
|
)
|
|
334
335
|
)
|
|
335
336
|
})
|
|
336
|
-
this.neighborList.on('newContact', (
|
|
337
|
-
this.emit('newContact',
|
|
337
|
+
this.neighborList.on('newContact', (newContact: DhtPeer, activeContacts: DhtPeer[]) =>
|
|
338
|
+
this.emit('newContact', newContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
|
|
338
339
|
)
|
|
339
340
|
this.openInternetPeers = new SortedContactList(selfId, this.config.maxNeighborListSize / 2)
|
|
340
|
-
this.openInternetPeers.on('contactRemoved', (
|
|
341
|
-
this.emit('openInternetContactRemoved',
|
|
341
|
+
this.openInternetPeers.on('contactRemoved', (removedContact: DhtPeer, activeContacts: DhtPeer[]) =>
|
|
342
|
+
this.emit('openInternetContactRemoved', removedContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
|
|
342
343
|
)
|
|
343
|
-
this.openInternetPeers.on('newContact', (
|
|
344
|
-
this.emit('newOpenInternetContact',
|
|
344
|
+
this.openInternetPeers.on('newContact', (newContact: DhtPeer, activeContacts: DhtPeer[]) =>
|
|
345
|
+
this.emit('newOpenInternetContact', newContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
|
|
345
346
|
)
|
|
346
347
|
this.transportLayer!.on('connected', (peerDescriptor: PeerDescriptor) => this.onTransportConnected(peerDescriptor))
|
|
347
348
|
|
|
@@ -363,11 +364,11 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
363
364
|
this.connections.set(peerId.toKey(), dhtPeer)
|
|
364
365
|
})
|
|
365
366
|
this.randomPeers = new RandomContactList(selfId, this.config.maxNeighborListSize)
|
|
366
|
-
this.randomPeers.on('contactRemoved', (
|
|
367
|
-
this.emit('randomContactRemoved',
|
|
367
|
+
this.randomPeers.on('contactRemoved', (removedContact: DhtPeer, activeContacts: DhtPeer[]) =>
|
|
368
|
+
this.emit('randomContactRemoved', removedContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
|
|
368
369
|
)
|
|
369
|
-
this.randomPeers.on('newContact', (
|
|
370
|
-
this.emit('newRandomContact',
|
|
370
|
+
this.randomPeers.on('newContact', (newContact: DhtPeer, activeContacts: DhtPeer[]) =>
|
|
371
|
+
this.emit('newRandomContact', newContact.getPeerDescriptor(), activeContacts.map((c) => c.getPeerDescriptor()))
|
|
371
372
|
)
|
|
372
373
|
}
|
|
373
374
|
|
|
@@ -555,8 +556,8 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
555
556
|
return undefined
|
|
556
557
|
}
|
|
557
558
|
|
|
558
|
-
public
|
|
559
|
-
return this.neighborList
|
|
559
|
+
public getClosestContacts(maxCount?: number): PeerDescriptor[] {
|
|
560
|
+
return this.neighborList!.getClosestContacts(maxCount).map((c) => c.getPeerDescriptor())
|
|
560
561
|
}
|
|
561
562
|
|
|
562
563
|
public getNodeId(): PeerID {
|
package/src/dht/DhtPeer.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { v4 } from 'uuid'
|
|
|
9
9
|
import { Logger } from '@streamr/utils'
|
|
10
10
|
import { ProtoRpcClient } from '@streamr/proto-rpc'
|
|
11
11
|
import { Remote } from './contact/Remote'
|
|
12
|
+
import { PeerID, peerIdFromPeerDescriptor } from '../exports'
|
|
12
13
|
|
|
13
14
|
const logger = new Logger(module)
|
|
14
15
|
|
|
@@ -81,4 +82,8 @@ export class DhtPeer extends Remote<IDhtRpcServiceClient> implements KBucketCont
|
|
|
81
82
|
logger.trace('Failed to send leaveNotice' + e)
|
|
82
83
|
})
|
|
83
84
|
}
|
|
85
|
+
|
|
86
|
+
getPeerId(): PeerID {
|
|
87
|
+
return peerIdFromPeerDescriptor(this.getPeerDescriptor())
|
|
88
|
+
}
|
|
84
89
|
}
|
|
@@ -2,24 +2,7 @@ import { PeerID } from '../../helpers/PeerID'
|
|
|
2
2
|
import { PeerDescriptor } from '../../proto/packages/dht/protos/DhtRpc'
|
|
3
3
|
import { peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
4
4
|
|
|
5
|
-
export class
|
|
6
|
-
public contacted = false
|
|
7
|
-
public active = false
|
|
8
|
-
public contact: TContact
|
|
9
|
-
|
|
10
|
-
constructor(contact: TContact) {
|
|
11
|
-
this.contact = contact
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export interface IContact { getPeerId: () => PeerID, getPeerDescriptor: () => PeerDescriptor }
|
|
16
|
-
|
|
17
|
-
export interface Events {
|
|
18
|
-
contactRemoved: (removedDescriptor: PeerDescriptor, closestDescriptors: PeerDescriptor[]) => void
|
|
19
|
-
newContact: (newDescriptor: PeerDescriptor, closestDescriptors: PeerDescriptor[]) => void
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export class Contact implements IContact {
|
|
5
|
+
export class Contact {
|
|
23
6
|
private peerDescriptor: PeerDescriptor
|
|
24
7
|
|
|
25
8
|
constructor(peerDescriptor: PeerDescriptor) {
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import { PeerID, PeerIDKey } from '../../helpers/PeerID'
|
|
2
2
|
import EventEmitter from 'eventemitter3'
|
|
3
|
-
import { Events, IContact, ContactState } from './Contact'
|
|
4
3
|
|
|
5
|
-
export class
|
|
4
|
+
export class ContactState<C> {
|
|
5
|
+
public contacted = false
|
|
6
|
+
public active = false
|
|
7
|
+
public contact: C
|
|
8
|
+
|
|
9
|
+
constructor(contact: C) {
|
|
10
|
+
this.contact = contact
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface Events<C> {
|
|
15
|
+
contactRemoved: (removedContact: C, closestContacts: C[]) => void
|
|
16
|
+
newContact: (newContact: C, closestContacts: C[]) => void
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export class ContactList<C extends { getPeerId: () => PeerID }> extends EventEmitter<Events<C>> {
|
|
6
20
|
|
|
7
21
|
protected contactsById: Map<PeerIDKey, ContactState<C>> = new Map()
|
|
8
22
|
protected contactIds: PeerID[] = []
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { PeerID } from '../../helpers/PeerID'
|
|
2
|
-
import {
|
|
3
|
-
import { ContactList } from './ContactList'
|
|
2
|
+
import { ContactList, ContactState } from './ContactList'
|
|
4
3
|
|
|
5
|
-
export class RandomContactList<C extends
|
|
4
|
+
export class RandomContactList<C extends { getPeerId: () => PeerID }> extends ContactList<C> {
|
|
6
5
|
|
|
7
6
|
private randomness: number
|
|
8
7
|
|
|
@@ -31,8 +30,8 @@ export class RandomContactList<C extends IContact> extends ContactList<C> {
|
|
|
31
30
|
this.contactsById.set(contact.getPeerId().toKey(), new ContactState(contact))
|
|
32
31
|
this.emit(
|
|
33
32
|
'newContact',
|
|
34
|
-
contact
|
|
35
|
-
this.getContacts()
|
|
33
|
+
contact,
|
|
34
|
+
this.getContacts()
|
|
36
35
|
)
|
|
37
36
|
}
|
|
38
37
|
}
|
|
@@ -44,11 +43,11 @@ export class RandomContactList<C extends IContact> extends ContactList<C> {
|
|
|
44
43
|
|
|
45
44
|
removeContact(id: PeerID): boolean {
|
|
46
45
|
if (this.contactsById.has(id.toKey())) {
|
|
47
|
-
const
|
|
46
|
+
const removed = this.contactsById.get(id.toKey())!.contact
|
|
48
47
|
const index = this.contactIds.findIndex((element) => element.equals(id))
|
|
49
48
|
this.contactIds.splice(index, 1)
|
|
50
49
|
this.contactsById.delete(id.toKey())
|
|
51
|
-
this.emit('contactRemoved',
|
|
50
|
+
this.emit('contactRemoved', removed, this.getContacts())
|
|
52
51
|
return true
|
|
53
52
|
}
|
|
54
53
|
return false
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import { PeerDescriptor } from '../../proto/packages/dht/protos/DhtRpc'
|
|
2
2
|
import { ProtoRpcClient } from '@streamr/proto-rpc'
|
|
3
|
-
import { peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
|
|
4
|
-
import { PeerID } from '../../helpers/PeerID'
|
|
5
|
-
import { IContact } from './Contact'
|
|
6
3
|
import { DhtRpcOptions } from '../../rpc-protocol/DhtRpcOptions'
|
|
7
4
|
|
|
8
|
-
export abstract class Remote<T>
|
|
5
|
+
export abstract class Remote<T> {
|
|
9
6
|
|
|
10
7
|
private readonly localPeerDescriptor: PeerDescriptor
|
|
11
|
-
private readonly remotePeerId: PeerID
|
|
12
8
|
private readonly remotePeerDescriptor: PeerDescriptor
|
|
13
9
|
private readonly serviceId: string
|
|
14
10
|
private readonly client: ProtoRpcClient<T>
|
|
@@ -20,16 +16,11 @@ export abstract class Remote<T> implements IContact {
|
|
|
20
16
|
client: ProtoRpcClient<T>
|
|
21
17
|
) {
|
|
22
18
|
this.localPeerDescriptor = localPeerDescriptor
|
|
23
|
-
this.remotePeerId = peerIdFromPeerDescriptor(remotePeerDescriptor)
|
|
24
19
|
this.remotePeerDescriptor = remotePeerDescriptor
|
|
25
20
|
this.client = client
|
|
26
21
|
this.serviceId = serviceId
|
|
27
22
|
}
|
|
28
23
|
|
|
29
|
-
getPeerId(): PeerID {
|
|
30
|
-
return this.remotePeerId
|
|
31
|
-
}
|
|
32
|
-
|
|
33
24
|
getPeerDescriptor(): PeerDescriptor {
|
|
34
25
|
return this.remotePeerDescriptor
|
|
35
26
|
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import KBucket from 'k-bucket'
|
|
2
2
|
import { PeerID } from '../../helpers/PeerID'
|
|
3
|
-
import {
|
|
4
|
-
import { ContactList } from './ContactList'
|
|
3
|
+
import { ContactList, ContactState } from './ContactList'
|
|
5
4
|
|
|
6
|
-
export class SortedContactList<C extends
|
|
5
|
+
export class SortedContactList<C extends { getPeerId: () => PeerID }> extends ContactList<C> {
|
|
7
6
|
|
|
8
7
|
private allowOwnPeerId: boolean
|
|
9
8
|
private peerIdDistanceLimit?: PeerID
|
|
@@ -48,22 +47,22 @@ export class SortedContactList<C extends IContact> extends ContactList<C> {
|
|
|
48
47
|
this.contactIds.push(contact.getPeerId())
|
|
49
48
|
this.contactIds.sort(this.compareIds)
|
|
50
49
|
} else if (this.compareIds(this.contactIds[this.maxSize - 1], contact.getPeerId()) > 0) {
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
this.contactsById.delete(
|
|
50
|
+
const removedId = this.contactIds.pop()
|
|
51
|
+
const removedContact = this.contactsById.get(removedId!.toKey())!.contact
|
|
52
|
+
this.contactsById.delete(removedId!.toKey())
|
|
54
53
|
this.contactsById.set(contact.getPeerId().toKey(), new ContactState(contact))
|
|
55
54
|
this.contactIds.push(contact.getPeerId())
|
|
56
55
|
this.contactIds.sort(this.compareIds)
|
|
57
56
|
this.emit(
|
|
58
57
|
'contactRemoved',
|
|
59
|
-
|
|
60
|
-
this.getClosestContacts()
|
|
58
|
+
removedContact,
|
|
59
|
+
this.getClosestContacts()
|
|
61
60
|
)
|
|
62
61
|
}
|
|
63
62
|
this.emit(
|
|
64
63
|
'newContact',
|
|
65
|
-
contact
|
|
66
|
-
this.getClosestContacts()
|
|
64
|
+
contact,
|
|
65
|
+
this.getClosestContacts()
|
|
67
66
|
)
|
|
68
67
|
}
|
|
69
68
|
}
|
|
@@ -136,14 +135,14 @@ export class SortedContactList<C extends IContact> extends ContactList<C> {
|
|
|
136
135
|
|
|
137
136
|
public removeContact(id: PeerID): boolean {
|
|
138
137
|
if (this.contactsById.has(id.toKey())) {
|
|
139
|
-
const
|
|
138
|
+
const removed = this.contactsById.get(id.toKey())!.contact
|
|
140
139
|
const index = this.contactIds.findIndex((element) => element.equals(id))
|
|
141
140
|
this.contactIds.splice(index, 1)
|
|
142
141
|
this.contactsById.delete(id.toKey())
|
|
143
142
|
this.emit(
|
|
144
143
|
'contactRemoved',
|
|
145
|
-
|
|
146
|
-
this.getClosestContacts()
|
|
144
|
+
removed,
|
|
145
|
+
this.getClosestContacts()
|
|
147
146
|
)
|
|
148
147
|
return true
|
|
149
148
|
}
|