This is the NetInf framework developed as part of the SAIL
project. (http://sail-project.eu)
NetInf is an abbreviation for 'Network of Information'.
Additional contributions 2013-2015 as part of EIT Digital projects to
NetInf Python implementation and an Android live video streaming app.
Specification(s) - note, versions may change::
* http://tools.ietf.org/html/draft-farrell-decade-ni-10
* http://tools.ietf.org/html/draft-hallambaker-decade-ni-params-03
* http://tools.ietf.org/html/draft-kutscher-icnrg-netinf-proto-00
Contact: stephen.farrell@cs.tcd.ie, dirk.kutscher@neclab.eu
Copyright (C) 2012 Trinity College Dublin and Dirk Kutscher
License:: http://www.apache.org/licenses/LICENSE-2.0.html
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Authors
-------
Dirk Kutscher <dirk.kutscher@neclab.eu>
Stephen Farrel <stephen.farrell@cs.tcd.ie>
Elwyn Davies <davieseb@scss.tcd.ie>
Claudio Imbrenda <claudio.imbrenda@neclab.eu>
Ville Petteri Pöyhönen <petteri.poyhonen@nsn.com>
Janne Tuononen <janne.tuononen@nsn.com>
Bengt Ahlgren <bengta@sics.se>
Version 0.3
-----------
The NetInf Python implementation has been enhanced with a routing
module that interfaces to Quagga with BGP support. See
python/nilib/doc/README_ROUTING.
A NetInf live video streaming app for Android has been added. See
android/README.
Version 0.2
-----------
In this version, the c, python, ruby and clojure libraries
are up to date with draft-farrell-decade-ni-10 for ni: and nih:
name generation and verification as well as binary format names.
The HTTP and UDP convergence layers in c, php, python, ruby and clojure
implement the functionality described in
draft-kutscher-netinf-proto-00.
The php, Python and ruby code implement some rudimnentary NRS
capability.
Other NetInf features and other languages are in a state of
flux at the moment.
Roadmap
-------
There are c, ruby, python, java, php, and clojure subdirectories, each
with code handling ni names and implementing the NetInf protocol. In
addition, there is a patch to wget for handling NI names and some
shell script to work with NI-named objects on a web server.
The different implementations provide the following features:
- c: NI URI format, HTTP convergence layer
- curl: patches to allow curl to operate with ni names
- ruby: NI URI format, HTTP and UDP convergence layers, standalone
NetInf router
- python: NI URI format, HTTP convergence layer, standalone
NetInf server for HTTP convergence layer with NRS server,
NetInf routing with partially ordered routing hints
- java: NI URI format, HTTP convergence layer, NI proxy with local
cache, GET/REGISTER/PUBLISH clients. Both client and proxy are
Eclipse (http://www.eclipse.org/) projects and external JARs are
not included; for more information, see README under lib/ directory.
- PHP: HTTP convergence layer, NRS server
- clojure: NI URI format
- wget: patch for wget to handle NI names
- sh: scripts to generate NI names for a web server environment
Documentation
-------------
The specification of the NI URI format is here (as of 2012-10-0r51):
* http://tools.ietf.org/html/draft-farrell-decade-ni-10
* http://tools.ietf.org/html/draft-hallambaker-decade-ni-params-03
The NetInf protocol specification (the basis of the HTTP and UDP
convergence layer implementations provided by some of the tools in
this package) has been published as an Internet Draft. The tools
here conform to the following version:
* http://tools.ietf.org/html/draft-kutscher-icnrg-netinf-proto-00
An overall Makefile is provided in the top level to invoke the Makefiles in
subsidiaary directories, especially for C, and generate documentation.
Doxygen documentation can be generated for the C and Python code
(the Makefile does it) but requires the help of the doxypy.py
module as a filter for the Python modules. (Doxygen support
for Ruby is not available in the main Doxygen code although there
is work in progress - see https://github.com/fourmond/doxygen-ruby-patch).
The doxypy.py module can be obtained from http://code.foosel.org/doxypy or
there is a Debian repository with doxypy. Note that the Debian install
creates the script 'doxypy' whereas the module as obtained from the developer
site leaves you with doxypy.py. You may need to tweak the INPUT_FILTER
entry in the Doxygen configuration file (netinf_code/doc/nilib_apis)
appropriately.
If you don't want to install doxypy then edit the Doxygen configuration file
(netinf_code/doc/nilib_apis) setting FILTER_SOURCE_FILES = NO so the doxypy
filter is not used.
The Ruby source code documentation can be generated by 'make -C ruby doc'.
A note
-----
Grossmutti's advice to those starting to suck the ni URI egg:
- The semi-colon (;) is a meta-character (statement terminator)
in all known species of *nix shell
- Complete ni URI's contain a semi-colon
- If you don't quote ni URIs on shell command lines than you will
get some peculiar error messages.