request-strategy-impls.go | 11 +++++++++-- request-strategy/order.go | 3 +-- request-strategy/torrent.go | 2 +- diff --git a/request-strategy-impls.go b/request-strategy-impls.go index f4c126466ba4e57ec6941f3768cb08bfb5a31a08..bf3e4083129de42bc76b2bd7c8df831987d711f5 100644 --- a/request-strategy-impls.go +++ b/request-strategy-impls.go @@ -44,8 +44,15 @@ type requestStrategyTorrent struct { t *Torrent } -func (r requestStrategyTorrent) Piece(i int) request_strategy.Piece { - return requestStrategyPiece{r.t, i} +func (r requestStrategyTorrent) IgnorePiece(i int) bool { + if r.t.ignorePieceForRequests(i) { + return true + } + if r.t.pieceNumPendingChunks(i) == 0 { + return true + } + + return false } func (r requestStrategyTorrent) ChunksPerPiece() uint32 { diff --git a/request-strategy/order.go b/request-strategy/order.go index 130c698b9f9e6e75235ef0987fa4b68a73d762dc..09f1ff0c5863c7bf1a8abdd6d472b05ebc10be69 100644 --- a/request-strategy/order.go +++ b/request-strategy/order.go @@ -54,7 +54,6 @@ var allTorrentsUnverifiedBytes int64 pro.tree.Scan(func(_i pieceRequestOrderItem) bool { ih := _i.key.InfoHash var t Torrent = input.Torrent(ih) - var piece Piece = t.Piece(_i.key.Index) pieceLength := t.PieceLength() if storageLeft != nil { if *storageLeft < pieceLength { @@ -62,7 +61,7 @@ return false } *storageLeft -= pieceLength } - if !piece.Request() || piece.NumPendingChunks() == 0 { + if t.IgnorePiece(_i.key.Index) { // TODO: Clarify exactly what is verified. Stuff that's being hashed should be // considered unverified and hold up further requests. return true diff --git a/request-strategy/torrent.go b/request-strategy/torrent.go index 51fc1a6cc3516e86fbf1772fe68c916c9294ada6..2460f2e4df1296dbf02f93ef7d0a78ad0b671f63 100644 --- a/request-strategy/torrent.go +++ b/request-strategy/torrent.go @@ -1,7 +1,7 @@ package request_strategy type Torrent interface { - Piece(int) Piece + IgnorePiece(int) bool ChunksPerPiece() uint32 PieceLength() int64 }