diff --git a/client.go b/client.go index bda89c6f..e66d1022 100644 --- a/client.go +++ b/client.go @@ -895,7 +895,7 @@ func (cl *Client) runReceivedConn(c *PeerConn) { "error receiving handshakes on %v: %s", c, err, ).SetLevel(log.Debug). Add( - "network", c.network, + "network", c.Network, ).Log(cl.logger) torrent.Add("error receiving handshake", 1) cl.lock() @@ -1368,6 +1368,9 @@ func (cl *Client) banPeerIP(ip net.IP) { } func (cl *Client) newConnection(nc net.Conn, outgoing bool, remoteAddr PeerRemoteAddr, network, connString string) (c *PeerConn) { + if network == "" { + panic(remoteAddr) + } c = &PeerConn{ Peer: Peer{ outgoing: outgoing, @@ -1376,7 +1379,7 @@ func (cl *Client) newConnection(nc net.Conn, outgoing bool, remoteAddr PeerRemot PeerMaxRequests: 250, RemoteAddr: remoteAddr, - network: network, + Network: network, }, connString: connString, conn: nc, diff --git a/peerconn.go b/peerconn.go index 73ac8de6..b5ff73f2 100644 --- a/peerconn.go +++ b/peerconn.go @@ -55,7 +55,7 @@ type Peer struct { peerImpl outgoing bool - network string + Network string RemoteAddr PeerRemoteAddr // True if the connection is operating over MSE obfuscation. headerEncrypted bool @@ -275,7 +275,7 @@ func (cn *PeerConn) connectionFlags() (ret string) { } func (cn *PeerConn) utp() bool { - return parseNetworkString(cn.network).Udp + return parseNetworkString(cn.Network).Udp } // Inspired by https://github.com/transmission/transmission/wiki/Peer-Status-Text. diff --git a/peerconn_test.go b/peerconn_test.go index a6571089..5fbc565a 100644 --- a/peerconn_test.go +++ b/peerconn_test.go @@ -24,13 +24,13 @@ func TestSendBitfieldThenHave(t *testing.T) { config: TestingConfig(), } cl.initLogger() - c := cl.newConnection(nil, false, nil, "", "") + c := cl.newConnection(nil, false, nil, "io.Pipe", "") c.setTorrent(cl.newTorrent(metainfo.Hash{}, nil)) c.t.setInfo(&metainfo.Info{ Pieces: make([]byte, metainfo.HashSize*3), }) r, w := io.Pipe() - c.r = r + //c.r = r c.w = w go c.writer(time.Minute) c.locker().Lock() @@ -109,7 +109,7 @@ func BenchmarkConnectionMainReadLoop(b *testing.B) { t.setChunkSize(defaultChunkSize) t._pendingPieces.Set(0, PiecePriorityNormal.BitmapPriority()) r, w := net.Pipe() - cn := cl.newConnection(r, true, nil, "", "") + cn := cl.newConnection(r, true, r.RemoteAddr(), r.RemoteAddr().Network(), regularNetConnPeerConnConnString(r)) cn.setTorrent(t) mrlErr := make(chan error) msg := pp.Message{ @@ -159,10 +159,10 @@ func TestConnPexPeerFlags(t *testing.T) { {&PeerConn{Peer: Peer{outgoing: false, PeerPrefersEncryption: true}}, pp.PexPrefersEncryption}, {&PeerConn{Peer: Peer{outgoing: true, PeerPrefersEncryption: false}}, pp.PexOutgoingConn}, {&PeerConn{Peer: Peer{outgoing: true, PeerPrefersEncryption: true}}, pp.PexOutgoingConn | pp.PexPrefersEncryption}, - {&PeerConn{Peer: Peer{RemoteAddr: udpAddr, network: udpAddr.Network()}}, pp.PexSupportsUtp}, - {&PeerConn{Peer: Peer{RemoteAddr: udpAddr, network: udpAddr.Network(), outgoing: true}}, pp.PexOutgoingConn | pp.PexSupportsUtp}, - {&PeerConn{Peer: Peer{RemoteAddr: tcpAddr, network: tcpAddr.Network(), outgoing: true}}, pp.PexOutgoingConn}, - {&PeerConn{Peer: Peer{RemoteAddr: tcpAddr, network: tcpAddr.Network()}}, 0}, + {&PeerConn{Peer: Peer{RemoteAddr: udpAddr, Network: udpAddr.Network()}}, pp.PexSupportsUtp}, + {&PeerConn{Peer: Peer{RemoteAddr: udpAddr, Network: udpAddr.Network(), outgoing: true}}, pp.PexOutgoingConn | pp.PexSupportsUtp}, + {&PeerConn{Peer: Peer{RemoteAddr: tcpAddr, Network: tcpAddr.Network(), outgoing: true}}, pp.PexOutgoingConn}, + {&PeerConn{Peer: Peer{RemoteAddr: tcpAddr, Network: tcpAddr.Network()}}, 0}, } for i, tc := range testcases { f := tc.conn.pexPeerFlags() @@ -184,22 +184,22 @@ func TestConnPexEvent(t *testing.T) { }{ { pexAdd, - &PeerConn{Peer: Peer{RemoteAddr: udpAddr, network: udpAddr.Network()}}, + &PeerConn{Peer: Peer{RemoteAddr: udpAddr, Network: udpAddr.Network()}}, pexEvent{pexAdd, udpAddr, pp.PexSupportsUtp}, }, { pexDrop, - &PeerConn{Peer: Peer{RemoteAddr: tcpAddr, network: tcpAddr.Network(), outgoing: true, PeerListenPort: dialTcpAddr.Port}}, + &PeerConn{Peer: Peer{RemoteAddr: tcpAddr, Network: tcpAddr.Network(), outgoing: true, PeerListenPort: dialTcpAddr.Port}}, pexEvent{pexDrop, tcpAddr, pp.PexOutgoingConn}, }, { pexAdd, - &PeerConn{Peer: Peer{RemoteAddr: tcpAddr, network: tcpAddr.Network(), PeerListenPort: dialTcpAddr.Port}}, + &PeerConn{Peer: Peer{RemoteAddr: tcpAddr, Network: tcpAddr.Network(), PeerListenPort: dialTcpAddr.Port}}, pexEvent{pexAdd, dialTcpAddr, 0}, }, { pexDrop, - &PeerConn{Peer: Peer{RemoteAddr: udpAddr, network: udpAddr.Network(), PeerListenPort: dialUdpAddr.Port}}, + &PeerConn{Peer: Peer{RemoteAddr: udpAddr, Network: udpAddr.Network(), PeerListenPort: dialUdpAddr.Port}}, pexEvent{pexDrop, dialUdpAddr, pp.PexSupportsUtp}, }, } diff --git a/pexconn_test.go b/pexconn_test.go index 868936f3..609e088e 100644 --- a/pexconn_test.go +++ b/pexconn_test.go @@ -18,7 +18,7 @@ func TestPexConnState(t *testing.T) { cl.initLogger() torrent := cl.newTorrent(metainfo.Hash{}, nil) addr := &net.TCPAddr{IP: net.IPv6loopback, Port: 4747} - c := cl.newConnection(nil, false, addr, "", "") + c := cl.newConnection(nil, false, addr, addr.Network(), "") c.PeerExtensionIDs = make(map[pp.ExtensionName]pp.ExtensionNumber) c.PeerExtensionIDs[pp.ExtensionNamePex] = pexExtendedId c.writerCond.L.Lock() diff --git a/torrent.go b/torrent.go index 0cfe31f0..9e36778b 100644 --- a/torrent.go +++ b/torrent.go @@ -2110,7 +2110,7 @@ func (t *Torrent) addWebSeed(url string) { peer: Peer{ t: t, outgoing: true, - network: "http", + Network: "http", reconciledHandshakeStats: true, peerSentHaveAll: true, PeerMaxRequests: maxRequests,