Support banning webseeds
This commit is contained in:
parent
ef3a53d2e4
commit
32501740f2
|
@ -1505,6 +1505,7 @@ func (cl *Client) banPeerIP(ip net.IP) {
|
|||
t.iterPeers(func(p *Peer) {
|
||||
if p.remoteIp().Equal(ip) {
|
||||
t.logger.Levelf(log.Warning, "dropping peer %v with banned ip %v", p, ip)
|
||||
// Should this be a close?
|
||||
p.drop()
|
||||
}
|
||||
})
|
||||
|
|
|
@ -20,7 +20,10 @@ type peerImpl interface {
|
|||
connectionFlags() string
|
||||
onClose()
|
||||
onGotInfo(*metainfo.Info)
|
||||
// Drop connection. This may be a no-op if there is no connection.
|
||||
drop()
|
||||
// Rebuke the peer
|
||||
ban()
|
||||
String() string
|
||||
connStatusString() string
|
||||
|
||||
|
|
|
@ -1595,6 +1595,10 @@ func (cn *PeerConn) drop() {
|
|||
cn.t.dropConnection(cn)
|
||||
}
|
||||
|
||||
func (cn *PeerConn) ban() {
|
||||
cn.t.cl.banPeerIP(cn.remoteIp())
|
||||
}
|
||||
|
||||
func (cn *Peer) netGoodPiecesDirtied() int64 {
|
||||
return cn._stats.PiecesDirtiedGood.Int64() - cn._stats.PiecesDirtiedBad.Int64()
|
||||
}
|
||||
|
|
|
@ -2049,9 +2049,8 @@ func (t *Torrent) pieceHashed(piece pieceIndex, passed bool, hashIoErr error) {
|
|||
// single peer for a piece, and we never progress that piece to completion, we
|
||||
// will never smart-ban them. Discovered in
|
||||
// https://github.com/anacrolix/torrent/issues/715.
|
||||
t.logger.Levelf(log.Warning, "banning %v for being sole dirtier of piece %v after failed piece check", c.remoteIp(), piece)
|
||||
t.cl.banPeerIP(c.remoteIp())
|
||||
c.drop()
|
||||
t.logger.Levelf(log.Warning, "banning %v for being sole dirtier of piece %v after failed piece check", c, piece)
|
||||
c.ban()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2156,6 +2155,7 @@ func (t *Torrent) dropBannedPeers() {
|
|||
p, remoteIp, p.bannableAddr)
|
||||
}
|
||||
if _, ok := t.cl.badPeerIPs[netipAddr]; ok {
|
||||
// Should this be a close?
|
||||
p.drop()
|
||||
log.Printf("dropped %v for banned remote IP %v", p, netipAddr)
|
||||
}
|
||||
|
|
|
@ -114,10 +114,13 @@ func (ws *webseedPeer) connectionFlags() string {
|
|||
return "WS"
|
||||
}
|
||||
|
||||
// TODO: This is called when banning peers. Perhaps we want to be able to ban webseeds too. We could
|
||||
// return bool if this is even possible, and if it isn't, skip to the next drop candidate.
|
||||
// Maybe this should drop all existing connections, or something like that.
|
||||
func (ws *webseedPeer) drop() {}
|
||||
|
||||
func (cn *webseedPeer) ban() {
|
||||
cn.peer.close()
|
||||
}
|
||||
|
||||
func (ws *webseedPeer) handleUpdateRequests() {
|
||||
// Because this is synchronous, webseed peers seem to get first dibs on newly prioritized
|
||||
// pieces.
|
||||
|
|
Loading…
Reference in New Issue