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