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 :ndn-cxx:`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.
