From 40dd84a3cc26bbc86ad0ea6db535f7ca6548e960 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Thu, 29 Feb 2024 16:08:05 +1100 Subject: [PATCH] Add seeder and files for issue #908 --- internal/cmd/issue-908/main.go | 84 ++++++++++++++++++++++ internal/cmd/issue-908/testdata/docker.png | 1 + 2 files changed, 85 insertions(+) create mode 100644 internal/cmd/issue-908/main.go create mode 120000 internal/cmd/issue-908/testdata/docker.png diff --git a/internal/cmd/issue-908/main.go b/internal/cmd/issue-908/main.go new file mode 100644 index 00000000..a25447ba --- /dev/null +++ b/internal/cmd/issue-908/main.go @@ -0,0 +1,84 @@ +package main + +import ( + "fmt" + "github.com/davecgh/go-spew/spew" + "log" + "net/http" + "os" + + "github.com/anacrolix/torrent" + "github.com/anacrolix/torrent/bencode" + "github.com/anacrolix/torrent/metainfo" +) + +func main() { + cfg := torrent.NewDefaultClientConfig() + cfg.Seed = true + cfg.Debug = true + cfg.NoDefaultPortForwarding = true + cfg.DisableIPv6 = true + + cl, err := torrent.NewClient(cfg) + if err != nil { + log.Fatal(err) + } + fmt.Printf("%x\n", cl.PeerID()) + defer cl.Close() + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + cl.WriteStatus(w) + }) + go http.ListenAndServe(":8080", nil) + + filePath := "testdata" + fi, err := os.Stat(filePath) + if err != nil { + panic(err) + } + totalLength := fi.Size() + if err != nil { + log.Fatal(err) + } + pieceLength := metainfo.ChoosePieceLength(totalLength) + info := metainfo.Info{ + PieceLength: pieceLength, + } + err = info.BuildFromFilePath(filePath) + if err != nil { + log.Fatal(err) + } + for _, fi := range info.Files { + log.Printf("added %q", fi.Path) + } + mi := &metainfo.MetaInfo{ + InfoBytes: bencode.MustMarshal(info), + } + spew.Dump(info) + torrentFile := mi + torrentFile.Announce = "" + + // Add the torrent to the client + tor, err := cl.AddTorrent(torrentFile) + if err != nil { + log.Fatal(err) + } + + // Wait for the torrent to be ready + <-tor.GotInfo() + + hash := tor.InfoHash() + fmt.Printf("%v\n", tor.Metainfo().Magnet(&hash, tor.Info())) + + // Announce the torrent to DHT + for _, _ds := range cl.DhtServers() { + ds := _ds + done, _, err := tor.AnnounceToDht(ds) + if err != nil { + log.Fatal(err) + } + for c := range done { + fmt.Println("++++++++++++++++++++++++", c) + } + } + select {} +} diff --git a/internal/cmd/issue-908/testdata/docker.png b/internal/cmd/issue-908/testdata/docker.png new file mode 120000 index 00000000..558fda45 --- /dev/null +++ b/internal/cmd/issue-908/testdata/docker.png @@ -0,0 +1 @@ +../../../../testdata/bootstrap.dat.torrent \ No newline at end of file -- 2.44.0