@multitable {XXXXX} {XXXX-XX-XX} {XXXX KiB} {meta4 link sig} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
@headitem Version @tab Date @tab Size @tab Tarball @tab SHA256 checksum
+@item @ref{Release 8_4_0, 8.4.0} @tab 2022-01-25 @tab 1683 KiB
+@tab
+ @url{download/nncp-8.4.0.tar.xz.meta4, meta4}
+ @url{download/nncp-8.4.0.tar.xz, link}
+ @url{download/nncp-8.4.0.tar.xz.sig, sig}
+@tab @code{CCC410CF 677359CA B14DA645 7985C1B9 7A69FEC9 41402DA3 59E414E6 08E8121B}
+
@item @ref{Release 8_3_0, 8.3.0} @tab 2022-01-23 @tab 1682 KiB
@tab
@url{download/nncp-8.3.0.tar.xz.meta4, meta4}
@node Новости
@section Новости
+@node Релиз 8.5.0
+@subsection Релиз 8.5.0
+@itemize
+
+@item
+Исправлена работоспособность @command{nncp-bundle}.
+
+@item
+По ошибке @option{-mcd-wait} опция у @command{nncp-call} была включена
+по умолчанию.
+
+@item
+Возможность переопределять внутренний timeout по умолчанию для протокола
+синхронизации через @env{$NNCPDEADLINE} переменную окружения. Может быть
+полезно для каналов с очень большими задержками.
+
+@item
+NNCP собирается на OpenBSD.
+
+@end itemize
+
@node Релиз 8.4.0
@subsection Релиз 8.4.0
@itemize
See also this page @ref{Новости, on russian}.
+@node Release 8_5_0
+@section Release 8.5.0
+@itemize
+
+@item
+Fixed @command{nncp-bundle} workability.
+
+@item
+Mistakenly @option{-mcd-wait} option was enabled by default in
+@command{nncp-call}.
+
+@item
+Ability to override internal default timeout for online protocol through
+@env{$NNCPDEADLINE} environment variable. Can be useful for very high
+delay links.
+
+@item
+NNCP builds on OpenBSD.
+
+@end itemize
+
@node Release 8_4_0
@section Release 8.4.0
@itemize
@url{https://en.wikipedia.org/wiki/XMODEM, XMODEM} does, causes
unacceptable performance degradation.
+Internally it uses various timeouts and deadlines. One of them used
+extensively is 10 seconds default deadline timeout. You can override it
+with @env{$NNCPDEADLINE} environment variable, that could be useful with
+very high delay links.
+
SP works on top of
@url{http://noiseprotocol.org/noise.html#interactive-patterns,
@code{Noise_IK_25519_ChaChaPoly_BLAKE2b}} protocol. Each Noise packet
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")
}
listOnly = flag.Bool("list", false, "Only list remote packets")
noCK = flag.Bool("nock", false, "Do no checksum checking")
onlyPktsRaw = flag.String("pkts", "", "Recieve only that packets, comma separated")
- mcdWait = flag.Uint("mcd-wait", 60, "Wait for MCD for specified number of seconds")
+ mcdWait = flag.Uint("mcd-wait", 0, "Wait for MCD for specified number of seconds")
rxRate = flag.Int("rxrate", 0, "Maximal receive rate, pkts/sec")
txRate = flag.Int("txrate", 0, "Maximal transmit rate, pkts/sec")
spoolPath = flag.String("spool", "", "Override path to spool")
continue
}
pktEnc, pktEncRaw, err := ctx.HdrRead(fd)
- if err != nil {
+ if err == nil {
switch pktEnc.Magic {
case nncp.MagicNNCPEv1.B:
err = nncp.MagicNNCPEv1.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("is not an encrypted packet")
}
-//go:build !netbsd
-// +build !netbsd
-
-// NNCP -- Node to Node copy, utilities for store-and-forward data exchange
-// Copyright (C) 2016-2022 Sergey Matveev <stargrave@stargrave.org>
+//go:build !netbsd && !openbsd
+// +build !netbsd,!openbsd
package nncp
//go:build netbsd
// +build netbsd
-// NNCP -- Node to Node copy, utilities for store-and-forward data exchange
-// Copyright (C) 2016-2022 Sergey Matveev <stargrave@stargrave.org>
-
package nncp
import (
--- /dev/null
+//go:build openbsd
+// +build openbsd
+
+package nncp
+
+import (
+ "log"
+
+ "golang.org/x/sys/unix"
+)
+
+func (ctx *Ctx) IsEnoughSpace(want int64) bool {
+ var s unix.Statfs_t
+ if err := unix.Statfs(ctx.Spool, &s); err != nil {
+ log.Fatalln("Can not stat spool:", err)
+ }
+ return int64(s.F_bavail)*int64(s.F_bsize) > want
+}
const Base32Encoded32Len = 52
var (
- Version string = "8.4.0"
+ Version string = "8.5.0"
Base32Codec *base32.Encoding = base32.StdEncoding.WithPadding(base32.NoPadding)
)
"os"
"path/filepath"
"sort"
+ "strconv"
"sync"
"time"
MaxSPSize = 1<<16 - 256
PartSuffix = ".part"
SPHeadOverhead = 4
+ CfgDeadline = "NNCPDEADLINE"
)
type MTHAndOffset struct {
}
func init() {
+ if v := os.Getenv(CfgDeadline); v != "" {
+ i, err := strconv.Atoi(v)
+ if err != nil {
+ log.Fatalln("Can not convert", CfgDeadline, "to integer:", err)
+ }
+ DefaultDeadline = time.Duration(i) * time.Second
+ }
+
var buf bytes.Buffer
spHead := SPHead{Type: SPTypeHalt}
if _, err := xdr.Marshal(&buf, spHead); err != nil {