fix: xtransport: Check 'fallback_resolver'
And also DefaultFallbackResolver. As far a I could see, value needs to have port defined too. dns.Exchange does seem to use address as such.
This commit is contained in:
parent
890dcca270
commit
d14d78e648
|
@ -11,6 +11,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -272,11 +273,14 @@ func ConfigLoad(proxy *Proxy, svcFlag *string) error {
|
||||||
proxy.xTransport = NewXTransport()
|
proxy.xTransport = NewXTransport()
|
||||||
proxy.xTransport.tlsDisableSessionTickets = config.TLSDisableSessionTickets
|
proxy.xTransport.tlsDisableSessionTickets = config.TLSDisableSessionTickets
|
||||||
proxy.xTransport.tlsCipherSuite = config.TLSCipherSuite
|
proxy.xTransport.tlsCipherSuite = config.TLSCipherSuite
|
||||||
proxy.xTransport.fallbackResolver = config.FallbackResolver
|
|
||||||
proxy.xTransport.mainProto = proxy.mainProto
|
proxy.xTransport.mainProto = proxy.mainProto
|
||||||
if len(config.FallbackResolver) > 0 {
|
if len(config.FallbackResolver) > 0 {
|
||||||
|
if err := CheckResolver(config.FallbackResolver); err != nil {
|
||||||
|
dlog.Fatalf("fallback_resolver [%v]", err)
|
||||||
|
}
|
||||||
proxy.xTransport.ignoreSystemDNS = config.IgnoreSystemDNS
|
proxy.xTransport.ignoreSystemDNS = config.IgnoreSystemDNS
|
||||||
}
|
}
|
||||||
|
proxy.xTransport.fallbackResolver = config.FallbackResolver
|
||||||
proxy.xTransport.useIPv4 = config.SourceIPv4
|
proxy.xTransport.useIPv4 = config.SourceIPv4
|
||||||
proxy.xTransport.useIPv6 = config.SourceIPv6
|
proxy.xTransport.useIPv6 = config.SourceIPv6
|
||||||
proxy.xTransport.keepAlive = time.Duration(config.KeepAlive) * time.Second
|
proxy.xTransport.keepAlive = time.Duration(config.KeepAlive) * time.Second
|
||||||
|
@ -690,3 +694,15 @@ func cdLocal() {
|
||||||
}
|
}
|
||||||
os.Chdir(filepath.Dir(exeFileName))
|
os.Chdir(filepath.Dir(exeFileName))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CheckResolver(resolver string) error {
|
||||||
|
host, port := ExtractHostAndPort(resolver, -1)
|
||||||
|
if ip := ParseIP(host); ip == nil {
|
||||||
|
return fmt.Errorf("Host does not parse as IP '%s'", resolver)
|
||||||
|
} else if port == -1 {
|
||||||
|
return fmt.Errorf("Port missing '%s'", resolver)
|
||||||
|
} else if _, err := strconv.ParseUint(strconv.Itoa(port), 10, 16); err != nil {
|
||||||
|
return fmt.Errorf("Port does not parse '%s' [%v]", resolver, err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -53,6 +53,9 @@ type XTransport struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewXTransport() *XTransport {
|
func NewXTransport() *XTransport {
|
||||||
|
if err := CheckResolver(DefaultFallbackResolver); err != nil {
|
||||||
|
panic("DefaultFallbackResolver does not parse")
|
||||||
|
}
|
||||||
xTransport := XTransport{
|
xTransport := XTransport{
|
||||||
cachedIPs: CachedIPs{cache: make(map[string]string)},
|
cachedIPs: CachedIPs{cache: make(map[string]string)},
|
||||||
keepAlive: DefaultKeepAlive,
|
keepAlive: DefaultKeepAlive,
|
||||||
|
|
Loading…
Reference in New Issue