]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add seeder and files for issue #908
authorMatt Joiner <anacrolix@gmail.com>
Thu, 29 Feb 2024 05:08:05 +0000 (16:08 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 5 Mar 2024 07:12:30 +0000 (18:12 +1100)
internal/cmd/issue-908/main.go [new file with mode: 0644]
internal/cmd/issue-908/testdata/docker.png [new symlink]

diff --git a/internal/cmd/issue-908/main.go b/internal/cmd/issue-908/main.go
new file mode 100644 (file)
index 0000000..a25447b
--- /dev/null
@@ -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 (symlink)
index 0000000..558fda4
--- /dev/null
@@ -0,0 +1 @@
+../../../../testdata/bootstrap.dat.torrent
\ No newline at end of file