]> Sergey Matveev's repositories - btrtrc.git/blobdiff - dialer.go
Tidy up the Dialer interface
[btrtrc.git] / dialer.go
index e8126bd664ce0200e51f386d764df4b7429d7417..d499af307281b8dc531224f261a8cf5b74395427 100644 (file)
--- a/dialer.go
+++ b/dialer.go
@@ -3,43 +3,32 @@ package torrent
 import (
        "context"
        "net"
-
-       "github.com/anacrolix/missinggo/perf"
 )
 
+// Dialers have the network locked in.
 type Dialer interface {
        Dial(_ context.Context, addr string) (net.Conn, error)
        DialerNetwork() string
 }
 
-type NetDialer struct {
-       Network string
-       Dialer  net.Dialer
+// An interface to ease wrapping dialers that explicitly include a network parameter.
+type DialContexter interface {
+       DialContext(ctx context.Context, network, addr string) (net.Conn, error)
 }
 
-func (me NetDialer) DialerNetwork() string {
-       return me.Network
-}
+// Used by wrappers of standard library network types.
+var DefaultNetDialer = &net.Dialer{}
 
-func (me NetDialer) Dial(ctx context.Context, addr string) (_ net.Conn, err error) {
-       defer perf.ScopeTimerErr(&err)()
-       return me.Dialer.DialContext(ctx, me.Network, addr)
-}
-
-func (me NetDialer) LocalAddr() net.Addr {
-       return netDialerLocalAddr{me.Network, me.Dialer.LocalAddr}
+// Adapts a DialContexter to the Dial interface in this package.
+type NetworkDialer struct {
+       Network string
+       Dialer  DialContexter
 }
 
-type netDialerLocalAddr struct {
-       network string
-       addr    net.Addr
+func (me NetworkDialer) DialerNetwork() string {
+       return me.Network
 }
 
-func (me netDialerLocalAddr) Network() string { return me.network }
-
-func (me netDialerLocalAddr) String() string {
-       if me.addr == nil {
-               return ""
-       }
-       return me.addr.String()
+func (me NetworkDialer) Dial(ctx context.Context, addr string) (_ net.Conn, err error) {
+       return me.Dialer.DialContext(ctx, me.Network, addr)
 }