doc/download.texi | 7 +++++++ doc/news.ru.texi | 21 +++++++++++++++++++++ doc/news.texi | 21 +++++++++++++++++++++ doc/sp.texi | 5 +++++ src/cmd/nncp-bundle/main.go | 2 ++ src/cmd/nncp-call/main.go | 2 +- src/cmd/nncp-xfer/main.go | 4 +++- src/df.go | 7 ++----- src/df_netbsd.go | 3 --- src/df_openbsd.go | 18 ++++++++++++++++++ src/nncp.go | 2 +- src/sp.go | 10 ++++++++++ diff --git a/doc/download.texi b/doc/download.texi index 1a153576b7ec8a87a2c04351357be1afb2f7803fd6efffb83463990fa7606764..063771c91d431bbacefa10d33aa65f58b1aa37b1a31af39c4552a0abd32490c6 100644 --- a/doc/download.texi +++ b/doc/download.texi @@ -45,6 +45,13 @@ @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} diff --git a/doc/news.ru.texi b/doc/news.ru.texi index 45c83ecc78f05fa87498bd0147d513f24974d976b143e6695f3953cf2e2cd748..ba4b0a2f91efe9b0dd14dbc96e560622d52f9e1ea192e8882389ddd1f8305f23 100644 --- a/doc/news.ru.texi +++ b/doc/news.ru.texi @@ -1,6 +1,27 @@ @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 diff --git a/doc/news.texi b/doc/news.texi index ad1a4baf643b85a9d5374f781894f1a994bced322ab506311c7100db23b07052..01ee4aaf8d1888a8bbb9342c54f91517a6c183a1c7b35cfcba1ff5d862485a55 100644 --- a/doc/news.texi +++ b/doc/news.texi @@ -3,6 +3,27 @@ @unnumbered News 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 diff --git a/doc/sp.texi b/doc/sp.texi index 7d170f8c9ee3295734c1561f2209b980c58261c6f596ee360a2d8617a84d3add..754080055772a2fc4701866765b824544ca89262bbe32f426ce352b48bc45337 100644 --- a/doc/sp.texi +++ b/doc/sp.texi @@ -12,6 +12,11 @@ high-delay links, so acknowledging of each received packet, like @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 diff --git a/src/cmd/nncp-bundle/main.go b/src/cmd/nncp-bundle/main.go index f4bec5eb7e9936ad96ac9650a9b234ee29f3cf11808806abaea4d8ac0ba26513..1749c215d0ea3ad75a13ef5a720471030601b1ed66164c71b854432d128038d4 100644 --- a/src/cmd/nncp-bundle/main.go +++ b/src/cmd/nncp-bundle/main.go @@ -316,6 +316,8 @@ err = nncp.MagicNNCPEv3.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("Bad packet magic number") } diff --git a/src/cmd/nncp-call/main.go b/src/cmd/nncp-call/main.go index 7e799117e28d893d476d6eef41c5c01d11fc82b9bf49f279f2b62fdcdb8097a9..75e003416c6e20781ba0f1025e3e0013452da5fbeb89fb7b9da47850ba15d0a0 100644 --- a/src/cmd/nncp-call/main.go +++ b/src/cmd/nncp-call/main.go @@ -49,7 +49,7 @@ txOnly = flag.Bool("tx", false, "Only transmit packets") 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") diff --git a/src/cmd/nncp-xfer/main.go b/src/cmd/nncp-xfer/main.go index 7856822095c21d457713c61373f7a421088909cb241357a7116c2d63f37f2fe7..4db974d8edc667e9f8dec7b4f260659d877b4a080b9ba14241cbb8fc1b0661e4 100644 --- a/src/cmd/nncp-xfer/main.go +++ b/src/cmd/nncp-xfer/main.go @@ -218,7 +218,7 @@ isBad = true continue } pktEnc, pktEncRaw, err := ctx.HdrRead(fd) - if err != nil { + if err == nil { switch pktEnc.Magic { case nncp.MagicNNCPEv1.B: err = nncp.MagicNNCPEv1.TooOld() @@ -229,6 +229,8 @@ err = nncp.MagicNNCPEv3.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") } diff --git a/src/df.go b/src/df.go index 5e1add70cb296955b3a9d72bc6f17d29c3ec95026b0da068b515f3a63354f8a8..93fe1e89b61d0a25ed74b3ca3989e8a258f5dad00b29ba5718bbfc64aaa41703 100644 --- a/src/df.go +++ b/src/df.go @@ -1,8 +1,5 @@ -//go:build !netbsd -// +build !netbsd - -// NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2022 Sergey Matveev +//go:build !netbsd && !openbsd +// +build !netbsd,!openbsd package nncp diff --git a/src/df_netbsd.go b/src/df_netbsd.go index fa6bb238698c40175ac71c54ffe7728709fffd5d10eec35f814729a2e8de83ac..4202b7e918ecc14809db484fbb645718005004bbd1dfd449f1f6b9a3d367a677 100644 --- a/src/df_netbsd.go +++ b/src/df_netbsd.go @@ -1,9 +1,6 @@ //go:build netbsd // +build netbsd -// NNCP -- Node to Node copy, utilities for store-and-forward data exchange -// Copyright (C) 2016-2022 Sergey Matveev - package nncp import ( diff --git a/src/df_openbsd.go b/src/df_openbsd.go new file mode 100644 index 0000000000000000000000000000000000000000..4be7405e8da2cba1facf54d8f3c885da87f2c8bebe1be0cd811f31383cb96e91 --- /dev/null +++ b/src/df_openbsd.go @@ -0,0 +1,18 @@ +//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 +} diff --git a/src/nncp.go b/src/nncp.go index 5915a2ad91dd289c966dfdcb215eabd5c927be23c70841bd4b56a15d78110302..214560c103889cbf5d9f35431f9a97704f64e1da8e9ac50b4e5cee4fdecb4852 100644 --- a/src/nncp.go +++ b/src/nncp.go @@ -40,7 +40,7 @@ const Base32Encoded32Len = 52 var ( - Version string = "8.4.0" + Version string = "8.5.0" Base32Codec *base32.Encoding = base32.StdEncoding.WithPadding(base32.NoPadding) ) diff --git a/src/sp.go b/src/sp.go index 6fa398f27420cdd4e1234bcc1b829b235cc84361152a1abee8d878e321d00fe7..d62f8bd5f05df421dee20cb02495e6463646a3606e5b693c8bae661f5a462649 100644 --- a/src/sp.go +++ b/src/sp.go @@ -27,6 +27,7 @@ "log" "os" "path/filepath" "sort" + "strconv" "sync" "time" @@ -39,6 +40,7 @@ const ( MaxSPSize = 1<<16 - 256 PartSuffix = ".part" SPHeadOverhead = 4 + CfgDeadline = "NNCPDEADLINE" ) type MTHAndOffset struct { @@ -132,6 +134,14 @@ SetWriteDeadline(t time.Time) error } 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 {