lib/connections: Log errors in relay clients (#5917)

This commit is contained in:
Simon Frei 2019-08-01 17:37:58 +02:00 committed by Jakob Borg
parent bc7dd02e2b
commit 77cc87dfca

View File

@ -16,6 +16,7 @@ import (
"github.com/syncthing/syncthing/lib/dialer"
"github.com/syncthing/syncthing/lib/nat"
"github.com/syncthing/syncthing/lib/relay/client"
"github.com/syncthing/syncthing/lib/util"
)
func init() {
@ -26,6 +27,7 @@ func init() {
}
type relayListener struct {
util.ServiceWithError
onAddressesChangedNotifier
uri *url.URL
@ -34,30 +36,22 @@ type relayListener struct {
conns chan internalConn
factory listenerFactory
err error
client client.RelayClient
mut sync.RWMutex
}
func (t *relayListener) Serve() {
t.mut.Lock()
t.err = nil
t.mut.Unlock()
func (t *relayListener) serve(stop chan struct{}) error {
clnt, err := client.NewClient(t.uri, t.tlsCfg.Certificates, nil, 10*time.Second)
invitations := clnt.Invitations()
if err != nil {
t.mut.Lock()
t.err = err
t.mut.Unlock()
l.Warnln("Listen (BEP/relay):", err)
return
l.Infoln("Listen (BEP/relay):", err)
return err
}
go clnt.Serve()
invitations := clnt.Invitations()
t.mut.Lock()
t.client = clnt
go clnt.Serve()
defer clnt.Stop()
t.mut.Unlock()
oldURI := clnt.URI()
@ -69,7 +63,10 @@ func (t *relayListener) Serve() {
select {
case inv, ok := <-invitations:
if !ok {
return
if err := clnt.Error(); err != nil {
l.Infoln("Listen (BEP/relay):", err)
}
return err
}
conn, err := client.JoinSession(inv)
@ -114,18 +111,13 @@ func (t *relayListener) Serve() {
oldURI = currentURI
t.notifyAddressesChanged(t)
}
case <-stop:
return nil
}
}
}
func (t *relayListener) Stop() {
t.mut.RLock()
if t.client != nil {
t.client.Stop()
}
t.mut.RUnlock()
}
func (t *relayListener) URI() *url.URL {
return t.uri
}
@ -152,18 +144,16 @@ func (t *relayListener) LANAddresses() []*url.URL {
}
func (t *relayListener) Error() error {
t.mut.RLock()
err := t.err
var cerr error
if t.client != nil {
cerr = t.client.Error()
}
t.mut.RUnlock()
err := t.ServiceWithError.Error()
if err != nil {
return err
}
return cerr
t.mut.RLock()
defer t.mut.RUnlock()
if t.client != nil {
return t.client.Error()
}
return nil
}
func (t *relayListener) Factory() listenerFactory {
@ -181,13 +171,15 @@ func (t *relayListener) NATType() string {
type relayListenerFactory struct{}
func (f *relayListenerFactory) New(uri *url.URL, cfg config.Wrapper, tlsCfg *tls.Config, conns chan internalConn, natService *nat.Service) genericListener {
return &relayListener{
t := &relayListener{
uri: uri,
cfg: cfg,
tlsCfg: tlsCfg,
conns: conns,
factory: f,
}
t.ServiceWithError = util.AsServiceWithError(t.serve)
return t
}
func (relayListenerFactory) Valid(cfg config.Configuration) error {