]> Cypherpunks.ru repositories - nncp.git/blobdiff - src/cmd/nncp-bundle/main.go
Use explicitly larger bufio's buffer
[nncp.git] / src / cmd / nncp-bundle / main.go
index 365d8b5a0eaa7967ed15fdeeedec10a232af6bbd..28423b42fd031740507a677534c895162ddfc96a 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-2022 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
@@ -34,12 +34,7 @@ import (
 
        xdr "github.com/davecgh/go-xdr/xdr2"
        "github.com/dustin/go-humanize"
-       "go.cypherpunks.ru/nncp/v6"
-       "golang.org/x/crypto/blake2b"
-)
-
-const (
-       CopyBufSize = 1 << 17
+       "go.cypherpunks.ru/nncp/v8"
 )
 
 func usage() {
@@ -70,6 +65,7 @@ func main() {
                version   = flag.Bool("version", false, "Print version information")
                warranty  = flag.Bool("warranty", false, "Print warranty information")
        )
+       log.SetFlags(log.Lshortfile)
        flag.Usage = usage
        flag.Parse()
        if *warranty {
@@ -108,7 +104,7 @@ func main() {
        for i := 0; i < flag.NArg(); i++ {
                node, err := ctx.FindNode(flag.Arg(i))
                if err != nil {
-                       log.Fatalln("Invalid specified:", err)
+                       log.Fatalln("Invalid node specified:", err)
                }
                nodeIds[*node.Id] = struct{}{}
        }
@@ -165,7 +161,7 @@ func main() {
                                        log.Fatalln("Error writing tar header:", err)
                                }
                                if _, err = nncp.CopyProgressed(
-                                       tarWr, bufio.NewReader(fd), "Tx",
+                                       tarWr, bufio.NewReaderSize(fd, nncp.MTHBlockSize), "Tx",
                                        append(les, nncp.LEs{
                                                {K: "Pkt", V: nncp.Base32Codec.EncodeToString(job.HshValue[:])},
                                                {K: "FullSize", V: job.Size},
@@ -187,7 +183,7 @@ func main() {
                                        if err = os.Remove(job.Path); err != nil {
                                                log.Fatalln("Error during deletion:", err)
                                        } else if ctx.HdrUsage {
-                                               os.Remove(job.Path + nncp.HdrSuffix)
+                                               os.Remove(nncp.JobPath2Hdr(job.Path))
                                        }
                                }
                                ctx.LogI(
@@ -208,11 +204,11 @@ func main() {
                        log.Fatalln("Error during tar closing:", err)
                }
        } else {
-               bufStdin := bufio.NewReaderSize(os.Stdin, CopyBufSize*2)
+               bufStdin := bufio.NewReaderSize(os.Stdin, nncp.MTHBlockSize*2)
                pktEncBuf := make([]byte, nncp.PktEncOverhead)
                var pktEnc *nncp.PktEnc
                for {
-                       peeked, err := bufStdin.Peek(CopyBufSize)
+                       peeked, err := bufStdin.Peek(nncp.MTHBlockSize)
                        if err != nil && err != io.EOF {
                                log.Fatalln("Error during reading:", err)
                        }
@@ -221,7 +217,7 @@ func main() {
                                if err == io.EOF {
                                        break
                                }
-                               bufStdin.Discard(bufStdin.Buffered() - (len(nncp.NNCPBundlePrefix) - 1)) // #nosec G104
+                               bufStdin.Discard(bufStdin.Buffered() - (len(nncp.NNCPBundlePrefix) - 1))
                                continue
                        }
                        if _, err = bufStdin.Discard(prefixIdx); err != nil {
@@ -306,10 +302,25 @@ func main() {
                                )
                                continue
                        }
-                       if pktEnc.Magic != nncp.MagicNNCPEv4 {
+                       switch pktEnc.Magic {
+                       case nncp.MagicNNCPEv1.B:
+                               err = nncp.MagicNNCPEv1.TooOld()
+                       case nncp.MagicNNCPEv2.B:
+                               err = nncp.MagicNNCPEv2.TooOld()
+                       case nncp.MagicNNCPEv3.B:
+                               err = nncp.MagicNNCPEv3.TooOld()
+                       case nncp.MagicNNCPEv4.B:
+                               err = nncp.MagicNNCPEv4.TooOld()
+                       case nncp.MagicNNCPEv5.B:
+                               err = nncp.MagicNNCPEv5.TooOld()
+                       case nncp.MagicNNCPEv6.B:
+                       default:
+                               err = errors.New("Bad packet magic number")
+                       }
+                       if err != nil {
                                ctx.LogD(
                                        "bundle-rx",
-                                       append(les, nncp.LE{K: "Err", V: "Bad packet magic number"}),
+                                       append(les, nncp.LE{K: "Err", V: err.Error()}),
                                        logMsg,
                                )
                                continue
@@ -345,10 +356,7 @@ func main() {
                                        })
                                        continue
                                }
-                               hsh, err := blake2b.New256(nil)
-                               if err != nil {
-                                       log.Fatalln("Error during hasher creation:", err)
-                               }
+                               hsh := nncp.MTHNew(entry.Size, 0)
                                if _, err = hsh.Write(pktEncBuf); err != nil {
                                        log.Fatalln("Error during writing:", err)
                                }
@@ -366,7 +374,7 @@ func main() {
                                        if !*dryRun {
                                                os.Remove(dstPath)
                                                if ctx.HdrUsage {
-                                                       os.Remove(dstPath + nncp.HdrSuffix)
+                                                       os.Remove(nncp.JobPath2Hdr(dstPath))
                                                }
                                        }
                                } else {
@@ -406,7 +414,9 @@ func main() {
                                })
                                continue
                        }
-                       if _, err = os.Stat(dstPath + nncp.SeenSuffix); err == nil || !os.IsNotExist(err) {
+                       if _, err = os.Stat(filepath.Join(
+                               dstDirPath, nncp.SeenDir, pktName,
+                       )); err == nil || !os.IsNotExist(err) {
                                ctx.LogD("bundle-rx-seen", les, func(les nncp.LEs) string {
                                        return logMsg(les) + ": packet already seen"
                                })
@@ -414,10 +424,7 @@ func main() {
                        }
                        if *doCheck {
                                if *dryRun {
-                                       hsh, err := blake2b.New256(nil)
-                                       if err != nil {
-                                               log.Fatalln("Error during hasher creation:", err)
-                                       }
+                                       hsh := nncp.MTHNew(entry.Size, 0)
                                        if _, err = hsh.Write(pktEncBuf); err != nil {
                                                log.Fatalln("Error during writing:", err)
                                        }
@@ -462,7 +469,7 @@ func main() {
                                        if err != nil {
                                                log.Fatalln("Error during temporary file creation:", err)
                                        }
-                                       bufTmp := bufio.NewWriterSize(tmp, CopyBufSize)
+                                       bufTmp := bufio.NewWriterSize(tmp, nncp.MTHBlockSize)
                                        if _, err = bufTmp.Write(pktEncBuf); err != nil {
                                                log.Fatalln("Error during writing:", err)
                                        }
@@ -472,8 +479,10 @@ func main() {
                                        if err = bufTmp.Flush(); err != nil {
                                                log.Fatalln("Error during flushing:", err)
                                        }
-                                       if err = tmp.Sync(); err != nil {
-                                               log.Fatalln("Error during syncing:", err)
+                                       if !nncp.NoSync {
+                                               if err = tmp.Sync(); err != nil {
+                                                       log.Fatalln("Error during syncing:", err)
+                                               }
                                        }
                                        if err = tmp.Close(); err != nil {
                                                log.Fatalln("Error during closing:", err)