]> Cypherpunks.ru repositories - nncp.git/blobdiff - src/cmd/nncp-call/main.go
Merge branch 'develop'
[nncp.git] / src / cmd / nncp-call / main.go
index 7b0a0d827089728ff67e9125ff0f31c241d7b1a6..9762d9216cd950f00390d1ea9a2ba1422eeb03a5 100644 (file)
@@ -1,6 +1,6 @@
 /*
 NNCP -- Node to Node copy, utilities for store-and-forward data exchange
-Copyright (C) 2016-2020 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2016-2021 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
@@ -56,8 +56,15 @@ func main() {
                version     = flag.Bool("version", false, "Print version information")
                warranty    = flag.Bool("warranty", false, "Print warranty information")
 
-               onlineDeadline   = flag.Uint("onlinedeadline", 0, "Override onlinedeadline option")
-               maxOnlineTimeSec = flag.Uint("maxonlinetime", 0, "Override maxonlinetime option")
+               onlineDeadlineSec = flag.Uint("onlinedeadline", 0, "Override onlinedeadline option")
+               maxOnlineTimeSec  = flag.Uint("maxonlinetime", 0, "Override maxonlinetime option")
+
+               autoToss       = flag.Bool("autotoss", false, "Toss after call is finished")
+               autoTossDoSeen = flag.Bool("autotoss-seen", false, "Create .seen files during tossing")
+               autoTossNoFile = flag.Bool("autotoss-nofile", false, "Do not process \"file\" packets during tossing")
+               autoTossNoFreq = flag.Bool("autotoss-nofreq", false, "Do not process \"freq\" packets during tossing")
+               autoTossNoExec = flag.Bool("autotoss-noexec", false, "Do not process \"exec\" packets during tossing")
+               autoTossNoTrns = flag.Bool("autotoss-notrns", false, "Do not process \"trns\" packets during tossing")
        )
        flag.Usage = usage
        flag.Parse()
@@ -106,13 +113,12 @@ func main() {
                log.Fatalln("Node does not have online communication capability")
        }
 
-       if *onlineDeadline == 0 {
-               onlineDeadline = &node.OnlineDeadline
+       onlineDeadline := node.OnlineDeadline
+       if *onlineDeadlineSec != 0 {
+               onlineDeadline = time.Duration(*onlineDeadlineSec) * time.Second
        }
-       var maxOnlineTime time.Duration
-       if *maxOnlineTimeSec == 0 {
-               maxOnlineTime = node.MaxOnlineTime
-       } else {
+       maxOnlineTime := node.MaxOnlineTime
+       if *maxOnlineTimeSec != 0 {
                maxOnlineTime = time.Duration(*maxOnlineTimeSec) * time.Second
        }
 
@@ -143,7 +149,7 @@ func main() {
                splitted = strings.Split(*onlyPktsRaw, ",")
                onlyPkts = make(map[[32]byte]bool, len(splitted))
                for _, pktIdRaw := range splitted {
-                       pktId, err := nncp.FromBase32(pktIdRaw)
+                       pktId, err := nncp.Base32Codec.DecodeString(pktIdRaw)
                        if err != nil {
                                log.Fatalln("Invalid packet specified: ", err)
                        }
@@ -154,18 +160,39 @@ func main() {
        }
 
        ctx.Umask()
-       if !ctx.CallNode(
+
+       var autoTossFinish chan struct{}
+       var autoTossBadCode chan bool
+       if *autoToss {
+               autoTossFinish, autoTossBadCode = ctx.AutoToss(
+                       node.Id,
+                       nice,
+                       *autoTossDoSeen,
+                       *autoTossNoFile,
+                       *autoTossNoFreq,
+                       *autoTossNoExec,
+                       *autoTossNoTrns,
+               )
+       }
+
+       badCode := !ctx.CallNode(
                node,
                addrs,
                nice,
                xxOnly,
                *rxRate,
                *txRate,
-               *onlineDeadline,
+               onlineDeadline,
                maxOnlineTime,
                *listOnly,
                onlyPkts,
-       ) {
+       )
+
+       if *autoToss {
+               close(autoTossFinish)
+               badCode = (<-autoTossBadCode) || badCode
+       }
+       if badCode {
                os.Exit(1)
        }
 }