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