Do port null check inside rpc call

This commit is contained in:
Beaudan 2019-06-04 14:01:51 +10:00
parent 52c191fc94
commit eea2b8e6a7
6 changed files with 35 additions and 43 deletions

View file

@ -4,7 +4,6 @@
"cdnUrl": "random.snode", "cdnUrl": "random.snode",
"contentProxyUrl": "random.snode", "contentProxyUrl": "random.snode",
"localServerPort": "8081", "localServerPort": "8081",
"snodeServerPort": "8080",
"defaultPoWDifficulty": "100", "defaultPoWDifficulty": "100",
"disableAutoUpdate": false, "disableAutoUpdate": false,
"updatesUrl": "https://updates2.signal.org/desktop", "updatesUrl": "https://updates2.signal.org/desktop",

View file

@ -43,9 +43,7 @@ const trySendP2p = async (pubKey, data64, isPing, messageEventData) => {
return false; return false;
} }
try { try {
const port = p2pDetails.port ? `:${p2pDetails.port}` : ''; await rpc(p2pDetails.address, p2pDetails.port, 'store', {
await rpc(p2pDetails.address, port, 'store', {
data: data64, data: data64,
}); });
lokiP2pAPI.setContactOnline(pubKey); lokiP2pAPI.setContactOnline(pubKey);
@ -68,9 +66,30 @@ const trySendP2p = async (pubKey, data64, isPing, messageEventData) => {
} }
}; };
const retrieveNextMessages = async (nodeUrl, nodeData, ourKey) => {
const params = {
pubKey: ourKey,
lastHash: nodeData.lastHash || '',
};
const options = {
timeout: 40000,
headers: {
[LOKI_LONGPOLL_HEADER]: true,
},
};
const result = await rpc(
`https://${nodeUrl}`,
nodeData.port,
'retrieve',
params,
options
);
return result.messages || [];
}
class LokiMessageAPI { class LokiMessageAPI {
constructor({ snodeServerPort }) { constructor() {
this.snodeServerPort = snodeServerPort ? `:${snodeServerPort}` : '';
this.jobQueue = new window.JobQueue(); this.jobQueue = new window.JobQueue();
this.sendingSwarmNodes = {}; this.sendingSwarmNodes = {};
} }
@ -208,46 +227,24 @@ class LokiMessageAPI {
return false; return false;
} }
async retrieveNextMessages(nodeUrl, nodeData, ourKey) {
const params = {
pubKey: ourKey,
lastHash: nodeData.lastHash || '',
};
const options = {
timeout: 40000,
headers: {
[LOKI_LONGPOLL_HEADER]: true,
},
};
const result = await rpc(
`https://${nodeUrl}`,
this.snodeServerPort,
'retrieve',
params,
options
);
return result.messages || [];
}
async openConnection(callback) { async openConnection(callback) {
const ourKey = window.textsecure.storage.user.getNumber(); const ourKey = window.textsecure.storage.user.getNumber();
while (!_.isEmpty(this.ourSwarmNodes)) { while (!_.isEmpty(this.ourSwarmNodes)) {
const url = Object.keys(this.ourSwarmNodes)[0]; const address = Object.keys(this.ourSwarmNodes)[0];
const nodeData = this.ourSwarmNodes[url]; const nodeData = this.ourSwarmNodes[address];
delete this.ourSwarmNodes[url]; delete this.ourSwarmNodes[address];
let successiveFailures = 0; let successiveFailures = 0;
while (successiveFailures < 3) { while (successiveFailures < 3) {
await sleepFor(successiveFailures * 1000); await sleepFor(successiveFailures * 1000);
try { try {
let messages = await this.retrieveNextMessages(url, nodeData, ourKey); let messages = await retrieveNextMessages(address, nodeData, ourKey);
successiveFailures = 0; successiveFailures = 0;
if (messages.length) { if (messages.length) {
const lastMessage = _.last(messages); const lastMessage = _.last(messages);
nodeData.lashHash = lastMessage.hash; nodeData.lashHash = lastMessage.hash;
lokiSnodeAPI.updateLastHash( lokiSnodeAPI.updateLastHash(
url, address,
lastMessage.hash, lastMessage.hash,
lastMessage.expiration lastMessage.expiration
); );

View file

@ -103,7 +103,8 @@ const fetch = async (url, options = {}) => {
// Wrapper for a JSON RPC request // Wrapper for a JSON RPC request
const rpc = (address, port, method, params, options = {}) => { const rpc = (address, port, method, params, options = {}) => {
const headers = options.headers || {}; const headers = options.headers || {};
const url = `${address}${port}${endpointBase}`; const portString = port ? `:${port}` : '';
const url = `${address}${portString}${endpointBase}`;
const body = { const body = {
method, method,
params, params,

View file

@ -32,13 +32,13 @@ const resolveCname = url =>
}); });
class LokiSnodeAPI { class LokiSnodeAPI {
constructor({ serverUrl, localUrl, snodeServerPort }) { constructor({ serverUrl, localUrl }) {
if (!is.string(serverUrl)) { if (!is.string(serverUrl)) {
throw new Error('WebAPI.initialize: Invalid server url'); throw new Error('WebAPI.initialize: Invalid server url');
} }
this.serverUrl = serverUrl; this.serverUrl = serverUrl;
this.localUrl = localUrl; this.localUrl = localUrl;
this.snodeServerPort = snodeServerPort ? `:${snodeServerPort}` : ''; this.randomSnodePool = [];
this.swarmsPendingReplenish = {}; this.swarmsPendingReplenish = {};
this.ourSwarmNodes = {}; this.ourSwarmNodes = {};
this.contactSwarmNodes = {}; this.contactSwarmNodes = {};
@ -60,7 +60,7 @@ class LokiSnodeAPI {
} }
} }
async getMyLokiAddress() { getMyLokiAddress() {
/* resolve our local loki address */ /* resolve our local loki address */
return resolveCname(this.localUrl); return resolveCname(this.localUrl);
} }

View file

@ -154,7 +154,6 @@ function prepareURL(pathSegments, moreKeys) {
serverUrl: config.get('serverUrl'), serverUrl: config.get('serverUrl'),
localUrl: config.get('localUrl'), localUrl: config.get('localUrl'),
cdnUrl: config.get('cdnUrl'), cdnUrl: config.get('cdnUrl'),
snodeServerPort: config.get('snodeServerPort'),
localServerPort: config.get('localServerPort'), localServerPort: config.get('localServerPort'),
defaultPoWDifficulty: config.get('defaultPoWDifficulty'), defaultPoWDifficulty: config.get('defaultPoWDifficulty'),
certificateAuthority: config.get('certificateAuthority'), certificateAuthority: config.get('certificateAuthority'),

View file

@ -293,17 +293,13 @@ const LokiSnodeAPI = require('./js/modules/loki_snode_api');
window.lokiSnodeAPI = new LokiSnodeAPI({ window.lokiSnodeAPI = new LokiSnodeAPI({
serverUrl: config.serverUrl, serverUrl: config.serverUrl,
localUrl: config.localUrl, localUrl: config.localUrl,
snodeServerPort: config.snodeServerPort,
}); });
window.LokiP2pAPI = require('./js/modules/loki_p2p_api'); window.LokiP2pAPI = require('./js/modules/loki_p2p_api');
const LokiMessageAPI = require('./js/modules/loki_message_api'); const LokiMessageAPI = require('./js/modules/loki_message_api');
window.lokiMessageAPI = new LokiMessageAPI({ window.lokiMessageAPI = new LokiMessageAPI();
url: config.serverUrl,
snodeServerPort: config.snodeServerPort,
});
const LocalLokiServer = require('./libloki/modules/local_loki_server'); const LocalLokiServer = require('./libloki/modules/local_loki_server');