@node Configuration
@unnumbered Configuration file
-Example YAML configuration file:
+Example @url{https://hjson.org/, Hjson} configuration file:
@verbatim
-spool: /var/spool/nncp
-log: /var/spool/nncp/log
-notify:
- file:
- from: nncp@localhost
- to: user+file@example.com
- freq:
- from: nncp@localhost
- to: user+freq@example.com
-self:
- id: TIJQL...2NGIA
- exchpub: CYVGQ...PSEWQ
- exchprv: 65PUY...MPZ3Q
- signpub: 2NMVC...CMH5Q
- signprv: 555JD...RGD6Y
- noiseprv: D62XU...NKYPA
- noisepub: KIBKK...ESM7Q
-neigh:
- self:
+{
+ spool: /var/spool/nncp
+ log: /var/spool/nncp/log
+ notify: {
+ file: {
+ from: nncp@localhost
+ to: user+file@example.com
+ }
+ freq: {
+ from: nncp@localhost
+ to: user+freq@example.com
+ }
+ }
+ self: {
id: TIJQL...2NGIA
exchpub: CYVGQ...PSEWQ
+ exchprv: 65PUY...MPZ3Q
signpub: 2NMVC...CMH5Q
+ signprv: 555JD...RGD6Y
+ noiseprv: D62XU...NKYPA
noisepub: KIBKK...ESM7Q
- sendmail: [/usr/sbin/sendmail]
- alice:
- id: XJZBK...65IJQ
- exchpub: MJACJ...FAI6A
- signpub: T4AFC...N2FRQ
- noisepub: UBM5K...VI42A
- sendmail: ["/bin/sh", "-c", "false"]
- incoming: /home/alice/incoming
- onlinedeadline: 3600
- addrs:
- lan: "[fe80::1234%igb0]:5400"
- internet: alice.com:3389
- bob:
- id: 2IZNP...UYGYA
- exchpub: WFLMZ...B7NHA
- signpub: GTGXG...IE3OA
- sendmail: [/usr/sbin/sendmail]
- freq: /home/bob/pub
- via: [alice]
+ }
+ neigh: {
+ self: {
+ id: TIJQL...2NGIA
+ exchpub: CYVGQ...PSEWQ
+ signpub: 2NMVC...CMH5Q
+ noisepub: KIBKK...ESM7Q
+ exec: {sendmail: ["/usr/sbin/sendmail"]}
+ }
+ alice: {
+ id: "XJZBK...65IJQ"
+ exchpub: MJACJ...FAI6A
+ signpub: T4AFC...N2FRQ
+ noisepub: UBM5K...VI42A
+ exec: {flag: ["/usr/bin/touch", "-t"]}
+ incoming: "/home/alice/incoming"
+ onlinedeadline: 1800
+ maxonlinetime: 3600
+ addrs: {
+ lan: "[fe80::1234%igb0]:5400"
+ internet: alice.com:3389
+ }
+ calls: [
+ {
+ cron: "*/2 * * * *"
+ },
+ ]
+ }
+ bob: {
+ id: 2IZNP...UYGYA
+ exchpub: WFLMZ...B7NHA
+ signpub: GTGXG...IE3OA
+ exec: {
+ sendmail: ["/usr/sbin/sendmail"]
+ warcer: ["/path/to/warcer.sh"]
+ wgeter: ["/path/to/wgeter.sh"]
+ }
+ freq: "/home/bob/pub"
+ freqchunked: 1024
+ freqminsize: 2048
+ via: ["alice"]
+ rxrate: 10
+ txrate: 20
+ }
+ }
+}
@end verbatim
@strong{spool} field contains an absolute path to @ref{Spool, spool}
directory. @strong{log} field contains an absolute path to @ref{Log,
log} file.
+@anchor{CfgNotify}
@strong{notify} section contains notification settings for successfully
tossed file and freq packets. Corresponding @strong{from} and
-@strong{to} fields will substituted in notification email message.
-@emph{neigh/self/sendmail} will be used as a local mailer. You can omit
-either of those two @emph{from}/@emph{to} sections to omit corresponding
-notifications, or the whole section at once.
+@strong{to} fields will be substituted in notification email message.
+@emph{neigh/self/exec/sendmail} will be used as a local mailer. You can
+omit either of those two @emph{from}/@emph{to} sections to omit
+corresponding notifications, or the whole section at once.
@strong{self} section contains our node's private keypairs.
@strong{exch*} and @strong{sign*} are used during @ref{Encrypted,
If present, then node can be online called using @ref{Sync,
synchronization protocol}. Contains authentication public key.
-@item sendmail
-An array containing path to executable and its command line arguments
-that is called for mail sending.
+@anchor{CfgExec}
+@item exec
+Dictionary consisting of handles and corresponding command line
+arguments. In example above there are @command{sendmail} handles,
+@command{warcer}, @command{wgeter} and @command{flag} one. Remote node
+can queue some handle execution with providing additional command line
+arguments and the body fed to command's stdin.
+@verb{|sendmail: ["/usr/sbin/sendmail", "-t"]|} handle, when called by
+@verb{|echo hello world | nncp-exec OURNODE sendmail ARG0 ARG1 ARG2|}
+command, will execute:
+
+@verbatim
+echo hello world |
+ NNCP_SELF=OURNODE \
+ NNCP_SENDER=REMOTE \
+ NNCP_NICE=64 \
+ /usr/sbin/sendmail -t ARG0 ARG1 ARG2
+@end verbatim
+
+@anchor{CfgIncoming}
@item incoming
Full path to directory where all file uploads will be saved. May be
omitted to forbid file uploading on that node.
+@anchor{CfgFreq}
@item freq
Full path to directory from where file requests will queue files for
transmission. May be omitted to forbid freqing from that node.
+@item freqchunked
+If set, then enable @ref{Chunked, chunked} file transmission during
+freqing. This is the desired chunk size in KiBs.
+
+@item freqminsize
+If set, then apply @ref{OptMinSize, -minsize} option during file
+transmission.
+
+@anchor{CfgVia}
@item via
An array of node identifiers that will be used as a relay to that node.
For example @verb{|[foo,bar]|} means that packet can reach current node
by transitioning through @emph{foo} and then @emph{bar} nodes. May be
omitted if direct connection exists and no relaying is required.
+@anchor{CfgAddrs}
@item addrs
Dictionary containing known network addresses of the node. Each key is
human-readable name of the link/address. Values are @verb{|addr:port|}
if either no direct connection exists, or @ref{nncp-call} is used with
forced address specifying.
-@anchor{Onlinedeadline}
+@anchor{CfgXxRate}
+@item rxrate/txrate
+If greater than zero, then at most *rate packets per second will be
+sent/received after the handshake. It could be used as crude bandwidth
+traffic shaper: each packet has at most 64 KiB payload size. Could be
+omitted at all -- no rate limits.
+
+@anchor{CfgOnlineDeadline}
@item onlinedeadline
Online connection deadline of node inactivity in seconds. It is the time
connection considered dead after not receiving/sending any packets and
node must disconnect. By default it is set to 10 seconds -- that means
-that disconnecting after 10 seconds when no packets received and
-transmitted. This can be set to rather high values to keep connection
-alive (to reduce handshake overhead and delays), wait for appearing
-packets ready to send and notifying remote side about their appearance.
+disconnecting after 10 seconds when no packets received and transmitted.
+This can be set to rather high values to keep connection alive (to
+reduce handshake overhead and delays), wait for appearing packets ready
+to send and notifying remote side about their appearance.
+
+@anchor{CfgMaxOnlineTime}
+@item maxonlinetime
+If greater than zero, then it is maximal amount of time connect could be
+alive. Forcefully disconnect if it is exceeded.
+
+@anchor{CfgCalls}
+@item calls
+List of @ref{Call, call configuration}s. Can be omitted if
+@ref{nncp-caller} won't be used to call that node.
@end table