@@ -332,28 +332,18 @@ func (xTransport *XTransport) rebuildTransport() {
332332 }
333333}
334334
335- func (xTransport * XTransport ) resolveUsingSystem (host string , forceType uint16 ) ([]net.IP , time.Duration , error ) {
335+ func (xTransport * XTransport ) resolveUsingSystem (host string , returnIPv4 , returnIPv6 bool ) ([]net.IP , time.Duration , error ) {
336336 ipa , err := net .LookupIP (host )
337- queryIPv4 := xTransport .useIPv4
338- queryIPv6 := xTransport .useIPv6
339- if forceType == dns .TypeNone && queryIPv4 && queryIPv6 {
337+ if returnIPv4 && returnIPv6 {
340338 return ipa , SystemResolverIPTTL , err
341339 }
342- switch forceType {
343- case dns .TypeA :
344- queryIPv4 = true
345- queryIPv6 = false
346- case dns .TypeAAAA :
347- queryIPv4 = false
348- queryIPv6 = true
349- }
350340 ips := make ([]net.IP , 0 )
351341 for _ , ip := range ipa {
352342 ipv4 := ip .To4 ()
353- if queryIPv4 && ipv4 != nil {
343+ if returnIPv4 && ipv4 != nil {
354344 ips = append (ips , ipv4 )
355345 }
356- if queryIPv6 && ipv4 == nil {
346+ if returnIPv6 && ipv4 == nil {
357347 ips = append (ips , ip )
358348 }
359349 }
@@ -363,22 +353,15 @@ func (xTransport *XTransport) resolveUsingSystem(host string, forceType uint16)
363353func (xTransport * XTransport ) resolveUsingResolver (
364354 proto , host string ,
365355 resolver string ,
366- forceType uint16 ,
356+ returnIPv4 , returnIPv6 bool ,
367357) (ips []net.IP , ttl time.Duration , err error ) {
368358 dnsClient := dns.Client {Net : proto , ReadTimeout : ResolverReadTimeout }
369359 queryType := make ([]uint16 , 0 , 2 )
370- switch forceType {
371- case dns .TypeA :
360+ if returnIPv4 {
372361 queryType = append (queryType , dns .TypeA )
373- case dns .TypeAAAA :
362+ }
363+ if returnIPv6 {
374364 queryType = append (queryType , dns .TypeAAAA )
375- default :
376- if xTransport .useIPv4 {
377- queryType = append (queryType , dns .TypeA )
378- }
379- if xTransport .useIPv6 {
380- queryType = append (queryType , dns .TypeAAAA )
381- }
382365 }
383366 var rrTTL uint32
384367 for _ , rrType := range queryType {
@@ -406,14 +389,14 @@ func (xTransport *XTransport) resolveUsingResolver(
406389 return ips , ttl , err
407390}
408391
409- func (xTransport * XTransport ) resolveUsingResolvers (
392+ func (xTransport * XTransport ) resolveUsingServers (
410393 proto , host string ,
411394 resolvers []string ,
412- forceType uint16 ,
395+ returnIPv4 , returnIPv6 bool ,
413396) (ips []net.IP , ttl time.Duration , err error ) {
414397 err = errors .New ("Empty resolvers" )
415398 for i , resolver := range resolvers {
416- ips , ttl , err = xTransport .resolveUsingResolver (proto , host , resolver , forceType )
399+ ips , ttl , err = xTransport .resolveUsingResolver (proto , host , resolver , returnIPv4 , returnIPv6 )
417400 if err == nil {
418401 if i > 0 {
419402 dlog .Infof ("Resolution succeeded with resolver %s[%s]" , proto , resolver )
@@ -426,19 +409,15 @@ func (xTransport *XTransport) resolveUsingResolvers(
426409 return ips , ttl , err
427410}
428411
429- func (xTransport * XTransport ) resolveEncrypted (host string , forceType uint16 ) ([]net.IP , time.Duration , error ) {
430- return xTransport .resolveUsingResolvers (xTransport .mainProto , host , xTransport .internalResolvers , forceType )
431- }
432-
433- func (xTransport * XTransport ) resolve (host string , forceType uint16 ) (ips []net.IP , ttl time.Duration , err error ) {
412+ func (xTransport * XTransport ) resolve (host string , returnIPv4 , returnIPv6 bool ) (ips []net.IP , ttl time.Duration , err error ) {
434413 protos := []string {"udp" , "tcp" }
435414 if xTransport .mainProto == "tcp" {
436415 protos = []string {"tcp" , "udp" }
437416 }
438417 if xTransport .ignoreSystemDNS {
439418 if xTransport .internalResolverReady {
440419 for _ , proto := range protos {
441- ips , ttl , err = xTransport .resolveUsingResolvers (proto , host , xTransport .internalResolvers , forceType )
420+ ips , ttl , err = xTransport .resolveUsingServers (proto , host , xTransport .internalResolvers , returnIPv4 , returnIPv6 )
442421 if err == nil {
443422 break
444423 }
@@ -448,7 +427,7 @@ func (xTransport *XTransport) resolve(host string, forceType uint16) (ips []net.
448427 dlog .Notice (err )
449428 }
450429 } else {
451- ips , ttl , err = xTransport .resolveUsingSystem (host , forceType )
430+ ips , ttl , err = xTransport .resolveUsingSystem (host , returnIPv4 , returnIPv6 )
452431 if err != nil {
453432 err = errors .New ("System DNS is not usable yet" )
454433 dlog .Notice (err )
@@ -463,15 +442,15 @@ func (xTransport *XTransport) resolve(host string, forceType uint16) (ips []net.
463442 proto ,
464443 )
465444 }
466- ips , ttl , err = xTransport .resolveUsingResolvers (proto , host , xTransport .bootstrapResolvers , forceType )
445+ ips , ttl , err = xTransport .resolveUsingServers (proto , host , xTransport .bootstrapResolvers , returnIPv4 , returnIPv6 )
467446 if err == nil {
468447 break
469448 }
470449 }
471450 }
472451 if err != nil && xTransport .ignoreSystemDNS {
473452 dlog .Noticef ("Bootstrap resolvers didn't respond - Trying with the system resolver as a last resort" )
474- ips , ttl , err = xTransport .resolveUsingSystem (host , forceType )
453+ ips , ttl , err = xTransport .resolveUsingSystem (host , returnIPv4 , returnIPv6 )
475454 }
476455 return ips , ttl , err
477456}
@@ -491,7 +470,7 @@ func (xTransport *XTransport) resolveAndUpdateCache(host string) error {
491470 xTransport .markUpdatingCachedIP (host )
492471
493472 var foundIP net.IP
494- ips , ttl , err := xTransport .resolve (host , dns . TypeNone )
473+ ips , ttl , err := xTransport .resolve (host , xTransport . useIPv4 , xTransport . useIPv6 )
495474 if len (ips ) > 0 {
496475 foundIP = ips [rand .Intn (len (ips ))]
497476 }
0 commit comments