/*
NNCP -- Node to Node copy, utilities for store-and-forward data exchange
-Copyright (C) 2016-2021 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2016-2023 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
"flag"
"fmt"
"io"
- "io/ioutil"
+ "io/fs"
"log"
"os"
"path/filepath"
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])
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},
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)
}
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")
}
}
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"
})
}
if _, err = os.Stat(filepath.Join(
dstDirPath, nncp.SeenDir, pktName,
- )); err == nil || !os.IsNotExist(err) {
+ )); err == nil || !errors.Is(err, fs.ErrNotExist) {
ctx.LogD("bundle-rx-seen", les, func(les nncp.LEs) string {
return logMsg(les) + ": packet already seen"
})
}
} 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 {
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)
}
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)