First native version of the NDN protocol written in Javascript ( Also refereed to as CCN )

The goal of this project is to improve the current implementation of the NDN-JS API that allows users to create applications running on top of the NDN network. The goal is to have a lightweight version of the protocol, which can run on browsers. The main intent is to enable browser-based applications to use NDN directly without requiring a binary build of the CCNx code. In particular, the goal is to have an AJAX-style dynamic data access. The goal is also to have a lighter version of the protocol, which would be better suited for embedded systems. Furthermore, the goal is that NDN-JS communicates with CCNx nodes (routers).

The current status of NDN-JS allows for JavaScript applications running on browsers to send interest packets and retrieve data packets. This includes encoding and decoding data packets.

This is currently done in the following way:

var ndn = new NDN();
var contentObject = ndn.get('/ndn/ucla.edu/apps/hydra/mainvideo'); 
console.log(contentObject.content);

* Firefox extension for ccnx protocol

NDN-JS also includes a Firefox extension for the ccnx protocol.  To install in Firefox, open
Tools > Add-ons.  In the "gear" or "wrench" menu, click Install Add-on From File and open
js/ccnxProtocol.xpi in this distribution.  Restart Firefox.

Firefox uses the extension to load any URI starting with ccnx, for example
ccnx:/ndn/ucla.edu/apps/lwndn-test/trig-table

When the page is loaded, the extension updates address bar with the full matched name from the
retrieved content object including the version, but without the implicit digest or segment number 
(see below).

A URI for content with multiple segments is handled as follows.
If the URI has a segment number, just retrieve that segment and return the content to the browser.

Otherwise look at the name in the returned ContentObject.  If the returned name has no segment number,
just return the content to the browser. If the name has a segment number which isn't 0, store it 
and express an interest for segment 0. Read segments in order and return each content to the browser 
as we go until we get the segment for FinalBlockID.

