]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Remove FIFOs at quit
authorSergey Matveev <stargrave@stargrave.org>
Mon, 28 Nov 2022 08:31:22 +0000 (11:31 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 13 Jan 2023 08:32:42 +0000 (11:32 +0300)
cmd/btrtrc/add.go [deleted file]
cmd/btrtrc/fifos.go [moved from cmd/btrtrc/list.go with 62% similarity]
cmd/btrtrc/main.go

diff --git a/cmd/btrtrc/add.go b/cmd/btrtrc/add.go
deleted file mode 100644 (file)
index 812176a..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-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)
-       }
-}
similarity index 62%
rename from cmd/btrtrc/list.go
rename to cmd/btrtrc/fifos.go
index 89d9614634532078a51a8aa314c4c7149fe4dfa7..09f4f56b8599e41592c97348934def833f3d7e0c 100644 (file)
@@ -1,6 +1,7 @@
 package main
 
 import (
+       "bufio"
        "encoding/hex"
        "fmt"
        "log"
@@ -16,6 +17,7 @@ import (
        "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"
 )
 
@@ -219,3 +221,132 @@ func fifoDHTList(c *torrent.Client) {
                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))
+}
index eb5afaab76ab400a922db8be3ed3e6943321990e..26dafe23379a1aaa63ec8c86f058c2780d0a2e3d 100644 (file)
@@ -7,7 +7,6 @@ import (
        "net"
        "os"
        "os/signal"
-       "path"
        "strings"
        "syscall"
 
@@ -86,8 +85,7 @@ func main() {
                client.Close()
        }()
 
-       os.MkdirAll(path.Join(FIFOsDir, PeersDir), 0777)
-       os.MkdirAll(path.Join(FIFOsDir, FilesDir), 0777)
+       fifosPrepare()
        log.Println("started", client.PublicIPs())
        go overallStatus(client, overallStatusCancel)
        go fifoList(client)
@@ -98,5 +96,6 @@ func main() {
        <-client.Closed()
        <-overallStatusCancel
        <-txStatsDumperCancel
+       fifosCleanup()
        log.Println("finished")
 }