torrent: github.com/anacrolix/torrent/storage Index | Files | Directories

package storage

import "github.com/anacrolix/torrent/storage"

Package storage implements storage backends for package torrent.

Index

Package Files

boltPieceCompletion.go bolt_piece.go boltdb.go completion.go completion_piece_map.go doc.go file.go file_misc.go file_piece.go interface.go mmap.go piece_resource.go safe-path.go sqlite-piece-completion.go wrappers.go

func CreateNativeZeroLengthFile Uses

func CreateNativeZeroLengthFile(name string) error

A helper to create zero-length files which won't appear for file-orientated storage since no writes will ever occur to them (no torrent data is associated with a zero-length file). The caller should make sure the file name provided is safe/sanitized.

func NewFileWithCompletion Uses

func NewFileWithCompletion(baseDir string, completion PieceCompletion) *fileClientImpl

func NewMMapWithCompletion Uses

func NewMMapWithCompletion(baseDir string, completion PieceCompletion) *mmapClientImpl

func NewSqlitePieceCompletion Uses

func NewSqlitePieceCompletion(dir string) (ret *sqlitePieceCompletion, err error)

func ToSafeFilePath Uses

func ToSafeFilePath(fileInfoComponents ...string) (string, error)

Combines file info path components, ensuring the result won't escape into parent directories.

type Client Uses

type Client struct {
    // contains filtered or unexported fields
}

func NewClient Uses

func NewClient(cl ClientImpl) *Client

func (Client) OpenTorrent Uses

func (cl Client) OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash) (*Torrent, error)

type ClientImpl Uses

type ClientImpl interface {
    OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash) (TorrentImpl, error)
}

Represents data storage for an unspecified torrent.

func NewFileByInfoHash Uses

func NewFileByInfoHash(baseDir string) ClientImpl

File storage with data partitioned by infohash.

func NewFileWithCustomPathMaker Uses

func NewFileWithCustomPathMaker(baseDir string, pathMaker func(baseDir string, info *metainfo.Info, infoHash metainfo.Hash) string) ClientImpl

Allows passing a function to determine the path for storing torrent data. The function is responsible for sanitizing the info if it uses some part of it (for example sanitizing info.Name).

func NewResourcePieces Uses

func NewResourcePieces(p PieceProvider) ClientImpl

type ClientImplCloser Uses

type ClientImplCloser interface {
    ClientImpl
    Close() error
}

func NewBoltDB Uses

func NewBoltDB(filePath string) ClientImplCloser

func NewFile Uses

func NewFile(baseDir string) ClientImplCloser

All Torrent data stored in this baseDir

func NewMMap Uses

func NewMMap(baseDir string) ClientImplCloser

type Completion Uses

type Completion struct {
    Complete bool
    Ok       bool
}

type ConsecutiveChunkWriter Uses

type ConsecutiveChunkWriter interface {
    WriteConsecutiveChunks(prefix string, _ io.Writer) (int64, error)
}

type Piece Uses

type Piece struct {
    PieceImpl
    // contains filtered or unexported fields
}

func (Piece) ReadAt Uses

func (p Piece) ReadAt(b []byte, off int64) (n int, err error)

func (Piece) WriteAt Uses

func (p Piece) WriteAt(b []byte, off int64) (n int, err error)

func (Piece) WriteTo Uses

func (p Piece) WriteTo(w io.Writer) (int64, error)

Why do we have this wrapper? Well PieceImpl doesn't implement io.Reader, so we can't let io.Copy and friends check for io.WriterTo and fallback for us since they expect an io.Reader.

type PieceCompletion Uses

type PieceCompletion interface {
    PieceCompletionGetSetter
    Close() error
}

Implementations track the completion of pieces. It must be concurrent-safe.

func NewBoltPieceCompletion Uses

func NewBoltPieceCompletion(dir string) (ret PieceCompletion, err error)

func NewMapPieceCompletion Uses

func NewMapPieceCompletion() PieceCompletion

type PieceCompletionGetSetter Uses

type PieceCompletionGetSetter interface {
    Get(metainfo.PieceKey) (Completion, error)
    Set(_ metainfo.PieceKey, complete bool) error
}

type PieceImpl Uses

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
}

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 PieceProvider Uses

type PieceProvider interface {
    resource.Provider
}

type Torrent Uses

type Torrent struct {
    TorrentImpl
}

func (Torrent) Piece Uses

func (t Torrent) Piece(p metainfo.Piece) Piece

type TorrentImpl Uses

type TorrentImpl interface {
    Piece(metainfo.Piece) PieceImpl
    Close() error
}

Data storage bound to a torrent.

Directories

PathSynopsis
sqlite

Package storage imports 26 packages (graph) and is imported by 28 packages. Updated 2020-11-21. Refresh now. Tools for package owners.