Merge pull request #325 from BeaudanBrown/multiple-seeds

Multiple seeds
pull/326/head
Beaudan Campbell-Brown 6 years ago committed by GitHub
commit bb232d9228
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -5,8 +5,20 @@
"contentProxyUrl": "random.snode", "contentProxyUrl": "random.snode",
"localServerPort": "8081", "localServerPort": "8081",
"defaultPoWDifficulty": "100", "defaultPoWDifficulty": "100",
"seedNodeUrl": "3.104.19.14", "seedNodeList": [
"seedNodePort": "22023", {
"ip": "3.104.19.14",
"port": "22023"
},
{
"ip": "13.238.53.205",
"port": "38157"
},
{
"ip": "imaginary.stream",
"port": "38157"
}
],
"disableAutoUpdate": false, "disableAutoUpdate": false,
"updatesUrl": "https://updates2.signal.org/desktop", "updatesUrl": "https://updates2.signal.org/desktop",
"updatesPublicKey": "updatesPublicKey":

@ -119,8 +119,15 @@ class LokiMessageAPI {
data: data64, data: data64,
}; };
const promises = []; const promises = [];
let completedConnections = 0;
for (let i = 0; i < numConnections; i += 1) { for (let i = 0; i < numConnections; i += 1) {
promises.push(this.openSendConnection(params)); const connectionPromise = this.openSendConnection(params).finally(() => {
completedConnections += 1;
if (completedConnections >= numConnections) {
delete this.sendingSwarmNodes[timestamp];
}
});
promises.push(connectionPromise);
} }
// Taken from https://stackoverflow.com/questions/51160260/clean-way-to-wait-for-first-true-returned-by-promise // Taken from https://stackoverflow.com/questions/51160260/clean-way-to-wait-for-first-true-returned-by-promise
@ -142,7 +149,6 @@ class LokiMessageAPI {
let success; let success;
try { try {
// eslint-disable-next-line more/no-then // eslint-disable-next-line more/no-then
Promise.all(promises).then(delete this.sendingSwarmNodes[timestamp]);
success = await firstTrue(promises); success = await firstTrue(promises);
} catch (e) { } catch (e) {
if (e instanceof textsecure.WrongDifficultyError) { if (e instanceof textsecure.WrongDifficultyError) {

@ -86,7 +86,7 @@ class LokiSnodeAPI {
]; ];
} }
async initialiseRandomPool() { async initialiseRandomPool(seedNodes = [...window.seedNodeList]) {
const params = { const params = {
limit: 20, limit: 20,
fields: { fields: {
@ -94,10 +94,11 @@ class LokiSnodeAPI {
storage_port: true, storage_port: true,
}, },
}; };
const seedNode = seedNodes.splice(Math.floor(Math.random() * seedNodes.length), 1)[0];
try { try {
const result = await rpc( const result = await rpc(
`http://${window.seedNodeUrl}`, `http://${seedNode.ip}`,
window.seedNodePort, seedNode.port,
'get_n_service_nodes', 'get_n_service_nodes',
params, params,
{}, // Options {}, // Options
@ -112,8 +113,11 @@ class LokiSnodeAPI {
port: snode.storage_port, port: snode.storage_port,
})); }));
} catch (e) { } catch (e) {
if (seedNodes.length === 0) {
throw new window.textsecure.SeedNodeError('Failed to contact seed node'); throw new window.textsecure.SeedNodeError('Failed to contact seed node');
} }
this.initialiseRandomPool(seedNodes);
}
} }
async unreachableNode(pubKey, nodeUrl) { async unreachableNode(pubKey, nodeUrl) {

@ -156,8 +156,7 @@ function prepareURL(pathSegments, moreKeys) {
cdnUrl: config.get('cdnUrl'), cdnUrl: config.get('cdnUrl'),
localServerPort: config.get('localServerPort'), localServerPort: config.get('localServerPort'),
defaultPoWDifficulty: config.get('defaultPoWDifficulty'), defaultPoWDifficulty: config.get('defaultPoWDifficulty'),
seedNodeUrl: config.get('seedNodeUrl'), seedNodeList: JSON.stringify(config.get('seedNodeList')),
seedNodePort: config.get('seedNodePort'),
certificateAuthority: config.get('certificateAuthority'), certificateAuthority: config.get('certificateAuthority'),
environment: config.environment, environment: config.environment,
node_version: process.versions.node, node_version: process.versions.node,

@ -305,8 +305,7 @@ window.WebAPI = initializeWebAPI({
proxyUrl: config.proxyUrl, proxyUrl: config.proxyUrl,
}); });
window.seedNodeUrl = config.seedNodeUrl; window.seedNodeList = JSON.parse(config.seedNodeList);
window.seedNodePort = config.seedNodePort;
const LokiSnodeAPI = require('./js/modules/loki_snode_api'); const LokiSnodeAPI = require('./js/modules/loki_snode_api');
window.lokiSnodeAPI = new LokiSnodeAPI({ window.lokiSnodeAPI = new LokiSnodeAPI({

Loading…
Cancel
Save