X-Git-Url: http://www.git.cypherpunks.ru/?p=nncp.git;a=blobdiff_plain;f=src%2Fcmd%2Fnncp-daemon%2Fmain.go;h=5fd6f6d0353f5cc0e7e5e5212234e9bd4def05ea;hp=88f7e20fec9dfa1c5692dfb04235ccf1171f3ba4;hb=857b50285a0b75f03c2f2bfa5daa39901cfdf320;hpb=6db8b9f512c485340ab55d64e8d9e5dd2f78a21d diff --git a/src/cmd/nncp-daemon/main.go b/src/cmd/nncp-daemon/main.go index 88f7e20..5fd6f6d 100644 --- a/src/cmd/nncp-daemon/main.go +++ b/src/cmd/nncp-daemon/main.go @@ -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") @@ -211,10 +237,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 +247,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 {