ndn-cxx version 0.2.0
---------------------

Release date: August 25, 2014

Changes since version 0.1.0:

New features
^^^^^^^^^^^^

- **Base**

  + The license under which the library is released is changed to the **GNU Lesser
    General Public License version 3.0**

  + New ways to use incoming Interest dispatching:

    * New :ndn-cxx:`InterestFilter` abstraction that supports filtering based on name
      prefixes and regular expressions.

    * Separate ``Face::registerPrefix()`` and ``Face::setInterestFilter()`` methods
      allow distinct operations of registering with the local NDN forwarder and setting
      up application-specific ``OnInterest`` call dispatch using InterestFilters.

  + Add support for the `NDN naming conventions (revision 1)
    <https://named-data.net/publications/techreports/ndn-tr-22-ndn-memo-naming-conventions/>`_
    (:issue:`1761`)

- **Security**

  + Add ``type dir`` :ref:`trust-anchor in ValidatorConfig <validator-conf-trust-anchors>`
    to add all certificates under the specified directory as trust anchors.
    The new option also allow periodic reloading trust anchors, allowing dynamic trust
    models.

  + Added support for multiple signature types to ``PublicKey``, ``SecPublicInfo`` abstractions

  + New :ndn-cxx:`SignatureSha256WithEcdsa` signature type

  + Updates in ``Signature`` data structure to reflect changes in the `NDN-TLV spec v0.1.1
    <https://docs.named-data.net/NDN-packet-spec/0.1.1/>`__

- **Wire encoding**

  + :ndn-cxx:`Data::getFullName` method to get the Data packet name including the implicit digest

  + :ndn-cxx:`Name::getSuccessor` method to get name successor (:issue:`1677`)

  + New in-wire refreshing of Interest's nonce (:issue:`1758`)

- **Management**

  + Support for :ndn-cxx:`ChannelStatus` and :ndn-cxx:`StrategyChoice` datasets

  + Defining new common Route Origins for NFD RIB management protocol (:issue:`1719`)

  + New ``RibEntry`` and ``Route`` data structures for RIB management protocol (:issue:`1764`)

  + Add support for RIB flags in ``setInterestFilter()`` and ``registerPrefix()`` (:issue:`1842`)

- **Miscellaneous tools**

  + Introduce :ndn-cxx:`Scheduler::cancelAllEvents` to cancel all previously scheduled events
    (:issue:`1757`)

  + Introduce ``util::EventEmitter``, :ndn-cxx:`util::NotificationSubscriber`,
    :ndn-cxx:`util::NotificationStream`, and :ndn-cxx:`nfd::FaceMonitor` utility classes

  + Introduce :ndn-cxx:`SegmentFetcher` helper class to fetch multi-segmented data
    (:issue:`1879`)

- **Build**

  + Enabled support of precompiled headers for clang and gcc compilers to speed up compilation

Updates and bug fixes
^^^^^^^^^^^^^^^^^^^^^

- **Base**

  + Serialization of socket write operations (:issue:`1769`)

  + Enforcing limit on Interest and Data packet size in :ndn-cxx:`Face::expressInterest` and
    :ndn-cxx:`Face::put` methods (:issue:`1774`)

  + Cleaning up transport state on communication failure, so Face can try to reconnect
    in the future

  + Fix bug in ``Face::removePendingInterest()`` (:issue:`1917`)

- **Wire encoding**

  + The Nonce field is now encoded as a 4-byte value, as defined by NDN-TLV spec

  + Optimized Data packet signing

    :ndn-cxx:`KeyChain::sign` method now pre-allocates :ndn-cxx:`EncodingBuffer`, requests
    unsigned portion of :ndn-cxx:`Data` using ``Data::wireEncode(EncodingBuffer, true)``,
    and then appends the resulting signature and prepends :ndn-cxx:`Data` packet header.
    This way there is no extra memory allocation after :ndn-cxx:`Data` packet is signed.

  + Optimized implicit digest calculation in :ndn-cxx:`Interest::matchesData` method
    (:issue:`1769`)

- **Management**

  + Add link-layer byte counts in ``FaceStatus`` data structure (:issue:`1765`)

- **Security**

  + Allow user to explicitly specify the cert name prefix before 'KEY' component in
    ``ndnsec-certgen``

  + ``SignatureSha256`` has been renamed to :ndn-cxx:`DigestSha256` to conform to the
    `NDN-TLV specification <https://docs.named-data.net/NDN-packet-spec/0.1.1/>`__

  + Add checking of Timestamp and Nonce fields in signed Interest within
    :ndn-cxx:`ValidatorConfig`

  + Allow validator customization using hooks.

    Sub-classes of :ndn-cxx:`Validator` class can use the following hooks to fine-tune the
    validation process:

      * ``preCertificateValidation`` to process received certificate before validation
      * ``onTimeout`` to process interest timeout
      * ``afterCheckPolicy`` to process validation requests

  + Fix memory issues in ``SecPublicInfoSqlite3``

- **Miscellaneous tools**

  + Redefine method for random number generation: ``random::generateWord*`` and
    ``random::generateSecureWord*`` to generate cryptographically non-secure (fast) and
    secure (slow) random numbers.

- Other minor fixes and corrections

Deprecated
^^^^^^^^^^

- ``SignatureSha256`` class, use :ndn-cxx:`DigestSha256` instead.

- All :ndn-cxx:`Face` constructors that accept ``shared_ptr<io_service>``.

  Use versions that accept reference to ``io_service`` object.

- ``Face::ioService`` method, use ``Face::getIoService`` instead.

- :ndn-cxx:`Interest` constructor that accepts name, individual selectors, and individual
  guiders as constructor parameters.

  Use ``Interest().setX(...).setY(...)`` or use the overload taking ``Selectors``

- ``name::Component::toEscapedString`` method, use :ndn-cxx:`name::Component::toUri` instead.

- ``SecPublicInfo::addPublicKey`` method, use ``SecPublicInfo::addKey`` instead.

- ``Tlv::ConentType`` constant (typo), use ``Tlv::ContentType`` instead.

- ``CommandInterestGenerator`` and ``CommandInterestValidator`` utility classes.
  :ndn-cxx:`ValidatorConfig` should be used instead.

Removed
^^^^^^^

- Support for ndnd-tlv (only NFD management protocol is supported now)

- ``SecPublicInfoMemory`` and ``SecTpmMemory`` classes that were no longer used

- Removing concept of periodic event from :ndn-cxx:`Scheduler`.

  In applications, periodic events should be just re-scheduled within the callback for
  single-shot events.
