It was incorrect to assume piece hashing only operates on incomplete chunk data. This actually uncovered a bug where duplicate hash checks occurred, and the redundant checks would fail due to not reading the completed data.
46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
package storage
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/anacrolix/torrent/metainfo"
|
|
)
|
|
|
|
type ClientImplCloser interface {
|
|
ClientImpl
|
|
Close() error
|
|
}
|
|
|
|
// Represents data storage for an unspecified torrent.
|
|
type ClientImpl interface {
|
|
OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash) (TorrentImpl, error)
|
|
}
|
|
|
|
// Data storage bound to a torrent.
|
|
type TorrentImpl interface {
|
|
Piece(metainfo.Piece) PieceImpl
|
|
Close() error
|
|
}
|
|
|
|
// Interacts with torrent piece data. Optional interfaces to implement include io.WriterTo, such as
|
|
// when a piece supports a more efficient way to write out incomplete chunks
|
|
type PieceImpl interface {
|
|
// These interfaces are not as strict as normally required. They can
|
|
// assume that the parameters are appropriate for the dimensions of the
|
|
// piece.
|
|
io.ReaderAt
|
|
io.WriterAt
|
|
// Called when the client believes the piece data will pass a hash check.
|
|
// The storage can move or mark the piece data as read-only as it sees
|
|
// fit.
|
|
MarkComplete() error
|
|
MarkNotComplete() error
|
|
// Returns true if the piece is complete.
|
|
Completion() Completion
|
|
}
|
|
|
|
type Completion struct {
|
|
Complete bool
|
|
Ok bool
|
|
}
|