From dc38e6ae885b9ffbab7cebc22a6d8a1bf7e26bf5 Mon Sep 17 00:00:00 2001 From: greatroar <61184462+greatroar@users.noreply.github.com> Date: Wed, 21 Jul 2021 09:49:09 +0200 Subject: [PATCH] lib/relay/client: Stricter typing and remove unused code (#7819) --- lib/relay/client/client.go | 41 ++++++++++++------------------------- lib/relay/client/dynamic.go | 15 ++++---------- lib/relay/client/static.go | 32 +---------------------------- 3 files changed, 18 insertions(+), 70 deletions(-) diff --git a/lib/relay/client/client.go b/lib/relay/client/client.go index f92a4cd95..ada606568 100644 --- a/lib/relay/client/client.go +++ b/lib/relay/client/client.go @@ -11,58 +11,43 @@ import ( "github.com/syncthing/syncthing/lib/relay/protocol" "github.com/syncthing/syncthing/lib/svcutil" - "github.com/syncthing/syncthing/lib/sync" "github.com/thejerf/suture/v4" ) -type relayClientFactory func(uri *url.URL, certs []tls.Certificate, invitations chan protocol.SessionInvitation, timeout time.Duration) RelayClient - -var ( - supportedSchemes = map[string]relayClientFactory{ - "relay": newStaticClient, - "dynamic+http": newDynamicClient, - "dynamic+https": newDynamicClient, - } -) - type RelayClient interface { suture.Service Error() error - Latency() time.Duration String() string - Invitations() chan protocol.SessionInvitation + Invitations() <-chan protocol.SessionInvitation URI() *url.URL } func NewClient(uri *url.URL, certs []tls.Certificate, timeout time.Duration) (RelayClient, error) { - factory, ok := supportedSchemes[uri.Scheme] - if !ok { + invitations := make(chan protocol.SessionInvitation) + + switch uri.Scheme { + case "relay": + return newStaticClient(uri, certs, invitations, timeout), nil + case "dynamic+http", "dynamic+https": + return newDynamicClient(uri, certs, invitations, timeout), nil + default: return nil, fmt.Errorf("unsupported scheme: %s", uri.Scheme) } - - invitations := make(chan protocol.SessionInvitation) - return factory(uri, certs, invitations, timeout), nil } type commonClient struct { svcutil.ServiceWithError - invitations chan protocol.SessionInvitation - mut sync.RWMutex } func newCommonClient(invitations chan protocol.SessionInvitation, serve func(context.Context) error, creator string) commonClient { - c := commonClient{ - invitations: invitations, - mut: sync.NewRWMutex(), + return commonClient{ + ServiceWithError: svcutil.AsService(serve, creator), + invitations: invitations, } - c.ServiceWithError = svcutil.AsService(serve, creator) - return c } -func (c *commonClient) Invitations() chan protocol.SessionInvitation { - c.mut.RLock() - defer c.mut.RUnlock() +func (c *commonClient) Invitations() <-chan protocol.SessionInvitation { return c.invitations } diff --git a/lib/relay/client/dynamic.go b/lib/relay/client/dynamic.go index d3781e432..2d99c95e8 100644 --- a/lib/relay/client/dynamic.go +++ b/lib/relay/client/dynamic.go @@ -11,6 +11,7 @@ import ( "net/http" "net/url" "sort" + "sync" "time" "github.com/syncthing/syncthing/lib/osutil" @@ -25,10 +26,11 @@ type dynamicClient struct { certs []tls.Certificate timeout time.Duration - client RelayClient + mut sync.RWMutex // Protects client. + client *staticClient } -func newDynamicClient(uri *url.URL, certs []tls.Certificate, invitations chan protocol.SessionInvitation, timeout time.Duration) RelayClient { +func newDynamicClient(uri *url.URL, certs []tls.Certificate, invitations chan protocol.SessionInvitation, timeout time.Duration) *dynamicClient { c := &dynamicClient{ pooladdr: uri, certs: certs, @@ -114,15 +116,6 @@ func (c *dynamicClient) Error() error { return c.client.Error() } -func (c *dynamicClient) Latency() time.Duration { - c.mut.RLock() - defer c.mut.RUnlock() - if c.client == nil { - return time.Hour - } - return c.client.Latency() -} - func (c *dynamicClient) String() string { return fmt.Sprintf("DynamicClient:%p:%s@%s", c, c.URI(), c.pooladdr) } diff --git a/lib/relay/client/static.go b/lib/relay/client/static.go index f35f6fc5d..1f5cdb185 100644 --- a/lib/relay/client/static.go +++ b/lib/relay/client/static.go @@ -28,12 +28,9 @@ type staticClient struct { connectTimeout time.Duration conn *tls.Conn - - connected bool - latency time.Duration } -func newStaticClient(uri *url.URL, certs []tls.Certificate, invitations chan protocol.SessionInvitation, timeout time.Duration) RelayClient { +func newStaticClient(uri *url.URL, certs []tls.Certificate, invitations chan protocol.SessionInvitation, timeout time.Duration) *staticClient { c := &staticClient{ uri: uri, @@ -67,10 +64,6 @@ func (c *staticClient) serve(ctx context.Context) error { l.Infof("Joined relay %s://%s", c.uri.Scheme, c.uri.Host) - c.mut.Lock() - c.connected = true - c.mut.Unlock() - messages := make(chan interface{}) errorsc := make(chan error, 1) @@ -128,20 +121,6 @@ func (c *staticClient) serve(ctx context.Context) error { } } -func (c *staticClient) StatusOK() bool { - c.mut.RLock() - con := c.connected - c.mut.RUnlock() - return con -} - -func (c *staticClient) Latency() time.Duration { - c.mut.RLock() - lat := c.latency - c.mut.RUnlock() - return lat -} - func (c *staticClient) String() string { return fmt.Sprintf("StaticClient:%p@%s", c, c.URI()) } @@ -155,7 +134,6 @@ func (c *staticClient) connect(ctx context.Context) error { return fmt.Errorf("unsupported relay scheme: %v", c.uri.Scheme) } - t0 := time.Now() timeoutCtx, cancel := context.WithTimeout(ctx, c.connectTimeout) defer cancel() tcpConn, err := dialer.DialContext(timeoutCtx, "tcp", c.uri.Host) @@ -163,10 +141,6 @@ func (c *staticClient) connect(ctx context.Context) error { return err } - c.mut.Lock() - c.latency = time.Since(t0) - c.mut.Unlock() - conn := tls.Client(tcpConn, c.config) if err := conn.SetDeadline(time.Now().Add(c.connectTimeout)); err != nil { @@ -185,10 +159,6 @@ func (c *staticClient) connect(ctx context.Context) error { func (c *staticClient) disconnect() { l.Debugln(c, "disconnecting") - c.mut.Lock() - c.connected = false - c.mut.Unlock() - c.conn.Close() }