X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fcypherpunks.ru%2Fnncp%2Fcmd%2Fnncp-bundle%2Fmain.go;h=dcaf9eabb9a7e95c32fc1a20fce6b721b62e517c;hb=dd92823db3d72fb21a4c712a7fb052dce16443dd;hp=163feb49926f06e01a2fb091c0131f2bf105ccd1;hpb=c38623d53c5d4324b41f89239fbcc451dc55e861;p=nncp.git diff --git a/src/cypherpunks.ru/nncp/cmd/nncp-bundle/main.go b/src/cypherpunks.ru/nncp/cmd/nncp-bundle/main.go index 163feb4..dcaf9ea 100644 --- a/src/cypherpunks.ru/nncp/cmd/nncp-bundle/main.go +++ b/src/cypherpunks.ru/nncp/cmd/nncp-bundle/main.go @@ -1,11 +1,10 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2017 Sergey Matveev +Copyright (C) 2016-2019 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 -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. +the Free Software Foundation, version 3 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -16,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -// Create/digest stream of NNCP encrypted packets +// Create/digest stream of NNCP encrypted packets. package main import ( @@ -44,7 +43,7 @@ const ( func usage() { fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintln(os.Stderr, "nncp-bundle -- Create/digest stream of NNCP encrypted packets\n") + fmt.Fprintf(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]) @@ -55,12 +54,12 @@ func usage() { func main() { var ( cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") - niceRaw = flag.Int("nice", 255, "Minimal required niceness") + niceRaw = flag.String("nice", nncp.NicenessFmt(255), "Minimal required niceness") doRx = flag.Bool("rx", false, "Receive packets") doTx = flag.Bool("tx", false, "Transfer packets") doDelete = flag.Bool("delete", false, "Delete transferred packets") doCheck = flag.Bool("check", false, "Check integrity while receiving") - dryRun = flag.Bool("dryrun", false, "Do not writings") + dryRun = flag.Bool("dryrun", false, "Do no writes") spoolPath = flag.String("spool", "", "Override path to spool") logPath = flag.String("log", "", "Override path to logfile") quiet = flag.Bool("quiet", false, "Print only errors") @@ -78,10 +77,10 @@ func main() { fmt.Println(nncp.VersionGet()) return } - if *niceRaw < 1 || *niceRaw > 255 { - log.Fatalln("-nice must be between 1 and 255") + nice, err := nncp.NicenessParse(*niceRaw) + if err != nil { + log.Fatalln(err) } - nice := uint8(*niceRaw) if *doRx && *doTx { log.Fatalln("-rx and -tx can not be set simultaneously") } @@ -120,13 +119,22 @@ func main() { continue } if err = tarWr.WriteHeader(&tar.Header{ + Format: tar.FormatUSTAR, + Name: nncp.NNCPBundlePrefix, + Mode: 0700, + Typeflag: tar.TypeDir, + }); err != nil { + log.Fatalln("Error writing tar header:", err) + } + if err = tarWr.WriteHeader(&tar.Header{ + Format: tar.FormatPAX, Name: strings.Join([]string{ nncp.NNCPBundlePrefix, nodeId.String(), ctx.SelfId.String(), pktName, }, "/"), - Mode: 0440, + Mode: 0400, Size: job.Size, Typeflag: tar.TypeReg, }); err != nil { @@ -194,6 +202,21 @@ func main() { } continue } + if entry.Typeflag != tar.TypeDir { + ctx.LogD("nncp-bundle", sds, "Expected NNCP/") + continue + } + entry, err = tarR.Next() + if err != nil { + if err != io.EOF { + ctx.LogD( + "nncp-bundle", + nncp.SdsAdd(sds, nncp.SDS{"err": err}), + "error reading tar", + ) + } + continue + } sds["pkt"] = entry.Name if entry.Size < nncp.PktEncOverhead { ctx.LogD("nncp-bundle", sds, "Too small packet") @@ -212,7 +235,7 @@ func main() { ctx.LogD("nncp-bundle", sds, "Bad packet structure") continue } - if pktEnc.Magic != nncp.MagicNNCPEv2 { + if pktEnc.Magic != nncp.MagicNNCPEv4 { ctx.LogD("nncp-bundle", sds, "Bad packet magic number") continue } @@ -279,7 +302,7 @@ func main() { ctx.LogD("nncp-bundle", sds, "Packet already exists") continue } - if _, err = os.Stat(dstPath + nncp.SeenPostfix); err == nil || !os.IsNotExist(err) { + if _, err = os.Stat(dstPath + nncp.SeenSuffix); err == nil || !os.IsNotExist(err) { ctx.LogD("nncp-bundle", sds, "Packet already exists") continue } @@ -343,7 +366,9 @@ func main() { if err = bufTmp.Flush(); err != nil { log.Fatalln("Error during flushing:", err) } - tmp.Sync() + if err = tmp.Sync(); err != nil { + log.Fatalln("Error during syncing:", err) + } tmp.Close() if err = os.MkdirAll(selfPath, os.FileMode(0700)); err != nil { log.Fatalln("Error during mkdir:", err)