storage

package
v0.4.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 2, 2024 License: MIT Imports: 10 Imported by: 0

Documentation

Overview

bittorrent data storage backend

Index

Constants

This section is empty.

Variables

View Source
var ErrMetaInfoMissmatch = errors.New("torrent infohash does not match")
View Source
var ErrNoMetaInfo = errors.New("no torrent file")

Functions

This section is empty.

Types

type FsStorage

type FsStorage struct {
	// directory for seeding data
	SeedingDir string
	// directory for downloaded data
	DataDir string
	// directory for torrent seed data
	MetaDir string
	// filesystem driver
	FS fs.Driver
	// number of io worker threads
	Workers int
	// IOP channel buffer size
	IOPBufferSize int
	// contains filtered or unexported fields
}

filesystem based torrent storage

func (*FsStorage) Close

func (st *FsStorage) Close() (err error)

func (*FsStorage) CreateNewBitfield

func (st *FsStorage) CreateNewBitfield(ih common.Infohash, bits uint32)

func (*FsStorage) EmptyTorrent

func (st *FsStorage) EmptyTorrent(ih common.Infohash) (t Torrent)

func (*FsStorage) FindBitfield

func (st *FsStorage) FindBitfield(ih common.Infohash) (bf *bittorrent.Bitfield)

func (*FsStorage) HasBitfield

func (st *FsStorage) HasBitfield(ih common.Infohash) bool

func (*FsStorage) Init

func (st *FsStorage) Init() (err error)

func (*FsStorage) OpenAllTorrents

func (st *FsStorage) OpenAllTorrents() (torrents []Torrent, err error)

func (*FsStorage) OpenTorrent

func (st *FsStorage) OpenTorrent(info *metainfo.TorrentFile) (t Torrent, err error)

func (*FsStorage) PollNewTorrents

func (st *FsStorage) PollNewTorrents() (torrents []Torrent)

func (*FsStorage) Run

func (st *FsStorage) Run()

type IOP

type IOP interface {
	RunIOP()
}

type Storage

type Storage interface {

	// Close and flush storage backend
	Close() error

	// create a torrent with no meta info
	EmptyTorrent(ih common.Infohash) Torrent

	// open a storage session for a torrent
	// does not verify any piece data
	OpenTorrent(info *metainfo.TorrentFile) (Torrent, error)

	// open all torrents tracked by this storage
	// does not verify any piece data
	OpenAllTorrents() ([]Torrent, error)

	// intialize backend
	Init() error

	// returns nil if we have no new torrents added from backend
	// returns next new torrents added to storage
	PollNewTorrents() []Torrent

	// run mainloop
	Run()
}

torrent storage driver

type Torrent

type Torrent interface {

	// allocate all files for download
	Allocate() error

	// verify all piece data
	VerifyAll() error

	// return true if we are currently doing a deep check
	Checking() bool

	// put a chunk of data
	PutChunk(pc *common.PieceData) error

	// visit a piece from storage
	GetPiece(r common.PieceRequest, pc *common.PieceData) error

	// verify a piece by index
	VerifyPiece(idx uint32) error

	// get metainfo
	MetaInfo() *metainfo.TorrentFile

	// get infohash
	Infohash() common.Infohash

	// get bitfield, if cached return cache otherwise compute and cache
	Bitfield() *bittorrent.Bitfield

	// get number of bytes we already downloaded
	DownloadedSize() uint64

	// get number of bytes remaining we need to download
	DownloadRemaining() uint64

	// flush bitfield to disk
	Flush() error

	// get name of this torrent
	Name() string

	// delete all files and metadata for this torrent
	Delete() error

	// save torrent stats
	SaveStats(s *stats.Tracker) error

	// get a list of files for this torrent
	// returns absolute path of all downloaded files
	FileList() []string

	// move data files to other directory, blocks for a LONG time
	MoveTo(other string) error

	// verify data and move to seeding directory
	Seed() (bool, error)

	// set metainfo for empty torrent
	PutInfoBytes(info []byte) error

	// get directory for data files
	DownloadDir() string
}

storage session for 1 torrent

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL