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",
"localServerPort": "8081",
"defaultPoWDifficulty": "100",
"seedNodeUrl": "3.104.19.14",
"seedNodePort": "22023",
"seedNodeList": [
{
"ip": "3.104.19.14",
"port": "22023"
},
{
"ip": "13.238.53.205",
"port": "38157"
},
{
"ip": "imaginary.stream",
"port": "38157"
}
],
"disableAutoUpdate": false,
"updatesUrl": "https://updates2.signal.org/desktop",
"updatesPublicKey":

@ -119,8 +119,15 @@ class LokiMessageAPI {
data: data64,
};
const promises = [];
let completedConnections = 0;
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
@ -142,7 +149,6 @@ class LokiMessageAPI {
let success;
try {
// eslint-disable-next-line more/no-then
Promise.all(promises).then(delete this.sendingSwarmNodes[timestamp]);
success = await firstTrue(promises);
} catch (e) {
if (e instanceof textsecure.WrongDifficultyError) {

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

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

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

Loading…
Cancel
Save