]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Improve logging and errors for accept rate limiting
authorMatt Joiner <anacrolix@gmail.com>
Sat, 4 Jan 2020 06:14:18 +0000 (17:14 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Sat, 4 Jan 2020 06:14:18 +0000 (17:14 +1100)
client.go

index b2c8c78dd25652df3d71ff68ec3a9f72c41f57a8..769a6a3793deb1c94fa5a701d618f7a1002a4f39 100644 (file)
--- a/client.go
+++ b/client.go
@@ -401,22 +401,26 @@ func (cl *Client) waitAccept() {
        }
 }
 
-func (cl *Client) rejectAccepted(conn net.Conn) bool {
+func (cl *Client) rejectAccepted(conn net.Conn) error {
        ra := conn.RemoteAddr()
        rip := missinggo.AddrIP(ra)
        if cl.config.DisableIPv4Peers && rip.To4() != nil {
-               return true
+               return errors.New("ipv4 peers disabled")
        }
        if cl.config.DisableIPv4 && len(rip) == net.IPv4len {
-               return true
+               return errors.New("ipv4 disabled")
+
        }
        if cl.config.DisableIPv6 && len(rip) == net.IPv6len && rip.To4() == nil {
-               return true
+               return errors.New("ipv6 disabled")
        }
        if cl.rateLimitAccept(rip) {
-               return true
+               return errors.New("source IP accepted rate limited")
+       }
+       if cl.badPeerIPPort(rip, missinggo.AddrPort(ra)) {
+               return errors.New("bad source addr")
        }
-       return cl.badPeerIPPort(rip, missinggo.AddrPort(ra))
+       return nil
 }
 
 func (cl *Client) acceptConnections(l net.Listener) {
@@ -426,7 +430,7 @@ func (cl *Client) acceptConnections(l net.Listener) {
                conn = pproffd.WrapNetConn(conn)
                cl.rLock()
                closed := cl.closed.IsSet()
-               reject := false
+               var reject error
                if conn != nil {
                        reject = cl.rejectAccepted(conn)
                }
@@ -442,8 +446,9 @@ func (cl *Client) acceptConnections(l net.Listener) {
                        continue
                }
                go func() {
-                       if reject {
+                       if reject != nil {
                                torrent.Add("rejected accepted connections", 1)
+                               cl.logger.Printf("rejecting accepted conn: %v", reject)
                                conn.Close()
                        } else {
                                go cl.incomingConnection(conn)
@@ -838,6 +843,7 @@ func (cl *Client) runReceivedConn(c *connection) {
        }
        if t == nil {
                torrent.Add("received handshake for unloaded torrent", 1)
+               t.logger.Printf("received handshake for unloaded torrent")
                cl.lock()
                cl.onBadAccept(c.remoteAddr)
                cl.unlock()