ndnpoke
=======

Synopsis
--------

**ndnpoke** [-h] [-u] [-F] [-x *freshness*] [-S *info*] [-w *timeout*] [-v] [-V] *name*

Description
-----------

:program:`ndnpoke` is a simple producer program that reads a payload from the standard
input and publishes it as a single Data packet. The Data packet is either sent as a
response to an incoming Interest matching *name*, or immediately pushed to the local
NDN forwarder as "unsolicited Data" if the **-u** flag is specified.

Options
-------

``-h, --help``
  Print help and exit.

``-u, --unsolicited``
  Send the Data packet without waiting for an incoming Interest.

``-F, --final``
  Set the ``FinalBlockId`` to the last component of *name*.

``-x, --freshness <freshness>``
  Set ``freshness`` (in milliseconds) as the ``FreshnessPeriod``.

``-S, --signing-info <info>``
  Specify the parameters used to sign the Data packet. If omitted, the default key of
  the default identity is used. The general syntax is ``<scheme>:<name>``. The most
  common supported combinations are as follows:

  * Sign with the default certificate of the default key of an identity: ``id:/<my-identity>``.
  * Sign with the default certificate of a specific key: ``key:/<my-identity>/ksk-1``.
  * Sign with a specific certificate: ``cert:/<my-identity>/KEY/ksk-1/ID-CERT/%FD%01``.
  * Sign with a SHA-256 digest: ``id:/localhost/identity/digest-sha256``. Note that this
    is only a hash function, not a real signature, but it can significantly speed up
    packet signing operations.

``-w, --timeout <timeout>``
  Quit the program after ``timeout`` milliseconds, even if no Interest has been received.

``-v, --verbose``
  Turn on verbose output.

``-V, --version``
  Print version and exit.

Exit Status
-----------

0: Success

1: An unspecified error occurred

2: Malformed command line

3: No Interests received before the timeout

5: Prefix registration failed

Example
-------

Create a Data packet with content ``hello`` and name ``/app/video`` and wait at
most 3 seconds for a matching Interest to arrive::

    echo "hello" | ndnpoke -w 3000 /app/video
