X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fcmd%2Fnncp-daemon%2Fmain.go;h=613b9cdda0869e348883ffa05c5ecd9b40bff330;hb=cf9363f956cb2d93a581c11ed65c5b02910d10d5;hp=88f7e20fec9dfa1c5692dfb04235ccf1171f3ba4;hpb=15ff8ac40bbf354f5319a6e753cf8c0963b15a53;p=nncp.git diff --git a/src/cmd/nncp-daemon/main.go b/src/cmd/nncp-daemon/main.go index 88f7e20..613b9cd 100644 --- a/src/cmd/nncp-daemon/main.go +++ b/src/cmd/nncp-daemon/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 Sergey Matveev 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 @@ -24,6 +24,7 @@ import ( "log" "net" "os" + "regexp" "strconv" "strings" "time" @@ -105,6 +106,31 @@ func performSP( close(nodeIdC) } +func startMCDTx(ctx *nncp.Ctx, port int, zeroInterval bool) error { + ifis, err := net.Interfaces() + if err != nil { + return err + } + for ifiReString, secs := range ctx.MCDTxIfis { + ifiRe, err := regexp.CompilePOSIX(ifiReString) + if err != nil { + return err + } + var interval time.Duration + if !zeroInterval { + interval = time.Duration(secs) * time.Second + } + for _, ifi := range ifis { + if ifiRe.MatchString(ifi.Name) { + if err = ctx.MCDTx(ifi.Name, port, interval); err != nil { + return err + } + } + } + } + return nil +} + func main() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") @@ -132,6 +158,7 @@ func main() { 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") autoTossNoArea = flag.Bool("autotoss-noarea", false, "Do not process \"area\" packets during tossing") + autoTossNoACK = flag.Bool("autotoss-noack", false, "Do not process \"ack\" packets during tossing") ) log.SetFlags(log.Lshortfile) flag.Usage = usage @@ -191,10 +218,11 @@ func main() { *autoTossNoExec, *autoTossNoTrns, *autoTossNoArea, + *autoTossNoACK, ) } <-nodeIdC // call completion - if *autoToss { + if *autoToss && nodeId != nil { close(autoTossFinish) <-autoTossBadCode } @@ -211,10 +239,8 @@ func main() { } if *mcdOnce { - for ifiName := range ctx.MCDTxIfis { - if err = ctx.MCDTx(ifiName, port, 0); err != nil { - log.Fatalln("Can not do MCD transmission:", err) - } + if err = startMCDTx(ctx, port, true); err != nil { + log.Fatalln("Can not do MCD transmission:", err) } return } @@ -223,13 +249,9 @@ func main() { if err != nil { log.Fatalln("Can not listen:", err) } - - for ifiName, secs := range ctx.MCDTxIfis { - if err = ctx.MCDTx(ifiName, port, time.Duration(secs)*time.Second); err != nil { - log.Fatalln("Can not run MCD transmission:", err) - } + if err = startMCDTx(ctx, port, false); err != nil { + log.Fatalln("Can not do MCD transmission:", err) } - ln = netutil.LimitListener(ln, *maxConn) go func() { for { @@ -283,10 +305,11 @@ func main() { *autoTossNoExec, *autoTossNoTrns, *autoTossNoArea, + *autoTossNoACK, ) } <-nodeIdC // call completion - if *autoToss { + if *autoToss && nodeId != nil { close(autoTossFinish) <-autoTossBadCode }