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,
 | 
			
		||||
} from './resolver';
 | 
			
		||||
import * as dns from 'dns';
 | 
			
		||||
import * as semver from 'semver';
 | 
			
		||||
import * as util from 'util';
 | 
			
		||||
import { extractAndSelectServiceConfig, ServiceConfig } from './service-config';
 | 
			
		||||
import { ServiceError } from './call';
 | 
			
		||||
| 
						 | 
				
			
			@ -60,6 +61,14 @@ const DNS_REGEX = /^(?:dns:)?(?:\/\/\w+\/)?(\w+)(?::(\d+))?$/;
 | 
			
		|||
 */
 | 
			
		||||
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 resolve6Promise = util.promisify(dns.resolve6);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -152,7 +161,12 @@ class DnsResolver implements Resolver {
 | 
			
		|||
    if (this.dnsHostname !== null) {
 | 
			
		||||
      const hostname: string = this.dnsHostname;
 | 
			
		||||
      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
 | 
			
		||||
       * the name resolution attempt as a whole is a success even if the TXT
 | 
			
		||||
       * lookup fails */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue