lib/connections: Fix local address priority
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4534 LGTM: imsodin, calmh
This commit is contained in:
committed by
Jakob Borg
parent
b99e92bad7
commit
4922b46fbd
@@ -336,6 +336,8 @@ func (s *Service) connect() {
|
||||
}
|
||||
}
|
||||
|
||||
addrs = util.UniqueStrings(addrs)
|
||||
|
||||
l.Debugln("Reconnect loop for", deviceID, addrs)
|
||||
|
||||
seen = append(seen, addrs...)
|
||||
@@ -375,9 +377,9 @@ func (s *Service) connect() {
|
||||
continue
|
||||
}
|
||||
|
||||
prio := dialerFactory.Priority()
|
||||
priority := dialerFactory.Priority()
|
||||
|
||||
if connected && prio >= ct.Priority() {
|
||||
if connected && priority >= ct.Priority() {
|
||||
l.Debugf("Not dialing using %s as priority is less than current connection (%d >= %d)", dialerFactory, dialerFactory.Priority(), ct.Priority())
|
||||
continue
|
||||
}
|
||||
@@ -385,9 +387,18 @@ func (s *Service) connect() {
|
||||
dialer := dialerFactory.New(s.cfg, s.tlsCfg)
|
||||
nextDial[addr] = now.Add(dialer.RedialFrequency())
|
||||
|
||||
// For LAN addresses, increase the priority so that we
|
||||
// try these first.
|
||||
switch {
|
||||
case dialerFactory.AlwaysWAN():
|
||||
// Do nothing.
|
||||
case s.isLANHost(uri.Host):
|
||||
priority -= 1
|
||||
}
|
||||
|
||||
dialTargets = append(dialTargets, dialTarget{
|
||||
dialer: dialer,
|
||||
priority: prio,
|
||||
priority: priority,
|
||||
deviceID: deviceID,
|
||||
uri: uri,
|
||||
})
|
||||
@@ -412,6 +423,17 @@ func (s *Service) connect() {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Service) isLANHost(host string) bool {
|
||||
if noPort, _, err := net.SplitHostPort(host); err == nil && noPort != "" {
|
||||
host = noPort
|
||||
}
|
||||
addr, err := net.ResolveIPAddr("ip", host)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return s.isLAN(addr)
|
||||
}
|
||||
|
||||
func (s *Service) isLAN(addr net.Addr) bool {
|
||||
tcpaddr, ok := addr.(*net.TCPAddr)
|
||||
if !ok {
|
||||
|
||||
Reference in New Issue
Block a user