lib/connections, lib/nat: Correctly dis-/enable nat (fixes #6552) (#6719)

This commit is contained in:
Simon Frei
2020-06-07 20:29:53 +02:00
committed by GitHub
parent 74ea9c5f67
commit 3065b127b5
3 changed files with 41 additions and 12 deletions
+27
View File
@@ -45,9 +45,36 @@ func NewService(id protocol.DeviceID, cfg config.Wrapper) *Service {
mut: sync.NewRWMutex(),
}
s.Service = util.AsService(s.serve, s.String())
cfg.Subscribe(s)
return s
}
func (s *Service) VerifyConfiguration(from, to config.Configuration) error {
return nil
}
func (s *Service) CommitConfiguration(from, to config.Configuration) bool {
if !from.Options.NATEnabled && to.Options.NATEnabled {
s.mut.Lock()
l.Debugln("Starting NAT service")
s.timer.Reset(0)
s.mut.Unlock()
} else if from.Options.NATEnabled && !to.Options.NATEnabled {
s.mut.Lock()
l.Debugln("Stopping NAT service")
if !s.timer.Stop() {
<-s.timer.C
}
s.mut.Unlock()
}
return true
}
func (s *Service) Stop() {
s.cfg.Unsubscribe(s)
s.Service.Stop()
}
func (s *Service) serve(ctx context.Context) {
announce := stdsync.Once{}
+13 -1
View File
@@ -7,9 +7,13 @@
package nat
import (
"io/ioutil"
"net"
"os"
"testing"
"github.com/syncthing/syncthing/lib/config"
"github.com/syncthing/syncthing/lib/events"
"github.com/syncthing/syncthing/lib/protocol"
)
@@ -56,7 +60,15 @@ func TestMappingValidGateway(t *testing.T) {
}
func TestMappingClearAddresses(t *testing.T) {
natSvc := NewService(protocol.EmptyDeviceID, nil)
tmpFile, err := ioutil.TempFile("", "syncthing-testConfig-")
if err != nil {
t.Fatal(err)
}
w := config.Wrap(tmpFile.Name(), config.Configuration{}, events.NoopLogger)
defer os.RemoveAll(tmpFile.Name())
tmpFile.Close()
natSvc := NewService(protocol.EmptyDeviceID, w)
// Mock a mapped port; avoids the need to actually map a port
ip := net.ParseIP("192.168.0.1")
m := natSvc.NewMapping(TCP, ip, 1024)