bin/default.do | 4 ++-- doc/download.texi | 711 ++++++++++++++++++++++------------------------------- doc/index.texi | 3 +-- doc/install.texi | 14 ++++++++++++-- doc/news.ru.texi | 13 +++++++++++++ doc/news.texi | 13 +++++++++++++ makedist | 251 +++++++++++++++++++++++++++++++++++++++++++++++++++++ makedist.sh | 256 ----------------------------------------------------- src/area.go | 2 +- src/call.go | 2 +- src/cfg.go | 8 ++++---- src/cfgdir.go | 55 +++++++++++++++++++++++++++-------------------------- src/check.go | 6 +++--- src/chunked.go | 2 +- src/cmd/nncp-ack/main.go | 6 +++--- src/cmd/nncp-bundle/main.go | 14 +++++++------- src/cmd/nncp-call/main.go | 6 +++--- src/cmd/nncp-caller/main.go | 6 +++--- src/cmd/nncp-cfgdir/main.go | 9 ++++----- src/cmd/nncp-cfgenc/main.go | 11 +++++------ src/cmd/nncp-cfgmin/main.go | 6 +++--- src/cmd/nncp-cfgnew/main.go | 4 ++-- src/cmd/nncp-check/main.go | 6 +++--- src/cmd/nncp-cronexpr/main.go | 6 +++--- src/cmd/nncp-daemon/main.go | 6 +++--- src/cmd/nncp-exec/main.go | 6 +++--- src/cmd/nncp-file/main.go | 6 +++--- src/cmd/nncp-freq/main.go | 6 +++--- src/cmd/nncp-hash/main.go | 6 +++--- src/cmd/nncp-log/main.go | 6 +++--- src/cmd/nncp-pkt/main.go | 7 +++---- src/cmd/nncp-reass/main.go | 20 +++++++++++--------- src/cmd/nncp-rm/main.go | 16 +++++++++------- src/cmd/nncp-stat/main.go | 6 +++--- src/cmd/nncp-toss/main.go | 6 +++--- src/cmd/nncp-trns/main.go | 6 +++--- src/cmd/nncp-xfer/main.go | 17 +++++++++-------- src/ctx.go | 8 ++++---- src/dirwatch.go | 2 +- src/dirwatch_dummy.go | 2 +- src/eblob.go | 2 +- src/go.mod | 24 ++++++++++++------------ src/go.sum | 48 ++++++++++++++++++++++++------------------------ src/humanizer.go | 2 +- src/jobs.go | 6 ++++-- src/lockdir.go | 2 +- src/log.go | 2 +- src/magic.go | 2 +- src/mcd.go | 2 +- src/mth.go | 4 +--- src/mth_test.go | 20 ++++++++------------ src/nncp.go | 6 +++--- src/node.go | 2 +- src/pipe.go | 4 ++-- src/pkt.go | 4 ++-- src/pkt_test.go | 4 ++-- src/progress.go | 3 +-- src/sp.go | 25 +++++++++++++------------ src/tmp.go | 2 +- src/toss.go | 8 ++++---- src/toss_test.go | 46 +++++++++++++++++++--------------------------- src/tx.go | 2 +- src/tx_test.go | 12 +++++++----- src/ucspi.go | 2 +- src/uilive/writer.go | 2 +- src/via.go | 2 +- src/yggdrasil/tcpip.go | 10 +++------- src/yggdrasil/yggdrasil.go | 2 +- src/yggdrasil/yggdrasil_dummy.go | 2 +- diff --git a/bin/default.do b/bin/default.do index 01d7b6647864ea633127f3a35fe02b9977356a437f2f173088ce081b59decbd7..c7c34f54c1bf7bed615fee0f567aceccbddf3f20b10983a5f83bce4b8712bf66 100644 --- a/bin/default.do +++ b/bin/default.do @@ -1,5 +1,5 @@ cd ../src -redo-ifchange ../config *.go cmd/$1/*.go +redo-ifchange ../config *.go cmd/${1##*/}/*.go . ../config GO=${GO:-go} mod=`$GO list -m` @@ -7,4 +7,4 @@ GO_LDFLAGS="$GO_LDFLAGS -X $mod.DefaultCfgPath=$CFGPATH" GO_LDFLAGS="$GO_LDFLAGS -X $mod.DefaultSendmailPath=$SENDMAIL" GO_LDFLAGS="$GO_LDFLAGS -X $mod.DefaultSpoolPath=$SPOOLPATH" GO_LDFLAGS="$GO_LDFLAGS -X $mod.DefaultLogPath=$LOGPATH" -$GO build -o ../bin/$3 $GO_CFLAGS -ldflags "$GO_LDFLAGS" ./cmd/$1 +$GO build -o ../bin/$3 $GO_CFLAGS -ldflags "$GO_LDFLAGS" ./cmd/${1##*/} diff --git a/doc/download.texi b/doc/download.texi index 4f24566e2c8fcb04ad79a9befb2e6b2cf948e34c673edec23f42659465730acf..690a312a46cde6cd8ff22b87ce22b18802c26fae0a071099a9093ff8a93c3f76 100644 --- a/doc/download.texi +++ b/doc/download.texi @@ -5,7 +5,7 @@ @cindex licencing @cindex download @section Prepared tarballs -You can obtain releases source code prepared tarballs from the links below. +You can obtain releases source code prepared tarballs from the tars below. Do not forget to check tarball @ref{Integrity, integrity}! Also there are @ref{Mirrors, mirrors} of this website. @@ -46,497 +46,362 @@ @item @code{golang.org/x/term} @tab BSD 3-Clause @item @code{gvisor.dev/gvisor} @tab Apache 2.0 @end multitable -@multitable {XXXXX} {XXXX-XX-XX} {XXXX KiB} {meta4 link sig} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx} -@headitem Version @tab Date @tab Size @tab Tarball @tab SHA256 checksum +@multitable {XXXXX} {XXXX-XX-XX} {XXXX KiB} {meta4 tar sig} +@headitem Version @tab Date @tab Size @tab Tarball -@item @ref{Release 8_8_1, 8.8.1} @tab 2022-10-30 @tab 1748 KiB -@tab - @url{download/nncp-8.8.1.tar.xz.meta4, meta4} - @url{download/nncp-8.8.1.tar.xz, link} - @url{download/nncp-8.8.1.tar.xz.sig, sig} -@tab @code{426463C9 7211AD88 DF74DDDF 61BDBB83 0BAE2756 68B2F231 58D43146 517469A6} +@item @ref{Release 8_8_2, 8.8.2} @tab 2022-11-18 @tab 1752 KiB @tab +@url{download/nncp-8.8.2.tar.xz.meta4, meta4} +@url{download/nncp-8.8.2.tar.xz, tar} +@url{download/nncp-8.8.2.tar.xz.sig, sig} -@item @ref{Release 8_8_0, 8.8.0} @tab 2022-09-04 @tab 1739 KiB -@tab - @url{download/nncp-8.8.0.tar.xz.meta4, meta4} - @url{download/nncp-8.8.0.tar.xz, link} - @url{download/nncp-8.8.0.tar.xz.sig, sig} -@tab @code{829E2FB2 F1EED8AF 7ACE4554 405E56F0 341BE2A0 1C234A34 D0112238 2AA0794C} +@item @ref{Release 8_8_1, 8.8.1} @tab 2022-10-30 @tab 1748 KiB @tab +@url{download/nncp-8.8.1.tar.xz.meta4, meta4} +@url{download/nncp-8.8.1.tar.xz, tar} +@url{download/nncp-8.8.1.tar.xz.sig, sig} -@item @ref{Release 8_7_2, 8.7.2} @tab 2022-03-13 @tab 1673 KiB -@tab - @url{download/nncp-8.7.2.tar.xz.meta4, meta4} - @url{download/nncp-8.7.2.tar.xz, link} - @url{download/nncp-8.7.2.tar.xz.sig, sig} -@tab @code{A0EEC9B0 F33059DE 33F13084 599805D0 F4A1C8C3 79E925BA CFE8DC94 D1DDC23D} +@item @ref{Release 8_8_0, 8.8.0} @tab 2022-09-04 @tab 1739 KiB @tab +@url{download/nncp-8.8.0.tar.xz.meta4, meta4} +@url{download/nncp-8.8.0.tar.xz, tar} +@url{download/nncp-8.8.0.tar.xz.sig, sig} -@item @ref{Release 8_7_1, 8.7.1} @tab 2022-03-09 @tab 1669 KiB -@tab - @url{download/nncp-8.7.1.tar.xz.meta4, meta4} - @url{download/nncp-8.7.1.tar.xz, link} - @url{download/nncp-8.7.1.tar.xz.sig, sig} -@tab @code{CEB4D197 AF5A8D9E 93B749D5 C0F50B53 E6746A31 8AF47B36 4BF5CB32 3D6C4EBD} +@item @ref{Release 8_7_2, 8.7.2} @tab 2022-03-13 @tab 1673 KiB @tab +@url{download/nncp-8.7.2.tar.xz.meta4, meta4} +@url{download/nncp-8.7.2.tar.xz, tar} +@url{download/nncp-8.7.2.tar.xz.sig, sig} -@item @ref{Release 8_7_0, 8.7.0} @tab 2022-03-04 @tab 1670 KiB -@tab - @url{download/nncp-8.7.0.tar.xz.meta4, meta4} - @url{download/nncp-8.7.0.tar.xz, link} - @url{download/nncp-8.7.0.tar.xz.sig, sig} -@tab @code{ED488FFD 7D88028B DD64386B EC4AD911 6F7DA088 1FB1E628 493D2F2B BBD1E868} +@item @ref{Release 8_7_1, 8.7.1} @tab 2022-03-09 @tab 1669 KiB @tab +@url{download/nncp-8.7.1.tar.xz.meta4, meta4} +@url{download/nncp-8.7.1.tar.xz, tar} +@url{download/nncp-8.7.1.tar.xz.sig, sig} -@item @ref{Release 8_6_0, 8.6.0} @tab 2022-03-02 @tab 1670 KiB -@tab - @url{download/nncp-8.6.0.tar.xz.meta4, meta4} - @url{download/nncp-8.6.0.tar.xz, link} - @url{download/nncp-8.6.0.tar.xz.sig, sig} -@tab @code{AE16F0A0 9C1B7D1D A3767E1C 0F410D9C 29ACCAE6 32A448A9 55DB4A0F 15BF838F} +@item @ref{Release 8_7_0, 8.7.0} @tab 2022-03-04 @tab 1670 KiB @tab +@url{download/nncp-8.7.0.tar.xz.meta4, meta4} +@url{download/nncp-8.7.0.tar.xz, tar} +@url{download/nncp-8.7.0.tar.xz.sig, sig} -@item @ref{Release 8_5_0, 8.5.0} @tab 2022-01-26 @tab 1685 KiB -@tab - @url{download/nncp-8.5.0.tar.xz.meta4, meta4} - @url{download/nncp-8.5.0.tar.xz, link} - @url{download/nncp-8.5.0.tar.xz.sig, sig} -@tab @code{E8850D27 70C4FA74 5CF9B9A9 0CEEE5D6 05E50FA5 031A0813 49844C15 3E7BBFF4} +@item @ref{Release 8_6_0, 8.6.0} @tab 2022-03-02 @tab 1670 KiB @tab +@url{download/nncp-8.6.0.tar.xz.meta4, meta4} +@url{download/nncp-8.6.0.tar.xz, tar} +@url{download/nncp-8.6.0.tar.xz.sig, sig} -@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_5_0, 8.5.0} @tab 2022-01-26 @tab 1685 KiB @tab +@url{download/nncp-8.5.0.tar.xz.meta4, meta4} +@url{download/nncp-8.5.0.tar.xz, tar} +@url{download/nncp-8.5.0.tar.xz.sig, sig} -@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} - @url{download/nncp-8.3.0.tar.xz, link} - @url{download/nncp-8.3.0.tar.xz.sig, sig} -@tab @code{6C14887A 9EF686D6 112F2096 ED1DA56B AABE5FEB 4BA92573 89ACC6B2 6D0A23EA} +@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, tar} +@url{download/nncp-8.4.0.tar.xz.sig, sig} -@item @ref{Release 8_2_0, 8.2.0} @tab 2022-01-20 @tab 1669 KiB -@tab - @url{download/nncp-8.2.0.tar.xz.meta4, meta4} - @url{download/nncp-8.2.0.tar.xz, link} - @url{download/nncp-8.2.0.tar.xz.sig, sig} -@tab @code{59B0D6E2 48D30289 29395B63 5D4E0CF1 14BC4DE0 F4F9F105 2E049284 980EEADD} +@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} +@url{download/nncp-8.3.0.tar.xz, tar} +@url{download/nncp-8.3.0.tar.xz.sig, sig} -@item @ref{Release 8_1_0, 8.1.0} @tab 2022-01-16 @tab 1339 KiB -@tab - @url{download/nncp-8.1.0.tar.xz.meta4, meta4} - @url{download/nncp-8.1.0.tar.xz, link} - @url{download/nncp-8.1.0.tar.xz.sig, sig} -@tab @code{777536DF 775E76D6 6B05645D 6F440494 D39DFCBD 7E52DE02 5AF919A3 94CF53EC} +@item @ref{Release 8_2_0, 8.2.0} @tab 2022-01-20 @tab 1669 KiB @tab +@url{download/nncp-8.2.0.tar.xz.meta4, meta4} +@url{download/nncp-8.2.0.tar.xz, tar} +@url{download/nncp-8.2.0.tar.xz.sig, sig} -@item @ref{Release 8_0_2, 8.0.2} @tab 2021-11-10 @tab 1204 KiB -@tab - @url{download/nncp-8.0.2.tar.xz.meta4, meta4} - @url{download/nncp-8.0.2.tar.xz, link} - @url{download/nncp-8.0.2.tar.xz.sig, sig} -@tab @code{84C6FB6C 0764DF11 5C51EE42 4EEF4B9C 84775522 4350A6CC 484F3AB3 C779B9D3} +@item @ref{Release 8_1_0, 8.1.0} @tab 2022-01-16 @tab 1339 KiB @tab +@url{download/nncp-8.1.0.tar.xz.meta4, meta4} +@url{download/nncp-8.1.0.tar.xz, tar} +@url{download/nncp-8.1.0.tar.xz.sig, sig} -@item @ref{Release 8_0_1, 8.0.1} @tab 2021-11-09 @tab 1206 KiB -@tab - @url{download/nncp-8.0.1.tar.xz.meta4, meta4} - @url{download/nncp-8.0.1.tar.xz, link} - @url{download/nncp-8.0.1.tar.xz.sig, sig} -@tab @code{0F849065 19EDB1BF E3262B35 077CD6F6 F365A897 2BA7D369 4864F3CE 4CA4C5A0} +@item @ref{Release 8_0_2, 8.0.2} @tab 2021-11-10 @tab 1204 KiB @tab +@url{download/nncp-8.0.2.tar.xz.meta4, meta4} +@url{download/nncp-8.0.2.tar.xz, tar} +@url{download/nncp-8.0.2.tar.xz.sig, sig} -@item @ref{Release 8_0_0, 8.0.0} @tab 2021-11-08 @tab 1203 KiB -@tab - @url{download/nncp-8.0.0.tar.xz.meta4, meta4} - @url{download/nncp-8.0.0.tar.xz, link} - @url{download/nncp-8.0.0.tar.xz.sig, sig} -@tab @code{376BE15D 956AE171 2D04B607 15D53B17 62CDFA72 86AA9957 2D8E4641 4DA987F0} +@item @ref{Release 8_0_1, 8.0.1} @tab 2021-11-09 @tab 1206 KiB @tab +@url{download/nncp-8.0.1.tar.xz.meta4, meta4} +@url{download/nncp-8.0.1.tar.xz, tar} +@url{download/nncp-8.0.1.tar.xz.sig, sig} -@item @ref{Release 7_7_0, 7.7.0} @tab 2021-09-11 @tab 1180 KiB -@tab - @url{download/nncp-7.7.0.tar.xz.meta4, meta4} - @url{download/nncp-7.7.0.tar.xz, link} - @url{download/nncp-7.7.0.tar.xz.sig, sig} -@tab @code{A692A2FC 963CB0A4 5BFD5B7F 497A26D0 BD738630 4F9FA3CD 526DC69F CA3929EE} +@item @ref{Release 8_0_0, 8.0.0} @tab 2021-11-08 @tab 1203 KiB @tab +@url{download/nncp-8.0.0.tar.xz.meta4, meta4} +@url{download/nncp-8.0.0.tar.xz, tar} +@url{download/nncp-8.0.0.tar.xz.sig, sig} -@item @ref{Release 7_6_0, 7.6.0} @tab 2021-08-08 @tab 1153 KiB -@tab - @url{download/nncp-7.6.0.tar.xz.meta4, meta4} - @url{download/nncp-7.6.0.tar.xz, link} - @url{download/nncp-7.6.0.tar.xz.sig, sig} -@tab @code{00852E80 70415154 197A5555 DDAE636E 6E3940EC DD53D39E A69E5FF1 531BA4C6} +@item @ref{Release 7_7_0, 7.7.0} @tab 2021-09-11 @tab 1180 KiB @tab +@url{download/nncp-7.7.0.tar.xz.meta4, meta4} +@url{download/nncp-7.7.0.tar.xz, tar} +@url{download/nncp-7.7.0.tar.xz.sig, sig} -@item @ref{Release 7_5_1, 7.5.1} @tab 2021-08-05 @tab 1147 KiB -@tab - @url{download/nncp-7.5.1.tar.xz.meta4, meta4} - @url{download/nncp-7.5.1.tar.xz, link} - @url{download/nncp-7.5.1.tar.xz.sig, sig} -@tab @code{B093A745 C2EB9F5F E8341ED2 A6F1EE75 701B2646 B5701BAA F4E760D9 32CDD91A} +@item @ref{Release 7_6_0, 7.6.0} @tab 2021-08-08 @tab 1153 KiB @tab +@url{download/nncp-7.6.0.tar.xz.meta4, meta4} +@url{download/nncp-7.6.0.tar.xz, tar} +@url{download/nncp-7.6.0.tar.xz.sig, sig} -@item @ref{Release 7_5_0, 7.5.0} @tab 2021-07-28 @tab 1151 KiB -@tab - @url{download/nncp-7.5.0.tar.xz.meta4, meta4} - @url{download/nncp-7.5.0.tar.xz, link} - @url{download/nncp-7.5.0.tar.xz.sig, sig} -@tab @code{14D92DC5 B8164EE4 4926D7AF 46DA9F23 0C8F6207 350CC747 6DB5CDFB 8E7C3FE4} +@item @ref{Release 7_5_1, 7.5.1} @tab 2021-08-05 @tab 1147 KiB @tab +@url{download/nncp-7.5.1.tar.xz.meta4, meta4} +@url{download/nncp-7.5.1.tar.xz, tar} +@url{download/nncp-7.5.1.tar.xz.sig, sig} -@item @ref{Release 7_4_0, 7.4.0} @tab 2021-07-19 @tab 1153 KiB -@tab - @url{download/nncp-7.4.0.tar.xz.meta4, meta4} - @url{download/nncp-7.4.0.tar.xz, link} - @url{download/nncp-7.4.0.tar.xz.sig, sig} -@tab @code{F7499FBF B0658054 F2732722 D54FE31E A0F105FD 9970B5BB 6413A9CC 065CB0EB} +@item @ref{Release 7_5_0, 7.5.0} @tab 2021-07-28 @tab 1151 KiB @tab +@url{download/nncp-7.5.0.tar.xz.meta4, meta4} +@url{download/nncp-7.5.0.tar.xz, tar} +@url{download/nncp-7.5.0.tar.xz.sig, sig} -@item @ref{Release 7_3_2, 7.3.2} @tab 2021-07-12 @tab 1141 KiB -@tab - @url{download/nncp-7.3.2.tar.xz.meta4, meta4} - @url{download/nncp-7.3.2.tar.xz, link} - @url{download/nncp-7.3.2.tar.xz.sig, sig} -@tab @code{65F6A230 04189D3F 307D160C AE97F99A 620DDA23 52821652 15DDC946 F6CC4B7F} +@item @ref{Release 7_4_0, 7.4.0} @tab 2021-07-19 @tab 1153 KiB @tab +@url{download/nncp-7.4.0.tar.xz.meta4, meta4} +@url{download/nncp-7.4.0.tar.xz, tar} +@url{download/nncp-7.4.0.tar.xz.sig, sig} -@item @ref{Release 7_3_1, 7.3.1} @tab 2021-07-11 @tab 1142 KiB -@tab - @url{download/nncp-7.3.1.tar.xz.meta4, meta4} - @url{download/nncp-7.3.1.tar.xz, link} - @url{download/nncp-7.3.1.tar.xz.sig, sig} -@tab @code{8611DC6A 3EAC7FFA A6A1C688 2073AB4D A4E93D36 C864F050 C5F880FE 10FCFC46} +@item @ref{Release 7_3_2, 7.3.2} @tab 2021-07-12 @tab 1141 KiB @tab +@url{download/nncp-7.3.2.tar.xz.meta4, meta4} +@url{download/nncp-7.3.2.tar.xz, tar} +@url{download/nncp-7.3.2.tar.xz.sig, sig} -@item @ref{Release 7_3_0, 7.3.0} @tab 2021-07-10 @tab 1141 KiB -@tab - @url{download/nncp-7.3.0.tar.xz.meta4, meta4} - @url{download/nncp-7.3.0.tar.xz, link} - @url{download/nncp-7.3.0.tar.xz.sig, sig} -@tab @code{CB34487A 6D7EF507 04D4B8F9 5A16EF16 CC841D3D 7F5423B1 EBB7979D 1062EB4E} +@item @ref{Release 7_3_1, 7.3.1} @tab 2021-07-11 @tab 1142 KiB @tab +@url{download/nncp-7.3.1.tar.xz.meta4, meta4} +@url{download/nncp-7.3.1.tar.xz, tar} +@url{download/nncp-7.3.1.tar.xz.sig, sig} -@item @ref{Release 7_2_1, 7.2.1} @tab 2021-07-09 @tab 1139 KiB -@tab - @url{download/nncp-7.2.1.tar.xz.meta4, meta4} - @url{download/nncp-7.2.1.tar.xz, link} - @url{download/nncp-7.2.1.tar.xz.sig, sig} -@tab @code{6462BA44 7DB30234 DA6DFB4B B5BF890F 6CA2CC36 697B3AE7 E6F86B86 94AC97D6} +@item @ref{Release 7_3_0, 7.3.0} @tab 2021-07-10 @tab 1141 KiB @tab +@url{download/nncp-7.3.0.tar.xz.meta4, meta4} +@url{download/nncp-7.3.0.tar.xz, tar} +@url{download/nncp-7.3.0.tar.xz.sig, sig} -@item @ref{Release 7_2_0, 7.2.0} @tab 2021-07-08 @tab 1136 KiB -@tab - @url{download/nncp-7.2.0.tar.xz.meta4, meta4} - @url{download/nncp-7.2.0.tar.xz, link} - @url{download/nncp-7.2.0.tar.xz.sig, sig} -@tab @code{70DBB97B 86C9B4B6 E35CFF02 B8C9FAE2 4323EEA5 C56403A2 66CBA268 D82F5077} +@item @ref{Release 7_2_1, 7.2.1} @tab 2021-07-09 @tab 1139 KiB @tab +@url{download/nncp-7.2.1.tar.xz.meta4, meta4} +@url{download/nncp-7.2.1.tar.xz, tar} +@url{download/nncp-7.2.1.tar.xz.sig, sig} -@item @ref{Release 7_1_1, 7.1.1} @tab 2021-07-06 @tab 1132 KiB -@tab - @url{download/nncp-7.1.1.tar.xz.meta4, meta4} - @url{download/nncp-7.1.1.tar.xz, link} - @url{download/nncp-7.1.1.tar.xz.sig, sig} -@tab @code{B741C9E3 EC3DB342 893FE081 888C40E4 B94E4298 E5C1A8E0 BA4D179C C239CCCA} +@item @ref{Release 7_2_0, 7.2.0} @tab 2021-07-08 @tab 1136 KiB @tab +@url{download/nncp-7.2.0.tar.xz.meta4, meta4} +@url{download/nncp-7.2.0.tar.xz, tar} +@url{download/nncp-7.2.0.tar.xz.sig, sig} -@item @ref{Release 7_1_0, 7.1.0} @tab 2021-07-04 @tab 1142 KiB -@tab - @url{download/nncp-7.1.0.tar.xz.meta4, meta4} - @url{download/nncp-7.1.0.tar.xz, link} - @url{download/nncp-7.1.0.tar.xz.sig, sig} -@tab @code{D3BC010F 5D86BB59 E07A2A84 2FF9C73B 4C2F780B 807EF25C E4BC477C E40764A6} +@item @ref{Release 7_1_1, 7.1.1} @tab 2021-07-06 @tab 1132 KiB @tab +@url{download/nncp-7.1.1.tar.xz.meta4, meta4} +@url{download/nncp-7.1.1.tar.xz, tar} +@url{download/nncp-7.1.1.tar.xz.sig, sig} -@item @ref{Release 7_0_0, 7.0.0} @tab 2021-06-30 @tab 1123 KiB -@tab - @url{download/nncp-7.0.0.tar.xz.meta4, meta4} - @url{download/nncp-7.0.0.tar.xz, link} - @url{download/nncp-7.0.0.tar.xz.sig, sig} -@tab @code{D4D28E9A CF40FE12 68BDE134 9CD36076 282395BE 70094EFB 0DB75CE8 C32EA664} +@item @ref{Release 7_1_0, 7.1.0} @tab 2021-07-04 @tab 1142 KiB @tab +@url{download/nncp-7.1.0.tar.xz.meta4, meta4} +@url{download/nncp-7.1.0.tar.xz, tar} +@url{download/nncp-7.1.0.tar.xz.sig, sig} + +@item @ref{Release 7_0_0, 7.0.0} @tab 2021-06-30 @tab 1123 KiB @tab +@url{download/nncp-7.0.0.tar.xz.meta4, meta4} +@url{download/nncp-7.0.0.tar.xz, tar} +@url{download/nncp-7.0.0.tar.xz.sig, sig} -@item @ref{Release 6_6_0, 6.6.0} @tab 2021-06-26 @tab 1041 KiB -@tab - @url{download/nncp-6.6.0.tar.xz.meta4, meta4} - @url{download/nncp-6.6.0.tar.xz, link} - @url{download/nncp-6.6.0.tar.xz.sig, sig} -@tab @code{73DB666F A5C30282 770516B2 F39F1240 74117B45 A9F4B484 0361861A 183577F1} +@item @ref{Release 6_6_0, 6.6.0} @tab 2021-06-26 @tab 1041 KiB @tab +@url{download/nncp-6.6.0.tar.xz.meta4, meta4} +@url{download/nncp-6.6.0.tar.xz, tar} +@url{download/nncp-6.6.0.tar.xz.sig, sig} -@item @ref{Release 6_5_0, 6.5.0} @tab 2021-05-30 @tab 1041 KiB -@tab - @url{download/nncp-6.5.0.tar.xz.meta4, meta4} - @url{download/nncp-6.5.0.tar.xz, link} - @url{download/nncp-6.5.0.tar.xz.sig, sig} -@tab @code{241D2AA7 27275CCF 86F06797 1AA8B3B8 D625C85C 4279DFDE 560216E3 38670B9A} +@item @ref{Release 6_5_0, 6.5.0} @tab 2021-05-30 @tab 1041 KiB @tab +@url{download/nncp-6.5.0.tar.xz.meta4, meta4} +@url{download/nncp-6.5.0.tar.xz, tar} +@url{download/nncp-6.5.0.tar.xz.sig, sig} -@item @ref{Release 6_4_0, 6.4.0} @tab 2021-04-22 @tab 1042 KiB -@tab - @url{download/nncp-6.4.0.tar.xz.meta4, meta4} - @url{download/nncp-6.4.0.tar.xz, link} - @url{download/nncp-6.4.0.tar.xz.sig, sig} -@tab @code{3D0D1156 D69AF698 D402663C F84E51CC 3D40A50D 300E34D1 105A6F75 32E4B99B} +@item @ref{Release 6_4_0, 6.4.0} @tab 2021-04-22 @tab 1042 KiB @tab +@url{download/nncp-6.4.0.tar.xz.meta4, meta4} +@url{download/nncp-6.4.0.tar.xz, tar} +@url{download/nncp-6.4.0.tar.xz.sig, sig} -@item @ref{Release 6_3_0, 6.3.0} @tab 2021-04-14 @tab 1042 KiB -@tab - @url{download/nncp-6.3.0.tar.xz.meta4, meta4} - @url{download/nncp-6.3.0.tar.xz, link} - @url{download/nncp-6.3.0.tar.xz.sig, sig} -@tab @code{76C26A11 E3423540 BB7B8470 820176A3 5FCD0493 B21A872E C223EB94 43BA466B} +@item @ref{Release 6_3_0, 6.3.0} @tab 2021-04-14 @tab 1042 KiB @tab +@url{download/nncp-6.3.0.tar.xz.meta4, meta4} +@url{download/nncp-6.3.0.tar.xz, tar} +@url{download/nncp-6.3.0.tar.xz.sig, sig} -@item @ref{Release 6_2_1, 6.2.1} @tab 2021-03-26 @tab 1038 KiB -@tab - @url{download/nncp-6.2.1.tar.xz.meta4, meta4} - @url{download/nncp-6.2.1.tar.xz, link} - @url{download/nncp-6.2.1.tar.xz.sig, sig} -@tab @code{D9682D95 4D68025A F5B07516 258D9FFC DA29A4D7 E7E1635B E0C219A1 C5DDB067} +@item @ref{Release 6_2_1, 6.2.1} @tab 2021-03-26 @tab 1038 KiB @tab +@url{download/nncp-6.2.1.tar.xz.meta4, meta4} +@url{download/nncp-6.2.1.tar.xz, tar} +@url{download/nncp-6.2.1.tar.xz.sig, sig} -@item @ref{Release 6_2_0, 6.2.0} @tab 2021-03-07 @tab 1038 KiB -@tab - @url{download/nncp-6.2.0.tar.xz.meta4, meta4} - @url{download/nncp-6.2.0.tar.xz, link} - @url{download/nncp-6.2.0.tar.xz.sig, sig} -@tab @code{272CEDED 69FFF3B3 78767297 3199481A C610B753 BB82C22E ECEC45FC 05DA40FE} +@item @ref{Release 6_2_0, 6.2.0} @tab 2021-03-07 @tab 1038 KiB @tab +@url{download/nncp-6.2.0.tar.xz.meta4, meta4} +@url{download/nncp-6.2.0.tar.xz, tar} +@url{download/nncp-6.2.0.tar.xz.sig, sig} -@item @ref{Release 6_1_0, 6.1.0} @tab 2021-02-24 @tab 1040 KiB -@tab - @url{download/nncp-6.1.0.tar.xz.meta4, meta4} - @url{download/nncp-6.1.0.tar.xz, link} - @url{download/nncp-6.1.0.tar.xz.sig, sig} -@tab @code{083A533F 7D021206 9AE07F9F D6CD22E3 C5BE09E8 30F2C9C4 97D97CF6 14E5413F} +@item @ref{Release 6_1_0, 6.1.0} @tab 2021-02-24 @tab 1040 KiB @tab +@url{download/nncp-6.1.0.tar.xz.meta4, meta4} +@url{download/nncp-6.1.0.tar.xz, tar} +@url{download/nncp-6.1.0.tar.xz.sig, sig} -@item @ref{Release 6_0_0, 6.0.0} @tab 2021-01-23 @tab 1028 KiB -@tab - @url{download/nncp-6.0.0.tar.xz.meta4, meta4} - @url{download/nncp-6.0.0.tar.xz, link} - @url{download/nncp-6.0.0.tar.xz.sig, sig} -@tab @code{42FE8AA5 4520B3A1 ABB50D66 1BBBA6A1 41CE4E74 9B4816B0 D4C6845D 67465916} +@item @ref{Release 6_0_0, 6.0.0} @tab 2021-01-23 @tab 1028 KiB @tab +@url{download/nncp-6.0.0.tar.xz.meta4, meta4} +@url{download/nncp-6.0.0.tar.xz, tar} +@url{download/nncp-6.0.0.tar.xz.sig, sig} -@item @ref{Release 5_6_0, 5.6.0} @tab 2021-01-17 @tab 1024 KiB -@tab - @url{download/nncp-5.6.0.tar.xz.meta4, meta4} - @url{download/nncp-5.6.0.tar.xz, link} - @url{download/nncp-5.6.0.tar.xz.sig, sig} -@tab @code{1DC83F05 F14A3C3B 95820046 C60B170E B8C8936F 142A5B9A 1E943E6F 4CEFBDE3} +@item @ref{Release 5_6_0, 5.6.0} @tab 2021-01-17 @tab 1024 KiB @tab +@url{download/nncp-5.6.0.tar.xz.meta4, meta4} +@url{download/nncp-5.6.0.tar.xz, tar} +@url{download/nncp-5.6.0.tar.xz.sig, sig} -@item @ref{Release 5_5_1, 5.5.1} @tab 2021-01-11 @tab 1165 KiB -@tab - @url{download/nncp-5.5.1.tar.xz.meta4, meta4} - @url{download/nncp-5.5.1.tar.xz, link} - @url{download/nncp-5.5.1.tar.xz.sig, sig} -@tab @code{E7DEED7A D3BA696C F64359C0 DC0A93AD 109950C5 6660D028 5FD7BB57 120C9CF7} +@item @ref{Release 5_5_1, 5.5.1} @tab 2021-01-11 @tab 1165 KiB @tab +@url{download/nncp-5.5.1.tar.xz.meta4, meta4} +@url{download/nncp-5.5.1.tar.xz, tar} +@url{download/nncp-5.5.1.tar.xz.sig, sig} -@item @ref{Release 5_5_0, 5.5.0} @tab 2021-01-07 @tab 1161 KiB -@tab - @url{download/nncp-5.5.0.tar.xz.meta4, meta4} - @url{download/nncp-5.5.0.tar.xz, link} - @url{download/nncp-5.5.0.tar.xz.sig, sig} -@tab @code{EF0CBEE1 520BE97D A210794C 172BF444 E6F75DB2 84F5BD05 66919193 326AED77} +@item @ref{Release 5_5_0, 5.5.0} @tab 2021-01-07 @tab 1161 KiB @tab +@url{download/nncp-5.5.0.tar.xz.meta4, meta4} +@url{download/nncp-5.5.0.tar.xz, tar} +@url{download/nncp-5.5.0.tar.xz.sig, sig} -@item @ref{Release 5_4_1, 5.4.1} @tab 2020-09-28 @tab 1143 KiB -@tab - @url{download/nncp-5.4.1.tar.xz.meta4, meta4} - @url{download/nncp-5.4.1.tar.xz, link} - @url{download/nncp-5.4.1.tar.xz.sig, sig} -@tab @code{A02D0C9B 51533DF8 115C17E1 02F8C485 9F7B805A 64290CDF 79151BA9 E627FA63} +@item @ref{Release 5_4_1, 5.4.1} @tab 2020-09-28 @tab 1143 KiB @tab +@url{download/nncp-5.4.1.tar.xz.meta4, meta4} +@url{download/nncp-5.4.1.tar.xz, tar} +@url{download/nncp-5.4.1.tar.xz.sig, sig} -@item @ref{Release 5_3_3, 5.3.3} @tab 2020-01-23 @tab 1116 KiB -@tab - @url{download/nncp-5.3.3.tar.xz.meta4, meta4} - @url{download/nncp-5.3.3.tar.xz, link} - @url{download/nncp-5.3.3.tar.xz.sig, sig} -@tab @code{707CD852 4E424C24 BCB22D6B 4BC81709 71C42A5F E0062B93 A8D1DD9D 7FB365D0} +@item @ref{Release 5_3_3, 5.3.3} @tab 2020-01-23 @tab 1116 KiB @tab +@url{download/nncp-5.3.3.tar.xz.meta4, meta4} +@url{download/nncp-5.3.3.tar.xz, tar} +@url{download/nncp-5.3.3.tar.xz.sig, sig} -@item @ref{Release 5_3_2, 5.3.2} @tab 2019-12-28 @tab 1118 KiB -@tab - @url{download/nncp-5.3.2.tar.xz.meta4, meta4} - @url{download/nncp-5.3.2.tar.xz, link} - @url{download/nncp-5.3.2.tar.xz.sig, sig} -@tab @code{6E2D1B3C CA0DD462 A6F5F8DE 5CB8DE15 C3D33C74 238A2C52 373C7BD6 A126A834} +@item @ref{Release 5_3_2, 5.3.2} @tab 2019-12-28 @tab 1118 KiB @tab +@url{download/nncp-5.3.2.tar.xz.meta4, meta4} +@url{download/nncp-5.3.2.tar.xz, tar} +@url{download/nncp-5.3.2.tar.xz.sig, sig} -@item @ref{Release 5_3_1, 5.3.1} @tab 2019-12-25 @tab 1117 KiB -@tab - @url{download/nncp-5.3.1.tar.xz.meta4, meta4} - @url{download/nncp-5.3.1.tar.xz, link} - @url{download/nncp-5.3.1.tar.xz.sig, sig} -@tab @code{23A52819 F0395A6A E05E4176 017DCA3C 4A20A023 EEADA6A3 3168E58D BEE34A5B} +@item @ref{Release 5_3_1, 5.3.1} @tab 2019-12-25 @tab 1117 KiB @tab +@url{download/nncp-5.3.1.tar.xz.meta4, meta4} +@url{download/nncp-5.3.1.tar.xz, tar} +@url{download/nncp-5.3.1.tar.xz.sig, sig} -@item @ref{Release 5_3_0, 5.3.0} @tab 2019-12-22 @tab 1112 KiB -@tab - @url{download/nncp-5.3.0.tar.xz.meta4, meta4} - @url{download/nncp-5.3.0.tar.xz, link} - @url{download/nncp-5.3.0.tar.xz.sig, sig} -@tab @code{9F093115 506D00E7 2E41ACD6 3F283172 8430E1C2 8BA4A941 FFA3C65D 89AD4ED0} +@item @ref{Release 5_3_0, 5.3.0} @tab 2019-12-22 @tab 1112 KiB @tab +@url{download/nncp-5.3.0.tar.xz.meta4, meta4} +@url{download/nncp-5.3.0.tar.xz, tar} +@url{download/nncp-5.3.0.tar.xz.sig, sig} -@item @ref{Release 5_2_1, 5.2.1} @tab 2019-12-15 @tab 1109 KiB -@tab - @url{download/nncp-5.2.1.tar.xz.meta4, meta4} - @url{download/nncp-5.2.1.tar.xz, link} - @url{download/nncp-5.2.1.tar.xz.sig, sig} -@tab @code{983D1A8A 4398C281 76356AE1 C5541124 B0755555 D115063B D1388F85 9C4A6B3E} +@item @ref{Release 5_2_1, 5.2.1} @tab 2019-12-15 @tab 1109 KiB @tab +@url{download/nncp-5.2.1.tar.xz.meta4, meta4} +@url{download/nncp-5.2.1.tar.xz, tar} +@url{download/nncp-5.2.1.tar.xz.sig, sig} -@item @ref{Release 5_2_0, 5.2.0} @tab 2019-12-14 @tab 1109 KiB -@tab - @url{download/nncp-5.2.0.tar.xz.meta4, meta4} - @url{download/nncp-5.2.0.tar.xz, link} - @url{download/nncp-5.2.0.tar.xz.sig, sig} -@tab @code{FFC55467 8B4ECCA6 92D90F42 ACC0286D 209E054E EA1CBF87 0307003E CF219610} +@item @ref{Release 5_2_0, 5.2.0} @tab 2019-12-14 @tab 1109 KiB @tab +@url{download/nncp-5.2.0.tar.xz.meta4, meta4} +@url{download/nncp-5.2.0.tar.xz, tar} +@url{download/nncp-5.2.0.tar.xz.sig, sig} -@item @ref{Release 5_1_2, 5.1.2} @tab 2019-12-13 @tab 1106 KiB -@tab - @url{download/nncp-5.1.2.tar.xz.meta4, meta4} - @url{download/nncp-5.1.2.tar.xz, link} - @url{download/nncp-5.1.2.tar.xz.sig, sig} -@tab @code{52B2043B 1B22D20F C44698EC AFE5FF46 F99B4DD5 2C392D4D 25FE1580 993263B3} +@item @ref{Release 5_1_2, 5.1.2} @tab 2019-12-13 @tab 1106 KiB @tab +@url{download/nncp-5.1.2.tar.xz.meta4, meta4} +@url{download/nncp-5.1.2.tar.xz, tar} +@url{download/nncp-5.1.2.tar.xz.sig, sig} -@item @ref{Release 5_1_1, 5.1.1} @tab 2019-12-01 @tab 1103 KiB -@tab - @url{download/nncp-5.1.1.tar.xz.meta4, meta4} - @url{download/nncp-5.1.1.tar.xz, link} - @url{download/nncp-5.1.1.tar.xz.sig, sig} -@tab @code{B9537678 E5B549BA 6FA0D20D 41B2D4A9 4ED31F2C AB9FAF63 A388D95E 7662A93F} +@item @ref{Release 5_1_1, 5.1.1} @tab 2019-12-01 @tab 1103 KiB @tab +@url{download/nncp-5.1.1.tar.xz.meta4, meta4} +@url{download/nncp-5.1.1.tar.xz, tar} +@url{download/nncp-5.1.1.tar.xz.sig, sig} -@item @ref{Release 5_1_0, 5.1.0} @tab 2019-11-24 @tab 1103 KiB -@tab - @url{download/nncp-5.1.0.tar.xz.meta4, meta4} - @url{download/nncp-5.1.0.tar.xz, link} - @url{download/nncp-5.1.0.tar.xz.sig, sig} -@tab @code{6F5B74EC 952EAFEC 2A787463 CE1E808E CC990F03 D46F28E9 A89BAB55 5A2C2214} +@item @ref{Release 5_1_0, 5.1.0} @tab 2019-11-24 @tab 1103 KiB @tab +@url{download/nncp-5.1.0.tar.xz.meta4, meta4} +@url{download/nncp-5.1.0.tar.xz, tar} +@url{download/nncp-5.1.0.tar.xz.sig, sig} -@item @ref{Release 5_0_0, 5.0.0} @tab 2019-11-15 @tab 1099 KiB -@tab - @url{download/nncp-5.0.0.tar.xz.meta4, meta4} - @url{download/nncp-5.0.0.tar.xz, link} - @url{download/nncp-5.0.0.tar.xz.sig, sig} -@tab @code{3696D7EE B0783E91 87E5EEF4 EFC35235 10452353 7C51FA4C 9BD3CBEE A22678B3} +@item @ref{Release 5_0_0, 5.0.0} @tab 2019-11-15 @tab 1099 KiB @tab +@url{download/nncp-5.0.0.tar.xz.meta4, meta4} +@url{download/nncp-5.0.0.tar.xz, tar} +@url{download/nncp-5.0.0.tar.xz.sig, sig} -@item @ref{Release 4_1, 4.1} @tab 2019-05-01 @tab 1227 KiB -@tab - @url{download/nncp-4.1.tar.xz.meta4, meta4} - @url{download/nncp-4.1.tar.xz, link} - @url{download/nncp-4.1.tar.xz.sig, sig} -@tab @code{29AEC53D EC914906 D7C47194 0955A32E 2BF470E6 9B8E09D3 AF3B62D8 CC8E541E} +@item @ref{Release 4_1, 4.1} @tab 2019-05-01 @tab 1227 KiB @tab +@url{download/nncp-4.1.tar.xz.meta4, meta4} +@url{download/nncp-4.1.tar.xz, tar} +@url{download/nncp-4.1.tar.xz.sig, sig} -@item @ref{Release 4_0, 4.0} @tab 2019-04-28 @tab 1227 KiB -@tab - @url{download/nncp-4.0.tar.xz.meta4, meta4} - @url{download/nncp-4.0.tar.xz, link} - @url{download/nncp-4.0.tar.xz.sig, sig} -@tab @code{EAFA6272 22E355FC EB772A90 FC6DEA8E AE1F1695 3F48A4A3 57ADA0B4 FF918452} +@item @ref{Release 4_0, 4.0} @tab 2019-04-28 @tab 1227 KiB @tab +@url{download/nncp-4.0.tar.xz.meta4, meta4} +@url{download/nncp-4.0.tar.xz, tar} +@url{download/nncp-4.0.tar.xz.sig, sig} -@item @ref{Release 3_4, 3.4} @tab 2018-06-10 @tab 1154 KiB -@tab - @url{download/nncp-3.4.tar.xz.meta4, meta4} - @url{download/nncp-3.4.tar.xz, link} - @url{download/nncp-3.4.tar.xz.sig, sig} -@tab @code{9796C4CB 7B670FC7 5FEED3CD 467CA556 B230387D 935B09BB 4B19FD57 FD17FFBA} +@item @ref{Release 3_4, 3.4} @tab 2018-06-10 @tab 1154 KiB @tab +@url{download/nncp-3.4.tar.xz.meta4, meta4} +@url{download/nncp-3.4.tar.xz, tar} +@url{download/nncp-3.4.tar.xz.sig, sig} -@item @ref{Release 3_3, 3.3} @tab 2018-06-02 @tab 1152 KiB -@tab - @url{download/nncp-3.3.tar.xz.meta4, meta4} - @url{download/nncp-3.3.tar.xz, link} - @url{download/nncp-3.3.tar.xz.sig, sig} -@tab @code{1F8FA9B4 6125D8A9 0608298B A1ED87E1 12DB2D8B 81C766DE F4DFE191 C7B1BFC2} +@item @ref{Release 3_3, 3.3} @tab 2018-06-02 @tab 1152 KiB @tab +@url{download/nncp-3.3.tar.xz.meta4, meta4} +@url{download/nncp-3.3.tar.xz, tar} +@url{download/nncp-3.3.tar.xz.sig, sig} -@item @ref{Release 3_2, 3.2} @tab 2018-05-27 @tab 1147 KiB -@tab - @url{download/nncp-3.2.tar.xz.meta4, meta4} - @url{download/nncp-3.2.tar.xz, link} - @url{download/nncp-3.2.tar.xz.sig, sig} -@tab @code{BE76802F 1E273D1D E91F0648 A7CB23C5 989F5390 A36F2D0C FD873046 51B9141E} +@item @ref{Release 3_2, 3.2} @tab 2018-05-27 @tab 1147 KiB @tab +@url{download/nncp-3.2.tar.xz.meta4, meta4} +@url{download/nncp-3.2.tar.xz, tar} +@url{download/nncp-3.2.tar.xz.sig, sig} -@item @ref{Release 3_1, 3.1} @tab 2018-02-18 @tab 1145 KiB -@tab - @url{download/nncp-3.1.tar.xz.meta4, meta4} - @url{download/nncp-3.1.tar.xz, link} - @url{download/nncp-3.1.tar.xz.sig, sig} -@tab @code{B9344516 4230B58E 8AAADAA2 066F37F2 493CCB71 B025126B BCAD8FAD 6535149F} +@item @ref{Release 3_1, 3.1} @tab 2018-02-18 @tab 1145 KiB @tab +@url{download/nncp-3.1.tar.xz.meta4, meta4} +@url{download/nncp-3.1.tar.xz, tar} +@url{download/nncp-3.1.tar.xz.sig, sig} -@item @ref{Release 3_0, 3.0} @tab 2017-12-30 @tab 993 KiB -@tab - @url{download/nncp-3.0.tar.xz.meta4, meta4} - @url{download/nncp-3.0.tar.xz, link} - @url{download/nncp-3.0.tar.xz.sig, sig} -@tab @code{248B2257 2F576E79 A19672E9 B82EB649 18FC95A9 194408C0 67EA4DD3 0468286D} +@item @ref{Release 3_0, 3.0} @tab 2017-12-30 @tab 993 KiB @tab +@url{download/nncp-3.0.tar.xz.meta4, meta4} +@url{download/nncp-3.0.tar.xz, tar} +@url{download/nncp-3.0.tar.xz.sig, sig} -@item @ref{Release 2_0, 2.0} @tab 2017-12-02 @tab 986 KiB -@tab - @url{download/nncp-2.0.tar.xz.meta4, meta4} - @url{download/nncp-2.0.tar.xz, link} - @url{download/nncp-2.0.tar.xz.sig, sig} -@tab @code{BEF31B13 FB25381E A511FB77 067798AB 27409238 BDF5600F E2EADB29 E5E78996} +@item @ref{Release 2_0, 2.0} @tab 2017-12-02 @tab 986 KiB @tab +@url{download/nncp-2.0.tar.xz.meta4, meta4} +@url{download/nncp-2.0.tar.xz, tar} +@url{download/nncp-2.0.tar.xz.sig, sig} -@item @ref{Release 1_0, 1.0} @tab 2017-12-02 @tab 987 KiB -@tab - @url{download/nncp-1.0.tar.xz.meta4, meta4} - @url{download/nncp-1.0.tar.xz, link} - @url{download/nncp-1.0.tar.xz.sig, sig} -@tab @code{68BF7803 CD25F59A 56D9FD6C 695002B5 BFBAF591 8A6583F4 3139FC28 CA1AB4AF} +@item @ref{Release 1_0, 1.0} @tab 2017-12-02 @tab 987 KiB @tab +@url{download/nncp-1.0.tar.xz.meta4, meta4} +@url{download/nncp-1.0.tar.xz, tar} +@url{download/nncp-1.0.tar.xz.sig, sig} -@item @ref{Release 0_12, 0.12} @tab 2017-10-08 @tab 978 KiB -@tab - @url{download/nncp-0.12.tar.xz.meta4, meta4} - @url{download/nncp-0.12.tar.xz, link} - @url{download/nncp-0.12.tar.xz.sig, sig} -@tab @code{707B4005 97753B29 73A5F3E5 DAB51B92 21CC296D 690EF4BC ADE93E0D 2595A5F2} +@item @ref{Release 0_12, 0.12} @tab 2017-10-08 @tab 978 KiB @tab +@url{download/nncp-0.12.tar.xz.meta4, meta4} +@url{download/nncp-0.12.tar.xz, tar} +@url{download/nncp-0.12.tar.xz.sig, sig} -@item @ref{Release 0_11, 0.11} @tab 2017-08-21 @tab 1031 KiB -@tab - @url{download/nncp-0.11.tar.xz.meta4, meta4} - @url{download/nncp-0.11.tar.xz, link} - @url{download/nncp-0.11.tar.xz.sig, sig} -@tab @code{D0F73C3B ADBF6B8B 13641A61 4D34F65F 20AF4C84 90894331 BF1F1609 2D65E719} +@item @ref{Release 0_11, 0.11} @tab 2017-08-21 @tab 1031 KiB @tab +@url{download/nncp-0.11.tar.xz.meta4, meta4} +@url{download/nncp-0.11.tar.xz, tar} +@url{download/nncp-0.11.tar.xz.sig, sig} -@item @ref{Release 0_10, 0.10} @tab 2017-07-04 @tab 949 KiB -@tab - @url{download/nncp-0.10.tar.xz.meta4, meta4} - @url{download/nncp-0.10.tar.xz, link} - @url{download/nncp-0.10.tar.xz.sig, sig} -@tab @code{DCE7C762 2F9281EB 282F1A67 5CA6500E 854F2DEC D60F3264 07872B91 4F4E6FA0} +@item @ref{Release 0_10, 0.10} @tab 2017-07-04 @tab 949 KiB @tab +@url{download/nncp-0.10.tar.xz.meta4, meta4} +@url{download/nncp-0.10.tar.xz, tar} +@url{download/nncp-0.10.tar.xz.sig, sig} -@item @ref{Release 0_9, 0.9} @tab 2017-05-17 @tab 942 KiB -@tab - @url{download/nncp-0.9.tar.xz.meta4, meta4} - @url{download/nncp-0.9.tar.xz, link} - @url{download/nncp-0.9.tar.xz.sig, sig} -@tab @code{8D0765A5 F9D81086 7E1F5AB4 52A9464D C5035CCB 4E09A29A 9C9A4934 1A72AB2C} +@item @ref{Release 0_9, 0.9} @tab 2017-05-17 @tab 942 KiB @tab +@url{download/nncp-0.9.tar.xz.meta4, meta4} +@url{download/nncp-0.9.tar.xz, tar} +@url{download/nncp-0.9.tar.xz.sig, sig} -@item @ref{Release 0_8, 0.8} @tab 2017-04-30 @tab 932 KiB -@tab - @url{download/nncp-0.8.tar.xz.meta4, meta4} - @url{download/nncp-0.8.tar.xz, link} - @url{download/nncp-0.8.tar.xz.sig, sig} -@tab @code{9BD607D5 C5551857 B7E9277D 0E857936 1DB7353A E0F1556E EA9B1D91 8305B184} +@item @ref{Release 0_8, 0.8} @tab 2017-04-30 @tab 932 KiB @tab +@url{download/nncp-0.8.tar.xz.meta4, meta4} +@url{download/nncp-0.8.tar.xz, tar} +@url{download/nncp-0.8.tar.xz.sig, sig} -@item @ref{Release 0_7, 0.7} @tab 2017-04-02 @tab 783 KiB -@tab - @url{download/nncp-0.7.tar.xz.meta4, meta4} - @url{download/nncp-0.7.tar.xz, link} - @url{download/nncp-0.7.tar.xz.sig, sig} -@tab @code{D3407323 F89296DD 743FA764 51964B43 794E61BE 0E1D2DD4 ABD02042 B94FFC4F} +@item @ref{Release 0_7, 0.7} @tab 2017-04-02 @tab 783 KiB @tab +@url{download/nncp-0.7.tar.xz.meta4, meta4} +@url{download/nncp-0.7.tar.xz, tar} +@url{download/nncp-0.7.tar.xz.sig, sig} -@item @ref{Release 0_6, 0.6} @tab 2017-02-05 @tab 746 KiB -@tab - @url{download/nncp-0.6.tar.xz.meta4, meta4} - @url{download/nncp-0.6.tar.xz, link} - @url{download/nncp-0.6.tar.xz.sig, sig} -@tab @code{DCFEE3F9 F669AC28 563C50DB 67BB8B43 0CFF4AB6 EC770ACE B5378D0B B40C0656} +@item @ref{Release 0_6, 0.6} @tab 2017-02-05 @tab 746 KiB @tab +@url{download/nncp-0.6.tar.xz.meta4, meta4} +@url{download/nncp-0.6.tar.xz, tar} +@url{download/nncp-0.6.tar.xz.sig, sig} -@item @ref{Release 0_5, 0.5} @tab 2017-01-19 @tab 743 KiB -@tab - @url{download/nncp-0.5.tar.xz.meta4, meta4} - @url{download/nncp-0.5.tar.xz, link} - @url{download/nncp-0.5.tar.xz.sig, sig} -@tab @code{D98F9149 5A6D6726 4C659640 1AD7F400 271A58CE 5D8D4AC5 5D1CF934 59BEDFA6} +@item @ref{Release 0_5, 0.5} @tab 2017-01-19 @tab 743 KiB @tab +@url{download/nncp-0.5.tar.xz.meta4, meta4} +@url{download/nncp-0.5.tar.xz, tar} +@url{download/nncp-0.5.tar.xz.sig, sig} -@item @ref{Release 0_4, 0.4} @tab 2017-01-17 @tab 741 KiB -@tab - @url{download/nncp-0.4.tar.xz.meta4, meta4} - @url{download/nncp-0.4.tar.xz, link} - @url{download/nncp-0.4.tar.xz.sig, sig} -@tab @code{93577327 B3DEBFE3 A80BEB0D 8325B2E6 0939EC55 4DBB05F3 4CA34B99 229C3722} +@item @ref{Release 0_4, 0.4} @tab 2017-01-17 @tab 741 KiB @tab +@url{download/nncp-0.4.tar.xz.meta4, meta4} +@url{download/nncp-0.4.tar.xz, tar} +@url{download/nncp-0.4.tar.xz.sig, sig} -@item @ref{Release 0_3, 0.3} @tab 2017-01-17 @tab 741 KiB -@tab - @url{download/nncp-0.3.tar.xz.meta4, meta4} - @url{download/nncp-0.3.tar.xz, link} - @url{download/nncp-0.3.tar.xz.sig, sig} -@tab @code{6E76EC5E 6B575C65 BF2D6388 870F2A1C 417D63E4 1628CAA1 BB499D0D 0634473B} +@item @ref{Release 0_3, 0.3} @tab 2017-01-17 @tab 741 KiB @tab +@url{download/nncp-0.3.tar.xz.meta4, meta4} +@url{download/nncp-0.3.tar.xz, tar} +@url{download/nncp-0.3.tar.xz.sig, sig} -@item @ref{Release 0_2, 0.2} @tab 2017-01-17 @tab 740 KiB -@tab - @url{download/nncp-0.2.tar.xz.meta4, meta4} - @url{download/nncp-0.2.tar.xz, link} - @url{download/nncp-0.2.tar.xz.sig, sig} -@tab @code{00BEAC5A 0C4083B0 42E3152B ACA6FF20 12768B82 CE24D716 8E04279C ECE14DB7} +@item @ref{Release 0_2, 0.2} @tab 2017-01-17 @tab 740 KiB @tab +@url{download/nncp-0.2.tar.xz.meta4, meta4} +@url{download/nncp-0.2.tar.xz, tar} +@url{download/nncp-0.2.tar.xz.sig, sig} -@item 0.1 @tab 2017-01-10 @tab 720 KiB -@tab - @url{download/nncp-0.1.tar.xz.meta4, meta4} - @url{download/nncp-0.1.tar.xz, link} - @url{download/nncp-0.1.tar.xz.sig, sig} -@tab @code{8F71D65B 70865EBF FE802CDF A5C14D00 A9FD6559 FD722E60 5D97E82C 5E2412C2} +@item 0.1 @tab 2017-01-10 @tab 720 KiB @tab +@url{download/nncp-0.1.tar.xz.meta4, meta4} +@url{download/nncp-0.1.tar.xz, tar} +@url{download/nncp-0.1.tar.xz.sig, sig} @end multitable diff --git a/doc/index.texi b/doc/index.texi index 2a9cfce69edd4234d1b71d989d4b7645cd065c95d85e380f00544d8b4e59c543..8a074fe7da373781dc369548b7eed8be8ca550fdc88398530a1424ff4b27e1fb 100644 --- a/doc/index.texi +++ b/doc/index.texi @@ -1,12 +1,11 @@ \input texinfo -@documentencoding UTF-8 @settitle NNCP @copying This manual is for NNCP (Node to Node copy) -- collection of utilities simplifying secure store-and-forward files and mail exchanging. -Copyright @copyright{} 2016-2022 @email{stargrave@@stargrave.org, Sergey Matveev} +Copyright @copyright{} 2016-2023 @email{stargrave@@stargrave.org, Sergey Matveev} @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/install.texi b/doc/install.texi index 382080a02b05eda275e01a062a01923451fc4db7e9f615f8b891447355c097f4..8a238bc956e59232e4b2e7f129a7161e31dc6812c0e3b85d24133f14d9e44fab 100644 --- a/doc/install.texi +++ b/doc/install.texi @@ -15,6 +15,9 @@ @cindex Debian @item @url{https://tracker.debian.org/pkg/nncp, Debian packages} +@cindex Docker +@item @url{https://hub.docker.com/r/jgoerzen/nncp, Docker image} + @cindex DragonFly @item @url{https://github.com/DragonFlyBSD/DPorts/tree/master/net/nncp, DragonFly BSD ports} @@ -22,16 +25,23 @@ @cindex FreeBSD @item @url{https://www.freshports.org/net/nncp/, FreeBSD ports} @cindex Guix -@item GNU @url{https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/uucp.scm, Guix} +@item GNU @url{https://packages.guix.gnu.org/packages/nncp/, Guix} + +@cindex Mint +@item Linux @url{https://community.linuxmint.com/software/view/nncp, Mint} @cindex NetBSD @item @url{https://pkgsrc.se/wip/nncp, NetBSD package} @cindex NixOS @item @url{https://github.com/NixOS/nixpkgs/tree/master/pkgs/tools/misc/nncp, NixOS packages} + +@cindex Ubuntu +@item @url{https://packages.ubuntu.com/search?keywords=nncp, Ubuntu} @cindex Void Linux @item @url{https://github.com/void-linux/void-packages/blob/master/srcpkgs/nncp/template, Void Linux} + @end itemize @cindex POSIX @@ -40,7 +50,7 @@ @pindex go @pindex texinfo NNCP is written on @url{https://go.dev/, Go} programming language -and you have to install Go compiler 1.17+ version. +and you have to install Go compiler 1.20+ version. @url{http://cr.yp.to/redo.html, redo} build system is recommended for convenience. @url{https://www.gnu.org/software/texinfo/, Texinfo} is used for building documentation (although tarballs already include it). diff --git a/doc/news.ru.texi b/doc/news.ru.texi index d43cba208c767ec6d2001e2194196a17030e13d8df289d90f7a2ad37f9914e47..af3b621dd97e07a3e08b29865ec789c58ca1a34cfc726b0c5a50e830fd0736bd 100644 --- a/doc/news.ru.texi +++ b/doc/news.ru.texi @@ -1,6 +1,19 @@ @node Новости @section Новости +@node Релиз 8.8.3 +@subsection Релиз 8.8.3 +@itemize + +@item +Исправлена @command{nncp-reass} команда, которая некорректно сообщала о +плохом размере последнего куска файла если он был кратен размеру chunk-а. + +@item +Обновлены зависимости. Теперь требуется Go 1.20+. + +@end itemize + @node Релиз 8.8.2 @subsection Релиз 8.8.2 @itemize diff --git a/doc/news.texi b/doc/news.texi index c09421181100ab5e8329e01efedb3d21d1cbed3bd8df66f958ff8c0aaaf5f698..7200930ce1d8f99e4796f19748488c31b4835a09a235a6be99dc869cefb4e4b0 100644 --- a/doc/news.texi +++ b/doc/news.texi @@ -4,6 +4,19 @@ @unnumbered News See also this page @ref{Новости, on russian}. +@node Release 8_8_3 +@section Release 8.8.3 +@itemize + +@item +Fixed @command{nncp-reass} command, that incorrectly reported about +wrong last chunk's size if it is multiple of the chunk-size. + +@item +Updated dependencies. Go 1.20+ is required now. + +@end itemize + @node Release 8_8_2 @section Release 8.8.2 @itemize diff --git a/makedist b/makedist new file mode 100755 index 0000000000000000000000000000000000000000..76fbdd8a636fba7377f82870497a4288edb42a6a35295c52d309ea17a7e972fa --- /dev/null +++ b/makedist @@ -0,0 +1,251 @@ +#!/bin/sh -ex + +cur=$(pwd) +tmp=$(mktemp -d) +release=$1 +[ -n "$release" ] + +git clone . $tmp/nncp-$release +cd $tmp/nncp-$release +git checkout v$release +redo VERSION +cd src +go mod vendor +modvendor -v -copy="**/*_test.go **/words.go **/README.md **/main.go" +cd vendor +rm -r \ + github.com/flynn/noise/vector* \ + github.com/gorhill/cronexpr/APLv2 \ + github.com/hjson/hjson-go/build_release.sh \ + github.com/klauspost/compress/gen.sh \ + github.com/klauspost/compress/gzhttp \ + github.com/klauspost/compress/internal/snapref \ + github.com/klauspost/compress/s2* \ + github.com/klauspost/compress/snappy \ + github.com/klauspost/compress/zstd/snappy.go \ + golang.org/x/sys/plan9 \ + golang.org/x/sys/windows +find github.com/klauspost/compress golang.org/x/sys -name "*_test.go" -delete +find . -type d -exec rmdir {} + 2>/dev/null || : +cd ../.. +rm -r ports +find . \( \ + -name .gitignore -o \ + -name .travis.yml -o \ + -name .goreleaser.yml -o \ + -name .gitattributes \) -delete + +mkdir contrib +cp ~/work/redo/apenwarr/minimal/do contrib/do + +cat > doc/download.texi < $texi < $texi < $texi < $texi < "$tarball".asc +meta4-create -fn "$tarball" -mtime "$tarball" -sig "$tarball".asc \ + http://www.nncpgo.org/download/"$tarball" \ + http://y.www.nncpgo.org/download/"$tarball" \ + https://nncp.mirrors.quux.org/download/"$tarball" < "$tarball" > "$tarball".meta4 + +size=$(( $(stat -f %z $tarball) / 1024 )) +release_date=$(date "+%Y-%m-%d") + +mv -v $tmp/"$tarball" $tmp/"$tarball".sig $tmp/"$tarball".meta4 $cur/doc/download + +release_underscored=`echo $release | tr . _` +cat <8 ------------------------ + +The main improvements for that release are: + +$(git cat-file -p v$release | sed -n '6,/^.*BEGIN/p' | sed '$d') + +------------------------ >8 ------------------------ + +NNCP's home page is: http://www.nncpgo.org/ + +Source code and its signature for that version can be found here: + + http://www.nncpgo.org/download/nncp-${release}.tar.xz ($size KiB) + http://www.nncpgo.org/download/nncp-${release}.tar.xz.sig + +GPG key ID: 0x2B25868E75A1A953 NNCP releases +Fingerprint: 92C2 F0AE FE73 208E 46BF F3DE 2B25 868E 75A1 A953 + +There are mirrors where you can also get the source code tarballs: +http://www.nncpgo.org/Mirrors.html + +Please send questions regarding the use of NNCP, bug reports and patches +to mailing list: http://lists.cypherpunks.ru/nncp_002ddevel.html +EOF +echo mutt -s \"[EN] NNCP $release release announcement\" \ + nncp-devel@lists.cypherpunks.ru \ + -a $cur/doc/download/"$tarball".meta4 + +cat <8 ------------------------ + +Основные усовершенствования в этом релизе: + +$(git cat-file -p v$release | sed -n '6,/^.*BEGIN/p' | sed '$d') + +------------------------ >8 ------------------------ + +Домашняя страница NNCP: http://www.nncpgo.org/ +Коротко об утилитах: http://www.nncpgo.org/Ob-utilitakh.html + +Исходный код и его подпись для этой версии находятся здесь: + + http://www.nncpgo.org/download/nncp-${release}.tar.xz ($size KiB) + http://www.nncpgo.org/download/nncp-${release}.tar.xz.sig + +Идентификатор GPG ключа: 0x2B25868E75A1A953 NNCP releases +Отпечаток: 92C2 F0AE FE73 208E 46BF F3DE 2B25 868E 75A1 A953 + +Есть и зеркала где вы также можете получить архивы с исходным кодом: +http://www.nncpgo.org/Mirrors.html + +Пожалуйста, все вопросы касающиеся использования NNCP, отчёты об ошибках +и патчи отправляйте в nncp-devel почтовую рассылку: +http://lists.cypherpunks.ru/nncp_002ddevel.html +EOF +echo mutt -s \"[RU] Состоялся релиз NNCP $release\" \ + nncp-devel@lists.cypherpunks.ru \ + -a $cur/doc/download/"$tarball".meta4 diff --git a/makedist.sh b/makedist.sh deleted file mode 100755 index b1d0e99eb4d036744443fb9e6bcd5484a82d396f584134ccc21cf86ef056c79f..0000000000000000000000000000000000000000 --- a/makedist.sh +++ /dev/null @@ -1,256 +0,0 @@ -#!/bin/sh -ex - -cur=$(pwd) -tmp=$(mktemp -d) -release=$1 -[ -n "$release" ] - -git clone . $tmp/nncp-$release -cd $tmp/nncp-$release -git checkout v$release -redo VERSION -cd src -go mod vendor -modvendor -v -copy="**/*_test.go **/words.go **/README.md **/main.go" -cd vendor -rm -r \ - github.com/flynn/noise/vector* \ - github.com/gorhill/cronexpr/APLv2 \ - github.com/hjson/hjson-go/build_release.sh \ - github.com/klauspost/compress/gen.sh \ - github.com/klauspost/compress/gzhttp \ - github.com/klauspost/compress/internal/snapref \ - github.com/klauspost/compress/s2* \ - github.com/klauspost/compress/snappy \ - github.com/klauspost/compress/zstd/snappy.go \ - golang.org/x/sys/plan9 \ - golang.org/x/sys/windows -find github.com/klauspost/compress golang.org/x/sys -name "*_test.go" -delete -find . -type d -exec rmdir {} + 2>/dev/null || : -cd ../.. -rm -r ports -find . \( \ - -name .gitignore -o \ - -name .travis.yml -o \ - -name .goreleaser.yml -o \ - -name .gitattributes \) -delete - -mkdir contrib -cp ~/work/redo/apenwarr/minimal/do contrib/do - -cat > doc/download.texi < $texi < $texi < $texi < $texi < "$tarball".asc -meta4-create -file "$tarball" -mtime "$tarball" -sig "$tarball".asc \ - http://www.nncpgo.org/download/"$tarball" \ - http://y.www.nncpgo.org/download/"$tarball" \ - https://nncp.mirrors.quux.org/download/"$tarball" > "$tarball".meta4 - -size=$(( $(stat -f %z $tarball) / 1024 )) -hash=$(gpg --print-md SHA256 < $tarball) -release_date=$(date "+%Y-%m-%d") - -mv -v $tmp/"$tarball" $tmp/"$tarball".sig $tmp/"$tarball".meta4 $cur/doc/download - -release_underscored=`echo $release | tr . _` -cat <8 ------------------------ - -The main improvements for that release are: - -$(git cat-file -p v$release | sed -n '6,/^.*BEGIN/p' | sed '$d') - ------------------------- >8 ------------------------ - -NNCP's home page is: http://www.nncpgo.org/ - -Source code and its signature for that version can be found here: - - http://www.nncpgo.org/download/nncp-${release}.tar.xz ($size KiB) - http://www.nncpgo.org/download/nncp-${release}.tar.xz.sig - -SHA256 hash: $hash -GPG key ID: 0x2B25868E75A1A953 NNCP releases -Fingerprint: 92C2 F0AE FE73 208E 46BF F3DE 2B25 868E 75A1 A953 - -There are mirrors where you can also get the source code tarballs: -http://www.nncpgo.org/Mirrors.html - -Please send questions regarding the use of NNCP, bug reports and patches -to mailing list: http://lists.cypherpunks.ru/nncp_002ddevel.html -EOF -echo mutt -s \"[EN] NNCP $release release announcement\" \ - nncp-devel@lists.cypherpunks.ru \ - -a $cur/doc/download/"$tarball".meta4 - -cat <8 ------------------------ - -Основные усовершенствования в этом релизе: - -$(git cat-file -p v$release | sed -n '6,/^.*BEGIN/p' | sed '$d') - ------------------------- >8 ------------------------ - -Домашняя страница NNCP: http://www.nncpgo.org/ -Коротко об утилитах: http://www.nncpgo.org/Ob-utilitakh.html - -Исходный код и его подпись для этой версии находятся здесь: - - http://www.nncpgo.org/download/nncp-${release}.tar.xz ($size KiB) - http://www.nncpgo.org/download/nncp-${release}.tar.xz.sig - -SHA256 хэш: $hash -Идентификатор GPG ключа: 0x2B25868E75A1A953 NNCP releases -Отпечаток: 92C2 F0AE FE73 208E 46BF F3DE 2B25 868E 75A1 A953 - -Есть и зеркала где вы также можете получить архивы с исходным кодом: -http://www.nncpgo.org/Mirrors.html - -Пожалуйста, все вопросы касающиеся использования NNCP, отчёты об ошибках -и патчи отправляйте в nncp-devel почтовую рассылку: -http://lists.cypherpunks.ru/nncp_002ddevel.html -EOF -echo mutt -s \"[RU] Состоялся релиз NNCP $release\" \ - nncp-devel@lists.cypherpunks.ru \ - -a $cur/doc/download/"$tarball".meta4 diff --git a/src/area.go b/src/area.go index dd47fafe5f691dea45807ec8996f8644f63d1d10e2640c4f690cf0eddc662061..25f33c7622ba850d3ea1ec654d3c1e0d183326060904214cd41c5400231077dc 100644 --- a/src/area.go +++ b/src/area.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/call.go b/src/call.go index 0f452f053fac6e866f9dc0f0565adbf85c1c8b9a5b9d5a346e9e5f022abc5aea..6c0c651048b3adcd998d7215d76f0702a8b384c2407665a9c0d9e61493e42def 100644 --- a/src/call.go +++ b/src/call.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/cfg.go b/src/cfg.go index 7457cf5b0ef576ef47634e2ad6597fdc1c63144f7f952dd23123efeada2e141a..62074d2be8773dcf6a88924b7291fafc11ca48d1c3109cd0ff07fd1d09898b5f 100644 --- a/src/cfg.go +++ b/src/cfg.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -468,7 +468,7 @@ } func CfgParse(data []byte) (*CfgJSON, error) { var err error - if bytes.Compare(data[:8], MagicNNCPBv3.B[:]) == 0 { + if bytes.Equal(data[:8], MagicNNCPBv3.B[:]) { os.Stderr.WriteString("Passphrase:") password, err := term.ReadPassword(0) if err != nil { @@ -479,9 +479,9 @@ data, err = DeEBlob(data, password) if err != nil { return nil, err } - } else if bytes.Compare(data[:8], MagicNNCPBv2.B[:]) == 0 { + } else if bytes.Equal(data[:8], MagicNNCPBv2.B[:]) { log.Fatalln(MagicNNCPBv2.TooOld()) - } else if bytes.Compare(data[:8], MagicNNCPBv1.B[:]) == 0 { + } else if bytes.Equal(data[:8], MagicNNCPBv1.B[:]) { log.Fatalln(MagicNNCPBv1.TooOld()) } var cfgGeneral map[string]interface{} diff --git a/src/cfgdir.go b/src/cfgdir.go index 0473ae3b52da89f9026c92eaeacc6a590a19644852836bd0f6b48e6e7052a8fd..a254b53bc68b3a6af9d07bef5ed3ec6b31e051f7b58de407fe78a47f1774a7d3 100644 --- a/src/cfgdir.go +++ b/src/cfgdir.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -18,8 +18,9 @@ package nncp import ( + "errors" "fmt" - "io/ioutil" + "io/fs" "os" "path/filepath" "sort" @@ -65,7 +66,7 @@ mode := os.FileMode(0666) if strings.HasSuffix(dst[len(dst)-1], "prv") { mode = os.FileMode(0600) } - return ioutil.WriteFile(filepath.Join(dst...), []byte(r+"\n"), mode) + return os.WriteFile(filepath.Join(dst...), []byte(r+"\n"), mode) } func cfgDirTouch(dst ...string) error { @@ -433,9 +434,9 @@ return } func cfgDirLoad(src ...string) (v string, exists bool, err error) { - b, err := ioutil.ReadFile(filepath.Join(src...)) + b, err := os.ReadFile(filepath.Join(src...)) if err != nil { - if os.IsNotExist(err) { + if errors.Is(err, fs.ErrNotExist) { return "", false, nil } return "", false, err @@ -531,8 +532,8 @@ if sp != nil { cfg.MCDRxIfis = strings.Split(*sp, "\n") } - fis, err := ioutil.ReadDir(filepath.Join(src, "mcd-send")) - if err != nil && !os.IsNotExist(err) { + fis, err := os.ReadDir(filepath.Join(src, "mcd-send")) + if err != nil && !errors.Is(err, fs.ErrNotExist) { return nil, err } if len(fis) > 0 { @@ -543,7 +544,7 @@ n := fi.Name() if n[0] == '.' { continue } - b, err := ioutil.ReadFile(filepath.Join(src, "mcd-send", fi.Name())) + b, err := os.ReadFile(filepath.Join(src, "mcd-send", fi.Name())) if err != nil { return nil, err } @@ -565,8 +566,8 @@ if notify.Freq, err = cfgDirReadFromTo(src, "notify", "freq"); err != nil { return nil, err } } - fis, err = ioutil.ReadDir(filepath.Join(src, "notify", "exec")) - if err != nil && !os.IsNotExist(err) { + fis, err = os.ReadDir(filepath.Join(src, "notify", "exec")) + if err != nil && !errors.Is(err, fs.ErrNotExist) { return nil, err } for _, fi := range fis { @@ -582,7 +583,7 @@ if notify.File != nil || notify.Freq != nil || len(notify.Exec) > 0 { cfg.Notify = ¬ify } - if _, err = ioutil.ReadDir(filepath.Join(src, "self")); err == nil { + if _, err = os.ReadDir(filepath.Join(src, "self")); err == nil { self := NodeOurJSON{} if self.Id, err = cfgDirLoadMust(src, "self", "id"); err != nil { return nil, err @@ -606,13 +607,13 @@ if self.NoisePrv, err = cfgDirLoadMust(src, "self", "noiseprv"); err != nil { return nil, err } cfg.Self = &self - } else if !os.IsNotExist(err) { + } else if !errors.Is(err, fs.ErrNotExist) { return nil, err } cfg.Neigh = make(map[string]NodeJSON) - fis, err = ioutil.ReadDir(filepath.Join(src, "neigh")) - if err != nil && !os.IsNotExist(err) { + fis, err = os.ReadDir(filepath.Join(src, "neigh")) + if err != nil && !errors.Is(err, fs.ErrNotExist) { return nil, err } for _, fi := range fis { @@ -638,8 +639,8 @@ return nil, err } node.Exec = make(map[string][]string) - fis2, err := ioutil.ReadDir(filepath.Join(src, "neigh", n, "exec")) - if err != nil && !os.IsNotExist(err) { + fis2, err := os.ReadDir(filepath.Join(src, "neigh", n, "exec")) + if err != nil && !errors.Is(err, fs.ErrNotExist) { return nil, err } for _, fi2 := range fis2 { @@ -697,8 +698,8 @@ node.Via = strings.Split(*via, "\n") } node.Addrs = make(map[string]string) - fis2, err = ioutil.ReadDir(filepath.Join(src, "neigh", n, "addrs")) - if err != nil && !os.IsNotExist(err) { + fis2, err = os.ReadDir(filepath.Join(src, "neigh", n, "addrs")) + if err != nil && !errors.Is(err, fs.ErrNotExist) { return nil, err } for _, fi2 := range fis2 { @@ -747,8 +748,8 @@ i := uint(*i64) node.MaxOnlineTime = &i } - fis2, err = ioutil.ReadDir(filepath.Join(src, "neigh", n, "calls")) - if err != nil && !os.IsNotExist(err) { + fis2, err = os.ReadDir(filepath.Join(src, "neigh", n, "calls")) + if err != nil && !errors.Is(err, fs.ErrNotExist) { return nil, err } callsIdx := make([]int, 0, len(fis2)) @@ -861,8 +862,8 @@ cfg.Neigh[n] = node } cfg.Areas = make(map[string]AreaJSON) - fis, err = ioutil.ReadDir(filepath.Join(src, "areas")) - if err != nil && !os.IsNotExist(err) { + fis, err = os.ReadDir(filepath.Join(src, "areas")) + if err != nil && !errors.Is(err, fs.ErrNotExist) { return nil, err } for _, fi := range fis { @@ -890,8 +891,8 @@ area.Subs = strings.Split(*subs, "\n") } area.Exec = make(map[string][]string) - fis2, err := ioutil.ReadDir(filepath.Join(src, "areas", n, "exec")) - if err != nil && !os.IsNotExist(err) { + fis2, err := os.ReadDir(filepath.Join(src, "areas", n, "exec")) + if err != nil && !errors.Is(err, fs.ErrNotExist) { return nil, err } for _, fi2 := range fis2 { @@ -916,8 +917,8 @@ } cfg.Areas[n] = area } - fis, err = ioutil.ReadDir(filepath.Join(src, "yggdrasil-aliases")) - if err != nil && !os.IsNotExist(err) { + fis, err = os.ReadDir(filepath.Join(src, "yggdrasil-aliases")) + if err != nil && !errors.Is(err, fs.ErrNotExist) { return nil, err } if len(fis) > 0 { @@ -928,7 +929,7 @@ n := fi.Name() if n[0] == '.' { continue } - b, err := ioutil.ReadFile(filepath.Join(src, "yggdrasil-aliases", fi.Name())) + b, err := os.ReadFile(filepath.Join(src, "yggdrasil-aliases", fi.Name())) if err != nil { return nil, err } diff --git a/src/check.go b/src/check.go index 7432c7ece82621a6632fc0daf22fdcb6f9f77cba2a9cc5ee801d1fae27bc1369..f9a54cff836e8f72c37f7ca94ab61d2bfa76f5054ca5c9f5303c05a038580373 100644 --- a/src/check.go +++ b/src/check.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -44,7 +44,7 @@ "check", les, showPrgrs, ); err != nil { return false, err } - return bytes.Compare(hsh.Sum(nil), checksum) == 0, nil + return bytes.Equal(hsh.Sum(nil), checksum), nil } func (ctx *Ctx) checkXxIsBad(nodeId *NodeId, xx TRxTx) bool { @@ -113,7 +113,7 @@ pktName, ctx.ShowPrgrs, ); err != nil { return 0, err } - if bytes.Compare(mth.Sum(nil), hshValue[:]) == 0 { + if bytes.Equal(mth.Sum(nil), hshValue[:]) { gut = true } } diff --git a/src/chunked.go b/src/chunked.go index ea32e82a014e7c195890a9332679a566b76957372955258128f91cd34d5cad6f..8a2575b994c224762dd0c24d35f9e48ee1b7dc7cdaa9f1226dd156875034f914 100644 --- a/src/chunked.go +++ b/src/chunked.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/cmd/nncp-ack/main.go b/src/cmd/nncp-ack/main.go index 9e4a3f0690d8c191b9a6cba78520baed71744eea0d85496f045e6cc6b94c377c..4d4aa3af893968bba27ff4eeed869bb6d360b57133c31da8138c8f75788b1e29 100644 --- a/src/cmd/nncp-ack/main.go +++ b/src/cmd/nncp-ack/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -34,8 +34,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-ack -- send packet receipt acknowledgement\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-ack -- send packet receipt acknowledgement\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] -all\n", os.Args[0]) fmt.Fprintf(os.Stderr, "Usage: %s [options] -node NODE[,...]\n", os.Args[0]) fmt.Fprintf(os.Stderr, "Usage: %s [options] -node NODE -pkt PKT\n", os.Args[0]) diff --git a/src/cmd/nncp-bundle/main.go b/src/cmd/nncp-bundle/main.go index f0f3266a386bd6175e992904621ec5ff62a2ef79c03e6be98e0ae317068b439a..64ab36f3d60cb6240c87f9ff0bbb2ef3624f2e5177313f1914a9fdbae926dc59 100644 --- a/src/cmd/nncp-bundle/main.go +++ b/src/cmd/nncp-bundle/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -26,7 +26,7 @@ "errors" "flag" "fmt" "io" - "io/ioutil" + "io/fs" "log" "os" "path/filepath" @@ -38,8 +38,8 @@ "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]) @@ -408,7 +408,7 @@ return fmt.Sprintf("Bundle transfer %s/rx/%s", sender, pktName) } 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" }) @@ -416,7 +416,7 @@ continue } 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" }) @@ -461,7 +461,7 @@ } } } 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 { diff --git a/src/cmd/nncp-call/main.go b/src/cmd/nncp-call/main.go index bf5038cac3d8d13c4a4480a125af511d7ac422fa62d88827d4d03ed34da2fddc..8e4e7ad20ff25781479a980c90cb0f0985c3cabfebf895ce6b67639412f58b04 100644 --- a/src/cmd/nncp-call/main.go +++ b/src/cmd/nncp-call/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -32,8 +32,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-call -- call TCP daemon\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-call -- call TCP daemon\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] NODE[:ADDR] [FORCEADDR]\n", os.Args[0]) fmt.Fprintln(os.Stderr, "Options:") flag.PrintDefaults() diff --git a/src/cmd/nncp-caller/main.go b/src/cmd/nncp-caller/main.go index 667c55a0785b9cefbbc7efe54f08db9d6d4f418e55395e3a6524899f49f5287a..9d029642ac959f608c1e5a986c390995ff3815cfc6a7393b1b4eace9b86a2af3 100644 --- a/src/cmd/nncp-caller/main.go +++ b/src/cmd/nncp-caller/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -33,8 +33,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-caller -- croned NNCP TCP daemon caller\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-caller -- croned NNCP TCP daemon caller\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] [NODE ...]\n", os.Args[0]) fmt.Fprintln(os.Stderr, "Options:") flag.PrintDefaults() diff --git a/src/cmd/nncp-cfgdir/main.go b/src/cmd/nncp-cfgdir/main.go index e1e143d85cbeeeef2c387a1a527aba95a49c1408286ebc223ca45bd03a73cae1..7a59f473eb02ab99fe461d09af4edf76f9ec498e0c19fd09040cb9425f134cb4 100644 --- a/src/cmd/nncp-cfgdir/main.go +++ b/src/cmd/nncp-cfgdir/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -21,7 +21,6 @@ import ( "flag" "fmt" - "io/ioutil" "log" "os" @@ -30,8 +29,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-cfgdir -- Convert configuration file to the directory layout.\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-cfgdir -- Convert configuration file to the directory layout.\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] [-cfg ...] -dump /path/to/dir\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] -load /path/to/dir > cfg.hjson\nOptions:\n", os.Args[0]) flag.PrintDefaults() @@ -63,7 +62,7 @@ os.Exit(1) } if *doDump { - cfgRaw, err := ioutil.ReadFile(*cfgPath) + cfgRaw, err := os.ReadFile(*cfgPath) if err != nil { log.Fatalln(err) } diff --git a/src/cmd/nncp-cfgenc/main.go b/src/cmd/nncp-cfgenc/main.go index f21cae7b7fa6fa1a6423d50c2867c79318f523a74562915d097f05000e02de72..ebfedc62a9b2c18fbec07733de5a93a81c08c8a84cd1dc4ffca157f6fabcacf7 100644 --- a/src/cmd/nncp-cfgenc/main.go +++ b/src/cmd/nncp-cfgenc/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -23,7 +23,6 @@ "bytes" "errors" "flag" "fmt" - "io/ioutil" "log" "os" @@ -34,8 +33,8 @@ "golang.org/x/term" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-cfgenc -- encrypt/decrypt configuration file\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-cfgenc -- encrypt/decrypt configuration file\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] cfg.hjson > cfg.hjson.eblob\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] -d cfg.hjson.eblob > cfg.hjson\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] -dump cfg.hjson.eblob\n", os.Args[0]) @@ -70,7 +69,7 @@ usage() os.Exit(1) } - data, err := ioutil.ReadFile(flag.Arg(0)) + data, err := os.ReadFile(flag.Arg(0)) if err != nil { log.Fatalln("Can not read data:", err) } @@ -115,7 +114,7 @@ if err != nil { log.Fatalln(err) } os.Stderr.WriteString("\n") - if bytes.Compare(password1, password2) != 0 { + if !bytes.Equal(password1, password2) { log.Fatalln(errors.New("Passphrases do not match")) } eblob, err := nncp.NewEBlob(*sOpt, *tOpt, *pOpt, password1, data) diff --git a/src/cmd/nncp-cfgmin/main.go b/src/cmd/nncp-cfgmin/main.go index de04b76a0442b8fca0bed2a29853248a61fa206895245aa01e03678f2743eb96..dd334ee0bc2c2ef313f210b9b408b6172d2ea87ab9e9107bc92f711ba4b9906c 100644 --- a/src/cmd/nncp-cfgmin/main.go +++ b/src/cmd/nncp-cfgmin/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -29,8 +29,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-cfgmin -- print stripped configuration\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-cfgmin -- print stripped configuration\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() } diff --git a/src/cmd/nncp-cfgnew/main.go b/src/cmd/nncp-cfgnew/main.go index f15e7147b45bd7aae20c6e54777691c0905dc246f2e0891bc441f0f38443eb32..e17da8ba2136ad827219fe24b8125844b1e1284fc84a7e7b3b48df114f0c69c3 100644 --- a/src/cmd/nncp-cfgnew/main.go +++ b/src/cmd/nncp-cfgnew/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -36,7 +36,7 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, nncp.UsageHeader()) fmt.Fprintln(os.Stderr, "nncp-cfgnew -- generate new configuration and keys\nOptions:") flag.PrintDefaults() } diff --git a/src/cmd/nncp-check/main.go b/src/cmd/nncp-check/main.go index 58aefa6026f0e0a82d9a70de7decdc202be590d97bbe3b5e94840b56bdfe8f46..e9c5e195fedd5725c3cddefa53f77125025ac4971828b66a846b91a82d936a89 100644 --- a/src/cmd/nncp-check/main.go +++ b/src/cmd/nncp-check/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -30,8 +30,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-check -- verify Rx/Tx packets checksum\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-check -- verify Rx/Tx packets checksum\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [-nock] [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() } diff --git a/src/cmd/nncp-cronexpr/main.go b/src/cmd/nncp-cronexpr/main.go index 9057caf7466fc32ebf59c930a5e2cf0e744b890db463a7eb3b3b67d8aebc7234..705f37dde02abca09b67dc0897b3dcb52c61c4f88292eb81dc8d662287ba60bd 100644 --- a/src/cmd/nncp-cronexpr/main.go +++ b/src/cmd/nncp-cronexpr/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -31,8 +31,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-cronexpr -- cron expression checker\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-cronexpr -- cron expression checker\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [-num XXX] CRON-EXPRESSION\n", os.Args[0]) flag.PrintDefaults() } diff --git a/src/cmd/nncp-daemon/main.go b/src/cmd/nncp-daemon/main.go index b6bee2268e74df4c9d7cda59c8a92ea7bd7835f9e98780e4f80d57f346ed5783..3eacb1588333058ad1a7a824b9d06f37c15178340c729027064d781027ce72b9 100644 --- a/src/cmd/nncp-daemon/main.go +++ b/src/cmd/nncp-daemon/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -36,8 +36,8 @@ "golang.org/x/net/netutil" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-daemon -- TCP daemon\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-daemon -- TCP daemon\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() } diff --git a/src/cmd/nncp-exec/main.go b/src/cmd/nncp-exec/main.go index 775c0d22b1fec0b7a844ad1084beed806914b32125b98f883e84510c2bc83d18..201b0c8f06f4ca0271baf657fd2aad94d47c8f04b9d458f88d73dd5e0e5fd96b 100644 --- a/src/cmd/nncp-exec/main.go +++ b/src/cmd/nncp-exec/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -30,8 +30,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-exec -- send execution command\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-exec -- send execution command\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] NODE HANDLE [ARG0 ARG1 ...]\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] %s:AREA HANDLE [ARG0 ARG1 ...]\nOptions:\n", os.Args[0], nncp.AreaDir) diff --git a/src/cmd/nncp-file/main.go b/src/cmd/nncp-file/main.go index 7e9f5cc9df75b8394231aead6813a744eef6b85149659cffdadde57286f54b77..a14919e0d4cd551773c32abe6216f34b9373858879523eca9ffaf27a7197c3be 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-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -29,8 +29,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-file -- send file\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-file -- send file\n\n") 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) diff --git a/src/cmd/nncp-freq/main.go b/src/cmd/nncp-freq/main.go index 3a4749e17262d24d2ef4bfce845e0cac45dbf05732df15a2c60c09cbe3511656..e2aaf128deb0c456b0e6ce8c13a4f4afbf50a621d36c9ee727aa956786ef883b 100644 --- a/src/cmd/nncp-freq/main.go +++ b/src/cmd/nncp-freq/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -30,8 +30,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-freq -- send file request\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-freq -- send file request\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] NODE:SRC [DST]\nOptions:\n", os.Args[0]) flag.PrintDefaults() } diff --git a/src/cmd/nncp-hash/main.go b/src/cmd/nncp-hash/main.go index 3292a89e3ae8303a45348d994b1865c4a183535d900177d84f1e39d5a116052c..fad8841957b12fcaf9289889f8d072ce7a8585f3ae1c5cf6b9b8afcf1d9bcfbe 100644 --- a/src/cmd/nncp-hash/main.go +++ b/src/cmd/nncp-hash/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -32,8 +32,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-hash -- calculate MTH hash of the file\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-hash -- calculate MTH hash of the file\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [-file ...] [-seek X] [-debug] [-progress] [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() } diff --git a/src/cmd/nncp-log/main.go b/src/cmd/nncp-log/main.go index 8f260b40261049685aa952d221d719627cf34352e010d0910d781c9e159d86db..60992cc5a3749e83e75a653b0826409de80ddc3849dafac4b845c268a9c7483d 100644 --- a/src/cmd/nncp-log/main.go +++ b/src/cmd/nncp-log/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -30,8 +30,8 @@ "go.cypherpunks.ru/recfile" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-log -- read logs\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-log -- read logs\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() } diff --git a/src/cmd/nncp-pkt/main.go b/src/cmd/nncp-pkt/main.go index f37ca6acb63e9135e820324519b70a2288d31e12428d2b8866ef92921f1a3f88..92f8aee97282a964fb15192ee0dd145bc83476b96e5cc197b982ecc0ebddbb85 100644 --- a/src/cmd/nncp-pkt/main.go +++ b/src/cmd/nncp-pkt/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -33,8 +33,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-pkt -- parse raw packet\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-pkt -- parse raw packet\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() fmt.Fprintln(os.Stderr, "Packet is read from stdin.") @@ -103,7 +103,6 @@ fmt.Printf( "Packet type: plain\nPayload type: %s\nNiceness: %s (%d)\nPath: %s\n", payloadType, nncp.NicenessFmt(pkt.Nice), pkt.Nice, path, ) - return } func doEncrypted( diff --git a/src/cmd/nncp-reass/main.go b/src/cmd/nncp-reass/main.go index a992f029384e2e1fa2cfa7ed7401b9cbbb8451b24e5cd266bbd24df6bfbdcc2f..2942560cacf3b074b480c42d5d573f97f1e2c632b89732eb449ec7de925a6245 100644 --- a/src/cmd/nncp-reass/main.go +++ b/src/cmd/nncp-reass/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -27,6 +27,7 @@ "flag" "fmt" "hash" "io" + "io/fs" "log" "os" "path/filepath" @@ -39,8 +40,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-reass -- reassemble chunked files\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-reass -- reassemble chunked files\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] [FILE.nncp.meta]\nOptions:\n", os.Args[0]) flag.PrintDefaults() fmt.Fprint(os.Stderr, ` @@ -51,10 +52,10 @@ } func process(ctx *nncp.Ctx, path string, keep, dryRun, stdout, dumpMeta bool) bool { fd, err := os.Open(path) - defer fd.Close() if err != nil { log.Fatalln("Can not open file:", err) } + defer fd.Close() var metaPkt nncp.ChunkedMeta les := nncp.LEs{{K: "Path", V: path}} logMsg := func(les nncp.LEs) string { @@ -115,7 +116,7 @@ allChunksExist := true for chunkNum, chunkPath := range chunksPaths { fi, err := os.Stat(chunkPath) lesChunk := append(les, nncp.LE{K: "Chunk", V: chunkNum}) - if err != nil && os.IsNotExist(err) { + if err != nil && errors.Is(err, fs.ErrNotExist) { ctx.LogI("reass-chunk-miss", lesChunk, func(les nncp.LEs) string { return fmt.Sprintf("%s: chunk %d missing", logMsg(les), chunkNum) }) @@ -124,7 +125,8 @@ continue } var badSize bool if chunkNum+1 == len(chunksPaths) { - badSize = uint64(fi.Size()) != metaPkt.FileSize%metaPkt.ChunkSize + left := metaPkt.FileSize % metaPkt.ChunkSize + badSize = left != 0 && uint64(fi.Size()) != left } else { badSize = uint64(fi.Size()) != metaPkt.ChunkSize } @@ -164,7 +166,7 @@ ); err != nil { log.Fatalln(err) } fd.Close() - if bytes.Compare(hsh.Sum(nil), metaPkt.Checksums[chunkNum][:]) != 0 { + if !bytes.Equal(hsh.Sum(nil), metaPkt.Checksums[chunkNum][:]) { ctx.LogE( "reass-chunk", nncp.LEs{{K: "Path", V: path}, {K: "Chunk", V: chunkNum}}, @@ -269,7 +271,7 @@ dstPath := dstPathOrig dstPathCtr := 0 for { if _, err = os.Stat(dstPath); err != nil { - if os.IsNotExist(err) { + if errors.Is(err, fs.ErrNotExist) { break } log.Fatalln(err) @@ -291,7 +293,6 @@ } func findMetas(ctx *nncp.Ctx, dirPath string) []string { dir, err := os.Open(dirPath) - defer dir.Close() logMsg := func(les nncp.LEs) string { return "Finding .meta in " + dirPath } @@ -299,6 +300,7 @@ if err != nil { ctx.LogE("reass", nncp.LEs{{K: "Path", V: dirPath}}, err, logMsg) return nil } + defer dir.Close() fis, err := dir.Readdir(0) dir.Close() if err != nil { diff --git a/src/cmd/nncp-rm/main.go b/src/cmd/nncp-rm/main.go index e5276f7bf0932c7aaf984a54e6db76552ded655177409094c0b0f4df4a3c5ce9..99e59171df9c1dac56d8cb081fa4bd9f8fb1e42e23766abe25883723096e0836 100644 --- a/src/cmd/nncp-rm/main.go +++ b/src/cmd/nncp-rm/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -19,9 +19,11 @@ // Remove packet from the queue. package main import ( + "errors" "flag" "fmt" "io" + "io/fs" "log" "os" "path/filepath" @@ -34,8 +36,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-rm -- remove packet\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-rm -- remove packet\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] [-older X] -tmp\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] -lock\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] [-older X] {-all|-node NODE} -part\n", os.Args[0]) @@ -205,12 +207,12 @@ continue } remove := func(xx nncp.TRxTx) error { p := filepath.Join(ctx.Spool, node.Id.String(), string(xx)) - if _, err := os.Stat(p); err != nil && os.IsNotExist(err) { + if _, err := os.Stat(p); err != nil && errors.Is(err, fs.ErrNotExist) { return nil } dir, err := os.Open(p) if err != nil { - if os.IsNotExist(err) { + if errors.Is(err, fs.ErrNotExist) { return nil } return err @@ -293,7 +295,7 @@ } removeSub := func(p string) error { return filepath.Walk(p, func(path string, info os.FileInfo, err error) error { if err != nil { - if os.IsNotExist(err) { + if errors.Is(err, fs.ErrNotExist) { return nil } return err @@ -356,7 +358,7 @@ if err = filepath.Walk( filepath.Join(ctx.Spool, node.Id.String(), nncp.AreaDir), func(path string, info os.FileInfo, err error) error { if err != nil { - if os.IsNotExist(err) { + if errors.Is(err, fs.ErrNotExist) { return nil } return err diff --git a/src/cmd/nncp-stat/main.go b/src/cmd/nncp-stat/main.go index 3f4955f9598a53068f46ca1c7ed26f7a4daa329772e46a6feb6198b97188c326..fde377dfe8cbe9f21da67dca4bc492e1734f88a8372f0a1a480ffbe729f2f172 100644 --- a/src/cmd/nncp-stat/main.go +++ b/src/cmd/nncp-stat/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -30,8 +30,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-stat -- show queued Rx/Tx stats\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-stat -- show queued Rx/Tx stats\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] [-pkt] [-node NODE]\nOptions:\n", os.Args[0]) flag.PrintDefaults() } diff --git a/src/cmd/nncp-toss/main.go b/src/cmd/nncp-toss/main.go index b3beb8885d8a2c1c4eac6c5e0b7b51a4492cd3a92ae5c65857361c5405b2c9ab..4cc705f6be12d328a1581ae55dfd524874a7e4e2b28703df2cc96221d83c7ab6 100644 --- a/src/cmd/nncp-toss/main.go +++ b/src/cmd/nncp-toss/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -30,8 +30,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-toss -- process inbound packets\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-toss -- process inbound packets\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options]\nOptions:\n", os.Args[0]) flag.PrintDefaults() } diff --git a/src/cmd/nncp-trns/main.go b/src/cmd/nncp-trns/main.go index 39e8993736f27812b29487f293770dbe704619973a8689981215250957fc9de9..b1433f1cd59d1f5734273f3e6074e1515e3e7e7ec7867ce63da346abdc427e7f 100644 --- a/src/cmd/nncp-trns/main.go +++ b/src/cmd/nncp-trns/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -31,8 +31,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-trns -- transit existing encrypted packet\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-trns -- transit existing encrypted packet\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] -via NODEx[,...] NODE:PKT\n", os.Args[0]) fmt.Fprintf(os.Stderr, " (to transit SPOOL/NODE/tx/PKT)\n") fmt.Fprintf(os.Stderr, " %s [options] -via NODEx[,...] /path/to/PKT\nOptions:\n", diff --git a/src/cmd/nncp-xfer/main.go b/src/cmd/nncp-xfer/main.go index c81f64f9531ac3318e3346aafe567b42c05f9928cc20e141cca414b72621e986..df778e8d7e228ef346f7e320a5a7ede811b7c9cd0ff041eb617e79d8a48c84d9 100644 --- a/src/cmd/nncp-xfer/main.go +++ b/src/cmd/nncp-xfer/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -24,6 +24,7 @@ "errors" "flag" "fmt" "io" + "io/fs" "log" "os" "path/filepath" @@ -33,8 +34,8 @@ "go.cypherpunks.ru/nncp/v8" ) func usage() { - fmt.Fprintf(os.Stderr, nncp.UsageHeader()) - fmt.Fprintf(os.Stderr, "nncp-xfer -- copy inbound and outbounds packets\n\n") + fmt.Fprint(os.Stderr, nncp.UsageHeader()) + fmt.Fprint(os.Stderr, "nncp-xfer -- copy inbound and outbounds packets\n\n") fmt.Fprintf(os.Stderr, "Usage: %s [options] DIR\nOptions:\n", os.Args[0]) flag.PrintDefaults() } @@ -120,7 +121,7 @@ return "Packet transfer, received from self" } ctx.LogD("xfer-self", les, logMsg) if _, err = os.Stat(selfPath); err != nil { - if os.IsNotExist(err) { + if errors.Is(err, fs.ErrNotExist) { ctx.LogD("xfer-self-no-dir", les, func(les nncp.LEs) string { return logMsg(les) + ": no directory" }) @@ -215,7 +216,7 @@ nodeId.String(), string(nncp.TRx), nncp.SeenDir, fiInt.Name(), - )); err == nil || !os.IsNotExist(err) { + )); err == nil || !errors.Is(err, fs.ErrNotExist) { ctx.LogI("xfer-rx-seen", les, func(les nncp.LEs) string { return logMsg(les) + ": packet already seen" }) @@ -389,7 +390,7 @@ ) } _, err = os.Stat(nodePath) if err != nil { - if os.IsNotExist(err) { + if errors.Is(err, fs.ErrNotExist) { ctx.LogD("xfer-tx-not-exist", les, func(les nncp.LEs) string { return logMsg(les) + ": does not exist" }) @@ -420,7 +421,7 @@ ) } _, err = os.Stat(dstPath) if err != nil { - if os.IsNotExist(err) { + if errors.Is(err, fs.ErrNotExist) { if err = os.Mkdir(dstPath, os.FileMode(0777)); err != nil { ctx.UnlockDir(dirLock) ctx.LogE("xfer-tx-mkdir", les, err, logMsg) @@ -450,7 +451,7 @@ return logMsg(les) + ": too nice" }) continue } - if _, err = os.Stat(filepath.Join(dstPath, pktName)); err == nil || !os.IsNotExist(err) { + if _, err = os.Stat(filepath.Join(dstPath, pktName)); err == nil || !errors.Is(err, fs.ErrNotExist) { ctx.LogD("xfer-tx-exists", les, func(les nncp.LEs) string { return logMsg(les) + ": already exists" }) diff --git a/src/ctx.go b/src/ctx.go index 991d2d31de4a19ec3ce8e601f9d58f042519a0549e5597fa98554cc5bef17e23..f85a8f23031b677a0b1dd738854f30b11cbf7a54cd3cfccbe63ab52f2e5b23f2 100644 --- a/src/ctx.go +++ b/src/ctx.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -20,7 +20,7 @@ import ( "errors" "fmt" - "io/ioutil" + "io/fs" "os" "path/filepath" "strconv" @@ -80,7 +80,7 @@ return nil } return fmt.Errorf("%s: is not a directory", p) } - if !os.IsNotExist(err) { + if !errors.Is(err, fs.ErrNotExist) { return err } return os.MkdirAll(p, os.FileMode(0777)) @@ -119,7 +119,7 @@ if err != nil { return nil, err } } else { - cfgRaw, err := ioutil.ReadFile(cfgPath) + cfgRaw, err := os.ReadFile(cfgPath) if err != nil { return nil, err } diff --git a/src/dirwatch.go b/src/dirwatch.go index 4bb1dc19b87a6b857102a7544d8dc8c65719cc125ce7dfb6b603420ae316098c..e5a944cbec4ea14a02146519befb5791aa5ffa5b0d690e935553f15dc948ed71 100644 --- a/src/dirwatch.go +++ b/src/dirwatch.go @@ -3,7 +3,7 @@ // +build !nofsnotify /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/dirwatch_dummy.go b/src/dirwatch_dummy.go index 75da8b4b59e9593fe72b6fd166e3430c97094d8c8f262c9cb472dfc51f43884a..b74eadaa5f423f288ba3258c9ff4fd8f2657588c07086e1f08e2b5f31addadb2 100644 --- a/src/dirwatch_dummy.go +++ b/src/dirwatch_dummy.go @@ -3,7 +3,7 @@ // +build nofsnotify /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/eblob.go b/src/eblob.go index a69752f094ecb7bb11a16fb811a9ad2cf2ea2233ab2633fca59754c225e2b5cb..95d9fb3a637b773fc6f149e02a8e0bb02640ac9a7e7d5b6c49225704889d7119 100644 --- a/src/eblob.go +++ b/src/eblob.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/go.mod b/src/go.mod index 5150d5df923eae5575463e4fa222713bcc03354a94ca9df06cdc53bd05a28463..86908f029784aaa0e91698a4a7c02a9eaa7941a0d47f28e635153273099e6c04 100644 --- a/src/go.mod +++ b/src/go.mod @@ -1,31 +1,31 @@ module go.cypherpunks.ru/nncp/v8 require ( - github.com/Arceliar/ironwood v0.0.0-20221025225125-45b4281814c2 + github.com/Arceliar/ironwood v0.0.0-20221115123222-ec61cea2f439 github.com/davecgh/go-xdr v0.0.0-20161123171359-e6a2ba005892 - github.com/dustin/go-humanize v1.0.0 + github.com/dustin/go-humanize v1.0.1 github.com/flynn/noise v1.0.0 github.com/fsnotify/fsnotify v1.6.0 github.com/gologme/log v1.3.0 github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75 github.com/hjson/hjson-go v3.3.0+incompatible - github.com/klauspost/compress v1.15.12 - github.com/yggdrasil-network/yggdrasil-go v0.4.6 + github.com/klauspost/compress v1.16.5 + github.com/yggdrasil-network/yggdrasil-go v0.4.7 go.cypherpunks.ru/balloon v1.1.1 - go.cypherpunks.ru/recfile v0.5.1 - golang.org/x/crypto v0.3.0 - golang.org/x/net v0.2.0 - golang.org/x/sys v0.2.0 - golang.org/x/term v0.2.0 - gvisor.dev/gvisor v0.0.0-20220901235040-6ca97ef2ce1c + go.cypherpunks.ru/recfile v0.7.0 + golang.org/x/crypto v0.8.0 + golang.org/x/net v0.9.0 + golang.org/x/sys v0.7.0 + golang.org/x/term v0.7.0 + gvisor.dev/gvisor v0.0.0-20230428223346-f33f75cda699 lukechampine.com/blake3 v1.1.7 ) require ( github.com/Arceliar/phony v0.0.0-20210209235338-dde1a8dca979 // indirect github.com/google/btree v1.0.1 // indirect - github.com/klauspost/cpuid/v2 v2.2.1 // indirect - golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect + github.com/klauspost/cpuid/v2 v2.2.4 // indirect + golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect ) go 1.17 diff --git a/src/go.sum b/src/go.sum index a6ac3aca05362e18ed61cec3997daa785f0c74fc068a54540760be3339833eea..932f694257fbafc220c7caa60f030267ce115512c3ae063bc53e72f57654306d 100644 --- a/src/go.sum +++ b/src/go.sum @@ -1,11 +1,11 @@ -github.com/Arceliar/ironwood v0.0.0-20221025225125-45b4281814c2 h1:Usab30pNT2i/vZvpXcN9uOr5IO1RZPcUqoGH0DIAPnU= -github.com/Arceliar/ironwood v0.0.0-20221025225125-45b4281814c2/go.mod h1:RP72rucOFm5udrnEzTmIWLRVGQiV/fSUAQXJ0RST/nk= +github.com/Arceliar/ironwood v0.0.0-20221115123222-ec61cea2f439 h1:eOW6/XIs06TnUn9GPCnfv71CQZw8edP3u3mH3lZt6iM= +github.com/Arceliar/ironwood v0.0.0-20221115123222-ec61cea2f439/go.mod h1:RP72rucOFm5udrnEzTmIWLRVGQiV/fSUAQXJ0RST/nk= github.com/Arceliar/phony v0.0.0-20210209235338-dde1a8dca979 h1:WndgpSW13S32VLQ3ugUxx2EnnWmgba1kCqPkd4Gk1yQ= github.com/Arceliar/phony v0.0.0-20210209235338-dde1a8dca979/go.mod h1:6Lkn+/zJilRMsKmbmG1RPoamiArC6HS73xbwRyp3UyI= github.com/davecgh/go-xdr v0.0.0-20161123171359-e6a2ba005892 h1:qg9VbHo1TlL0KDM0vYvBG9EY0X0Yku5WYIPoFWt8f6o= github.com/davecgh/go-xdr v0.0.0-20161123171359-e6a2ba005892/go.mod h1:CTDl0pzVzE5DEzZhPfvhY/9sPFMQIxaJ9VAMs9AagrE= -github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -18,44 +18,44 @@ github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75 h1:f0n1xnMSmBLzVfsMMvriDyA75NB/oBgILX2GcHXIQzY= github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/hjson/hjson-go v3.3.0+incompatible h1:Rqr+Ya+0aCJMjaE4s8E9YKvuJLuLVpEvz4ONum52vnI= github.com/hjson/hjson-go v3.3.0+incompatible/go.mod h1:qsetwF8NlsTsOTwZTApNlTCerV+b2GjYRRcIk4JMFio= -github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM= -github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= +github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.1 h1:U33DW0aiEj633gHYw3LoDNfkDiYnE5Q8M/TKJn2f2jI= -github.com/klauspost/cpuid/v2 v2.2.1/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/yggdrasil-network/yggdrasil-go v0.4.6 h1:GALUDV9QPz/5FVkbazpkTc9EABHufA556JwUJZr41j4= -github.com/yggdrasil-network/yggdrasil-go v0.4.6/go.mod h1:PBMoAOvQjA9geNEeGyMXA9QgCS6Bu+9V+1VkWM84wpw= +github.com/yggdrasil-network/yggdrasil-go v0.4.7 h1:1zFAsyHSgjQ2HGCsps1bK2EoUH3t0ZXfg+fEclPW0G8= +github.com/yggdrasil-network/yggdrasil-go v0.4.7/go.mod h1:FjWmrJHR3To7qSAulXG23+WshFJSSRFiqqsNjxMEqgE= go.cypherpunks.ru/balloon v1.1.1 h1:ypHM1DRf/XuCrp9pDkTHg00CqZX/Np/APb//iHvDJTA= go.cypherpunks.ru/balloon v1.1.1/go.mod h1:k4s4ozrIrhpBjj78Z7LX8ZHxMQ+XE7DZUWl8gP2ojCo= -go.cypherpunks.ru/recfile v0.5.1 h1:Sk9Og/7aybvg4PrZdhyFSeEdS6wvcisvd+1oGf8uFyU= -go.cypherpunks.ru/recfile v0.5.1/go.mod h1:sR+KajB+vzofL3SFVFwKt3Fke0FaCcN1g3YPNAhU3qI= +go.cypherpunks.ru/recfile v0.7.0 h1:0R1UnDGKccp7JnC66msslJMlSY02jHx/XkW+ISl0GuY= +go.cypherpunks.ru/recfile v0.7.0/go.mod h1:sR+KajB+vzofL3SFVFwKt3Fke0FaCcN1g3YPNAhU3qI= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A= -golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ= +golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.2.0 h1:z85xZCsEl7bi/KwbNADeBYoOP0++7W1ipu+aGnpwzRM= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gvisor.dev/gvisor v0.0.0-20220901235040-6ca97ef2ce1c h1:m5lcgWnL3OElQNVyp3qcncItJ2c0sQlSGjYK2+nJTA4= -gvisor.dev/gvisor v0.0.0-20220901235040-6ca97ef2ce1c/go.mod h1:TIvkJD0sxe8pIob3p6T8IzxXunlp6yfgktvTNp+DGNM= +gvisor.dev/gvisor v0.0.0-20230428223346-f33f75cda699 h1:Ns93L6u6C3xgQY2eodedE2ZgIW8JaQYExfHdACX1BJc= +gvisor.dev/gvisor v0.0.0-20230428223346-f33f75cda699/go.mod h1:pzr6sy8gDLfVmDAg8OYrlKvGEHw5C3PGTiBXBTCx76Q= lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= diff --git a/src/humanizer.go b/src/humanizer.go index bb155617c023c37066962577e027b6fa66f5f329a41e8ee1646101a2813e0ffa..f41d2f1c2c6e72af5567923fb287456300f683be8cd635e0f4c744f5228c68ec 100644 --- a/src/humanizer.go +++ b/src/humanizer.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/jobs.go b/src/jobs.go index c844de8428a9a072ef8103e09ada2b8e14484610f130d54836852d266227a7e7..00bde95fe3f6533736613a28dd755660bcc02655307ea6270bb47ac0e822f43a 100644 --- a/src/jobs.go +++ b/src/jobs.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -19,8 +19,10 @@ package nncp import ( "bytes" + "errors" "fmt" "io" + "io/fs" "os" "path/filepath" "strings" @@ -148,7 +150,7 @@ if nock || part { fd, err = os.Open(pth) } else { fd, err = os.Open(JobPath2Hdr(pth)) - if err != nil && os.IsNotExist(err) { + if err != nil && errors.Is(err, fs.ErrNotExist) { hdrExists = false fd, err = os.Open(pth) } diff --git a/src/lockdir.go b/src/lockdir.go index a8adc87f0e36b715b9a549730f46919b02d961fce04f89e713b50cc261196ff9..c79e1575be431185e805b6e426e47910c0ebd638f6be2a5a8af41f780b1ff337 100644 --- a/src/lockdir.go +++ b/src/lockdir.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/log.go b/src/log.go index bf3d68ed052a7ecacbbf093486b01ba48c316bcadb344919578a0797962cee2d..4e089bccfbf1205a41f9053c5d1aa96ad610a8c654767301af4590e9bb571055 100644 --- a/src/log.go +++ b/src/log.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/magic.go b/src/magic.go index c313deb5cbc0ed3bf475c8b9dee9601fb94f658122f1b07f0ab200d12be47259..7690dad17ef22d58eb9932adada51d0f2c3a51c0249edabc44e40c8c7117531c 100644 --- a/src/magic.go +++ b/src/magic.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/mcd.go b/src/mcd.go index 8ce8d5b163f6913863bbed5604a474ef3dd2017daba3665e8137378c0938a87e..5d3924842786633a951500de0e31efabf9b46d2b7fca6ef3a467740656c3ddcf 100644 --- a/src/mcd.go +++ b/src/mcd.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/mth.go b/src/mth.go index 22e96d11651bd77cf3cbac6557daa1828d60e06b9c2f74ccb2ba2ad99401e149..292ddd7b805d87a8f8f679751d9070d731cab1bbff7b6003d38ad08686af19fb 100644 --- a/src/mth.go +++ b/src/mth.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -82,9 +82,7 @@ ctr int64 size int64 prependSize int64 toSkip int64 - skipped bool finished bool - pktName string } func MTHSeqNew(size, offset int64) *MTHSeq { diff --git a/src/mth_test.go b/src/mth_test.go index bcb8656052fb370dceb9a305de2cd6d8f6b5549166273880e24e1debb6d62951..690f8f734181e8b1dd277812e4569f9e57a134c0784d76f4f0517595b2f2d719 100644 --- a/src/mth_test.go +++ b/src/mth_test.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -49,13 +49,13 @@ } if _, err := mth.PreaddFrom(bytes.NewReader(data), "", false); err != nil { panic(err) } - if bytes.Compare(hsh0, mth.Sum(nil)) != 0 { + if !bytes.Equal(hsh0, mth.Sum(nil)) { return false } mth = MTHSeqNew(0, 0) mth.Write(data) - if bytes.Compare(hsh0, mth.Sum(nil)) != 0 { + if !bytes.Equal(hsh0, mth.Sum(nil)) { return false } @@ -65,7 +65,7 @@ if _, err := io.Copy(mth, bytes.NewReader(data)); err != nil { panic(err) } hsh00 := mth.Sum(nil) - if bytes.Compare(hsh0, hsh00) == 0 { + if bytes.Equal(hsh0, hsh00) { return false } @@ -76,17 +76,13 @@ } if _, err := mth.PreaddFrom(bytes.NewReader(data), "", false); err != nil { panic(err) } - if bytes.Compare(hsh00, mth.Sum(nil)) != 0 { + if !bytes.Equal(hsh00, mth.Sum(nil)) { return false } mth = MTHSeqNew(0, 0) mth.Write(data) - if bytes.Compare(hsh00, mth.Sum(nil)) != 0 { - return false - } - - return true + return bytes.Equal(hsh00, mth.Sum(nil)) } if err := quick.Check(f, nil); err != nil { t.Error(err) @@ -110,7 +106,7 @@ seq := MTHSeqNew(int64(size), 0) if _, err := io.Copy(seq, bytes.NewReader(data)); err != nil { panic(err) } - return bytes.Compare(hshFat, seq.Sum(nil)) == 0 + return bytes.Equal(hshFat, seq.Sum(nil)) } if err := quick.Check(f, nil); err != nil { t.Error(err) @@ -128,7 +124,7 @@ seq := MTHSeqNew(0, 0) if _, err := seq.Write(nil); err != nil { t.Error(err) } - if bytes.Compare(hshFat, seq.Sum(nil)) != 0 { + if !bytes.Equal(hshFat, seq.Sum(nil)) { t.FailNow() } } diff --git a/src/nncp.go b/src/nncp.go index 72eac9a68d82c68ce5a39e210bf6828c2b5a505eee4be018e8e10a1cda019f5c..60105538c550a58d0980c481b86bf4dfb642aa7ddefe347d7097e53755fc7e91 100644 --- a/src/nncp.go +++ b/src/nncp.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -40,7 +40,7 @@ const Base32Encoded32Len = 52 var ( - Version string = "8.8.2" + Version string = "8.8.3" Base32Codec *base32.Encoding = base32.StdEncoding.WithPadding(base32.NoPadding) ) @@ -51,7 +51,7 @@ } func UsageHeader() string { return VersionGet() + ` -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 Sergey Matveev License GPLv3: GNU GPL version 3 This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. diff --git a/src/node.go b/src/node.go index 0227a82682e0d31dc97fd07cf5830a70042ed8db83646eeddd3ad26182b12eb4..8145d2a197425534fabb5ec638a1826fe72d1e2c748cbe11d2b6ff179c00617c 100644 --- a/src/node.go +++ b/src/node.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/pipe.go b/src/pipe.go index a8557f955a7bcfd0009a92c852cf0c9d4cea259f50044a09ef0999606b1de8a9..b09bb5023867f4ff155e6fde22f41bb5e7cdb450bf4eeebc2b7b29e9b491945b 100644 --- a/src/pipe.go +++ b/src/pipe.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -65,7 +65,7 @@ return c.w.SetWriteDeadline(t) } func (c PipeConn) Close() (err error) { - err = c.r.Close() + c.r.Close() err = c.w.Close() go c.cmd.Wait() time.AfterFunc(time.Duration(10*time.Second), func() { diff --git a/src/pkt.go b/src/pkt.go index eb8c3efe43c155d3f619362e906918d3e810473e1f8cef05a9354e1cbc1be87e..e85d14f7d3d32bd2956aa173aed24281a4201d5d2210e0b7d85315642c0ac199 100644 --- a/src/pkt.go +++ b/src/pkt.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -514,7 +514,7 @@ _, err = io.ReadFull(xof, pt[:n]) if err != nil { panic(err) } - if bytes.Compare(ct[:n], pt[:n]) != 0 { + if !bytes.Equal(ct[:n], pt[:n]) { err = errors.New("wrong pad value") return } diff --git a/src/pkt_test.go b/src/pkt_test.go index f1a01fdaefb20a249d222eec0e8d205b51583f367634adfa43ba4654013fa912..82f4ae9e06aef10e6fed3714336bd89598f86ec65ff406c49a9df67485edef50 100644 --- a/src/pkt_test.go +++ b/src/pkt_test.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -146,7 +146,7 @@ return false } var pktBuf bytes.Buffer xdr.Marshal(&pktBuf, &pkt) - return bytes.Compare(pt.Bytes(), append(pktBuf.Bytes(), data...)) == 0 + return bytes.Equal(pt.Bytes(), append(pktBuf.Bytes(), data...)) } if err := quick.Check(f, nil); err != nil { t.Error(err) diff --git a/src/progress.go b/src/progress.go index 0297b2ed10bf7dbead779b8d9231a4b35309718f66b7cfc747cc7fc9b051b27a..1a0a13b6a3116f58880bf48b3af57b7f1cd9c470d3fb84f54eb3b59dad3a041d 100644 --- a/src/progress.go +++ b/src/progress.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -37,7 +37,6 @@ var progressBarsLock sync.RWMutex type ProgressBar struct { w *uilive.Writer - hash string started time.Time initial int64 full int64 diff --git a/src/sp.go b/src/sp.go index 133bb9e5d716a26d8e4bb8a850c69aef3f67ac5098643c6f141bd2cb81a95c4a..888eba7fad19009a5b80c64347e16d9839cbeecd942c584d19826f322fc4bdad 100644 --- a/src/sp.go +++ b/src/sp.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -287,21 +287,22 @@ } func (state *SPState) WriteSP(dst io.Writer, payload []byte, ping bool) error { state.writeSPBuf.Reset() - n, err := xdr.Marshal(&state.writeSPBuf, SPRaw{ + if _, err := xdr.Marshal(&state.writeSPBuf, SPRaw{ Magic: MagicNNCPSv1.B, Payload: payload, - }) + }); err != nil { + return err + } + n, err := dst.Write(state.writeSPBuf.Bytes()) if err != nil { return err } - if n, err = dst.Write(state.writeSPBuf.Bytes()); err == nil { - state.TxLastSeen = time.Now() - state.TxBytes += int64(n) - if !ping { - state.TxLastNonPing = state.TxLastSeen - } + state.TxLastSeen = time.Now() + state.TxBytes += int64(n) + if !ping { + state.TxLastNonPing = state.TxLastSeen } - return err + return nil } func (state *SPState) ReadSP(src io.Reader) ([]byte, error) { @@ -1118,7 +1119,7 @@ func (state *SPState) Wait() bool { state.wg.Wait() close(state.payloads) close(state.pings) - state.Duration = time.Now().Sub(state.started) + state.Duration = time.Since(state.started) state.dirUnlock() state.RxSpeed = state.RxBytes state.TxSpeed = state.TxBytes @@ -1477,7 +1478,7 @@ } if hasherAndOffset != nil { delete(state.fileHashers, filePath) if hasherAndOffset.mth.PreaddSize() == 0 { - if bytes.Compare(hasherAndOffset.mth.Sum(nil), file.Hash[:]) != 0 { + if !bytes.Equal(hasherAndOffset.mth.Sum(nil), file.Hash[:]) { state.Ctx.LogE( "sp-file-bad-checksum", lesp, errors.New("checksum mismatch"), diff --git a/src/tmp.go b/src/tmp.go index 28d5660fc3b9d4b45dffa3d0b14cc0fcd4d4299f3064411d708849b271b3dc95..e4eba5fdfc9f2998fd3499f07af21fd93330a10f65f655db6c46dae8c8ea9858 100644 --- a/src/tmp.go +++ b/src/tmp.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/toss.go b/src/toss.go index 65c481b286bc7b37bba9f63548293258609c48aae69b743ebfe175c7b1343cee..cd86f487e14cf90da23f6200102037d6d928897d50205775adcbe25016e22b08 100644 --- a/src/toss.go +++ b/src/toss.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -24,7 +24,7 @@ "encoding/base64" "errors" "fmt" "io" - "io/ioutil" + "io/fs" "log" "mime" "os" @@ -357,7 +357,7 @@ dstPath := dstPathOrig dstPathCtr := 0 for { if _, err = os.Stat(dstPath); err != nil { - if os.IsNotExist(err) { + if errors.Is(err, fs.ErrNotExist) { break } ctx.LogE("rx-stat", les, err, func(les LEs) string { @@ -475,7 +475,7 @@ }, ) return err } - dstRaw, err := ioutil.ReadAll(pipeR) + dstRaw, err := io.ReadAll(pipeR) if err != nil { ctx.LogE("rx-read", les, err, func(les LEs) string { return fmt.Sprintf( diff --git a/src/toss_test.go b/src/toss_test.go index e0d2fff283aac62b01cd7f051260a1716aa806da53a42388ca7c0a8930c40eca..647ad63904946412f1cf00fbccdfe48dd5578fbd72906c22c29fbd6c1440c12c 100644 --- a/src/toss_test.go +++ b/src/toss_test.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -22,7 +22,6 @@ "bytes" "crypto/rand" "fmt" "io" - "io/ioutil" "os" "path/filepath" "strconv" @@ -56,7 +55,7 @@ handle := strconv.Itoa(int(handleRaw)) for i, recipient := range recipients { recipients[i] = recipient % 8 } - spool, err := ioutil.TempDir("", "testtoss") + spool, err := os.MkdirTemp("", "testtoss") if err != nil { panic(err) } @@ -138,7 +137,7 @@ if len(dirFiles(rxPath)) != 0 { return false } } - mbox, err := ioutil.ReadFile(filepath.Join(spool, "mbox")) + mbox, err := os.ReadFile(filepath.Join(spool, "mbox")) if err != nil { return false } @@ -150,7 +149,7 @@ []byte(fmt.Sprintf("%d arg0 arg1\n", replyNice))..., ) expected = append(expected, []byte("BODY\n")...) } - return bytes.Compare(mbox, expected) == 0 + return bytes.Equal(mbox, expected) } if err := quick.Check(f, nil); err != nil { t.Error(err) @@ -174,7 +173,7 @@ panic(err) } files[strconv.Itoa(i)] = data } - spool, err := ioutil.TempDir("", "testtoss") + spool, err := os.MkdirTemp("", "testtoss") if err != nil { panic(err) } @@ -200,7 +199,7 @@ hasher := MTHNew(0, 0) hasher.Write(fileData) fileName := Base32Codec.EncodeToString(hasher.Sum(nil)) src := filepath.Join(spool, fileName) - if err := ioutil.WriteFile(src, fileData, os.FileMode(0600)); err != nil { + if err := os.WriteFile(src, fileData, os.FileMode(0600)); err != nil { panic(err) } if err := ctx.TxFile( @@ -236,11 +235,11 @@ for _, fileData := range files { hasher := MTHNew(0, 0) hasher.Write(fileData) fileName := Base32Codec.EncodeToString(hasher.Sum(nil)) - data, err := ioutil.ReadFile(filepath.Join(incomingPath, fileName)) + data, err := os.ReadFile(filepath.Join(incomingPath, fileName)) if err != nil { panic(err) } - if bytes.Compare(data, fileData) != 0 { + if !bytes.Equal(data, fileData) { return false } } @@ -254,7 +253,7 @@ func TestTossFileSameName(t *testing.T) { f := func(filesRaw uint8) bool { files := int(filesRaw)%8 + 1 - spool, err := ioutil.TempDir("", "testtoss") + spool, err := os.MkdirTemp("", "testtoss") if err != nil { panic(err) } @@ -275,7 +274,7 @@ Debug: TDebug, } ctx.Neigh[*nodeOur.Id] = nodeOur.Their() srcPath := filepath.Join(spool, "junk") - if err = ioutil.WriteFile( + if err = os.WriteFile( srcPath, []byte("doesnotmatter"), os.FileMode(0600), @@ -315,10 +314,7 @@ return false } delete(expected, filename) } - if len(expected) != 0 { - return false - } - return true + return len(expected) == 0 } if err := quick.Check(f, nil); err != nil { t.Error(err) @@ -330,7 +326,7 @@ f := func(fileSizes []uint8, replyNice uint8) bool { if len(fileSizes) == 0 { return true } - spool, err := ioutil.TempDir("", "testtoss") + spool, err := os.MkdirTemp("", "testtoss") if err != nil { panic(err) } @@ -390,7 +386,7 @@ if len(dirFiles(txPath)) != 0 || len(dirFiles(rxPath)) == 0 { return false } for fileName, fileData := range files { - if err := ioutil.WriteFile( + if err := os.WriteFile( filepath.Join(spool, fileName), fileData, os.FileMode(0600), @@ -423,8 +419,7 @@ } if pkt.Nice != replyNice { return false } - dst := string(pkt.Path[:int(pkt.PathLen)]) - if bytes.Compare(buf.Bytes(), files[dst]) != 0 { + if !bytes.Equal(buf.Bytes(), files[string(pkt.Path[:int(pkt.PathLen)])]) { return false } } @@ -449,7 +444,7 @@ panic(err) } datum[i] = data } - spool, err := ioutil.TempDir("", "testtoss") + spool, err := os.MkdirTemp("", "testtoss") if err != nil { panic(err) } @@ -495,7 +490,7 @@ return false } hasher := MTHNew(0, 0) hasher.Write(dst.Bytes()) - if err := ioutil.WriteFile( + if err := os.WriteFile( filepath.Join(rxPath, Base32Codec.EncodeToString(hasher.Sum(nil))), dst.Bytes(), os.FileMode(0600), @@ -509,20 +504,17 @@ if len(dirFiles(rxPath)) != 0 { return false } for _, filename := range dirFiles(txPath) { - dataRead, err := ioutil.ReadFile(filepath.Join(txPath, filename)) + dataRead, err := os.ReadFile(filepath.Join(txPath, filename)) if err != nil { panic(err) } for k, data := range datum { - if bytes.Compare(dataRead, data) == 0 { + if bytes.Equal(dataRead, data) { delete(datum, k) } } } - if len(datum) > 0 { - return false - } - return true + return len(datum) == 0 } if err := quick.Check(f, nil); err != nil { t.Error(err) diff --git a/src/tx.go b/src/tx.go index 1b8c37a01f3329dac3413f2f66899a9bb2a82ddd0777e0ac165a2c6ab6333b1e..bafeb7a03ad8fce3a51c8f317ea2b132cbdc4aa3d5cc373f4d5ce109c4e99677 100644 --- a/src/tx.go +++ b/src/tx.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/tx_test.go b/src/tx_test.go index 12d6441606dece05acb453cadfe5c78e044e1ae4e89ad4a8c79ae83bf36d4486..4d68276de6d8c217807b07bc20103a145531fe4fcfd4e41273a3b7d8a3675e99 100644 --- a/src/tx_test.go +++ b/src/tx_test.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -21,7 +21,6 @@ import ( "bytes" "crypto/rand" "io" - "io/ioutil" "os" "path" "testing" @@ -48,7 +47,7 @@ if len(pathSrc) > int(MaxPathSize) { pathSrc = pathSrc[:MaxPathSize] } hops = hops % 4 - spool, err := ioutil.TempDir("", "testtx") + spool, err := os.MkdirTemp("", "testtx") if err != nil { panic(err) } @@ -86,6 +85,9 @@ privates[*node.Id] = node nodeTgt.Via = append(nodeTgt.Via, node.Id) } pkt, err := NewPkt(PktTypeExec, replyNice, []byte(pathSrc)) + if err != nil { + panic(err) + } src := bytes.NewReader(data) dstNode, _, _, err := ctx.Tx( nodeTgt, @@ -148,14 +150,14 @@ } if !bytes.HasPrefix(pkt.Path[:], []byte(pathSrc)) { return false } - if bytes.Compare(bufR.Bytes(), []byte(data)) != 0 { + if !bytes.Equal(bufR.Bytes(), []byte(data)) { return false } } else { if pkt.Type != PktTypeTrns { return false } - if bytes.Compare(pkt.Path[:MTHSize], vias[i+1][:]) != 0 { + if !bytes.Equal(pkt.Path[:MTHSize], vias[i+1][:]) { return false } } diff --git a/src/ucspi.go b/src/ucspi.go index 93785de4d4bbdde01740a829918f9532d39d6fa2250a6a1cf14fbd24247b9994..e9f1f56a7cac019c5f0a85016e32bfff671e2171bf670d0ba932a4b69da1b9a1 100644 --- a/src/ucspi.go +++ b/src/ucspi.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/uilive/writer.go b/src/uilive/writer.go index 1ea096eb8fda7ccd98c9e153c99bac8a8a8056f6b58fdb329fec2ac0101d6fb2..c8e77473a0de3f211337960124d564f84da97980453dc6738fba965680b6ed3c 100644 --- a/src/uilive/writer.go +++ b/src/uilive/writer.go @@ -103,7 +103,7 @@ // Start starts the listener in a non-blocking manner func (w *Writer) Start() { w.ticker = time.NewTicker(w.RefreshInterval) - w.tdone = make(chan struct{}, 0) + w.tdone = make(chan struct{}) w.Out.Write([]byte("\n")) go w.Listen() } diff --git a/src/via.go b/src/via.go index 16808d8fd240c561b864417c290d12a5b92933a4b2c1e47c4218d92aea04a85d..6aad944fc506fafb50afdbceb661a902bc6adde733546f8ffd62ec7a804ec1a5 100644 --- a/src/via.go +++ b/src/via.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/yggdrasil/tcpip.go b/src/yggdrasil/tcpip.go index 31f1745425f1f768dfc0958fe793e9c1cc9f12cc41138fd8e915141d394f348c..7b9283933b705d22d496dc0e9c35fdacb2bab3a2eb45e14ad580179c242f243e 100644 --- a/src/yggdrasil/tcpip.go +++ b/src/yggdrasil/tcpip.go @@ -3,7 +3,7 @@ // +build !noyggdrasil /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 @@ -68,7 +68,7 @@ func (*TCPIPEndpoint) LinkAddress() tcpip.LinkAddress { return "" } func (*TCPIPEndpoint) Wait() {} -func (e *TCPIPEndpoint) WritePacket(pkt *stack.PacketBuffer) tcpip.Error { +func (e *TCPIPEndpoint) WritePacket(pkt stack.PacketBufferPtr) tcpip.Error { v := pkt.ToView() n, err := v.Read(e.writeBuf) if err != nil { @@ -99,13 +99,9 @@ } return len(pbs.AsSlice()), nil } -func (e *TCPIPEndpoint) WriteRawPacket(*stack.PacketBuffer) tcpip.Error { - panic("not implemented") -} - func (*TCPIPEndpoint) ARPHardwareType() header.ARPHardwareType { return header.ARPHardwareNone } -func (e *TCPIPEndpoint) AddHeader(*stack.PacketBuffer) {} +func (e *TCPIPEndpoint) AddHeader(stack.PacketBufferPtr) {} func convertToFullAddr(ip net.IP, port int) (tcpip.FullAddress, tcpip.NetworkProtocolNumber) { return tcpip.FullAddress{ diff --git a/src/yggdrasil/yggdrasil.go b/src/yggdrasil/yggdrasil.go index 87946d6ffd28db0adcf86ad8c401b37a400e9efa98e01537ad1865c82f359e31..fb17c074b6b946b31d58a07d296e26aa428ecb6ca25c2719dc1a181722d66433 100644 --- a/src/yggdrasil/yggdrasil.go +++ b/src/yggdrasil/yggdrasil.go @@ -3,7 +3,7 @@ // +build !noyggdrasil /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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 diff --git a/src/yggdrasil/yggdrasil_dummy.go b/src/yggdrasil/yggdrasil_dummy.go index 9ddffa8d145d7704877d9311b4d252c2271a615ef2f4420bd2569ea389bf03c7..a42e5deba5bfd4d40b7b42786db8e91eb6e1d139f9b931c9067c71c03980c17a 100644 --- a/src/yggdrasil/yggdrasil_dummy.go +++ b/src/yggdrasil/yggdrasil_dummy.go @@ -3,7 +3,7 @@ // +build noyggdrasil /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2022 Sergey Matveev +Copyright (C) 2016-2023 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