瀏覽代碼

Add switch to disable relays

Audrius Butkevicius 10 年之前
父節點
當前提交
1e8b185377
共有 5 個文件被更改,包括 16 次插入4 次删除
  1. 11 3
      cmd/syncthing/connections.go
  2. 1 1
      cmd/syncthing/main.go
  3. 1 0
      lib/config/config.go
  4. 2 0
      lib/config/config_test.go
  5. 1 0
      lib/config/testdata/overridenvalues.xml

+ 11 - 3
cmd/syncthing/connections.go

@@ -45,8 +45,9 @@ type connectionSvc struct {
 
 	lastRelayCheck map[protocol.DeviceID]time.Time
 
-	mut      sync.RWMutex
-	connType map[protocol.DeviceID]model.ConnectionType
+	mut           sync.RWMutex
+	connType      map[protocol.DeviceID]model.ConnectionType
+	relaysEnabled bool
 }
 
 func newConnectionSvc(cfg *config.Wrapper, myID protocol.DeviceID, mdl *model.Model, tlsCfg *tls.Config) *connectionSvc {
@@ -59,6 +60,7 @@ func newConnectionSvc(cfg *config.Wrapper, myID protocol.DeviceID, mdl *model.Mo
 		conns:      make(chan model.IntermediateConnection),
 
 		connType:       make(map[protocol.DeviceID]model.ConnectionType),
+		relaysEnabled:  cfg.Options().RelaysEnabled,
 		lastRelayCheck: make(map[protocol.DeviceID]time.Time),
 	}
 	cfg.Subscribe(svc)
@@ -239,6 +241,7 @@ func (s *connectionSvc) connect() {
 
 			s.mut.RLock()
 			ct, ok := s.connType[deviceID]
+			relaysEnabled := s.relaysEnabled
 			s.mut.RUnlock()
 			if connected && ok && ct.IsDirect() {
 				continue
@@ -296,7 +299,8 @@ func (s *connectionSvc) connect() {
 			// Also, do not set lastRelayCheck time if we have no relays,
 			// as otherwise when we do discover relays, we might have to
 			// wait up to RelayReconnectIntervalM to connect again.
-			if connected || len(relays) == 0 {
+			// Also, do not try relays if we are explicitly told not to.
+			if connected || len(relays) == 0 || !relaysEnabled {
 				continue nextDevice
 			}
 
@@ -394,6 +398,10 @@ func (s *connectionSvc) VerifyConfiguration(from, to config.Configuration) error
 }
 
 func (s *connectionSvc) CommitConfiguration(from, to config.Configuration) bool {
+	s.mut.Lock()
+	s.relaysEnabled = to.Options.RelaysEnabled
+	s.mut.Unlock()
+
 	// We require a restart if a device as been removed.
 
 	newDevices := make(map[protocol.DeviceID]bool, len(to.Devices))

+ 1 - 1
cmd/syncthing/main.go

@@ -676,7 +676,7 @@ func syncthingMain() {
 	connectionSvc := newConnectionSvc(cfg, myID, m, tlsCfg)
 	mainSvc.Add(connectionSvc)
 
-	if opts.GlobalAnnEnabled || opts.RelayWithoutGlobalAnn {
+	if opts.RelaysEnabled && (opts.GlobalAnnEnabled || opts.RelayWithoutGlobalAnn) {
 		relaySvc = relay.NewSvc(cfg, tlsCfg, connectionSvc.conns)
 		connectionSvc.Add(relaySvc)
 	}

+ 1 - 0
lib/config/config.go

@@ -223,6 +223,7 @@ type OptionsConfiguration struct {
 	MaxSendKbps             int      `xml:"maxSendKbps" json:"maxSendKbps"`
 	MaxRecvKbps             int      `xml:"maxRecvKbps" json:"maxRecvKbps"`
 	ReconnectIntervalS      int      `xml:"reconnectionIntervalS" json:"reconnectionIntervalS" default:"60"`
+	RelaysEnabled           bool     `xml:"relaysEnabled" json:"relaysEnabled" default:"true"`
 	RelayReconnectIntervalM int      `xml:"relayReconnectIntervalM" json:"relayReconnectIntervalM" default:"10"`
 	RelayWithoutGlobalAnn   bool     `xml:"relayWithoutGlobalAnn" json:"relayWithoutGlobalAnn" default:"false"`
 	StartBrowser            bool     `xml:"startBrowser" json:"startBrowser" default:"true"`

+ 2 - 0
lib/config/config_test.go

@@ -41,6 +41,7 @@ func TestDefaultValues(t *testing.T) {
 		MaxSendKbps:             0,
 		MaxRecvKbps:             0,
 		ReconnectIntervalS:      60,
+		RelaysEnabled:           true,
 		RelayReconnectIntervalM: 10,
 		RelayWithoutGlobalAnn:   false,
 		StartBrowser:            true,
@@ -155,6 +156,7 @@ func TestOverriddenValues(t *testing.T) {
 		MaxSendKbps:             1234,
 		MaxRecvKbps:             2341,
 		ReconnectIntervalS:      6000,
+		RelaysEnabled:           false,
 		RelayReconnectIntervalM: 20,
 		RelayWithoutGlobalAnn:   true,
 		StartBrowser:            false,

+ 1 - 0
lib/config/testdata/overridenvalues.xml

@@ -13,6 +13,7 @@
         <maxSendKbps>1234</maxSendKbps>
         <maxRecvKbps>2341</maxRecvKbps>
         <reconnectionIntervalS>6000</reconnectionIntervalS>
+        <relaysEnabled>false</relaysEnabled>
         <relayReconnectIntervalM>20</relayReconnectIntervalM>
         <relayWithoutGlobalAnn>true</relayWithoutGlobalAnn>
         <startBrowser>false</startBrowser>