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