]> Cypherpunks.ru repositories - nncp.git/blobdiff - src/cmd/nncp-toss/main.go
Generate ACKs during tossing
[nncp.git] / src / cmd / nncp-toss / main.go
index 8497486832746fda54b453822d419cd869b72f35..24b50e26d243d92952a0f2a0cd08304ebe290d79 100644 (file)
@@ -1,6 +1,6 @@
 /*
 NNCP -- Node to Node copy, utilities for store-and-forward data exchange
-Copyright (C) 2016-2021 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2016-2023 Sergey Matveev <stargrave@stargrave.org>
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -26,12 +26,11 @@ import (
        "path/filepath"
        "time"
 
-       "go.cypherpunks.ru/nncp/v7"
+       "go.cypherpunks.ru/nncp/v8"
 )
 
 func usage() {
-       fmt.Fprintf(os.Stderr, nncp.UsageHeader())
-       fmt.Fprintf(os.Stderr, "nncp-toss -- process inbound packets\n\n")
+       fmt.Fprint(os.Stderr, "nncp-toss -- process inbound packets\n\n")
        fmt.Fprintf(os.Stderr, "Usage: %s [options]\nOptions:\n", os.Args[0])
        flag.PrintDefaults()
 }
@@ -42,13 +41,15 @@ func main() {
                nodeRaw   = flag.String("node", "", "Process only that node")
                niceRaw   = flag.String("nice", nncp.NicenessFmt(255), "Minimal required niceness")
                dryRun    = flag.Bool("dryrun", false, "Do not actually write any tossed data")
-               doSeen    = flag.Bool("seen", false, "Create .seen files")
+               doSeen    = flag.Bool("seen", false, "Create seen/ files")
                cycle     = flag.Uint("cycle", 0, "Repeat tossing after N seconds in infinite loop")
                noFile    = flag.Bool("nofile", false, "Do not process \"file\" packets")
                noFreq    = flag.Bool("nofreq", false, "Do not process \"freq\" packets")
                noExec    = flag.Bool("noexec", false, "Do not process \"exec\" packets")
                noTrns    = flag.Bool("notrns", false, "Do not process \"transitional\" packets")
                noArea    = flag.Bool("noarea", false, "Do not process \"area\" packets")
+               noACK     = flag.Bool("noack", false, "Do not process \"ack\" packets")
+               genACK    = flag.Bool("gen-ack", false, "Generate ACK packets")
                spoolPath = flag.String("spool", "", "Override path to spool")
                logPath   = flag.String("log", "", "Override path to logfile")
                quiet     = flag.Bool("quiet", false, "Print only errors")
@@ -109,15 +110,31 @@ func main() {
                        isBad = ctx.Toss(
                                node.Id,
                                nncp.TRx,
-                               nice,
-                               *dryRun, *doSeen, *noFile, *noFreq, *noExec, *noTrns, *noArea,
+                               &nncp.TossOpts{
+                                       Nice:   nice,
+                                       DoSeen: *doSeen,
+                                       NoFile: *noFile,
+                                       NoFreq: *noFreq,
+                                       NoExec: *noExec,
+                                       NoTrns: *noTrns,
+                                       NoArea: *noArea,
+                                       NoACK:  *noACK,
+                                       GenACK: *genACK,
+                               },
                        ) || isBad
                        if nodeId == *ctx.SelfId {
                                isBad = ctx.Toss(
                                        node.Id,
                                        nncp.TTx,
-                                       nice,
-                                       *dryRun, false, true, true, true, true, *noArea,
+                                       &nncp.TossOpts{
+                                               Nice:   nice,
+                                               NoFile: true,
+                                               NoFreq: true,
+                                               NoExec: true,
+                                               NoTrns: true,
+                                               NoArea: *noArea,
+                                               NoACK:  *noACK,
+                                       },
                                ) || isBad
                        }
                }
@@ -146,19 +163,35 @@ func main() {
                }(node.Id)
        }
        for nodeId := range nodeIds {
+               ctx.Toss(
+                       nodeId,
+                       nncp.TRx,
+                       &nncp.TossOpts{
+                               Nice:   nice,
+                               DryRun: *dryRun,
+                               DoSeen: *doSeen,
+                               NoFile: *noFile,
+                               NoFreq: *noFreq,
+                               NoExec: *noExec,
+                               NoTrns: *noTrns,
+                               NoArea: *noArea,
+                               NoACK:  *noACK,
+                               GenACK: *genACK,
+                       },
+               )
                if *nodeId == *ctx.SelfId {
                        ctx.Toss(
                                nodeId,
                                nncp.TTx,
-                               nice,
-                               *dryRun, false, true, true, true, true, *noArea,
-                       )
-               } else {
-                       ctx.Toss(
-                               nodeId,
-                               nncp.TRx,
-                               nice,
-                               *dryRun, *doSeen, *noFile, *noFreq, *noExec, *noTrns, *noArea,
+                               &nncp.TossOpts{
+                                       Nice:   nice,
+                                       NoFile: true,
+                                       NoFreq: true,
+                                       NoExec: true,
+                                       NoTrns: true,
+                                       NoArea: *noArea,
+                                       NoACK:  *noACK,
+                               },
                        )
                }
        }