X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fcmd%2Fnncp-file%2Fmain.go;h=9d9c694ab5e432c19bed289ceaa5c1af8fd0e4eb;hb=0367cce2741e1ce6a89a49fd5c4e9df6005c9744;hp=d7c06074843642f4bc7052c2b0b10e0924264240;hpb=aa9595835a7c23d83906da6570be5a68e1070905;p=nncp.git diff --git a/src/cmd/nncp-file/main.go b/src/cmd/nncp-file/main.go index d7c0607..9d9c694 100644 --- a/src/cmd/nncp-file/main.go +++ b/src/cmd/nncp-file/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2019 Sergey Matveev +Copyright (C) 2016-2022 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 @@ -25,16 +25,19 @@ import ( "os" "strings" - "go.cypherpunks.ru/nncp/v5" + "go.cypherpunks.ru/nncp/v8" ) func usage() { fmt.Fprintf(os.Stderr, nncp.UsageHeader()) fmt.Fprintf(os.Stderr, "nncp-file -- send file\n\n") - fmt.Fprintf(os.Stderr, "Usage: %s [options] SRC NODE:[DST]\nOptions:\n", os.Args[0]) + fmt.Fprintf(os.Stderr, "Usage: %s [options] SRC NODE:[DST]\n", os.Args[0]) + fmt.Fprintf(os.Stderr, " %s [options] SRC %s:AREA:[DST]\nOptions:\n", + os.Args[0], nncp.AreaDir) flag.PrintDefaults() fmt.Fprint(os.Stderr, ` -If SRC equals to -, then read data from stdin to temporary file. +If SRC equals to "-", then data is read from stdin. +If SRC is directory, then create pax archive with its contents. -minsize/-chunked take NODE's freq.minsize/freq.chunked configuration options by default. You can forcefully turn them off by specifying 0 value. @@ -46,15 +49,19 @@ func main() { cfgPath = flag.String("cfg", nncp.DefaultCfgPath, "Path to configuration file") niceRaw = flag.String("nice", nncp.NicenessFmt(nncp.DefaultNiceFile), "Outbound packet niceness") argMinSize = flag.Int64("minsize", -1, "Minimal required resulting packet size, in KiB") + argMaxSize = flag.Uint64("maxsize", 0, "Maximal allowable resulting packets size, in KiB") argChunkSize = flag.Int64("chunked", -1, "Split file on specified size chunks, in KiB") viaOverride = flag.String("via", "", "Override Via path to destination node") spoolPath = flag.String("spool", "", "Override path to spool") logPath = flag.String("log", "", "Override path to logfile") quiet = flag.Bool("quiet", false, "Print only errors") + showPrgrs = flag.Bool("progress", false, "Force progress showing") + omitPrgrs = flag.Bool("noprogress", false, "Omit progress showing") debug = flag.Bool("debug", false, "Print debug messages") 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 { @@ -74,7 +81,15 @@ func main() { log.Fatalln(err) } - ctx, err := nncp.CtxFromCmdline(*cfgPath, *spoolPath, *logPath, *quiet, *debug) + ctx, err := nncp.CtxFromCmdline( + *cfgPath, + *spoolPath, + *logPath, + *quiet, + *showPrgrs, + *omitPrgrs, + *debug, + ) if err != nil { log.Fatalln("Error during initialization:", err) } @@ -82,19 +97,42 @@ func main() { log.Fatalln("Config lacks private keys") } - splitted := strings.SplitN(flag.Arg(1), ":", 2) - if len(splitted) != 2 { + splitted := strings.Split(flag.Arg(1), ":") + if len(splitted) < 2 { usage() os.Exit(1) } - node, err := ctx.FindNode(splitted[0]) - if err != nil { - log.Fatalln("Invalid NODE specified:", err) + var areaId *nncp.AreaId + var node *nncp.Node + if splitted[0] == nncp.AreaDir { + if len(splitted) < 3 { + usage() + os.Exit(1) + } + areaId = ctx.AreaName2Id[splitted[1]] + if areaId == nil { + log.Fatalln("Unknown area specified") + } + node = ctx.Neigh[*ctx.SelfId] + splitted = splitted[2:] + } else { + node, err = ctx.FindNode(splitted[0]) + if err != nil { + log.Fatalln("Invalid NODE specified:", err) + } + splitted = splitted[1:] } nncp.ViaOverride(*viaOverride, ctx, node) ctx.Umask() + var chunkSize int64 + if *argChunkSize < 0 { + chunkSize = node.FreqChunked + } else if *argChunkSize > 0 { + chunkSize = *argChunkSize * 1024 + } + var minSize int64 if *argMinSize < 0 { minSize = node.FreqMinSize @@ -102,21 +140,20 @@ func main() { minSize = *argMinSize * 1024 } - var chunkSize int64 - if *argChunkSize < 0 { - chunkSize = node.FreqChunked - } else if *argChunkSize > 0 { - chunkSize = *argChunkSize * 1024 + maxSize := int64(nncp.MaxFileSize) + if *argMaxSize > 0 { + maxSize = int64(*argMaxSize) * 1024 } if err = ctx.TxFile( node, nice, flag.Arg(0), - splitted[1], + strings.Join(splitted, ":"), chunkSize, minSize, - nncp.MaxFileSize, + maxSize, + areaId, ); err != nil { log.Fatalln(err) }