X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fcmd%2Fnncp-bundle%2Fmain.go;h=6fa0ab3642489d76fa04cf22d693c73c45f31cb1;hb=72f42f8288689ae89e021ba33ebca8d551a784d7;hp=113f8cf9dbd14222caf9984889b90ff21b3b4828;hpb=09afcade2662992be6a24f465668c5ea499ac8bb;p=nncp.git diff --git a/src/cmd/nncp-bundle/main.go b/src/cmd/nncp-bundle/main.go index 113f8cf..6fa0ab3 100644 --- a/src/cmd/nncp-bundle/main.go +++ b/src/cmd/nncp-bundle/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2021 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 @@ -26,7 +26,7 @@ import ( "flag" "fmt" "io" - "io/ioutil" + "io/fs" "log" "os" "path/filepath" @@ -34,16 +34,12 @@ import ( xdr "github.com/davecgh/go-xdr/xdr2" "github.com/dustin/go-humanize" - "go.cypherpunks.ru/nncp/v7" -) - -const ( - CopyBufSize = 1 << 17 + "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-bundle -- Create/digest stream of NNCP encrypted packets\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-bundle -- Create/digest stream of NNCP encrypted packets\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] -tx [-delete] NODE [NODE ...] > ...\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] -rx -delete [-dryrun] [NODE ...] < ...\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] -rx [-check] [-dryrun] [NODE ...] < ...\n", os.Args[0]) @@ -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 { @@ -316,6 +312,8 @@ func main() { 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") } @@ -376,7 +374,7 @@ func main() { if !*dryRun { os.Remove(dstPath) if ctx.HdrUsage { - os.Remove(dstPath + nncp.HdrSuffix) + os.Remove(nncp.JobPath2Hdr(dstPath)) } } } else { @@ -410,13 +408,15 @@ func main() { } dstDirPath := filepath.Join(ctx.Spool, sender, string(nncp.TRx)) dstPath := filepath.Join(dstDirPath, pktName) - if _, err = os.Stat(dstPath); err == nil || !os.IsNotExist(err) { + if _, err = os.Stat(dstPath); err == nil || !errors.Is(err, fs.ErrNotExist) { ctx.LogD("bundle-rx-exists", les, func(les nncp.LEs) string { return logMsg(les) + ": packet already exists" }) 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 || !errors.Is(err, fs.ErrNotExist) { ctx.LogD("bundle-rx-seen", les, func(les nncp.LEs) string { return logMsg(les) + ": packet already seen" }) @@ -461,7 +461,7 @@ func main() { } } else { if *dryRun { - if _, err = nncp.CopyProgressed(ioutil.Discard, tarR, "Rx", les, ctx.ShowPrgrs); err != nil { + if _, err = nncp.CopyProgressed(io.Discard, tarR, "Rx", les, ctx.ShowPrgrs); err != nil { log.Fatalln("Error during copying:", err) } } else { @@ -469,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) } @@ -479,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)