use the 'applications' page instead of the nonexistant 'application' page.
'applications' does contain the app dev guide content i threw together before i moved, so there is also a link to it from the api page.
This commit is contained in:
2
menu.ini
2
menu.ini
@@ -94,7 +94,7 @@ title = "ElGamal/AES+SessionTag"
|
|||||||
[how_networkcomparisons]
|
[how_networkcomparisons]
|
||||||
title = "Network comparisons"
|
title = "Network comparisons"
|
||||||
|
|
||||||
[application]
|
[applications]
|
||||||
depth = 2
|
depth = 2
|
||||||
|
|
||||||
[myi2p]
|
[myi2p]
|
||||||
|
@@ -1,3 +1,6 @@
|
|||||||
|
<p>Application developers should review the <a href="applications">application
|
||||||
|
development guide</a> for ideas about the four basic protocols for writing an
|
||||||
|
application to run over I2P:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="sam">SAM</a></li>
|
<li><a href="sam">SAM</a></li>
|
||||||
<li><a href="ministreaming">ministreaming</a></li>
|
<li><a href="ministreaming">ministreaming</a></li>
|
||||||
|
@@ -1,15 +1,14 @@
|
|||||||
<p>here's some content that might help someone who wants to put together an application developer's guide for I2P - I dont have time to polish this up before I leave, but thought it might be of use to someone. Feel free to tear this up, edit like mad, or just read it :)</p>
|
|
||||||
|
|
||||||
<h1>Application development guide</h1>
|
<h1>Application development guide</h1>
|
||||||
|
|
||||||
<h2>Why write I2P specific code?</h2>
|
<h2>Why write I2P specific code?</h2>
|
||||||
|
|
||||||
<p>Using mihi's I2PTunnel application, you can hook up application instances and
|
<p>Using mihi's <a href="i2ptunnel">I2PTunnel</a> application, you can hook up
|
||||||
have them talk to each other over standard TCP sockets. In plain client-server
|
application instances and have them talk to each other over standard TCP
|
||||||
scenarios, this is an effective technique for many simple protocols, but for
|
sockets. In plain client-server scenarios, this is an effective technique for
|
||||||
distributed systems where each peer may contact a number of other peers (instead
|
many simple protocols, but for distributed systems where each peer may contact
|
||||||
of just a single server), or for systems that expose TCP or IP information within
|
a number of other peers (instead of just a single server), or for systems that
|
||||||
the communication protocols themselves, there are problems.</p>
|
expose TCP or IP information within the communication protocols themselves,
|
||||||
|
there are problems.</p>
|
||||||
|
|
||||||
<p>With I2PTunnel, you need to explicitly instantiate an I2PTunnel for each peer
|
<p>With I2PTunnel, you need to explicitly instantiate an I2PTunnel for each peer
|
||||||
you want to contact - if you are building a distributed instant messenger
|
you want to contact - if you are building a distributed instant messenger
|
||||||
@@ -122,14 +121,13 @@ application without having to write fragmentation, resends, etc.</p>
|
|||||||
|
|
||||||
<h3>SAM</h3>
|
<h3>SAM</h3>
|
||||||
|
|
||||||
<p>SAM is the <a href="book/view/144?PHPSESSID=ee3d79e304bf6e3746ccc3592c38a972">Simple Anonymous Messaging</a> protocol, allowing an
|
<p>SAM is the <a href="sam">Simple Anonymous Messaging</a> protocol, allowing an
|
||||||
application written in any language to talk to a SAM bridge through a plain TCP socket and have
|
application written in any language to talk to a SAM bridge through a plain TCP socket and have
|
||||||
that bridge multiplex all of its I2P traffic, transparently coordinating the encryption/decryption
|
that bridge multiplex all of its I2P traffic, transparently coordinating the encryption/decryption
|
||||||
and event based handling. SAM supports three styles of operation:</p>
|
and event based handling. SAM supports three styles of operation:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>streams, for when Alice and Bob want to send data to each other reliably and in order</li>
|
<li>streams, for when Alice and Bob want to send data to each other reliably and in order</li>
|
||||||
<li>repliable datagrams, for when Alice wants to send Bob a message that Bob can reply to</li>
|
<li>repliable datagrams, for when Alice wants to send Bob a message that Bob can reply to</li>
|
||||||
|
|
||||||
<li>raw datagrams, for when Alice wants to squeeze the most bandwidth and performance as possible,
|
<li>raw datagrams, for when Alice wants to squeeze the most bandwidth and performance as possible,
|
||||||
and Bob doesn't care whether the data's sender is authenticated or not (e.g. the data transferred
|
and Bob doesn't care whether the data's sender is authenticated or not (e.g. the data transferred
|
||||||
is self authenticating)</li>
|
is self authenticating)</li>
|
||||||
@@ -149,28 +147,28 @@ their own unique I2P destination and their own set of tunnels, keys, etc.</p>
|
|||||||
<p>For applications written in Java, the simplest way to go is to use the libraries that the SAM
|
<p>For applications written in Java, the simplest way to go is to use the libraries that the SAM
|
||||||
bridge and I2PTunnel applications use. The streaming functionality is exposed in the 'ministreaming'
|
bridge and I2PTunnel applications use. The streaming functionality is exposed in the 'ministreaming'
|
||||||
library, which is centered on the
|
library, which is centered on the
|
||||||
<a href="http://www.i2p.net/javadocs/net/i2p/client/streaming/package-summary.html">I2PSocketManager</a>,
|
<a href="http://www.i2p.net/javadoc/net/i2p/client/streaming/package-summary.html">I2PSocketManager</a>,
|
||||||
the <a href="http://www.i2p.net/javadocs/net/i2p/client/streaming/I2PSocket.html">I2PSocket</a>, and the
|
the <a href="http://www.i2p.net/javadoc/net/i2p/client/streaming/I2PSocket.html">I2PSocket</a>, and the
|
||||||
<a href="http://www.i2p.net/javadocs/net/i2p/client/streaming/I2PServerSocket.html">I2PServerSocket</a>.</p>
|
<a href="http://www.i2p.net/javadoc/net/i2p/client/streaming/I2PServerSocket.html">I2PServerSocket</a>.</p>
|
||||||
|
|
||||||
<p>For applications that want to use repliable datagrams, they can be built with the
|
<p>For applications that want to use repliable datagrams, they can be built with the
|
||||||
<a href="http://www.i2p.net/javadocs/net/i2p/client/datagram/I2PDatagramMaker.html">I2PDatagramMaker</a>
|
<a href="http://www.i2p.net/javadoc/net/i2p/client/datagram/I2PDatagramMaker.html">I2PDatagramMaker</a>
|
||||||
and parsed on the receiving side by the
|
and parsed on the receiving side by the
|
||||||
<a href="http://www.i2p.net/javadocs/net/i2p/client/datagram/I2PDatagramDissector.html">I2PDatagramDissector</a>.
|
<a href="http://www.i2p.net/javadoc/net/i2p/client/datagram/I2PDatagramDissector.html">I2PDatagramDissector</a>.
|
||||||
In turn, these are sent and received through an
|
In turn, these are sent and received through an
|
||||||
|
|
||||||
<a href="http://www.i2p.net/javadocs/net/i2p/client/I2PSession.html">I2PSession</a>.</p>
|
<a href="http://www.i2p.net/javadoc/net/i2p/client/I2PSession.html">I2PSession</a>.</p>
|
||||||
|
|
||||||
<p>Applications that want to use raw datagrams simply send directly through the I2PSession's
|
<p>Applications that want to use raw datagrams simply send directly through the I2PSession's
|
||||||
<a href="http://www.i2p.net/javadocs/net/i2p/client/I2PSession.html#sendMessage(net.i2p.data.Destination,%20byte[])">sendMessage(...)</a>
|
<a href="http://www.i2p.net/javadoc/net/i2p/client/I2PSession.html#sendMessage(net.i2p.data.Destination,%20byte[])">sendMessage(...)</a>
|
||||||
method, receiving notification of available messages through the
|
method, receiving notification of available messages through the
|
||||||
<a href="http://www.i2p.net/javadocs/net/i2p/client/I2PSessionListener.html">I2PSessionListener</a> and
|
<a href="http://www.i2p.net/javadoc/net/i2p/client/I2PSessionListener.html">I2PSessionListener</a> and
|
||||||
then fetching those messages by calling
|
then fetching those messages by calling
|
||||||
<a href="http://www.i2p.net/javadocs/net/i2p/client/I2PSession.html#receiveMessage(int)">receiveMessage(...)</a>.
|
<a href="http://www.i2p.net/javadoc/net/i2p/client/I2PSession.html#receiveMessage(int)">receiveMessage(...)</a>.
|
||||||
|
|
||||||
<h3>I2CP</h3>
|
<h3>I2CP</h3>
|
||||||
|
|
||||||
<p>I2CP itself is a language independent protocol, but to implement an I2CP library in something other
|
<p><a href="i2cp">I2CP</a> itself is a language independent protocol, but to implement an I2CP library
|
||||||
than Java there is a significant amount of code to be written (encryption routines, object marshalling,
|
in something other than Java there is a significant amount of code to be written (encryption routines,
|
||||||
asynchronous message handling, etc). While someone could write an I2CP library in C or something else,
|
object marshalling, asynchronous message handling, etc). While someone could write an I2CP library in
|
||||||
it would most likely be more useful to write a C SAM library instead. </p>
|
C or something else, it would most likely be more useful to use the C SAM library instead. </p>
|
||||||
|
Reference in New Issue
Block a user