]> Sergey Matveev's repositories - btrtrc.git/blob - dialer.go
Tidy up the Dialer interface
[btrtrc.git] / dialer.go
1 package torrent
2
3 import (
4         "context"
5         "net"
6 )
7
8 // Dialers have the network locked in.
9 type Dialer interface {
10         Dial(_ context.Context, addr string) (net.Conn, error)
11         DialerNetwork() string
12 }
13
14 // An interface to ease wrapping dialers that explicitly include a network parameter.
15 type DialContexter interface {
16         DialContext(ctx context.Context, network, addr string) (net.Conn, error)
17 }
18
19 // Used by wrappers of standard library network types.
20 var DefaultNetDialer = &net.Dialer{}
21
22 // Adapts a DialContexter to the Dial interface in this package.
23 type NetworkDialer struct {
24         Network string
25         Dialer  DialContexter
26 }
27
28 func (me NetworkDialer) DialerNetwork() string {
29         return me.Network
30 }
31
32 func (me NetworkDialer) Dial(ctx context.Context, addr string) (_ net.Conn, err error) {
33         return me.Dialer.DialContext(ctx, me.Network, addr)
34 }