1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- // Copyright (C) 2015 Audrius Butkevicius and Contributors (see the CONTRIBUTORS file).
- package client
- import (
- "context"
- "crypto/tls"
- "fmt"
- "net/url"
- "time"
- "github.com/syncthing/syncthing/lib/relay/protocol"
- "github.com/syncthing/syncthing/lib/svcutil"
- "github.com/thejerf/suture/v4"
- )
- type RelayClient interface {
- suture.Service
- Error() error
- String() string
- Invitations() <-chan protocol.SessionInvitation
- URI() *url.URL
- }
- func NewClient(uri *url.URL, certs []tls.Certificate, timeout time.Duration) (RelayClient, error) {
- 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)
- }
- }
- type commonClient struct {
- svcutil.ServiceWithError
- invitations chan protocol.SessionInvitation
- }
- func newCommonClient(invitations chan protocol.SessionInvitation, serve func(context.Context) error, creator string) commonClient {
- return commonClient{
- ServiceWithError: svcutil.AsService(serve, creator),
- invitations: invitations,
- }
- }
- func (c *commonClient) Invitations() <-chan protocol.SessionInvitation {
- return c.invitations
- }
|