|
@@ -110,6 +110,8 @@ type ConnectionStatusEntry struct {
|
|
|
|
|
|
type service struct {
|
|
|
*suture.Supervisor
|
|
|
+ connectionStatusHandler
|
|
|
+
|
|
|
cfg config.Wrapper
|
|
|
myID protocol.DeviceID
|
|
|
model Model
|
|
@@ -127,9 +129,6 @@ type service struct {
|
|
|
listeners map[string]genericListener
|
|
|
listenerTokens map[string]suture.ServiceToken
|
|
|
listenerSupervisor *suture.Supervisor
|
|
|
-
|
|
|
- connectionStatusMut sync.RWMutex
|
|
|
- connectionStatus map[string]ConnectionStatusEntry // address -> latest error/status
|
|
|
}
|
|
|
|
|
|
func NewService(cfg config.Wrapper, myID protocol.DeviceID, mdl Model, tlsCfg *tls.Config, discoverer discover.Finder, bepProtocolName string, tlsDefaultCommonName string, evLogger events.Logger) Service {
|
|
@@ -140,6 +139,8 @@ func NewService(cfg config.Wrapper, myID protocol.DeviceID, mdl Model, tlsCfg *t
|
|
|
},
|
|
|
PassThroughPanics: true,
|
|
|
}),
|
|
|
+ connectionStatusHandler: newConnectionStatusHandler(),
|
|
|
+
|
|
|
cfg: cfg,
|
|
|
myID: myID,
|
|
|
model: mdl,
|
|
@@ -168,9 +169,6 @@ func NewService(cfg config.Wrapper, myID protocol.DeviceID, mdl Model, tlsCfg *t
|
|
|
FailureBackoff: 600 * time.Second,
|
|
|
PassThroughPanics: true,
|
|
|
}),
|
|
|
-
|
|
|
- connectionStatusMut: sync.NewRWMutex(),
|
|
|
- connectionStatus: make(map[string]ConnectionStatusEntry),
|
|
|
}
|
|
|
cfg.Subscribe(service)
|
|
|
|
|
@@ -702,7 +700,19 @@ func (s *service) ListenerStatus() map[string]ListenerStatusEntry {
|
|
|
return result
|
|
|
}
|
|
|
|
|
|
-func (s *service) ConnectionStatus() map[string]ConnectionStatusEntry {
|
|
|
+type connectionStatusHandler struct {
|
|
|
+ connectionStatusMut sync.RWMutex
|
|
|
+ connectionStatus map[string]ConnectionStatusEntry // address -> latest error/status
|
|
|
+}
|
|
|
+
|
|
|
+func newConnectionStatusHandler() connectionStatusHandler {
|
|
|
+ return connectionStatusHandler{
|
|
|
+ connectionStatusMut: sync.NewRWMutex(),
|
|
|
+ connectionStatus: make(map[string]ConnectionStatusEntry),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (s *connectionStatusHandler) ConnectionStatus() map[string]ConnectionStatusEntry {
|
|
|
result := make(map[string]ConnectionStatusEntry)
|
|
|
s.connectionStatusMut.RLock()
|
|
|
for k, v := range s.connectionStatus {
|
|
@@ -712,7 +722,7 @@ func (s *service) ConnectionStatus() map[string]ConnectionStatusEntry {
|
|
|
return result
|
|
|
}
|
|
|
|
|
|
-func (s *service) setConnectionStatus(address string, err error) {
|
|
|
+func (s *connectionStatusHandler) setConnectionStatus(address string, err error) {
|
|
|
if errors.Cause(err) == context.Canceled {
|
|
|
return
|
|
|
}
|