client.go | 7 +++++-- peerconn.go | 4 ++-- peerconn_test.go | 22 +++++++++++----------- pexconn_test.go | 2 +- torrent.go | 2 +- diff --git a/client.go b/client.go index bda89c6f695cbddd027712720e7e829cc6afa905..e66d1022ec931b1466c1ccb9adc370faa9840b13 100644 --- a/client.go +++ b/client.go @@ -895,7 +895,7 @@ log.Fmsg( "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 @@ cl.badPeerIPs[ip.String()] = struct{}{} } 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 @@ peerChoking: true, PeerMaxRequests: 250, RemoteAddr: remoteAddr, - network: network, + Network: network, }, connString: connString, conn: nc, diff --git a/peerconn.go b/peerconn.go index 73ac8de63df6bdf973e83e979163146c4c658b69..b5ff73f247f6a6880f8ff7cb62b22d3c8b53ca86 100644 --- a/peerconn.go +++ b/peerconn.go @@ -55,7 +55,7 @@ peerImpl outgoing bool - network string + Network string RemoteAddr PeerRemoteAddr // True if the connection is operating over MSE obfuscation. headerEncrypted bool @@ -275,7 +275,7 @@ return } 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 a65710894eb38992a67ca1b4aee41008cc30b5b7..5fbc565a5284fe3a40df16b6065f08f72b3a8889 100644 --- a/peerconn_test.go +++ b/peerconn_test.go @@ -24,13 +24,13 @@ cl := Client{ 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 @@ })) 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 @@ {&PeerConn{Peer: Peer{outgoing: false, PeerPrefersEncryption: false}}, 0}, {&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 @@ e pexEvent }{ { 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 868936f3ddcc00a0782057ba784257cca1410d8e..609e088eee0dd21d1d877614497ef8e32112dc7b 100644 --- a/pexconn_test.go +++ b/pexconn_test.go @@ -18,7 +18,7 @@ } 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 0cfe31f0777deb3e5ac9587c5fe6aada7ddc563f..9e36778baf107b5d69f3662ca2814df53c646e8f 100644 --- a/torrent.go +++ b/torrent.go @@ -2110,7 +2110,7 @@ ws := webseedPeer{ peer: Peer{ t: t, outgoing: true, - network: "http", + Network: "http", reconciledHandshakeStats: true, peerSentHaveAll: true, PeerMaxRequests: maxRequests,