Skip to content

Commit 12b5c7f

Browse files
authored
fixed bug that only local address would be shown in multihost discover (#2707)
- except when used with debug flag - closes #2706
1 parent e7bcd89 commit 12b5c7f

File tree

3 files changed

+107
-109
lines changed

3 files changed

+107
-109
lines changed

packages/cli/src/lib/setup.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2671,15 +2671,14 @@ async function processCommand(
26712671
mh.status();
26722672
return void callback();
26732673
} else if (cmd === 'b' || cmd === 'browse') {
2674-
mh.browse((err: any, list: any) => {
2675-
if (err) {
2676-
console.error(err);
2677-
return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);
2678-
} else {
2679-
mh.showHosts(list);
2680-
return void callback();
2681-
}
2682-
});
2674+
try {
2675+
const list = await mh.browse();
2676+
mh.showHosts(list);
2677+
return void callback();
2678+
} catch (e) {
2679+
console.error(e.message);
2680+
return void callback(EXIT_CODES.CANNOT_CREATE_USER_OR_GROUP);
2681+
}
26832682
} else if (cmd === 'e' || cmd === 'enable') {
26842683
mh.enable(true, async (err: any) => {
26852684
if (err) {

packages/cli/src/lib/setup/multihostClient.ts

Lines changed: 43 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -133,53 +133,55 @@ export class MHClient {
133133
* Start MH browsing for server
134134
*
135135
* @param timeout timeout to stop browsing
136-
* @param isDebug
137-
* @param callback
136+
* @param isDebug debug will also show local addresses
138137
*/
139-
browse(
140-
timeout: number,
141-
isDebug: boolean,
142-
callback: (err: Error | undefined, res: BrowseResultEntry[]) => void
143-
): void {
138+
browse(timeout: number, isDebug: boolean): Promise<BrowseResultEntry[]> {
144139
const result: BrowseResultEntry[] = [];
145140
const ownIps = tools.findIPs();
146141

147-
this.startServer(
148-
true,
149-
timeout,
150-
() => {
151-
const text = JSON.stringify({
152-
cmd: 'browse',
153-
id: ++this.id
154-
});
155-
this.server!.send(text, 0, text.length, PORT, MULTICAST_ADDR);
156-
},
157-
(msg, rinfo) => {
158-
// ignore own answers
159-
if (isDebug || (tools.isLocalAddress(rinfo.address) && !ownIps.includes(rinfo.address))) {
160-
if (msg.result === 'not authenticated') {
161-
result.push({
162-
ip: rinfo.address,
163-
hostname: rinfo.address,
164-
info: 'authentication required',
165-
auth: msg.auth
166-
});
167-
} else if (msg.result === 'ok') {
168-
result.push(msg);
169-
} else {
170-
console.log(`Multihost discovery client: Unknown answer: ${JSON.stringify(msg)}`);
142+
return new Promise((resolve, reject) => {
143+
this.startServer(
144+
true,
145+
timeout,
146+
() => {
147+
const text = JSON.stringify({
148+
cmd: 'browse',
149+
id: ++this.id
150+
});
151+
this.server!.send(text, 0, text.length, PORT, MULTICAST_ADDR);
152+
},
153+
(msg, rinfo) => {
154+
// ignore own answers
155+
if (isDebug || (!tools.isLocalAddress(rinfo.address) && !ownIps.includes(rinfo.address))) {
156+
if (msg.result === 'not authenticated') {
157+
result.push({
158+
ip: rinfo.address,
159+
hostname: rinfo.address,
160+
info: 'authentication required',
161+
auth: msg.auth
162+
});
163+
} else if (msg.result === 'ok') {
164+
result.push(msg);
165+
} else {
166+
console.log(`Multihost discovery client: Unknown answer: ${JSON.stringify(msg)}`);
167+
}
168+
}
169+
if (isDebug) {
170+
console.log(JSON.stringify(msg));
171171
}
172-
}
173-
if (isDebug) {
174-
console.log(JSON.stringify(msg));
175-
}
176172

177-
return false;
178-
},
179-
err => {
180-
callback(err, result);
181-
}
182-
);
173+
return false;
174+
},
175+
err => {
176+
if (err) {
177+
reject(err);
178+
return;
179+
}
180+
181+
resolve(result);
182+
}
183+
);
184+
});
183185
}
184186

185187
/**

packages/cli/src/lib/setup/setupMultihost.ts

Lines changed: 56 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -74,18 +74,15 @@ export class Multihost {
7474

7575
/**
7676
* Start MH browsing
77-
*
78-
* @param callback
7977
*/
80-
browse(callback: (err?: Error | undefined, list?: BrowseResultEntry[]) => void): void {
78+
async browse(): Promise<BrowseResultEntry[]> {
8179
const mhClient = new MHClient();
82-
mhClient.browse(2_000, !!this.params.debug, (err, list) => {
83-
if (err) {
84-
callback(new Error(`Multihost discovery client: Cannot browse: ${err.message}`));
85-
} else {
86-
callback(undefined, list);
87-
}
88-
});
80+
try {
81+
const res = await mhClient.browse(2_000, !!this.params.debug);
82+
return res;
83+
} catch (e) {
84+
throw new Error(`Multihost discovery client: Cannot browse: ${e.message}`);
85+
}
8986
}
9087

9188
/**
@@ -351,11 +348,11 @@ export class Multihost {
351348
* @param pass password
352349
* @param callback
353350
*/
354-
connect(
351+
async connect(
355352
index: number | null,
356353
pass: string | null,
357354
callback: (err?: Error, list?: BrowseResultEntry[]) => void
358-
): void {
355+
): Promise<void> {
359356
if (typeof pass === 'function') {
360357
callback = pass;
361358
pass = null;
@@ -366,57 +363,57 @@ export class Multihost {
366363
}
367364

368365
const mhClient = new MHClient();
366+
let list: BrowseResultEntry[];
369367

370-
mhClient.browse(2_000, !!this.params.debug, (err, list) => {
371-
if (err) {
372-
callback(new Error(`Cannot browse: ${err.message}`));
368+
try {
369+
list = await mhClient.browse(2_000, !!this.params.debug);
370+
} catch (e) {
371+
callback(new Error(`Cannot browse: ${e.message}`));
372+
return;
373+
}
374+
375+
this.showHosts(list);
376+
377+
if (index !== null && index !== undefined && index > 0) {
378+
if (list && index < list.length + 1) {
379+
if (!pass) {
380+
callback(new Error('No password defined: please use "multihost connect <NUMBER> <PASSWORD>"'));
381+
} else {
382+
this.connectHelper(mhClient, list[index - 1].ip!, pass, callback);
383+
}
373384
} else {
374-
this.showHosts(list);
375-
376-
if (index !== null && index !== undefined && index > 0) {
377-
if (list && index < list.length + 1) {
378-
if (!pass) {
379-
callback(
380-
new Error('No password defined: please use "multihost connect <NUMBER> <PASSWORD>"')
381-
);
382-
} else {
383-
this.connectHelper(mhClient, list[index - 1].ip!, pass, callback);
384-
}
385-
} else {
386-
callback(new Error(`Invalid index: ${index}`));
387-
}
388-
} else if (list && list.length) {
389-
const rl = readline.createInterface({
390-
input: process.stdin,
391-
output: process.stdout
392-
});
393-
rl.question('Please select host [1]: ', answer => {
394-
if (answer === '' || answer === null || answer === undefined) {
395-
index = 1;
396-
}
397-
index = parseInt(answer, 10) - 1;
398-
const listEntry = list[index];
399-
if (!listEntry) {
400-
rl.close();
401-
callback(new Error(`Invalid index: ${answer}`));
402-
} else {
403-
if (listEntry.auth) {
404-
this.readPassword(password => {
405-
if (password) {
406-
this.connectHelper(mhClient, listEntry.ip!, password, callback);
407-
} else {
408-
callback(new Error('No password entered!'));
409-
}
410-
});
385+
callback(new Error(`Invalid index: ${index}`));
386+
}
387+
} else if (list && list.length) {
388+
const rl = readline.createInterface({
389+
input: process.stdin,
390+
output: process.stdout
391+
});
392+
rl.question('Please select host [1]: ', answer => {
393+
if (answer === '' || answer === null || answer === undefined) {
394+
index = 1;
395+
}
396+
index = parseInt(answer, 10) - 1;
397+
const listEntry = list[index];
398+
if (!listEntry) {
399+
rl.close();
400+
callback(new Error(`Invalid index: ${answer}`));
401+
} else {
402+
if (listEntry.auth) {
403+
this.readPassword(password => {
404+
if (password) {
405+
this.connectHelper(mhClient, listEntry.ip!, password, callback);
411406
} else {
412-
this.connectHelper(mhClient, listEntry.ip!, '', callback);
407+
callback(new Error('No password entered!'));
413408
}
414-
}
415-
});
416-
} else {
417-
callback(undefined, list);
409+
});
410+
} else {
411+
this.connectHelper(mhClient, listEntry.ip!, '', callback);
412+
}
418413
}
419-
}
420-
});
414+
});
415+
} else {
416+
callback(undefined, list);
417+
}
421418
}
422419
}

0 commit comments

Comments
 (0)