X-Git-Url: http://www.git.cypherpunks.ru/?p=nncp.git;a=blobdiff_plain;f=src%2Fcmd%2Fnncp-rm%2Fmain.go;fp=src%2Fcmd%2Fnncp-rm%2Fmain.go;h=18931ebbcbe3fd3f9ad0196fcbd561e538eb38e1;hp=b1d15249047251dc183f9934fafaa345c8e4c046;hb=2e22bda93fdf8f2f84e4d19b3f1d46318b497139;hpb=16b44ce6e0f7e3d668c8cf7edf0ecf0bb38e1a4c diff --git a/src/cmd/nncp-rm/main.go b/src/cmd/nncp-rm/main.go index b1d1524..18931eb 100644 --- a/src/cmd/nncp-rm/main.go +++ b/src/cmd/nncp-rm/main.go @@ -44,7 +44,8 @@ func usage() { fmt.Fprintf(os.Stderr, " %s [options] [-older X] {-all|-node NODE} -nock\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] [-older X] {-all|-node NODE} -area\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] [-older X] {-all|-node NODE} {-rx|-tx} [-hdr]\n", os.Args[0]) - fmt.Fprintf(os.Stderr, " %s [options] [-older X] {-all|-node NODE} -pkt < ...\n", os.Args[0]) + fmt.Fprintf(os.Stderr, " %s [options] {-all|-node NODE} -pkt < ...\n", os.Args[0]) + fmt.Fprintf(os.Stderr, " %s [options] {-all|-node NODE} -ack\n", os.Args[0]) fmt.Fprintln(os.Stderr, "-older option's time units are: (s)econds, (m)inutes, (h)ours, (d)ays") fmt.Fprintln(os.Stderr, "Options:") flag.PrintDefaults() @@ -67,6 +68,7 @@ func main() { older = flag.String("older", "", "XXX{smhd}: only older than XXX number of time units") dryRun = flag.Bool("dryrun", false, "Do not actually remove files") doPkt = flag.Bool("pkt", false, "Remove only that packets") + doACK = flag.Bool("ack", false, "Remove ACK packets from outbound") spoolPath = flag.String("spool", "", "Override path to spool") quiet = flag.Bool("quiet", false, "Print only errors") debug = flag.Bool("debug", false, "Print debug messages") @@ -393,5 +395,46 @@ func main() { log.Fatalln("Can not remove:", err) } } + if *doACK { + dirPath := filepath.Join( + ctx.Spool, node.Id.String(), string(nncp.TTx), nncp.ACKDir) + dir, err := os.Open(dirPath) + if err != nil { + continue + } + for { + fis, err := dir.ReadDir(1 << 10) + if err != nil { + if err == io.EOF { + break + } + log.Fatalln("Can not read directory:", err) + } + for _, fi := range fis { + for _, pth := range []string{ + filepath.Join( + ctx.Spool, + node.Id.String(), + string(nncp.TTx), + fi.Name(), + ), + filepath.Join(dirPath, fi.Name()), + } { + if err = os.Remove(pth); err == nil { + ctx.LogI( + "rm", + nncp.LEs{{K: "File", V: pth}}, + func(les nncp.LEs) string { + return fmt.Sprintf("File %s: removed", pth) + }, + ) + } else if !errors.Is(err, fs.ErrNotExist) { + log.Fatalln("Can not remove:", pth, ":", err) + } + } + } + } + dir.Close() + } } }