mirror of https://github.com/grpc/grpc-node.git
Avoid http2 IPv6 handling bug
This commit is contained in:
parent
ee4985886d
commit
889d1d3093
|
|
@ -21,6 +21,7 @@ import {
|
||||||
registerDefaultResolver,
|
registerDefaultResolver,
|
||||||
} from './resolver';
|
} from './resolver';
|
||||||
import * as dns from 'dns';
|
import * as dns from 'dns';
|
||||||
|
import * as semver from 'semver';
|
||||||
import * as util from 'util';
|
import * as util from 'util';
|
||||||
import { extractAndSelectServiceConfig, ServiceConfig } from './service-config';
|
import { extractAndSelectServiceConfig, ServiceConfig } from './service-config';
|
||||||
import { ServiceError } from './call';
|
import { ServiceError } from './call';
|
||||||
|
|
@ -60,6 +61,14 @@ const DNS_REGEX = /^(?:dns:)?(?:\/\/\w+\/)?(\w+)(?::(\d+))?$/;
|
||||||
*/
|
*/
|
||||||
const DEFAULT_PORT = '443';
|
const DEFAULT_PORT = '443';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The range of Node versions in which the Node issue
|
||||||
|
* https://github.com/nodejs/node/issues/28216 has been fixed. In other
|
||||||
|
* versions, IPv6 literal addresses cannot be used to establish HTTP/2
|
||||||
|
* connections.
|
||||||
|
*/
|
||||||
|
const IPV6_SUPPORT_RANGE = '>= 12.6';
|
||||||
|
|
||||||
const resolve4Promise = util.promisify(dns.resolve4);
|
const resolve4Promise = util.promisify(dns.resolve4);
|
||||||
const resolve6Promise = util.promisify(dns.resolve6);
|
const resolve6Promise = util.promisify(dns.resolve6);
|
||||||
|
|
||||||
|
|
@ -152,7 +161,12 @@ class DnsResolver implements Resolver {
|
||||||
if (this.dnsHostname !== null) {
|
if (this.dnsHostname !== null) {
|
||||||
const hostname: string = this.dnsHostname;
|
const hostname: string = this.dnsHostname;
|
||||||
const aResult = resolve4Promise(hostname);
|
const aResult = resolve4Promise(hostname);
|
||||||
const aaaaResult = resolve6Promise(hostname);
|
let aaaaResult: Promise<string[]>;
|
||||||
|
if (semver.satisfies(process.version, IPV6_SUPPORT_RANGE)) {
|
||||||
|
aaaaResult = resolve6Promise(hostname);
|
||||||
|
} else {
|
||||||
|
aaaaResult = Promise.resolve<string[]>([]);
|
||||||
|
}
|
||||||
/* We handle the TXT query promise differently than the others because
|
/* We handle the TXT query promise differently than the others because
|
||||||
* the name resolution attempt as a whole is a success even if the TXT
|
* the name resolution attempt as a whole is a success even if the TXT
|
||||||
* lookup fails */
|
* lookup fails */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue