"syscall"
"time"
+ "bitbucket.org/anacrolix/go.torrent/data"
filePkg "bitbucket.org/anacrolix/go.torrent/data/file"
"bitbucket.org/anacrolix/go.torrent/dht"
"bitbucket.org/anacrolix/go.torrent/internal/pieceordering"
disableTCP: cfg.DisableTCP,
_configDir: cfg.ConfigDir,
config: *cfg,
- torrentDataOpener: func(md *metainfo.Info) (StatelessData, error) {
- return filePkg.TorrentData(md, cfg.DataDir), nil
+ torrentDataOpener: func(md *metainfo.Info) data.Data {
+ return filePkg.TorrentData(md, cfg.DataDir)
},
quit: make(chan struct{}),
return
}
-type TorrentDataOpener func(*metainfo.Info) (StatelessData, error)
+type TorrentDataOpener func(*metainfo.Info) data.Data
func (cl *Client) setMetaData(t *torrent, md metainfo.Info, bytes []byte) (err error) {
err = t.setMetadata(md, bytes, &cl.mu)
return
}
close(t.gotMetainfo)
- td, err := cl.torrentDataOpener(&md)
- if err != nil {
- return
- }
+ td := cl.torrentDataOpener(&md)
err = cl.setStorage(t, td)
return
}
"time"
"bitbucket.org/anacrolix/go.torrent/data/blob"
- "github.com/anacrolix/libtorgo/metainfo"
"github.com/bradfitz/iter"
t.Fatal(err)
}
defer os.RemoveAll(leecherDataDir)
- cfg.TorrentDataOpener = func(info *metainfo.Info) (StatelessData, error) {
- return blob.TorrentData(info, leecherDataDir), nil
- }
+ // cfg.TorrentDataOpener = func(info *metainfo.Info) (data.Data, error) {
+ // return blob.TorrentData(info, leecherDataDir), nil
+ // }
+ cfg.TorrentDataOpener = blob.NewStore(leecherDataDir).OpenTorrent
leecher, _ := NewClient(&cfg)
defer leecher.Stop()
leecherGreeting, _ := leecher.AddTorrent(mi)
"os"
"path/filepath"
+ dataPkg "bitbucket.org/anacrolix/go.torrent/data"
+
"github.com/anacrolix/libtorgo/metainfo"
)
baseDir string
}
-func TorrentData(info *metainfo.Info, baseDir string) *data {
- return &data{info, baseDir}
+type store struct {
+ baseDir string
+}
+
+func (me store) OpenTorrent(info *metainfo.Info) dataPkg.Data {
+ return &data{info, me.baseDir}
+}
+
+func NewStore(baseDir string) dataPkg.Store {
+ return store{baseDir}
}
func (me *data) pieceHashHex(i int) string {
--- /dev/null
+package data
+
+import (
+ "io"
+
+ "github.com/anacrolix/libtorgo/metainfo"
+)
+
+type Store interface {
+ OpenTorrent(*metainfo.Info) Data
+}
+
+type Data interface {
+ // OpenSection(off, n int64) (io.ReadCloser, error)
+ // ReadAt(p []byte, off int64) (n int, err error)
+ // Close()
+ WriteAt(p []byte, off int64) (n int, err error)
+ WriteSectionTo(w io.Writer, off, n int64) (written int64, err error)
+}
"testing"
"time"
+ "bitbucket.org/anacrolix/go.torrent/data"
+
"golang.org/x/net/context"
"bitbucket.org/anacrolix/go.torrent"
NoDefaultBlocklist: true,
- TorrentDataOpener: func(info *metainfo.Info) (torrent.StatelessData, error) {
- return mmap.TorrentData(info, filepath.Join(layout.BaseDir, "download"))
+ TorrentDataOpener: func(info *metainfo.Info) data.Data {
+ ret, _ := mmap.TorrentData(info, filepath.Join(layout.BaseDir, "download"))
+ return ret
},
// This can be used to check if clients can connect to other clients
"sync"
"time"
+ "bitbucket.org/anacrolix/go.torrent/data"
pp "bitbucket.org/anacrolix/go.torrent/peer_protocol"
"bitbucket.org/anacrolix/go.torrent/tracker"
"bitbucket.org/anacrolix/go.torrent/util"
Port int
}
-type StatelessData interface {
- // OpenSection(off, n int64) (io.ReadCloser, error)
- // ReadAt(p []byte, off int64) (n int, err error)
- // Close()
- WriteAt(p []byte, off int64) (n int, err error)
- WriteSectionTo(w io.Writer, off, n int64) (written int64, err error)
-}
-
// Represents data storage for a Torrent. Additional optional interfaces to
// implement are io.Closer, io.ReaderAt, StatefulData, and SectionOpener.
type Data interface {
- StatelessData
+ data.Data
}
// Data maintains per-piece persistent state.