@node nncp-ack
@cindex packet acknowledgement
@pindex nncp-ack
@section nncp-ack

@example
$ nncp-ack [options] -all
$ nncp-ack [options] -node NODE[,@dots{}]
$ nncp-ack [options] -node NODE -pkt PKT

$ nncp-ack [@dots{}] 4>&1 >&2 | nncp-rm [@dots{}] -pkt
@end example

Send acknowledgement of successful @option{PKT} (Base32-encoded hash)
packet receipt from @option{NODE} node. If no @option{-pkt} is
specified, then acknowledge all packet in node's @code{rx} outbound
spool. If @option{-all} is specified, then do that for all nodes.

That commands outputs list of created encrypted ACK packets
(@code{NODE/PKT}) to @strong{4}th file descriptor. That output can be
passed for example to @command{@ref{nncp-rm}} to remove them after
transmission to not wait for acknowledgement and retransmission.

General workflow with acknowledgement is following, assuming that
Alice has some outbound packets for Bob:

@itemize

@item Transfer encrypted packets, without deleting them locally:

@example
alice$ nncp-xfer -keep -tx -node bob /mnt/shared
@end example

@item On Bob's side retrieve those packets:

@example
bob$ nncp-xfer -rx /mnt/shared
@end example

That will also check if copied packets checksum is not mismatched.

@item Create ACK packets of received ones, saving the list of encrypted
    ACK packets:

@example
bob$ nncp-ack -node alice 4>acks
@end example

@item Send those newly created packets back to Alice:

@example
bob$ nncp-xfer [-keep] -tx /mnt/shared
@end example

@item Remove them from outbound spool, because we expect no
    acknowledgement for them:

@example
bob$ nncp-rm -node alice -pkt <acks
@end example

@item Get those acknowledgement packets and @ref{nncp-toss, toss} them:

@example
alice$ nncp-xfer -rx /mnt/shared
alice$ nncp-toss
@end example

Each ACK packet will remove kept corresponding outbound packets, because
Bob explicitly confirmed their receipt.

@end itemize

Similarly you can use it with @command{@ref{nncp-bundle}}, but do not
forget that by default it does not do checksumming of the packets, so
you should either use its @option{-check} option, or run
@command{@ref{nncp-check}} after.
