@streamr/dht 100.0.0-testnet-three.2 → 100.0.0-testnet-three.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -8
- package/dist/package.json +5 -5
- package/dist/src/connection/ConnectionManager.js +10 -2
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/connection/connectivityRequestHandler.d.ts +1 -0
- package/dist/src/connection/connectivityRequestHandler.js +39 -22
- package/dist/src/connection/connectivityRequestHandler.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnector.js +32 -37
- package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -1
- package/dist/src/dht/DhtNode.d.ts +2 -2
- package/dist/src/dht/DhtNode.js +16 -11
- package/dist/src/dht/DhtNode.js.map +1 -1
- package/dist/src/dht/DhtNodeRpcLocal.d.ts +1 -1
- package/dist/src/dht/DhtNodeRpcLocal.js +2 -2
- package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -1
- package/dist/src/dht/PeerManager.d.ts +7 -9
- package/dist/src/dht/PeerManager.js +7 -14
- package/dist/src/dht/PeerManager.js.map +1 -1
- package/dist/src/dht/contact/ContactList.d.ts +1 -1
- package/dist/src/dht/contact/RandomContactList.js +1 -1
- package/dist/src/dht/contact/RandomContactList.js.map +1 -1
- package/dist/src/dht/contact/SortedContactList.js +14 -15
- package/dist/src/dht/contact/SortedContactList.js.map +1 -1
- package/dist/src/dht/discovery/DiscoverySession.d.ts +1 -1
- package/dist/src/dht/discovery/DiscoverySession.js +5 -5
- package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
- package/dist/src/dht/discovery/PeerDiscovery.js +2 -2
- package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.js +0 -1
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.js.map +1 -1
- package/dist/src/dht/routing/RouterRpcLocal.js +2 -3
- package/dist/src/dht/routing/RouterRpcLocal.js.map +1 -1
- package/dist/src/dht/routing/RoutingSession.js +2 -1
- package/dist/src/dht/routing/RoutingSession.js.map +1 -1
- package/dist/src/dht/store/LocalDataStore.d.ts +1 -1
- package/dist/src/dht/store/LocalDataStore.js +2 -5
- package/dist/src/dht/store/LocalDataStore.js.map +1 -1
- package/dist/src/dht/store/StoreManager.d.ts +1 -1
- package/dist/src/dht/store/StoreManager.js +10 -17
- package/dist/src/dht/store/StoreManager.js.map +1 -1
- package/package.json +5 -5
- package/src/connection/ConnectionManager.ts +9 -2
- package/src/connection/connectivityRequestHandler.ts +39 -22
- package/src/connection/websocket/WebsocketConnector.ts +33 -37
- package/src/dht/DhtNode.ts +20 -15
- package/src/dht/DhtNodeRpcLocal.ts +3 -3
- package/src/dht/PeerManager.ts +12 -21
- package/src/dht/contact/ContactList.ts +1 -1
- package/src/dht/contact/RandomContactList.ts +1 -1
- package/src/dht/contact/SortedContactList.ts +14 -18
- package/src/dht/discovery/DiscoverySession.ts +5 -5
- package/src/dht/discovery/PeerDiscovery.ts +2 -2
- package/src/dht/recursive-operation/RecursiveOperationRpcLocal.ts +0 -1
- package/src/dht/routing/RouterRpcLocal.ts +2 -3
- package/src/dht/routing/RoutingSession.ts +2 -1
- package/src/dht/store/LocalDataStore.ts +2 -5
- package/src/dht/store/StoreManager.ts +10 -17
- package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +8 -4
- package/test/end-to-end/Layer0Webrtc.test.ts +0 -2
- package/test/end-to-end/memory-leak.test.ts +3 -3
- package/test/unit/PeerManager.test.ts +1 -1
- package/test/unit/SortedContactList.test.ts +5 -5
- package/test/unit/StoreManager.test.ts +26 -23
- package/test/unit/connectivityRequestHandler.test.ts +39 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoutingSession.js","sourceRoot":"","sources":["../../../../src/dht/routing/RoutingSession.ts"],"names":[],"mappings":";;;;;;AACA,oEAAgE;AAChE,0CAAuC;AACvC,kEAAwC;AACxC,+BAAyB;AAEzB,uDAAmD;AAEnD,iFAA4G;AAC5G,gDAA4C;AAC5C,oGAAgG;AAChG,oDAAkE;AAClE,uDAAmD;AACnD,mDAA0H;AAC1H,mCAA6B;AAE7B,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,MAAM,CAAC,CAAA;AAEjC,MAAM,eAAe,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"RoutingSession.js","sourceRoot":"","sources":["../../../../src/dht/routing/RoutingSession.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ export declare class LocalDataStore {
|
|
|
7
7
|
storeEntry(dataEntry: DataEntry): boolean;
|
|
8
8
|
markAsDeleted(key: DhtAddress, creator: DhtAddress): boolean;
|
|
9
9
|
values(key?: DhtAddress): IterableIterator<DataEntry>;
|
|
10
|
-
|
|
10
|
+
keys(): IterableIterator<DhtAddress>;
|
|
11
11
|
setAllEntriesAsStale(key: DhtAddress): void;
|
|
12
12
|
deleteEntry(key: DhtAddress, creator: DhtAddress): void;
|
|
13
13
|
clear(): void;
|
|
@@ -52,11 +52,8 @@ class LocalDataStore {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if (storedEntry) {
|
|
58
|
-
storedEntry.stale = stale;
|
|
59
|
-
}
|
|
55
|
+
keys() {
|
|
56
|
+
return this.store.keys();
|
|
60
57
|
}
|
|
61
58
|
setAllEntriesAsStale(key) {
|
|
62
59
|
this.store.get(key)?.forEach((value) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalDataStore.js","sourceRoot":"","sources":["../../../../src/dht/store/LocalDataStore.ts"],"names":[],"mappings":";;;AACA,yDAAqD;AACrD,mDAAoE;AAEpE,MAAa,cAAc;IAEN,MAAM,CAAQ;IAE/B,YAAY,MAAc;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC;IAED,8DAA8D;IAC9D,8DAA8D;IAC9D,wCAAwC;IAChC,KAAK,GAAuD,IAAI,GAAG,EAAE,CAAA;IAEtE,UAAU,CAAC,SAAoB;QAClC,MAAM,GAAG,GAAG,IAAA,kCAAoB,EAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAC/C,MAAM,aAAa,GAAG,IAAA,kCAAoB,EAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAC7D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,uBAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC5E,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAC1C,MAAM,YAAY,GAAG,CAAC,SAAS,CAAC,SAAU,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAU,CAAC,KAAK,GAAG,OAAO,CAAC,CAAA;YACnG,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,GAAG,CAAC,aAAa,CAAE,CAAA;YAC9D,MAAM,eAAe,GAAG,CAAC,aAAa,CAAC,SAAU,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,SAAU,CAAC,KAAK,GAAG,OAAO,CAAC,CAAA;YAC9G,iEAAiE;YACjE,IAAI,eAAe,IAAI,YAAY,EAAE,CAAC;gBAClC,OAAO,KAAK,CAAA;YAChB,CAAC;QACL,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;QAClD,OAAO,IAAI,CAAA;IACf,CAAC;IAEM,aAAa,CAAC,GAAe,EAAE,OAAmB;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAA;QAChB,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACrC,WAAY,CAAC,OAAO,GAAG,IAAI,CAAA;QAC3B,OAAO,IAAI,CAAA;IACf,CAAC;IAEK,CAAE,MAAM,CAAC,GAAgB;QAC3B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC/B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACpB,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAA;YACvB,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;YACrB,CAAC;QACL,CAAC;IACL,CAAC;IAEM,
|
|
1
|
+
{"version":3,"file":"LocalDataStore.js","sourceRoot":"","sources":["../../../../src/dht/store/LocalDataStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ export declare class StoreManager {
|
|
|
21
21
|
private readonly config;
|
|
22
22
|
constructor(config: StoreManagerConfig);
|
|
23
23
|
private registerLocalRpcMethods;
|
|
24
|
-
|
|
24
|
+
onContactAdded(peerDescriptor: PeerDescriptor): void;
|
|
25
25
|
private replicateAndUpdateStaleState;
|
|
26
26
|
private replicateDataToContact;
|
|
27
27
|
storeDataToDht(key: DhtAddress, data: Any, creator: DhtAddress): Promise<PeerDescriptor[]>;
|
|
@@ -6,7 +6,6 @@ const utils_1 = require("@streamr/utils");
|
|
|
6
6
|
const timestamp_1 = require("../../proto/google/protobuf/timestamp");
|
|
7
7
|
const SortedContactList_1 = require("../contact/SortedContactList");
|
|
8
8
|
const Contact_1 = require("../contact/Contact");
|
|
9
|
-
const lodash_1 = require("lodash");
|
|
10
9
|
const identifiers_1 = require("../../identifiers");
|
|
11
10
|
const StoreRpcLocal_1 = require("./StoreRpcLocal");
|
|
12
11
|
const PeerManager_1 = require("../PeerManager");
|
|
@@ -26,19 +25,17 @@ class StoreManager {
|
|
|
26
25
|
this.config.rpcCommunicator.registerRpcMethod(DhtRpc_1.StoreDataRequest, DhtRpc_1.StoreDataResponse, 'storeData', (request) => rpcLocal.storeData(request));
|
|
27
26
|
this.config.rpcCommunicator.registerRpcNotification(DhtRpc_1.ReplicateDataRequest, 'replicateData', (request, context) => rpcLocal.replicateData(request, context));
|
|
28
27
|
}
|
|
29
|
-
|
|
30
|
-
for (const
|
|
31
|
-
this.replicateAndUpdateStaleState(
|
|
28
|
+
onContactAdded(peerDescriptor) {
|
|
29
|
+
for (const key of this.config.localDataStore.keys()) {
|
|
30
|
+
this.replicateAndUpdateStaleState(key, peerDescriptor);
|
|
32
31
|
}
|
|
33
32
|
}
|
|
34
|
-
replicateAndUpdateStaleState(
|
|
33
|
+
replicateAndUpdateStaleState(key, newNode) {
|
|
35
34
|
const newNodeId = (0, identifiers_1.getNodeIdFromPeerDescriptor)(newNode);
|
|
36
|
-
const
|
|
37
|
-
// TODO use config option or named constant?
|
|
38
|
-
const closestToData = this.config.getClosestNeighborsTo(key, 10);
|
|
35
|
+
const closestToData = this.config.getClosestNeighborsTo(key, this.config.redundancyFactor);
|
|
39
36
|
const sortedList = new SortedContactList_1.SortedContactList({
|
|
40
37
|
referenceId: key,
|
|
41
|
-
maxSize:
|
|
38
|
+
maxSize: this.config.redundancyFactor,
|
|
42
39
|
allowToContainReferenceId: true,
|
|
43
40
|
emitEvents: false
|
|
44
41
|
});
|
|
@@ -51,19 +48,15 @@ class StoreManager {
|
|
|
51
48
|
const selfIsPrimaryStorer = (sortedList.getClosestContactId() === (0, identifiers_1.getNodeIdFromPeerDescriptor)(this.config.localPeerDescriptor));
|
|
52
49
|
if (selfIsPrimaryStorer) {
|
|
53
50
|
sortedList.addContact(new Contact_1.Contact(newNode));
|
|
54
|
-
|
|
55
|
-
// findIndex should never return -1 here because we just added the new node to the list
|
|
56
|
-
const index = (0, lodash_1.findIndex)(sorted, (nodeId) => (nodeId === newNodeId));
|
|
57
|
-
// if new node is within the storageRedundancyFactor closest nodes to the data
|
|
58
|
-
// do replicate data to it
|
|
59
|
-
if (index < this.config.redundancyFactor) {
|
|
51
|
+
if (sortedList.getContact(newNodeId) !== undefined) {
|
|
60
52
|
setImmediate(async () => {
|
|
61
|
-
|
|
53
|
+
const dataEntries = Array.from(this.config.localDataStore.values(key));
|
|
54
|
+
await Promise.all(dataEntries.map(async (dataEntry) => this.replicateDataToContact(dataEntry, newNode)));
|
|
62
55
|
});
|
|
63
56
|
}
|
|
64
57
|
}
|
|
65
58
|
else if (!this.selfIsWithinRedundancyFactor(key)) {
|
|
66
|
-
this.config.localDataStore.
|
|
59
|
+
this.config.localDataStore.setAllEntriesAsStale(key);
|
|
67
60
|
}
|
|
68
61
|
}
|
|
69
62
|
async replicateDataToContact(dataEntry, contact) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreManager.js","sourceRoot":"","sources":["../../../../src/dht/store/StoreManager.ts"],"names":[],"mappings":";;;AAAA,mEAG+C;AAK/C,0CAA2D;AAG3D,qEAAiE;AACjE,oEAAgE;AAChE,gDAA4C;AAE5C,
|
|
1
|
+
{"version":3,"file":"StoreManager.js","sourceRoot":"","sources":["../../../../src/dht/store/StoreManager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@streamr/dht",
|
|
3
|
-
"version": "100.0.0-testnet-three.
|
|
3
|
+
"version": "100.0.0-testnet-three.4",
|
|
4
4
|
"description": "Streamr Network DHT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@protobuf-ts/runtime": "^2.8.2",
|
|
32
32
|
"@protobuf-ts/runtime-rpc": "^2.8.2",
|
|
33
|
-
"@streamr/autocertifier-client": "100.0.0-testnet-three.
|
|
34
|
-
"@streamr/proto-rpc": "100.0.0-testnet-three.
|
|
35
|
-
"@streamr/utils": "100.0.0-testnet-three.
|
|
33
|
+
"@streamr/autocertifier-client": "100.0.0-testnet-three.4",
|
|
34
|
+
"@streamr/proto-rpc": "100.0.0-testnet-three.4",
|
|
35
|
+
"@streamr/utils": "100.0.0-testnet-three.4",
|
|
36
36
|
"eventemitter3": "^5.0.0",
|
|
37
37
|
"heap": "^0.2.6",
|
|
38
38
|
"ipaddr.js": "^2.0.1",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@streamr/browser-test-runner": "^0.0.1",
|
|
47
|
-
"@streamr/test-utils": "100.0.0-testnet-three.
|
|
47
|
+
"@streamr/test-utils": "100.0.0-testnet-three.4",
|
|
48
48
|
"@types/express": "^4.17.21",
|
|
49
49
|
"@types/heap": "^0.2.34",
|
|
50
50
|
"@types/k-bucket": "^5.0.1",
|
|
@@ -153,8 +153,15 @@ export class ConnectionManager extends EventEmitter<TransportEvents> implements
|
|
|
153
153
|
allowToContainReferenceId: false,
|
|
154
154
|
emitEvents: false
|
|
155
155
|
})
|
|
156
|
-
this.connections.forEach((connection) => {
|
|
157
|
-
|
|
156
|
+
this.connections.forEach((connection, key) => {
|
|
157
|
+
// TODO: Investigate why multiple invalid WS client connections to the same
|
|
158
|
+
// server with a different nodeId can remain in the this.connections map.
|
|
159
|
+
// Seems to only happen if the ConnectionManager acting as client is not running a WS server itself.
|
|
160
|
+
if (connection.getPeerDescriptor() !== undefined && !this.hasConnection(getNodeIdFromPeerDescriptor(connection.getPeerDescriptor()!))) {
|
|
161
|
+
logger.trace(`Attempting to disconnect a hanging connection to ${getNodeIdFromPeerDescriptor(connection.getPeerDescriptor()!)}`)
|
|
162
|
+
connection.close(false).catch(() => {})
|
|
163
|
+
this.connections.delete(key)
|
|
164
|
+
} else if (!this.locks.isLocked(connection.getNodeId()) && Date.now() - connection.getLastUsed() > lastUsedLimit) {
|
|
158
165
|
logger.trace('disconnecting in timeout interval: ' + getNodeIdOrUnknownFromPeerDescriptor(connection.getPeerDescriptor()))
|
|
159
166
|
disconnectionCandidates.addContact(connection)
|
|
160
167
|
}
|
|
@@ -11,6 +11,8 @@ import { ServerWebsocket } from './websocket/ServerWebsocket'
|
|
|
11
11
|
import { connectivityMethodToWebsocketUrl } from './websocket/WebsocketConnector'
|
|
12
12
|
import { version as localVersion } from '../../package.json'
|
|
13
13
|
|
|
14
|
+
export const DISABLE_CONNECTIVITY_PROBE = 0
|
|
15
|
+
|
|
14
16
|
const logger = new Logger(module)
|
|
15
17
|
|
|
16
18
|
export const attachConnectivityRequestHandler = (connectionToListenTo: ServerWebsocket): void => {
|
|
@@ -34,10 +36,36 @@ export const attachConnectivityRequestHandler = (connectionToListenTo: ServerWeb
|
|
|
34
36
|
}
|
|
35
37
|
|
|
36
38
|
const handleIncomingConnectivityRequest = async (connection: ServerWebsocket, connectivityRequest: ConnectivityRequest): Promise<void> => {
|
|
37
|
-
let outgoingConnection: IConnection | undefined
|
|
38
|
-
let connectivityResponseMessage: ConnectivityResponse | undefined
|
|
39
39
|
const host = connectivityRequest.host ?? connection.getRemoteAddress()
|
|
40
40
|
const ipAddress = connection.getRemoteIp()
|
|
41
|
+
let connectivityResponse: ConnectivityResponse
|
|
42
|
+
if (connectivityRequest.port !== DISABLE_CONNECTIVITY_PROBE) {
|
|
43
|
+
connectivityResponse = await connectivityProbe(connectivityRequest, ipAddress, host)
|
|
44
|
+
} else {
|
|
45
|
+
logger.trace('ConnectivityRequest port is 0, replying without connectivityProbe')
|
|
46
|
+
connectivityResponse = {
|
|
47
|
+
host,
|
|
48
|
+
natType: NatType.UNKNOWN,
|
|
49
|
+
ipAddress: ipv4ToNumber(ipAddress),
|
|
50
|
+
version: localVersion
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const msg: Message = {
|
|
54
|
+
serviceId: CONNECTIVITY_CHECKER_SERVICE_ID,
|
|
55
|
+
messageType: MessageType.CONNECTIVITY_RESPONSE,
|
|
56
|
+
messageId: v4(),
|
|
57
|
+
body: {
|
|
58
|
+
oneofKind: 'connectivityResponse',
|
|
59
|
+
connectivityResponse
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
connection.send(Message.toBinary(msg))
|
|
63
|
+
logger.trace('ConnectivityResponse sent: ' + JSON.stringify(Message.toJson(msg)))
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const connectivityProbe = async (connectivityRequest: ConnectivityRequest, ipAddress: string, host: string): Promise<ConnectivityResponse> => {
|
|
67
|
+
let outgoingConnection: IConnection | undefined
|
|
68
|
+
let connectivityResponseMessage: ConnectivityResponse
|
|
41
69
|
try {
|
|
42
70
|
const wsServerInfo = {
|
|
43
71
|
host,
|
|
@@ -50,6 +78,14 @@ const handleIncomingConnectivityRequest = async (connection: ServerWebsocket, co
|
|
|
50
78
|
url,
|
|
51
79
|
selfSigned: connectivityRequest.selfSigned
|
|
52
80
|
})
|
|
81
|
+
logger.trace('Connectivity test produced positive result, communicating reply to the requester ' + host + ':' + connectivityRequest.port)
|
|
82
|
+
connectivityResponseMessage = {
|
|
83
|
+
host,
|
|
84
|
+
natType: NatType.OPEN_INTERNET,
|
|
85
|
+
websocket: { host, port: connectivityRequest.port, tls: connectivityRequest.tls },
|
|
86
|
+
ipAddress: ipv4ToNumber(ipAddress),
|
|
87
|
+
version: localVersion
|
|
88
|
+
}
|
|
53
89
|
} catch (err) {
|
|
54
90
|
logger.debug('error', { err })
|
|
55
91
|
connectivityResponseMessage = {
|
|
@@ -62,25 +98,6 @@ const handleIncomingConnectivityRequest = async (connection: ServerWebsocket, co
|
|
|
62
98
|
if (outgoingConnection) {
|
|
63
99
|
// TODO should we have some handling for this floating promise?
|
|
64
100
|
outgoingConnection.close(false)
|
|
65
|
-
logger.trace('Connectivity test produced positive result, communicating reply to the requester ' + host + ':' + connectivityRequest.port)
|
|
66
|
-
|
|
67
|
-
connectivityResponseMessage = {
|
|
68
|
-
host,
|
|
69
|
-
natType: NatType.OPEN_INTERNET,
|
|
70
|
-
websocket: { host, port: connectivityRequest.port, tls: connectivityRequest.tls },
|
|
71
|
-
ipAddress: ipv4ToNumber(ipAddress),
|
|
72
|
-
version: localVersion
|
|
73
|
-
}
|
|
74
101
|
}
|
|
75
|
-
|
|
76
|
-
serviceId: CONNECTIVITY_CHECKER_SERVICE_ID,
|
|
77
|
-
messageType: MessageType.CONNECTIVITY_RESPONSE,
|
|
78
|
-
messageId: v4(),
|
|
79
|
-
body: {
|
|
80
|
-
oneofKind: 'connectivityResponse',
|
|
81
|
-
connectivityResponse: connectivityResponseMessage!
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
connection.send(Message.toBinary(msg))
|
|
85
|
-
logger.trace('ConnectivityResponse sent: ' + JSON.stringify(Message.toJson(msg)))
|
|
102
|
+
return connectivityResponseMessage
|
|
86
103
|
}
|
|
@@ -25,7 +25,7 @@ import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
|
|
|
25
25
|
import { expectedConnectionType } from '../../helpers/Connectivity'
|
|
26
26
|
import { WebsocketServerStartError } from '../../helpers/errors'
|
|
27
27
|
import { AutoCertifierClientFacade } from './AutoCertifierClientFacade'
|
|
28
|
-
import { attachConnectivityRequestHandler } from '../connectivityRequestHandler'
|
|
28
|
+
import { DISABLE_CONNECTIVITY_PROBE, attachConnectivityRequestHandler } from '../connectivityRequestHandler'
|
|
29
29
|
import * as Err from '../../helpers/errors'
|
|
30
30
|
import { Empty } from '../../proto/google/protobuf/empty'
|
|
31
31
|
import { DhtAddress, areEqualPeerDescriptors, getNodeIdFromPeerDescriptor } from '../../identifiers'
|
|
@@ -41,7 +41,6 @@ export const connectivityMethodToWebsocketUrl = (ws: ConnectivityMethod, action?
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
const ENTRY_POINT_CONNECTION_ATTEMPTS = 5
|
|
44
|
-
|
|
45
44
|
export interface WebsocketConnectorConfig {
|
|
46
45
|
transport: ITransport
|
|
47
46
|
onNewConnection: (connection: ManagedConnection) => boolean
|
|
@@ -170,47 +169,44 @@ export class WebsocketConnector {
|
|
|
170
169
|
}
|
|
171
170
|
|
|
172
171
|
public async checkConnectivity(selfSigned: boolean): Promise<ConnectivityResponse> {
|
|
173
|
-
// TODO: this could throw
|
|
174
|
-
const noServerConnectivityResponse: ConnectivityResponse = {
|
|
175
|
-
host: '127.0.0.1',
|
|
176
|
-
natType: NatType.UNKNOWN,
|
|
177
|
-
ipAddress: ipv4ToNumber('127.0.0.1'),
|
|
178
|
-
version: localVersion
|
|
179
|
-
}
|
|
172
|
+
// TODO: this could throw?
|
|
180
173
|
if (this.abortController.signal.aborted) {
|
|
181
|
-
return
|
|
174
|
+
return {
|
|
175
|
+
host: '127.0.0.1',
|
|
176
|
+
natType: NatType.UNKNOWN,
|
|
177
|
+
ipAddress: ipv4ToNumber('127.0.0.1'),
|
|
178
|
+
version: localVersion
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (!this.config.entrypoints || this.config.entrypoints.length === 0) {
|
|
182
|
+
// return connectivity info given in config
|
|
183
|
+
return {
|
|
184
|
+
host: this.host!,
|
|
185
|
+
natType: NatType.OPEN_INTERNET,
|
|
186
|
+
websocket: {
|
|
187
|
+
host: this.host!,
|
|
188
|
+
port: this.selectedPort!,
|
|
189
|
+
tls: this.config.tlsCertificate !== undefined
|
|
190
|
+
},
|
|
191
|
+
// TODO: Resolve the given host name or or use as is if IP was given.
|
|
192
|
+
ipAddress: ipv4ToNumber('127.0.0.1'),
|
|
193
|
+
version: localVersion
|
|
194
|
+
}
|
|
182
195
|
}
|
|
183
196
|
for (const reattempt of range(ENTRY_POINT_CONNECTION_ATTEMPTS)) {
|
|
184
197
|
const entryPoint = sample(this.config.entrypoints)!
|
|
185
198
|
try {
|
|
186
|
-
|
|
187
|
-
|
|
199
|
+
// Do real connectivity checking
|
|
200
|
+
const connectivityRequest = {
|
|
201
|
+
port: this.selectedPort ?? DISABLE_CONNECTIVITY_PROBE,
|
|
202
|
+
host: this.host,
|
|
203
|
+
tls: this.websocketServer ? this.config.serverEnableTls : false,
|
|
204
|
+
selfSigned
|
|
205
|
+
}
|
|
206
|
+
if (!this.abortController.signal.aborted) {
|
|
207
|
+
return await sendConnectivityRequest(connectivityRequest, entryPoint, localVersion)
|
|
188
208
|
} else {
|
|
189
|
-
|
|
190
|
-
// return connectivity info given in config
|
|
191
|
-
const preconfiguredConnectivityResponse: ConnectivityResponse = {
|
|
192
|
-
host: this.host!,
|
|
193
|
-
natType: NatType.OPEN_INTERNET,
|
|
194
|
-
websocket: { host: this.host!, port: this.selectedPort!, tls: this.config.tlsCertificate !== undefined },
|
|
195
|
-
// TODO: maybe do a DNS lookup here?
|
|
196
|
-
ipAddress: ipv4ToNumber('127.0.0.1'),
|
|
197
|
-
version: localVersion
|
|
198
|
-
}
|
|
199
|
-
return preconfiguredConnectivityResponse
|
|
200
|
-
} else {
|
|
201
|
-
// Do real connectivity checking
|
|
202
|
-
const connectivityRequest = {
|
|
203
|
-
port: this.selectedPort!,
|
|
204
|
-
host: this.host,
|
|
205
|
-
tls: this.config.serverEnableTls,
|
|
206
|
-
selfSigned
|
|
207
|
-
}
|
|
208
|
-
if (!this.abortController.signal.aborted) {
|
|
209
|
-
return await sendConnectivityRequest(connectivityRequest, entryPoint, localVersion)
|
|
210
|
-
} else {
|
|
211
|
-
throw new Err.ConnectionFailed('ConnectivityChecker is destroyed')
|
|
212
|
-
}
|
|
213
|
-
}
|
|
209
|
+
throw new Err.ConnectionFailed('ConnectivityChecker is destroyed')
|
|
214
210
|
}
|
|
215
211
|
} catch (err) {
|
|
216
212
|
if (reattempt < ENTRY_POINT_CONNECTION_ATTEMPTS) {
|
package/src/dht/DhtNode.ts
CHANGED
|
@@ -48,9 +48,9 @@ import { StoreRpcRemote } from './store/StoreRpcRemote'
|
|
|
48
48
|
import { createPeerDescriptor } from '../helpers/createPeerDescriptor'
|
|
49
49
|
|
|
50
50
|
export interface DhtNodeEvents {
|
|
51
|
-
|
|
51
|
+
contactAdded: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
|
|
52
52
|
contactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
|
|
53
|
-
|
|
53
|
+
randomContactAdded: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
|
|
54
54
|
randomContactRemoved: (peerDescriptor: PeerDescriptor, closestPeers: PeerDescriptor[]) => void
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -157,6 +157,11 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
157
157
|
throw new Error(`Invalid nodeId, the length of the nodeId should be ${expectedNodeIdLength}`)
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
|
+
if (this.config.peerDescriptor !== undefined) {
|
|
161
|
+
if (this.config.peerDescriptor.nodeId.length !== KADEMLIA_ID_LENGTH_IN_BYTES) {
|
|
162
|
+
throw new Error(`Invalid peerDescriptor, the length of the nodeId should be ${KADEMLIA_ID_LENGTH_IN_BYTES} bytes`)
|
|
163
|
+
}
|
|
164
|
+
}
|
|
160
165
|
}
|
|
161
166
|
|
|
162
167
|
public async start(): Promise<void> {
|
|
@@ -244,7 +249,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
244
249
|
rpcCommunicator: this.rpcCommunicator,
|
|
245
250
|
connections: this.peerManager!.connections,
|
|
246
251
|
localPeerDescriptor: this.localPeerDescriptor!,
|
|
247
|
-
addContact: (contact: PeerDescriptor, setActive?: boolean) => this.peerManager!.
|
|
252
|
+
addContact: (contact: PeerDescriptor, setActive?: boolean) => this.peerManager!.addContact([contact], setActive),
|
|
248
253
|
connectionManager: this.connectionManager
|
|
249
254
|
})
|
|
250
255
|
this.recursiveOperationManager = new RecursiveOperationManager({
|
|
@@ -254,7 +259,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
254
259
|
connections: this.peerManager!.connections,
|
|
255
260
|
localPeerDescriptor: this.localPeerDescriptor!,
|
|
256
261
|
serviceId: this.config.serviceId,
|
|
257
|
-
addContact: (contact: PeerDescriptor) => this.peerManager!.
|
|
262
|
+
addContact: (contact: PeerDescriptor) => this.peerManager!.addContact([contact]),
|
|
258
263
|
localDataStore: this.localDataStore
|
|
259
264
|
})
|
|
260
265
|
this.storeManager = new StoreManager({
|
|
@@ -278,8 +283,8 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
278
283
|
)
|
|
279
284
|
}
|
|
280
285
|
})
|
|
281
|
-
this.on('
|
|
282
|
-
this.storeManager!.
|
|
286
|
+
this.on('contactAdded', (peerDescriptor: PeerDescriptor) => {
|
|
287
|
+
this.storeManager!.onContactAdded(peerDescriptor)
|
|
283
288
|
})
|
|
284
289
|
this.bindRpcLocalMethods()
|
|
285
290
|
}
|
|
@@ -297,14 +302,14 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
297
302
|
this.peerManager.on('contactRemoved', (peerDescriptor: PeerDescriptor, activeContacts: PeerDescriptor[]) => {
|
|
298
303
|
this.emit('contactRemoved', peerDescriptor, activeContacts)
|
|
299
304
|
})
|
|
300
|
-
this.peerManager.on('
|
|
301
|
-
this.emit('
|
|
305
|
+
this.peerManager.on('contactAdded', (peerDescriptor: PeerDescriptor, activeContacts: PeerDescriptor[]) =>
|
|
306
|
+
this.emit('contactAdded', peerDescriptor, activeContacts)
|
|
302
307
|
)
|
|
303
308
|
this.peerManager.on('randomContactRemoved', (peerDescriptor: PeerDescriptor, activeContacts: PeerDescriptor[]) =>
|
|
304
309
|
this.emit('randomContactRemoved', peerDescriptor, activeContacts)
|
|
305
310
|
)
|
|
306
|
-
this.peerManager.on('
|
|
307
|
-
this.emit('
|
|
311
|
+
this.peerManager.on('randomContactAdded', (peerDescriptor: PeerDescriptor, activeContacts: PeerDescriptor[]) =>
|
|
312
|
+
this.emit('randomContactAdded', peerDescriptor, activeContacts)
|
|
308
313
|
)
|
|
309
314
|
this.peerManager.on('kBucketEmpty', () => {
|
|
310
315
|
if (!this.peerDiscovery!.isJoinOngoing()
|
|
@@ -320,15 +325,15 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
320
325
|
}
|
|
321
326
|
})
|
|
322
327
|
this.transport!.on('connected', (peerDescriptor: PeerDescriptor) => {
|
|
323
|
-
this.peerManager!.
|
|
328
|
+
this.peerManager!.onContactConnected(peerDescriptor)
|
|
324
329
|
this.emit('connected', peerDescriptor)
|
|
325
330
|
})
|
|
326
331
|
this.transport!.on('disconnected', (peerDescriptor: PeerDescriptor, gracefulLeave: boolean) => {
|
|
327
|
-
this.peerManager!.
|
|
332
|
+
this.peerManager!.onContactDisconnected(getNodeIdFromPeerDescriptor(peerDescriptor), gracefulLeave)
|
|
328
333
|
this.emit('disconnected', peerDescriptor, gracefulLeave)
|
|
329
334
|
})
|
|
330
335
|
this.transport!.getConnections().forEach((peer) => {
|
|
331
|
-
this.peerManager!.
|
|
336
|
+
this.peerManager!.onContactConnected(peer)
|
|
332
337
|
})
|
|
333
338
|
}
|
|
334
339
|
|
|
@@ -342,7 +347,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
342
347
|
return this.peerManager!.getClosestNeighborsTo(nodeId, limit)
|
|
343
348
|
.map((dhtPeer: DhtNodeRpcRemote) => dhtPeer.getPeerDescriptor())
|
|
344
349
|
},
|
|
345
|
-
|
|
350
|
+
addContact: (contact: PeerDescriptor) => this.peerManager!.addContact([contact]),
|
|
346
351
|
removeContact: (nodeId: DhtAddress) => this.removeContact(nodeId)
|
|
347
352
|
})
|
|
348
353
|
this.rpcCommunicator!.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers',
|
|
@@ -412,7 +417,7 @@ export class DhtNode extends EventEmitter<Events> implements ITransport {
|
|
|
412
417
|
if (!this.started) { // the stopped state is checked in PeerManager
|
|
413
418
|
return
|
|
414
419
|
}
|
|
415
|
-
this.peerManager!.
|
|
420
|
+
this.peerManager!.removeContact(nodeId)
|
|
416
421
|
}
|
|
417
422
|
|
|
418
423
|
public async send(msg: Message): Promise<void> {
|
|
@@ -15,7 +15,7 @@ import { DhtAddress, getDhtAddressFromRaw, getNodeIdFromPeerDescriptor } from '.
|
|
|
15
15
|
interface DhtNodeRpcLocalConfig {
|
|
16
16
|
peerDiscoveryQueryBatchSize: number
|
|
17
17
|
getClosestPeersTo: (nodeId: DhtAddress, limit: number) => PeerDescriptor[]
|
|
18
|
-
|
|
18
|
+
addContact: (contact: PeerDescriptor) => void
|
|
19
19
|
removeContact: (nodeId: DhtAddress) => void
|
|
20
20
|
}
|
|
21
21
|
|
|
@@ -30,7 +30,7 @@ export class DhtNodeRpcLocal implements IDhtNodeRpc {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
async getClosestPeers(request: ClosestPeersRequest, context: ServerCallContext): Promise<ClosestPeersResponse> {
|
|
33
|
-
this.config.
|
|
33
|
+
this.config.addContact((context as DhtCallContext).incomingSourceDescriptor!)
|
|
34
34
|
const response = {
|
|
35
35
|
peers: this.config.getClosestPeersTo(getDhtAddressFromRaw(request.nodeId), this.config.peerDiscoveryQueryBatchSize),
|
|
36
36
|
requestId: request.requestId
|
|
@@ -41,7 +41,7 @@ export class DhtNodeRpcLocal implements IDhtNodeRpc {
|
|
|
41
41
|
async ping(request: PingRequest, context: ServerCallContext): Promise<PingResponse> {
|
|
42
42
|
logger.trace('received ping request: ' + getNodeIdFromPeerDescriptor((context as DhtCallContext).incomingSourceDescriptor!))
|
|
43
43
|
setImmediate(() => {
|
|
44
|
-
this.config.
|
|
44
|
+
this.config.addContact((context as DhtCallContext).incomingSourceDescriptor!)
|
|
45
45
|
})
|
|
46
46
|
const response: PingResponse = {
|
|
47
47
|
requestId: request.requestId
|