summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex AUVOLAT <alex.auvolat@ens.fr>2014-10-30 15:36:02 +0100
committerAlex AUVOLAT <alex.auvolat@ens.fr>2014-10-30 15:36:02 +0100
commit4901dcdbbaf9e19e1bb319f873e679da1a6317e3 (patch)
tree8e4f89c5f30a681df2e82280a7ae986c59ef819e
parentaef1365c7f375a5df8b1227e16456af51b009ab3 (diff)
downloadNARP-4901dcdbbaf9e19e1bb319f873e679da1a6317e3.tar.gz
NARP-4901dcdbbaf9e19e1bb319f873e679da1a6317e3.zip
Update ; add HTML version.
-rw-r--r--doc/narp.html1718
-rw-r--r--doc/narp.pdfbin123463 -> 131165 bytes
-rw-r--r--doc/narp.tm411
3 files changed, 1976 insertions, 153 deletions
diff --git a/doc/narp.html b/doc/narp.html
new file mode 100644
index 0000000..c9ee0df
--- /dev/null
+++ b/doc/narp.html
@@ -0,0 +1,1718 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:x="http://www.texmacs.org/2002/extensions" xmlns:m="http://www.w3.org/1998/Math/MathML">
+ <head>
+ <title>No title</title>
+ <meta content="TeXmacs 1.99.2" name="generator"></meta>
+ <style type="text/css">
+ body { text-align: justify } h5 { display: inline; padding-right: 1em }
+ h6 { display: inline; padding-right: 1em } table { border-collapse:
+ collapse } td { padding: 0.2em; vertical-align: baseline } .subsup {
+ display: inline; vertical-align: -0.2em } .subsup td { padding: 0px;
+ text-align: left} .fraction { display: inline; vertical-align: -0.8em }
+ .fraction td { padding: 0px; text-align: center } .wide { position:
+ relative; margin-left: -0.4em } .accent { position: relative;
+ margin-left: -0.4em; top: -0.1em } .title-block { width: 100%;
+ text-align: center } .title-block p { margin: 0px } .compact-block p {
+ margin-top: 0px; margin-bottom: 0px } .left-tab { text-align: left }
+ .center-tab { text-align: center } .balloon-anchor { border-bottom: 1px
+ dotted #000000; outline:none; cursor: help; position:
+ relative; }.balloon-anchor [hidden] { margin-left: -999em; position:
+ absolute; display: none; }.balloon-anchor:hover [hidden] { position:
+ absolute; left: 1em; top: 2em; z-index: 99; margin-left: 0; width:
+ 500px; display: inline-block; }.balloon-body { }.ornament {
+ border-width: 1px; border-style: solid; border-color: black; display:
+ inline-block; padding: 0.2em; } .right-tab { float: right; position:
+ relative; top: -1em }
+ </style>
+ </head>
+ <body>
+ <table class="title-block">
+ <tr>
+ <td><table class="title-block">
+ <tr>
+ <td><font size="+3"><b>The NARP protocol specification
+ </b></font></td>
+ </tr>
+ </table><table class="title-block">
+ <tr>
+ <td><font size="+1"><b>A Generic Recursive Communication Protocol for
+ Networked Applications</b></font></td>
+ </tr>
+ </table></td>
+ </tr>
+ </table>
+ <p>
+ In this document we explain the purpose and provide a draft
+ specification for the NARP protocol, a general-purpose networking
+ protocol destined to be used in many layers of a new operating system
+ and networking system.
+ </p>
+ <h2 id="auto-1">1<span style="margin-left: 1em"></span>Introduction</h2>
+ <p>
+ We begin by remarking that a basic operation in all computer operation
+ processes consists in naming objects and providing acces to these named
+ objects. Here are a few examples of naming in real use cases:
+ </p>
+ <ul>
+ <li>
+ <p>
+ Naming of files on a local or distant file system
+ </p>
+ </li>
+ <li>
+ <p>
+ Naming of devices in the <tt class="verbatim">/dev</tt> virtual filesystem on
+ Unix machines
+ </p>
+ </li>
+ <li>
+ <p>
+ Naming of networked machines (with IP adresses and DNS records)
+ </p>
+ </li>
+ <li>
+ <p>
+ Naming of internet ressources over protocols such as HTTP, IMAP,
+ IRC, specfic web services, &hellip;
+ </p>
+ </li>
+ </ul>
+ <p>
+ We propose here a novel architecture with the purpose of unifying all
+ the naming happening at all levels of the system, with two base concepts
+ : <em>objects</em> and <em>service</em>.
+ </p>
+ <ul>
+ <li>
+ <p>
+ <em>objects</em> are ressources that may implement different
+ semantics : bidirectionnal communication (such as sockets) ;
+ unidirectionnal communication (FIFO-like) ; file semantics ; etc.
+ </p>
+ </li>
+ <li>
+ <p>
+ <em>services</em> are a way of naming objects, querying the
+ interfaces they implement, and multiplexing communications with them
+ </p>
+ </li>
+ </ul>
+ <p>
+ We suggest that a NARP service may be provided on any bidirectionnal
+ channel of communication supporting the (reliable) sending and recieving
+ of messages. In addition, NARP objects may implement such a send/recieve
+ interface ; therefore a NARP service can be channeled into an object.
+ Such a construction of using a NARP object to access a NARP service is a
+ fundamental operation that we call <em>recursive multiplexing</em>, or
+ just <em>multiplexing</em>.
+ </p>
+ <p>
+ The NARP protocol is a client/server protocol meant to include a variety
+ of different operations that may or may not be implemented by a specific
+ NARP server.
+ </p>
+ <h2 id="auto-2">2<span style="margin-left: 1em"></span>High-level overview</h2>
+ <h3 id="auto-3">2.1<span style="margin-left: 1em"></span>The basic operations on services and
+ objects</h3>
+ <p>
+ A NARP service is basically any object that implements the following
+ operations:
+ </p>
+ <ul>
+ <li>
+ <p>
+ <em>query</em> : get information on a ressource identified by name
+ </p>
+ </li>
+ <li>
+ <p>
+ <em>list</em> : know the names of ressources presented by the
+ service (possibly in a specific sub-path)
+ </p>
+ </li>
+ <li>
+ <p>
+ <em>attach</em> : get an object interface for accessing a ressource,
+ identified by name
+ </p>
+ </li>
+ </ul>
+ <p>
+ A NARP object is basically any object that implements the following
+ operations :
+ </p>
+ <ul>
+ <li>
+ <p>
+ <em>send</em> : send a message (an arbitrary byte string) to the
+ object
+ </p>
+ </li>
+ <li>
+ <p>
+ <em>recieve</em> : recieve a message from the object (this may be
+ done asynchronously with handler functions)
+ </p>
+ </li>
+ <li>
+ <p>
+ <em>detach</em> : delete object connection
+ </p>
+ </li>
+ </ul>
+ <h3 id="auto-4">2.2<span style="margin-left: 1em"></span>The basics of the NARP protocol</h3>
+ <p>
+ Given any interface with send/recieve capabilities considered as an
+ assymetric (client/server) configuration, the following client messages
+ consitute the basics of the NARP protocol for providing a NARP service
+ on the interface:
+ </p>
+ <ul>
+ <li>
+ <p>
+ <tt class="verbatim">hello</tt> : initialize a connection, check version
+ information, &hellip;
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="verbatim">authenticate</tt> and appropriate response messages : use
+ credentials (user/password or access token) to gain acces to some
+ ressources provided by the server (the protocol is thus statefull)
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="verbatim">walk</tt>, <tt class="verbatim">list</tt> and appropriate response
+ messages : get information about the available ressources
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="verbatim">attach</tt> and appropriate response messages : give an
+ identifier (a descriptor) to a ressource in order to communicate
+ with it
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="verbatim">send</tt> and appropriate response messages : send a
+ message to an attached ressource, identified by its descriptor
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="verbatim">detach</tt> : close a descriptor and detach from a
+ ressource
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="verbatim">create</tt>, <tt class="verbatim">delete</tt>, <tt class="verbatim">rename</tt>,
+ <tt class="verbatim">link</tt> : requests the creation or modification of a
+ ressource in the namespace
+ </p>
+ </li>
+ </ul>
+ <p>
+ The server may also at any moment send a message, including:
+ </p>
+ <ul>
+ <li>
+ <p>
+ a response to a query
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="verbatim">recieve</tt> : a notification of a message sent from the
+ object to the client
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="verbatim">detached</tt> : the connection to the object has been
+ terminated by the object server
+ </p>
+ </li>
+ </ul>
+ <h3 id="auto-5">2.3<span style="margin-left: 1em"></span>Recursion</h3>
+ <p>
+ If an object is a NARP server, the messages sent to it and recieved from
+ it are messages of the NARP protocol. Otherwise, they are arbitrary.
+ </p>
+ <h3 id="auto-6"><a id="rev-sock"></a>2.4<span style="margin-left: 1em"></span>Reverse object</h3>
+ <p>
+ Some NARP servers may support reverse object serving: the client creates
+ an object on the server and handles all the requests arriving to this
+ object (therefore the initial NARP server only serves as a relay between
+ the new server and its clients
+ <p>
+ <font size="-1"><div align="justify">
+ <div style="margin-left: 0px">
+ <div style="margin-right: 0px">
+ <class style="font-style: normal"><p>
+ 1. Research is to be done on shortcutting mechanisms in
+ specific situations where too many levels of recursion cause a
+ performance issue.
+ </p></class>
+ </div>
+ </div>
+ </div></font>
+ </p>
+ <span style="margin-left: 0em"></span>
+ <a id="footnr-1"></a>
+ <sup><class style="font-style: normal"><a href="#footnote-1">1</a></class></sup>
+ ). A client wishing to act as a reverse object server may use the
+ following commands:
+ </p>
+ <ul>
+ <li>
+ <p>
+ <tt class="verbatim">serve</tt> : listen for attach requests on a servable
+ (empty) object created in the server namespace (if authorized)
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="verbatim">accept</tt> and <tt class="verbatim">reject</tt> : accept (or
+ reject) an attach request to the object
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="verbatim">detach</tt> : close connection between object and client
+ (this is the same detach message as in standard communications)
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="verbatim">unserve</tt> : stop serving for the object. Attached
+ clients continue to be attached.
+ </p>
+ </li>
+ </ul>
+ <p>
+ The server may in turn send the following messages concerning the server
+ object:
+ </p>
+ <ul>
+ <li>
+ <p>
+ <tt class="verbatim">attach_request</tt> : a client is willing to attach to
+ the object. A descriptor is already associated to the connection to
+ be established, but the server may reject it.
+ </p>
+ </li>
+ </ul>
+ <p>
+ Once a client is attached to the object, a classical send/recieved
+ interface is provided.
+ </p>
+ <p>
+ Typically, the protocol exchanged over the object is NARP protocol,
+ therefore enabling the reverse server to provide its own namespace and
+ other functionnality.
+ </p>
+ <h3 id="auto-7">2.5<span style="margin-left: 1em"></span>Specific object types and associated
+ messages</h3>
+ <h4 id="auto-8">2.5.1<span style="margin-left: 1em"></span>Objects are sockets</h4>
+ <p>
+ Sockets are the basis of the NARP protocol : attaching to an objects
+ opens a socket connection to the process serving the object, and when
+ the connection is accepted, basic send/recieve functionnality is
+ provided. See also the reverse object protocol described in section <a
+ href="#rev-sock">2.4</a>.
+ </p>
+ <h4 id="auto-9">2.5.2<span style="margin-left: 1em"></span>File objects</h4>
+ <p>
+ Small files may implement the following interface:
+ </p>
+ <ul>
+ <li>
+ <p>
+ <tt class="verbatim">put</tt> : erase the whole file and put the transmitted
+ content
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="verbatim">get</tt> : retrieve the whole file content
+ </p>
+ </li>
+ </ul>
+ <p>
+ Big files may implement the following interface:
+ </p>
+ <ul>
+ <li>
+ <p>
+ <tt class="verbatim">write</tt> : write a portion of the file at a given
+ offset
+ </p>
+ </li>
+ <li>
+ <p>
+ <tt class="verbatim">read</tt> : read a portion of the file at a given offset
+ </p>
+ </li>
+ </ul>
+ <h4 id="auto-10">2.5.3<span style="margin-left: 1em"></span>User IO (terminals&hellip;)</h4>
+ <p>
+ Virtual terminals can be seen as objects implementing a simple
+ send/recieve semantic, where the data transmitted is unstructured (or
+ structured given a specific terminal data structure). More specific
+ interfaces can be defined for advanced terminals and GUIs.
+ </p>
+ <h4 id="auto-11">2.5.4<span style="margin-left: 1em"></span>Specific applications</h4>
+ <p>
+ Specific applications may define custom messages. Examples include:
+ </p>
+ <ul>
+ <li>
+ <p>
+ e-mail
+ </p>
+ </li>
+ <li>
+ <p>
+ instant messaging
+ </p>
+ </li>
+ <li>
+ <p>
+ collaborative editing of text-based documents
+ </p>
+ </li>
+ </ul>
+ <p>
+ and many other applications yet to be invented.
+ </p>
+ <h3 id="auto-12">2.6<span style="margin-left: 1em"></span>Big messages</h3>
+ <p>
+ The message size in the NARP protocol is limited to 64kb, and
+ recommended not to exceed 4kb+header (4kb is the size of a memory page
+ on many machines). Therefore a possibility would be for the NARP
+ protocol to include a way to transmit big messages by fragmenting them
+ into small messages. Optionnal error correction may be included. This
+ can be useful for example when using <tt class="verbatim">put</tt> or <tt class="verbatim">get</tt>
+ on large files, or <tt class="verbatim">read</tt>s and <tt class="verbatim">write</tt>s of
+ big file portions. The recieving of a large fragmented message may have
+ a specific implementation allowing the reciever to work with the partial
+ data as soon as it starts arriving and not having to wait for the whole
+ message to be transmitted and buffered. Research is yet to be done on
+ this specific subject.
+ </p>
+ <h3 id="auto-13">2.7<span style="margin-left: 1em"></span>Permissions</h3>
+ <p>
+ For each attached client the server may keep track of associated
+ permissions, and accept or reject requests according to those
+ permissions. The client may use an authentication command to gain
+ supplementary privileges on the server's ressources. The client may
+ request a token to delegate it's privileges on a given object to another
+ client. Advanced right management functionnalities are to be discussed.
+ </p>
+ <h3 id="auto-14">2.8<span style="margin-left: 1em"></span>Reliability concerns</h3>
+ <p>
+ The NARP protocol relies on the fact that when transmitting a message,
+ the other end will recieve it. It is nevertheless recommended that NARP
+ implementations support the repeating of messages if an expected
+ acknowlegment has not arrived after a given delay.
+ </p>
+ <h3 id="auto-15">2.9<span style="margin-left: 1em"></span>Example NARP servers</h3>
+ <h4 id="auto-16">2.9.1<span style="margin-left: 1em"></span>Virtual NARP server (i.e. NARP
+ router)</h4>
+ <p>
+ This server implements a namespace where any client may create an empty
+ object and serve connections to it. Additionnaly, the server may
+ implement the possibility to create virtual files, virtual directories,
+ FIFO queues, etc.
+ </p>
+ <p>
+ This server may be connected to other virtual NARP servers in order to
+ provide a global namespace accessible to all. Each virtual NARP server
+ acts as an endpoint into the network and may have functionnality for
+ routing the communications to objects to the clients that serve them.
+ </p>
+ <h4 id="auto-17">2.9.2<span style="margin-left: 1em"></span>NARP file server</h4>
+ <p>
+ This server simply implements access to a filesystem : listed ressources
+ are the same as the files present in a served directory, each of these
+ implements the filing protocol (served directly by the file server), and
+ the creation of files/directories may also be implemented.
+ </p>
+ <h4 id="auto-18">2.9.3<span style="margin-left: 1em"></span>NARP terminal/GUI server</h4>
+ <p>
+ Clients may create objects on the server ; each of these objects
+ correspond to a GUI window. Two interfaces may be implemented : text IO
+ (terminal) and graphical interaction. Advanced terminal interaction
+ features may be implemented at the protocol level, such as
+ auto-completion of commands or of text being edited&hellip;
+ </p>
+ <p>
+ Suggestion for a third kind of window : the data sent by the client
+ corresponds to a description of the scene in a given markup language and
+ the server does the rendering. The client can also subscribed to events
+ such as clicking on an item or entering text. This possibility is to be
+ explored.
+ </p>
+ <h4 id="auto-19">2.9.4<span style="margin-left: 1em"></span>NARP e-mail and newsgroup server</h4>
+ <p>
+ Several features to be implemented:
+ </p>
+ <ul>
+ <li>
+ <p>
+ user login and private user mailboxes
+ </p>
+ </li>
+ <li>
+ <p>
+ bridge to standard SMTP/POP3/IMAP services
+ </p>
+ </li>
+ <li>
+ <p>
+ private threads of conversation with access rights (the users don't
+ each have a copy of the thread)
+ </p>
+ </li>
+ <li>
+ <p>
+ synchronization between many servers
+ </p>
+ </li>
+ <li>
+ <p>
+ public discussion forums
+ </p>
+ </li>
+ </ul>
+ <h4 id="auto-20">2.9.5<span style="margin-left: 1em"></span>NARP chat server</h4>
+ <ul>
+ <li>
+ <p>
+ user login and status notification
+ </p>
+ </li>
+ <li>
+ <p>
+ online and offline private messaging
+ </p>
+ </li>
+ <li>
+ <p>
+ public chat rooms, chat room logging independently of user being
+ online or offline
+ </p>
+ </li>
+ <li>
+ <p>
+ bridging and synchronization between many servers
+ </p>
+ </li>
+ </ul>
+ <h4 id="auto-21">2.9.6<span style="margin-left: 1em"></span>NARP applicative server</h4>
+ <p>
+ TODO&hellip;
+ </p>
+ <h2 id="auto-22">3<span style="margin-left: 1em"></span>Specifics of the NARP protocol</h2>
+ <h3 id="auto-23">3.1<span style="margin-left: 1em"></span>Protocol description format</h3>
+ <p>
+ A protocol message is given in the following form:
+ </p>
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid">element type</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">element type</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">&hellip;</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">element type</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">element description</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">element description</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">&hellip;</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">element description</td>
+ </tr></tbody>
+ </table>
+ <p>
+ The following element types apply:
+ </p>
+ <ul>
+ <li>
+ <p>
+ int16, int32, int64 : 16-bit, 32-bit or 64-bit little-endian
+ integers
+ </p>
+ </li>
+ <li>
+ <p>
+ str : a string, prefixed by a 16-bit length header
+ </p>
+ </li>
+ <li>
+ <p>
+ arr(<var>T</var>) : an array of <var>T</var>'s (where <var>T</var>
+ is another element type), prefixed by a 16-bit length header
+ </p>
+ </li>
+ <li>
+ <p>
+ * (for the last element) : consider all the rest of the message as a
+ byte string
+ </p>
+ </li>
+ </ul>
+ <h3 id="auto-24">3.2<span style="margin-left: 1em"></span>Basic message format</h3>
+ <p>
+ The basic format of a message is :
+ </p>
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid">int16</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int16</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">*</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">message size</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">message type</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">payload</td>
+ </tr></tbody>
+ </table>
+ <p>
+ We will abbreviate by &ldquo;header&rdquo; the first 32 bits (4 bytes)
+ of the message. The list of message types is given in section <a href="#type-nums">3.10.1</a>.
+ </p>
+ <p>
+ Messages for communication with an attached ressource will have the
+ following format :
+ </p>
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid">int16</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int16</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">*</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">message size</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">message type</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">ressource descriptor (handle)</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">payload</td>
+ </tr></tbody>
+ </table>
+ <p>
+ Many client messages awating a response will have a message ID included
+ ; this message ID is an arbitrary number generated by the client and
+ used by the server when giving its response. The header then looks like
+ this:
+ </p>
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid">int16</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int16</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">*</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">message size</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">message type</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">message ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">payload</td>
+ </tr></tbody>
+ </table>
+ <h3 id="auto-25">3.3<span style="margin-left: 1em"></span>Message list for core NARP protocol</h3>
+ <p>
+ Client messages have an up arrow (<var>&uarr;</var>) next to their name,
+ while server messages have a down arrow (<var>&darr;</var>).
+ </p>
+ <p>
+ The core NARP protocol is meant for small size and rapidity (so that
+ many layers can be encapsulated with minimal overhead), therefore no
+ acknowlegment is to be sent for recursive send/recieve messages. Other
+ messages usually imply some kind of action or getting of information,
+ therefore an acknowlegment or an error is usually sent as a response.
+ </p>
+ <p>
+ <a id="auto-26"></a><h5>Hello<var>&uarr;</var><var>&darr;</var></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">arr(int32)</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">version</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">list of needed/provided interfaces</td>
+ </tr></tbody>
+ </table>
+
+ </p>
+ </div>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ When a NARP connection is established, the client is always the
+ first to send a <strong>Hello</strong> message. The object may then
+ respond either with a <strong>Hello</strong> message indicating that
+ the requested interfaces can be provided, or with an
+ <strong>Error</strong> message. The two common error causes are
+ <em>interface not implemented</em> and <em>incompatible
+ versions</em>.
+ </p>
+ </div>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ For interface numbers : see table in section <a href="#interface-nums">3.10.3</a>.
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-27"></a><h5>Error<var>&darr;</var></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ Generic error response message for any operation.
+ </p>
+ </div>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">error ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">error string</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ Common error IDs are specified in section <a href="#error-nums">3.10.2</a>.
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-28"></a><h5>Ack<var>&darr;</var></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ Generic acknowlegment message for commands that require it. An
+ acknowlege implies the command has been sucessfully executed
+ (otherwise an error message is sent).
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-29"></a><h5>Stat<var>&uarr;</var></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">filename</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ The request ID is an ID decided by the client so that it can
+ identify the answer.
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-30"></a><h5>StatR<var>&darr;</var></h5>Response to the
+ <strong>Stat</strong> message.
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">arr(int32)</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">implemented interface</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ Common interface numbers are to be found in section <a href="#interface-nums">3.10.3</a>.
+ </p>
+ <p>
+ If a <strong>Stat</strong> query on an object gives a certain list
+ of interfaces, then when connecting to the object at least all these
+ interfaces must be included in the server's <strong>Hello</strong>
+ message as supported interfaces.
+ </p>
+ </div>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ Note that some interface numbers correspond to actions that can be
+ done on the object from the connection where the object exists (e.g.
+ : symbolic link, directory), and others correspond to actions that
+ can be performed after attaching to the object (e.g. file, terminal,
+ &hellip;)
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-31"></a><h5>List<var>&uarr;</var></h5>
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">first entry number</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">number of entries requested</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">base path string</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+ <a id="auto-32"></a><h5>ListR<var>&darr;</var></h5>Response to the
+ <strong>List</strong> message.
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ One message is passed for each entry in the requested range:
+ </p>
+ </div>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">entry number</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">entry name</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ After the directory has finished being enumerated, a supplementary
+ entry is given with entry number the last valid entry number plus
+ one and an empty entry name. This supplementary entry is only given
+ if its (ficious) entry number is included in the range requested by
+ the client.
+ </p>
+ </div>
+ </p>
+ <p>
+ Possible extension : combine List and Stat so that when the answer to
+ List is given, information is also given on the object's implemented
+ interfaces.
+ </p>
+ <p>
+ <a id="auto-33"></a><h5>Attach<var>&uarr;</var></h5>
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">filename</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+ <a id="auto-34"></a><h5>Attached<var>&darr;</var></h5>Response to the
+ <strong>Attach</strong> command.
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">handle</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ (the handle, ie the ressource descriptor, is attributed by the
+ server)
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-35"></a><h5>Send<var>&uarr;</var></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">*</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">handle</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">payload</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ This message does not expect a response.
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-36"></a><h5>Recieve<var>&darr;</var></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ Spontaneous server message indicating some data is sent by an
+ attached ressource. This message does not expect a response.
+ </p>
+ </div>
+ <p>
+
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">*</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">handle</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">payload</td>
+ </tr></tbody>
+ </table>
+ </div>
+ </p>
+ <p>
+ <a id="auto-37"></a><h5>Detach<var>&uarr;</var></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">handle</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ This message does not expect a response.
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-38"></a><h5>Detached<var>&darr;</var></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ Spontaneous server message indicating the object has been detached.
+ </p>
+ </div>
+ <p>
+
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">handle</td>
+ </tr></tbody>
+ </table>
+ </div>
+ </p>
+ <p>
+ <a id="auto-39"></a><h5><strong>Create<var>&uarr;</var></strong></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">arr(int32)</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">needed interfaces</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">path</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ A create request is accompanied with a list of needed interfaces
+ that direct the server into creating the corresponding type of
+ object (e.g. an empty object to be served, a directory, a file,
+ &hellip;)
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-40"></a><h5>Created<var>&darr;</var></h5>Response to the
+ <strong>Create</strong> command.
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">arr(int32)</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">implemented interfaces</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ Signals that the object has been created, and has corresponding
+ interfaces associated to it.
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-41"></a><h5>Delete<var>&uarr;</var><tt class="verbatim"></tt></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">path</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ This message expects a standard <strong>Ack</strong> response
+ message.
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-42"></a><h5>Link<var>&uarr;</var></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">destination path</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">link path</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ This message expects a standard <strong>Ack</strong> response
+ message.
+ </p>
+ <p>
+ Semantics of the link object:
+ </p>
+ </div>
+ <div style="margin-left: 35.145870328812px">
+ <ul>
+ <li>
+ <p>
+ attaching or serving on this objects corresponds to resolving
+ the linked path and attaching/serving on the linked object
+ </p>
+ </li>
+ <li>
+ <p>
+ stating the link will stat the linked object and add as an
+ implemented interface the &ldquo;this is a symlink&rdquo;
+ information
+ </p>
+ </li>
+ <li>
+ <p>
+ directory listings follow links
+ </p>
+ </li>
+ <li>
+ <p>
+ deleting the link will not delete the original file but only the
+ link
+ </p>
+ </li>
+ </ul>
+ </div>
+ </p>
+ <p>
+ <a id="auto-43"></a><h5>ReadLink<var>&uarr;</var></h5>
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">path</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+ <a id="auto-44"></a><h5>ReadLinkR<var>&darr;</var></h5>Response to the
+ <strong>ReadLink</strong> message.
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">link description</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ This will only return the first level of linking, ie the link data
+ directly associated to the link object.
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-45"></a><h5>Rename<var>&uarr;</var></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">original path</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">new path</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ This message expects a standard <strong>Ack</strong> response
+ message.
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-46"></a><h5>Serve<var>&uarr;</var></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">array(int32)</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">request ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">path</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">announced interfaces</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ This message is a request for the client to be a reverse server to
+ an object. The response message to this message is an
+ <strong>Attached</strong> message. The handle attributed to the
+ served object is known as the <em>server handle</em> and is used in
+ the <strong>Incoming</strong> and <strong>Detach</strong> messages.
+ </p>
+ <p>
+ To stop serving an object, the client simply sends a
+ <strong>Detach</strong> command on the server handle. The semantics
+ is that all connections that have been openned through the
+ reverse-served object are preserved when the object stops being
+ served, and an individual <strong>Detach</strong> message must be
+ sent to all of them if we want to close them.
+ </p>
+ </div>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ The <em>announced interfaces</em> serves to answer
+ <strong>Stat</strong> messages on the object while we are serving
+ it.
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-47"></a><h5>Incoming<var>&darr;</var></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">server handle</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">client hande</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ This message is sent by the server when another client wishes to
+ attach to an object reverse-served by this client. The server handle
+ is the one given as a response to the <strong>Serve</strong>
+ message. The client handle is a handle associated to the connection.
+ The reverse server may reject the connection by issuing a
+ <strong>Detach</strong> command on the client handle, or may accept
+ it using the <strong>Accept</strong> message given below.
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-48"></a><h5>Accept<var>&uarr;</var></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">client handle</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ Once a connection has been accepted, the reverse server may at any
+ moment close it by sending a <strong>Detach</strong> command on the
+ corresponding client handle.
+ </p>
+ </div>
+ </p>
+ <h3 id="auto-49">3.4<span style="margin-left: 1em"></span>Big message protocol</h3>
+ <p>
+ To be defined. Is it really usefull? What role exactly does it have? Can
+ it implement repetition in the case where the message hasn't been
+ acknowledge? &hellip;
+ </p>
+ <p>
+ Reserved message IDs : [20,30) and [10020,10030).
+ </p>
+ <h3 id="auto-50">3.5<span style="margin-left: 1em"></span>Authentification and rights managment
+ commands</h3>
+ <p>
+ <a id="auto-51"></a><h5>Authenticate<var>&uarr;</var></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">*</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">message ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">authentification method</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">authentification data</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ Used to gain access using credentials (user/password, token,
+ &hellip;). Response messages are standard <strong>Ack</strong> on
+ success or <strong>Error</strong> on failure. Autentification
+ methods include :
+ </p>
+ </div>
+ <div style="margin-left: 35.145870328812px">
+ <ul>
+ <li>
+ <p>
+ 1 : user + password
+ </p>
+ </li>
+ <li>
+ <p>
+ 2 : token
+ </p>
+ </li>
+ </ul>
+ </div>
+ </p>
+ <p>
+ <a id="auto-52"></a><h5>NewToken<var>&uarr;</var></h5>
+ </p>
+ <p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">message ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">path</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <p>
+ Requests the server to create an authentication token for accessing
+ a given object with the privileges of the connected client. Once the
+ token has been returned, it may be transmitted to another client so
+ that that client will use it to gain same access to the object.
+ </p>
+ </div>
+ </p>
+ <p>
+ <a id="auto-53"></a><h5>NewTokenR<var>&darr;</var></h5>Response to the
+ <strong>NewToken</strong> message.
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.1em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">int32</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-top: 1px solid">str</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center; border-left: 1px solid">header</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">message ID</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; text-align: center">token</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+ TODO : request account creation, manage user groups and ACLs, &hellip;
+ </p>
+ <h3 id="auto-54">3.6<span style="margin-left: 1em"></span>File protocol</h3>
+ <p>
+ Client messages [50,100) ; server messages [10050,10100). TODO
+ </p>
+ <h3 id="auto-55">3.7<span style="margin-left: 1em"></span>UI protocols</h3>
+ <p>
+ Client messages [100,200) and server messages [10100,10200).
+ </p>
+ <h4 id="auto-56">3.7.1<span style="margin-left: 1em"></span>Terminal protocol</h4>
+ <p>
+ TODO
+ </p>
+ <h4 id="auto-57">3.7.2<span style="margin-left: 1em"></span>Graphical user interface protocol</h4>
+ <p>
+ TODO
+ </p>
+ <h3 id="auto-58">3.8<span style="margin-left: 1em"></span>Communication protocols</h3>
+ <p>
+ Client messages [200,300) and server messages [10200,10300).
+ </p>
+ <h4 id="auto-59">3.8.1<span style="margin-left: 1em"></span>Email and newsgroups protocol</h4>
+ <p>
+ Client messages [200,220), server messages
+ [10200<var>&#x2063;</var>,10220).
+ </p>
+ <h4 id="auto-60">3.8.2<span style="margin-left: 1em"></span>Instant messaging protocol</h4>
+ <p>
+ Client messages [220,250), server messages
+ [10220<var>&#x2063;</var>,10250).
+ </p>
+ <h3 id="auto-61">3.9<span style="margin-left: 1em"></span>Other protocols</h3>
+ <p>
+ Protocols not discussed in this specification may use client messages
+ with type IDs [1000,10000) and server messages [11000,20000). Overlaps
+ between several protocols are allowed : the information about
+ implemented interfaces for an object is meant to disambiguate such
+ situations.
+ </p>
+ <h3 id="auto-62">3.10<span style="margin-left: 1em"></span>Table of IDs</h3>
+ <p>
+ The tables presented in this section give the number associated to the
+ message types. These tables are the reference on the subject ; any
+ information found somewhere else is wrong if it is not the same as found
+ here. This is for protocol version 1.
+ </p>
+ <h4 id="auto-63"><a id="type-nums"></a>3.10.1<span style="margin-left: 1em"></span>Message types</h4>
+ <p>
+ <a id="auto-64"></a><h5>Base protocol</h5>
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -6.05em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid; border-top: 1px solid">message</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 1px solid"><var>&uarr;</var> id</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 1px solid"><var>&darr;</var> id</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 0 solid; border-bottom: 0 solid; border-top: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 1px solid">message</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 1px solid"><var>&uarr;</var> id</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 1px solid"><var>&darr;</var> id</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid"><strong>Hello</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">0</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">10000</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 0 solid; border-bottom: 0 solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"><strong>Stat</strong> / <strong>StatR</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">10</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">10010</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid"><strong>Error</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">10001</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 0 solid; border-bottom: 0 solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"><strong>List</strong> / <strong>ListR</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">11</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">10011</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid"><strong>Ack</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">10002</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 0 solid; border-bottom: 0 solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"><strong>Create</strong> / <strong>Created</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">12</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">10012</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 0 solid; border-bottom: 0 solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"><strong>Delete</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">13</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid"><strong>Attach</strong> / <strong>Attached</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">5</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">10005</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 0 solid; border-bottom: 0 solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"><strong>Rename</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">14</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid"><strong>Send</strong> / <strong>Recieve</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">6</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">10006</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 0 solid; border-bottom: 0 solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"><strong>Link</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">15</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid"><strong>Detach</strong> / <strong>Detached</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">7</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">10007</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 0 solid; border-bottom: 0 solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"><strong>ReadLink</strong> /
+ <strong>ReadLinkR</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">16</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">10016</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid"><strong>Serve</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">8</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 0 solid; border-bottom: 0 solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid"><strong>Incoming</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">10008</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 0 solid; border-bottom: 0 solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid"><strong>Accept</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">9</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 0 solid; border-bottom: 0 solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+ <a id="auto-65"></a><h5>Authentication &amp; privileges</h5>
+ </p>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -1.65em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid; border-top: 1px solid">message</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 1px solid"><var>&uarr;</var> id</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 1px solid"><var>&darr;</var> id</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid"><strong>Authenticate</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">30</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"></td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid"><strong>NewToken</strong> /
+ <strong>NewTokenR</strong></td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">31</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">10031</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <h4 id="auto-66"><a id="error-nums"></a>3.10.2<span style="margin-left: 1em"></span>Error messages</h4>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -6.05em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid; border-top: 1px solid">id</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 1px solid">cause</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">1</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">Incompatible versions</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">2</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">Command/interface not implemented</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">3</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">Invalid request (e.g. : out of bounds)</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">4</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">Invalid handle</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">5</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">Attach request rejected</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">6</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">Action impossible because object is in use (cannot
+ delete, &hellip;)</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">7</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">No such object (invalid path)</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">8</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">Could not resolve link</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">9</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">Incorrect credentials</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">10</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">Unauthorized</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <h4 id="auto-67">3.10.3<span style="margin-left: 1em"></span>Object interfaces<a id="interface-nums"></a></h4>
+ <div style="margin-left: 35.145870328812px">
+ <table style="display: inline; vertical-align: -4.95em">
+ <tbody><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid; border-top: 1px solid">id</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 1px solid">name</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-top: 1px solid">must implement messages</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">0</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">servable</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"><strong>Serve</strong>, <strong>Accept</strong>,
+ <strong>Incoming</strong></td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">1</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">non-NARP inside</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">once attached, inside data is arbitrary</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">2</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">NARP service</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">once attached, inside data is a NARP service (ie has
+ objects, &hellip;)</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">3</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">enumerable</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"><strong>List</strong>, <strong>ListR</strong></td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">4</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">is symlink</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid"><strong>ReadLink</strong>,
+ <strong>ReadLinkR</strong></td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">10</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">file</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">once attached, file semantics</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">11</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">terminal</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">once attached, terminal semantics</td>
+ </tr><tr>
+ <td style="border-right: 1px solid; border-bottom: 1px solid; border-left: 1px solid">12</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">graphics window</td>
+ <td style="border-right: 1px solid; border-bottom: 1px solid">once attached, GUI semantics</td>
+ </tr></tbody>
+ </table>
+ </div>
+ <p>
+ <a id="auto-68"></a><h5>Servable</h5>This interface specifies that the object is
+ currently an empty object waiting for someone to issue a
+ <strong>Serve</strong> command on it, providing it with an
+ implementation of some interfaces.
+ </p>
+ <p>
+ <a id="auto-69"></a><h5>non-NARP inside</h5>This interfaces indicates that once
+ attached to the object, the messages sent/recieved to it are not
+ supposed to be NARP format but any arbitrary format. If this interface
+ is not specified, then it is expected that the messages transmitted will
+ follow the general NARP protocol (message format, standard
+ hello/ack/error messages).
+ </p>
+ <p>
+ <a id="auto-70"></a><h5>NARP service</h5>This interface indicates that once
+ attached to the object, one can have access to a new NARP namespace
+ where at least the following operations are supported :
+ <strong>Stat</strong>, <strong>Attach</strong>, <strong>Send</strong>,
+ <strong>Recieve</strong>, <strong>Detach</strong>. Additionnal messages
+ may or may not be supported.
+ </p>
+ <h2 id="auto-71">4<span style="margin-left: 1em"></span>Architecture of a NARP implementation in
+ OCaml or Haskell</h2>
+ <p>
+ An asynchronous implementation can be easily programmed in functionnal
+ languages such as OCaml or Haskell, using closures as continuations for
+ <em>what to do when a (response) message arrives</em>.
+ </p>
+ <p>
+ TODO
+ </p>
+ <h2 id="auto-72">5<span style="margin-left: 1em"></span>Using NARP to design an Operating System</h2>
+ <p>
+ When designing the NARP protocol, we had in mind that it would be
+ possible to use it in a new operating system design at many levels :
+ access to devices, process management, memory management, filesystems,
+ IPC, GUI, &hellip;
+ </p>
+ <p>
+ Kernel helpers could be developped so that a part of the NARP
+ multiplexing and demultiplexing takes place in kernel land, before
+ messages are passed to userspace. This would allow the simplification of
+ useless mux-demux chains taking place on the same machine. Another
+ possible helper would be to map a virtual memory region to a NARP
+ ressource implementing a standard filing protocol, much as memory mapped
+ files in standard OSes (only this would work with arbitrary ressources).
+ </p>
+ <p>
+ TODO
+ </p>
+ </body>
+</html> \ No newline at end of file
diff --git a/doc/narp.pdf b/doc/narp.pdf
index 1804485..26ba059 100644
--- a/doc/narp.pdf
+++ b/doc/narp.pdf
Binary files differ
diff --git a/doc/narp.tm b/doc/narp.tm
index a992ffe..8fe4a04 100644
--- a/doc/narp.tm
+++ b/doc/narp.tm
@@ -25,7 +25,7 @@
<item>Naming of networked machines (with IP adresses and DNS records)
<item>Naming of internet ressources over protocols such as HTTP, IMAP,
- ...
+ IRC, specfic web services, ...
</itemize>
We propose here a novel architecture with the purpose of unifying all the
@@ -49,8 +49,9 @@
fundamental operation that we call <em|recursive multiplexing>, or just
<em|multiplexing>.
- The NARP protocol is meant to include a variety of different operations
- that may or may not be implemented by a specific NARP server.
+ The NARP protocol is a client/server protocol meant to include a variety of
+ different operations that may or may not be implemented by a specific NARP
+ server.
<section|High-level overview>
@@ -63,7 +64,7 @@
<item><em|query> : get information on a ressource identified by name
<item><em|list> : know the names of ressources presented by the service
- (eventually in a specific sub-path)
+ (possibly in a specific sub-path)
<item><em|attach> : get an object interface for accessing a ressource,
identified by name
@@ -107,15 +108,9 @@
<item><verbatim|detach> : close a descriptor and detach from a ressource
- <item><verbatim|create> : requests the creation of a ressource in the
- namespace
-
- <item><verbatim|delete> : requests the deletion of a ressource in the
- namespace
-
- <item><verbatim|link> : create a link for an object under another name
- (these are always symbolic links, and are independent of the pointed
- ressource)
+ <item><verbatim|create>, <verbatim|delete>, <verbatim|rename>,
+ <verbatim|link> : requests the creation or modification of a ressource in
+ the namespace
</itemize>
The server may also at any moment send a message, including:
@@ -141,7 +136,8 @@
object on the server and handles all the requests arriving to this object
(therefore the initial NARP server only serves as a relay between the new
server and its clients<\footnote>
- Research is to be done on shortcutting mechanisms
+ Research is to be done on shortcutting mechanisms in specific situations
+ where too many levels of recursion cause a performance issue.
</footnote>). A client wishing to act as a reverse object server may use
the following commands:
@@ -228,7 +224,7 @@
The message size in the NARP protocol is limited to 64kb, and recommended
not to exceed 4kb+header (4kb is the size of a memory page on many
- machines). Therefore a possibilith would be for the NARP protocol to
+ machines). Therefore a possibility would be for the NARP protocol to
include a way to transmit big messages by fragmenting them into small
messages. Optionnal error correction may be included. This can be useful
for example when using <verbatim|put> or <verbatim|get> on large files, or
@@ -236,7 +232,7 @@
of a large fragmented message may have a specific implementation allowing
the reciever to work with the partial data as soon as it starts arriving
and not having to wait for the whole message to be transmitted and
- buffered.
+ buffered. Research is yet to be done on this specific subject.
<subsection|Permissions>
@@ -247,6 +243,13 @@
delegate it's privileges on a given object to another client. Advanced
right management functionnalities are to be discussed.
+ <subsection|Reliability concerns>
+
+ The NARP protocol relies on the fact that when transmitting a message, the
+ other end will recieve it. It is nevertheless recommended that NARP
+ implementations support the repeating of messages if an expected
+ acknowlegment has not arrived after a given delay.
+
<subsection|Example NARP servers>
<subsubsection|Virtual NARP server (i.e. NARP router)>
@@ -323,8 +326,8 @@
A protocol message is given in the following form:
<block*|<tformat|<table|<row|<cell|element type>|<cell|element
- type>|<cell|<math|\<ldots\>>>|<cell|element type>>|<row|<cell|element
- description>|<cell|element description>|<cell|<math|\<ldots\>.>>|<cell|element
+ type>|<cell|...>|<cell|element type>>|<row|<cell|element
+ description>|<cell|element description>|<cell|...>|<cell|element
description>>>>>
The following element types apply:
@@ -374,9 +377,9 @@
The core NARP protocol is meant for small size and rapidity (so that many
layers can be encapsulated with minimal overhead), therefore no
- acknowlegment is to be sent for most messages. Specific interfaces for
- objects are responsible for making sure messages have been transmitted
- correctly.
+ acknowlegment is to be sent for recursive send/recieve messages. Other
+ messages usually imply some kind of action or getting of information,
+ therefore an acknowlegment or an error is usually sent as a response.
<paragraph|Hello<math|\<uparrow\>\<downarrow\>>>
@@ -425,11 +428,9 @@
answer.
</indent>
- <paragraph|StatR<math|\<downarrow\>>>
+ <paragraph|StatR<math|\<downarrow\>>>Response to the <strong|Stat> message.
<\indent>
- Response to the <strong|Stat> message.
-
<block*|<tformat|<table|<row|<cell|>|<cell|int32>|<cell|arr(int32)>>|<row|<cell|header>|<cell|request
ID>|<cell|implemented interface>>>>>
@@ -454,7 +455,7 @@
requested>|<cell|base path string>>>>>
</indent>
- <paragraph|ListR<math|\<downarrow\>>>
+ <paragraph|ListR<math|\<downarrow\>>>Response to the <strong|List> message.
<\indent>
One message is passed for each entry in the requested range:
@@ -478,7 +479,8 @@
ID>|<cell|filename>>>>>
</indent>
- <paragraph|Attached<math|\<downarrow\>>>
+ <paragraph|Attached<math|\<downarrow\>>>Response to the <strong|Attach>
+ command.
<\indent>
<block*|<tformat|<table|<row|<cell|>|<cell|int32>|<cell|int32>>|<row|<cell|header>|<cell|request
@@ -491,12 +493,15 @@
<\indent>
<block*|<tformat|<table|<row|<cell|>|<cell|int32>|<cell|*>>|<row|<cell|header>|<cell|handle>|<cell|payload>>>>>
+
+ This message does not expect a response.
</indent>
<paragraph|Recieve<math|\<downarrow\>>>
<\indent>
- Spontaneous server message indicating some data is sent by object.
+ Spontaneous server message indicating some data is sent by an attached
+ ressource. This message does not expect a response.
<block*|<tformat|<table|<row|<cell|>|<cell|int32>|<cell|*>>|<row|<cell|header>|<cell|handle>|<cell|payload>>>>>
</indent>
@@ -505,6 +510,8 @@
<\indent>
<block*|<tformat|<table|<row|<cell|>|<cell|int32>>|<row|<cell|header>|<cell|handle>>>>>
+
+ This message does not expect a response.
</indent>
<paragraph|Detached<math|\<downarrow\>>>
@@ -526,7 +533,8 @@
empty object to be served, a directory, a file, ...)
</indent>
- <paragraph|Created<math|\<downarrow\>>>
+ <paragraph|Created<math|\<downarrow\>>>Response to the <strong|Create>
+ command.
<\indent>
<block*|<tformat|<table|<row|<cell|>|<cell|int32>|<cell|arr(int32)>>|<row|<cell|header>|<cell|request
@@ -576,7 +584,8 @@
ID>|<cell|path>>>>>
</indent>
- <paragraph|ReadLinkR<math|\<downarrow\>>>
+ <paragraph|ReadLinkR<math|\<downarrow\>>>Response to the <strong|ReadLink>
+ message.
<\indent>
<block*|<tformat|<table|<row|<cell|>|<cell|int32>|<cell|str>>|<row|<cell|header>|<cell|request
@@ -598,19 +607,23 @@
<paragraph|Serve<math|\<uparrow\>>>
<\indent>
- <block*|<tformat|<table|<row|<cell|>|<cell|int32>|<cell|str>>|<row|<cell|header>|<cell|request
- ID>|<cell|path>>>>>
+ <block*|<tformat|<table|<row|<cell|>|<cell|int32>|<cell|str>|<cell|array(int32)>>|<row|<cell|header>|<cell|request
+ ID>|<cell|path>|<cell|announced interfaces>>>>>
This message is a request for the client to be a reverse server to an
object. The response message to this message is an <strong|Attached>
message. The handle attributed to the served object is known as the
- <em|server handle> and is used in the following few messages.
+ <em|server handle> and is used in the <strong|Incoming> and
+ <strong|Detach> messages.
To stop serving an object, the client simply sends a <strong|Detach>
command on the server handle. The semantics is that all connections that
have been openned through the reverse-served object are preserved when
the object stops being served, and an individual <strong|Detach> message
must be sent to all of them if we want to close them.
+
+ The <em|announced interfaces> serves to answer <strong|Stat> messages on
+ the object while we are serving it.
</indent>
<paragraph|Incoming<math|\<downarrow\>>>
@@ -678,18 +691,19 @@
client will use it to gain same access to the object.
</indent>
- <paragraph|NewTokenR<math|\<downarrow\>>>
+ <paragraph|NewTokenR<math|\<downarrow\>>>Response to the <strong|NewToken>
+ message.
<\indent>
<block*|<tformat|<table|<row|<cell|>|<cell|int32>|<cell|str>>|<row|<cell|header>|<cell|message
ID>|<cell|token>>>>>
</indent>
- More TODO : request account creation, manage user groups and ACLs, ...
+ TODO : request account creation, manage user groups and ACLs, ...
<subsection|File protocol>
- Client messages [50,100) ; server messages [10050,10100).
+ Client messages [50,100) ; server messages [10050,10100). TODO
<subsection|UI protocols>
@@ -777,20 +791,57 @@
<\indent>
<block|<tformat|<table|<row|<cell|id>|<cell|name>|<cell|must implement
messages>>|<row|<cell|0>|<cell|servable>|<cell|<strong|Serve>,
- <strong|Accept>, <strong|Incoming>>>|<row|<cell|1>|<cell|NARP
- service>|<cell|once attached, inside data is also NARP
- protocol>>|<row|<cell|2>|<cell|non-NARP socket>|<cell|once attached,
- inside data is arbitrary>>|<row|<cell|3>|<cell|enumerable>|<cell|<strong|List>,
+ <strong|Accept>, <strong|Incoming>>>|<row|<cell|1>|<cell|non-NARP
+ inside>|<cell|once attached, inside data is
+ arbitrary>>|<row|<cell|2>|<cell|NARP service>|<cell|once attached, inside
+ data is a NARP service (ie has objects,
+ ...)>>|<row|<cell|3>|<cell|enumerable>|<cell|<strong|List>,
<strong|ListR>>>|<row|<cell|4>|<cell|is symlink>|<cell|<strong|ReadLink>,
<strong|ReadLinkR>>>|<row|<cell|10>|<cell|file>|<cell|once attached, file
semantics>>|<row|<cell|11>|<cell|terminal>|<cell|once attached, terminal
semantics>>|<row|<cell|12>|<cell|graphics window>|<cell|once attached,
- graphics semantics>>>>>
+ GUI semantics>>>>>
</indent>
+ <paragraph|Servable>This interface specifies that the object is currently
+ an empty object waiting for someone to issue a <strong|Serve> command on
+ it, providing it with an implementation of some interfaces.
+
+ <paragraph|non-NARP inside>This interfaces indicates that once attached to
+ the object, the messages sent/recieved to it are not supposed to be NARP
+ format but any arbitrary format. If this interface is not specified, then
+ it is expected that the messages transmitted will follow the general NARP
+ protocol (message format, standard hello/ack/error messages).
+
+ <paragraph|NARP service>This interface indicates that once attached to the
+ object, one can have access to a new NARP namespace where at least the
+ following operations are supported : <strong|Stat>, <strong|Attach>,
+ <strong|Send>, <strong|Recieve>, <strong|Detach>. Additionnal messages may
+ or may not be supported.
+
<section|Architecture of a NARP implementation in OCaml or Haskell>
- \;
+ An asynchronous implementation can be easily programmed in functionnal
+ languages such as OCaml or Haskell, using closures as continuations for
+ <em|what to do when a (response) message arrives>.
+
+ TODO
+
+ <section|Using NARP to design an Operating System>
+
+ When designing the NARP protocol, we had in mind that it would be possible
+ to use it in a new operating system design at many levels : access to
+ devices, process management, memory management, filesystems, IPC, GUI, ...
+
+ Kernel helpers could be developped so that a part of the NARP multiplexing
+ and demultiplexing takes place in kernel land, before messages are passed
+ to userspace. This would allow the simplification of useless mux-demux
+ chains taking place on the same machine. Another possible helper would be
+ to map a virtual memory region to a NARP ressource implementing a standard
+ filing protocol, much as memory mapped files in standard OSes (only this
+ would work with arbitrary ressources).
+
+ TODO
</body>
<\initial>
@@ -803,79 +854,84 @@
<\collection>
<associate|auto-1|<tuple|1|1>>
<associate|auto-10|<tuple|2.5.3|3>>
- <associate|auto-11|<tuple|2.5.4|4>>
+ <associate|auto-11|<tuple|2.5.4|3>>
<associate|auto-12|<tuple|2.6|4>>
<associate|auto-13|<tuple|2.7|4>>
<associate|auto-14|<tuple|2.8|4>>
- <associate|auto-15|<tuple|2.8.1|4>>
- <associate|auto-16|<tuple|2.8.2|4>>
- <associate|auto-17|<tuple|2.8.3|4>>
- <associate|auto-18|<tuple|2.8.4|5>>
- <associate|auto-19|<tuple|2.8.5|5>>
+ <associate|auto-15|<tuple|2.9|4>>
+ <associate|auto-16|<tuple|2.9.1|4>>
+ <associate|auto-17|<tuple|2.9.2|4>>
+ <associate|auto-18|<tuple|2.9.3|4>>
+ <associate|auto-19|<tuple|2.9.4|5>>
<associate|auto-2|<tuple|2|1>>
- <associate|auto-20|<tuple|2.8.6|5>>
- <associate|auto-21|<tuple|3|5>>
- <associate|auto-22|<tuple|3.1|5>>
- <associate|auto-23|<tuple|3.2|5>>
- <associate|auto-24|<tuple|3.3|6>>
- <associate|auto-25|<tuple|3.3.0.1|6>>
- <associate|auto-26|<tuple|3.3.0.2|6>>
- <associate|auto-27|<tuple|3.3.0.3|7>>
- <associate|auto-28|<tuple|3.3.0.4|7>>
- <associate|auto-29|<tuple|3.3.0.5|7>>
+ <associate|auto-20|<tuple|2.9.5|5>>
+ <associate|auto-21|<tuple|2.9.6|5>>
+ <associate|auto-22|<tuple|3|5>>
+ <associate|auto-23|<tuple|3.1|5>>
+ <associate|auto-24|<tuple|3.2|5>>
+ <associate|auto-25|<tuple|3.3|6>>
+ <associate|auto-26|<tuple|3.3.0.1|6>>
+ <associate|auto-27|<tuple|3.3.0.2|6>>
+ <associate|auto-28|<tuple|3.3.0.3|6>>
+ <associate|auto-29|<tuple|3.3.0.4|6>>
<associate|auto-3|<tuple|2.1|1>>
- <associate|auto-30|<tuple|3.3.0.6|7>>
- <associate|auto-31|<tuple|3.3.0.7|7>>
- <associate|auto-32|<tuple|3.3.0.8|8>>
- <associate|auto-33|<tuple|3.3.0.9|8>>
- <associate|auto-34|<tuple|3.3.0.10|8>>
- <associate|auto-35|<tuple|3.3.0.11|8>>
- <associate|auto-36|<tuple|3.3.0.12|8>>
- <associate|auto-37|<tuple|3.3.0.13|8>>
- <associate|auto-38|<tuple|3.3.0.14|8>>
- <associate|auto-39|<tuple|3.3.0.15|8>>
+ <associate|auto-30|<tuple|3.3.0.5|6>>
+ <associate|auto-31|<tuple|3.3.0.6|7>>
+ <associate|auto-32|<tuple|3.3.0.7|7>>
+ <associate|auto-33|<tuple|3.3.0.8|7>>
+ <associate|auto-34|<tuple|3.3.0.9|7>>
+ <associate|auto-35|<tuple|3.3.0.10|7>>
+ <associate|auto-36|<tuple|3.3.0.11|7>>
+ <associate|auto-37|<tuple|3.3.0.12|7>>
+ <associate|auto-38|<tuple|3.3.0.13|8>>
+ <associate|auto-39|<tuple|3.3.0.14|8>>
<associate|auto-4|<tuple|2.2|2>>
- <associate|auto-40|<tuple|3.3.0.16|8>>
- <associate|auto-41|<tuple|3.3.0.17|9>>
- <associate|auto-42|<tuple|3.3.0.18|9>>
- <associate|auto-43|<tuple|3.3.0.19|9>>
- <associate|auto-44|<tuple|3.3.0.20|9>>
- <associate|auto-45|<tuple|3.3.0.21|9>>
- <associate|auto-46|<tuple|3.3.0.22|9>>
- <associate|auto-47|<tuple|3.3.0.23|10>>
- <associate|auto-48|<tuple|3.4|10>>
- <associate|auto-49|<tuple|3.5|10>>
+ <associate|auto-40|<tuple|3.3.0.15|8>>
+ <associate|auto-41|<tuple|3.3.0.16|8>>
+ <associate|auto-42|<tuple|3.3.0.17|8>>
+ <associate|auto-43|<tuple|3.3.0.18|8>>
+ <associate|auto-44|<tuple|3.3.0.19|8>>
+ <associate|auto-45|<tuple|3.3.0.20|9>>
+ <associate|auto-46|<tuple|3.3.0.21|9>>
+ <associate|auto-47|<tuple|3.3.0.22|9>>
+ <associate|auto-48|<tuple|3.3.0.23|9>>
+ <associate|auto-49|<tuple|3.4|9>>
<associate|auto-5|<tuple|2.3|2>>
- <associate|auto-50|<tuple|3.5.0.24|10>>
- <associate|auto-51|<tuple|3.5.0.25|10>>
- <associate|auto-52|<tuple|3.5.0.26|10>>
- <associate|auto-53|<tuple|3.6|10>>
- <associate|auto-54|<tuple|3.7|10>>
- <associate|auto-55|<tuple|3.7.1|10>>
- <associate|auto-56|<tuple|3.7.2|10>>
- <associate|auto-57|<tuple|3.8|11>>
- <associate|auto-58|<tuple|3.8.1|11>>
- <associate|auto-59|<tuple|3.8.2|11>>
- <associate|auto-6|<tuple|2.4|3>>
- <associate|auto-60|<tuple|3.9|11>>
- <associate|auto-61|<tuple|3.10|?>>
- <associate|auto-62|<tuple|3.10.1|?>>
- <associate|auto-63|<tuple|3.10.1.1|?>>
- <associate|auto-64|<tuple|3.10.1.2|?>>
- <associate|auto-65|<tuple|3.10.2|?>>
- <associate|auto-66|<tuple|3.10.3|?>>
- <associate|auto-67|<tuple|4|?>>
+ <associate|auto-50|<tuple|3.5|9>>
+ <associate|auto-51|<tuple|3.5.0.24|9>>
+ <associate|auto-52|<tuple|3.5.0.25|10>>
+ <associate|auto-53|<tuple|3.5.0.26|10>>
+ <associate|auto-54|<tuple|3.6|10>>
+ <associate|auto-55|<tuple|3.7|10>>
+ <associate|auto-56|<tuple|3.7.1|10>>
+ <associate|auto-57|<tuple|3.7.2|10>>
+ <associate|auto-58|<tuple|3.8|10>>
+ <associate|auto-59|<tuple|3.8.1|10>>
+ <associate|auto-6|<tuple|2.4|2>>
+ <associate|auto-60|<tuple|3.8.2|10>>
+ <associate|auto-61|<tuple|3.9|10>>
+ <associate|auto-62|<tuple|3.10|10>>
+ <associate|auto-63|<tuple|3.10.1|11>>
+ <associate|auto-64|<tuple|3.10.1.1|11>>
+ <associate|auto-65|<tuple|3.10.1.2|11>>
+ <associate|auto-66|<tuple|3.10.2|11>>
+ <associate|auto-67|<tuple|3.10.3|11>>
+ <associate|auto-68|<tuple|3.10.3.1|11>>
+ <associate|auto-69|<tuple|3.10.3.2|11>>
<associate|auto-7|<tuple|2.5|3>>
+ <associate|auto-70|<tuple|3.10.3.3|12>>
+ <associate|auto-71|<tuple|4|12>>
+ <associate|auto-72|<tuple|5|12>>
<associate|auto-8|<tuple|2.5.1|3>>
<associate|auto-9|<tuple|2.5.2|3>>
- <associate|error-nums|<tuple|3.10.2|?>>
- <associate|footnote-1|<tuple|1|3>>
+ <associate|error-nums|<tuple|3.10.2|11>>
+ <associate|footnote-1|<tuple|1|2>>
<associate|footnote-2|<tuple|2|?>>
- <associate|footnr-1|<tuple|1|3>>
+ <associate|footnr-1|<tuple|1|2>>
<associate|footnr-2|<tuple|2|?>>
- <associate|interface-nums|<tuple|3.10.3|?>>
- <associate|rev-sock|<tuple|2.4|3>>
- <associate|type-nums|<tuple|3.10.1|?>>
+ <associate|interface-nums|<tuple|3.10.3|11>>
+ <associate|rev-sock|<tuple|2.4|2>>
+ <associate|type-nums|<tuple|3.10.1|11>>
</collection>
</references>
@@ -934,194 +990,243 @@
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
<no-break><pageref|auto-13>>
- <with|par-left|<quote|1tab>|2.8<space|2spc>Example NARP servers
+ <with|par-left|<quote|1tab>|2.8<space|2spc>Reliability concerns
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
<no-break><pageref|auto-14>>
- <with|par-left|<quote|2tab>|2.8.1<space|2spc>Virtual NARP server (i.e.
- NARP router) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <with|par-left|<quote|1tab>|2.9<space|2spc>Example NARP servers
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
<no-break><pageref|auto-15>>
- <with|par-left|<quote|2tab>|2.8.2<space|2spc>NARP file server
- <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <with|par-left|<quote|2tab>|2.9.1<space|2spc>Virtual NARP server (i.e.
+ NARP router) <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
<no-break><pageref|auto-16>>
- <with|par-left|<quote|2tab>|2.8.3<space|2spc>NARP terminal/GUI server
+ <with|par-left|<quote|2tab>|2.9.2<space|2spc>NARP file server
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
<no-break><pageref|auto-17>>
- <with|par-left|<quote|2tab>|2.8.4<space|2spc>NARP e-mail and newsgroup
- server <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <with|par-left|<quote|2tab>|2.9.3<space|2spc>NARP terminal/GUI server
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
<no-break><pageref|auto-18>>
- <with|par-left|<quote|2tab>|2.8.5<space|2spc>NARP chat server
- <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <with|par-left|<quote|2tab>|2.9.4<space|2spc>NARP e-mail and newsgroup
+ server <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
<no-break><pageref|auto-19>>
- <with|par-left|<quote|2tab>|2.8.6<space|2spc>NARP applicative server
+ <with|par-left|<quote|2tab>|2.9.5<space|2spc>NARP chat server
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
<no-break><pageref|auto-20>>
+ <with|par-left|<quote|2tab>|2.9.6<space|2spc>NARP applicative server
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-21>>
+
<vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|3<space|2spc>Specifics
of the NARP protocol> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-21><vspace|0.5fn>
+ <no-break><pageref|auto-22><vspace|0.5fn>
<with|par-left|<quote|1tab>|3.1<space|2spc>Protocol description format
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-22>>
+ <no-break><pageref|auto-23>>
<with|par-left|<quote|1tab>|3.2<space|2spc>Basic message format
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-23>>
+ <no-break><pageref|auto-24>>
<with|par-left|<quote|1tab>|3.3<space|2spc>Message list for core NARP
protocol <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-24>>
+ <no-break><pageref|auto-25>>
<with|par-left|<quote|4tab>|Hello<with|mode|<quote|math>|\<uparrow\>\<downarrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-25><vspace|0.15fn>>
+ <no-break><pageref|auto-26><vspace|0.15fn>>
<with|par-left|<quote|4tab>|Error<with|mode|<quote|math>|\<downarrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-26><vspace|0.15fn>>
+ <no-break><pageref|auto-27><vspace|0.15fn>>
<with|par-left|<quote|4tab>|Ack<with|mode|<quote|math>|\<downarrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-27><vspace|0.15fn>>
+ <no-break><pageref|auto-28><vspace|0.15fn>>
<with|par-left|<quote|4tab>|Stat<with|mode|<quote|math>|\<uparrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-28><vspace|0.15fn>>
+ <no-break><pageref|auto-29><vspace|0.15fn>>
<with|par-left|<quote|4tab>|StatR<with|mode|<quote|math>|\<downarrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-29><vspace|0.15fn>>
+ <no-break><pageref|auto-30><vspace|0.15fn>>
<with|par-left|<quote|4tab>|List<with|mode|<quote|math>|\<uparrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-30><vspace|0.15fn>>
+ <no-break><pageref|auto-31><vspace|0.15fn>>
<with|par-left|<quote|4tab>|ListR<with|mode|<quote|math>|\<downarrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-31><vspace|0.15fn>>
+ <no-break><pageref|auto-32><vspace|0.15fn>>
<with|par-left|<quote|4tab>|Attach<with|mode|<quote|math>|\<uparrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-32><vspace|0.15fn>>
+ <no-break><pageref|auto-33><vspace|0.15fn>>
<with|par-left|<quote|4tab>|Attached<with|mode|<quote|math>|\<downarrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-33><vspace|0.15fn>>
+ <no-break><pageref|auto-34><vspace|0.15fn>>
<with|par-left|<quote|4tab>|Send<with|mode|<quote|math>|\<uparrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-34><vspace|0.15fn>>
+ <no-break><pageref|auto-35><vspace|0.15fn>>
<with|par-left|<quote|4tab>|Recieve<with|mode|<quote|math>|\<downarrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-35><vspace|0.15fn>>
+ <no-break><pageref|auto-36><vspace|0.15fn>>
<with|par-left|<quote|4tab>|Detach<with|mode|<quote|math>|\<uparrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-36><vspace|0.15fn>>
+ <no-break><pageref|auto-37><vspace|0.15fn>>
<with|par-left|<quote|4tab>|Detached<with|mode|<quote|math>|\<downarrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-37><vspace|0.15fn>>
+ <no-break><pageref|auto-38><vspace|0.15fn>>
<with|par-left|<quote|4tab>|<with|font-series|<quote|bold>|math-font-series|<quote|bold>|Create<with|mode|<quote|math>|\<uparrow\>>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-38><vspace|0.15fn>>
+ <no-break><pageref|auto-39><vspace|0.15fn>>
<with|par-left|<quote|4tab>|Created<with|mode|<quote|math>|\<downarrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-39><vspace|0.15fn>>
+ <no-break><pageref|auto-40><vspace|0.15fn>>
<with|par-left|<quote|4tab>|Delete<with|mode|<quote|math>|\<uparrow\>><with|font-family|<quote|tt>|language|<quote|verbatim>|>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-40><vspace|0.15fn>>
+ <no-break><pageref|auto-41><vspace|0.15fn>>
<with|par-left|<quote|4tab>|Link<with|mode|<quote|math>|\<uparrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-41><vspace|0.15fn>>
+ <no-break><pageref|auto-42><vspace|0.15fn>>
<with|par-left|<quote|4tab>|ReadLink<with|mode|<quote|math>|\<uparrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-42><vspace|0.15fn>>
+ <no-break><pageref|auto-43><vspace|0.15fn>>
<with|par-left|<quote|4tab>|ReadLinkR<with|mode|<quote|math>|\<downarrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-43><vspace|0.15fn>>
+ <no-break><pageref|auto-44><vspace|0.15fn>>
+
+ <with|par-left|<quote|4tab>|Rename<with|mode|<quote|math>|\<uparrow\>>
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-45><vspace|0.15fn>>
<with|par-left|<quote|4tab>|Serve<with|mode|<quote|math>|\<uparrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-44><vspace|0.15fn>>
+ <no-break><pageref|auto-46><vspace|0.15fn>>
<with|par-left|<quote|4tab>|Incoming<with|mode|<quote|math>|\<downarrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-45><vspace|0.15fn>>
+ <no-break><pageref|auto-47><vspace|0.15fn>>
<with|par-left|<quote|4tab>|Accept<with|mode|<quote|math>|\<uparrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-46><vspace|0.15fn>>
+ <no-break><pageref|auto-48><vspace|0.15fn>>
<with|par-left|<quote|1tab>|3.4<space|2spc>Big message protocol
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-47>>
+ <no-break><pageref|auto-49>>
<with|par-left|<quote|1tab>|3.5<space|2spc>Authentification and rights
managment commands <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-48>>
+ <no-break><pageref|auto-50>>
<with|par-left|<quote|4tab>|Authenticate<with|mode|<quote|math>|\<uparrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-49><vspace|0.15fn>>
+ <no-break><pageref|auto-51><vspace|0.15fn>>
<with|par-left|<quote|4tab>|NewToken<with|mode|<quote|math>|\<uparrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-50><vspace|0.15fn>>
+ <no-break><pageref|auto-52><vspace|0.15fn>>
<with|par-left|<quote|4tab>|NewTokenR<with|mode|<quote|math>|\<downarrow\>>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-51><vspace|0.15fn>>
+ <no-break><pageref|auto-53><vspace|0.15fn>>
<with|par-left|<quote|1tab>|3.6<space|2spc>File protocol
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-52>>
+ <no-break><pageref|auto-54>>
<with|par-left|<quote|1tab>|3.7<space|2spc>UI protocols
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-53>>
+ <no-break><pageref|auto-55>>
<with|par-left|<quote|2tab>|3.7.1<space|2spc>Terminal protocol
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-54>>
+ <no-break><pageref|auto-56>>
<with|par-left|<quote|2tab>|3.7.2<space|2spc>Graphical user interface
protocol <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-55>>
+ <no-break><pageref|auto-57>>
<with|par-left|<quote|1tab>|3.8<space|2spc>Communication protocols
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-56>>
+ <no-break><pageref|auto-58>>
<with|par-left|<quote|2tab>|3.8.1<space|2spc>Email and newsgroups
protocol <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-57>>
+ <no-break><pageref|auto-59>>
<with|par-left|<quote|2tab>|3.8.2<space|2spc>Instant messaging protocol
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-58>>
+ <no-break><pageref|auto-60>>
<with|par-left|<quote|1tab>|3.9<space|2spc>Other protocols
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-59>>
+ <no-break><pageref|auto-61>>
+
+ <with|par-left|<quote|1tab>|3.10<space|2spc>Table of IDs
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-62>>
+
+ <with|par-left|<quote|2tab>|3.10.1<space|2spc>Message types
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-63>>
+
+ <with|par-left|<quote|4tab>|Base protocol
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-64><vspace|0.15fn>>
+
+ <with|par-left|<quote|4tab>|Authentication & privileges
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-65><vspace|0.15fn>>
+
+ <with|par-left|<quote|2tab>|3.10.2<space|2spc>Error messages
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-66>>
+
+ <with|par-left|<quote|2tab>|3.10.3<space|2spc>Object interfaces
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-67>>
+
+ <with|par-left|<quote|4tab>|Servable
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-68><vspace|0.15fn>>
+
+ <with|par-left|<quote|4tab>|non-NARP inside
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-69><vspace|0.15fn>>
+
+ <with|par-left|<quote|4tab>|NARP service
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-70><vspace|0.15fn>>
<vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|4<space|2spc>Architecture
of a NARP implementation in OCaml or Haskell>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-60><vspace|0.5fn>
+ <no-break><pageref|auto-71><vspace|0.5fn>
+
+ <vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|5<space|2spc>Using
+ NARP to design an Operating System>
+ <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
+ <no-break><pageref|auto-72><vspace|0.5fn>
</associate>
</collection>
</auxiliary> \ No newline at end of file