mirror of
https://github.com/gamedig/node-gamedig.git
synced 2024-11-17 17:25:19 +01:00
feat: Allow direct control of IP family to be returned by DNS lookup
implements #306
This commit is contained in:
parent
70ec2a45a7
commit
3c38fe48fe
4 changed files with 9 additions and 7 deletions
|
@ -5,7 +5,7 @@ const Minimist = require('minimist'),
|
|||
|
||||
const argv = Minimist(process.argv.slice(2), {
|
||||
boolean: ['pretty','debug','givenPortOnly','requestRules'],
|
||||
string: ['guildId','listenUdpPort']
|
||||
string: ['guildId','listenUdpPort','ipFamily']
|
||||
});
|
||||
|
||||
const debug = argv.debug;
|
||||
|
|
|
@ -20,10 +20,11 @@ class DnsResolver {
|
|||
/**
|
||||
* Response port will only be present if srv record was involved.
|
||||
* @param {string} host
|
||||
* @param {number} ipFamily
|
||||
* @param {string=} srvRecordPrefix
|
||||
* @returns {Promise<{address:string, port:number=}>}
|
||||
*/
|
||||
async resolve(host, srvRecordPrefix) {
|
||||
async resolve(host, ipFamily, srvRecordPrefix) {
|
||||
this.logger.debug("DNS Lookup: " + host);
|
||||
|
||||
if(this.isIp(host)) {
|
||||
|
@ -52,7 +53,7 @@ class DnsResolver {
|
|||
}
|
||||
return {
|
||||
port: srvPort,
|
||||
...await this.resolve(srvHost, srvRecordPrefix)
|
||||
...await this.resolve(srvHost, ipFamily, srvRecordPrefix)
|
||||
};
|
||||
}
|
||||
this.logger.debug("No SRV Record");
|
||||
|
@ -62,7 +63,7 @@ class DnsResolver {
|
|||
}
|
||||
|
||||
this.logger.debug("Standard Resolve: " + host);
|
||||
const dnsResult = await dnsLookupAsync(host);
|
||||
const dnsResult = await dnsLookupAsync(host, ipFamily);
|
||||
// For some reason, this sometimes returns a string address rather than an object.
|
||||
// I haven't been able to reproduce, but it's been reported on the issue tracker.
|
||||
let address;
|
||||
|
|
|
@ -5,7 +5,8 @@ const GameResolver = require('./GameResolver'),
|
|||
const defaultOptions = {
|
||||
socketTimeout: 2000,
|
||||
attemptTimeout: 10000,
|
||||
maxAttempts: 1
|
||||
maxAttempts: 1,
|
||||
ipFamily: 0
|
||||
};
|
||||
|
||||
class QueryRunner {
|
||||
|
@ -19,7 +20,7 @@ class QueryRunner {
|
|||
async run(userOptions) {
|
||||
for (const key of Object.keys(userOptions)) {
|
||||
const value = userOptions[key];
|
||||
if (['port'].includes(key)) {
|
||||
if (['port', 'ipFamily'].includes(key)) {
|
||||
userOptions[key] = parseInt(value);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,7 +69,7 @@ class Core extends EventEmitter {
|
|||
async runOnce() {
|
||||
const options = this.options;
|
||||
if (('host' in options) && !('address' in options)) {
|
||||
const resolved = await this.dnsResolver.resolve(options.host, this.srvRecord);
|
||||
const resolved = await this.dnsResolver.resolve(options.host, options.ipFamily, this.srvRecord);
|
||||
options.address = resolved.address;
|
||||
if (resolved.port) options.port = resolved.port;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue