]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Tidy up the Dialer interface
authorMatt Joiner <anacrolix@gmail.com>
Mon, 21 Jun 2021 03:29:26 +0000 (13:29 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Mon, 21 Jun 2021 03:29:26 +0000 (13:29 +1000)
dialer.go
socket.go
test/unix_test.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)
 }
index ba2a091bd28987f982352718a8ef800a6962f50e..7313f632ef5264e973f1561fc62fc35230b5be8e 100644 (file)
--- a/socket.go
+++ b/socket.go
@@ -39,15 +39,16 @@ func listenTcp(network, address string) (s socket, err error) {
        l, err := net.Listen(network, address)
        return tcpSocket{
                Listener: l,
-               NetDialer: NetDialer{
+               NetworkDialer: NetworkDialer{
                        Network: network,
+                       Dialer:  DefaultNetDialer,
                },
        }, err
 }
 
 type tcpSocket struct {
        net.Listener
-       NetDialer
+       NetworkDialer
 }
 
 func listenAll(networks []network, getHost func(string) string, port int, f firewallCallback) ([]socket, error) {
index 1e877c0d5a9dd98c15dfb1daa756919fb955c7d2..d8a3ff9fb9c43d25cf949c84bafef7316e96625b 100644 (file)
@@ -24,7 +24,7 @@ func TestUnixConns(t *testing.T) {
                        cfg.Debug = true
                },
                Client: func(cl *torrent.Client) {
-                       cl.AddDialer(torrent.NetDialer{Network: "unix"})
+                       cl.AddDialer(torrent.NetworkDialer{Network: "unix", Dialer: torrent.DefaultNetDialer})
                        l, err := net.Listen("unix", filepath.Join(t.TempDir(), "socket"))
                        if err != nil {
                                panic(err)