]> Cypherpunks.ru repositories - nncp.git/blob - doc/news.texi
Update dependencies and use newer Yggdrasil API
[nncp.git] / doc / news.texi
1 @node News
2 @cindex news
3 @unnumbered News
4
5 See also this page @ref{Новости, on russian}.
6
7 @node Release 8_8_2
8 @section Release 8.8.2
9 @itemize
10
11 @item
12 Updated Yggdrasil library, with several other ones.
13
14 @end itemize
15
16 @node Release 8_8_1
17 @section Release 8.8.1
18 @itemize
19
20 @item
21 Fixed @command{nncp-daemon} failing with unauthenticated connection and
22 enabled @option{-autotoss}.
23
24 @item
25 Updated dependencies.
26
27 @end itemize
28
29 @node Release 8_8_0
30 @section Release 8.8.0
31 @itemize
32
33 @item
34 Fixed buildability under Go 1.19.
35
36 @item
37 Minimal required Go version is 1.17.
38
39 @item
40 Updated dependencies.
41
42 @end itemize
43
44 @node Release 8_7_2
45 @section Release 8.7.2
46 @itemize
47
48 @item
49 More intuitive, clear and slightly more flexible behaviour of @command{nncp-rm}.
50
51 @item
52 @command{nncp-rm} also removes corresponding @file{hdr/} file for each
53 removed packet.
54
55 @end itemize
56
57 @node Release 8_7_1
58 @section Release 8.7.1
59 @itemize
60
61 @item
62 @command{nncp-xfer} now correctly checks for @file{seen/} files for
63 inbound packets.
64
65 @end itemize
66
67 @node Release 8_7_0
68 @section Release 8.7.0
69 @itemize
70
71 @item
72 @command{nncp-ack} does not acknowledge ACK-packets, preventing an
73 endless loop of ACKs.
74
75 @item
76 @command{nncp-ack} previously did not remove corresponding @file{hdr/} files.
77
78 @item
79 @command{nncp-rm} now takes list of packet from @code{stdin} when
80 @option{-pkt} option is used.
81
82 @item
83 @command{nncp-ack} now generates list of ACK packets it created, that
84 could be used as an input to @command{nncp-rm} to remove outbound ACK
85 packets.
86
87 @end itemize
88
89 @node Release 8_6_0
90 @section Release 8.6.0
91 @itemize
92
93 @item
94 @command{nncp-xfer} checks if locally copied packet's checksum differs
95 from the source's one.
96
97 @item
98 @command{nncp-call} has bad return code if its queues contain unfinished jobs.
99
100 @item
101 @command{nncp-ack} command appeared, that sends explicit packet receipt
102 acknowledgement (ACK packet). That acknowledgement deletes referenced
103 packet from the outbound spool.
104
105 @item
106 Ability to turn @code{fsync} operation off using @env{$NNCPNOSYNC=1}
107 environment variable.
108
109 @item
110 Added various indices in documentation, that should help searching in it.
111
112 @end itemize
113
114 @node Release 8_5_0
115 @section Release 8.5.0
116 @itemize
117
118 @item
119 Fixed @command{nncp-bundle} workability.
120
121 @item
122 Mistakenly @option{-mcd-wait} option was enabled by default in
123 @command{nncp-call}.
124
125 @item
126 Ability to override internal default timeout for online protocol through
127 @env{$NNCPDEADLINE} environment variable. Can be useful for very high
128 delay links.
129
130 @item
131 NNCP builds on OpenBSD.
132
133 @end itemize
134
135 @node Release 8_4_0
136 @section Release 8.4.0
137 @itemize
138
139 @item
140 Multicast related interface names (@code{mcd-listen} and @code{mcd-send}
141 configuration options) are now regular expressions. By default
142 @command{nncp-cfgnew} uncomments them now with @code{.*} interface name.
143
144 @item
145 @command{nncp-call} command has @option{-mcd-wait} option to wait for
146 multicast packet about node's address.
147
148 @item
149 @command{nncp-file} command skips everything that is neither regular
150 file nor directory during pax-archive creation.
151
152 @end itemize
153
154 @node Release 8_3_0
155 @section Release 8.3.0
156 @itemize
157
158 @item
159 Fixed building issues on 32-bit systems.
160
161 @end itemize
162
163 @node Release 8_2_0
164 @section Release 8.2.0
165 @itemize
166
167 @item
168 Yggdrasil uses pure-Go IPv6+TCP network stack, instead of naked μTP
169 transport protocol, making it able to work as an ordinary TCP server
170 inside overlay network.
171
172 @item
173 Yggdrasil's @code{prv;bind1,bind2;pub@dots{}}-like configuration strings are
174 replaced with URL-like ones (@code{yggdrasils://PRV?bind=BIND1&bind=BIND2&pub=PUB}).
175
176 @item
177 Ability to pass multicast-related parameters to Yggdrasil configuration.
178
179 @item
180 @command{nncp-daemon} is able to listen on both TCP and Yggdrasil-driven
181 sockets simultaneously.
182
183 @item
184 @command{nncp-daemon}'s listening on peering endpoint socket is optional
185 -- you can be reached through the peers.
186
187 @end itemize
188
189 @node Release 8_1_0
190 @section Release 8.1.0
191 @itemize
192
193 @item
194 @command{nncp-cfgdir} does not require @code{self} section existence in
195 configuration file.
196
197 @item
198 Ability to act as Yggdrasil network client, using online protocol on top of it.
199
200 @end itemize
201
202 @node Release 8_0_2
203 @section Release 8.0.2
204 @itemize
205
206 @item
207 Fixed sending ability to areas.
208
209 @end itemize
210
211 @node Release 8_0_1
212 @section Release 8.0.1
213 @itemize
214
215 @item
216 Fixed incorrect @code{freq.chunked} value calculation. If it was missed,
217 then chunked transfer mode was forcefully turned on anyway.
218
219 @item
220 Fixed incorrect full file's size calculation in @file{.nncp.meta}.
221
222 @end itemize
223
224 @node Release 8_0_0
225 @section Release 8.0.0
226 @itemize
227
228 @item
229 @strong{Incompatible} encrypted packet format change: payload and pad
230 sizes are sent in-bound in the encrypted stream. That gives ability to
231 streamingly create encrypted packets, without knowing sizes in advance,
232 without creating temporary file or buffer data in memory.
233
234 @item
235 Proper encrypted packet padding verification is done now. This is not
236 critical issue, but previously neither padding value, nor its size were
237 authenticated, giving ability to iteratively strip trailing bytes and
238 determine payload's size by observing the reaction of the encrypted
239 packet processing.
240
241 @item
242 @command{nncp-exec} loses its @option{-use-tmp} option, because of
243 streaming-compatible encrypted packets format.
244
245 @item
246 @command{nncp-file} and @command{nncp-exec} commands have
247 @option{-maxsize} option, limiting maximal resulting encrypted packet's
248 maximal size (returning error if it is exceeded). Could be useful,
249 because no payload size could be known in advance.
250
251 @end itemize
252
253 @node Release 7_7_0
254 @section Release 7.7.0
255 @itemize
256
257 @item
258 Experimental @code{kqueue} and @code{inotify} based notifications
259 support about spool directory changes, for reducing their often reading
260 overhead.
261
262 @item
263 @file{.seen} and @file{.hdr} files moved to @file{seen/} and @file{hdr/}
264 subdirectories, for faster scanning of spool directories.
265 Current files migration required:
266
267 @example
268 $ find $NNCPSPOOL -type f -name "*.hdr" -exec rm @{@} +
269
270 $ find $NNCPSPOOL -type d -name rx | while read rx ; do
271     cd $rx
272     mkdir -p seen
273     find . -type f -name "*.seen" | while read fn ; do
274         mv $fn seen/$@{fn%.seen@}
275     done
276 done
277
278 $ find $NNCPSPOOL -type d -name area | while read area ; do
279     find $area -type f -name "*.seen" | while read fn ; do
280         mv $fn $@{fn%.seen@}
281     done
282 done
283 @end example
284
285 @end itemize
286
287 @node Release 7_6_0
288 @section Release 7.6.0
289 @itemize
290
291 @item
292 Logging may be done to specified opened file descriptor
293 (@env{$NNCPLOG=FD:5} for example).
294 That is friendly to use under @command{daemontools}.
295
296 @item
297 Added additional checks of public keys existence in configuration file,
298 preventing some commands from failing.
299
300 @end itemize
301
302 @node Release 7_5_1
303 @section Release 7.5.1
304 @itemize
305
306 @item
307 NNCP builds on NetBSD.
308
309 @end itemize
310
311 @node Release 7_5_0
312 @section Release 7.5.0
313 @itemize
314
315 @item
316 @command{nncp-daemon} is compatible with UCSPI-TCP interface, so log
317 will contain remote side's address (when running under appropriate
318 utility). @option{-ucspi} option should be used instead of @option{-inetd}.
319
320 @item
321 @command{nncp-call} can be UCSPI-TCP client, using @option{-ucspi} option.
322
323 @item
324 Do not exit if some of MCD network interfaces can not be listened --
325 only warn about that.
326
327 @end itemize
328
329 @node Release 7_4_0
330 @section Release 7.4.0
331 @itemize
332
333 @item
334 Fixed simultaneous @command{nncp-daemon} and @command{nncp-caller} MCD work.
335
336 @end itemize
337
338 @node Release 7_3_2
339 @section Release 7.3.2
340 @itemize
341
342 @item
343 @command{hjson-cli} utility builds in vendor-mode now.
344
345 @end itemize
346
347 @node Release 7_3_1
348 @section Release 7.3.1
349 @itemize
350
351 @item
352 Fixed possibly left opened file descriptor in online commands.
353
354 @item
355 Severely decreased memory usage of MTH hashing.
356
357 @end itemize
358
359 @node Release 7_3_0
360 @section Release 7.3.0
361 @itemize
362
363 @item
364 Fixed some workability problems on 32-bit systems with big files.
365
366 @item
367 Ability to use directory with a bunch of files as a configuration.
368 @command{nncp-cfgdir} command appeared.
369
370 @end itemize
371
372 @node Release 7_2_1
373 @section Release 7.2.1
374 @itemize
375
376 @item
377 Small optimizations in online commands.
378
379 @end itemize
380
381 @node Release 7_2_0
382 @section Release 7.2.0
383 @itemize
384
385 @item
386 @command{nncp-trns} command appeared for manual transition packets creation.
387
388 @item
389 If destination node of transitional packet has non empty @option{via}
390 route, then do not ignore, but use it.
391
392 @item
393 Do not relay multicast packet to area message's originator, that
394 obviously has seen its own packet.
395
396 @item
397 Much less memory usage during MTH hashing when offset is zero: when
398 packet is not resumed, but for example checked with @command{nncp-check}
399 command.
400
401 @end itemize
402
403 @node Release 7_1_1
404 @section Release 7.1.1
405 @itemize
406
407 @item
408 Fixed failing directories @code{fsync} after @file{.seen} file creation.
409
410 @end itemize
411
412 @node Release 7_1_0
413 @section Release 7.1.0
414 @itemize
415
416 @item
417 Multicasting areas feature appeared. Implemented merely by an additional
418 plain packet type with @command{nncp-toss}, @command{nncp-file} and
419 @command{nncp-exec} commands modification.
420
421 @item
422 Fixed workability of @command{nncp-file} and @command{nncp-exec}
423 commands, that use temporary file (@code{stdin} and @option{-use-tmp}).
424
425 @item
426 Fixed disappearing bad return code in @command{nncp-exec} command.
427
428 @item
429 Fixed invalid @file{.hdr} generation when transitional packets are used.
430
431 @item
432 @option{-all} option appeared in @command{nncp-rm} command, applying to
433 all the nodes at once.
434
435 @item
436 @option{-cycle} option appeared in @command{nncp-check} command, looping
437 the check in infinite cycle.
438
439 @item
440 @command{nncp-rm} command can take node alias name.
441
442 @item
443 @command{nncp-pkt} can parse @file{.hdr} files.
444
445 @end itemize
446
447 @node Release 7_0_0
448 @section Release 7.0.0
449 @itemize
450
451 @item
452 Minimal required Go version is 1.13.
453
454 @item
455 Merkle Tree-based Hashing with BLAKE3 (MTH) is used instead of BLAKE2b.
456 Because of that, there are backward @strong{incompatible} changes of
457 encrypted files (everything laying in the spool directory) and
458 @file{.meta} files of chunked transfer.
459
460 Current implementation is far from being optimal: it lacks
461 parallelizable calculations and has higher memory consumption: nearly
462 512 KiB for each 1 GiB of file's data. Future performance and memory
463 size optimizations should not lead to packet's format change. But it is
464 still several times faster than BLAKE2b.
465
466 @item
467 Resumed online downloads, because of MTH, require reading only of the
468 preceding part of file, not the whole one as was before.
469
470 @item
471 @command{nncp-hash} utility appeared for calculating file's MTH hash.
472
473 @item
474 BLAKE2 KDF and XOF functions are replaced with BLAKE3 in encrypted
475 packets. Lowering number of used primitives. Also, its encrypted
476 packet's header is used as an associated data during encryption.
477
478 @item
479 MultiCast Discovery uses
480 @verb{|ff02::4e4e:4350|} address instead of @verb{|ff02::1|}.
481
482 @item
483 @command{nncp-cfgenc} mistakenly asked passphrase three times during encryption.
484
485 @item
486 @command{nncp-stat} reports about partly downloaded packets.
487
488 @item
489 Updated dependencies.
490
491 @end itemize
492
493 @node Release 6_6_0
494 @section Release 6.6.0
495 @itemize
496
497 @item
498 @command{nncp-daemon}, @command{nncp-call} and @command{nncp-caller}
499 commands wait for all background checksummers completion after
500 connection is finished.
501
502 @item
503 Added possibility of address determining through multicast announcement
504 in local area network, so called MCD (MultiCast Discovery).
505
506 @end itemize
507
508 @node Release 6_5_0
509 @section Release 6.5.0
510 @itemize
511
512 @item
513 Fixed segfault in @command{nncp-daemon} when SP handshake did not succeed.
514
515 @item
516 Fixed possible bad return code ignoring in automatic tosser.
517
518 @item
519 Fixed race during file descriptors closing when online protocol call is
520 finished, that could lead to write error of received packet fragment.
521
522 @item
523 Kill all packet transmission progress bars in @command{nncp-daemon},
524 @command{nncp-call} and @command{nncp-caller} when call is finished.
525
526 @end itemize
527
528 @node Release 6_4_0
529 @section Release 6.4.0
530 @itemize
531
532 @item
533 Fixed possible race in online protocol, that lead to panic.
534
535 @end itemize
536
537 @node Release 6_3_0
538 @section Release 6.3.0
539 @itemize
540
541 @item
542 Fixed possible panic while showing progress during online protocol.
543
544 @end itemize
545
546 @node Release 6_2_1
547 @section Release 6.2.1
548 @itemize
549
550 @item
551 Three places in logs contained excess @code{%s}.
552
553 @end itemize
554
555 @node Release 6_2_0
556 @section Release 6.2.0
557 @itemize
558
559 @item
560 Returned @command{nncp-caller}'s @option{-autotoss*} options workability.
561
562 @item
563 Yet another logging refactoring and simplification.
564 Should be no visible differences to the end user.
565
566 @end itemize
567
568 @node Release 6_1_0
569 @section Release 6.1.0
570 @itemize
571
572 @item
573 Optimization: most commands do not keep opened file descriptors now.
574 Previously you can exceed maximal number of opened files if you have got
575 many packets in the spool directory.
576
577 @item
578 Optimization: do not close file descriptor of the file we download
579 online. Previously each chunk lead to expensive open/close calls.
580
581 @item
582 Online downloaded files are saved with @file{.nock} (non-checksummed)
583 suffix, waiting either for @command{nncp-check}, or online daemons to
584 perform integrity check.
585
586 @item
587 Optimization: files, that are not resumed, are checksummed immediately
588 during the online download, skipping @file{.nock}-intermediate step.
589
590 @item
591 Ability to store encrypted packet's header in @file{.hdr} file, close to
592 the packet itself. That can greatly increase performance of packets
593 listing on filesystems with big block's size.
594
595 @end itemize
596
597 @node Release 6_0_0
598 @section Release 6.0.0
599 @itemize
600
601 @item
602 Log uses human readable and easy machine parseable
603 @url{https://www.gnu.org/software/recutils/, recfile} format for the
604 records, instead of structured RFC 3339 lines. Old logs are not readable
605 by @command{nncp-log} anymore.
606
607 @item
608 @option{-autotoss*} option workability with @command{nncp-daemon}'s
609 @option{-inetd} mode.
610
611 @item
612 Call's @option{when-tx-exists} allows to make a call only when outbound
613 packets exists. Combined with seconds-aware cron expression that can be
614 used as some kind of auto dialler.
615
616 @item
617 @command{nncp-cronexpr} command allows you to check validity and
618 expectations of specified cron expression.
619
620 @end itemize
621
622 @node Release 5_6_0
623 @section Release 5.6.0
624 @itemize
625
626 @item
627 @option{-autotoss*} option runs tosser not after the call, but every
628 second while it is active.
629
630 @item
631 @option{autotoss}, @option{autotoss-doseen},
632 @option{autotoss-nofile}, @option{autotoss-nofreq},
633 @option{autotoss-noexec}, @option{autotoss-notrns} options available in
634 @option{calls} configuration section. You can configure per-call
635 automatic tosser options.
636
637 @item
638 Use vendoring, instead of @env{$GOPATH} overriding during tarball
639 installation, because current minimal Go's version is 1.12 and it
640 supports modules.
641
642 @end itemize
643
644 @node Release 5_5_1
645 @section Release 5.5.1
646 @itemize
647
648 @item
649 Respect for @env{$BINDIR}, @env{$INFODIR} and @env{$DOCDIR} environment
650 variables in @file{config} during installation.
651
652 @end itemize
653
654 @node Release 5_5_0
655 @section Release 5.5.0
656 @itemize
657
658 @item
659 Bugfixes in @command{nncp-call(er)}/@command{nncp-daemon},
660 @command{nncp-bundle} and @command{nncp-stat}.
661
662 @item
663 @command{nncp-rm} has @option{-dryrun} and @option{-older} options now.
664
665 @item
666 @command{nncp-exec} has @option{-use-tmp} and @option{-nocompress}
667 options now. Uncompressed packets are not compatible with previous NNCP
668 versions.
669
670 @item
671 @command{nncp-call}, @command{nncp-caller} and @command{nncp-daemon} commands
672 have @option{-autotoss*} options for running tosser after call is ended.
673
674 @item
675 Updated dependencies. Minimal required Go version is 1.12.
676
677 @end itemize
678
679 @node Release 5_4_1
680 @section Release 5.4.1
681 @itemize
682
683 @item
684 Fixed @code{SENDMAIL} variable usage during the build.
685
686 @end itemize
687
688 @node Release 5_4_0
689 @section Release 5.4.0
690 @itemize
691
692 @item
693 Updated dependencies.
694
695 @item
696 Build system is moved from Makefiles to @url{http://cr.yp.to/redo.html, redo}.
697 This should not influence package maintainers, because minimal @command{redo}
698 implementation is included in tarball.
699
700 @end itemize
701
702 @node Release 5_3_3
703 @section Release 5.3.3
704 @itemize
705
706 @item
707 More various error checks.
708
709 @item
710 Updated dependencies.
711
712 @end itemize
713
714 @node Release 5_3_2
715 @section Release 5.3.2
716 @itemize
717
718 @item
719 Fixed incorrect logic of @option{onlinedeadline} timeout, where
720 connection won't take into account incoming packets events and will
721 forcefully disconnect.
722
723 @end itemize
724
725 @node Release 5_3_1
726 @section Release 5.3.1
727 @itemize
728
729 @item
730 Fixed @option{onlinedeadline} workability with call addresses that use
731 external commands (@verb{#"|somecmd"#}).
732
733 @item
734 @command{nncp-stat} has @option{-pkt} option displaying information
735 about each packet in the spool.
736
737 @end itemize
738
739 @node Release 5_3_0
740 @section Release 5.3.0
741 @itemize
742
743 @item
744 Progress messages contain prefix, describing the running action.
745
746 @item
747 Fixed not occurring handshake messages padding.
748
749 @item
750 Finish all SP protocol related goroutines, less memory leak.
751
752 @item
753 SP protocol generates less socket write calls, thus generating less TCP
754 packets.
755
756 @item
757 Check @option{onlinedeadline} and @option{maxonlinetime} options every
758 second, independently from socket reads (up to 10 seconds).
759
760 @item
761 Once per minute, if no other traffic exists, PING packets are sent in
762 SP-connection. That allows faster determining of connection unworkability.
763
764 @item
765 @command{nncp-toss} uses lock-file to prevent simultaneous tossing.
766
767 @end itemize
768
769 @node Release 5_2_1
770 @section Release 5.2.1
771 @itemize
772
773 @item
774 Fixed SP protocol error handling, sometimes causing program panic.
775
776 @end itemize
777
778 @node Release 5_2_0
779 @section Release 5.2.0
780 @itemize
781
782 @item
783 Most commands by default show oneline operations progress.
784 @option{-progress}, @option{-noprogress} command line options,
785 @option{noprogress} configuration file option appeared.
786
787 @item
788 Fixed incorrect @command{nncp-check} command return code, that returned
789 bad code when everything is good.
790
791 @item
792 Free disk space check during @command{nncp-bundle -rx} call.
793
794 @end itemize
795
796 @node Release 5_1_2
797 @section Release 5.1.2
798 @itemize
799
800 @item
801 @strong{Critical} vulnerability: remote peers authentication could lead
802 to incorrect identification of remote side, allowing foreign encrypted
803 packets downloading.
804
805 @item
806 Bugfix: private and public Noise keys were swapped in newly created
807 configuration files, that lead to inability to authenticate online peers.
808
809 @item
810 Explicit directories @code{fsync}-ing for guaranteed files renaming.
811
812 @end itemize
813
814 @node Release 5_1_1
815 @section Release 5.1.1
816 @itemize
817
818 @item
819 Fixed workability of @command{nncp-file} with @option{-chunked 0} option.
820
821 @end itemize
822
823 @node Release 5_1_0
824 @section Release 5.1.0
825 @itemize
826
827 @item
828 @command{nncp-file} can send directories, automatically creating pax
829 archive on the fly.
830
831 @item
832 Free disk space is checked during outbound packets creation.
833
834 @item
835 @option{freq}, @option{freqminsize}, @option{freqchunked} configuration
836 file options replaced with the structure:
837 @option{freq: @{path: @dots{}, minsize: @dots{}, chunked: @dots{}@}}.
838
839 @item
840 Added @option{freq.maxsize} configuration file option, forbidding of
841 freq sending larger than specified size.
842
843 @item
844 Ability to notify about successfully executed commands (exec) with
845 @option{notify.exec} configuration file option.
846
847 @end itemize
848
849 @node Release 5_0_0
850 @section Release 5.0.0
851 @itemize
852
853 @item
854 @strong{Incompatible} configuration file format change: YAML is
855 replaced with Hjson, due to its simplicity, without noticeable lack
856 of either functionality or convenience.
857
858 @item
859 @strong{Incompatible} plain packet format changes. Older versions are
860 not supported. @code{zlib} compression is replaced with
861 @code{Zstandard}, due to its speed and efficiency, despite library
862 version is not mature enough.
863
864 @item
865 Ability to call remote nodes via pipe call of external command, not only
866 through TCP.
867
868 @item
869 @command{nncp-cfgnew} generates configuration file with many
870 comments. @option{-nocomments} option can be used for an old
871 behaviour.
872
873 @item
874 Duplicate filenames have @file{.CTR} suffix, instead of @file{CTR}, to
875 avoid possible collisions with @file{.nncp.chunkCTR}.
876
877 @item
878 Ability to override process umask through configuration file option.
879
880 @item
881 Files and directories are created with 666/777 permissions by default,
882 allowing control with @command{umask}.
883
884 @item
885 Updated dependencies.
886
887 @item
888 Full usage of go modules for dependencies management
889 (@code{go.cypherpunks.ru/nncp/v5} namespace is used).
890
891 @item
892 Forbid any later GNU GPL version autousage
893 (project's licence now is GNU GPLv3-only).
894
895 @end itemize
896
897 @node Release 4_1
898 @section Release 4.1
899 @itemize
900 @item Workability on GNU/Linux systems and Go 1.10 is fixed.
901 @end itemize
902
903 @node Release 4_0
904 @section Release 4.0
905 @itemize
906
907 @item
908 @strong{Incompatible} encrypted and eblob packet format change: AEAD
909 encryption mode with 128 KiB blocks is used now, because previously
910 @command{nncp-toss} did not verify encrypted packet's MAC before feeding
911 decrypted data to external command. Older versions are not supported.
912
913 @item
914 Available free space checking before copying in @command{nncp-xfer},
915 @command{nncp-daemon}, @command{nncp-call(er)}.
916
917 @item
918 @command{nncp-call} has ability only to list packets on remote node,
919 without their transmission.
920
921 @item
922 @command{nncp-call} has ability to transfer only specified packets.
923
924 @item
925 Workability of @option{xxrate} preference in @option{calls}
926 configuration file section.
927
928 @item
929 Dependant libraries are updated.
930
931 @item
932 Minor bugfixes.
933
934 @item
935 Begin using of @code{go.mod} subsystem.
936
937 @end itemize
938
939 @node Release 3_4
940 @section Release 3.4
941 @itemize
942 @item @command{nncp-daemon} can be run as @command{inetd}-service.
943 @end itemize
944
945 @node Release 3_3
946 @section Release 3.3
947 @itemize
948
949 @item
950 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller} check
951 if @file{.seen} exists and treat it like file was already downloaded.
952 Possibly it was transferred out-of-bound and remote side needs to be
953 notifier about that.
954
955 @item
956 If higher priority packet is spooled, then @command{nncp-daemon} will
957 queue its sending first, interrupting lower priority transmissions.
958
959 @item
960 Simple packet rate limiter added to online-related tools
961 (@command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}).
962
963 @item
964 Ability to specify niceness with symbolic notation:
965 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, etc.
966
967 @item
968 Changed default niceness levels:
969 for @command{nncp-exec} from 64 to 96,
970 for @command{nncp-freq} from 64 to 160,
971 for @command{nncp-file} from 196 to 224.
972
973 @end itemize
974
975 @node Release 3_2
976 @section Release 3.2
977 @itemize
978 @item
979 @strong{Incompatible} @emph{bundle} archive format changes and
980 @command{nncp-bundle} workability with Go 1.10+. Bundles must be
981 valid tar archives, but Go 1.9 made them invalid because of long paths
982 inside. NNCP accidentally was dependant on that bug. Explicit adding of
983 @file{NNCP/} directory in archive restores workability with valid tar
984 archives.
985 @end itemize
986
987 @node Release 3_1
988 @section Release 3.1
989 @itemize
990 @item
991 Ability to disable relaying at all using @verb{|-via -|} command line option.
992 @end itemize
993
994 @node Release 3_0
995 @section Release 3.0
996 @itemize
997
998 @item
999 @strong{Incompatible} plain packet format changes. Older versions are
1000 not supported.
1001
1002 @item
1003 Ability to queue remote command execution, by configuring @option{exec}
1004 option in configuration file and using @command{nncp-exec} command:
1005     @itemize
1006     @item
1007     @command{nncp-mail} command is replaced with more flexible
1008     @command{nncp-exec}. Instead of @verb{|nncp-mail NODE RECIPIENT|}
1009     you must use @verb{|nncp-exec NODE sendmail RECIPIENT|}.
1010     @item
1011     @option{sendmail} configuration file option is replaced with
1012     @option{exec}. @code{sendmail: [@dots{}]} must be replaced with
1013     @code{exec: sendmail: [@dots{}]}.
1014     @end itemize
1015
1016 @item
1017 Ability to override @option{via} configuration option for destination
1018 node via @option{-via} command line option for following commands:
1019 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
1020
1021 @item
1022 Chunked files, having size less than specified chunk size, will be sent
1023 as an ordinary single file.
1024
1025 @item
1026 Exec commands are invoked with additional @env{$NNCP_NICE} and
1027 @env{$NNCP_SELF} environment variables.
1028
1029 @item
1030 Files, that are sent as a reply to freq, have niceness level taken from
1031 the freq packet. You can set desired niceness during @command{nncp-freq}
1032 invocation using @option{-replynice} option.
1033
1034 @item
1035 @command{nncp-toss} command can ignore specified packet types during
1036 processing: @option{-nofile}, @option{-nofreq}, @option{-noexec},
1037 @option{-notrns}.
1038
1039 @item
1040 @command{nncp-file} command uses
1041 @option{FreqMinSize}/@option{FreqChunked} configuration file options
1042 for @option{-minsize}/@option{-chunked} by default. You can turn this
1043 off by specifying zero value.
1044
1045 @end itemize
1046
1047 @node Release 2_0
1048 @section Release 2.0
1049 @itemize
1050
1051 @item
1052 @strong{Incompatible} encrypted/eblob packet format changes. Older
1053 versions are not supported.
1054
1055 @item
1056 Twofish encryption algorithm is replaced with ChaCha20. It is much more
1057 faster. One cryptographic primitive less.
1058
1059 @item
1060 HKDF-BLAKE2b-256 KDF algorithm is replaced with BLAKE2Xb XOF. Yet
1061 another cryptographic primitive less (assuming that BLAKE2X is nearly
1062 identical to BLAKE2).
1063
1064 @end itemize
1065
1066 @node Release 1_0
1067 @section Release 1.0
1068 @itemize
1069
1070 @item
1071 @strong{Incompatible} encrypted packet format changes. Older versions
1072 are not supported.
1073
1074 @item
1075 @command{nncp-bundle} command can either create stream of encrypted
1076 packets, or digest it. It is useful when dealing with
1077 @code{stdin}/@code{stdout} based transmission methods (like writing to
1078 CD-ROM without intermediate prepared ISO image and working with tape
1079 drives).
1080
1081 @item
1082 @command{nncp-toss} is able to create @file{.seen} files preventing
1083 duplicate packets receiving.
1084
1085 @item
1086 Single background checksum verifier worker is allowed in
1087 @command{nncp-call}. This is helpful when thousands of small inbound
1088 packets could create many goroutines.
1089
1090 @item
1091 Ability to override path to spool directory and logfile through either
1092 command line argument, or environment variable.
1093
1094 @item
1095 @command{nncp-rm} is able to delete outbound/inbound, @file{.seen},
1096 @file{.part}, @file{.lock} and temporary files.
1097
1098 @end itemize
1099
1100 @node Release 0_12
1101 @section Release 0.12
1102 @itemize
1103 @item Sendmail command is called with @env{$NNCP_SENDER} environment variable.
1104 @end itemize
1105
1106 @node Release 0_11
1107 @section Release 0.11
1108 @itemize
1109 @item @command{nncp-stat}'s command output is sorted by node name.
1110 @end itemize
1111
1112 @node Release 0_10
1113 @section Release 0.10
1114 @itemize
1115 @item
1116 @command{nncp-freq}'s @file{DST} argument is optional now. Last
1117 @file{SRC} path's element will be used by default.
1118 @end itemize
1119
1120 @node Release 0_9
1121 @section Release 0.9
1122 @itemize
1123 @item
1124 Fix @option{-rx}/@option{-tx} arguments processing in
1125 @command{nncp-call} command. They were ignored.
1126 @end itemize
1127
1128 @node Release 0_8
1129 @section Release 0.8
1130 @itemize
1131 @item
1132 Little bugfix in @command{nncp-file} command, where @option{-minsize}
1133 option for unchunked transfer was not in KiBs, but in bytes.
1134 @end itemize
1135
1136 @node Release 0_7
1137 @section Release 0.7
1138 @itemize
1139
1140 @item
1141 Ability to feed @command{nncp-file} from @code{stdin}, that uses an
1142 encrypted temporary file for that.
1143
1144 @item
1145 Chunked files transmission appeared with corresponding
1146 @command{nncp-reass} command and @option{freqchunked} configuration file
1147 entry. Useful for transferring big files over small storage devices.
1148
1149 @item
1150 @option{freqminsize} configuration file option, analogue to
1151 @option{-minsize} one.
1152
1153 @item
1154 @command{nncp-xfer}'s @option{-force} option is renamed to
1155 @option{-mkdir} for clarity.
1156
1157 @item
1158 @option{-minsize} option is specified in KiBs, not bytes, for
1159 convenience.
1160
1161 @item
1162 @command{nncp-newcfg} command is renamed to @command{nncp-cfgnew},
1163 and @command{nncp-mincfg} to @command{nncp-cfgmin} -- now they have
1164 common prefix and are grouped together for convenience.
1165
1166 @item
1167 @command{nncp-cfgenc} command appeared, allowing configuration file
1168 encryption/decryption, for keeping it safe without any either OpenPGP or
1169 similar tools usage.
1170
1171 @item
1172 Cryptographic libraries (dependencies) are updated.
1173
1174 @end itemize
1175
1176 @node Release 0_6
1177 @section Release 0.6
1178 @itemize
1179 @item Small @command{nncp-rm} command appeared.
1180 @item Cryptographic libraries (dependencies) are updated.
1181 @end itemize
1182
1183 @node Release 0_5
1184 @section Release 0.5
1185 @itemize
1186 @item
1187 Trivial small fix in default niceness level of @command{nncp-file}
1188 and @command{nncp-freq} commands.
1189 @end itemize
1190
1191 @node Release 0_4
1192 @section Release 0.4
1193 @itemize
1194
1195 @item
1196 Small fix in @command{nncp-call}, @command{nncp-caller},
1197 @command{nncp-daemon}: they can segmentation fail sometimes (no data is
1198 lost).
1199
1200 @item
1201 @command{nncp-newnode} renamed to @command{nncp-newcfg} -- it is shorter
1202 and more convenient to use.
1203
1204 @item
1205 @command{nncp-mincfg} command appeared: helper allowing to create
1206 minimalistic stripped down configuration file without private keys, that
1207 is useful during @command{nncp-xfer} usage.
1208
1209 @end itemize
1210
1211 @node Release 0_3
1212 @section Release 0.3
1213 @itemize
1214 @item Fixed compatibility with Go 1.6.
1215 @end itemize
1216
1217 @node Release 0_2
1218 @section Release 0.2
1219 @itemize
1220
1221 @item
1222 @strong{Incompatible} packet's format change (magic number is changed
1223 too): size field is encrypted and is not send in plaintext anymore.
1224
1225 @item
1226 @option{-minsize} option gives ability to automatically pad outgoing
1227 packets to specified minimal size.
1228
1229 @item
1230 @command{nncp-daemon} and @command{nncp-call}/@command{nncp-caller}
1231 always check new @emph{tx} packets appearance in the background while
1232 connected. Remote side is immediately notified.
1233
1234 @item
1235 @option{-onlinedeadline} option gives ability to configure timeout of
1236 inactivity of online connection, when it could be disconnected. It could
1237 be used to keep connection alive for a long time.
1238
1239 @item
1240 @option{-maxonlinetime} option gives ability to set maximal allowable
1241 online connection aliveness time.
1242
1243 @item
1244 @command{nncp-caller} command appeared: cron-ed TCP daemon caller.
1245
1246 @item
1247 @command{nncp-pkt} command can decompress the data.
1248
1249 @end itemize