Added translation tags to docs/*.html

This commit is contained in:
str4d
2013-01-30 03:47:49 +00:00
parent f9d7a43bc7
commit 611a8f05dc
4 changed files with 534 additions and 306 deletions

View File

@ -1,52 +1,56 @@
{% extends "global/layout.html" %}
{% block title %}Index to Technical Documentation{% endblock %}
{% block lastupdated %}May 2012{% endblock %}
{% block title %}{% trans %}Index to Technical Documentation{% endtrans %}{% endblock %}
{% block lastupdated %}{% trans %}May 2012{% endtrans %}{% endblock %}
{% block accuratefor %}0.9{% endblock %}
{% block content %}
<h1>How does I2P work?</h1>
<h1>{% trans %}How does I2P work{% endtrans %}</h1>
<p>
<p>{% trans -%}
Following is an index to the technical documentation for I2P.
</p><p>
{%- endtrans %}</p>
<p>{% trans -%}
This index is ordered from the highest to lowest layers.
The higher layers are for "clients" or applications;
the lower layers are inside the router itself.
The interface between applications and the router is the I2CP (I2P Control Protocol) API.
</p><p>
{%- endtrans %}</p>
<p>{% trans trac=i2pconv('trac.i2p2.i2p') -%}
The I2P Project is committed to maintaining accurate, current documentation.
If you find any inaccuracies in the documents linked below, please
<a href="http://{{ i2pconv('trac.i2p2.i2p') }}/report/1">enter a ticket identifying the problem</a>.
</p>
<a href="http://{{ trac }}/report/1">enter a ticket identifying the problem</a>.
{%- endtrans %}</p>
<h2>Index to Technical Documentation</h2>
<h2>{% trans %}Index to Technical Documentation{% endtrans %}</h2>
<h3>Overview</h3>
<h3>{% trans %}Overview{% endtrans %}</h3>
<ul class="helplist">
<li><a href="{{ site_url('docs/how/techintro') }}">Technical Introduction</a></li>
<li><a href="{{ site_url('docs/how/intro') }}">A Less-Technical Introduction</a></li>
<li><a href="{{ site_url('docs/how/threatmodel') }}">Threat model and analysis</a></li>
<li><a href="{{ site_url('docs/how/networkcomparisons') }}">Comparisons to other anonymous networks</a></li>
<li><a href="{{ site_url('docs/protocols') }}">Protocol stack chart</a></li>
<li><a href="papers.html">Papers and Presentations on I2P</a></li>
<li><a href="{{ url_for('static', filename='pdf/i2p_philosophy.pdf') }}">Invisible Internet Project (I2P) Project Overview</a> August 28, 2003 (pdf)</li>
<li><a href="{{ site_url('docs/how/tech-intro') }}">{{ _('Technical Introduction') }}</a></li>
<li><a href="{{ site_url('docs/how/intro') }}">{{ _('A Less-Technical Introduction') }}</a></li>
<li><a href="{{ site_url('docs/how/threat-model') }}">{{ _('Threat model and analysis') }}</a></li>
<li><a href="{{ site_url('comparison') }}">{{ _('Comparisons to other anonymous networks') }}</a></li>
<li><a href="{{ site_url('docs/protocol') }}">{{ _('Protocol stack chart') }}</a></li>
<li><a href="{{ site_url('research/papers') }}">{{ _('Papers on I2P') }}</a></li>
<li>{% trans pdf=url_for('static', filename='pdf/i2p_philosophy.pdf') %}<a href="{{ pdf }}">Invisible Internet Project (I2P) Project Overview</a> August 28, 2003 (pdf){% endtrans %}</li>
</ul>
<h3>Application-Layer Topics</h3>
<h3>{% trans %}Application-Layer Topics{% endtrans %}</h3>
<ul>
<li><a href="naming.html">Naming and Addressbook</a></li>
<li><a href="plugins.html">Plugins Overview</a></li>
<li><a href="plugin_spec.html">Plugin Specification</a></li>
<li><a href="updates.html">Router software updates</a></li>
<li><a href="{{ site_url('docs/applications/bittorrent') }}">Bittorrent over I2P</a></li>
<li><a href="{{ site_url('docs/api/i2pcontrol') }}">I2PControl Plugin API</a></li>
<li><a href="blockfile.html">hostsdb.blockfile Format</a></li>
<li><a href="configuration.html">Configuration File Format</a></li>
<li><a href="{{ site_url('docs/naming') }}">{{ _('Naming and Addressbook') }}</a></li>
<li><a href="{{ site_url('docs/plugins') }}">{{ _('Plugins Overview') }}</a></li>
<li><a href="{{ site_url('docs/spec/plugin') }}">{{ _('Plugin Specification') }}</a></li>
<li><a href="{{ site_url('docs/spec/updates') }}">{{ _('Router software updates') }}</a></li>
<li><a href="{{ site_url('docs/applications/bittorrent') }}">{{ _('Bittorrent over I2P') }}</a></li>
<li><a href="{{ site_url('docs/api/i2pcontrol') }}">{{ _('I2PControl Plugin API') }}</a></li>
<li><a href="{{ site_url('docs/spec/blockfile') }}">{{ _('hostsdb.blockfile Format') }}</a></li>
<li><a href="{{ site_url('docs/spec/configuration') }}">{{ _('Configuration File Format') }}</a></li>
</ul>
<h3>Application Layer API and Protocols</h3>
High-level, easy-to-use APIs for applications written in any language to send and receive data.
<h3>{% trans %}Application Layer API and Protocols{% endtrans %}</h3>
{% trans %}High-level, easy-to-use APIs for applications written in any language to send and receive data.{% endtrans %}
<ul><li>
<a href="{{ site_url('develop/applications') }}">Application Development Overview and Guide</a>
<a href="{{ site_url('get-involved/develop/applications') }}">{{ _('Application Development Overview and Guide') }}</a>
</li><li>
<a href="{{ site_url('docs/api/i2ptunnel') }}">I2PTunnel</a>
</li><li>
@ -64,167 +68,170 @@ Streamr Proxy
</li><li>
HTTP Bidir Proxy
</li><li>
<a href="{{ site_url('docs/api/sam') }}">SAM Protocol</a>
<a href="{{ site_url('docs/api/sam') }}">{{ _('SAM Protocol') }}</a>
</li><li>
<a href="{{ site_url('docs/api/samv2') }}">SAMv2 Protocol</a>
<a href="{{ site_url('docs/api/samv2') }}">{{ _('SAMv2 Protocol') }}</a>
</li><li>
<a href="{{ site_url('docs/api/samv3') }}">SAMv3 Protocol</a>
<a href="{{ site_url('docs/api/samv3') }}">{{ _('SAMv3 Protocol') }}</a>
</li><li>
<a href="{{ site_url('docs/api/bob') }}">BOB Protocol</a>
<a href="{{ site_url('docs/api/bob') }}">{{ _('BOB Protocol') }}</a>
</li></ul>
<h3>End-to-End Transport API and Protocols</h3>
The end-to-end protocols used by clients for reliable and unreliable communication.
<h3>{% trans %}End-to-End Transport API and Protocols{% endtrans %}</h3>
{% trans %}The end-to-end protocols used by clients for reliable and unreliable communication.{% endtrans %}
<ul><li>
<a href="{{ site_url('docs/api/streaming') }}">Streaming Library</a>
<a href="{{ site_url('docs/api/streaming') }}">{{ _('Streaming Library') }}</a>
</li><li>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/client/streaming/package-summary.html">Streaming Javadoc</a>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/client/streaming/package-summary.html">{{ _('Streaming Javadoc') }}</a>
</li><li>
<a href="datagrams.html">Datagrams</a>
<a href="{{ site_url('docs/spec/datagrams') }}">{{ _('Datagrams') }}</a>
</li><li>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/client/datagram/package-summary.html">Datagram Javadoc</a>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/client/datagram/package-summary.html">{{ _('Datagram Javadoc') }}</a>
</li></ul>
<h3>Client-to-Router Interface API and Protocol</h3>
<h3>{% trans %}Client-to-Router Interface API and Protocol{% endtrans %}</h3>
{% trans -%}
The lowest-level API used for clients (applications) to send and receive traffic to a router.
Traditionally used only by Java applications and higher-level APIs.
{%- endtrans %}
<ul><li>
<a href="i2cp.html">I2CP</a> I2P Control Protocol / API overview
<a href="{{ site_url('docs/protocol/i2cp') }}">{{ _('I2CP - I2P Control Protocol / API overview') }}</a>
</li><li>
<a href="i2cp_spec.html">I2CP Specification</a>
<a href="{{ site_url('docs/spec/i2cp') }}">{{ _('I2CP Specification') }}</a>
</li><li>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/client/package-summary.html">I2CP API Javadoc</a>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/client/package-summary.html">{{ _('I2CP API Javadoc') }}</a>
</li><li>
<a href="common_structures_spec.html">Common data structures specification</a>
<a href="{{ site_url('docs/spec/common-structures') }}">{{ _('Common data structures specification') }}</a>
</li><li>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/data/package-summary.html">Data Structures Javadoc</a>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/data/package-summary.html">{{ _('Data Structures Javadoc') }}</a>
</li></ul>
<h3>End-to-End Encryption</h3>
How client messages are end-to-end encrypted by the router.
<h3>{% trans %}End-to-End Encryption{% endtrans %}</h3>
{% trans %}How client messages are end-to-end encrypted by the router.{% endtrans %}
<ul>
<li><a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a> encryption</li>
<li><a href="{{ site_url('docs/how/cryptography') }}">ElGamal and AES cryptography details</a></li>
<li><a href="{{ site_url('docs/how/elgamal-aes') }}">{{ _('ElGamal/AES+SessionTag encryption') }}</a></li>
<li><a href="{{ site_url('docs/how/cryptography') }}">{{ _('ElGamal and AES cryptography details') }}</a></li>
</ul>
<h3>Network Database</h3>
Distributed storage and retrieval of information about routers and clients.
<h3>{% trans %}Network Database{% endtrans %}</h3>
{% trans %}Distributed storage and retrieval of information about routers and clients.{% endtrans %}
<ul>
<li><a href="{{ site_url('docs/how/networkdatabase') }}">Network database overview, details, and threat analysis</a></li>
<li><a href="{{ site_url('docs/how/cryptography') }}#SHA256">Cryptographic hashes</a></li>
<li><a href="{{ site_url('docs/how/cryptography') }}#DSA">Cryptographic signatures</a></li>
<li><a href="{{ site_url('docs/how/network-database') }}">{{ _('Network database overview, details, and threat analysis') }}</a></li>
<li><a href="{{ site_url('docs/how/cryptography') }}#SHA256">{{ _('Cryptographic hashes') }}</a></li>
<li><a href="{{ site_url('docs/how/cryptography') }}#DSA">{{ _('Cryptographic signatures') }}</a></li>
</ul>
<h3>Router Message Protocol</h3>
I2P is a message-oriented router. The messages sent between routers are defined by the I2NP protocol.
<h3>{% trans %}Router Message Protocol{% endtrans %}</h3>
{% trans %}I2P is a message-oriented router. The messages sent between routers are defined by the I2NP protocol.{% endtrans %}
<ul><li>
<a href="i2np.html">I2NP</a> I2P Network Protocol Overview
<a href="{{ site_url('docs/protocol/i2np') }}">{{ _('I2NP - I2P Network Protocol Overview') }}</a>
</li><li>
<a href="i2np_spec.html">I2NP Specification</a>
<a href="{{ site_url('docs/spec/i2np') }}">{{ _('I2NP Specification') }}</a>
</li><li>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/data/i2np/package-summary.html">I2NP Javadoc</a>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/data/i2np/package-summary.html">{{ _('I2NP Javadoc') }}</a>
</li><li>
<a href="common_structures_spec.html">Common data structures specification</a>
<a href="{{ site_url('docs/spec/common-structures') }}">{{ _('Common data structures specification') }}</a>
</li><li>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/data/package-summary.html">Data Structures Javadoc</a>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/data/package-summary.html">{{ _('Data Structures Javadoc') }}</a>
</li></ul>
<h3>Tunnels</h3>
Selecting peers, requesting tunnels through those peers, and encrypting and routing messages through these tunnels.
<h3>{% trans %}Tunnels{% endtrans %}</h3>
{% trans %}Selecting peers, requesting tunnels through those peers, and encrypting and routing messages through these tunnels.{% endtrans %}
<ul>
<li><a href="{{ site_url('docs/how/peerselection') }}">Peer profiling and selection</a></li>
<li><a href="{{ site_url('docs/how/tunnelrouting') }}">Tunnel routing overview</a></li>
<li><a href="{{ site_url('docs/how/garlicrouting') }}">Garlic routing and "garlic" terminology</a></li>
<li><a href="tunnel-alt.html">Tunnel building and encryption</a></li>
<li><a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES</a> for build request encryption</li>
<li><a href="{{ site_url('docs/how/cryptography') }}">ElGamal and AES cryptography details</a></li>
<li><a href="tunnel-alt-creation.html">Tunnel building specification</a></li>
<li><a href="tunnel_message_spec.html">Low-level tunnel message specification</a></li>
<li><a href="unidirectional-tunnels.html">Unidirectional Tunnels</a></li>
<li><a href="{{ url_for('static', filename='pdf/I2P-PET-CON-2009.1.pdf') }}">Peer Profiling and Selection in the I2P Anonymous Network</a>
2009 paper (pdf), not current but still generally accurate</li>
<li><a href="{{ site_url('docs/how/peer-selection') }}">{{ _('Peer profiling and selection') }}</a></li>
<li><a href="{{ site_url('docs/how/tunnel-routing') }}">{{ _('Tunnel routing overview') }}</a></li>
<li><a href="{{ site_url('docs/how/garlic-routing') }}">{% trans %}Garlic routing and "garlic" terminology{% endtrans %}</a></li>
<li><a href="{{ site_url('docs/tunnels/implementation') }}">{{ _('Tunnel building and encryption') }}</a></li>
<li><a href="{{ site_url('docs/how/elgamal-aes') }}">{{ _('ElGamal/AES') }}</a> {{ _('for build request encryption') }}</li>
<li><a href="{{ site_url('docs/how/cryptography') }}">{{ _('ElGamal and AES cryptography details') }}</a></li>
<li><a href="{{ site_url('docs/spec/tunnel-creation') }}">{{ _('Tunnel building specification') }}</a></li>
<li><a href="{{ site_url('docs/spec/tunnel-message') }}">{{ _('Low-level tunnel message specification') }}</a></li>
<li><a href="{{ site_url('docs/tunnels/unidirectional') }}">{{ _('Unidirectional Tunnels') }}</a></li>
<li><a href="{{ url_for('static', filename='pdf/I2P-PET-CON-2009.1.pdf') }}">{{ _('Peer Profiling and Selection in the I2P Anonymous Network') }}</a>
{{ _('2009 paper (pdf), not current but still generally accurate') }}</li>
</ul>
<h3>Transport Layer</h3>
The protocols for direct (point-to-point) router to router communication.
<h3>{% trans %}Transport Layer{% endtrans %}</h3>
{% trans %}The protocols for direct (point-to-point) router to router communication.{% endtrans %}
<ul><li>
<a href="{{ site_url('docs/transport') }}">Transport layer overview</a>
<a href="{{ site_url('docs/transport') }}">{{ _('Transport layer overview') }}</a>
</li><li>
<a href="{{ site_url('docs/transport/ntcp') }}">NTCP</a> TCP-based transport overview and specification
<a href="{{ site_url('docs/transport/ntcp') }}">NTCP</a> {{ _('TCP-based transport overview and specification') }}
</li><li>
<a href="{{ site_url('docs/transport/ssu') }}">SSU</a> UDP-based transport overview
<a href="{{ site_url('docs/transport/ssu') }}">SSU</a> {{ _('UDP-based transport overview') }}
</li><li>
<a href="{{ site_url('docs/transport/ssu/spec') }}">SSU specification</a>
<a href="{{ site_url('docs/spec/ssu') }}">{{ _('SSU specification') }}</a>
</li><li>
<a href="{{ site_url('docs/how/cryptography') }}#tcp">NTCP transport encryption</a>
<a href="{{ site_url('docs/how/cryptography') }}#tcp">{{ _('NTCP transport encryption') }}</a>
</li><li>
<a href="{{ site_url('docs/how/cryptography') }}#udp">SSU transport encryption</a>
<a href="{{ site_url('docs/how/cryptography') }}#udp">{{ _('SSU transport encryption') }}</a>
</li><li>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/router/transport/package-summary.html">Transport Javadoc</a>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/router/transport/package-summary.html">{{ _('Transport Javadoc') }}</a>
</li><li>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/router/transport/ntcp/package-summary.html">NTCP Javadoc</a>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/router/transport/ntcp/package-summary.html">{{ _('NTCP Javadoc') }}</a>
</li><li>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/router/transport/udp/package-summary.html">SSU Javadoc</a>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/router/transport/udp/package-summary.html">{{ _('SSU Javadoc') }}</a>
</li></ul>
<h3>Other Router Topics</h3>
<h3>{% trans %}Other Router Topics{% endtrans %}</h3>
<ul><li>
<a href="jbigi.html">Native BigInteger Library</a>
<a href="{{ site_url('misc/jbigi') }}">{{ _('Native BigInteger Library') }}</a>
</li><li>
Time synchronization and NTP
{{ _('Time synchronization and NTP') }}
</li><li>
<a href="performance.html">Performance</a> (not current)
<a href="{{ site_url('about/performance') }}">{{ _('Performance') }}</a>
</li><li>
<a href="configuration.html">Configuration File Format</a></li>
<a href="{{ site_url('docs/spec/configuration') }}">{{ _('Configuration File Format') }}</a></li>
</li></ul>
<h3>Developer's Guides and Resources</h3>
<h3>{% trans %}Developer's Guides and Resources{% endtrans %}</h3>
<ul><li>
<a href="{{ site_url('get-involved/guides/newdevelopers') }}">New Developer's Guide</a>
<a href="{{ site_url('get-involved/guides/new-developers') }}">{% trans %}New Developer's Guide{% endtrans %}</a>
</li><li>
<a href="{{ site_url('get-involved/guides/newtranslators') }}">New Translator's Guide</a>
<a href="{{ site_url('get-involved/guides/new-translators') }}">{% trans %}New Translator's Guide{% endtrans %}</a>
</li><li>
<a href="monotone.html">Monotone Guide</a>
<a href="{{ site_url('get-involved/guides/monotone') }}">{{ _('Monotone Guide') }}</a>
</li><li>
<a href="{{ site_url('get-involved/guides/devguidelines') }}">Developer Guidelines</a>
<a href="{{ site_url('get-involved/guides/dev-guidelines') }}">{{ _('Developer Guidelines') }}</a>
</li><li>
<a href="http://docs.i2p-projekt.de/javadoc/">Javadocs</a> (standard internet)
Note: always verify that javadocs are current by checking the release number.
{% trans %}Javadocs on the standard internet:{% endtrans %}
<a href="http://docs.i2p-projekt.de/javadoc/">{% trans num=1 %}Server {{ num }}{% endtrans %}</a>
{% trans %}Note: always verify that javadocs are current by checking the release number.{% endtrans %}
</li><li>
Javadocs inside I2P:
<a href="http://{{ i2pconv('i2p-javadocs.i2p') }}">Server 1</a>
<a href="http://{{ i2pconv('i2pdocs.str4d.i2p') }}/i2p.i2p/javadoc/">Server 2</a>
<a href="http://{{ i2pconv('echelon.i2p') }}/javadoc/">Server 3</a>
{% trans %}Javadocs inside I2P:{% endtrans %}
<a href="http://{{ i2pconv('i2p-javadocs.i2p') }}">{% trans num=1 %}Server {{ num }}{% endtrans %}</a>
<a href="http://{{ i2pconv('i2pdocs.str4d.i2p') }}/i2p.i2p/javadoc/">{% trans num=2 %}Server {{ num }}{% endtrans %}</a>
<a href="http://{{ i2pconv('echelon.i2p') }}/javadoc/">{% trans num=3 %}Server {{ num }}{% endtrans %}</a>
<!--
<a href="http://{{ i2pconv('docs.i2p2.i2p') }}/javadoc/">Server 4 - out of date, incomplete</a>
-->
Note: always verify that javadocs are current by checking the release number.
{% trans %}Note: always verify that javadocs are current by checking the release number.{% endtrans %}
</li><li>
<a href="ports.html">Ports used by I2P</a>
<a href="{{ site_url('docs/ports') }}">{{ _('Ports used by I2P') }}</a>
</li><li>
<a href="http://{{ i2pconv('update.killyourtv.i2p') }}/mtn/">Automatic updates to development builds inside I2P</a>
<a href="http://{{ i2pconv('update.killyourtv.i2p') }}/mtn/">{{ _('Automatic updates to development builds inside I2P') }}</a>
</li><li>
<a href="manualwrapper.html">Updating the wrapper manually</a>
<a href="{{ site_url('misc/manual-wrapper') }}">{{ _('Updating the wrapper manually') }}</a>
</li><li>
<a href="http://{{ i2pconv('forum.i2p') }}">User forum</a>
<a href="http://{{ i2pconv('forum.i2p') }}">{{ _('User forum') }}</a>
</li><li>
<a href="http://{{ i2pconv('zzz.i2p') }}/">Developer forum inside I2P</a>
<a href="http://{{ i2pconv('zzz.i2p') }}/">{{ _('Developer forum inside I2P') }}</a>
</li><li>
<a href="http://{{ i2pconv('trac.i2p2.i2p') }}/report/1">Bug tracker</a>
<a href="http://{{ i2pconv('trac.i2p2.i2p') }}/report/1">{{ _('Bug tracker') }}</a>
</li><li>
<a href="http://{{ i2pconv('stats.i2p') }}/cgi-bin/viewmtn/">Viewmtn inside I2P</a>.
<a href="http://{{ i2pconv('stats.i2p') }}/cgi-bin/viewmtn/">{{ _('Viewmtn inside I2P') }}</a>.
</li><li>
<a href="https://github.com/i2p/i2p.i2p">I2P Source exported to GitHub</a>
<a href="https://github.com/i2p/i2p.i2p">{{ _('I2P Source exported to GitHub') }}</a>
</li><li>
<a href="http://{{ i2pconv('git.repo.i2p') }}/w/i2p.i2p.git">I2P Source Git Repo inside I2P</a>
<a href="http://{{ i2pconv('git.repo.i2p') }}/w/i2p.i2p.git">{{ _('I2P Source Git Repo inside I2P') }}</a>
</li><li>
<a href="https://www.transifex.net/projects/p/I2P/">Source translation at Transifex</a>
<a href="https://www.transifex.net/projects/p/I2P/">{{ _('Source translation at Transifex') }}</a>
</li><li>
<a href="http://{{ i2pconv('trac.i2p2.i2p') }}/09roadmap">0.9 roadmap wiki</a> (not current)
<a href="http://{{ i2pconv('trac.i2p2.i2p') }}/09roadmap">{{ _('0.9 roadmap wiki') }}</a> ({{ _('not current') }})
</li><li>
<a href="{{ site_url('get-involved/roadmap') }}">Old roadmap</a> (not current)
<a href="{{ site_url('get-involved/roadmap') }}">{{ _('Old roadmap') }}</a> ({{ _('not current') }})
</li><li>
<a href="{{ site_url('get-involved/guides/todo') }}">To Do List</a> (not current)
<a href="{{ site_url('get-involved/todo') }}">{{ _('To Do List') }}</a> ({{ _('not current') }})
</li></ul>

View File

@ -1,19 +1,19 @@
{% extends "global/layout.html" %}
{% block title %}Naming and Addressbook{% endblock %}
{% block lastupdated %}March 2012{% endblock %}
{% block title %}{% trans %}Naming and Addressbook{% endtrans %}{% endblock %}
{% block lastupdated %}{% trans %}March 2012{% endtrans %}{% endblock %}
{% block accuratefor %}0.8.13{% endblock %}
{% block content %}
<h1>Naming in I2P</h1>
<h2 id="overview">Overview</h2>
<h1>{% trans %}Naming in I2P{% endtrans %}</h1>
<h2 id="overview">{% trans %}Overview{% endtrans %}</h2>
<p>
<p>{% trans -%}
I2P ships with a generic naming library and a base implementation
designed to work off a local name to destination mapping, as well as an
add-on application called the <a href="#addressbook">addressbook</a>.
I2P also supports <a href="#base32">Base32 hostnames</a> similar to Tor's .onion addresses.
</p>
{%- endtrans %}</p>
<p>
<p>{% trans -%}
The addressbook is a web-of-trust
driven secure, distributed, and human readable naming system, sacrificing only
the call for all human readable names to be globally unique by mandating only
@ -25,116 +25,150 @@ by adding in the entries provided through a third party, or (if some people orga
a series of published addressbooks using a first come first serve registration
system) people can choose to treat these addressbooks as name servers, emulating
traditional DNS.
</p>
{%- endtrans %}</p>
<p>
<p>{% trans namingdiscussion=site_url('docs/discussions/naming') -%}
NOTE: For the reasoning behind the I2P naming system, common arguments against it
and possible alternatives see the <a href="{{ site_url('docs/discussions/naming') }}">naming discussion</a>
and possible alternatives see the <a href="{{ namingdiscussion }}">naming discussion</a>
page.
</p>
{%- endtrans %}</p>
<h2 id="components">Naming System Components</h2>
<p>
<h2 id="components">{% trans %}Naming System Components{% endtrans %}</h2>
<p>{% trans -%}
There is no central naming authority in I2P.
All hostnames are local.
</p>
<p>
{%- endtrans %}</p>
<p>{% trans -%}
The naming system is quite simple and most of it is implemented
in applications external to the router, but bundled with
the I2P distribution.
The components are:
</p>
{%- endtrans %}</p>
<ol>
<li>The <a href="#lookup">client application</a> which does local lookups in hosts.txt
<li>{% trans -%}
The <a href="#lookup">client application</a> which does local lookups in hosts.txt
and also takes care of the <a href="#base32">Base32 hostnames</a>.
<li>The <a href="#httpproxy">HTTP proxy</a> which asks the router for lookups and points
the user to remote jump services to assist with failed lookups
<li>HTTP <a href="#add-services">host-add forms</a> which allow users to add hosts to their local hosts.txt
<li>HTTP <a href="#jump-services">jump services</a> which provide their own lookups and redirection
<li>The <a href="#addressbook">addressbook</a> application which merges external
host lists, retrieved via HTTP, with the local list
<li>The <a href="#susidns">SusiDNS</a> application which is a simple web front-end
{%- endtrans %}</li>
<li>{% trans -%}
The <a href="#httpproxy">HTTP proxy</a> which asks the router for lookups and points
the user to remote jump services to assist with failed lookups.
{%- endtrans %}</li>
<li>{% trans -%}
HTTP <a href="#add-services">host-add forms</a> which allow users to add hosts to their local hosts.txt
{%- endtrans %}</li>
<li>{% trans -%}
HTTP <a href="#jump-services">jump services</a> which provide their own lookups and redirection.
{%- endtrans %}</li>
<li>{% trans -%}
The <a href="#addressbook">addressbook</a> application which merges external
host lists, retrieved via HTTP, with the local list.
{%- endtrans %}</li>
<li>{% trans -%}
The <a href="#susidns">SusiDNS</a> application which is a simple web front-end
for addressbook configuration and viewing of the local host lists.
{%- endtrans %}</li>
</ol>
<h2 id="lookup">Naming Files and Lookups</h2>
<p>
<h2 id="lookup">{% trans %}Naming Files and Lookups{% endtrans %}</h2>
<p>{% trans namingdiscussion=site_url('docs/discussions/naming'), todo=site_url('get-involved/todo') -%}
All destinations in I2P are 516-byte (or longer) keys.
(To be more precise, it is a 256-byte public key plus a 128-byte signing key
plus a null certificate, which in Base64 representation is 516 bytes.
<a href="{{ site_url('docs/discussions/naming') }}#certificates">Certificates</a> are not used now,
<a href="{{ namingdiscussion }}#certificates">Certificates</a> are not used now,
if they are, the keys will be longer.
One possible use of certificates is for <a href="todo.html#hashcash">proof of work</a>.)
</p><p>
One possible use of certificates is for <a href="{{ todo }}#hashcash">proof of work</a>.)
{%- endtrans %}</p>
<p>{% trans -%}
If an application (i2ptunnel or the HTTP proxy) wishes to access
a destination by name, the router does a very simple local lookup
to resolve that name.
The client application (technically, the client side of I2CP in the I2P API)
does a linear search through three local files, in order, to
look up host names and convert them to a 516-byte destination key:
{%- endtrans %}</p>
<ol>
<li>privatehosts.txt
<li>userhosts.txt
<li>hosts.txt
</ol>
<p>The lookup is case-insensitive.
<p>{% trans -%}
The lookup is case-insensitive.
The first match is used, and conflicts are not detected.
There is no enforcement of naming rules in lookups.
</p><p>
{%- endtrans %}</p>
<p>{% trans namingdiscussion=site_url('docs/discussions/naming') -%}
Lookups are cached for a few minutes.
There is an experimental facility for real-time lookups (a la DNS) over the network within the router,
although it is not enabled by default
(see "EepGet" under <a href="{{ site_url('docs/discussions/naming') }}#alternatives">Alternatives on the discussion page</a>).
</p>
(see "EepGet" under <a href="{{ namingdiscussion }}#alternatives">Alternatives on the discussion page</a>).
{%- endtrans %}</p>
<h2 id="httpproxy">HTTP Proxy</h2>
<p>The HTTP proxy does a lookup via the router for all hostnames ending in '.i2p'.
<h2 id="httpproxy">{% trans %}HTTP Proxy{% endtrans %}</h2>
<p>{% trans -%}
The HTTP proxy does a lookup via the router for all hostnames ending in '.i2p'.
Otherwise, it forwards the request to a configured HTTP outproxy.
Thus, in practice, all HTTP (eepsite) hostnames must end in the pseudo-Top Level Domain '.i2p'.
</p>
{%- endtrans %}</p>
<p>
<p>{% trans -%}
If the router fails to resolve the hostname, the HTTP proxy returns
an error page to the user with links to several "jump" services.
See below for details.
</p>
{%- endtrans %}</p>
<h2 id="addressbook">Addressbook</h2>
<h3>Incoming Subscriptions and Merging</h3>
<p>
<h2 id="addressbook">{% trans %}Addressbook{% endtrans %}</h2>
<h3>{% trans %}Incoming Subscriptions and Merging{% endtrans %}</h3>
<p>{% trans -%}
The addressbook application periodically
retrieves other users' hosts.txt files and merges
them with the local hosts.txt, after several checks.
Naming conflicts are resolved on a first-come first-served
basis.
</p><p>
{%- endtrans %}</p>
<p>{% trans -%}
Subscribing to another user's hosts.txt file involves
giving them a certain amount of trust.
You do not want them, for example, 'hijacking' a new site
by quickly entering in their own key for a new site before
passing the new host/key entry to you.
</p><p>
{%- endtrans %}</p>
<p>{% trans -%}
For this reason, the only subscription configured by
default is <code>http://www.i2p2.i2p/hosts.txt</code>,
which contains a copy of the hosts.txt included
in the I2P release.
Users must configure additional subscriptions in their
local addressbook application (via subscriptions.txt or <a href="#susidns">SusiDNS</a>).
</p><p>
{%- endtrans %}</p>
<p>{% trans -%}
Some other public addressbook subscription links:
</p>
{%- endtrans %}</p>
<ul>
<li><a href="http://{{ i2pconv('i2host.i2p') }}/cgi-bin/i2hostetag">http://i2host.i2p/cgi-bin/i2hostetag</a>
<li><a href="http://{{ i2pconv('stats.i2p') }}/cgi-bin/newhosts.txt">http://stats.i2p/cgi-bin/newhosts.txt</a>
<li><a href="http://{{ i2pconv('i2host.i2p') }}/cgi-bin/i2hostetag">http://{{ i2pconv('i2host.i2p') }}/cgi-bin/i2hostetag</a>
<li><a href="http://{{ i2pconv('stats.i2p') }}/cgi-bin/newhosts.txt">http://{{ i2pconv('stats.i2p') }}/cgi-bin/newhosts.txt</a>
</ul>
<p>
<p>{% trans -%}
The operators of these services may have various policies for listing hosts.
Presence on this list does not imply endorsement.
</p>
{%- endtrans %}</p>
<h3>Naming Rules</h3>
<p>
<h3>{% trans %}Naming Rules{% endtrans %}</h3>
<p>{% trans -%}
While there are hopefully not any technical limitations within I2P on host names,
the addressbook enforces several restrictions on host names
imported from subscriptions.
@ -143,30 +177,80 @@ and for security.
The rules are essentially the same as those in RFC2396 Section 3.2.2.
Any hostnames violating these rules may not be propagated
to other routers.
</p><p>
Naming rules:</p>
{%- endtrans %}</p>
<p>{% trans -%}
Naming rules:
{%- endtrans %}</p>
<ul>
<li>Names are converted to lower case on import.
<li>Names are checked for conflict with existing names in the existing userhosts.txt and hosts.txt
<li>{% trans -%}
Names are converted to lower case on import.
{%- endtrans %}</li>
<li>{% trans -%}
Names are checked for conflict with existing names in the existing userhosts.txt and hosts.txt
(but not privatehosts.txt) after conversion to lower case.
<li>Must contain only [a-z] [0-9] '.' and '-' after conversion to lower case.
<li>Must not start with '.' or '-'.
<li>Must end with '.i2p'.
<li>67 characters maximum, including the '.i2p'.
<li>Must not contain '..'.
<li>Must not contain '.-' or '-.' (as of 0.6.1.33).
<li>Must not contain '--' except in 'xn--' for IDN.
<li>Base32 hostnames (*.b32.i2p) are not allowed.
<li>Certain hostnames reserved for project use are not allowed
(proxy.i2p, router.i2p, console.i2p, *.proxy.i2p, *.router.i2p, *.console.i2p, and others)
<li>Keys are checked for base64 validity.
<li>Keys are checked for conflict with existing keys in hosts.txt (but not privatehosts.txt).
<li>Minimum key length 516 bytes.
<li>Maximum key length 616 bytes (to account for certs up to 100 bytes).
{%- endtrans %}</li>
<li>{% trans -%}
Must contain only [a-z] [0-9] '.' and '-' after conversion to lower case.
{%- endtrans %}</li>
<li>{% trans -%}
Must not start with '.' or '-'.
{%- endtrans %}</li>
<li>{% trans -%}
Must end with '.i2p'.
{%- endtrans %}</li>
<li>{% trans -%}
67 characters maximum, including the '.i2p'.
{%- endtrans %}</li>
<li>{% trans -%}
Must not contain '..'.
{%- endtrans %}</li>
<li>{% trans -%}
Must not contain '.-' or '-.' (as of 0.6.1.33).
{%- endtrans %}</li>
<li>{% trans -%}
Must not contain '--' except in 'xn--' for IDN.
{%- endtrans %}</li>
<li>{% trans -%}
Base32 hostnames (*.b32.i2p) are not allowed.
{%- endtrans %}</li>
<li>{% trans -%}
Certain hostnames reserved for project use are not allowed
(proxy.i2p, router.i2p, console.i2p, *.proxy.i2p, *.router.i2p, *.console.i2p, and others)
{%- endtrans %}</li>
<li>{% trans -%}
Keys are checked for base64 validity.
{%- endtrans %}</li>
<li>{% trans -%}
Keys are checked for conflict with existing keys in hosts.txt (but not privatehosts.txt).
{%- endtrans %}</li>
<li>{% trans -%}
Minimum key length 516 bytes.
{%- endtrans %}</li>
<li>{% trans -%}
Maximum key length 616 bytes (to account for certs up to 100 bytes).
{%- endtrans %}</li>
</ul>
<p>
<p>{% trans -%}
Any name received via subscription that passes all the checks is added to the local hosts.txt.
</p><p>
{%- endtrans %}</p>
<p>{% trans -%}
Note that the '.' symbols in a host name are of no significance,
and do not denote any actual naming or trust hierarchy.
If the name 'host.i2p' already exists, there is nothing
@ -175,70 +259,110 @@ and this name can be imported by others' addressbook.
Methods to deny subdomains to non-domain 'owners' (certificates?),
and the desirability and feasibility of these methods,
are topics for future discussion.
</p><p>
{%- endtrans %}</p>
<p>{% trans -%}
International Domain Names (IDN) also work in i2p (using punycode 'xn--' form).
To see IDN .i2p domain names rendered correctly in Firefox's location bar,
add 'network.IDN.whitelist.i2p (boolean) = true' in about:config.
</p><p>
{%- endtrans %}</p>
<p>{% trans -%}
As the addressbook application does not use privatehosts.txt at all, in practice
this file is the only place where it is appropriate to place private aliases or
"pet names" for sites already in hosts.txt.
</p>
{%- endtrans %}</p>
<h3>Outgoing Subscriptions</h3>
<p>
<h3>{% trans %}Outgoing Subscriptions{% endtrans %}</h3>
<p>{% trans -%}
Addressbook will publish the merged hosts.txt to a location
(traditionally hosts.txt in the local eepsite's home directory) to be accessed by others
for their subscriptions.
This step is optional and is disabled by default.
</p>
{%- endtrans %}</p>
<h3>Hosting and HTTP Transport Issues</h3>
<p>
<p>{% trans -%}
The addressbook application, together with eepget, saves the Etag and/or Last-Modified
information returned by the web server of the subscription.
This greatly reduces the bandwidth required, as the web server will
return a '304 Not Modified' on the next fetch if nothing has changed.
</p>
<p>
{%- endtrans %}</p>
<p>{% trans -%}
However the entire hosts.txt is downloaded if it has changed.
See below for discussion on this issue.
</p>
<p>
{%- endtrans %}</p>
<p>{% trans -%}
Hosts serving a static hosts.txt or an equivalent CGI application
are strongly encouraged to deliver
a Content-Length header, and either an Etag or Last-Modified header.
Also ensure that the server delivers a '304 Not Modified' when appropriate.
This will dramatically reduce the network bandwidth, and
reduce chances of corruption.
</p>
{%- endtrans %}</p>
<h2 id="add-services">Host Add Services</h2>
<p>
<h2 id="add-services">{% trans %}Host Add Services{% endtrans %}</h2>
<p>{% trans -%}
A host add service is a simple CGI application that takes a hostname and a Base64 key as parameters
and adds that to its local hosts.txt.
If other routers subscribe to that hosts.txt, the new hostname/key
will be propagated through the network.
</p><p>
{%- endtrans %}</p>
<p>{% trans -%}
It is recommended that host add services impose, at a minimum, the restrictions imposed by the addressbook application listed above.
Host add services may impose additional restrictions on hostnames and keys, for example:
</p>
{%- endtrans %}</p>
<ul>
<li>A limit on number of 'subdomains'.
<li>Authorization for 'subdomains' through various methods.
<li>Hashcash or signed certificates.
<li>Editorial review of host names and/or content.
<li>Categorization of hosts by content.
<li>Reservation or rejection of certain host names.
<li>Restrictions on the number of names registered in a given time period.
<li>Delays between registration and publication.
<li>Requirement that the host be up for verification.
<li>Expiration and/or revocation.
<li>IDN spoof rejection.
<li>{% trans -%}
A limit on number of 'subdomains'.
{%- endtrans %}</li>
<li>{% trans -%}
Authorization for 'subdomains' through various methods.
{%- endtrans %}</li>
<li>{% trans -%}
Hashcash or signed certificates.
{%- endtrans %}</li>
<li>{% trans -%}
Editorial review of host names and/or content.
{%- endtrans %}</li>
<li>{% trans -%}
Categorization of hosts by content.
{%- endtrans %}</li>
<li>{% trans -%}
Reservation or rejection of certain host names.
{%- endtrans %}</li>
<li>{% trans -%}
Restrictions on the number of names registered in a given time period.
{%- endtrans %}</li>
<li>{% trans -%}
Delays between registration and publication.
{%- endtrans %}</li>
<li>{% trans -%}
Requirement that the host be up for verification.
{%- endtrans %}</li>
<li>{% trans -%}
Expiration and/or revocation.
{%- endtrans %}</li>
<li>{% trans -%}
IDN spoof rejection.
{%- endtrans %}</li>
</ul>
<h2 id="jump-services">Jump Services</h2>
<p>
<h2 id="jump-services">{% trans %}Jump Services{% endtrans %}</h2>
<p>{% trans -%}
A jump service is a simple CGI application that takes a hostname as a parameter
and returns a 301 redirect to the proper URL with a <code>?i2paddresshelper=key</code>
string appended.
@ -246,34 +370,41 @@ The HTTP proxy will interpret the appended string and
use that key as the actual destination.
In addition, the proxy will cache that key so the
address helper is not necessary until restart.
</p>
<p>
{%- endtrans %}</p>
<p>{% trans -%}
Note that, like with subscriptions, using a jump service
implies a certain amount of trust, as a jump service could maliciously
redirect a user to an incorrect destination.
</p>
<p>
{%- endtrans %}</p>
<p>{% trans -%}
To provide the best service, a jump service should be subscribed to
several hosts.txt providers so that its local host list is current.
</p>
{%- endtrans %}</p>
<h2 id="susidns">SusiDNS</h2>
<p>
<p>{% trans -%}
SusiDNS is simply a web interface front-end to configuring addressbook subscriptions
and accessing the four addressbook files.
All the real work is done by the 'addressbook' application.
</p><p>
{%- endtrans %}</p>
<p>{% trans -%}
Currently, there is little enforcement of addressbook naming rules within SusiDNS,
so a user may enter hostnames locally that would be rejected by
the addressbook subscription rules.
</p>
{%- endtrans %}</p>
<h2 id="base32">Base32 Names</h2>
<p>I2P supports Base32 hostnames similar to Tor's .onion addresses.
<h2 id="base32">{% trans %}Base32 Names{% endtrans %}</h2>
<p>{% trans -%}
I2P supports Base32 hostnames similar to Tor's .onion addresses.
Base32 addresses are much shorter and easier to handle than the
full 516-character Base64 Destinations or addresshelpers.
Example: <code>ukeu3k5oycgaauneqgtnvselmt4yemvoilkln7jpvamvfx7dnkdq.b32.i2p</code>
</p><p>
{%- endtrans %}</p>
<p>{% trans -%}
In Tor, the address is 16 characters (80 bits), or half of the SHA-1 hash.
I2P uses 52 characters (256 bits) to represent the full SHA-256 hash.
The form is {52 chars}.b32.i2p.
@ -283,10 +414,12 @@ Base32 lookups will only be successful when the Destination is up and publishing
a LeaseSet.
Because resolution may require a network database lookup, it may take significantly
longer than a local address book lookup.
</p><p>
{%- endtrans %}</p>
<p>{% trans -%}
Base32 addresses can be used in most places where hostnames or full destinations
are used, however there are some exceptions where they may fail if the
name does not immediately resolve. I2PTunnel will fail, for example, if
the name does not resolve to a destination.
</p>
{%- endtrans %}</p>
{% endblock %}

View File

@ -1,108 +1,193 @@
{% extends "global/layout.html" %}
{% block title %}Plugins{% endblock %}
{% block lastupdated %}June 2012{% endblock %}
{% block title %}{% trans %}Plugins{% endtrans %}{% endblock %}
{% block lastupdated %}{% trans %}June 2012{% endtrans %}{% endblock %}
{% block accuratefor %}0.9{% endblock %}
{% block content %}
<h2>I2P Plugins</h2>
<h2>{% trans %}I2P Plugins{% endtrans %}</h2>
<h3>General Information</h3>
<p>
<h3>{% trans %}General Information{% endtrans %}</h3>
<p>{% trans -%}
I2P includes a plugin architecture
to support easy development and installation of additional software.
</p>
{%- endtrans %}</p>
<p>
<p>{% trans -%}
There are now plugins available that support distributed email, blogs, IRC
clients, distributed file storage, wikis, and more.
</p>
{%- endtrans %}</p>
<p>
<p>{% trans -%}
Benefits to i2p users and app developers:
</p>
{%- endtrans %}</p>
<ul>
<li>Easy distribution of applications</li>
<li>Allows innovation and use of additional libraries without worrying about
increasing the size of <code>i2pupdate.sud</code></li>
<li>Support large or special-purpose applications that would never be bundled
with the I2P installation</li>
<li>Cryptographically signed and verified applications</li>
<li>Automatic updates of applications, just like for the router</li>
<li>Separate initial install and update packages, if desired, for smaller update downloads</li>
<li>One-click installation of applications. No more asking users to modify
<code>wrapper.config</code> or <code>clients.config</code></li>
<li>Isolate applications from the base <code>$I2P</code> installation</li>
<li>Automatic compatibility checking for I2P version, Java version, Jetty
version, and previous installed application version</li>
<li>Automatic link addition in console</li>
<li>Automatic startup of application, including modifying classpath, without requiring a restart</li>
<li>Automatic integration and startup of webapps into console Jetty instance</li>
<li>Facilitate creation of 'app stores' like the one at <a
href="http://{{ i2pconv('plugins.i2p') }}">plugins.i2p</a></li>
<li> One-click uninstall</li>
<li> Language and theme packs for the console </li>
<li> Bring detailed application information to the router console </li>
<li> Non-java applications also supported </li>
<li>{% trans -%}
Easy distribution of applications
{%- endtrans %}</li>
<li>{% trans -%}
Allows innovation and use of additional libraries without worrying about
increasing the size of <code>i2pupdate.sud</code>
{%- endtrans %}</li>
<li>{% trans -%}
Support large or special-purpose applications that would never be bundled
with the I2P installation
{%- endtrans %}</li>
<li>{% trans -%}
Cryptographically signed and verified applications
{%- endtrans %}</li>
<li>{% trans -%}
Automatic updates of applications, just like for the router
{%- endtrans %}</li>
<li>{% trans -%}
Separate initial install and update packages, if desired, for smaller update downloads
{%- endtrans %}</li>
<li>{% trans -%}
One-click installation of applications. No more asking users to modify
<code>wrapper.config</code> or <code>clients.config</code>
{%- endtrans %}</li>
<li>{% trans -%}
Isolate applications from the base <code>$I2P</code> installation
{%- endtrans %}</li>
<li>{% trans -%}
Automatic compatibility checking for I2P version, Java version, Jetty
version, and previous installed application version
{%- endtrans %}</li>
<li>{% trans -%}
Automatic link addition in console
{%- endtrans %}</li>
<li>{% trans -%}
Automatic startup of application, including modifying classpath, without requiring a restart
{%- endtrans %}</li>
<li>{% trans -%}
Automatic integration and startup of webapps into console Jetty instance
{%- endtrans %}</li>
<li>{% trans pluginsite=i2pconv('plugins.i2p') -%}
Facilitate creation of 'app stores' like the one at
<a href="http://{{ pluginsite }}">{{ pluginsite }}</a>
{%- endtrans %}</li>
<li>{% trans -%}
One-click uninstall
{%- endtrans %}</li>
<li>{% trans -%}
Language and theme packs for the console
{%- endtrans %}</li>
<li>{% trans -%}
Bring detailed application information to the router console
{%- endtrans %}</li>
<li>{% trans -%}
Non-java applications also supported
{%- endtrans %}</li>
</ul>
<h4>Required I2P version</h4>
<p> 0.7.12 or newer. </p>
<h4>{% trans %}Required I2P version{% endtrans %}</h4>
<p>{% trans %}0.7.12 or newer.{% endtrans %}</p>
<h4>Installation</h4>
<p> To install and start a plugin, copy the <code>.xpi2p</code> install link to
the form at the bottom of <a
href="http://127.0.0.1:7657/configclients.jsp#plugin">configclients.jsp in
your router console</a> and click the "install plugin" button. After a
<h4>{% trans %}Installation{% endtrans %}</h4>
<p>{% trans -%}
To install and start a plugin, copy the <code>.xpi2p</code> install link to
the form at the bottom of
<a href="http://127.0.0.1:7657/configclients.jsp#plugin">configclients.jsp in
your router console</a> and click the "install plugin" button. After a
plugin is installed and started, a link to the plugin will usually appear at
the top of your summary bar. </p>
the top of your summary bar.
{%- endtrans %}</p>
<p> To update a plugin to the latest version, just click the update button on
<p>{% trans -%}
To update a plugin to the latest version, just click the update button on
<a href="http://127.0.0.1:7657/configclients.jsp#plugin">configclients.jsp</a>.
There is also a button to check if the plugin has a more recent version, as
well as a button to check for updates for all plugins. Plugins will be checked
for updates automatically when updating to a new I2P release (not including dev
builds).</p>
builds).
{%- endtrans %}</p>
<h3>Development</h3>
<p> See the latest <a href="{{ site_url('docs/spec/plugin') }}">plugin specification</a> and the <a
href="http://{{ i2pconv('zzz.i2p') }}/forums/16">plugin forum</a> on zzz.i2p. </p> <p> See
also the sources for plugins developed by various people. Some plugins, such
as <a href="http://{{ i2pconv('plugins.i2p') }}/plugins/snowman">snowman</a>, were developed
specifically as examples. </p>
<h3>{% trans %}Development{% endtrans %}</h3>
<p>{% trans pluginspec=site_url('docs/spec/plugin'), zzz=i2pconv('zzz.i2p') -%}
See the latest <a href="{{ pluginspec }}">plugin specification</a> and the
<a href="http://{{ zzz }}/forums/16">plugin forum</a> on {{ zzz }}.
{%- endtrans %}</p>
<p> <b>Developers wanted!</b> Plugins are a great way to learn more about I2P
or easily add some feature. </p>
<p>{% trans pluginsite=i2pconv('plugins.i2p') -%}
See also the sources for plugins developed by various people. Some plugins, such
as <a href="http://{{ pluginsite }}/plugins/snowman">snowman</a>, were developed
specifically as examples.
{%- endtrans %}</p>
<h3>Getting Started</h3>
<p> To create a plugin from an existing binary package you will need to get
makeplugin.sh from <a
href="http://{{ i2pconv('trac.i2p2.i2p') }}/browser/plugin/makeplugin.sh?rev=776519571fda0689ef09c42f66e7398f30432e87">the
i2p.scripts branch in monotone</a>. </p>
<p>{% trans -%}
<b>Developers wanted!</b> Plugins are a great way to learn more about I2P
or easily add some feature.
{%- endtrans %}</p>
<h3>{% trans %}Getting Started{% endtrans %}</h3>
<p>{% trans url='http://'+i2pconv('trac.i2p2.i2p')+'/browser/plugin/makeplugin.sh?rev=776519571fda0689ef09c42f66e7398f30432e87' -%}
To create a plugin from an existing binary package you will need to get
makeplugin.sh from <a href="{{ url }}">the i2p.scripts branch in monotone</a>.
{%- endtrans %}</p>
<h3>Known Issues</h3>
<p> Note that the router's plugin architecture does <b>NOT</b> currently
provide any additional security isolation or sandboxing of plugins.</p>
<h3>{% trans %}Known Issues{% endtrans %}</h3>
<p>{% trans -%}
Note that the router's plugin architecture does <b>NOT</b> currently
provide any additional security isolation or sandboxing of plugins.
{%- endtrans %}</p>
<ul>
<li>Updates of a plugin with included jars (not wars) won't be recognized if
<li>{% trans -%}
Updates of a plugin with included jars (not wars) won't be recognized if
the plugin was already run, as it requires class loader trickery to flush the
class cache; a full router restart is required.</li>
<li> The stop button may be displayed even if there is nothing to stop.</li>
<li> Plugins running in a separate JVM create a <code>logs/</code> directory in
<code>$CWD</code>.</li>
<li>No initial keys are present, except for those of jrandom and zzz (using the
class cache; a full router restart is required.
{%- endtrans %}</li>
<li>{% trans -%}
The stop button may be displayed even if there is nothing to stop.
{%- endtrans %}</li>
<li>{% trans -%}
Plugins running in a separate JVM create a <code>logs/</code> directory in
<code>$CWD</code>.
{%- endtrans %}</li>
<li>{% trans -%}
No initial keys are present, except for those of jrandom and zzz (using the
same keys as for router update), so the first key seen for a signer is
automatically accepted&mdash;there is no signing key authority. </li>
<li> When deleting a plugin, the directory is not always deleted, especially on
Windows. </li>
<li> Installing a plugin requiring Java 1.6 on a Java 1.5 machine will result
in a "plugin is corrupt" message if pack200 compression of the plugin file is
used. </li>
<li> Theme and translation plugins are untested. </li>
<li> Disabling autostart doesn't always work. </li>
automatically accepted&mdash;there is no signing key authority.
{%- endtrans %}</li>
<li>{% trans -%}
When deleting a plugin, the directory is not always deleted, especially on
Windows.
{%- endtrans %}</li>
<li>{% trans -%}
Installing a plugin requiring Java 1.6 on a Java 1.5 machine will result in a
"plugin is corrupt" message if pack200 compression of the plugin file is used.
{%- endtrans %}</li>
<li>{% trans -%}
Theme and translation plugins are untested.
{%- endtrans %}</li>
<li>{% trans -%}
Disabling autostart doesn't always work.
{%- endtrans %}</li>
</ul>
<!-- vim: set noai ff=unix nosi ft=html tw=79 et sw=4 ts=4 spell spelllang=en: -->

View File

@ -1,20 +1,23 @@
{% extends "global/layout.html" %}
{% block title %}Ports Used by I2P{% endblock %}
{% block lastupdated %}May 2012{% endblock %}
{% block title %}{% trans %}Ports Used by I2P{% endtrans %}{% endblock %}
{% block lastupdated %}{% trans %}May 2012{% endtrans %}{% endblock %}
{% block accuratefor %}0.9{% endblock %}
{% block content %}
<p>
<p>{% trans -%}
These are the ports used or reserved by I2P, including those for known plugins,
common alternates,
and some typical related applications.
<p>
{%- endtrans %}</p>
<p>{% trans faq=site_url('faq') -%}
Note that many of these are not enabled by default.
There is more information in <a href="{{ site_url('support/faq') }}#ports">the FAQ</a>.
There is more information in <a href="{{ faq }}#ports">the FAQ</a>.
See also the documentation for individual plugins.
Plugin authors please add any ports you use here.
For new plugins, we recommend using the next available port
in the 766x range.
{%- endtrans %}</p>
<table>
<tr><th>Port</th><th>Usage</th></tr>
@ -45,7 +48,7 @@ in the 766x range.
<tr><td>7662</td><td>Zzzot Plugin</td></tr>
<tr><td>7663</td><td>?? Plugin ??</td></tr>
<tr><td>7664</td><td>JAMWiki Plugin</td></tr>
<tr><td></td><td><i>recommended spot for new plugins/applications</i></td></tr>
<tr><td></td><td><i>{% trans %}recommended spot for new plugins/applications{% endtrans %}</i></td></tr>
<tr><td>8118</td><td>Privoxy (reserve)</td></tr>
<tr><td>8123</td><td>Tor Polipo (reserve)</td></tr>
<tr><td>8887</td><td>Old default network port</td></tr>