+++ /dev/null
-package main
-
-import (
- "bufio"
- "encoding/hex"
- "log"
- "os"
- "path"
- "strings"
- "time"
-
- "github.com/anacrolix/torrent"
- "github.com/anacrolix/torrent/metainfo"
- "github.com/anacrolix/torrent/types/infohash"
-)
-
-type stringAddr string
-
-func (stringAddr) Network() string { return "" }
-func (me stringAddr) String() string { return string(me) }
-
-func resolveTestPeers(addrs []string) (ret []torrent.PeerInfo) {
- for _, ta := range addrs {
- ret = append(ret, torrent.PeerInfo{Addr: stringAddr(ta)})
- }
- return
-}
-
-func readLinesFromFIFO(pth string) []string {
- fd, err := os.OpenFile(pth, os.O_RDONLY, os.FileMode(0666))
- if err != nil {
- log.Println("OpenFile:", pth, err)
- time.Sleep(time.Second)
- return nil
- }
- var lines []string
- scanner := bufio.NewScanner(fd)
- for scanner.Scan() {
- t := scanner.Text()
- if len(t) > 0 {
- lines = append(lines, t)
- }
- }
- fd.Close()
- return lines
-}
-
-func fifoAdd(c *torrent.Client) {
- pth := path.Join(FIFOsDir, "add")
- recreateFIFO(pth)
- for {
- for _, what := range readLinesFromFIFO(pth) {
- cols := strings.Fields(what)
- what = cols[0]
- var t *torrent.Torrent
- var err error
- if strings.HasPrefix(what, "magnet:") {
- t, err = c.AddMagnet(what)
- if err != nil {
- log.Println("AddMagnet:", what, err)
- continue
- }
- } else {
- metaInfo, err := metainfo.LoadFromFile(what)
- if err != nil {
- log.Println("LoadFromFile:", what, err)
- continue
- }
- t, err = c.AddTorrent(metaInfo)
- if err != nil {
- log.Println("AddTorrent:", what, err)
- continue
- }
- }
- if len(cols) > 1 {
- t.AddPeers(resolveTestPeers(cols[1:]))
- }
- go fifoPeerList(t)
- go fifoFileList(t)
- log.Println("added:", t.InfoHash().HexString(), t.Name())
- go func() {
- <-t.GotInfo()
- if err = saveTorrent(t); err != nil {
- log.Println("saveTorrent:", err)
- }
- txStatsLoad(t.InfoHash())
- t.DownloadAll()
- }()
- }
- time.Sleep(time.Second)
- }
-}
-
-func fifoDel(c *torrent.Client) {
- pth := path.Join(FIFOsDir, "del")
- recreateFIFO(pth)
- for {
- for _, what := range readLinesFromFIFO(pth) {
- raw, err := hex.DecodeString(what)
- if err != nil {
- log.Println(err)
- continue
- }
- if len(raw) != infohash.Size {
- log.Println("bad length")
- continue
- }
- var i infohash.T
- copy(i[:], raw)
- t, ok := c.Torrent(i)
- if !ok {
- log.Println("no suck torrent", what)
- continue
- }
- txStatsDump(t)
- txStatsDel(t.InfoHash())
- t.Drop()
- for _, where := range []string{"files", "peers"} {
- pth := path.Join(where, t.InfoHash().HexString())
- os.Remove(pth)
- fd, err := os.Open(pth)
- if err == nil {
- fd.Close()
- }
- }
- log.Println("deleted:", what, t.Name())
- }
- time.Sleep(time.Second)
- }
-}
package main
import (
+ "bufio"
"encoding/hex"
"fmt"
"log"
"github.com/anacrolix/dht/v2"
"github.com/anacrolix/torrent"
"github.com/anacrolix/torrent/metainfo"
+ "github.com/anacrolix/torrent/types/infohash"
"github.com/dustin/go-humanize"
)
time.Sleep(time.Second)
}
}
+
+type stringAddr string
+
+func (stringAddr) Network() string { return "" }
+func (me stringAddr) String() string { return string(me) }
+
+func resolveTestPeers(addrs []string) (ret []torrent.PeerInfo) {
+ for _, ta := range addrs {
+ ret = append(ret, torrent.PeerInfo{Addr: stringAddr(ta)})
+ }
+ return
+}
+
+func readLinesFromFIFO(pth string) []string {
+ fd, err := os.OpenFile(pth, os.O_RDONLY, os.FileMode(0666))
+ if err != nil {
+ log.Println("OpenFile:", pth, err)
+ time.Sleep(time.Second)
+ return nil
+ }
+ var lines []string
+ scanner := bufio.NewScanner(fd)
+ for scanner.Scan() {
+ t := scanner.Text()
+ if len(t) > 0 {
+ lines = append(lines, t)
+ }
+ }
+ fd.Close()
+ return lines
+}
+
+func fifoAdd(c *torrent.Client) {
+ pth := path.Join(FIFOsDir, "add")
+ recreateFIFO(pth)
+ for {
+ for _, what := range readLinesFromFIFO(pth) {
+ cols := strings.Fields(what)
+ what = cols[0]
+ var t *torrent.Torrent
+ var err error
+ if strings.HasPrefix(what, "magnet:") {
+ t, err = c.AddMagnet(what)
+ if err != nil {
+ log.Println("AddMagnet:", what, err)
+ continue
+ }
+ } else {
+ metaInfo, err := metainfo.LoadFromFile(what)
+ if err != nil {
+ log.Println("LoadFromFile:", what, err)
+ continue
+ }
+ t, err = c.AddTorrent(metaInfo)
+ if err != nil {
+ log.Println("AddTorrent:", what, err)
+ continue
+ }
+ }
+ if len(cols) > 1 {
+ t.AddPeers(resolveTestPeers(cols[1:]))
+ }
+ go fifoPeerList(t)
+ go fifoFileList(t)
+ log.Println("added:", t.InfoHash().HexString(), t.Name())
+ go func() {
+ <-t.GotInfo()
+ if err = saveTorrent(t); err != nil {
+ log.Println("saveTorrent:", err)
+ }
+ txStatsLoad(t.InfoHash())
+ t.DownloadAll()
+ }()
+ }
+ time.Sleep(time.Second)
+ }
+}
+
+func fifoDel(c *torrent.Client) {
+ pth := path.Join(FIFOsDir, "del")
+ recreateFIFO(pth)
+ for {
+ for _, what := range readLinesFromFIFO(pth) {
+ raw, err := hex.DecodeString(what)
+ if err != nil {
+ log.Println(err)
+ continue
+ }
+ if len(raw) != infohash.Size {
+ log.Println("bad length")
+ continue
+ }
+ var i infohash.T
+ copy(i[:], raw)
+ t, ok := c.Torrent(i)
+ if !ok {
+ log.Println("no suck torrent", what)
+ continue
+ }
+ txStatsDump(t)
+ txStatsDel(t.InfoHash())
+ t.Drop()
+ for _, where := range []string{"files", "peers"} {
+ pth := path.Join(where, t.InfoHash().HexString())
+ os.Remove(pth)
+ fd, err := os.Open(pth)
+ if err == nil {
+ fd.Close()
+ }
+ }
+ log.Println("deleted:", what, t.Name())
+ }
+ time.Sleep(time.Second)
+ }
+}
+
+func fifosPrepare() {
+ os.MkdirAll(path.Join(FIFOsDir, PeersDir), 0777)
+ os.MkdirAll(path.Join(FIFOsDir, FilesDir), 0777)
+}
+
+func fifosCleanup() {
+ os.Remove(path.Join(FIFOsDir, "list"))
+ os.Remove(path.Join(FIFOsDir, "dht"))
+ os.Remove(path.Join(FIFOsDir, "add"))
+ os.Remove(path.Join(FIFOsDir, "del"))
+ os.RemoveAll(path.Join(FIFOsDir, PeersDir))
+ os.RemoveAll(path.Join(FIFOsDir, FilesDir))
+}