lib/connections: Dialer code deduplication (#6187)
This commit is contained in:
parent
4340589501
commit
33258b06f4
@ -39,8 +39,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type quicDialer struct {
|
type quicDialer struct {
|
||||||
cfg config.Wrapper
|
commonDialer
|
||||||
tlsCfg *tls.Config
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *quicDialer) Dial(_ protocol.DeviceID, uri *url.URL) (internalConn, error) {
|
func (d *quicDialer) Dial(_ protocol.DeviceID, uri *url.URL) (internalConn, error) {
|
||||||
@ -91,20 +90,16 @@ func (d *quicDialer) Dial(_ protocol.DeviceID, uri *url.URL) (internalConn, erro
|
|||||||
return internalConn{&quicTlsConn{session, stream, createdConn}, connTypeQUICClient, quicPriority}, nil
|
return internalConn{&quicTlsConn{session, stream, createdConn}, connTypeQUICClient, quicPriority}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *quicDialer) RedialFrequency() time.Duration {
|
|
||||||
return time.Duration(d.cfg.Options().ReconnectIntervalS) * time.Second
|
|
||||||
}
|
|
||||||
|
|
||||||
type quicDialerFactory struct {
|
type quicDialerFactory struct {
|
||||||
cfg config.Wrapper
|
cfg config.Wrapper
|
||||||
tlsCfg *tls.Config
|
tlsCfg *tls.Config
|
||||||
}
|
}
|
||||||
|
|
||||||
func (quicDialerFactory) New(cfg config.Wrapper, tlsCfg *tls.Config) genericDialer {
|
func (quicDialerFactory) New(opts config.OptionsConfiguration, tlsCfg *tls.Config) genericDialer {
|
||||||
return &quicDialer{
|
return &quicDialer{commonDialer{
|
||||||
cfg: cfg,
|
reconnectInterval: time.Duration(opts.ReconnectIntervalS) * time.Second,
|
||||||
tlsCfg: tlsCfg,
|
tlsCfg: tlsCfg,
|
||||||
}
|
}}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (quicDialerFactory) Priority() int {
|
func (quicDialerFactory) Priority() int {
|
||||||
|
|||||||
@ -24,8 +24,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type relayDialer struct {
|
type relayDialer struct {
|
||||||
cfg config.Wrapper
|
commonDialer
|
||||||
tlsCfg *tls.Config
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *relayDialer) Dial(id protocol.DeviceID, uri *url.URL) (internalConn, error) {
|
func (d *relayDialer) Dial(id protocol.DeviceID, uri *url.URL) (internalConn, error) {
|
||||||
@ -45,7 +44,7 @@ func (d *relayDialer) Dial(id protocol.DeviceID, uri *url.URL) (internalConn, er
|
|||||||
return internalConn{}, err
|
return internalConn{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = dialer.SetTrafficClass(conn, d.cfg.Options().TrafficClass)
|
err = dialer.SetTrafficClass(conn, d.trafficClass)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Debugln("Dial (BEP/relay): setting traffic class:", err)
|
l.Debugln("Dial (BEP/relay): setting traffic class:", err)
|
||||||
}
|
}
|
||||||
@ -66,17 +65,14 @@ func (d *relayDialer) Dial(id protocol.DeviceID, uri *url.URL) (internalConn, er
|
|||||||
return internalConn{tc, connTypeRelayClient, relayPriority}, nil
|
return internalConn{tc, connTypeRelayClient, relayPriority}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *relayDialer) RedialFrequency() time.Duration {
|
|
||||||
return time.Duration(d.cfg.Options().RelayReconnectIntervalM) * time.Minute
|
|
||||||
}
|
|
||||||
|
|
||||||
type relayDialerFactory struct{}
|
type relayDialerFactory struct{}
|
||||||
|
|
||||||
func (relayDialerFactory) New(cfg config.Wrapper, tlsCfg *tls.Config) genericDialer {
|
func (relayDialerFactory) New(opts config.OptionsConfiguration, tlsCfg *tls.Config) genericDialer {
|
||||||
return &relayDialer{
|
return &relayDialer{commonDialer{
|
||||||
cfg: cfg,
|
trafficClass: opts.TrafficClass,
|
||||||
tlsCfg: tlsCfg,
|
reconnectInterval: time.Duration(opts.RelayReconnectIntervalM) * time.Minute,
|
||||||
}
|
tlsCfg: tlsCfg,
|
||||||
|
}}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (relayDialerFactory) Priority() int {
|
func (relayDialerFactory) Priority() int {
|
||||||
|
|||||||
@ -442,7 +442,7 @@ func (s *service) connect(ctx context.Context) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
dialer := dialerFactory.New(s.cfg, s.tlsCfg)
|
dialer := dialerFactory.New(s.cfg.Options(), s.tlsCfg)
|
||||||
nextDial[nextDialKey] = now.Add(dialer.RedialFrequency())
|
nextDial[nextDialKey] = now.Add(dialer.RedialFrequency())
|
||||||
|
|
||||||
// For LAN addresses, increase the priority so that we
|
// For LAN addresses, increase the priority so that we
|
||||||
|
|||||||
@ -146,13 +146,23 @@ func (c internalConn) String() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type dialerFactory interface {
|
type dialerFactory interface {
|
||||||
New(config.Wrapper, *tls.Config) genericDialer
|
New(config.OptionsConfiguration, *tls.Config) genericDialer
|
||||||
Priority() int
|
Priority() int
|
||||||
AlwaysWAN() bool
|
AlwaysWAN() bool
|
||||||
Valid(config.Configuration) error
|
Valid(config.Configuration) error
|
||||||
String() string
|
String() string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type commonDialer struct {
|
||||||
|
trafficClass int
|
||||||
|
reconnectInterval time.Duration
|
||||||
|
tlsCfg *tls.Config
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *commonDialer) RedialFrequency() time.Duration {
|
||||||
|
return d.reconnectInterval
|
||||||
|
}
|
||||||
|
|
||||||
type genericDialer interface {
|
type genericDialer interface {
|
||||||
Dial(protocol.DeviceID, *url.URL) (internalConn, error)
|
Dial(protocol.DeviceID, *url.URL) (internalConn, error)
|
||||||
RedialFrequency() time.Duration
|
RedialFrequency() time.Duration
|
||||||
|
|||||||
@ -26,8 +26,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type tcpDialer struct {
|
type tcpDialer struct {
|
||||||
cfg config.Wrapper
|
commonDialer
|
||||||
tlsCfg *tls.Config
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *tcpDialer) Dial(_ protocol.DeviceID, uri *url.URL) (internalConn, error) {
|
func (d *tcpDialer) Dial(_ protocol.DeviceID, uri *url.URL) (internalConn, error) {
|
||||||
@ -43,7 +42,7 @@ func (d *tcpDialer) Dial(_ protocol.DeviceID, uri *url.URL) (internalConn, error
|
|||||||
l.Debugln("Dial (BEP/tcp): setting tcp options:", err)
|
l.Debugln("Dial (BEP/tcp): setting tcp options:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = dialer.SetTrafficClass(conn, d.cfg.Options().TrafficClass)
|
err = dialer.SetTrafficClass(conn, d.trafficClass)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Debugln("Dial (BEP/tcp): setting traffic class:", err)
|
l.Debugln("Dial (BEP/tcp): setting traffic class:", err)
|
||||||
}
|
}
|
||||||
@ -58,17 +57,14 @@ func (d *tcpDialer) Dial(_ protocol.DeviceID, uri *url.URL) (internalConn, error
|
|||||||
return internalConn{tc, connTypeTCPClient, tcpPriority}, nil
|
return internalConn{tc, connTypeTCPClient, tcpPriority}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *tcpDialer) RedialFrequency() time.Duration {
|
|
||||||
return time.Duration(d.cfg.Options().ReconnectIntervalS) * time.Second
|
|
||||||
}
|
|
||||||
|
|
||||||
type tcpDialerFactory struct{}
|
type tcpDialerFactory struct{}
|
||||||
|
|
||||||
func (tcpDialerFactory) New(cfg config.Wrapper, tlsCfg *tls.Config) genericDialer {
|
func (tcpDialerFactory) New(opts config.OptionsConfiguration, tlsCfg *tls.Config) genericDialer {
|
||||||
return &tcpDialer{
|
return &tcpDialer{commonDialer{
|
||||||
cfg: cfg,
|
trafficClass: opts.TrafficClass,
|
||||||
tlsCfg: tlsCfg,
|
reconnectInterval: time.Duration(opts.ReconnectIntervalS) * time.Second,
|
||||||
}
|
tlsCfg: tlsCfg,
|
||||||
|
}}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tcpDialerFactory) Priority() int {
|
func (tcpDialerFactory) Priority() int {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user