Convert the rest of the document

Change-Id: I52ce8e0b9185c73646ecbc3afb14e5cb44f0fbc8
diff --git a/blob.rst b/blob.rst
new file mode 100644
index 0000000..52c730a
--- /dev/null
+++ b/blob.rst
@@ -0,0 +1,251 @@
+.. _Blob:
+
+Blob Class
+==========
+
+:[C++]:
+    Namespace: ndn
+
+.. code-block:: c++
+
+    class Blob : public ptr_lib::shared_ptr<const std::vector<uint8_t> >
+
+A Blob holds a pointer to an immutable byte array implemented as const std::vector<uint8_t>.  This is like a JavaScript string which is a pointer to an immutable string.  It is OK to pass a pointer to the string because the new owner can't change the bytes of the string.  However, like a JavaScript string, it is possible to change the pointer, and so this does allow the copy constructor and assignment to change the pointer.  Also remember that the pointer can be null.
+
+Blob Constructor
+----------------
+
+Create a new Blob to point to an existing byte array.
+
+IMPORTANT: After calling this constructor, if you keep a pointer to the array then you must treat the array as immutable and promise not to change it.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        Blob(
+        
+            [const ptr_lib::shared_ptr<std::vector<uint8_t> > &value]
+        
+        );
+
+        Blob(
+        
+            [const ptr_lib::shared_ptr<const std::vector<uint8_t> > &value]
+        
+        );
+
+:[JavaScript]:
+
+    .. code-block:: c++
+
+        var Blob = function Blob(
+        
+            [value // Blob]
+        
+        )
+
+:Parameters:
+
+    - `value`
+        (optional) A pointer to a vector with the byte array.  This takes another reference and does not copy the bytes.  If omitted, this set this blob to a null pointer.
+
+Blob Constructor (``uint8_t *``)
+--------------------------------
+
+(C++ only) Create a new Blob with an immutable copy of the given array.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        Blob(
+        
+            const uint8_t* value,
+            size_t valueLength
+        
+        );
+
+:Parameters:
+
+    - `value`
+        A pointer to the byte array which is copied.
+
+    - `valueLength`
+        The length of value.
+
+Blob Constructor (copy byte array)
+----------------------------------
+
+Create a new Blob with an immutable copy of the array in the given vector. If you want to transfer the array without copying, the the vector has to start as a type for the main Blob constructor.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        Blob(
+        
+            const std::vector<uint8_t> &value
+        
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        var Blob = function Blob(
+        
+            [value // Buffer|Array<number>]
+        
+        )
+
+:Parameters:
+
+    - `value`
+        A reference to a vector which is copied.
+
+Blob.size Method
+----------------
+
+Return the length of the immutable byte array.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        size_t size() const;
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        // Returns number
+        Blob.prototype.size = function()
+
+:Returns:
+
+    The length of the array.  If the pointer to the array is null, return 0.
+
+Blob.buf Method
+---------------
+
+Return a pointer to the immutable byte array. DO NOT change the contents of the array.  If you need to change it, make a copy.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        const uint8_t* buf() const;
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        // Returns Buffer
+        Blob.prototype.buf = function()
+
+:Returns:
+
+    A pointer to the immutable byte array.  If the pointer to the array is null, return null.
+
+.. _SignedBlob:
+
+SignedBlob Class
+================
+
+:[C++]:
+    Namespace: ndn
+
+.. code-block:: c++
+
+    class SignedBlob : public Blob
+
+A SignedBlob extends Blob to keep the offsets of a signed portion (e.g., the bytes of Data packet). This inherits from Blob, including Blob.size and Blob.buf.
+
+SignedBlob.signedSize Method
+----------------------------
+
+Return the length of the signed portion of the immutable byte array.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        size_t signedSize() const;
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        // Returns number
+        SignedBlob.prototype.signedSize = function()
+
+:Returns:
+
+    The length of the signed portion.  If the pointer to the array is null, return 0.
+
+SignedBlob.signedBuf Method
+---------------------------
+
+Return a pointer to the first byte of the signed portion of the immutable byte array.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        const uint8_t* signedBuf() const;
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        // Returns Buffer
+        SignedBlob.prototype.signedBuf = function()
+
+:Returns:
+
+    A pointer to the first byte of the signed portion.  If the pointer to the array is null, return null.
+
+SignedBlob.getSignedPortionBeginOffset Method
+---------------------------------------------
+
+Return the offset in the array of the beginning of the signed portion.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        size_t getSignedPortionBeginOffset() const;
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        // Returns number
+        SignedBlob.prototype.getSignedPortionBeginOffset = function()
+
+:Returns:
+
+    The offset that was given to the constructor.
+
+SignedBlob.getSignedPortionEndOffset Method
+-------------------------------------------
+
+Return the offset in the array of the end of the signed portion.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        size_t getSignedPortionEndOffset() const;
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        // Returns number
+        SignedBlob.prototype.getSignedPortionEndOffset = function()
+
+:Returns:
+
+    The offset that was given to the constructor.
diff --git a/details/binary-xml-wire-format.rst b/details/binary-xml-wire-format.rst
new file mode 100644
index 0000000..683eeff
--- /dev/null
+++ b/details/binary-xml-wire-format.rst
@@ -0,0 +1,185 @@
+BinaryXmlWireFormat Class
+=========================
+
+:[C++]:
+    Namespace: `ndn`
+
+BinaryXmlWireFormat Constructor
+-------------------------------
+
+Create a BinaryXmlWireFormat which extends the WireFormat interface to implement encoding and decoding in binary XML.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        BinaryXmlWireFormat();
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        var BinaryXmlWireFormat = function BinaryXmlWireFormat()
+
+BinaryXmlWireFormat.decodeData Method
+-------------------------------------
+
+Decode the input and Binary XML and put the result in data.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void decodeData(
+        
+            Data& data,
+            const uint8_t* input,
+            size_t inputLength
+            [, size_t* signedPortionBeginOffset,
+            size_t* signedPortionEndOffset]
+        
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        BinaryXmlWireFormat.prototype.decodeContentObject = function(
+
+            contentObject, // ContentObject
+            input          // Uint8Array
+
+        )
+
+:Parameters:
+
+    - `data`
+        The Data which is set to the values decoded from the input.
+
+    - `input`
+        The input byte array to be decoded.
+
+    - `inputLength`
+        (C++ only) The length of the input byte array.
+
+    - `signedPortionBeginOffset`
+        (optional) Return the offset in the input of the beginning of the signed portion. If you are not decoding in order to verify, you can ignore this returned value.
+
+    - `signedPortionEndOffset`
+        (optional) Return the offset in the input of the end of the signed portion. If you are not decoding in order to verify, you can ignore this returned value.
+
+BinaryXmlWireFormat.encodeData Method
+-------------------------------------
+
+Encode the data object as Binary XML and return the encoding.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        Blob encodeData(
+        
+            const Data& data
+            [, size_t* signedPortionBeginOffset,
+            size_t* signedPortionEndOffset]
+        
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        // Returns Uint8Array
+        BinaryXmlWireFormat.prototype.encodeContentObject = function(
+        
+            contentObject, // ContentObject
+        
+        )
+
+:Parameters:
+
+    - `data`
+        The Data object to be encoded.
+
+    - `signedPortionBeginOffset`
+        (optional) Return the offset in the encoding of the beginning of the signed portion. If you are not encoding in order to sign, you can ignore this returned value.
+
+    - `signedPortionEndOffset`
+        (optional) Return the offset in the encoding of the end of the signed portion. If you are not encoding in order to sign, you can ignore this returned value.
+
+:Returns:
+
+    The encoded byte array.
+
+BinaryXmlWireFormat.decodeInterest Method
+-----------------------------------------
+
+Decode the input and Binary XML and put the result in interest.
+
+:[C++]:
+    .. code-block:: c++
+
+        void decodeInterest(
+        
+            Interest& interest,
+            const uint8_t* input,
+            size_t inputLength
+        
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        BinaryXmlWireFormat.prototype.decodeInterest = function(
+        
+            interest, // Interest
+            input // Uint8Array
+        
+        )
+
+:Parameters:
+
+    - `interest`
+        The Interest which is set to the values decoded from the input.
+
+    - `input`
+        The input byte array to be decoded.
+
+    - `inputLength`
+        (C++ only) The length of the input byte array.
+
+BinaryXmlWireFormat.encodeInterest Method
+-----------------------------------------
+
+Encode the interest as Binary XML and return the encoding.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        Blob encodeInterest(
+
+            const Interest& interest,
+
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        // Returns Uint8Array
+        BinaryXmlWireFormat.prototype.encodeContentObject = function(
+        
+            interest, // Interest
+        
+        )
+
+:Parameters:
+
+    - `interest`
+        The Interest to be encoded.
+
+:Returns:
+
+    The encoded byte array.
diff --git a/details/cpp.rst b/details/cpp.rst
new file mode 100644
index 0000000..37d47e1
--- /dev/null
+++ b/details/cpp.rst
@@ -0,0 +1,50 @@
+ptr_lib (C++)
+=============
+
+Some C++ methods need to use shared_ptr. Depending on where ./configure found shared_ptr, define the ptr_lib namespace as follows, so that the API always uses ndn::ptr_lib::shared_ptr.
+
+.. code-block:: c++
+
+    #if NDN_CPP_HAVE_STD_SHARED_PTR
+    #include
+    #include <memory>
+    namespace ndn { namespace ptr_lib = std; }
+    #elif NDN_CPP_HAVE_BOOST_SHARED_PTR
+    #include <boost/shared_ptr.hpp>
+    #include <boost/make_shared.hpp>
+    namespace ndn { namespace ptr_lib = boost; }
+    #else
+    // Use the boost header files in this distribution.
+    #include <ndnboost/shared_ptr.hpp>
+    #include <ndnboost/make_shared.hpp>
+    namespace ndn { namespace ptr_lib = ndnboost; }
+    #endif
+
+Time representation
+===================
+
+Some methods use calendar time or a time interval.  These are represented as follows.
+
+Milliseconds Typedef
+--------------------
+
+(C++ only) A time interval represented as the number of milliseconds.
+
+:[C++]:
+    Namespace: `ndn`
+
+.. code-block:: c++
+
+    typedef double Milliseconds;
+
+MillisecondsSince1970 Typedef
+-----------------------------
+
+(C++ only) The calendar time represented as the number of milliseconds since 1/1/1970.
+
+:[C++]:
+    Namespace: ndn
+
+.. code-block:: c++
+
+    typedef double MillisecondsSince1970;
diff --git a/details/forwarding-flags.rst b/details/forwarding-flags.rst
new file mode 100644
index 0000000..e499d02
--- /dev/null
+++ b/details/forwarding-flags.rst
@@ -0,0 +1,431 @@
+ForwardingFlags Class
+=====================
+
+A ForwardingFlags object holds the flags which specify how the forwarding daemon should forward an interest for a registered prefix.  We use a separate ForwardingFlags object to retain future compatibility if the daemon forwarding bits are changed, amended or deprecated.
+
+:[C++]:
+    Namespace: `ndn`
+
+ForwardingFlags Constructor
+
+Create a new ForwardingFlags with "active" and "childInherit" set and all other flags cleared.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        ForwardingFlags();
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        var ForwardingFlags = function ForwardingFlags()
+
+ForwardingFlags.getActive Method
+--------------------------------
+
+Get the value of the "active" flag.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        bool getActive() const;
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.getActive = function()
+
+:Returns:
+
+    true if the flag is set, false if it is cleared.
+
+ForwardingFlags.getChildInherit Method
+--------------------------------------
+
+Get the value of the "childInherit" flag.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        bool getChildInherit() const;
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.getChildInherit = function()
+
+:Returns:
+
+    true if the flag is set, false if it is cleared.
+
+ForwardingFlags.getAdvertise Method
+-----------------------------------
+
+Get the value of the "advertise" flag.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        bool getAdvertise() const;
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.getAdvertise = function()
+
+:Returns:
+
+    true if the flag is set, false if it is cleared.
+
+ForwardingFlags.getLast Method
+------------------------------
+
+Get the value of the "last" flag.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        bool getLast() const;
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.getLast = function()
+
+:Returns:
+
+    true if the flag is set, false if it is cleared.
+
+ForwardingFlags.getCapture Method
+---------------------------------
+
+Get the value of the "capture" flag.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        bool getCapture() const;
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.getCapture = function()
+
+:Returns:
+
+    true if the flag is set, false if it is cleared.
+
+ForwardingFlags.getLocal Method
+-------------------------------
+
+Get the value of the "local" flag.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        bool getLocal() const;
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.getLocal = function()
+
+:Returns:
+
+    true if the flag is set, false if it is cleared.
+
+ForwardingFlags.getTap Method
+-----------------------------
+
+Get the value of the "tap" flag.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        bool getTap() const;
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.getTap = function()
+
+:Returns:
+
+    true if the flag is set, false if it is cleared.
+
+ForwardingFlags.getCaptureOk Method
+-----------------------------------
+
+Get the value of the "captureOk" flag.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        bool getCaptureOk() const;
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.getCaptureOk = function()
+
+:Returns:
+
+    true if the flag is set, false if it is cleared.
+
+ForwardingFlags.setActive Method
+--------------------------------
+
+Set the value of the "active" flag
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void setActive(
+
+            bool active;
+
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.setActive = function(
+        
+            active    // boolean
+        
+        )
+
+:Parameters:
+
+    - `active`
+        true to set the flag, false to clear it.
+
+ForwardingFlags.setChildInherit Method
+--------------------------------------
+
+Set the value of the "childInherit" flag
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void setChildInherit(
+
+            bool childInherit;
+
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.setChildInherit = function(
+        
+            childInherit    // boolean
+        
+        )
+
+:Parameters:
+
+    - `childInherit`
+        true to set the flag, false to clear it.
+
+ForwardingFlags.setAdvertise Method
+-----------------------------------
+
+Set the value of the "advertise" flag
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void setAdvertise(
+
+            bool advertise;
+
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.setAdvertise = function(
+        
+            advertise    // boolean
+        
+        )
+
+:Parameters:
+
+    - `advertise`
+        true to set the flag, false to clear it.
+
+ForwardingFlags.setLast Method
+------------------------------
+
+Set the value of the "last" flag
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void setLast(
+        
+            bool last;
+        
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.setLast = function(
+        
+            last    // boolean
+        
+        )
+
+:Parameters:
+
+    - `last`
+        true to set the flag, false to clear it.
+
+ForwardingFlags.setCapture Method
+---------------------------------
+
+Set the value of the "capture" flag
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void setCapture(
+        
+            bool capture;
+        
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.setCapture = function(
+        
+            capture    // boolean
+        
+        )
+
+:Parameters:
+
+    - `capture`
+        true to set the flag, false to clear it.
+
+ForwardingFlags.setLocal Method
+-------------------------------
+
+Set the value of the "local" flag
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void setLocal(
+        
+            bool local;
+        
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.setLocal = function(
+        
+            local    // boolean
+        
+        )
+
+:Parameters:
+
+    - `local`
+        true to set the flag, false to clear it.
+
+ForwardingFlags.setTap Method
+-----------------------------
+
+Set the value of the "tap" flag
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void setTap(
+        
+            bool tap;
+        
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.setTap = function(
+        
+            tap    // boolean
+        
+        )
+
+:Parameters:
+
+    - `tap`
+        true to set the flag, false to clear it.
+
+ForwardingFlags.setCaptureOk Method
+-----------------------------------
+
+Set the value of the "captureOk" flag
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void setCaptureOk(
+        
+            bool captureOk;
+        
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        ForwardingFlags.prototype.setCaptureOk = function(
+        
+            captureOk    // boolean
+        
+        )
+
+:Parameters:
+
+    - `captureOk`
+        true to set the flag, false to clear it.
diff --git a/details/tcp-transport.rst b/details/tcp-transport.rst
new file mode 100644
index 0000000..ef9cf4c
--- /dev/null
+++ b/details/tcp-transport.rst
@@ -0,0 +1,125 @@
+TcpTransport.ConnectionInfo Class
+=================================
+
+:[C++]:
+    Namespace: ndn
+
+A TcpTransport::ConnectionInfo extends Transport::ConnectionInfo to hold the host and port info for the TCP connection.
+
+TcpTransport.ConnectionInfo Constructor
+---------------------------------------
+
+Create a TcpTransport.ConnectionInfo with the given host and port.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        TcpTransport(
+        
+            const char *host
+            [, unsigned short port]
+            
+        );
+
+:Parameters:
+
+    - `host`
+        The host for the connection.
+
+    - `port`
+        (optional) The port number for the connection. If omitted, use 9695.
+
+.. _TcpTransport:
+
+TcpTransport Class
+==================
+
+:[C++]:
+
+Namespace: `ndn`
+
+TcpTransport Constructor
+------------------------
+
+Create a TcpTransport which extends the Transport interface to implement communication over TCP/IP.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        TcpTransport();
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        var TcpTransport = function TcpTransport()
+
+TcpTransport.connect Method
+---------------------------
+
+Connect according to the info in ConnectionInfo, and use elementListener to receive data.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void connect(
+        
+            const Transport::ConnectionInfo& connectionInfo,
+            ElementListener& elementListener
+        
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        TcpTransport.prototype.connect = function(
+        
+            ndn // NDN
+        
+        )
+
+:Parameters:
+
+    - `connectionInfo`
+        A TcpTransport.ConnectionInfo with the info for connecting.
+
+    - `elementListener`
+        The ElementListener called when an element is received.
+
+TcpTransport.send Method
+------------------------
+
+Send the data over the connection.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void send(
+        
+            const uint8_t* data,
+            size_t dataLength
+        
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        TcpTransport.prototype.send = function(
+        
+            data // Uint8Array
+        
+        )
+
+:Parameters:
+
+    - `data`
+        The data byte array to send.
+
+    - `dataLength`
+        (C++ only) The length of the data byte array.
diff --git a/details/udp-transport.rst b/details/udp-transport.rst
new file mode 100644
index 0000000..7f57e94
--- /dev/null
+++ b/details/udp-transport.rst
@@ -0,0 +1,108 @@
+UdpTransport.ConnectionInfo Class
+=================================
+
+:[C++]:
+    Namespace: `ndn`
+
+A UdpTransport::ConnectionInfo extends Transport::ConnectionInfo to hold the host and port info for the UDP connection.
+
+UdpTransport.ConnectionInfo Constructor
+---------------------------------------
+
+Create a UdpTransport.ConnectionInfo with the given host and port.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        UdpTransport(
+        
+            const char *host
+            [, unsigned short port]
+        
+        );
+
+:Parameters:
+
+    - `host`
+        The host for the connection.
+
+    - `port`
+        (optional) The port number for the connection. If omitted, use 9695.
+
+.. _UdpTransport:
+
+UdpTransport Class
+==================
+
+:[C++]:
+    Namespace: `ndn`
+
+UdpTransport Constructor
+------------------------
+
+Create a UdpTransport which extends the Transport interface to implement communication over UDP.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        UdpTransport();
+
+UdpTransport.connect Method
+---------------------------
+
+Connect according to the info in ConnectionInfo, and use elementListener to receive data.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void connect(
+        
+            const Transport::ConnectionInfo& connectionInfo,
+            ElementListener& elementListener
+        
+        );
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        TcpTransport.prototype.connect = function(
+        
+            ndn // NDN
+        
+        )
+
+:Parameters:
+
+    - `connectionInfo`
+        A UdpTransport.ConnectionInfo with the info for connecting.
+
+    - `elementListener`
+        The ElementListener called when an element is received
+
+UdpTransport.send Method
+------------------------
+
+Send the data over the connection.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void send(
+        
+            const uint8_t* data,
+            size_t dataLength
+            
+        );
+
+:Parameters:
+
+    - `data`
+        The data byte array to send.
+
+    - `dataLength`
+        (C++ only) The length of the data byte array.
diff --git a/details/wire-format.rst b/details/wire-format.rst
new file mode 100644
index 0000000..a548d73
--- /dev/null
+++ b/details/wire-format.rst
@@ -0,0 +1,77 @@
+WireFormat Class
+================
+
+:[C++]:
+    Namespace: `ndn`
+
+WireFormat Constructor
+----------------------
+
+Create a base class WireFormat where the methods throw an "unimplemented" error. You should use a derived class like BinaryXmlWireFormat.
+
+:Realizations:
+
+    - BinaryXmlWireFormat
+
+:[C++]:
+
+    .. code-block:: c++
+
+        WireFormat();
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        var WireFormat = function WireFormat()
+
+WireFormat.setDefaultWireFormat Method
+--------------------------------------
+
+Set the static default WireFormat used by default encoding and decoding methods.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        static void setDefaultWireFormat(
+        
+            WireFormat* wireFormat
+        
+        )
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        WireFormat.setDefaultWireFormat = function(
+
+            wireFormat // WireFormat
+
+        )
+
+:Parameters:
+
+    - `wireFormat`
+        An object of a subclass of WireFormat.
+
+WireFormat.getDefaultWireFormat Method
+--------------------------------------
+
+Return the default WireFormat used by default encoding and decoding methods. The initial value is a BinaryXmlWireFormat object. If can be changed with setDefaultWireFormat.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        static WireFormat* getDefaultWireFormat();
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        WireFormat.getDefaultWireFormat = function()
+
+:Returns:
+
+    The default (subclass of) WireFormat object.
diff --git a/index.rst b/index.rst
index eb3c1a6..30ab826 100644
--- a/index.rst
+++ b/index.rst
@@ -12,7 +12,16 @@
    data
    signature
    face
-   :maxdepth: 2
+   details/forwarding-flags
+   transport
+   details/tcp-transport
+   details/udp-transport
+   details/wire-format
+   details/binary-xml-wire-format
+   blob
+   key-chain
+   details/cpp
+   :maxdepth: 3
 
 
 .. Indices and tables
diff --git a/key-chain.rst b/key-chain.rst
new file mode 100644
index 0000000..c2e0029
--- /dev/null
+++ b/key-chain.rst
@@ -0,0 +1,111 @@
+KeyChain Class
+==============
+
+:[C++]:
+    Namespace: `ndn`
+
+The Keychain class provides a set of interfaces to the security library such as identity management, policy configuration and packet signing and verification.
+
+KeyChain.sign Method
+--------------------
+
+Wire encode the Data object, sign it and set its signature. Note: the caller must make sure the timestamp is correct, if necessary calling ``data.getMetaInfo().setTimestampMilliseconds``.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void sign(
+        
+            Data& data,
+            const Name& certificateName
+            [, WireFormat& wireFormat]
+        
+        );
+
+:Parameters:
+
+    - `data`
+        The Data object to be signed.  This updates its signature and key locator field and wireEncoding.
+
+    - `certificateName`
+        The certificate name of the key to use for signing.
+
+    - `wireFormat`
+        (optional) A WireFormat object used to encode the Data object. If omitted, use WireFormat getDefaultWireFormat ().
+
+KeyChain.signByIdentity Method
+------------------------------
+
+Wire encode the Data object, sign it and set its signature. Note: the caller must make sure the timestamp is correct, if necessary calling ``data.getMetaInfo().setTimestampMilliseconds``.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void signByIdentity(
+        
+            Data& data
+            [, const Name& identityName]
+            [, WireFormat& wireFormat]
+            
+        );
+
+:Parameters:
+
+    - `data`
+        The Data object to be signed.  This updates its signature and key locator field and wireEncoding.
+
+    - `identityName`
+        (optional) The identity name for the key to use for signing.  If omitted, infer the signing identity from the data packet name.
+
+    - `wireFormat`
+        (optional) A WireFormat object used to encode the Data object. If omitted, use WireFormat getDefaultWireFormat ().
+
+KeyChain.verifyData Method
+--------------------------
+
+Check the signature on the Data object and call either ``onVerify`` or ``onVerifyFailed``. We use callback functions because verify may fetch information to check the signature.
+
+:[C++]:
+
+        void verifyData(
+        
+            const ptr_lib::shared_ptr<Data>& data,
+            const OnVerified& onVerified,
+            const OnVerifyFailed& onVerifyFailed
+            
+        );
+
+:Parameters:
+
+    - `data`
+        The Data object with the signature to check. It is an error if data does not have a wireEncoding. To set the wireEncoding, you can call data.wireDecode.
+
+    - `onVerified`
+        If the signature is verified, this calls ``onVerified(data)`` where:
+            - `data` is the given Data object.
+
+    - `onVerifyFailed`
+        If the signature check fails, this calls ``onVerifyFailed(data)`` where:
+            - `data` is the given Data object.
+
+KeyChain.setFace Method
+-----------------------
+
+Set the Face which will be used to fetch required certificates.
+
+:[C++]:
+
+    .. code-block:: c++
+
+        void setFace(
+        
+            Face* face
+        
+        );
+
+:Parameters:
+
+    - `face`
+        The Face object.
diff --git a/transport.rst b/transport.rst
new file mode 100644
index 0000000..3cc9361
--- /dev/null
+++ b/transport.rst
@@ -0,0 +1,38 @@
+Transport.ConnectionInfo Class
+==============================
+
+:[C++]:
+    Namespace: `ndn`
+
+
+A Transport.ConnectionInfo is a base class for connection information used by subclasses of Transport.
+
+Transport Class
+===============
+
+:[C++]:
+    Namespace: `ndn`
+
+Transport Constructor
+---------------------
+
+Create a base class Transport where the methods throw an "unimplemented" error. You should use a derived class like :ref:`UdpTransport <UdpTransport>`.
+
+:Realizations:
+
+    - :ref:`UdpTransport Class <UdpTransport>`
+    - :ref:`TcpTransport Class <TcpTransport>`
+
+:[C++]:
+
+    .. code-block:: c++
+
+        Transport();
+
+:[JavaScript]:
+
+    .. code-block:: javascript
+
+        var Transport = function Transport()
+
+