<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.i2p-projekt.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Idk</id>
	<title>I2P Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.i2p-projekt.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Idk"/>
	<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php/Special:Contributions/Idk"/>
	<updated>2026-10-23T02:27:29Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=495</id>
		<title>Plugins</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=495"/>
		<updated>2022-03-19T22:05:58Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction == &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
This page is about plugins designed for the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
I2P plugins are both a means to extend I2P&#039;s router functionality as well as a method of packaging things.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
I2P plugins are stored in &amp;quot;.su3&amp;quot; files (formerly in &amp;quot;.xpi2p&amp;quot; files, but that format is obsolete), and can be installed or uninstalled from the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Comment by Khanjant, 2016-03-17: &amp;quot;This is the plugin list managed to recover after the epic fall of http://plugins.i2p. Gathered from the plugin list on [http://stats.i2p/i2p/plugins stats.i2p] and [http://temporarypluginlist.i2p/plugins a unofficial temporary list]. I (Khanjant) just started, not finished yet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
Because of the sudden shutdown of http://plugins.i2p, some plugins files are still missing to us, if you have some that miss in this list, please contact [[user:Hummingbird]].&lt;br /&gt;
&lt;br /&gt;
== Plugin list == &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Non-obsolete === &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
! Type&lt;br /&gt;
! Plugin name&lt;br /&gt;
! Latest release (year)&lt;br /&gt;
! URLs (Description / File / Source code)&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Tor Helper || &#039;&#039;Blizzard&#039;&#039; || 2021 || http://idk.i2p/blizzard || Adds a Snowflake Proxy to I2P which helps Tor Browser users reach the Tor Network using Pluggable Transports.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;BwSchedule&#039;&#039; || 2015 ||  [http://y7hb4kzomfzzhekib2mby72ydlntiexmuafuwtlxrxyigtnd63la.b32.i2p/bwschedule_description.html Description by Cacapao (author)]  || Bandwidth scheduler for the I2P router&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool || &#039;&#039;Firefox Search Plugins&#039;&#039; || || [http://direct.i2p/site/webcache/9449449?rId=56eef8a275a82&amp;amp;seq=2 Description (cached page)] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:48--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Administration || &#039;&#039;GarlicFarm&#039;&#039; || 2019 || http://zzz.i2p/topics/2234 || Manage massive multihoming with LS2 Meta-leasesets. WIP, development stalled&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Email || &#039;&#039;[[I2P-Bote]]&#039;&#039; || 2018 || [[I2P-Bote#To_get_it|Description, file]] || Unsupported, obsolete, does not support signature types, needs developer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| File sharing || &#039;&#039;[[I2Phex]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ Plugin] || Also available as standalone software&amp;lt;ref&amp;gt;I2Phex v3.2.7 standalone available from http://echelon.i2p/i2phex/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:45--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| File sharing || &#039;&#039;i2psnark-rpc&#039;&#039; || 2020 || http://zzz.i2p/topics/2941 || Remote control of i2psnark using the Transmission RPC protocol&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IRC client || &#039;&#039;[[JIRCii|jIRCii]]&#039;&#039; || 2016&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2162-jircii-2014-12-9-z1&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/jIRCii.xpi2p File on stats.i2p], File from iMule (v0.9.0, 2011)&amp;lt;ref&amp;gt;ed2k://|file|jIRCii.xpi2p|319207|E08E77D0B9A76455C6EA55C0C1E3A477|h=V5S4ZMFRPWNLHEMY7EDIWDEYU33EGUU6|/&amp;lt;/ref&amp;gt; || jIRCii as a plugin for the I2P console, written in Java. [http://www.oldschoolirc.com Official website (clearnet, not I2P compatible)].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P&amp;lt;ref&amp;gt;&amp;quot;Julya is a network enabled Jython shell, allowing multiple instances of Jython to be managed from a network connection. Jython scripts can be run in a headless environment by sending scripts via TCP connections defined by the user.&amp;quot;&amp;lt;/ref&amp;gt; || &#039;&#039;Julya&#039;&#039; || 2014 || [http://git.repo.i2p/w/jython_i2p_api.git Homepage and source code] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[I2Phex]] || &#039;&#039;[[Jwebcache]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ File] or [http://echelon.i2p/jwebcache/ File] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HTTP outproxy || &#039;&#039;Outertubes&#039;&#039; || 2012 ? || Description&amp;lt;ref&amp;gt;&amp;quot;Outertubes ia an HTTP Outproxy. It allows other I2P users to connect to the regular Internet via your machine.&amp;quot; from http://archiv.tutorials.i2p/i2p-plugins/outertubes/&amp;lt;/ref&amp;gt; (coded by HungryHobbo&amp;lt;ref&amp;gt;http://zzz.i2p/topics/1149&amp;lt;/ref&amp;gt;) ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Blog || &#039;&#039;Railroad&#039;&#039; || 2021 || http://idk.i2p/railroad || Easy to setup single-user blog which is compatible with Ghost themes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reseed || &#039;&#039;Reseed-tools&#039;&#039; || 2021 || http://idk.i2p/reseed-tools || Easy to setup I2P Reseed server in Go, also available as standalone software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Demo plugin || &#039;&#039;servlet3&#039;&#039; || 2019 || http://zzz.i2p/forums/16 || Test of servlet 3.0 features&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Demo plugin || &#039;&#039;Snowman&#039;&#039; ||  2015 || [http://stats.i2p/i2p/plugins/snowman.xpi2p File]. [http://stats.i2p/i2p/plugins/i2p.snowman.zip Source code] || Just a little test, creates a single-page webapp. The plugin contains some commented config files that may be helpful for plugin developers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Outproxy || &#039;&#039;socksoutproxy&#039;&#039; || 2022 || http://zzz.i2p/topics/3219 || Routes outproxy traffic to a local running Tor instance&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Forums || &#039;&#039;[[Syndie]]&#039;&#039; || 2016 || || Also available as standalone software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[Tahoe-LAFS]] || &#039;&#039;Tahoe-LAFS Controller&#039;&#039; || 2010 ||  [http://stats.i2p/i2p/plugins/tahoe-lafs-controller.xpi2p File (on stats.i2p)] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IRC Server || &#039;&#039;Terrarium&#039;&#039; || 2021 || http://idk.i2p/terrarium || Terrarium makes it easy to set up IRC networks on I2P.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| BitTorrent tracker || &#039;&#039;ZzzOT&#039;&#039; || 2020&amp;lt;ref&amp;gt;0.14.0-b1 released in 2015&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/zzzot.su3 File (on stats.i2p)]&amp;lt;ref&amp;gt;After installation, a brief help page will be available at http://127.0.0.1:7662/help.html. Be sure to read it completely!&amp;lt;/ref&amp;gt;|| A Java BitTorrent Opentracker. Has no eepsite, but a official forum (zzz.i2p)&amp;lt;ref&amp;gt;http://zzz.i2p/search?type=topics&amp;amp;query=zzzot&amp;amp;commit=Search&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:49--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Browser Configuration || &#039;&#039;Tor Browser Manager&#039;&#039; || 2022 || http://idk.i2p/i2p.plugins.tor-manager || Manages a Tor Browser instance and functions as a combined Tor/I2P browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Obsolete === &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;AyuDownloader&#039;&#039;&#039;: &amp;quot;AyuDownloader is an Plugin using the [[EepGet|EepGet class]] from I2P developers to download large files easier from Eepsites.&amp;quot; &amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=7468&amp;amp;highlight=yuDownloader&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;I2Cron&#039;&#039;&#039;: &amp;quot;The I2Cron plugin executes actions based on scheduled timed-based events, or polled events.&amp;quot;&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/8846695?rId=56eeff4c9298c&amp;amp;seq=1&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
* &#039;&#039;I2PControl&#039;&#039; [http://i2p-projekt.i2p/en/docs/api/i2pcontrol Description (on i2p-projekt.i2p/)]. [http://git.repo.i2p/w/i2p.scripts.git/tree/HEAD:/i2pcontrol Source code (Python)]  JSONRPC2 interface Obsolete, not required, now bundled in router&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;JAMWiki&#039;&#039;&#039;: A Java Wiki Engine. Active development of JAMWiki has ceased (2013)&amp;lt;ref&amp;gt;jamwiki.org/wiki/en/FAQ&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
* &#039;&#039;Neodatis&#039;&#039; File: [http://sponge.i2p/files/seedless/01_neodatis.xpi2p on sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p]  Used by [[Seedless]] which is unsupported and obsolete&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
* &#039;&#039;[[Orchid|Orchid]]-zzz&#039;&#039;  [http://stats.i2p/i2p/plugins/ (plugin website)]  &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt; Obsolete, supports v2 onion only&lt;br /&gt;
&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
* &#039;&#039;[[Orchid]]-thebland&#039;&#039; [http://thebland.i2p/i2p/plugins/ (plugin website)] [http://zzz.i2p/topics/2031?page=1#p11363 (How to install)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt; Obsolete, supports v2 onion only&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Pebble&#039;&#039;&#039;: &amp;quot;a lightweight, open source, Java EE blogging tool&amp;quot;.&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/9450470?rId=56ef019684452&amp;amp;seq=2&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
* &#039;&#039;[[Seedless]]&#039;&#039; [http://sponge.i2p/files/seedless/doc/how-to-seedless.html Description (on sponge.i2p)]. File: [http://sponge.i2p/files/seedless/02_seedless.xpi2p On sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p]&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2267-lost-plugin-directory&amp;lt;/ref&amp;gt; (read the article [[Seedless]] before to install !). Unsupported, obsolete&lt;br /&gt;
&lt;br /&gt;
== FAQ == &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
=== Does the plugin version always match with the latest standalone version? ===&lt;br /&gt;
Not always. Sometimes the plugin version is outdated: the standalone version of the software is more recent. If this case, you should use the standalone version.&lt;br /&gt;
&lt;br /&gt;
=== How to install a plugin? === &amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Usually, the process is as follows:&lt;br /&gt;
# Go to the plugin page in your I2P router console: &#039;I2P Services&#039; &amp;gt; &#039;Clients&#039; &amp;gt; &#039;Plugins&#039; (or click this URL: http://127.0.0.1:7657/configplugins)&lt;br /&gt;
# If you have the URL to the plugin file: at the bottom of the page, look for the box &#039;Installation from URL.&#039; Paste inside the URL to the plugin file (example: http://bote.i2p/i2pbote.su3)&lt;br /&gt;
# If you have the plugin file on your HDD: at the bottom of the page, look for the box &#039;Installation from File&#039; and browse to the location of the file. &lt;br /&gt;
# Click the button &#039;Install Plugin&#039; (or &#039;Install Plugin from file&#039;)&lt;br /&gt;
# Wait several minutes&lt;br /&gt;
# Once installed, you will see a new text string at the top of the router console, below &#039;I2P Services&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Note: you should read the description page of the plugin, because there is perhaps more setup to do.&lt;br /&gt;
&lt;br /&gt;
=== How to check the signature of a plugin file manually, before installing it === &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Usually, this isn&#039;t needed.  The I2P router plugin installer automatically checks whether the signature of the downloaded .su3 file is valid and created by an authorized developer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
If you still want to verify the signature manually, enter the following at the command line: &lt;br /&gt;
 java -jar /path/to/i2p.jar su3file verifysig -k /path/to/certificates/plugin/signer_at_mail.i2p.crt /path/to/plugin.su3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Note: most plugins&#039; source codes are downloadable from the I2P&#039;s Monotone server&amp;lt;ref&amp;gt;http://i2p-projekt.i2p/en/get-involved/guides/monotone&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Tails === &amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
Installation of plugins is disabled in [[Tails]].&amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=12482&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Plugin Development == &amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Those looking to create new plugins for I2P might want to look at the [http://i2p-projekt.i2p/en/docs/plugins introduction to plugin development], the [http://i2p-projekt.i2p/en/docs/spec/plugin plugin specification], and the [http://zzz.i2p plugin forum].&lt;br /&gt;
&lt;br /&gt;
== References == &amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
== External links == &amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
* http://i2p-projekt.i2p/en/docs/plugins - Official documentation&lt;br /&gt;
* http://stats.i2p/i2p/plugins/ - Official I2P plugins page (succeed to http://plugins.i2p)&lt;br /&gt;
* [http://direct.i2p/site/webcache/203642?rId=56eeb3f512c03&amp;amp;seq=1 http://plugins.i2p] main page, cached by http://direct.i2p search engine (2016-03) before it vanish&lt;br /&gt;
* [http://zzz.i2p/forums/16-plugins http://zzz.i2p/forums/] - The official forum for the plugins developpers&lt;br /&gt;
* http://archiv.tutorials.i2p/i2p-plugins/&lt;br /&gt;
-----&lt;br /&gt;
[[Category:I2P]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=494</id>
		<title>Plugins</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=494"/>
		<updated>2022-03-19T22:05:19Z</updated>

		<summary type="html">&lt;p&gt;Idk: Add tor browser manager&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction == &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
This page is about plugins designed for the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
I2P plugins are both a means to extend I2P&#039;s router functionality as well as a method of packaging things.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
I2P plugins are stored in &amp;quot;.su3&amp;quot; files (formerly in &amp;quot;.xpi2p&amp;quot; files, but that format is obsolete), and can be installed or uninstalled from the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Comment by Khanjant, 2016-03-17: &amp;quot;This is the plugin list managed to recover after the epic fall of http://plugins.i2p. Gathered from the plugin list on [http://stats.i2p/i2p/plugins stats.i2p] and [http://temporarypluginlist.i2p/plugins a unofficial temporary list]. I (Khanjant) just started, not finished yet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
Because of the sudden shutdown of http://plugins.i2p, some plugins files are still missing to us, if you have some that miss in this list, please contact [[user:Hummingbird]].&lt;br /&gt;
&lt;br /&gt;
== Plugin list == &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Non-obsolete === &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
! Type&lt;br /&gt;
! Plugin name&lt;br /&gt;
! Latest release (year)&lt;br /&gt;
! URLs (Description / File / Source code)&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Tor Helper || &#039;&#039;Blizzard&#039;&#039; || 2021 || http://idk.i2p/blizzard || Adds a Snowflake Proxy to I2P which helps Tor Browser users reach the Tor Network using Pluggable Transports.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;BwSchedule&#039;&#039; || 2015 ||  [http://y7hb4kzomfzzhekib2mby72ydlntiexmuafuwtlxrxyigtnd63la.b32.i2p/bwschedule_description.html Description by Cacapao (author)]  || Bandwidth scheduler for the I2P router&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool || &#039;&#039;Firefox Search Plugins&#039;&#039; || || [http://direct.i2p/site/webcache/9449449?rId=56eef8a275a82&amp;amp;seq=2 Description (cached page)] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:48--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Administration || &#039;&#039;GarlicFarm&#039;&#039; || 2019 || http://zzz.i2p/topics/2234 || Manage massive multihoming with LS2 Meta-leasesets. WIP, development stalled&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Email || &#039;&#039;[[I2P-Bote]]&#039;&#039; || 2018 || [[I2P-Bote#To_get_it|Description, file]] || Unsupported, obsolete, does not support signature types, needs developer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| File sharing || &#039;&#039;[[I2Phex]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ Plugin] || Also available as standalone software&amp;lt;ref&amp;gt;I2Phex v3.2.7 standalone available from http://echelon.i2p/i2phex/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:45--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| File sharing || &#039;&#039;i2psnark-rpc&#039;&#039; || 2020 || http://zzz.i2p/topics/2941 || Remote control of i2psnark using the Transmission RPC protocol&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IRC client || &#039;&#039;[[JIRCii|jIRCii]]&#039;&#039; || 2016&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2162-jircii-2014-12-9-z1&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/jIRCii.xpi2p File on stats.i2p], File from iMule (v0.9.0, 2011)&amp;lt;ref&amp;gt;ed2k://|file|jIRCii.xpi2p|319207|E08E77D0B9A76455C6EA55C0C1E3A477|h=V5S4ZMFRPWNLHEMY7EDIWDEYU33EGUU6|/&amp;lt;/ref&amp;gt; || jIRCii as a plugin for the I2P console, written in Java. [http://www.oldschoolirc.com Official website (clearnet, not I2P compatible)].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P&amp;lt;ref&amp;gt;&amp;quot;Julya is a network enabled Jython shell, allowing multiple instances of Jython to be managed from a network connection. Jython scripts can be run in a headless environment by sending scripts via TCP connections defined by the user.&amp;quot;&amp;lt;/ref&amp;gt; || &#039;&#039;Julya&#039;&#039; || 2014 || [http://git.repo.i2p/w/jython_i2p_api.git Homepage and source code] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[I2Phex]] || &#039;&#039;[[Jwebcache]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ File] or [http://echelon.i2p/jwebcache/ File] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HTTP outproxy || &#039;&#039;Outertubes&#039;&#039; || 2012 ? || Description&amp;lt;ref&amp;gt;&amp;quot;Outertubes ia an HTTP Outproxy. It allows other I2P users to connect to the regular Internet via your machine.&amp;quot; from http://archiv.tutorials.i2p/i2p-plugins/outertubes/&amp;lt;/ref&amp;gt; (coded by HungryHobbo&amp;lt;ref&amp;gt;http://zzz.i2p/topics/1149&amp;lt;/ref&amp;gt;) ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Blog || &#039;&#039;Railroad&#039;&#039; || 2021 || http://idk.i2p/railroad || Easy to setup single-user blog which is compatible with Ghost themes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reseed || &#039;&#039;Reseed-tools&#039;&#039; || 2021 || http://idk.i2p/reseed-tools || Easy to setup I2P Reseed server in Go, also available as standalone software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Demo plugin || &#039;&#039;servlet3&#039;&#039; || 2019 || http://zzz.i2p/forums/16 || Test of servlet 3.0 features&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Demo plugin || &#039;&#039;Snowman&#039;&#039; ||  2015 || [http://stats.i2p/i2p/plugins/snowman.xpi2p File]. [http://stats.i2p/i2p/plugins/i2p.snowman.zip Source code] || Just a little test, creates a single-page webapp. The plugin contains some commented config files that may be helpful for plugin developers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HTTP Outproxy || &#039;&#039;socksoutproxy&#039;&#039; || 2022 || http://zzz.i2p/topics/3219 || Routes outproxy traffic to a local running Tor instance&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Forums || &#039;&#039;[[Syndie]]&#039;&#039; || 2016 || || Also available as standalone software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[Tahoe-LAFS]] || &#039;&#039;Tahoe-LAFS Controller&#039;&#039; || 2010 ||  [http://stats.i2p/i2p/plugins/tahoe-lafs-controller.xpi2p File (on stats.i2p)] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IRC Server || &#039;&#039;Terrarium&#039;&#039; || 2021 || http://idk.i2p/terrarium || Terrarium makes it easy to set up IRC networks on I2P.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| BitTorrent tracker || &#039;&#039;ZzzOT&#039;&#039; || 2020&amp;lt;ref&amp;gt;0.14.0-b1 released in 2015&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/zzzot.su3 File (on stats.i2p)]&amp;lt;ref&amp;gt;After installation, a brief help page will be available at http://127.0.0.1:7662/help.html. Be sure to read it completely!&amp;lt;/ref&amp;gt;|| A Java BitTorrent Opentracker. Has no eepsite, but a official forum (zzz.i2p)&amp;lt;ref&amp;gt;http://zzz.i2p/search?type=topics&amp;amp;query=zzzot&amp;amp;commit=Search&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:49--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Browser Configuration || &#039;&#039;Tor Browser Manager&#039;&#039; || 2021 || http://idk.i2p/i2p.plugins.tor-manager || Manages a Tor Browser instance and functions as a combined Tor/I2P browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Obsolete === &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;AyuDownloader&#039;&#039;&#039;: &amp;quot;AyuDownloader is an Plugin using the [[EepGet|EepGet class]] from I2P developers to download large files easier from Eepsites.&amp;quot; &amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=7468&amp;amp;highlight=yuDownloader&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;I2Cron&#039;&#039;&#039;: &amp;quot;The I2Cron plugin executes actions based on scheduled timed-based events, or polled events.&amp;quot;&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/8846695?rId=56eeff4c9298c&amp;amp;seq=1&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
* &#039;&#039;I2PControl&#039;&#039; [http://i2p-projekt.i2p/en/docs/api/i2pcontrol Description (on i2p-projekt.i2p/)]. [http://git.repo.i2p/w/i2p.scripts.git/tree/HEAD:/i2pcontrol Source code (Python)]  JSONRPC2 interface Obsolete, not required, now bundled in router&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;JAMWiki&#039;&#039;&#039;: A Java Wiki Engine. Active development of JAMWiki has ceased (2013)&amp;lt;ref&amp;gt;jamwiki.org/wiki/en/FAQ&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
* &#039;&#039;Neodatis&#039;&#039; File: [http://sponge.i2p/files/seedless/01_neodatis.xpi2p on sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p]  Used by [[Seedless]] which is unsupported and obsolete&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
* &#039;&#039;[[Orchid|Orchid]]-zzz&#039;&#039;  [http://stats.i2p/i2p/plugins/ (plugin website)]  &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt; Obsolete, supports v2 onion only&lt;br /&gt;
&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
* &#039;&#039;[[Orchid]]-thebland&#039;&#039; [http://thebland.i2p/i2p/plugins/ (plugin website)] [http://zzz.i2p/topics/2031?page=1#p11363 (How to install)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt; Obsolete, supports v2 onion only&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Pebble&#039;&#039;&#039;: &amp;quot;a lightweight, open source, Java EE blogging tool&amp;quot;.&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/9450470?rId=56ef019684452&amp;amp;seq=2&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
* &#039;&#039;[[Seedless]]&#039;&#039; [http://sponge.i2p/files/seedless/doc/how-to-seedless.html Description (on sponge.i2p)]. File: [http://sponge.i2p/files/seedless/02_seedless.xpi2p On sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p]&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2267-lost-plugin-directory&amp;lt;/ref&amp;gt; (read the article [[Seedless]] before to install !). Unsupported, obsolete&lt;br /&gt;
&lt;br /&gt;
== FAQ == &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
=== Does the plugin version always match with the latest standalone version? ===&lt;br /&gt;
Not always. Sometimes the plugin version is outdated: the standalone version of the software is more recent. If this case, you should use the standalone version.&lt;br /&gt;
&lt;br /&gt;
=== How to install a plugin? === &amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Usually, the process is as follows:&lt;br /&gt;
# Go to the plugin page in your I2P router console: &#039;I2P Services&#039; &amp;gt; &#039;Clients&#039; &amp;gt; &#039;Plugins&#039; (or click this URL: http://127.0.0.1:7657/configplugins)&lt;br /&gt;
# If you have the URL to the plugin file: at the bottom of the page, look for the box &#039;Installation from URL.&#039; Paste inside the URL to the plugin file (example: http://bote.i2p/i2pbote.su3)&lt;br /&gt;
# If you have the plugin file on your HDD: at the bottom of the page, look for the box &#039;Installation from File&#039; and browse to the location of the file. &lt;br /&gt;
# Click the button &#039;Install Plugin&#039; (or &#039;Install Plugin from file&#039;)&lt;br /&gt;
# Wait several minutes&lt;br /&gt;
# Once installed, you will see a new text string at the top of the router console, below &#039;I2P Services&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Note: you should read the description page of the plugin, because there is perhaps more setup to do.&lt;br /&gt;
&lt;br /&gt;
=== How to check the signature of a plugin file manually, before installing it === &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Usually, this isn&#039;t needed.  The I2P router plugin installer automatically checks whether the signature of the downloaded .su3 file is valid and created by an authorized developer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
If you still want to verify the signature manually, enter the following at the command line: &lt;br /&gt;
 java -jar /path/to/i2p.jar su3file verifysig -k /path/to/certificates/plugin/signer_at_mail.i2p.crt /path/to/plugin.su3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Note: most plugins&#039; source codes are downloadable from the I2P&#039;s Monotone server&amp;lt;ref&amp;gt;http://i2p-projekt.i2p/en/get-involved/guides/monotone&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Tails === &amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
Installation of plugins is disabled in [[Tails]].&amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=12482&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Plugin Development == &amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Those looking to create new plugins for I2P might want to look at the [http://i2p-projekt.i2p/en/docs/plugins introduction to plugin development], the [http://i2p-projekt.i2p/en/docs/spec/plugin plugin specification], and the [http://zzz.i2p plugin forum].&lt;br /&gt;
&lt;br /&gt;
== References == &amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
== External links == &amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
* http://i2p-projekt.i2p/en/docs/plugins - Official documentation&lt;br /&gt;
* http://stats.i2p/i2p/plugins/ - Official I2P plugins page (succeed to http://plugins.i2p)&lt;br /&gt;
* [http://direct.i2p/site/webcache/203642?rId=56eeb3f512c03&amp;amp;seq=1 http://plugins.i2p] main page, cached by http://direct.i2p search engine (2016-03) before it vanish&lt;br /&gt;
* [http://zzz.i2p/forums/16-plugins http://zzz.i2p/forums/] - The official forum for the plugins developpers&lt;br /&gt;
* http://archiv.tutorials.i2p/i2p-plugins/&lt;br /&gt;
-----&lt;br /&gt;
[[Category:I2P]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=481</id>
		<title>Plugins</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=481"/>
		<updated>2021-12-12T02:19:07Z</updated>

		<summary type="html">&lt;p&gt;Idk: Add terrarium plugin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction == &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
This page is about plugins designed for the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
I2P plugins are both a means to extend I2P&#039;s router functionality as well as a method of packaging things.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
I2P plugins are stored in &amp;quot;.xpi2p&amp;quot; files, and can be installed or uninstalled from the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Comment by Khanjant, 2016-03-17: &amp;quot;This is the plugin list managed to recover after the epic fall of http://plugins.i2p. Gathered from the plugin list on [http://stats.i2p/i2p/plugins stats.i2p] and [http://temporarypluginlist.i2p/plugins a unofficial temporary list]. I (Khanjant) just started, not finished yet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
Because of the sudden shutdown of http://plugins.i2p, some plugins files are still missing to us, if you have some that miss in this list, please contact [[user:Hummingbird]].&lt;br /&gt;
&lt;br /&gt;
== Plugin list == &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Non-obsolete === &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
! Type&lt;br /&gt;
! Plugin name&lt;br /&gt;
! Latest release (year)&lt;br /&gt;
! URLs (Description / File / Source code)&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;BwSchedule&#039;&#039; || 2015 ||  [http://y7hb4kzomfzzhekib2mby72ydlntiexmuafuwtlxrxyigtnd63la.b32.i2p/bwschedule_description.html Description by Cacapao (author)]  || Bandwidth scheduler for the I2P router&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Demo plugin || &#039;&#039;Snowman&#039;&#039; ||  2015 || [http://stats.i2p/i2p/plugins/snowman.xpi2p File]. [http://stats.i2p/i2p/plugins/i2p.snowman.zip Source code] || Just a little test, creates a single-page webapp. The plugin contains some commented config files that may be helpful for plugin developers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Email || &#039;&#039;[[I2P-Bote]]&#039;&#039; || 2018 || [[I2P-Bote#To_get_it|Description, file]] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| File sharing || &#039;&#039;[[I2Phex]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ Plugin] || Also available as standalone software&amp;lt;ref&amp;gt;I2Phex v3.2.7 standalone available from http://echelon.i2p/i2phex/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool || &#039;&#039;Firefox Search Plugins&#039;&#039; || || [http://direct.i2p/site/webcache/9449449?rId=56eef8a275a82&amp;amp;seq=2 Description (cached page)] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;I2PControl&#039;&#039; || 2018 || [http://i2p-projekt.i2p/en/docs/api/i2pcontrol Description (on i2p-projekt.i2p/)]. [http://git.repo.i2p/w/i2p.scripts.git/tree/HEAD:/i2pcontrol Source code (Python)] ||  JSONRPC2 interface&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IRC client || &#039;&#039;[[JIRCii|jIRCii]]&#039;&#039; || 2016&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2162-jircii-2014-12-9-z1&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/jIRCii.xpi2p File on stats.i2p], File from iMule (v0.9.0, 2011)&amp;lt;ref&amp;gt;ed2k://|file|jIRCii.xpi2p|319207|E08E77D0B9A76455C6EA55C0C1E3A477|h=V5S4ZMFRPWNLHEMY7EDIWDEYU33EGUU6|/&amp;lt;/ref&amp;gt; || jIRCii as a plugin for the I2P console, written in Java. [http://www.oldschoolirc.com Official website (clearnet, not I2P compatible)].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P&amp;lt;ref&amp;gt;&amp;quot;Julya is a network enabled Jython shell, allowing multiple instances of Jython to be managed from a network connection. Jython scripts can be run in a headless environment by sending scripts via TCP connections defined by the user.&amp;quot;&amp;lt;/ref&amp;gt; || &#039;&#039;Julya&#039;&#039; || 2014 || [http://git.repo.i2p/w/jython_i2p_api.git Homepage and source code] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[I2Phex]] || &#039;&#039;[[Jwebcache]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ File] or [http://echelon.i2p/jwebcache/ File] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HTTP outproxy || &#039;&#039;Outertubes&#039;&#039; || 2012 ? || Description&amp;lt;ref&amp;gt;&amp;quot;Outertubes ia an HTTP Outproxy. It allows other I2P users to connect to the regular Internet via your machine.&amp;quot; from http://archiv.tutorials.i2p/i2p-plugins/outertubes/&amp;lt;/ref&amp;gt; (coded by HungryHobbo&amp;lt;ref&amp;gt;http://zzz.i2p/topics/1149&amp;lt;/ref&amp;gt;) ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Database || &#039;&#039;Neodatis&#039;&#039; || 2012 || File: [http://sponge.i2p/files/seedless/01_neodatis.xpi2p on sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p] || Used by [[Seedless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid|Orchid]]-zzz&#039;&#039; || 2018 || [http://stats.i2p/i2p/plugins/ (plugin website)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid]]-thebland&#039;&#039; || 2016 || [http://thebland.i2p/i2p/plugins/ (plugin website)] [http://zzz.i2p/topics/2031?page=1#p11363 (How to install)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;[[Seedless]]&#039;&#039; || 2012 || [http://sponge.i2p/files/seedless/doc/how-to-seedless.html Description (on sponge.i2p)]. File: [http://sponge.i2p/files/seedless/02_seedless.xpi2p On sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p]&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2267-lost-plugin-directory&amp;lt;/ref&amp;gt; (read the article [[Seedless]] before to install !). || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Forums || &#039;&#039;[[Syndie]]&#039;&#039; || 2016 || || Also available as standalone software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[Tahoe-LAFS]] || &#039;&#039;Tahoe-LAFS Controller&#039;&#039; || 201x ||  [http://stats.i2p/i2p/plugins/tahoe-lafs-controller.xpi2p File (on stats.i2p)] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| BitTorrent tracker || &#039;&#039;ZzzOT&#039;&#039; || 2015&amp;lt;ref&amp;gt;0.14.0-b1 released in 2015&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/zzzot.su3 File (on stats.i2p)]&amp;lt;ref&amp;gt;After installation, a brief help page will be available at http://127.0.0.1:7662/help.html. Be sure to read it completely!&amp;lt;/ref&amp;gt;|| A Java BitTorrent Opentracker. Has no eepsite, but a official forum (zzz.i2p)&amp;lt;ref&amp;gt;http://zzz.i2p/search?type=topics&amp;amp;query=zzzot&amp;amp;commit=Search&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reseed || &#039;&#039;Reseed-tools&#039;&#039; || 2021 || http://idk.i2p/reseed-tools || Easy to setup I2P Reseed server in Go, also available as standalone software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Helper || &#039;&#039;Blizzard&#039;&#039; || 2021 || http://idk.i2p/blizzard || Adds a Snowflake Proxy to I2P which helps Tor Browser users reach the Tor Network using Pluggable Transports.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Blog || &#039;&#039;Railroad&#039;&#039; || 2021 || http://idk.i2p/railroad || Easy to setup single-user blog which is compatible with Ghost themes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IRC Server || &#039;&#039;Terrarium&#039;&#039; || 2021 || http://idk.i2p/terrarium || Terrarium makes it easy to set up IRC networks on I2P.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Obsolete === &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;AyuDownloader&#039;&#039;&#039;: &amp;quot;AyuDownloader is an Plugin using the [[EepGet|EepGet class]] from I2P developers to download large files easier from Eepsites.&amp;quot; &amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=7468&amp;amp;highlight=yuDownloader&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;I2Cron&#039;&#039;&#039;: &amp;quot;The I2Cron plugin executes actions based on scheduled timed-based events, or polled events.&amp;quot;&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/8846695?rId=56eeff4c9298c&amp;amp;seq=1&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;JAMWiki&#039;&#039;&#039;: A Java Wiki Engine. Active development of JAMWiki has ceased (2013)&amp;lt;ref&amp;gt;jamwiki.org/wiki/en/FAQ&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Pebble&#039;&#039;&#039;: &amp;quot;a lightweight, open source, Java EE blogging tool&amp;quot;.&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/9450470?rId=56ef019684452&amp;amp;seq=2&amp;lt;/ref&amp;gt;&lt;br /&gt;
== FAQ == &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
=== Does the plugin version always match with the latest standalone version? ===&lt;br /&gt;
Not always. Sometimes the plugin version is outdated: the standalone version of the software is more recent. If this case, you should use the standalone version.&lt;br /&gt;
&lt;br /&gt;
=== How to install a plugin? === &amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Usually, the process is as follows:&lt;br /&gt;
# Go to the plugin page in your I2P router console: &#039;I2P Services&#039; &amp;gt; &#039;Clients&#039; &amp;gt; &#039;Plugins&#039; (or click this URL: http://127.0.0.1:7657/configplugins)&lt;br /&gt;
# If you have the URL to the plugin file: at the bottom of the page, look for the box &#039;Installation from URL.&#039; Paste inside the URL to the plugin file (example: http://bote.i2p/i2pbote.su3)&lt;br /&gt;
# If you have the plugin file on your HDD: at the bottom of the page, look for the box &#039;Installation from File&#039; and browse to the location of the file. &lt;br /&gt;
# Click the button &#039;Install Plugin&#039; (or &#039;Install Plugin from file&#039;)&lt;br /&gt;
# Wait several minutes&lt;br /&gt;
# Once installed, you will see a new text string at the top of the router console, below &#039;I2P Services&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Note: you should read the description page of the plugin, because there is perhaps more setup to do.&lt;br /&gt;
&lt;br /&gt;
=== How to check the signature of a plugin file manually, before installing it === &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Usually, this isn&#039;t needed.  The I2P router plugin installer automatically checks whether the signature of the downloaded .su3 file is valid and created by an authorized developer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
If you still want to verify the signature manually, enter the following at the command line: &lt;br /&gt;
 java -jar /path/to/i2p.jar su3file verifysig -k /path/to/certificates/plugin/signer_at_mail.i2p.crt /path/to/plugin.su3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Note: most plugins&#039; source codes are downloadable from the I2P&#039;s Monotone server&amp;lt;ref&amp;gt;http://i2p-projekt.i2p/en/get-involved/guides/monotone&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Tails === &amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
Installation of plugins is disabled in [[Tails]].&amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=12482&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Plugin Development == &amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Those looking to create new plugins for I2P might want to look at the [http://i2p-projekt.i2p/en/docs/plugins introduction to plugin development], the [http://i2p-projekt.i2p/en/docs/spec/plugin plugin specification], and the [http://zzz.i2p plugin forum].&lt;br /&gt;
&lt;br /&gt;
== References == &amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
== External links == &amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
* http://i2p-projekt.i2p/en/docs/plugins - Official documentation&lt;br /&gt;
* http://stats.i2p/i2p/plugins/ - Official I2P plugins page (succeed to http://plugins.i2p)&lt;br /&gt;
* [http://direct.i2p/site/webcache/203642?rId=56eeb3f512c03&amp;amp;seq=1 http://plugins.i2p] main page, cached by http://direct.i2p search engine (2016-03) before it vanish&lt;br /&gt;
* [http://zzz.i2p/forums/16-plugins http://zzz.i2p/forums/] - The official forum for the plugins developpers&lt;br /&gt;
* http://archiv.tutorials.i2p/i2p-plugins/&lt;br /&gt;
-----&lt;br /&gt;
[[Category:I2P]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=480</id>
		<title>Plugins</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=480"/>
		<updated>2021-12-12T01:52:04Z</updated>

		<summary type="html">&lt;p&gt;Idk: Add Railroad plugin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction == &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
This page is about plugins designed for the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
I2P plugins are both a means to extend I2P&#039;s router functionality as well as a method of packaging things.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
I2P plugins are stored in &amp;quot;.xpi2p&amp;quot; files, and can be installed or uninstalled from the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Comment by Khanjant, 2016-03-17: &amp;quot;This is the plugin list managed to recover after the epic fall of http://plugins.i2p. Gathered from the plugin list on [http://stats.i2p/i2p/plugins stats.i2p] and [http://temporarypluginlist.i2p/plugins a unofficial temporary list]. I (Khanjant) just started, not finished yet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
Because of the sudden shutdown of http://plugins.i2p, some plugins files are still missing to us, if you have some that miss in this list, please contact [[user:Hummingbird]].&lt;br /&gt;
&lt;br /&gt;
== Plugin list == &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Non-obsolete === &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
! Type&lt;br /&gt;
! Plugin name&lt;br /&gt;
! Latest release (year)&lt;br /&gt;
! URLs (Description / File / Source code)&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;BwSchedule&#039;&#039; || 2015 ||  [http://y7hb4kzomfzzhekib2mby72ydlntiexmuafuwtlxrxyigtnd63la.b32.i2p/bwschedule_description.html Description by Cacapao (author)]  || Bandwidth scheduler for the I2P router&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Demo plugin || &#039;&#039;Snowman&#039;&#039; ||  2015 || [http://stats.i2p/i2p/plugins/snowman.xpi2p File]. [http://stats.i2p/i2p/plugins/i2p.snowman.zip Source code] || Just a little test, creates a single-page webapp. The plugin contains some commented config files that may be helpful for plugin developers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Email || &#039;&#039;[[I2P-Bote]]&#039;&#039; || 2018 || [[I2P-Bote#To_get_it|Description, file]] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| File sharing || &#039;&#039;[[I2Phex]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ Plugin] || Also available as standalone software&amp;lt;ref&amp;gt;I2Phex v3.2.7 standalone available from http://echelon.i2p/i2phex/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool || &#039;&#039;Firefox Search Plugins&#039;&#039; || || [http://direct.i2p/site/webcache/9449449?rId=56eef8a275a82&amp;amp;seq=2 Description (cached page)] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;I2PControl&#039;&#039; || 2018 || [http://i2p-projekt.i2p/en/docs/api/i2pcontrol Description (on i2p-projekt.i2p/)]. [http://git.repo.i2p/w/i2p.scripts.git/tree/HEAD:/i2pcontrol Source code (Python)] ||  JSONRPC2 interface&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IRC client || &#039;&#039;[[JIRCii|jIRCii]]&#039;&#039; || 2016&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2162-jircii-2014-12-9-z1&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/jIRCii.xpi2p File on stats.i2p], File from iMule (v0.9.0, 2011)&amp;lt;ref&amp;gt;ed2k://|file|jIRCii.xpi2p|319207|E08E77D0B9A76455C6EA55C0C1E3A477|h=V5S4ZMFRPWNLHEMY7EDIWDEYU33EGUU6|/&amp;lt;/ref&amp;gt; || jIRCii as a plugin for the I2P console, written in Java. [http://www.oldschoolirc.com Official website (clearnet, not I2P compatible)].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P&amp;lt;ref&amp;gt;&amp;quot;Julya is a network enabled Jython shell, allowing multiple instances of Jython to be managed from a network connection. Jython scripts can be run in a headless environment by sending scripts via TCP connections defined by the user.&amp;quot;&amp;lt;/ref&amp;gt; || &#039;&#039;Julya&#039;&#039; || 2014 || [http://git.repo.i2p/w/jython_i2p_api.git Homepage and source code] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[I2Phex]] || &#039;&#039;[[Jwebcache]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ File] or [http://echelon.i2p/jwebcache/ File] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HTTP outproxy || &#039;&#039;Outertubes&#039;&#039; || 2012 ? || Description&amp;lt;ref&amp;gt;&amp;quot;Outertubes ia an HTTP Outproxy. It allows other I2P users to connect to the regular Internet via your machine.&amp;quot; from http://archiv.tutorials.i2p/i2p-plugins/outertubes/&amp;lt;/ref&amp;gt; (coded by HungryHobbo&amp;lt;ref&amp;gt;http://zzz.i2p/topics/1149&amp;lt;/ref&amp;gt;) ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Database || &#039;&#039;Neodatis&#039;&#039; || 2012 || File: [http://sponge.i2p/files/seedless/01_neodatis.xpi2p on sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p] || Used by [[Seedless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid|Orchid]]-zzz&#039;&#039; || 2018 || [http://stats.i2p/i2p/plugins/ (plugin website)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid]]-thebland&#039;&#039; || 2016 || [http://thebland.i2p/i2p/plugins/ (plugin website)] [http://zzz.i2p/topics/2031?page=1#p11363 (How to install)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;[[Seedless]]&#039;&#039; || 2012 || [http://sponge.i2p/files/seedless/doc/how-to-seedless.html Description (on sponge.i2p)]. File: [http://sponge.i2p/files/seedless/02_seedless.xpi2p On sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p]&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2267-lost-plugin-directory&amp;lt;/ref&amp;gt; (read the article [[Seedless]] before to install !). || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Forums || &#039;&#039;[[Syndie]]&#039;&#039; || 2016 || || Also available as standalone software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[Tahoe-LAFS]] || &#039;&#039;Tahoe-LAFS Controller&#039;&#039; || 201x ||  [http://stats.i2p/i2p/plugins/tahoe-lafs-controller.xpi2p File (on stats.i2p)] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| BitTorrent tracker || &#039;&#039;ZzzOT&#039;&#039; || 2015&amp;lt;ref&amp;gt;0.14.0-b1 released in 2015&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/zzzot.su3 File (on stats.i2p)]&amp;lt;ref&amp;gt;After installation, a brief help page will be available at http://127.0.0.1:7662/help.html. Be sure to read it completely!&amp;lt;/ref&amp;gt;|| A Java BitTorrent Opentracker. Has no eepsite, but a official forum (zzz.i2p)&amp;lt;ref&amp;gt;http://zzz.i2p/search?type=topics&amp;amp;query=zzzot&amp;amp;commit=Search&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reseed || &#039;&#039;Reseed-tools&#039;&#039; || 2021 || http://idk.i2p/reseed-tools || Easy to setup I2P Reseed server in Go, also available as standalone software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Helper || &#039;&#039;Blizzard&#039;&#039; || 2021 || http://idk.i2p/blizzard || Adds a Snowflake Proxy to I2P which helps Tor Browser users reach the Tor Network using Pluggable Transports.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Blog || &#039;&#039;Railroad&#039;&#039; || 2021 || http://idk.i2p/railroad || Easy to setup single-user blog which is compatible with Ghost themes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Obsolete === &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;AyuDownloader&#039;&#039;&#039;: &amp;quot;AyuDownloader is an Plugin using the [[EepGet|EepGet class]] from I2P developers to download large files easier from Eepsites.&amp;quot; &amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=7468&amp;amp;highlight=yuDownloader&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;I2Cron&#039;&#039;&#039;: &amp;quot;The I2Cron plugin executes actions based on scheduled timed-based events, or polled events.&amp;quot;&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/8846695?rId=56eeff4c9298c&amp;amp;seq=1&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;JAMWiki&#039;&#039;&#039;: A Java Wiki Engine. Active development of JAMWiki has ceased (2013)&amp;lt;ref&amp;gt;jamwiki.org/wiki/en/FAQ&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Pebble&#039;&#039;&#039;: &amp;quot;a lightweight, open source, Java EE blogging tool&amp;quot;.&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/9450470?rId=56ef019684452&amp;amp;seq=2&amp;lt;/ref&amp;gt;&lt;br /&gt;
== FAQ == &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
=== Does the plugin version always match with the latest standalone version? ===&lt;br /&gt;
Not always. Sometimes the plugin version is outdated: the standalone version of the software is more recent. If this case, you should use the standalone version.&lt;br /&gt;
&lt;br /&gt;
=== How to install a plugin? === &amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Usually, the process is as follows:&lt;br /&gt;
# Go to the plugin page in your I2P router console: &#039;I2P Services&#039; &amp;gt; &#039;Clients&#039; &amp;gt; &#039;Plugins&#039; (or click this URL: http://127.0.0.1:7657/configplugins)&lt;br /&gt;
# If you have the URL to the plugin file: at the bottom of the page, look for the box &#039;Installation from URL.&#039; Paste inside the URL to the plugin file (example: http://bote.i2p/i2pbote.su3)&lt;br /&gt;
# If you have the plugin file on your HDD: at the bottom of the page, look for the box &#039;Installation from File&#039; and browse to the location of the file. &lt;br /&gt;
# Click the button &#039;Install Plugin&#039; (or &#039;Install Plugin from file&#039;)&lt;br /&gt;
# Wait several minutes&lt;br /&gt;
# Once installed, you will see a new text string at the top of the router console, below &#039;I2P Services&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Note: you should read the description page of the plugin, because there is perhaps more setup to do.&lt;br /&gt;
&lt;br /&gt;
=== How to check the signature of a plugin file manually, before installing it === &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Usually, this isn&#039;t needed.  The I2P router plugin installer automatically checks whether the signature of the downloaded .su3 file is valid and created by an authorized developer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
If you still want to verify the signature manually, enter the following at the command line: &lt;br /&gt;
 java -jar /path/to/i2p.jar su3file verifysig -k /path/to/certificates/plugin/signer_at_mail.i2p.crt /path/to/plugin.su3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Note: most plugins&#039; source codes are downloadable from the I2P&#039;s Monotone server&amp;lt;ref&amp;gt;http://i2p-projekt.i2p/en/get-involved/guides/monotone&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Tails === &amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
Installation of plugins is disabled in [[Tails]].&amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=12482&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Plugin Development == &amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Those looking to create new plugins for I2P might want to look at the [http://i2p-projekt.i2p/en/docs/plugins introduction to plugin development], the [http://i2p-projekt.i2p/en/docs/spec/plugin plugin specification], and the [http://zzz.i2p plugin forum].&lt;br /&gt;
&lt;br /&gt;
== References == &amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
== External links == &amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
* http://i2p-projekt.i2p/en/docs/plugins - Official documentation&lt;br /&gt;
* http://stats.i2p/i2p/plugins/ - Official I2P plugins page (succeed to http://plugins.i2p)&lt;br /&gt;
* [http://direct.i2p/site/webcache/203642?rId=56eeb3f512c03&amp;amp;seq=1 http://plugins.i2p] main page, cached by http://direct.i2p search engine (2016-03) before it vanish&lt;br /&gt;
* [http://zzz.i2p/forums/16-plugins http://zzz.i2p/forums/] - The official forum for the plugins developpers&lt;br /&gt;
* http://archiv.tutorials.i2p/i2p-plugins/&lt;br /&gt;
-----&lt;br /&gt;
[[Category:I2P]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=479</id>
		<title>Plugins</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=479"/>
		<updated>2021-12-06T05:12:24Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction == &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
This page is about plugins designed for the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
I2P plugins are both a means to extend I2P&#039;s router functionality as well as a method of packaging things.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
I2P plugins are stored in &amp;quot;.xpi2p&amp;quot; files, and can be installed or uninstalled from the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Comment by Khanjant, 2016-03-17: &amp;quot;This is the plugin list managed to recover after the epic fall of http://plugins.i2p. Gathered from the plugin list on [http://stats.i2p/i2p/plugins stats.i2p] and [http://temporarypluginlist.i2p/plugins a unofficial temporary list]. I (Khanjant) just started, not finished yet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
Because of the sudden shutdown of http://plugins.i2p, some plugins files are still missing to us, if you have some that miss in this list, please contact [[user:Hummingbird]].&lt;br /&gt;
&lt;br /&gt;
== Plugin list == &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Non-obsolete === &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
! Type&lt;br /&gt;
! Plugin name&lt;br /&gt;
! Latest release (year)&lt;br /&gt;
! URLs (Description / File / Source code)&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;BwSchedule&#039;&#039; || 2015 ||  [http://y7hb4kzomfzzhekib2mby72ydlntiexmuafuwtlxrxyigtnd63la.b32.i2p/bwschedule_description.html Description by Cacapao (author)]  || Bandwidth scheduler for the I2P router&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Demo plugin || &#039;&#039;Snowman&#039;&#039; ||  2015 || [http://stats.i2p/i2p/plugins/snowman.xpi2p File]. [http://stats.i2p/i2p/plugins/i2p.snowman.zip Source code] || Just a little test, creates a single-page webapp. The plugin contains some commented config files that may be helpful for plugin developers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Email || &#039;&#039;[[I2P-Bote]]&#039;&#039; || 2018 || [[I2P-Bote#To_get_it|Description, file]] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| File sharing || &#039;&#039;[[I2Phex]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ Plugin] || Also available as standalone software&amp;lt;ref&amp;gt;I2Phex v3.2.7 standalone available from http://echelon.i2p/i2phex/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool || &#039;&#039;Firefox Search Plugins&#039;&#039; || || [http://direct.i2p/site/webcache/9449449?rId=56eef8a275a82&amp;amp;seq=2 Description (cached page)] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;I2PControl&#039;&#039; || 2018 || [http://i2p-projekt.i2p/en/docs/api/i2pcontrol Description (on i2p-projekt.i2p/)]. [http://git.repo.i2p/w/i2p.scripts.git/tree/HEAD:/i2pcontrol Source code (Python)] ||  JSONRPC2 interface&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IRC client || &#039;&#039;[[JIRCii|jIRCii]]&#039;&#039; || 2016&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2162-jircii-2014-12-9-z1&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/jIRCii.xpi2p File on stats.i2p], File from iMule (v0.9.0, 2011)&amp;lt;ref&amp;gt;ed2k://|file|jIRCii.xpi2p|319207|E08E77D0B9A76455C6EA55C0C1E3A477|h=V5S4ZMFRPWNLHEMY7EDIWDEYU33EGUU6|/&amp;lt;/ref&amp;gt; || jIRCii as a plugin for the I2P console, written in Java. [http://www.oldschoolirc.com Official website (clearnet, not I2P compatible)].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P&amp;lt;ref&amp;gt;&amp;quot;Julya is a network enabled Jython shell, allowing multiple instances of Jython to be managed from a network connection. Jython scripts can be run in a headless environment by sending scripts via TCP connections defined by the user.&amp;quot;&amp;lt;/ref&amp;gt; || &#039;&#039;Julya&#039;&#039; || 2014 || [http://git.repo.i2p/w/jython_i2p_api.git Homepage and source code] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[I2Phex]] || &#039;&#039;[[Jwebcache]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ File] or [http://echelon.i2p/jwebcache/ File] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HTTP outproxy || &#039;&#039;Outertubes&#039;&#039; || 2012 ? || Description&amp;lt;ref&amp;gt;&amp;quot;Outertubes ia an HTTP Outproxy. It allows other I2P users to connect to the regular Internet via your machine.&amp;quot; from http://archiv.tutorials.i2p/i2p-plugins/outertubes/&amp;lt;/ref&amp;gt; (coded by HungryHobbo&amp;lt;ref&amp;gt;http://zzz.i2p/topics/1149&amp;lt;/ref&amp;gt;) ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Database || &#039;&#039;Neodatis&#039;&#039; || 2012 || File: [http://sponge.i2p/files/seedless/01_neodatis.xpi2p on sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p] || Used by [[Seedless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid|Orchid]]-zzz&#039;&#039; || 2018 || [http://stats.i2p/i2p/plugins/ (plugin website)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid]]-thebland&#039;&#039; || 2016 || [http://thebland.i2p/i2p/plugins/ (plugin website)] [http://zzz.i2p/topics/2031?page=1#p11363 (How to install)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;[[Seedless]]&#039;&#039; || 2012 || [http://sponge.i2p/files/seedless/doc/how-to-seedless.html Description (on sponge.i2p)]. File: [http://sponge.i2p/files/seedless/02_seedless.xpi2p On sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p]&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2267-lost-plugin-directory&amp;lt;/ref&amp;gt; (read the article [[Seedless]] before to install !). || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Forums || &#039;&#039;[[Syndie]]&#039;&#039; || 2016 || || Also available as standalone software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[Tahoe-LAFS]] || &#039;&#039;Tahoe-LAFS Controller&#039;&#039; || 201x ||  [http://stats.i2p/i2p/plugins/tahoe-lafs-controller.xpi2p File (on stats.i2p)] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| BitTorrent tracker || &#039;&#039;ZzzOT&#039;&#039; || 2015&amp;lt;ref&amp;gt;0.14.0-b1 released in 2015&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/zzzot.su3 File (on stats.i2p)]&amp;lt;ref&amp;gt;After installation, a brief help page will be available at http://127.0.0.1:7662/help.html. Be sure to read it completely!&amp;lt;/ref&amp;gt;|| A Java BitTorrent Opentracker. Has no eepsite, but a official forum (zzz.i2p)&amp;lt;ref&amp;gt;http://zzz.i2p/search?type=topics&amp;amp;query=zzzot&amp;amp;commit=Search&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reseed || &#039;&#039;Reseed-tools&#039;&#039; || 2021 || http://idk.i2p/reseed-tools || Easy to setup I2P Reseed server in Go, also available as standalone software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Helper || &#039;&#039;Blizzard&#039;&#039; || 2021 || http://idk.i2p/blizzard || Adds a Snowflake Proxy to I2P which helps Tor Browser users reach the Tor Network using Pluggable Transports.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Obsolete === &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;AyuDownloader&#039;&#039;&#039;: &amp;quot;AyuDownloader is an Plugin using the [[EepGet|EepGet class]] from I2P developers to download large files easier from Eepsites.&amp;quot; &amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=7468&amp;amp;highlight=yuDownloader&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;I2Cron&#039;&#039;&#039;: &amp;quot;The I2Cron plugin executes actions based on scheduled timed-based events, or polled events.&amp;quot;&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/8846695?rId=56eeff4c9298c&amp;amp;seq=1&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;JAMWiki&#039;&#039;&#039;: A Java Wiki Engine. Active development of JAMWiki has ceased (2013)&amp;lt;ref&amp;gt;jamwiki.org/wiki/en/FAQ&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Pebble&#039;&#039;&#039;: &amp;quot;a lightweight, open source, Java EE blogging tool&amp;quot;.&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/9450470?rId=56ef019684452&amp;amp;seq=2&amp;lt;/ref&amp;gt;&lt;br /&gt;
== FAQ == &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
=== Does the plugin version always match with the latest standalone version? ===&lt;br /&gt;
Not always. Sometimes the plugin version is outdated: the standalone version of the software is more recent. If this case, you should use the standalone version.&lt;br /&gt;
&lt;br /&gt;
=== How to install a plugin? === &amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Usually, the process is as follows:&lt;br /&gt;
# Go to the plugin page in your I2P router console: &#039;I2P Services&#039; &amp;gt; &#039;Clients&#039; &amp;gt; &#039;Plugins&#039; (or click this URL: http://127.0.0.1:7657/configplugins)&lt;br /&gt;
# If you have the URL to the plugin file: at the bottom of the page, look for the box &#039;Installation from URL.&#039; Paste inside the URL to the plugin file (example: http://bote.i2p/i2pbote.su3)&lt;br /&gt;
# If you have the plugin file on your HDD: at the bottom of the page, look for the box &#039;Installation from File&#039; and browse to the location of the file. &lt;br /&gt;
# Click the button &#039;Install Plugin&#039; (or &#039;Install Plugin from file&#039;)&lt;br /&gt;
# Wait several minutes&lt;br /&gt;
# Once installed, you will see a new text string at the top of the router console, below &#039;I2P Services&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Note: you should read the description page of the plugin, because there is perhaps more setup to do.&lt;br /&gt;
&lt;br /&gt;
=== How to check the signature of a plugin file manually, before installing it === &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Usually, this isn&#039;t needed.  The I2P router plugin installer automatically checks whether the signature of the downloaded .su3 file is valid and created by an authorized developer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
If you still want to verify the signature manually, enter the following at the command line: &lt;br /&gt;
 java -jar /path/to/i2p.jar su3file verifysig -k /path/to/certificates/plugin/signer_at_mail.i2p.crt /path/to/plugin.su3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Note: most plugins&#039; source codes are downloadable from the I2P&#039;s Monotone server&amp;lt;ref&amp;gt;http://i2p-projekt.i2p/en/get-involved/guides/monotone&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Tails === &amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
Installation of plugins is disabled in [[Tails]].&amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=12482&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Plugin Development == &amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Those looking to create new plugins for I2P might want to look at the [http://i2p-projekt.i2p/en/docs/plugins introduction to plugin development], the [http://i2p-projekt.i2p/en/docs/spec/plugin plugin specification], and the [http://zzz.i2p plugin forum].&lt;br /&gt;
&lt;br /&gt;
== References == &amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
== External links == &amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
* http://i2p-projekt.i2p/en/docs/plugins - Official documentation&lt;br /&gt;
* http://stats.i2p/i2p/plugins/ - Official I2P plugins page (succeed to http://plugins.i2p)&lt;br /&gt;
* [http://direct.i2p/site/webcache/203642?rId=56eeb3f512c03&amp;amp;seq=1 http://plugins.i2p] main page, cached by http://direct.i2p search engine (2016-03) before it vanish&lt;br /&gt;
* [http://zzz.i2p/forums/16-plugins http://zzz.i2p/forums/] - The official forum for the plugins developpers&lt;br /&gt;
* http://archiv.tutorials.i2p/i2p-plugins/&lt;br /&gt;
-----&lt;br /&gt;
[[Category:I2P]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=478</id>
		<title>Plugins</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=478"/>
		<updated>2021-12-06T05:10:29Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction == &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
This page is about plugins designed for the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
I2P plugins are both a means to extend I2P&#039;s router functionality as well as a method of packaging things.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
I2P plugins are stored in &amp;quot;.xpi2p&amp;quot; files, and can be installed or uninstalled from the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Comment by Khanjant, 2016-03-17: &amp;quot;This is the plugin list managed to recover after the epic fall of http://plugins.i2p. Gathered from the plugin list on [http://stats.i2p/i2p/plugins stats.i2p] and [http://temporarypluginlist.i2p/plugins a unofficial temporary list]. I (Khanjant) just started, not finished yet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
Because of the sudden shutdown of http://plugins.i2p, some plugins files are still missing to us, if you have some that miss in this list, please contact [[user:Hummingbird]].&lt;br /&gt;
&lt;br /&gt;
== Plugin list == &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Non-obsolete === &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
! Type&lt;br /&gt;
! Plugin name&lt;br /&gt;
! Latest release (year)&lt;br /&gt;
! URLs (Description / File / Source code)&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;BwSchedule&#039;&#039; || 2015 ||  [http://y7hb4kzomfzzhekib2mby72ydlntiexmuafuwtlxrxyigtnd63la.b32.i2p/bwschedule_description.html Description by Cacapao (author)]  || Bandwidth scheduler for the I2P router&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Demo plugin || &#039;&#039;Snowman&#039;&#039; ||  2015 || [http://stats.i2p/i2p/plugins/snowman.xpi2p File]. [http://stats.i2p/i2p/plugins/i2p.snowman.zip Source code] || Just a little test, creates a single-page webapp. The plugin contains some commented config files that may be helpful for plugin developers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Email || &#039;&#039;[[I2P-Bote]]&#039;&#039; || 2018 || [[I2P-Bote#To_get_it|Description, file]] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| File sharing || &#039;&#039;[[I2Phex]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ Plugin] || Also available as standalone software&amp;lt;ref&amp;gt;I2Phex v3.2.7 standalone available from http://echelon.i2p/i2phex/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool || &#039;&#039;Firefox Search Plugins&#039;&#039; || || [http://direct.i2p/site/webcache/9449449?rId=56eef8a275a82&amp;amp;seq=2 Description (cached page)] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;I2PControl&#039;&#039; || 2018 || [http://i2p-projekt.i2p/en/docs/api/i2pcontrol Description (on i2p-projekt.i2p/)]. [http://git.repo.i2p/w/i2p.scripts.git/tree/HEAD:/i2pcontrol Source code (Python)] ||  JSONRPC2 interface&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IRC client || &#039;&#039;[[JIRCii|jIRCii]]&#039;&#039; || 2016&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2162-jircii-2014-12-9-z1&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/jIRCii.xpi2p File on stats.i2p], File from iMule (v0.9.0, 2011)&amp;lt;ref&amp;gt;ed2k://|file|jIRCii.xpi2p|319207|E08E77D0B9A76455C6EA55C0C1E3A477|h=V5S4ZMFRPWNLHEMY7EDIWDEYU33EGUU6|/&amp;lt;/ref&amp;gt; || jIRCii as a plugin for the I2P console, written in Java. [http://www.oldschoolirc.com Official website (clearnet, not I2P compatible)].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P&amp;lt;ref&amp;gt;&amp;quot;Julya is a network enabled Jython shell, allowing multiple instances of Jython to be managed from a network connection. Jython scripts can be run in a headless environment by sending scripts via TCP connections defined by the user.&amp;quot;&amp;lt;/ref&amp;gt; || &#039;&#039;Julya&#039;&#039; || 2014 || [http://git.repo.i2p/w/jython_i2p_api.git Homepage and source code] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[I2Phex]] || &#039;&#039;[[Jwebcache]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ File] or [http://echelon.i2p/jwebcache/ File] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HTTP outproxy || &#039;&#039;Outertubes&#039;&#039; || 2012 ? || Description&amp;lt;ref&amp;gt;&amp;quot;Outertubes ia an HTTP Outproxy. It allows other I2P users to connect to the regular Internet via your machine.&amp;quot; from http://archiv.tutorials.i2p/i2p-plugins/outertubes/&amp;lt;/ref&amp;gt; (coded by HungryHobbo&amp;lt;ref&amp;gt;http://zzz.i2p/topics/1149&amp;lt;/ref&amp;gt;) ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Database || &#039;&#039;Neodatis&#039;&#039; || 2012 || File: [http://sponge.i2p/files/seedless/01_neodatis.xpi2p on sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p] || Used by [[Seedless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid|Orchid]]-zzz&#039;&#039; || 2018 || [http://stats.i2p/i2p/plugins/ (plugin website)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid]]-thebland&#039;&#039; || 2016 || [http://thebland.i2p/i2p/plugins/ (plugin website)] [http://zzz.i2p/topics/2031?page=1#p11363 (How to install)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;[[Seedless]]&#039;&#039; || 2012 || [http://sponge.i2p/files/seedless/doc/how-to-seedless.html Description (on sponge.i2p)]. File: [http://sponge.i2p/files/seedless/02_seedless.xpi2p On sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p]&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2267-lost-plugin-directory&amp;lt;/ref&amp;gt; (read the article [[Seedless]] before to install !). || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Forums || &#039;&#039;[[Syndie]]&#039;&#039; || 2016 || || Also available as standalone software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[Tahoe-LAFS]] || &#039;&#039;Tahoe-LAFS Controller&#039;&#039; || 201x ||  [http://stats.i2p/i2p/plugins/tahoe-lafs-controller.xpi2p File (on stats.i2p)] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| BitTorrent tracker || &#039;&#039;ZzzOT&#039;&#039; || 2015&amp;lt;ref&amp;gt;0.14.0-b1 released in 2015&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/zzzot.su3 File (on stats.i2p)]&amp;lt;ref&amp;gt;After installation, a brief help page will be available at http://127.0.0.1:7662/help.html. Be sure to read it completely!&amp;lt;/ref&amp;gt;|| A Java BitTorrent Opentracker. Has no eepsite, but a official forum (zzz.i2p)&amp;lt;ref&amp;gt;http://zzz.i2p/search?type=topics&amp;amp;query=zzzot&amp;amp;commit=Search&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reseed || &#039;&#039;Reseed-tools&#039;&#039; || 2021 || Easy to setup I2P Reseed server in Go, also available as standalone software. || http://idk.i2p/reseed-tools&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Helper || &#039;&#039;Blizzard&#039;&#039; || 2021 || Adds a Snowflake Proxy to I2P which helps Tor Browser users reach the Tor Network using Pluggable Transports. || http://idk.i2p/blizzard&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Obsolete === &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;AyuDownloader&#039;&#039;&#039;: &amp;quot;AyuDownloader is an Plugin using the [[EepGet|EepGet class]] from I2P developers to download large files easier from Eepsites.&amp;quot; &amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=7468&amp;amp;highlight=yuDownloader&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;I2Cron&#039;&#039;&#039;: &amp;quot;The I2Cron plugin executes actions based on scheduled timed-based events, or polled events.&amp;quot;&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/8846695?rId=56eeff4c9298c&amp;amp;seq=1&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;JAMWiki&#039;&#039;&#039;: A Java Wiki Engine. Active development of JAMWiki has ceased (2013)&amp;lt;ref&amp;gt;jamwiki.org/wiki/en/FAQ&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Pebble&#039;&#039;&#039;: &amp;quot;a lightweight, open source, Java EE blogging tool&amp;quot;.&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/9450470?rId=56ef019684452&amp;amp;seq=2&amp;lt;/ref&amp;gt;&lt;br /&gt;
== FAQ == &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
=== Does the plugin version always match with the latest standalone version? ===&lt;br /&gt;
Not always. Sometimes the plugin version is outdated: the standalone version of the software is more recent. If this case, you should use the standalone version.&lt;br /&gt;
&lt;br /&gt;
=== How to install a plugin? === &amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Usually, the process is as follows:&lt;br /&gt;
# Go to the plugin page in your I2P router console: &#039;I2P Services&#039; &amp;gt; &#039;Clients&#039; &amp;gt; &#039;Plugins&#039; (or click this URL: http://127.0.0.1:7657/configplugins)&lt;br /&gt;
# If you have the URL to the plugin file: at the bottom of the page, look for the box &#039;Installation from URL.&#039; Paste inside the URL to the plugin file (example: http://bote.i2p/i2pbote.su3)&lt;br /&gt;
# If you have the plugin file on your HDD: at the bottom of the page, look for the box &#039;Installation from File&#039; and browse to the location of the file. &lt;br /&gt;
# Click the button &#039;Install Plugin&#039; (or &#039;Install Plugin from file&#039;)&lt;br /&gt;
# Wait several minutes&lt;br /&gt;
# Once installed, you will see a new text string at the top of the router console, below &#039;I2P Services&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Note: you should read the description page of the plugin, because there is perhaps more setup to do.&lt;br /&gt;
&lt;br /&gt;
=== How to check the signature of a plugin file manually, before installing it === &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Usually, this isn&#039;t needed.  The I2P router plugin installer automatically checks whether the signature of the downloaded .su3 file is valid and created by an authorized developer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
If you still want to verify the signature manually, enter the following at the command line: &lt;br /&gt;
 java -jar /path/to/i2p.jar su3file verifysig -k /path/to/certificates/plugin/signer_at_mail.i2p.crt /path/to/plugin.su3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Note: most plugins&#039; source codes are downloadable from the I2P&#039;s Monotone server&amp;lt;ref&amp;gt;http://i2p-projekt.i2p/en/get-involved/guides/monotone&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Tails === &amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
Installation of plugins is disabled in [[Tails]].&amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=12482&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Plugin Development == &amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Those looking to create new plugins for I2P might want to look at the [http://i2p-projekt.i2p/en/docs/plugins introduction to plugin development], the [http://i2p-projekt.i2p/en/docs/spec/plugin plugin specification], and the [http://zzz.i2p plugin forum].&lt;br /&gt;
&lt;br /&gt;
== References == &amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
== External links == &amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
* http://i2p-projekt.i2p/en/docs/plugins - Official documentation&lt;br /&gt;
* http://stats.i2p/i2p/plugins/ - Official I2P plugins page (succeed to http://plugins.i2p)&lt;br /&gt;
* [http://direct.i2p/site/webcache/203642?rId=56eeb3f512c03&amp;amp;seq=1 http://plugins.i2p] main page, cached by http://direct.i2p search engine (2016-03) before it vanish&lt;br /&gt;
* [http://zzz.i2p/forums/16-plugins http://zzz.i2p/forums/] - The official forum for the plugins developpers&lt;br /&gt;
* http://archiv.tutorials.i2p/i2p-plugins/&lt;br /&gt;
-----&lt;br /&gt;
[[Category:I2P]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=477</id>
		<title>Plugins</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=477"/>
		<updated>2021-12-06T05:09:46Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction == &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
This page is about plugins designed for the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
I2P plugins are both a means to extend I2P&#039;s router functionality as well as a method of packaging things.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
I2P plugins are stored in &amp;quot;.xpi2p&amp;quot; files, and can be installed or uninstalled from the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Comment by Khanjant, 2016-03-17: &amp;quot;This is the plugin list managed to recover after the epic fall of http://plugins.i2p. Gathered from the plugin list on [http://stats.i2p/i2p/plugins stats.i2p] and [http://temporarypluginlist.i2p/plugins a unofficial temporary list]. I (Khanjant) just started, not finished yet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
Because of the sudden shutdown of http://plugins.i2p, some plugins files are still missing to us, if you have some that miss in this list, please contact [[user:Hummingbird]].&lt;br /&gt;
&lt;br /&gt;
== Plugin list == &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Non-obsolete === &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
! Type&lt;br /&gt;
! Plugin name&lt;br /&gt;
! Latest release (year)&lt;br /&gt;
! URLs (Description / File / Source code)&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;BwSchedule&#039;&#039; || 2015 ||  [http://y7hb4kzomfzzhekib2mby72ydlntiexmuafuwtlxrxyigtnd63la.b32.i2p/bwschedule_description.html Description by Cacapao (author)]  || Bandwidth scheduler for the I2P router&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Demo plugin || &#039;&#039;Snowman&#039;&#039; ||  2015 || [http://stats.i2p/i2p/plugins/snowman.xpi2p File]. [http://stats.i2p/i2p/plugins/i2p.snowman.zip Source code] || Just a little test, creates a single-page webapp. The plugin contains some commented config files that may be helpful for plugin developers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Email || &#039;&#039;[[I2P-Bote]]&#039;&#039; || 2018 || [[I2P-Bote#To_get_it|Description, file]] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| File sharing || &#039;&#039;[[I2Phex]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ Plugin] || Also available as standalone software&amp;lt;ref&amp;gt;I2Phex v3.2.7 standalone available from http://echelon.i2p/i2phex/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool || &#039;&#039;Firefox Search Plugins&#039;&#039; || || [http://direct.i2p/site/webcache/9449449?rId=56eef8a275a82&amp;amp;seq=2 Description (cached page)] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;I2PControl&#039;&#039; || 2018 || [http://i2p-projekt.i2p/en/docs/api/i2pcontrol Description (on i2p-projekt.i2p/)]. [http://git.repo.i2p/w/i2p.scripts.git/tree/HEAD:/i2pcontrol Source code (Python)] ||  JSONRPC2 interface&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IRC client || &#039;&#039;[[JIRCii|jIRCii]]&#039;&#039; || 2016&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2162-jircii-2014-12-9-z1&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/jIRCii.xpi2p File on stats.i2p], File from iMule (v0.9.0, 2011)&amp;lt;ref&amp;gt;ed2k://|file|jIRCii.xpi2p|319207|E08E77D0B9A76455C6EA55C0C1E3A477|h=V5S4ZMFRPWNLHEMY7EDIWDEYU33EGUU6|/&amp;lt;/ref&amp;gt; || jIRCii as a plugin for the I2P console, written in Java. [http://www.oldschoolirc.com Official website (clearnet, not I2P compatible)].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P&amp;lt;ref&amp;gt;&amp;quot;Julya is a network enabled Jython shell, allowing multiple instances of Jython to be managed from a network connection. Jython scripts can be run in a headless environment by sending scripts via TCP connections defined by the user.&amp;quot;&amp;lt;/ref&amp;gt; || &#039;&#039;Julya&#039;&#039; || 2014 || [http://git.repo.i2p/w/jython_i2p_api.git Homepage and source code] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[I2Phex]] || &#039;&#039;[[Jwebcache]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ File] or [http://echelon.i2p/jwebcache/ File] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HTTP outproxy || &#039;&#039;Outertubes&#039;&#039; || 2012 ? || Description&amp;lt;ref&amp;gt;&amp;quot;Outertubes ia an HTTP Outproxy. It allows other I2P users to connect to the regular Internet via your machine.&amp;quot; from http://archiv.tutorials.i2p/i2p-plugins/outertubes/&amp;lt;/ref&amp;gt; (coded by HungryHobbo&amp;lt;ref&amp;gt;http://zzz.i2p/topics/1149&amp;lt;/ref&amp;gt;) ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Database || &#039;&#039;Neodatis&#039;&#039; || 2012 || File: [http://sponge.i2p/files/seedless/01_neodatis.xpi2p on sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p] || Used by [[Seedless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid|Orchid]]-zzz&#039;&#039; || 2018 || [http://stats.i2p/i2p/plugins/ (plugin website)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid]]-thebland&#039;&#039; || 2016 || [http://thebland.i2p/i2p/plugins/ (plugin website)] [http://zzz.i2p/topics/2031?page=1#p11363 (How to install)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;[[Seedless]]&#039;&#039; || 2012 || [http://sponge.i2p/files/seedless/doc/how-to-seedless.html Description (on sponge.i2p)]. File: [http://sponge.i2p/files/seedless/02_seedless.xpi2p On sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p]&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2267-lost-plugin-directory&amp;lt;/ref&amp;gt; (read the article [[Seedless]] before to install !). || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Forums || &#039;&#039;[[Syndie]]&#039;&#039; || 2016 || || Also available as standalone software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[Tahoe-LAFS]] || &#039;&#039;Tahoe-LAFS Controller&#039;&#039; || 201x ||  [http://stats.i2p/i2p/plugins/tahoe-lafs-controller.xpi2p File (on stats.i2p)] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| BitTorrent tracker || &#039;&#039;ZzzOT&#039;&#039; || 2015&amp;lt;ref&amp;gt;0.14.0-b1 released in 2015&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/zzzot.su3 File (on stats.i2p)]&amp;lt;ref&amp;gt;After installation, a brief help page will be available at http://127.0.0.1:7662/help.html. Be sure to read it completely!&amp;lt;/ref&amp;gt;|| A Java BitTorrent Opentracker. Has no eepsite, but a official forum (zzz.i2p)&amp;lt;ref&amp;gt;http://zzz.i2p/search?type=topics&amp;amp;query=zzzot&amp;amp;commit=Search&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reseed || &#039;&#039;Reseed-tools&#039;&#039; || 2021 || Easy to setup I2P Reseed server in Go, also available as standalone software. || http://idk.i2p/reseed-tools&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Helper || &#039;&#039;Blizzard&#039;&#039; || 2021 || Adds a Snowflake Proxy to I2P which helps Tor Browser users reach the Tor Network using Pluggable Transports. || http://idk.i2p/blizzard&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
=== Obsolete === &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;AyuDownloader&#039;&#039;&#039;: &amp;quot;AyuDownloader is an Plugin using the [[EepGet|EepGet class]] from I2P developers to download large files easier from Eepsites.&amp;quot; &amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=7468&amp;amp;highlight=yuDownloader&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;I2Cron&#039;&#039;&#039;: &amp;quot;The I2Cron plugin executes actions based on scheduled timed-based events, or polled events.&amp;quot;&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/8846695?rId=56eeff4c9298c&amp;amp;seq=1&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;JAMWiki&#039;&#039;&#039;: A Java Wiki Engine. Active development of JAMWiki has ceased (2013)&amp;lt;ref&amp;gt;jamwiki.org/wiki/en/FAQ&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Pebble&#039;&#039;&#039;: &amp;quot;a lightweight, open source, Java EE blogging tool&amp;quot;.&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/9450470?rId=56ef019684452&amp;amp;seq=2&amp;lt;/ref&amp;gt;&lt;br /&gt;
== FAQ == &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
=== Does the plugin version always match with the latest standalone version? ===&lt;br /&gt;
Not always. Sometimes the plugin version is outdated: the standalone version of the software is more recent. If this case, you should use the standalone version.&lt;br /&gt;
&lt;br /&gt;
=== How to install a plugin? === &amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Usually, the process is as follows:&lt;br /&gt;
# Go to the plugin page in your I2P router console: &#039;I2P Services&#039; &amp;gt; &#039;Clients&#039; &amp;gt; &#039;Plugins&#039; (or click this URL: http://127.0.0.1:7657/configplugins)&lt;br /&gt;
# If you have the URL to the plugin file: at the bottom of the page, look for the box &#039;Installation from URL.&#039; Paste inside the URL to the plugin file (example: http://bote.i2p/i2pbote.su3)&lt;br /&gt;
# If you have the plugin file on your HDD: at the bottom of the page, look for the box &#039;Installation from File&#039; and browse to the location of the file. &lt;br /&gt;
# Click the button &#039;Install Plugin&#039; (or &#039;Install Plugin from file&#039;)&lt;br /&gt;
# Wait several minutes&lt;br /&gt;
# Once installed, you will see a new text string at the top of the router console, below &#039;I2P Services&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Note: you should read the description page of the plugin, because there is perhaps more setup to do.&lt;br /&gt;
&lt;br /&gt;
=== How to check the signature of a plugin file manually, before installing it === &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Usually, this isn&#039;t needed.  The I2P router plugin installer automatically checks whether the signature of the downloaded .su3 file is valid and created by an authorized developer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
If you still want to verify the signature manually, enter the following at the command line: &lt;br /&gt;
 java -jar /path/to/i2p.jar su3file verifysig -k /path/to/certificates/plugin/signer_at_mail.i2p.crt /path/to/plugin.su3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Note: most plugins&#039; source codes are downloadable from the I2P&#039;s Monotone server&amp;lt;ref&amp;gt;http://i2p-projekt.i2p/en/get-involved/guides/monotone&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Tails === &amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
Installation of plugins is disabled in [[Tails]].&amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=12482&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Plugin Development == &amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Those looking to create new plugins for I2P might want to look at the [http://i2p-projekt.i2p/en/docs/plugins introduction to plugin development], the [http://i2p-projekt.i2p/en/docs/spec/plugin plugin specification], and the [http://zzz.i2p plugin forum].&lt;br /&gt;
&lt;br /&gt;
== References == &amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
== External links == &amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
* http://i2p-projekt.i2p/en/docs/plugins - Official documentation&lt;br /&gt;
* http://stats.i2p/i2p/plugins/ - Official I2P plugins page (succeed to http://plugins.i2p)&lt;br /&gt;
* [http://direct.i2p/site/webcache/203642?rId=56eeb3f512c03&amp;amp;seq=1 http://plugins.i2p] main page, cached by http://direct.i2p search engine (2016-03) before it vanish&lt;br /&gt;
* [http://zzz.i2p/forums/16-plugins http://zzz.i2p/forums/] - The official forum for the plugins developpers&lt;br /&gt;
* http://archiv.tutorials.i2p/i2p-plugins/&lt;br /&gt;
-----&lt;br /&gt;
[[Category:I2P]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=476</id>
		<title>Plugins</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=476"/>
		<updated>2021-12-06T05:06:42Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction == &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
This page is about plugins designed for the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
I2P plugins are both a means to extend I2P&#039;s router functionality as well as a method of packaging things.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
I2P plugins are stored in &amp;quot;.xpi2p&amp;quot; files, and can be installed or uninstalled from the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Comment by Khanjant, 2016-03-17: &amp;quot;This is the plugin list managed to recover after the epic fall of http://plugins.i2p. Gathered from the plugin list on [http://stats.i2p/i2p/plugins stats.i2p] and [http://temporarypluginlist.i2p/plugins a unofficial temporary list]. I (Khanjant) just started, not finished yet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
Because of the sudden shutdown of http://plugins.i2p, some plugins files are still missing to us, if you have some that miss in this list, please contact [[user:Hummingbird]].&lt;br /&gt;
&lt;br /&gt;
== Plugin list == &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Non-obsolete === &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
! Type&lt;br /&gt;
! Plugin name&lt;br /&gt;
! Latest release (year)&lt;br /&gt;
! URLs (Description / File / Source code)&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;BwSchedule&#039;&#039; || 2015 ||  [http://y7hb4kzomfzzhekib2mby72ydlntiexmuafuwtlxrxyigtnd63la.b32.i2p/bwschedule_description.html Description by Cacapao (author)]  || Bandwidth scheduler for the I2P router&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Demo plugin || &#039;&#039;Snowman&#039;&#039; ||  2015 || [http://stats.i2p/i2p/plugins/snowman.xpi2p File]. [http://stats.i2p/i2p/plugins/i2p.snowman.zip Source code] || Just a little test, creates a single-page webapp. The plugin contains some commented config files that may be helpful for plugin developers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Email || &#039;&#039;[[I2P-Bote]]&#039;&#039; || 2018 || [[I2P-Bote#To_get_it|Description, file]] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| File sharing || &#039;&#039;[[I2Phex]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ Plugin] || Also available as standalone software&amp;lt;ref&amp;gt;I2Phex v3.2.7 standalone available from http://echelon.i2p/i2phex/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool || &#039;&#039;Firefox Search Plugins&#039;&#039; || || [http://direct.i2p/site/webcache/9449449?rId=56eef8a275a82&amp;amp;seq=2 Description (cached page)] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;I2PControl&#039;&#039; || 2018 || [http://i2p-projekt.i2p/en/docs/api/i2pcontrol Description (on i2p-projekt.i2p/)]. [http://git.repo.i2p/w/i2p.scripts.git/tree/HEAD:/i2pcontrol Source code (Python)] ||  JSONRPC2 interface&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IRC client || &#039;&#039;[[JIRCii|jIRCii]]&#039;&#039; || 2016&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2162-jircii-2014-12-9-z1&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/jIRCii.xpi2p File on stats.i2p], File from iMule (v0.9.0, 2011)&amp;lt;ref&amp;gt;ed2k://|file|jIRCii.xpi2p|319207|E08E77D0B9A76455C6EA55C0C1E3A477|h=V5S4ZMFRPWNLHEMY7EDIWDEYU33EGUU6|/&amp;lt;/ref&amp;gt; || jIRCii as a plugin for the I2P console, written in Java. [http://www.oldschoolirc.com Official website (clearnet, not I2P compatible)].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P&amp;lt;ref&amp;gt;&amp;quot;Julya is a network enabled Jython shell, allowing multiple instances of Jython to be managed from a network connection. Jython scripts can be run in a headless environment by sending scripts via TCP connections defined by the user.&amp;quot;&amp;lt;/ref&amp;gt; || &#039;&#039;Julya&#039;&#039; || 2014 || [http://git.repo.i2p/w/jython_i2p_api.git Homepage and source code] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[I2Phex]] || &#039;&#039;[[Jwebcache]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ File] or [http://echelon.i2p/jwebcache/ File] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HTTP outproxy || &#039;&#039;Outertubes&#039;&#039; || 2012 ? || Description&amp;lt;ref&amp;gt;&amp;quot;Outertubes ia an HTTP Outproxy. It allows other I2P users to connect to the regular Internet via your machine.&amp;quot; from http://archiv.tutorials.i2p/i2p-plugins/outertubes/&amp;lt;/ref&amp;gt; (coded by HungryHobbo&amp;lt;ref&amp;gt;http://zzz.i2p/topics/1149&amp;lt;/ref&amp;gt;) ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Database || &#039;&#039;Neodatis&#039;&#039; || 2012 || File: [http://sponge.i2p/files/seedless/01_neodatis.xpi2p on sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p] || Used by [[Seedless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid|Orchid]]-zzz&#039;&#039; || 2018 || [http://stats.i2p/i2p/plugins/ (plugin website)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid]]-thebland&#039;&#039; || 2016 || [http://thebland.i2p/i2p/plugins/ (plugin website)] [http://zzz.i2p/topics/2031?page=1#p11363 (How to install)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;[[Seedless]]&#039;&#039; || 2012 || [http://sponge.i2p/files/seedless/doc/how-to-seedless.html Description (on sponge.i2p)]. File: [http://sponge.i2p/files/seedless/02_seedless.xpi2p On sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p]&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2267-lost-plugin-directory&amp;lt;/ref&amp;gt; (read the article [[Seedless]] before to install !). || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Forums || &#039;&#039;[[Syndie]]&#039;&#039; || 2016 || || Also available as standalone software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[Tahoe-LAFS]] || &#039;&#039;Tahoe-LAFS Controller&#039;&#039; || 201x ||  [http://stats.i2p/i2p/plugins/tahoe-lafs-controller.xpi2p File (on stats.i2p)] ||&lt;br /&gt;
&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| BitTorrent tracker || &#039;&#039;ZzzOT&#039;&#039; || 2015&amp;lt;ref&amp;gt;0.14.0-b1 released in 2015&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/zzzot.su3 File (on stats.i2p)]&amp;lt;ref&amp;gt;After installation, a brief help page will be available at http://127.0.0.1:7662/help.html. Be sure to read it completely!&amp;lt;/ref&amp;gt;|| A Java BitTorrent Opentracker. Has no eepsite, but a official forum (zzz.i2p)&amp;lt;ref&amp;gt;http://zzz.i2p/search?type=topics&amp;amp;query=zzzot&amp;amp;commit=Search&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reseed || &#039;&#039;Reseed-tools&#039;&#039; || 2021 || || Easy to setup I2P Reseed server in Go, also available as standalone software. http://idk.i2p/reseed-tools&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Helper || &#039;&#039;Blizzard&#039;&#039; || 2021 || || Adds a Snowflake Proxy to I2P which helps Tor Browser users reach the Tor Network using Pluggable Transports. http://idk.i2p/blizzard&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
=== Obsolete === &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;AyuDownloader&#039;&#039;&#039;: &amp;quot;AyuDownloader is an Plugin using the [[EepGet|EepGet class]] from I2P developers to download large files easier from Eepsites.&amp;quot; &amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=7468&amp;amp;highlight=yuDownloader&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;I2Cron&#039;&#039;&#039;: &amp;quot;The I2Cron plugin executes actions based on scheduled timed-based events, or polled events.&amp;quot;&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/8846695?rId=56eeff4c9298c&amp;amp;seq=1&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;JAMWiki&#039;&#039;&#039;: A Java Wiki Engine. Active development of JAMWiki has ceased (2013)&amp;lt;ref&amp;gt;jamwiki.org/wiki/en/FAQ&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Pebble&#039;&#039;&#039;: &amp;quot;a lightweight, open source, Java EE blogging tool&amp;quot;.&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/9450470?rId=56ef019684452&amp;amp;seq=2&amp;lt;/ref&amp;gt;&lt;br /&gt;
== FAQ == &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
=== Does the plugin version always match with the latest standalone version? ===&lt;br /&gt;
Not always. Sometimes the plugin version is outdated: the standalone version of the software is more recent. If this case, you should use the standalone version.&lt;br /&gt;
&lt;br /&gt;
=== How to install a plugin? === &amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Usually, the process is as follows:&lt;br /&gt;
# Go to the plugin page in your I2P router console: &#039;I2P Services&#039; &amp;gt; &#039;Clients&#039; &amp;gt; &#039;Plugins&#039; (or click this URL: http://127.0.0.1:7657/configplugins)&lt;br /&gt;
# If you have the URL to the plugin file: at the bottom of the page, look for the box &#039;Installation from URL.&#039; Paste inside the URL to the plugin file (example: http://bote.i2p/i2pbote.su3)&lt;br /&gt;
# If you have the plugin file on your HDD: at the bottom of the page, look for the box &#039;Installation from File&#039; and browse to the location of the file. &lt;br /&gt;
# Click the button &#039;Install Plugin&#039; (or &#039;Install Plugin from file&#039;)&lt;br /&gt;
# Wait several minutes&lt;br /&gt;
# Once installed, you will see a new text string at the top of the router console, below &#039;I2P Services&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Note: you should read the description page of the plugin, because there is perhaps more setup to do.&lt;br /&gt;
&lt;br /&gt;
=== How to check the signature of a plugin file manually, before installing it === &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Usually, this isn&#039;t needed.  The I2P router plugin installer automatically checks whether the signature of the downloaded .su3 file is valid and created by an authorized developer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
If you still want to verify the signature manually, enter the following at the command line: &lt;br /&gt;
 java -jar /path/to/i2p.jar su3file verifysig -k /path/to/certificates/plugin/signer_at_mail.i2p.crt /path/to/plugin.su3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Note: most plugins&#039; source codes are downloadable from the I2P&#039;s Monotone server&amp;lt;ref&amp;gt;http://i2p-projekt.i2p/en/get-involved/guides/monotone&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Tails === &amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
Installation of plugins is disabled in [[Tails]].&amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=12482&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Plugin Development == &amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Those looking to create new plugins for I2P might want to look at the [http://i2p-projekt.i2p/en/docs/plugins introduction to plugin development], the [http://i2p-projekt.i2p/en/docs/spec/plugin plugin specification], and the [http://zzz.i2p plugin forum].&lt;br /&gt;
&lt;br /&gt;
== References == &amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
== External links == &amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
* http://i2p-projekt.i2p/en/docs/plugins - Official documentation&lt;br /&gt;
* http://stats.i2p/i2p/plugins/ - Official I2P plugins page (succeed to http://plugins.i2p)&lt;br /&gt;
* [http://direct.i2p/site/webcache/203642?rId=56eeb3f512c03&amp;amp;seq=1 http://plugins.i2p] main page, cached by http://direct.i2p search engine (2016-03) before it vanish&lt;br /&gt;
* [http://zzz.i2p/forums/16-plugins http://zzz.i2p/forums/] - The official forum for the plugins developpers&lt;br /&gt;
* http://archiv.tutorials.i2p/i2p-plugins/&lt;br /&gt;
-----&lt;br /&gt;
[[Category:I2P]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=475</id>
		<title>Plugins</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=475"/>
		<updated>2021-12-06T05:05:45Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction == &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
This page is about plugins designed for the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
I2P plugins are both a means to extend I2P&#039;s router functionality as well as a method of packaging things.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
I2P plugins are stored in &amp;quot;.xpi2p&amp;quot; files, and can be installed or uninstalled from the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Comment by Khanjant, 2016-03-17: &amp;quot;This is the plugin list managed to recover after the epic fall of http://plugins.i2p. Gathered from the plugin list on [http://stats.i2p/i2p/plugins stats.i2p] and [http://temporarypluginlist.i2p/plugins a unofficial temporary list]. I (Khanjant) just started, not finished yet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
Because of the sudden shutdown of http://plugins.i2p, some plugins files are still missing to us, if you have some that miss in this list, please contact [[user:Hummingbird]].&lt;br /&gt;
&lt;br /&gt;
== Plugin list == &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Non-obsolete === &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
! Type&lt;br /&gt;
! Plugin name&lt;br /&gt;
! Latest release (year)&lt;br /&gt;
! URLs (Description / File / Source code)&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;BwSchedule&#039;&#039; || 2015 ||  [http://y7hb4kzomfzzhekib2mby72ydlntiexmuafuwtlxrxyigtnd63la.b32.i2p/bwschedule_description.html Description by Cacapao (author)]  || Bandwidth scheduler for the I2P router&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Demo plugin || &#039;&#039;Snowman&#039;&#039; ||  2015 || [http://stats.i2p/i2p/plugins/snowman.xpi2p File]. [http://stats.i2p/i2p/plugins/i2p.snowman.zip Source code] || Just a little test, creates a single-page webapp. The plugin contains some commented config files that may be helpful for plugin developers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Email || &#039;&#039;[[I2P-Bote]]&#039;&#039; || 2018 || [[I2P-Bote#To_get_it|Description, file]] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| File sharing || &#039;&#039;[[I2Phex]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ Plugin] || Also available as standalone software&amp;lt;ref&amp;gt;I2Phex v3.2.7 standalone available from http://echelon.i2p/i2phex/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool || &#039;&#039;Firefox Search Plugins&#039;&#039; || || [http://direct.i2p/site/webcache/9449449?rId=56eef8a275a82&amp;amp;seq=2 Description (cached page)] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;I2PControl&#039;&#039; || 2018 || [http://i2p-projekt.i2p/en/docs/api/i2pcontrol Description (on i2p-projekt.i2p/)]. [http://git.repo.i2p/w/i2p.scripts.git/tree/HEAD:/i2pcontrol Source code (Python)] ||  JSONRPC2 interface&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IRC client || &#039;&#039;[[JIRCii|jIRCii]]&#039;&#039; || 2016&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2162-jircii-2014-12-9-z1&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/jIRCii.xpi2p File on stats.i2p], File from iMule (v0.9.0, 2011)&amp;lt;ref&amp;gt;ed2k://|file|jIRCii.xpi2p|319207|E08E77D0B9A76455C6EA55C0C1E3A477|h=V5S4ZMFRPWNLHEMY7EDIWDEYU33EGUU6|/&amp;lt;/ref&amp;gt; || jIRCii as a plugin for the I2P console, written in Java. [http://www.oldschoolirc.com Official website (clearnet, not I2P compatible)].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P&amp;lt;ref&amp;gt;&amp;quot;Julya is a network enabled Jython shell, allowing multiple instances of Jython to be managed from a network connection. Jython scripts can be run in a headless environment by sending scripts via TCP connections defined by the user.&amp;quot;&amp;lt;/ref&amp;gt; || &#039;&#039;Julya&#039;&#039; || 2014 || [http://git.repo.i2p/w/jython_i2p_api.git Homepage and source code] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[I2Phex]] || &#039;&#039;[[Jwebcache]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ File] or [http://echelon.i2p/jwebcache/ File] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HTTP outproxy || &#039;&#039;Outertubes&#039;&#039; || 2012 ? || Description&amp;lt;ref&amp;gt;&amp;quot;Outertubes ia an HTTP Outproxy. It allows other I2P users to connect to the regular Internet via your machine.&amp;quot; from http://archiv.tutorials.i2p/i2p-plugins/outertubes/&amp;lt;/ref&amp;gt; (coded by HungryHobbo&amp;lt;ref&amp;gt;http://zzz.i2p/topics/1149&amp;lt;/ref&amp;gt;) ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Database || &#039;&#039;Neodatis&#039;&#039; || 2012 || File: [http://sponge.i2p/files/seedless/01_neodatis.xpi2p on sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p] || Used by [[Seedless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid|Orchid]]-zzz&#039;&#039; || 2018 || [http://stats.i2p/i2p/plugins/ (plugin website)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid]]-thebland&#039;&#039; || 2016 || [http://thebland.i2p/i2p/plugins/ (plugin website)] [http://zzz.i2p/topics/2031?page=1#p11363 (How to install)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;[[Seedless]]&#039;&#039; || 2012 || [http://sponge.i2p/files/seedless/doc/how-to-seedless.html Description (on sponge.i2p)]. File: [http://sponge.i2p/files/seedless/02_seedless.xpi2p On sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p]&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2267-lost-plugin-directory&amp;lt;/ref&amp;gt; (read the article [[Seedless]] before to install !). || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Forums || &#039;&#039;[[Syndie]]&#039;&#039; || 2016 || || Also available as standalone software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[Tahoe-LAFS]] || &#039;&#039;Tahoe-LAFS Controller&#039;&#039; || 201x ||  [http://stats.i2p/i2p/plugins/tahoe-lafs-controller.xpi2p File (on stats.i2p)] ||&lt;br /&gt;
&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| BitTorrent tracker || &#039;&#039;ZzzOT&#039;&#039; || 2015&amp;lt;ref&amp;gt;0.14.0-b1 released in 2015&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/zzzot.su3 File (on stats.i2p)]&amp;lt;ref&amp;gt;After installation, a brief help page will be available at http://127.0.0.1:7662/help.html. Be sure to read it completely!&amp;lt;/ref&amp;gt;|| A Java BitTorrent Opentracker. Has no eepsite, but a official forum (zzz.i2p)&amp;lt;ref&amp;gt;http://zzz.i2p/search?type=topics&amp;amp;query=zzzot&amp;amp;commit=Search&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reseed || &#039;&#039;Reseed-tools&#039;&#039; || 2021 || || Easy to setup I2P Reseed server in Go, also available as standalone software. http://idk.i2p/reseed-tools&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Helper || &#039;&#039;Blizzard&#039;&#039; || 2021 || || Adds a Snowflake Proxy to I2P which helps Tor Browser users reach the Tor Network using Pluggable Transports. http://idk.i2p/blizzard|}&lt;br /&gt;
&lt;br /&gt;
=== Obsolete === &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;AyuDownloader&#039;&#039;&#039;: &amp;quot;AyuDownloader is an Plugin using the [[EepGet|EepGet class]] from I2P developers to download large files easier from Eepsites.&amp;quot; &amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=7468&amp;amp;highlight=yuDownloader&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;I2Cron&#039;&#039;&#039;: &amp;quot;The I2Cron plugin executes actions based on scheduled timed-based events, or polled events.&amp;quot;&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/8846695?rId=56eeff4c9298c&amp;amp;seq=1&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;JAMWiki&#039;&#039;&#039;: A Java Wiki Engine. Active development of JAMWiki has ceased (2013)&amp;lt;ref&amp;gt;jamwiki.org/wiki/en/FAQ&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Pebble&#039;&#039;&#039;: &amp;quot;a lightweight, open source, Java EE blogging tool&amp;quot;.&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/9450470?rId=56ef019684452&amp;amp;seq=2&amp;lt;/ref&amp;gt;&lt;br /&gt;
== FAQ == &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
=== Does the plugin version always match with the latest standalone version? ===&lt;br /&gt;
Not always. Sometimes the plugin version is outdated: the standalone version of the software is more recent. If this case, you should use the standalone version.&lt;br /&gt;
&lt;br /&gt;
=== How to install a plugin? === &amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Usually, the process is as follows:&lt;br /&gt;
# Go to the plugin page in your I2P router console: &#039;I2P Services&#039; &amp;gt; &#039;Clients&#039; &amp;gt; &#039;Plugins&#039; (or click this URL: http://127.0.0.1:7657/configplugins)&lt;br /&gt;
# If you have the URL to the plugin file: at the bottom of the page, look for the box &#039;Installation from URL.&#039; Paste inside the URL to the plugin file (example: http://bote.i2p/i2pbote.su3)&lt;br /&gt;
# If you have the plugin file on your HDD: at the bottom of the page, look for the box &#039;Installation from File&#039; and browse to the location of the file. &lt;br /&gt;
# Click the button &#039;Install Plugin&#039; (or &#039;Install Plugin from file&#039;)&lt;br /&gt;
# Wait several minutes&lt;br /&gt;
# Once installed, you will see a new text string at the top of the router console, below &#039;I2P Services&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Note: you should read the description page of the plugin, because there is perhaps more setup to do.&lt;br /&gt;
&lt;br /&gt;
=== How to check the signature of a plugin file manually, before installing it === &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Usually, this isn&#039;t needed.  The I2P router plugin installer automatically checks whether the signature of the downloaded .su3 file is valid and created by an authorized developer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
If you still want to verify the signature manually, enter the following at the command line: &lt;br /&gt;
 java -jar /path/to/i2p.jar su3file verifysig -k /path/to/certificates/plugin/signer_at_mail.i2p.crt /path/to/plugin.su3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Note: most plugins&#039; source codes are downloadable from the I2P&#039;s Monotone server&amp;lt;ref&amp;gt;http://i2p-projekt.i2p/en/get-involved/guides/monotone&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Tails === &amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
Installation of plugins is disabled in [[Tails]].&amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=12482&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Plugin Development == &amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Those looking to create new plugins for I2P might want to look at the [http://i2p-projekt.i2p/en/docs/plugins introduction to plugin development], the [http://i2p-projekt.i2p/en/docs/spec/plugin plugin specification], and the [http://zzz.i2p plugin forum].&lt;br /&gt;
&lt;br /&gt;
== References == &amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
== External links == &amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
* http://i2p-projekt.i2p/en/docs/plugins - Official documentation&lt;br /&gt;
* http://stats.i2p/i2p/plugins/ - Official I2P plugins page (succeed to http://plugins.i2p)&lt;br /&gt;
* [http://direct.i2p/site/webcache/203642?rId=56eeb3f512c03&amp;amp;seq=1 http://plugins.i2p] main page, cached by http://direct.i2p search engine (2016-03) before it vanish&lt;br /&gt;
* [http://zzz.i2p/forums/16-plugins http://zzz.i2p/forums/] - The official forum for the plugins developpers&lt;br /&gt;
* http://archiv.tutorials.i2p/i2p-plugins/&lt;br /&gt;
-----&lt;br /&gt;
[[Category:I2P]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=474</id>
		<title>Plugins</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=474"/>
		<updated>2021-12-06T05:04:59Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction == &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
This page is about plugins designed for the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
I2P plugins are both a means to extend I2P&#039;s router functionality as well as a method of packaging things.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
I2P plugins are stored in &amp;quot;.xpi2p&amp;quot; files, and can be installed or uninstalled from the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Comment by Khanjant, 2016-03-17: &amp;quot;This is the plugin list managed to recover after the epic fall of http://plugins.i2p. Gathered from the plugin list on [http://stats.i2p/i2p/plugins stats.i2p] and [http://temporarypluginlist.i2p/plugins a unofficial temporary list]. I (Khanjant) just started, not finished yet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
Because of the sudden shutdown of http://plugins.i2p, some plugins files are still missing to us, if you have some that miss in this list, please contact [[user:Hummingbird]].&lt;br /&gt;
&lt;br /&gt;
== Plugin list == &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Non-obsolete === &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
! Type&lt;br /&gt;
! Plugin name&lt;br /&gt;
! Latest release (year)&lt;br /&gt;
! URLs (Description / File / Source code)&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;BwSchedule&#039;&#039; || 2015 ||  [http://y7hb4kzomfzzhekib2mby72ydlntiexmuafuwtlxrxyigtnd63la.b32.i2p/bwschedule_description.html Description by Cacapao (author)]  || Bandwidth scheduler for the I2P router&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Demo plugin || &#039;&#039;Snowman&#039;&#039; ||  2015 || [http://stats.i2p/i2p/plugins/snowman.xpi2p File]. [http://stats.i2p/i2p/plugins/i2p.snowman.zip Source code] || Just a little test, creates a single-page webapp. The plugin contains some commented config files that may be helpful for plugin developers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Email || &#039;&#039;[[I2P-Bote]]&#039;&#039; || 2018 || [[I2P-Bote#To_get_it|Description, file]] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| File sharing || &#039;&#039;[[I2Phex]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ Plugin] || Also available as standalone software&amp;lt;ref&amp;gt;I2Phex v3.2.7 standalone available from http://echelon.i2p/i2phex/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool || &#039;&#039;Firefox Search Plugins&#039;&#039; || || [http://direct.i2p/site/webcache/9449449?rId=56eef8a275a82&amp;amp;seq=2 Description (cached page)] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;I2PControl&#039;&#039; || 2018 || [http://i2p-projekt.i2p/en/docs/api/i2pcontrol Description (on i2p-projekt.i2p/)]. [http://git.repo.i2p/w/i2p.scripts.git/tree/HEAD:/i2pcontrol Source code (Python)] ||  JSONRPC2 interface&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IRC client || &#039;&#039;[[JIRCii|jIRCii]]&#039;&#039; || 2016&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2162-jircii-2014-12-9-z1&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/jIRCii.xpi2p File on stats.i2p], File from iMule (v0.9.0, 2011)&amp;lt;ref&amp;gt;ed2k://|file|jIRCii.xpi2p|319207|E08E77D0B9A76455C6EA55C0C1E3A477|h=V5S4ZMFRPWNLHEMY7EDIWDEYU33EGUU6|/&amp;lt;/ref&amp;gt; || jIRCii as a plugin for the I2P console, written in Java. [http://www.oldschoolirc.com Official website (clearnet, not I2P compatible)].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P&amp;lt;ref&amp;gt;&amp;quot;Julya is a network enabled Jython shell, allowing multiple instances of Jython to be managed from a network connection. Jython scripts can be run in a headless environment by sending scripts via TCP connections defined by the user.&amp;quot;&amp;lt;/ref&amp;gt; || &#039;&#039;Julya&#039;&#039; || 2014 || [http://git.repo.i2p/w/jython_i2p_api.git Homepage and source code] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[I2Phex]] || &#039;&#039;[[Jwebcache]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ File] or [http://echelon.i2p/jwebcache/ File] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HTTP outproxy || &#039;&#039;Outertubes&#039;&#039; || 2012 ? || Description&amp;lt;ref&amp;gt;&amp;quot;Outertubes ia an HTTP Outproxy. It allows other I2P users to connect to the regular Internet via your machine.&amp;quot; from http://archiv.tutorials.i2p/i2p-plugins/outertubes/&amp;lt;/ref&amp;gt; (coded by HungryHobbo&amp;lt;ref&amp;gt;http://zzz.i2p/topics/1149&amp;lt;/ref&amp;gt;) ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Database || &#039;&#039;Neodatis&#039;&#039; || 2012 || File: [http://sponge.i2p/files/seedless/01_neodatis.xpi2p on sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p] || Used by [[Seedless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid|Orchid]]-zzz&#039;&#039; || 2018 || [http://stats.i2p/i2p/plugins/ (plugin website)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid]]-thebland&#039;&#039; || 2016 || [http://thebland.i2p/i2p/plugins/ (plugin website)] [http://zzz.i2p/topics/2031?page=1#p11363 (How to install)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;[[Seedless]]&#039;&#039; || 2012 || [http://sponge.i2p/files/seedless/doc/how-to-seedless.html Description (on sponge.i2p)]. File: [http://sponge.i2p/files/seedless/02_seedless.xpi2p On sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p]&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2267-lost-plugin-directory&amp;lt;/ref&amp;gt; (read the article [[Seedless]] before to install !). || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Forums || &#039;&#039;[[Syndie]]&#039;&#039; || 2016 || || Also available as standalone software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[Tahoe-LAFS]] || &#039;&#039;Tahoe-LAFS Controller&#039;&#039; || 201x ||  [http://stats.i2p/i2p/plugins/tahoe-lafs-controller.xpi2p File (on stats.i2p)] ||&lt;br /&gt;
&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| BitTorrent tracker || &#039;&#039;ZzzOT&#039;&#039; || 2015&amp;lt;ref&amp;gt;0.14.0-b1 released in 2015&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/zzzot.su3 File (on stats.i2p)]&amp;lt;ref&amp;gt;After installation, a brief help page will be available at http://127.0.0.1:7662/help.html. Be sure to read it completely!&amp;lt;/ref&amp;gt;|| A Java BitTorrent Opentracker. Has no eepsite, but a official forum (zzz.i2p)&amp;lt;ref&amp;gt;http://zzz.i2p/search?type=topics&amp;amp;query=zzzot&amp;amp;commit=Search&amp;lt;/ref&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reseed || &#039;&#039;Reseed-tools&#039;&#039; || 2021 || || Easy to setup I2P Reseed server in Go, also available as standalone software. http://idk.i2p/reseed-tools&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Helper || &#039;&#039;Blizzard&#039;&#039; || 2021 || || Adds a Snowflake Proxy to I2P which helps Tor Browser users reach the Tor Network using Pluggable Transports. http://idk.i2p/blizzard|}&lt;br /&gt;
&lt;br /&gt;
=== Obsolete === &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;AyuDownloader&#039;&#039;&#039;: &amp;quot;AyuDownloader is an Plugin using the [[EepGet|EepGet class]] from I2P developers to download large files easier from Eepsites.&amp;quot; &amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=7468&amp;amp;highlight=yuDownloader&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;I2Cron&#039;&#039;&#039;: &amp;quot;The I2Cron plugin executes actions based on scheduled timed-based events, or polled events.&amp;quot;&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/8846695?rId=56eeff4c9298c&amp;amp;seq=1&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;JAMWiki&#039;&#039;&#039;: A Java Wiki Engine. Active development of JAMWiki has ceased (2013)&amp;lt;ref&amp;gt;jamwiki.org/wiki/en/FAQ&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Pebble&#039;&#039;&#039;: &amp;quot;a lightweight, open source, Java EE blogging tool&amp;quot;.&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/9450470?rId=56ef019684452&amp;amp;seq=2&amp;lt;/ref&amp;gt;&lt;br /&gt;
== FAQ == &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
=== Does the plugin version always match with the latest standalone version? ===&lt;br /&gt;
Not always. Sometimes the plugin version is outdated: the standalone version of the software is more recent. If this case, you should use the standalone version.&lt;br /&gt;
&lt;br /&gt;
=== How to install a plugin? === &amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Usually, the process is as follows:&lt;br /&gt;
# Go to the plugin page in your I2P router console: &#039;I2P Services&#039; &amp;gt; &#039;Clients&#039; &amp;gt; &#039;Plugins&#039; (or click this URL: http://127.0.0.1:7657/configplugins)&lt;br /&gt;
# If you have the URL to the plugin file: at the bottom of the page, look for the box &#039;Installation from URL.&#039; Paste inside the URL to the plugin file (example: http://bote.i2p/i2pbote.su3)&lt;br /&gt;
# If you have the plugin file on your HDD: at the bottom of the page, look for the box &#039;Installation from File&#039; and browse to the location of the file. &lt;br /&gt;
# Click the button &#039;Install Plugin&#039; (or &#039;Install Plugin from file&#039;)&lt;br /&gt;
# Wait several minutes&lt;br /&gt;
# Once installed, you will see a new text string at the top of the router console, below &#039;I2P Services&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Note: you should read the description page of the plugin, because there is perhaps more setup to do.&lt;br /&gt;
&lt;br /&gt;
=== How to check the signature of a plugin file manually, before installing it === &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Usually, this isn&#039;t needed.  The I2P router plugin installer automatically checks whether the signature of the downloaded .su3 file is valid and created by an authorized developer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
If you still want to verify the signature manually, enter the following at the command line: &lt;br /&gt;
 java -jar /path/to/i2p.jar su3file verifysig -k /path/to/certificates/plugin/signer_at_mail.i2p.crt /path/to/plugin.su3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Note: most plugins&#039; source codes are downloadable from the I2P&#039;s Monotone server&amp;lt;ref&amp;gt;http://i2p-projekt.i2p/en/get-involved/guides/monotone&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Tails === &amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
Installation of plugins is disabled in [[Tails]].&amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=12482&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Plugin Development == &amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Those looking to create new plugins for I2P might want to look at the [http://i2p-projekt.i2p/en/docs/plugins introduction to plugin development], the [http://i2p-projekt.i2p/en/docs/spec/plugin plugin specification], and the [http://zzz.i2p plugin forum].&lt;br /&gt;
&lt;br /&gt;
== References == &amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
== External links == &amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
* http://i2p-projekt.i2p/en/docs/plugins - Official documentation&lt;br /&gt;
* http://stats.i2p/i2p/plugins/ - Official I2P plugins page (succeed to http://plugins.i2p)&lt;br /&gt;
* [http://direct.i2p/site/webcache/203642?rId=56eeb3f512c03&amp;amp;seq=1 http://plugins.i2p] main page, cached by http://direct.i2p search engine (2016-03) before it vanish&lt;br /&gt;
* [http://zzz.i2p/forums/16-plugins http://zzz.i2p/forums/] - The official forum for the plugins developpers&lt;br /&gt;
* http://archiv.tutorials.i2p/i2p-plugins/&lt;br /&gt;
-----&lt;br /&gt;
[[Category:I2P]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=473</id>
		<title>Plugins</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Plugins&amp;diff=473"/>
		<updated>2021-12-06T05:03:15Z</updated>

		<summary type="html">&lt;p&gt;Idk: Add 2 new plugins&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction == &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
This page is about plugins designed for the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
I2P plugins are both a means to extend I2P&#039;s router functionality as well as a method of packaging things.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
I2P plugins are stored in &amp;quot;.xpi2p&amp;quot; files, and can be installed or uninstalled from the I2P router console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Comment by Khanjant, 2016-03-17: &amp;quot;This is the plugin list managed to recover after the epic fall of http://plugins.i2p. Gathered from the plugin list on [http://stats.i2p/i2p/plugins stats.i2p] and [http://temporarypluginlist.i2p/plugins a unofficial temporary list]. I (Khanjant) just started, not finished yet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
Because of the sudden shutdown of http://plugins.i2p, some plugins files are still missing to us, if you have some that miss in this list, please contact [[user:Hummingbird]].&lt;br /&gt;
&lt;br /&gt;
== Plugin list == &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Non-obsolete === &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
! Type&lt;br /&gt;
! Plugin name&lt;br /&gt;
! Latest release (year)&lt;br /&gt;
! URLs (Description / File / Source code)&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;BwSchedule&#039;&#039; || 2015 ||  [http://y7hb4kzomfzzhekib2mby72ydlntiexmuafuwtlxrxyigtnd63la.b32.i2p/bwschedule_description.html Description by Cacapao (author)]  || Bandwidth scheduler for the I2P router&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Demo plugin || &#039;&#039;Snowman&#039;&#039; ||  2015 || [http://stats.i2p/i2p/plugins/snowman.xpi2p File]. [http://stats.i2p/i2p/plugins/i2p.snowman.zip Source code] || Just a little test, creates a single-page webapp. The plugin contains some commented config files that may be helpful for plugin developers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Email || &#039;&#039;[[I2P-Bote]]&#039;&#039; || 2018 || [[I2P-Bote#To_get_it|Description, file]] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| File sharing || &#039;&#039;[[I2Phex]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ Plugin] || Also available as standalone software&amp;lt;ref&amp;gt;I2Phex v3.2.7 standalone available from http://echelon.i2p/i2phex/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool || &#039;&#039;Firefox Search Plugins&#039;&#039; || || [http://direct.i2p/site/webcache/9449449?rId=56eef8a275a82&amp;amp;seq=2 Description (cached page)] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;I2PControl&#039;&#039; || 2018 || [http://i2p-projekt.i2p/en/docs/api/i2pcontrol Description (on i2p-projekt.i2p/)]. [http://git.repo.i2p/w/i2p.scripts.git/tree/HEAD:/i2pcontrol Source code (Python)] ||  JSONRPC2 interface&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IRC client || &#039;&#039;[[JIRCii|jIRCii]]&#039;&#039; || 2016&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2162-jircii-2014-12-9-z1&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/jIRCii.xpi2p File on stats.i2p], File from iMule (v0.9.0, 2011)&amp;lt;ref&amp;gt;ed2k://|file|jIRCii.xpi2p|319207|E08E77D0B9A76455C6EA55C0C1E3A477|h=V5S4ZMFRPWNLHEMY7EDIWDEYU33EGUU6|/&amp;lt;/ref&amp;gt; || jIRCii as a plugin for the I2P console, written in Java. [http://www.oldschoolirc.com Official website (clearnet, not I2P compatible)].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P&amp;lt;ref&amp;gt;&amp;quot;Julya is a network enabled Jython shell, allowing multiple instances of Jython to be managed from a network connection. Jython scripts can be run in a headless environment by sending scripts via TCP connections defined by the user.&amp;quot;&amp;lt;/ref&amp;gt; || &#039;&#039;Julya&#039;&#039; || 2014 || [http://git.repo.i2p/w/jython_i2p_api.git Homepage and source code] || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[I2Phex]] || &#039;&#039;[[Jwebcache]]&#039;&#039; || 2016 || [http://stats.i2p/i2p/plugins/ File] or [http://echelon.i2p/jwebcache/ File] ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HTTP outproxy || &#039;&#039;Outertubes&#039;&#039; || 2012 ? || Description&amp;lt;ref&amp;gt;&amp;quot;Outertubes ia an HTTP Outproxy. It allows other I2P users to connect to the regular Internet via your machine.&amp;quot; from http://archiv.tutorials.i2p/i2p-plugins/outertubes/&amp;lt;/ref&amp;gt; (coded by HungryHobbo&amp;lt;ref&amp;gt;http://zzz.i2p/topics/1149&amp;lt;/ref&amp;gt;) ||&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Database || &#039;&#039;Neodatis&#039;&#039; || 2012 || File: [http://sponge.i2p/files/seedless/01_neodatis.xpi2p on sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p] || Used by [[Seedless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid|Orchid]]-zzz&#039;&#039; || 2018 || [http://stats.i2p/i2p/plugins/ (plugin website)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Outproxy || &#039;&#039;[[Orchid]]-thebland&#039;&#039; || 2016 || [http://thebland.i2p/i2p/plugins/ (plugin website)] [http://zzz.i2p/topics/2031?page=1#p11363 (How to install)] || &#039;Orchid is a Tor client implementation and library written in pure Java.&#039;&amp;lt;ref&amp;gt;https://subgraph.com/orchid/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for I2P || &#039;&#039;[[Seedless]]&#039;&#039; || 2012 || [http://sponge.i2p/files/seedless/doc/how-to-seedless.html Description (on sponge.i2p)]. File: [http://sponge.i2p/files/seedless/02_seedless.xpi2p On sponge.i2p (official)] or [http://stats.i2p/i2p/plugins/others/Seedless/ on stats.i2p]&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2267-lost-plugin-directory&amp;lt;/ref&amp;gt; (read the article [[Seedless]] before to install !). || &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Forums || &#039;&#039;[[Syndie]]&#039;&#039; || 2016 || || Also available as standalone software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tool for [[Tahoe-LAFS]] || &#039;&#039;Tahoe-LAFS Controller&#039;&#039; || 201x ||  [http://stats.i2p/i2p/plugins/tahoe-lafs-controller.xpi2p File (on stats.i2p)] ||&lt;br /&gt;
&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| BitTorrent tracker || &#039;&#039;ZzzOT&#039;&#039; || 2015&amp;lt;ref&amp;gt;0.14.0-b1 released in 2015&amp;lt;/ref&amp;gt; || [http://stats.i2p/i2p/plugins/zzzot.su3 File (on stats.i2p)]&amp;lt;ref&amp;gt;After installation, a brief help page will be available at http://127.0.0.1:7662/help.html. Be sure to read it completely!&amp;lt;/ref&amp;gt;|| A Java BitTorrent Opentracker. Has no eepsite, but a official forum (zzz.i2p)&amp;lt;ref&amp;gt;http://zzz.i2p/search?type=topics&amp;amp;query=zzzot&amp;amp;commit=Search&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Reseed || &#039;&#039;Reseed-tools&#039;&#039; || 2021 || || Easy to setup I2P Reseed server in Go, also available as standalone software. http://idk.i2p/reseed-tools&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tor Helper || &#039;&#039;Blizzard&#039;&#039; || 2021 || || Adds a Snowflake Proxy to I2P which helps Tor Browser users reach the Tor Network using Pluggable Transports. http://idk.i2p/blizzard&lt;br /&gt;
&lt;br /&gt;
=== Obsolete === &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;AyuDownloader&#039;&#039;&#039;: &amp;quot;AyuDownloader is an Plugin using the [[EepGet|EepGet class]] from I2P developers to download large files easier from Eepsites.&amp;quot; &amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=7468&amp;amp;highlight=yuDownloader&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;I2Cron&#039;&#039;&#039;: &amp;quot;The I2Cron plugin executes actions based on scheduled timed-based events, or polled events.&amp;quot;&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/8846695?rId=56eeff4c9298c&amp;amp;seq=1&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;JAMWiki&#039;&#039;&#039;: A Java Wiki Engine. Active development of JAMWiki has ceased (2013)&amp;lt;ref&amp;gt;jamwiki.org/wiki/en/FAQ&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Pebble&#039;&#039;&#039;: &amp;quot;a lightweight, open source, Java EE blogging tool&amp;quot;.&amp;lt;ref&amp;gt;http://direct.i2p/site/webcache/9450470?rId=56ef019684452&amp;amp;seq=2&amp;lt;/ref&amp;gt;&lt;br /&gt;
== FAQ == &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
=== Does the plugin version always match with the latest standalone version? ===&lt;br /&gt;
Not always. Sometimes the plugin version is outdated: the standalone version of the software is more recent. If this case, you should use the standalone version.&lt;br /&gt;
&lt;br /&gt;
=== How to install a plugin? === &amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
Usually, the process is as follows:&lt;br /&gt;
# Go to the plugin page in your I2P router console: &#039;I2P Services&#039; &amp;gt; &#039;Clients&#039; &amp;gt; &#039;Plugins&#039; (or click this URL: http://127.0.0.1:7657/configplugins)&lt;br /&gt;
# If you have the URL to the plugin file: at the bottom of the page, look for the box &#039;Installation from URL.&#039; Paste inside the URL to the plugin file (example: http://bote.i2p/i2pbote.su3)&lt;br /&gt;
# If you have the plugin file on your HDD: at the bottom of the page, look for the box &#039;Installation from File&#039; and browse to the location of the file. &lt;br /&gt;
# Click the button &#039;Install Plugin&#039; (or &#039;Install Plugin from file&#039;)&lt;br /&gt;
# Wait several minutes&lt;br /&gt;
# Once installed, you will see a new text string at the top of the router console, below &#039;I2P Services&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
Note: you should read the description page of the plugin, because there is perhaps more setup to do.&lt;br /&gt;
&lt;br /&gt;
=== How to check the signature of a plugin file manually, before installing it === &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
Usually, this isn&#039;t needed.  The I2P router plugin installer automatically checks whether the signature of the downloaded .su3 file is valid and created by an authorized developer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
If you still want to verify the signature manually, enter the following at the command line: &lt;br /&gt;
 java -jar /path/to/i2p.jar su3file verifysig -k /path/to/certificates/plugin/signer_at_mail.i2p.crt /path/to/plugin.su3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
Note: most plugins&#039; source codes are downloadable from the I2P&#039;s Monotone server&amp;lt;ref&amp;gt;http://i2p-projekt.i2p/en/get-involved/guides/monotone&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Tails === &amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
Installation of plugins is disabled in [[Tails]].&amp;lt;ref&amp;gt;http://forum.i2p/viewtopic.php?t=12482&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Plugin Development == &amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
Those looking to create new plugins for I2P might want to look at the [http://i2p-projekt.i2p/en/docs/plugins introduction to plugin development], the [http://i2p-projekt.i2p/en/docs/spec/plugin plugin specification], and the [http://zzz.i2p plugin forum].&lt;br /&gt;
&lt;br /&gt;
== References == &amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
== External links == &amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
* http://i2p-projekt.i2p/en/docs/plugins - Official documentation&lt;br /&gt;
* http://stats.i2p/i2p/plugins/ - Official I2P plugins page (succeed to http://plugins.i2p)&lt;br /&gt;
* [http://direct.i2p/site/webcache/203642?rId=56eeb3f512c03&amp;amp;seq=1 http://plugins.i2p] main page, cached by http://direct.i2p search engine (2016-03) before it vanish&lt;br /&gt;
* [http://zzz.i2p/forums/16-plugins http://zzz.i2p/forums/] - The official forum for the plugins developpers&lt;br /&gt;
* http://archiv.tutorials.i2p/i2p-plugins/&lt;br /&gt;
-----&lt;br /&gt;
[[Category:I2P]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=I2Speed&amp;diff=398</id>
		<title>I2Speed</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=I2Speed&amp;diff=398"/>
		<updated>2021-06-10T12:53:39Z</updated>

		<summary type="html">&lt;p&gt;Idk: Removed redirect to I2PSpeed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;On I2Speed we are offering background, hints and code for a better i2p experience, aiming at all levels of users from beginner to developer.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Anybody who wants to upload/download stuff faster using I2P should consider the facts given here.&lt;br /&gt;
&lt;br /&gt;
Basically for any data transfer your local application uses tunnels to remote peers. Two parallel connections to the same peer will use the same tunnel, share the bandwidth and slow down transfers by a factor of two. This is why it is a bad idea to post multiple similar torrents at the same time. They will attract the same set of leechers with all tunnels shared between all torrents. Some applications like MuWire also load tremendous amounts of overhead onto their tunnels (currently 1 GB in/out per day for an idle instance).&lt;br /&gt;
&lt;br /&gt;
So users requested applications to use multiple tunnels, in order to at least get unused tunnels for additional connections. First the devs increased the max number of tunnels, only to drop back to use them &amp;quot;as needed&amp;quot;. Background for this is that I2P selects random tunnels for new connections instead of unused ones. This is why high tunnel quantities were demanded just to increase the probability of getting unused tunnels. I2Speed corrects this, handing out fresh tunnels when possible and distributing connections evenly over tunnels. Although tunnels are expensive to build, today there are lots of unused ones on the live net, just because they were configured, but not randomly selected.&lt;br /&gt;
&lt;br /&gt;
Furthermore, tunnels are built using a set of known fast peers, for which I2Speed raises the limit from 50 to 100, but actually the peers qualified as fast always range in the 50 area. If you build lots of tunnels, they will all share those fast peers that in turn will probably be selected too by other I2P users. Running two or more I2p routers in parallel, distributing your local tunnels, will definitely help a bit.&lt;br /&gt;
&lt;br /&gt;
On the lowest level then there is the actual transmission over the wire. Here I2Speed allows much faster transfer speeds especially when using UDP, but you still depend on the speed of the other hops in your tunnels.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
How compatible is I2Speed?&lt;br /&gt;
	100%. There is no change to cryptography or communication protocols. You can always revert by installing the i2pupdate.zip from the stock I2P distribution.&lt;br /&gt;
&lt;br /&gt;
Is I2Speed safe?&lt;br /&gt;
	100%. You do not need to download any prebuilt stuff. Our full source as well as a commented diff is on MuWire for review or to build yourself.&lt;br /&gt;
&lt;br /&gt;
Starting is so slow!&lt;br /&gt;
	After changing versions I2P might generate a new router identity. See event log. Will take 48 hours to fully integrate into the network. If it stays idle for minutes, try a restart.&lt;br /&gt;
&lt;br /&gt;
Do you stay current?&lt;br /&gt;
	Absolutely. We have been backporting our improvements to I2P for years and will update within days after new I2P source comes out.&lt;br /&gt;
&lt;br /&gt;
When will your improvements appear in the I2P standard release?&lt;br /&gt;
	We do not know. Some issues adressed by us were first discussed by a guy called zab (the MuWire dev) years ago and no skillful dev cared. Especially our UDP stuff is a major overhaul, very diffent from changing some statics there as they did in the last releases. We hope some I2P dev comes around and also sees value in our work. Steal our code!&lt;br /&gt;
&lt;br /&gt;
What about GraalVM?&lt;br /&gt;
	We consider this an exciting technology, but it offers no direct benefit for I2P. We install it for occasional use of JVisualVM (easier to use but not as functional as the tools included with the JDK). If you use a lot of Java apps it saves you repeatedly typing: &amp;quot;-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler&amp;quot;&lt;br /&gt;
&lt;br /&gt;
What are your minimum requirements?&lt;br /&gt;
	We build for Java 11+ because of better memory management, performance enhancements, Graal JIT (if you run 64 bit) and default G1 GC. You may build for Android or Java 8 by downgrading the Java version in &amp;quot;build.properties&amp;quot;. Do not try to build and run for single core ARM.&lt;br /&gt;
&lt;br /&gt;
What do I lose?&lt;br /&gt;
	Actually, not much. We took full stats and message time-stamping out of the UDP transport. These rarely used debug functions themselves do not eat much CPU when not debugging, but cause endless calls to the system clock. Debug logging is unchanged wherever possible.&lt;br /&gt;
&lt;br /&gt;
What is &amp;quot;rtr:&amp;quot; ?&lt;br /&gt;
	Wow, you are debugging our stuff. &amp;quot;rtr:&amp;quot; is the number of messages currently being retransmitted to this peer. Easier to see if you go to /peers, last item in the CWND column.&lt;br /&gt;
&lt;br /&gt;
TCP or UDP?&lt;br /&gt;
	You will always need some dozen UDP connections for reliable address detection and network integration. Shutting off the NTCP transport takes some burden off the network, but can cost you up to one third of throughput. Even with I2Speed processing a message over UDP takes a bit more CPU (but will use less on the entire path to the final destination including your internet gateway). That said there is a reason why I2P defaults to less TCP than UDP connections. Many internet routers bog down under a high number of TCP connections (well below listed specs). We have seen packet loss and heat problems due to a high number of TCP connections through consumer grade equipment.&lt;br /&gt;
&lt;br /&gt;
Do you provide enhancements for Snark?&lt;br /&gt;
	Snark benefits from any improvement to router functions. In our view Snark is a leeching tool that works for that purpose most of the time. We prefer BiglyBT. It supports everything people have demanded from Snark in discussions over the last years.&lt;br /&gt;
&lt;br /&gt;
== Technical Overview ==&lt;br /&gt;
This is a high-level overview of our work, detailed descriptions for interested devs to follow.&lt;br /&gt;
&lt;br /&gt;
* Math libraries on the Mac were built using latest GMP 6.1.2 and latest Apple compilers. Support for Skylake and Nehalem architectures added. 32-bit support and debug stuff stripped from all Mac components.&lt;br /&gt;
* Pre-generation of random numbers and crypto keys is now evenly distributed over time. Now it is made sure that buffers do not run dry under high load, delaying packets by on-the-fly generation. Makes processing of local traffic 25% faster under high load. There even is an auto-turbo mode geared towards massively parallel ARM-boards.&lt;br /&gt;
* Numerous smaller tweaks to the NTCP transport to cut out some ms latency.&lt;br /&gt;
* Several improvements to the multi-threaded design. Threads along with context switches eliminated where easily possible. Different approaches for different platforms. Thread count scales to platform, processor count and type. Threads wait more than 50% less idle on the run queue (Linux).&lt;br /&gt;
* UDP send strategy employs parallel resends and a very fastly tuned send window, aimed at minimizing message loss on failing connections. Tolerates high levels of packet loss (limit 5% for fast connections, more when slower). Helps with WiFi and when running high bandwidth. Top speeds averaging &amp;gt; 200 KBps (single connection) outperforming TCP.&lt;br /&gt;
* excessive locking resolved within the UDP transport, cutting down noticably on CPU.&lt;br /&gt;
* resolved high frequency of iterations over UDP messages in transit. During lifetime the average message is visited &amp;lt; 10 times versus &amp;gt; 1,000 times before. Clear CPU reduction.&lt;br /&gt;
* Once a message gets in over UDP it is reliably ACKed twice. Saves 1% inbound bandwidth by bringing the duplicates received down to near zero. The real winner here is the avoidance of connection stalls on the remote end.&lt;br /&gt;
* High frequency of calls to the system clock eliminated. Clear CPU reduction.&lt;br /&gt;
* Chooses among twice as many network peers when building tunnels. Useful if you run 100s of local tunnels as we do.&lt;br /&gt;
* Lossless compression for graphics cutting down 28% average on memory usage.&lt;br /&gt;
&lt;br /&gt;
== What makes I2Speed WiFi-friendly? ==&lt;br /&gt;
As you may already know, I2P uses two transports, NTCP and SSU, that rely on the internet protocols TCP and UDP respectively. TCP is designed to handle packet loss transparently to the application developer, for UDP this is left to the application itself. I2P models UDP data transmission after TCP since the beginning.&lt;br /&gt;
&lt;br /&gt;
Here we get into trouble when we or someone else routing our tunnels runs on a WiFi network. In WiFi networks packet loss is a frequent condition, ranging from 2% upward to really high numbers on crowded networks. However TCP was designed for fixed networks and takes packet loss as a sign of &amp;quot;network congestion&amp;quot;, reducing transfer speeds and retransmitting data. Decades of work have gone into &amp;quot;TCP congestion control&amp;quot;, but the underlying assumption of a fixed network now turned partially false.&lt;br /&gt;
&lt;br /&gt;
Lots of academic research have gone into make TCP more compatible with WiFi, but a switch to a new TCP will be more painful than introducing IPv6, if it ever will happen. Protocols like HTSP today drop less important data when their TCP connection is getting slower, which is no option for I2P. I2Speed uses a non-aggressive approach to transmit UDP data in parallel even if there is some packet loss, drastically increasing transfer speed. It is even possible to run a router with TCP completely disabled without noticing any difference.&lt;br /&gt;
&lt;br /&gt;
You as a user benefit even when connected to a fixed network because your I2P peers may sit on WiFi. Since I2P uses &amp;quot;introducers&amp;quot; over UDP in firewalled scenarios and handles most traffic over UDP during the first hours after startup, roaming users on WiFi-laptops will see the highest benefit. Of course I2Speed is 100% compatible with the existing I2P installations and I2P peers.&lt;br /&gt;
&lt;br /&gt;
Also I2Speed will do a good job pumping UDP data through overloaded network equipment, which you should notice as an improvement. However do not overload your own internet gateway! Things will go worse otherwise.&lt;br /&gt;
&lt;br /&gt;
So give us a try: http://i2speed.i2p/i2pupdate.zip&lt;br /&gt;
&lt;br /&gt;
Something to watch out for: we used a quick hack to the CWND column on /peers. First item is current send window normalized to 1,000 ms, second item current messages in transit (unchanged), third item messages waiting on the outbound queue, fourth column messages currently being retransmitted.&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
* Official eepsite: http://i2speed.i2p/&lt;br /&gt;
* FAQ: http://i2speed.i2p/faq.html&lt;br /&gt;
* Technical Overview: http://i2speed.i2p/tech.html&lt;br /&gt;
* The real I2P speed story: http://i2speed.i2p/realspeed.html&lt;br /&gt;
* Update file: http://i2speed.i2p/i2pupdate.zip&lt;br /&gt;
* Source code: http://i2speed.i2p/I2Speed.latest.zip&lt;br /&gt;
* RSS Feed: http://i2speed.i2p/feed.xml&lt;br /&gt;
* Changelog: http://i2speed.i2p/changelog.html&lt;br /&gt;
&lt;br /&gt;
[[Category:I2P]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=I2PSpeed&amp;diff=397</id>
		<title>I2PSpeed</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=I2PSpeed&amp;diff=397"/>
		<updated>2021-06-10T12:49:47Z</updated>

		<summary type="html">&lt;p&gt;Idk: Turn into redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[I2Speed]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Docs-exporter&amp;diff=149</id>
		<title>Docs-exporter</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Docs-exporter&amp;diff=149"/>
		<updated>2020-02-05T17:56:02Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Documents-to-Wiki Exportation ==&lt;br /&gt;
&lt;br /&gt;
This is a quick-and-dirty script which I am using to convert the documentation pages from the main I2P web site hosted at https://geti2p.net and http://i2p-projekt.i2p into wiki format, so that they can be put on the wiki. What it does it takes a list of urls(a file it expects called &amp;quot;urls.list&amp;quot;), loops over them, looks for sections our website template creates and removes them, tidies the result, then turns what&#039;s left into a wiki page. When using this, take care to preserve the same directory structure as on the web site, to ensure that links stay alive by being in the expected place and to preserve our ability to provide localized documentation via this wiki(However, since I am primarily an English speaker, I have chosen to start by exporting English documentation as seen in the example urls.list). So for example, when exporting the SAMv3 documentation, don&#039;t use: &amp;lt;nowiki&amp;gt;http://wiki.i2p-projekt.i2p/wiki/index.php/SAMv3&amp;lt;/nowiki&amp;gt;, use &amp;lt;nowiki&amp;gt;http://wiki.i2p-projekt.i2p/wiki/index.php/En/docs/api/samv3&amp;lt;/nowiki&amp;gt;. If you&#039;re careful, most of the website docs can be exported to the wiki automatically.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#! /usr/bin/env sh&lt;br /&gt;
&lt;br /&gt;
for x in $(cat urls.list); do&lt;br /&gt;
    filename=$(basename $(echo $x | sed &#039;s|https://||g&#039;))&lt;br /&gt;
    if [ ! -f &amp;quot;wiki/$filename.md&amp;quot; ]; then&lt;br /&gt;
        wget &amp;quot;$x&amp;quot; -O &amp;quot;wiki/$filename-pre.html&amp;quot;&amp;lt;&amp;gt;&lt;br /&gt;
        grep -A 10000 &#039;&amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;&#039; &amp;quot;wiki/$filename-pre.html&amp;quot; | \&lt;br /&gt;
            grep -B 10000 &#039;&amp;lt;div id=&amp;quot;footermenu&amp;quot; class=&amp;quot;first&amp;quot;&amp;gt;&#039; | \&lt;br /&gt;
            sed &#039;s|&amp;lt;div id=&amp;quot;footermenu&amp;quot; class=&amp;quot;first&amp;quot;&amp;gt;||g&#039; | \&lt;br /&gt;
            tidy --as-xhtml --drop-empty-elements no --input-xml --tidy-mark no -indent --indent-spaces 4 -wrap 0 --new-blocklevel-tags article,header,footer --new-inline-tags video,audio,canvas,ruby,rt,rp --break-before-br yes --sort-attributes alpha --vertical-space yes | \&lt;br /&gt;
            tee &amp;quot;wiki/$filename.html&amp;quot;&lt;br /&gt;
        pandoc &amp;quot;wiki/$filename.html&amp;quot; -o &amp;quot;wiki/$filename.wiki&amp;quot;&lt;br /&gt;
        sed -i &#039;1d&#039; &amp;quot;wiki/$filename.wiki&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is an example urls.list for export.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;https://geti2p.net/en/about/glossary&lt;br /&gt;
https://geti2p.net/en/about/media&lt;br /&gt;
https://geti2p.net/en/about/performance&lt;br /&gt;
https://geti2p.net/en/comparison/tor&lt;br /&gt;
https://geti2p.net/en/comparison/freenet&lt;br /&gt;
https://geti2p.net/en/comparison/other-networks&lt;br /&gt;
https://geti2p.net/en/docs/how/intro&lt;br /&gt;
https://geti2p.net/en/docs/how/tech-intro&lt;br /&gt;
https://geti2p.net/en/docs/how/threat-model&lt;br /&gt;
https://geti2p.net/en/docs/how/garlic-routing&lt;br /&gt;
https://geti2p.net/en/docs/how/network-database&lt;br /&gt;
https://geti2p.net/en/docs/how/tunnel-routing&lt;br /&gt;
https://geti2p.net/en/docs/how/peer-selection&lt;br /&gt;
https://geti2p.net/en/docs/how/cryptography&lt;br /&gt;
https://geti2p.net/en/docs/how/elgamal-aes&lt;br /&gt;
https://geti2p.net/en/docs/api/i2ptunnel&lt;br /&gt;
https://geti2p.net/en/docs/api/socks&lt;br /&gt;
https://geti2p.net/en/docs/api/samv3&lt;br /&gt;
https://geti2p.net/en/docs/api/bob&lt;br /&gt;
https://geti2p.net/en/docs/api/streaming&lt;br /&gt;
https://geti2p.net/en/docs/api/datagrams&lt;br /&gt;
https://geti2p.net/en/docs/api/i2pcontrol&lt;br /&gt;
https://geti2p.net/en/docs/applications/supported&lt;br /&gt;
https://geti2p.net/en/docs/applications/bittorrent&lt;br /&gt;
https://geti2p.net/en/docs/protocol&lt;br /&gt;
https://geti2p.net/en/docs/protocol/i2cp&lt;br /&gt;
https://geti2p.net/en/docs/protocol/i2np&lt;br /&gt;
https://geti2p.net/en/docs/transport&lt;br /&gt;
https://geti2p.net/en/docs/transport/ntcp&lt;br /&gt;
https://geti2p.net/en/docs/transport/ssu&lt;br /&gt;
https://geti2p.net/en/docs/tunnels/implementation&lt;br /&gt;
https://geti2p.net/en/docs/tunnels/unidirectional&lt;br /&gt;
https://geti2p.net/en/docs/tunnels/old-implementation&lt;br /&gt;
https://geti2p.net/en/docs/naming&lt;br /&gt;
https://geti2p.net/en/docs/plugins&lt;br /&gt;
https://geti2p.net/en/docs/reseed&lt;br /&gt;
https://geti2p.net/en/docs/api/i2ptunnel&lt;br /&gt;
https://geti2p.net/en/docs/api/socks&lt;br /&gt;
https://geti2p.net/en/docs/api/samv3&lt;br /&gt;
https://geti2p.net/en/docs/api/bob&lt;br /&gt;
https://geti2p.net/en/docs/api/streaming&lt;br /&gt;
https://geti2p.net/en/docs/api/datagrams&lt;br /&gt;
https://geti2p.net/en/docs/api/i2pcontrol&lt;br /&gt;
https://geti2p.net/en/docs/api/i2pcontrol&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Docs-exporter&amp;diff=148</id>
		<title>Docs-exporter</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Docs-exporter&amp;diff=148"/>
		<updated>2020-02-05T17:55:27Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Documents-to-Wiki Exportation ==&lt;br /&gt;
&lt;br /&gt;
This is a quick-and-dirty script which I am using to convert the documentation pages from the main I2P web site hosted at https://geti2p.net and http://i2p-projekt.i2p into wiki format, so that they can be put on the wiki. What it does it takes a list of urls(a file it expects called &amp;quot;urls.list&amp;quot;), loops over them, looks for sections our website template creates and removes them, tidies the result, then turns what&#039;s left into a wiki page. When using this, take care to preserve the same directory structure as on the web site, to ensure that links stay alive by being in the expected place and to preserve our ability to provide localized documentation via this wiki(However, since I am primarily an English speaker, I have chosen to start by exporting English documentation as seen in the example urls.list). So for example, when exporting the SAMv3 documentation, don&#039;t use: &amp;lt;nowiki&amp;gt;http://wiki.i2p-projekt.i2p/wiki/index.php/SAMv3&amp;lt;/nowiki&amp;gt;, use &amp;lt;nowiki&amp;gt;http://wiki.i2p-projekt.i2p/wiki/index.php/En/docs/api/samv3&amp;lt;/nowiki&amp;gt;. If you&#039;re careful, most of the website docs can be exported to the wiki automatically.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;#! /usr/bin/env sh&lt;br /&gt;
&lt;br /&gt;
for x in $(cat urls.list); do&lt;br /&gt;
    filename=$(basename $(echo $x | sed &#039;s|https://||g&#039;))&lt;br /&gt;
    if [ ! -f &amp;quot;wiki/$filename.md&amp;quot; ]; then&lt;br /&gt;
        wget &amp;quot;$x&amp;quot; -O &amp;quot;wiki/$filename-pre.html&amp;quot;&amp;lt;&amp;gt;&lt;br /&gt;
        grep -A 10000 &#039;&amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;&#039; &amp;quot;wiki/$filename-pre.html&amp;quot; | \&lt;br /&gt;
            grep -B 10000 &#039;&amp;lt;div id=&amp;quot;footermenu&amp;quot; class=&amp;quot;first&amp;quot;&amp;gt;&#039; | \&lt;br /&gt;
            sed &#039;s|&amp;lt;div id=&amp;quot;footermenu&amp;quot; class=&amp;quot;first&amp;quot;&amp;gt;||g&#039; | \&lt;br /&gt;
            tidy --as-xhtml --drop-empty-elements no --input-xml --tidy-mark no -indent --indent-spaces 4 -wrap 0 --new-blocklevel-tags article,header,footer --new-inline-tags video,audio,canvas,ruby,rt,rp --break-before-br yes --sort-attributes alpha --vertical-space yes | \&lt;br /&gt;
            tee &amp;quot;wiki/$filename.html&amp;quot;&lt;br /&gt;
        pandoc &amp;quot;wiki/$filename.html&amp;quot; -o &amp;quot;wiki/$filename.wiki&amp;quot;&lt;br /&gt;
        sed -i &#039;1d&#039; &amp;quot;wiki/$filename.wiki&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is an example urls.list for export.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;https://geti2p.net/en/about/glossary&lt;br /&gt;
https://geti2p.net/en/about/media&lt;br /&gt;
https://geti2p.net/en/about/performance&lt;br /&gt;
https://geti2p.net/en/comparison/tor&lt;br /&gt;
https://geti2p.net/en/comparison/freenet&lt;br /&gt;
https://geti2p.net/en/comparison/other-networks&lt;br /&gt;
https://geti2p.net/en/docs/how/intro&lt;br /&gt;
https://geti2p.net/en/docs/how/tech-intro&lt;br /&gt;
https://geti2p.net/en/docs/how/threat-model&lt;br /&gt;
https://geti2p.net/en/docs/how/garlic-routing&lt;br /&gt;
https://geti2p.net/en/docs/how/network-database&lt;br /&gt;
https://geti2p.net/en/docs/how/tunnel-routing&lt;br /&gt;
https://geti2p.net/en/docs/how/peer-selection&lt;br /&gt;
https://geti2p.net/en/docs/how/cryptography&lt;br /&gt;
https://geti2p.net/en/docs/how/elgamal-aes&lt;br /&gt;
https://geti2p.net/en/docs/api/i2ptunnel&lt;br /&gt;
https://geti2p.net/en/docs/api/socks&lt;br /&gt;
https://geti2p.net/en/docs/api/samv3&lt;br /&gt;
https://geti2p.net/en/docs/api/bob&lt;br /&gt;
https://geti2p.net/en/docs/api/streaming&lt;br /&gt;
https://geti2p.net/en/docs/api/datagrams&lt;br /&gt;
https://geti2p.net/en/docs/api/i2pcontrol&lt;br /&gt;
https://geti2p.net/en/docs/applications/supported&lt;br /&gt;
https://geti2p.net/en/docs/applications/bittorrent&lt;br /&gt;
https://geti2p.net/en/docs/protocol&lt;br /&gt;
https://geti2p.net/en/docs/protocol/i2cp&lt;br /&gt;
https://geti2p.net/en/docs/protocol/i2np&lt;br /&gt;
https://geti2p.net/en/docs/transport&lt;br /&gt;
https://geti2p.net/en/docs/transport/ntcp&lt;br /&gt;
https://geti2p.net/en/docs/transport/ssu&lt;br /&gt;
https://geti2p.net/en/docs/tunnels/implementation&lt;br /&gt;
https://geti2p.net/en/docs/tunnels/unidirectional&lt;br /&gt;
https://geti2p.net/en/docs/tunnels/old-implementation&lt;br /&gt;
https://geti2p.net/en/docs/naming&lt;br /&gt;
https://geti2p.net/en/docs/plugins&lt;br /&gt;
https://geti2p.net/en/docs/reseed&lt;br /&gt;
https://geti2p.net/en/docs/api/i2ptunnel&lt;br /&gt;
https://geti2p.net/en/docs/api/socks&lt;br /&gt;
https://geti2p.net/en/docs/api/samv3&lt;br /&gt;
https://geti2p.net/en/docs/api/bob&lt;br /&gt;
https://geti2p.net/en/docs/api/streaming&lt;br /&gt;
https://geti2p.net/en/docs/api/datagrams&lt;br /&gt;
https://geti2p.net/en/docs/api/i2pcontrol&lt;br /&gt;
https://geti2p.net/en/docs/api/i2pcontrol&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Docs-exporter&amp;diff=147</id>
		<title>Docs-exporter</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Docs-exporter&amp;diff=147"/>
		<updated>2020-02-05T17:54:09Z</updated>

		<summary type="html">&lt;p&gt;Idk: Created page with &amp;quot;== Documents-to-Wiki Exportation ==  This is a quick-and-dirty script which I am using to convert the documentation pages from the main I2P web site hosted at https://geti2p.n...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Documents-to-Wiki Exportation ==&lt;br /&gt;
&lt;br /&gt;
This is a quick-and-dirty script which I am using to convert the documentation pages from the main I2P web site hosted at https://geti2p.net and http://i2p-projekt.i2p into wiki format, so that they can be put on the wiki. What it does it takes a list of urls(a file it expects called &amp;quot;urls.list&amp;quot;), loops over them, looks for sections our website template creates and removes them, tidies the result, then turns what&#039;s left into a wiki page. When using this, take care to preserve the same directory structure as on the web site, to ensure that links stay alive by being in the expected place and to preserve our ability to provide localized documentation via this wiki(However, since I am primarily an English speaker, I have chosen to start by exporting English documentation as seen in the example urls.list). So for example, when exporting the SAMv3 documentation, don&#039;t use: &amp;lt;nowiki&amp;gt;http://wiki.i2p-projekt.i2p/wiki/index.php/SAMv3&amp;lt;/nowiki&amp;gt;, use &amp;lt;nowiki&amp;gt;http://wiki.i2p-projekt.i2p/wiki/index.php/En/docs/api/samv3&amp;lt;/nowiki&amp;gt;. If you&#039;re careful, most of the website docs can be exported to the wiki automatically.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#! /usr/bin/env sh&lt;br /&gt;
&lt;br /&gt;
for x in $(cat urls.list); do&lt;br /&gt;
    filename=$(basename $(echo $x | sed &#039;s|https://||g&#039;))&lt;br /&gt;
    if [ ! -f &amp;quot;wiki/$filename.md&amp;quot; ]; then&lt;br /&gt;
        wget &amp;quot;$x&amp;quot; -O &amp;quot;wiki/$filename-pre.html&amp;quot;&amp;lt;&amp;gt;&lt;br /&gt;
        grep -A 10000 &#039;&amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;&#039; &amp;quot;wiki/$filename-pre.html&amp;quot; | \&lt;br /&gt;
            grep -B 10000 &#039;&amp;lt;div id=&amp;quot;footermenu&amp;quot; class=&amp;quot;first&amp;quot;&amp;gt;&#039; | \&lt;br /&gt;
            sed &#039;s|&amp;lt;div id=&amp;quot;footermenu&amp;quot; class=&amp;quot;first&amp;quot;&amp;gt;||g&#039; | \&lt;br /&gt;
            tidy --as-xhtml --drop-empty-elements no --input-xml --tidy-mark no -indent --indent-spaces 4 -wrap 0 --new-blocklevel-tags article,header,footer --new-inline-tags video,audio,canvas,ruby,rt,rp --break-before-br yes --sort-attributes alpha --vertical-space yes | \&lt;br /&gt;
            tee &amp;quot;wiki/$filename.html&amp;quot;&lt;br /&gt;
        pandoc &amp;quot;wiki/$filename.html&amp;quot; -o &amp;quot;wiki/$filename.wiki&amp;quot;&lt;br /&gt;
        sed -i &#039;1d&#039; &amp;quot;wiki/$filename.wiki&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is an example urls.list for export.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;https://geti2p.net/en/about/glossary&lt;br /&gt;
https://geti2p.net/en/about/media&lt;br /&gt;
https://geti2p.net/en/about/performance&lt;br /&gt;
https://geti2p.net/en/comparison/tor&lt;br /&gt;
https://geti2p.net/en/comparison/freenet&lt;br /&gt;
https://geti2p.net/en/comparison/other-networks&lt;br /&gt;
https://geti2p.net/en/docs/how/intro&lt;br /&gt;
https://geti2p.net/en/docs/how/tech-intro&lt;br /&gt;
https://geti2p.net/en/docs/how/threat-model&lt;br /&gt;
https://geti2p.net/en/docs/how/garlic-routing&lt;br /&gt;
https://geti2p.net/en/docs/how/network-database&lt;br /&gt;
https://geti2p.net/en/docs/how/tunnel-routing&lt;br /&gt;
https://geti2p.net/en/docs/how/peer-selection&lt;br /&gt;
https://geti2p.net/en/docs/how/cryptography&lt;br /&gt;
https://geti2p.net/en/docs/how/elgamal-aes&lt;br /&gt;
https://geti2p.net/en/docs/api/i2ptunnel&lt;br /&gt;
https://geti2p.net/en/docs/api/socks&lt;br /&gt;
https://geti2p.net/en/docs/api/samv3&lt;br /&gt;
https://geti2p.net/en/docs/api/bob&lt;br /&gt;
https://geti2p.net/en/docs/api/streaming&lt;br /&gt;
https://geti2p.net/en/docs/api/datagrams&lt;br /&gt;
https://geti2p.net/en/docs/api/i2pcontrol&lt;br /&gt;
https://geti2p.net/en/docs/applications/supported&lt;br /&gt;
https://geti2p.net/en/docs/applications/bittorrent&lt;br /&gt;
https://geti2p.net/en/docs/protocol&lt;br /&gt;
https://geti2p.net/en/docs/protocol/i2cp&lt;br /&gt;
https://geti2p.net/en/docs/protocol/i2np&lt;br /&gt;
https://geti2p.net/en/docs/transport&lt;br /&gt;
https://geti2p.net/en/docs/transport/ntcp&lt;br /&gt;
https://geti2p.net/en/docs/transport/ssu&lt;br /&gt;
https://geti2p.net/en/docs/tunnels/implementation&lt;br /&gt;
https://geti2p.net/en/docs/tunnels/unidirectional&lt;br /&gt;
https://geti2p.net/en/docs/tunnels/old-implementation&lt;br /&gt;
https://geti2p.net/en/docs/naming&lt;br /&gt;
https://geti2p.net/en/docs/plugins&lt;br /&gt;
https://geti2p.net/en/docs/reseed&lt;br /&gt;
https://geti2p.net/en/docs/api/i2ptunnel&lt;br /&gt;
https://geti2p.net/en/docs/api/socks&lt;br /&gt;
https://geti2p.net/en/docs/api/samv3&lt;br /&gt;
https://geti2p.net/en/docs/api/bob&lt;br /&gt;
https://geti2p.net/en/docs/api/streaming&lt;br /&gt;
https://geti2p.net/en/docs/api/datagrams&lt;br /&gt;
https://geti2p.net/en/docs/api/i2pcontrol&lt;br /&gt;
https://geti2p.net/en/docs/api/i2pcontrol&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Main_Page&amp;diff=141</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Main_Page&amp;diff=141"/>
		<updated>2020-02-04T15:11:16Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Welcome to the I2P wiki&lt;br /&gt;
&lt;br /&gt;
this should be a central instance for user2user help inside the I2P network.&lt;br /&gt;
Feel free to create a login and contribute content about the I2P network.&lt;br /&gt;
&lt;br /&gt;
Reminder: illegal content is prohibited and will be removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|width=&amp;quot;40%&amp;quot; valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
&amp;lt;!-- LEFT --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== General information ==&lt;br /&gt;
* [[HowTo]]&lt;br /&gt;
* [[Floodfill]]&lt;br /&gt;
* [[EepsiteHosting]]&lt;br /&gt;
* [[CrimeProblems]]&lt;br /&gt;
* [[I2P and hardware]]&lt;br /&gt;
* [[I2pSlogans]]&lt;br /&gt;
* [[Outdated]]&lt;br /&gt;
}}&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== Projects ==&lt;br /&gt;
* [[I2P Android]]&lt;br /&gt;
* [[I2PSnark]]&lt;br /&gt;
* [[En/docs/api/samv3|SAMv3]]&lt;br /&gt;
* [[Plugins]]&lt;br /&gt;
* [[I2P-Messenger]]&lt;br /&gt;
* [[EepGet]]&lt;br /&gt;
* [[MuWire]]&lt;br /&gt;
* [[Syndie]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;30%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;!-- Center --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box3|1=&lt;br /&gt;
== External ==&lt;br /&gt;
* [[BiglyBT]]&lt;br /&gt;
* [[I2Pd]]&lt;br /&gt;
* [[I2PSpeed]]&lt;br /&gt;
* [[I2P+]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box3|1=&lt;br /&gt;
== Content in I2P ==&lt;br /&gt;
* [[Eepsite/Services]]&lt;br /&gt;
* [[Filesharing and I2P]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box3|1=&lt;br /&gt;
== Other projects ==&lt;br /&gt;
* [[Freenet]]&lt;br /&gt;
* [[Clearnet]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;30%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;!-- RIGHT --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== Services ==&lt;br /&gt;
* [[IRC2P]]&lt;br /&gt;
* [[Monotone]]&lt;br /&gt;
* [[Wiki]]&lt;br /&gt;
* [[I2P Forum]]&lt;br /&gt;
* [[trac]]&lt;br /&gt;
* [[webpage]]&lt;br /&gt;
* [[reseed]]&lt;br /&gt;
* [[Git]]&lt;br /&gt;
* [[DNS registration]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== Events ==&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Main_Page&amp;diff=140</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Main_Page&amp;diff=140"/>
		<updated>2020-02-04T15:09:37Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Welcome to the I2P wiki&lt;br /&gt;
&lt;br /&gt;
this should be a central instance for user2user help inside the I2P network.&lt;br /&gt;
Feel free to create a login and contribute content about the I2P network.&lt;br /&gt;
&lt;br /&gt;
Reminder: illegal content is prohibited and will be removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|width=&amp;quot;40%&amp;quot; valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
&amp;lt;!-- LEFT --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== General information ==&lt;br /&gt;
* [[HowTo]]&lt;br /&gt;
* [[Floodfill]]&lt;br /&gt;
* [[EepsiteHosting]]&lt;br /&gt;
* [[CrimeProblems]]&lt;br /&gt;
* [[I2P and hardware]]&lt;br /&gt;
* [[I2pSlogans]]&lt;br /&gt;
* [[Outdated]]&lt;br /&gt;
}}&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== Projects ==&lt;br /&gt;
* [[I2P Android]]&lt;br /&gt;
* [[I2PSnark]]&lt;br /&gt;
* [[En/docs/api/samv3]]&lt;br /&gt;
* [[Plugins]]&lt;br /&gt;
* [[I2P-Messenger]]&lt;br /&gt;
* [[EepGet]]&lt;br /&gt;
* [[MuWire]]&lt;br /&gt;
* [[Syndie]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;30%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;!-- Center --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box3|1=&lt;br /&gt;
== External ==&lt;br /&gt;
* [[BiglyBT]]&lt;br /&gt;
* [[I2Pd]]&lt;br /&gt;
* [[I2PSpeed]]&lt;br /&gt;
* [[I2P+]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box3|1=&lt;br /&gt;
== Content in I2P ==&lt;br /&gt;
* [[Eepsite/Services]]&lt;br /&gt;
* [[Filesharing and I2P]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box3|1=&lt;br /&gt;
== Other projects ==&lt;br /&gt;
* [[Freenet]]&lt;br /&gt;
* [[Clearnet]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;30%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;!-- RIGHT --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== Services ==&lt;br /&gt;
* [[IRC2P]]&lt;br /&gt;
* [[Monotone]]&lt;br /&gt;
* [[Wiki]]&lt;br /&gt;
* [[I2P Forum]]&lt;br /&gt;
* [[trac]]&lt;br /&gt;
* [[webpage]]&lt;br /&gt;
* [[reseed]]&lt;br /&gt;
* [[Git]]&lt;br /&gt;
* [[DNS registration]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== Events ==&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Samv3&amp;diff=139</id>
		<title>Samv3</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Samv3&amp;diff=139"/>
		<updated>2020-02-04T15:08:30Z</updated>

		<summary type="html">&lt;p&gt;Idk: Replaced content with &amp;quot;Moved Here&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[En/docs/api/samv3|Moved Here]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/applications/bittorrent&amp;diff=138</id>
		<title>En/docs/applications/bittorrent</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/applications/bittorrent&amp;diff=138"/>
		<updated>2020-02-04T15:01:53Z</updated>

		<summary type="html">&lt;p&gt;Idk: Created page with &amp;quot; &amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;  = Bittorrent over I2P =   &amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;  This page was last updated in January 2017 and...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Bittorrent over I2P =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page was last updated in January 2017 and is accurate for router version 0.9.28.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
There are several bittorrent clients and trackers on I2P. As I2P addressing uses a Destination instead of an IP and port, minor changes are required to tracker and client software for operation on I2P. These changes are specified below. Note carefully the guidelines for compatibility with older I2P clients and trackers.&lt;br /&gt;
&lt;br /&gt;
This page specifies protocol details common to all clients and trackers. Specific clients and trackers may implement other unique features or protocols.&lt;br /&gt;
&lt;br /&gt;
We welcome additional ports of client and tracker software to I2P.&lt;br /&gt;
&lt;br /&gt;
== Announces ==&lt;br /&gt;
&lt;br /&gt;
Clients generally include a fake port=6881 parameter in the announce, for compatibility with older trackers. Trackers may ignore the port parameter, and should not require it.&lt;br /&gt;
&lt;br /&gt;
The ip parameter is the base 64 of the client&#039;s [[en/docs/spec/common-structures#struct_Destination|Destination]], using the I2P Base 64 alphabet [A-Z][a-z][0-9]-~. [[en/docs/spec/common-structures#struct_Destination|Destinations]] are 387+ bytes, so the Base 64 is 516+ bytes. Clients generally append &amp;amp;quot;.i2p&amp;amp;quot; to the Base 64 Destination for compatibility with older trackers. Trackers should not require an appended &amp;amp;quot;.i2p&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Other parameters are the same as in standard bittorrent.&lt;br /&gt;
&lt;br /&gt;
Current Destinations for clients are 387 or more bytes (516 or more in Base 64 encoding). A reasonable maximum to assume, for now, is 475 bytes. As the tracker must decode the Base64 to deliver compact responses (see below), the tracker should probably decode and reject bad Base64 when announced.&lt;br /&gt;
&lt;br /&gt;
The default response type is non-compact. Clients may request a compact response with the parameter compact=1. A tracker may, but is not required to, return a compact response when requested.&lt;br /&gt;
&lt;br /&gt;
Developers of new I2P clients are strongly encouraged to implemenent announces over their own tunnel rather than the HTTP client proxy at port 4444. Doing so is both more efficient and it allows destination enforcement by the tracker (see below).&lt;br /&gt;
&lt;br /&gt;
There are no known I2P clients or trackers that currently support UDP announce/responses.&lt;br /&gt;
&lt;br /&gt;
== Non-Compact Tracker Responses ==&lt;br /&gt;
&lt;br /&gt;
The non-compact response is just as in standard bittorrent, with an I2P &amp;amp;quot;ip&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Trackers generally include a fake port key, or use the port from the announce, for compatibility with older clients. Clients must ignore the port parameter, and should not require it.&lt;br /&gt;
&lt;br /&gt;
The value of the ip key is the base 64 of the client&#039;s [[en/docs/spec/common-structures#struct_Destination|Destination]], as described above. Trackers generally append &amp;amp;quot;.i2p&amp;amp;quot; to the Base 64 Destination if it wasn&#039;t in the announce ip, for compatibility with older clients. Clients should not require an appended &amp;amp;quot;.i2p&amp;amp;quot; in the responses.&lt;br /&gt;
&lt;br /&gt;
Other response keys and values are the same as in standard bittorrent.&lt;br /&gt;
&lt;br /&gt;
== Compact Tracker Responses ==&lt;br /&gt;
&lt;br /&gt;
In the compact response, the value of the &amp;amp;quot;peers&amp;amp;quot; dictionary key is a single byte string, whose length is a multiple of 32 bytes. This string contains the concatenated [[en/docs/spec/common-structures#type_Hash|32-byte SHA-256 Hashes]] of the binary [[en/docs/spec/common-structures#struct_Destination|Destinations]] of the peers. This hash must be computed by the tracker, unless destination enforcement (see below) is used, in which case the hash delivered in the X-I2P-DestHash or X-I2P-DestB32 HTTP headers may be converted to binary and stored. The peers key may be absent, or the peers value may be zero-length.&lt;br /&gt;
&lt;br /&gt;
While compact response support is optional for both clients and trackers, it is highly recommended as it reduces the nominal response size by over 90%.&lt;br /&gt;
&lt;br /&gt;
== Destination Enforcement ==&lt;br /&gt;
&lt;br /&gt;
Some, but not all, I2P bittorrent clients announce over their own tunnels. Trackers may choose to prevent spoofing by requiring this, and verifying the client&#039;s [[en/docs/spec/common-structures#struct_Destination|Destination]] using HTTP headers added by the I2PTunnel HTTP Server tunnel. The headers are X-I2P-DestHash, X-I2P-DestB64, and X-I2P-DestB32, which are different formats for the same information. These headers cannot be spoofed by the client. A tracker enforcing destinations need not require the ip announce parameter at all.&lt;br /&gt;
&lt;br /&gt;
As several clients use the HTTP proxy instead of their own tunnel for announces, destination enforcement will prevent usage by those clients unless or until those clients are converted to announcing over their own tunnel.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as the network grows, so will the amount of maliciousness, so we expect that all trackers will eventually enforce destinations. Both tracker and client developers should anticipate it.&lt;br /&gt;
&lt;br /&gt;
== Announce Host Names ==&lt;br /&gt;
&lt;br /&gt;
Announce URL host names in torrent files generally follow the [[en/docs/naming|I2P naming standards]]. In addition to host names from address books and &amp;amp;quot;.b32.i2p&amp;amp;quot; Base 32 hostnames, the full Base 64 Destination (with [or without?] &amp;amp;quot;.i2p&amp;amp;quot; appended) should be supported. Non-open trackers should recognize their own host name in any of these formats.&lt;br /&gt;
&lt;br /&gt;
To preserve anonymity, clients should generally ignore non-I2P announce URLs in torrent files.&lt;br /&gt;
&lt;br /&gt;
== Client Connections ==&lt;br /&gt;
&lt;br /&gt;
Client-to-client connections use the standard protocol over TCP. There are no known I2P clients that currently support uTP communication.&lt;br /&gt;
&lt;br /&gt;
I2P uses 387+ byte [[en/docs/spec/common-structures#struct_Destination|Destinations]] for addresses, as explained above.&lt;br /&gt;
&lt;br /&gt;
If the client has only the hash of the destination (such as from a compact response or PEX), it must perform a lookup by encoding it with Base 32, appending &amp;amp;quot;.b32.i2p&amp;amp;quot;, and querying the Naming Service, which will return the full Destination if available.&lt;br /&gt;
&lt;br /&gt;
If the client has a peer&#039;s full Destination it received in a non-compact response, it should use it directly in the connection setup. Do not convert a Destination back to a Base 32 hash for lookup, this is quite inefficient.&lt;br /&gt;
&lt;br /&gt;
== Cross-Network Prevention ==&lt;br /&gt;
&lt;br /&gt;
To preserve anonymity, I2P bittorrent clients generally do not support non-I2P announces or peer connections. I2P HTTP outproxies often block announces. There are no known SOCKS outproxies supporting bittorrent traffic.&lt;br /&gt;
&lt;br /&gt;
To prevent usage by non-I2P clients via an HTTP inproxy, I2P trackers often block accesses or announces that contain an X-Forwarded-For HTTP header. Trackers should reject standard network announces with IPv4 or IPv6 IPs, and not deliver them in responses.&lt;br /&gt;
&lt;br /&gt;
== PEX ==&lt;br /&gt;
&lt;br /&gt;
I2P PEX is based on ut_pex. As there does not appear to be a formal specification of ut_pex available, it may be necessary to review the libtorrent source for assistance. It is an extension message, identified as &amp;amp;quot;i2p_pex&amp;amp;quot; in [http://www.bittorrent.org/beps/bep_0010.html the extension handshake]. It contains a bencoded dictionary with up to 3 keys, &amp;amp;quot;added&amp;amp;quot;, &amp;amp;quot;added.f&amp;amp;quot;, and &amp;amp;quot;dropped&amp;amp;quot;. The added and dropped values are each a single byte string, whose length is a multiple of 32 bytes. These byte strings are the concatenated SHA-256 Hashes of the binary [[en/docs/spec/common-structures#struct_Destination|Destinations]] of the peers. This is the same format as the peers dictionary value in the i2p compact response format specified above. The added.f value, if present, is the same as in ut_pex.&lt;br /&gt;
&lt;br /&gt;
== DHT ==&lt;br /&gt;
&lt;br /&gt;
DHT support is included in the i2psnark client as of version 0.9.2. Preliminary differences from [http://www.bittorrent.org/beps/bep_0005.html BEP 5] are described below, and are subject to change. Contact the I2P developers if you wish to develop a client supporting DHT.&lt;br /&gt;
&lt;br /&gt;
Unlike standard DHT, I2P DHT does not use a bit in the options handshake, or the PORT message. It is advertised with an extension message, identified as &amp;amp;quot;i2p_dht&amp;amp;quot; in [http://www.bittorrent.org/beps/bep_0010.html the extension handshake]. It contains a bencoded dictionary with two keys, &amp;amp;quot;port&amp;amp;quot; and &amp;amp;quot;rport&amp;amp;quot;, both integers.&lt;br /&gt;
&lt;br /&gt;
The UDP (datagram) port listed in the compact node info is used to receive repliable (signed) datagrams. This is used for queries, except for announces. We call this the &amp;amp;quot;query port&amp;amp;quot;. This is the &amp;amp;quot;port&amp;amp;quot; value from the extension message. Queries use [[en/docs/protocol/i2cp|I2CP]] protocol number 17.&lt;br /&gt;
&lt;br /&gt;
In addition to that UDP port, we use a second datagram port equal to the query port + 1. This is used to receive unsigned (raw) datagrams for replies, errors, and announces. This port provides increased efficiency since replies contain tokens sent in the query, and need not be signed. We call this the &amp;amp;quot;response port&amp;amp;quot;. This is the &amp;amp;quot;rport&amp;amp;quot; value from the extension message. It must be 1 + the query port. Responses and announces use [[en/docs/protocol/i2cp|I2CP]] protocol number 18.&lt;br /&gt;
&lt;br /&gt;
Compact peer info is 32 bytes (32 byte SHA256 Hash) instead of 4 byte IP + 2 byte port. There is no peer port. In a response, the &amp;amp;quot;values&amp;amp;quot; key is a list of strings, each containing a single compact peer info.&lt;br /&gt;
&lt;br /&gt;
Compact node info is 54 bytes (20 byte SHA1 Hash + 32 byte SHA256 Hash + 2 byte port) instead of 20 byte SHA1 Hash + 4 byte IP + 2 byte port. In a response, the &amp;amp;quot;nodes&amp;amp;quot; key is a single byte string with concatenated compact node info.&lt;br /&gt;
&lt;br /&gt;
Secure node ID requirement: To make various DHT attacks more difficult, the first 4 bytes of the Node ID must match the first 4 bytes of the destination Hash, and the next two bytes of the Node ID must match the next two bytes of the destination hash exclusive-ORed with the port.&lt;br /&gt;
&lt;br /&gt;
In a torrent file, the trackerless torrent dictionary &amp;amp;quot;nodes&amp;amp;quot; key is TBD. It could be a list of 32 byte binary strings (SHA256 Hashes) instead of a list of lists containing a host string and a port integer. Alternatives: A single byte string with concatenated hashes, or a list of strings alone.&lt;br /&gt;
&lt;br /&gt;
== Datagram (UDP) Trackers ==&lt;br /&gt;
&lt;br /&gt;
UDP tracker support in clients and trackers is not yet available. Preliminary differences from [http://www.bittorrent.org/beps/bep_0015.html BEP 15] are described below, and are subject to change. Contact the I2P developers if you wish to develop a client or tracker supporting datagram announces.&lt;br /&gt;
&lt;br /&gt;
A UDP tracker listens on two ports. The &amp;amp;quot;query port&amp;amp;quot; is the advertised port, and is used to receive repliable (signed) datagrams, for the connect request only. The &amp;amp;quot;response port&amp;amp;quot; is used to receive unsigned (raw) datagrams, and is the source port for all replies. The response port is arbitrary. A client sends and receives on a single port only. It receives only unsigned (raw) datagrams. Raw datagrams provides increased efficiency for replies since they contain tokens sent in the query, and need not be signed.&lt;br /&gt;
&lt;br /&gt;
In the announce request, the 4-byte IP is replaced by a 32-byte hash, and the port is still present, although it may be ignored by the tracker. In the announce response, each 4-byte IP and 2-byte port is replaced by a 32-byte hash (compact peer info), and no port is present. The client sends the announce request and scrape request to the source port in the announce response packet. The connect request, connect response, scrape request, scrape response, and error response are the same as in BEP 15.&lt;br /&gt;
&lt;br /&gt;
Source addresses in I2P cannot be spoofed, so it is possible to use a simplified protocol with 2 packets instead of 4, omitting the connect request and response. In this case, the announce request would be a repliable datagram sent to the tracker&#039;s query port, and the tracker would not require a response port. While this is more efficient, it would be more difficult to modify an existing tracker to support this mode. The URL for the 4-packet-mode tracker would use standard &amp;amp;quot;udp://&amp;amp;quot; prefix. The URL for a modified 2-packet-mode tracker would require a different prefix if both modes are supported in I2P.&lt;br /&gt;
&lt;br /&gt;
== Additional Information ==&lt;br /&gt;
&lt;br /&gt;
* I2P bittorrent standards are generally discussed on [http://zzz.i2p/ zzz.i2p].&lt;br /&gt;
* A chart of current tracker software capabilities is [http://zzz.i2p/files/trackers.html also available there].&lt;br /&gt;
* The [http://forum.i2p.xyz/viewtopic.php?t=2068 I2P bittorrent FAQ]&lt;br /&gt;
* [http://zzz.i2p/topics/812 DHT on I2P discussion]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/protocol/i2np&amp;diff=137</id>
		<title>En/docs/protocol/i2np</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/protocol/i2np&amp;diff=137"/>
		<updated>2020-02-04T14:59:50Z</updated>

		<summary type="html">&lt;p&gt;Idk: Created page with &amp;quot; &amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;  = I2P Network Protocol (I2NP) =   &amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;  This page was last updated in October...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= I2P Network Protocol (I2NP) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page was last updated in October 2018 and is accurate for router version 0.9.37.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The I2P Network Protocol (I2NP), which is sandwiched between I2CP and the various I2P transport protocols, manages the routing and mixing of messages between routers, as well as the selection of what transports to use when communicating with a peer for which there are multiple common transports supported.&lt;br /&gt;
&lt;br /&gt;
=== I2NP Definition ===&lt;br /&gt;
&lt;br /&gt;
I2NP (I2P Network Protocol) messages can be used for one-hop, router-to-router, point-to-point messages. By encrypting and wrapping messages in other messages, they can be sent in a secure way through multiple hops to the ultimate destination. Priority is only used locally at the origin, i.e. when queuing for outbound delivery.&lt;br /&gt;
&lt;br /&gt;
The priorities listed below may not be current and are subject to change. See the [http://echelon.i2p/javadoc/net/i2p/router/OutNetMessage.html OutNetMessage Javadocs] for the current priority settings. Priority queueing implementation may vary.&lt;br /&gt;
&lt;br /&gt;
=== Message Format ===&lt;br /&gt;
&lt;br /&gt;
The following table specifies the traditional 16-byte header used in NTCP. The SSU and NTCP2 transports use modified headers.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Field&lt;br /&gt;
! Bytes&lt;br /&gt;
|-&lt;br /&gt;
| Type&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Unique ID&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Expiration&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Payload Length&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Checksum&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| Payload&lt;br /&gt;
| 0 - 61.2KB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
While the maximum payload size is nominally 64KB, the size is further constrained by the method of fragmenting I2NP messages into multiple 1KB tunnel messages as described on [[en/docs/tunnels/implementation|the tunnel implementation page]]. The maximum number of fragments is 64, and the message may not be perfectly aligned, So the message must nominally fit in 63 fragments.&lt;br /&gt;
&lt;br /&gt;
The maximum size of an initial fragment is 956 bytes (assuming TUNNEL delivery mode); the maximum size of a follow-on fragment is 996 bytes. Therefore the maximum size is approximately 956 + (62 * 996) = 62708 bytes, or 61.2 KB.&lt;br /&gt;
&lt;br /&gt;
In addition, the transports may have additional restrictions. The NTCP limit is 16KB - 6 = 16378 bytes. The SSU limit is approximately 32 KB. The NTCP2 limit is approximately 64KB - 20 = 65516 bytes, which is higher than what a tunnel can support.&lt;br /&gt;
&lt;br /&gt;
Note that these are not the limits for datagrams that the client sees, as the router may bundle a reply leaseset and/or session tags together with the client message in a garlic message. The leaseset and tags together may add about 5.5KB. Therefore the current datagram limit is about 10KB. This limit will be increased in a future release.&lt;br /&gt;
&lt;br /&gt;
=== Message Types ===&lt;br /&gt;
&lt;br /&gt;
Higher-numbered priority is higher priority. The majority of traffic is TunnelDataMessages (priority 400), so anything above 400 is essentially high priority, and anything below is low priority. Note also that many of the messages are generally routed through exploratory tunnels, not client tunnels, and therefore may not be in the same queue unless the first hops happen to be on the same peer.&lt;br /&gt;
&lt;br /&gt;
Also, not all message types are sent unencrypted. For example, when testing a tunnel, the router wraps a DeliveryStatusMessage, which is wrapped in a GarlicMessage, which is wrapped in a DataMessage.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Message&lt;br /&gt;
!align=&amp;quot;right&amp;quot;| Type&lt;br /&gt;
! Payload Length&lt;br /&gt;
!align=&amp;quot;right&amp;quot;| Priority&lt;br /&gt;
! Comments&lt;br /&gt;
|-&lt;br /&gt;
| DatabaseLookupMessage&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 2&lt;br /&gt;
|  &lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 500&lt;br /&gt;
| May vary&lt;br /&gt;
|-&lt;br /&gt;
| DatabaseSearchReplyMessage&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 3&lt;br /&gt;
| Typ. 161&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 300&lt;br /&gt;
| Size is 65 + 32*(number of hashes) where typically, the hashes for three floodfill routers are returned.&lt;br /&gt;
|-&lt;br /&gt;
| DatabaseStoreMessage&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 1&lt;br /&gt;
| Varies&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 460&lt;br /&gt;
| Priority may vary. Size is 898 bytes for a typical 2-lease leaseSet. RouterInfo structures are compressed, and size varies; however there is a continuing effort to reduce the amount of data published in a RouterInfo as we approach release 1.0.&lt;br /&gt;
|-&lt;br /&gt;
| DataMessage&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 20&lt;br /&gt;
| 4 - 62080&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 425&lt;br /&gt;
| Priority may vary on a per-destination basis&lt;br /&gt;
|-&lt;br /&gt;
| DeliveryStatusMessage&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 10&lt;br /&gt;
| 12&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|  &lt;br /&gt;
| Used for message replies, and for testing tunnels - generally wrapped in a GarlicMessage&lt;br /&gt;
|-&lt;br /&gt;
| [[en/docs/how/tech-intro#op.garlic|GarlicMessage]]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 11&lt;br /&gt;
|  &lt;br /&gt;
|align=&amp;quot;right&amp;quot;|  &lt;br /&gt;
| Generally wrapped in a DataMessage - but when unwrapped, given a priority of 100 by the forwarding router&lt;br /&gt;
|-&lt;br /&gt;
| [[en/docs/spec/tunnel-creation#tunnelCreate.requestRecord|TunnelBuildMessage]]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 21&lt;br /&gt;
| 4224&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 500&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[en/docs/spec/tunnel-creation#tunnelCreate.replyRecord|TunnelBuildReplyMessage]]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 22&lt;br /&gt;
| 4224&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 300&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| TunnelDataMessage&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 18&lt;br /&gt;
| 1028&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 400&lt;br /&gt;
| The most common message. Priority for tunnel participants, outbound endpoints, and inbound gateways was reduced to 200 as of release 0.6.1.33. Outbound gateway messages (i.e. those originated locally) remains at 400.&lt;br /&gt;
|-&lt;br /&gt;
| TunnelGatewayMessage&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 19&lt;br /&gt;
|  &lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 300/400&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| VariableTunnelBuildMessage&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 23&lt;br /&gt;
| 1057 - 4225&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 500&lt;br /&gt;
| Shorter TunnelBuildMessage as of 0.7.12&lt;br /&gt;
|-&lt;br /&gt;
| VariableTunnelBuildReplyMessage&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 24&lt;br /&gt;
| 1057 - 4225&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 300&lt;br /&gt;
| Shorter TunnelBuildReplyMessage as of 0.7.12&lt;br /&gt;
|-&lt;br /&gt;
| Others listed in [[_static/pdf/I2NP_spec.pdf|2003 Spec]]&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| 0,4-9,12&lt;br /&gt;
|  &lt;br /&gt;
|align=&amp;quot;right&amp;quot;|  &lt;br /&gt;
| Obsolete, Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Full Protocol Specification ===&lt;br /&gt;
&lt;br /&gt;
[[en/docs/spec/i2np|On the I2NP Specification page]]. See also the [[en/docs/spec/common-structures|Common Data Structure Specification page]].&lt;br /&gt;
&lt;br /&gt;
=== Future Work ===&lt;br /&gt;
&lt;br /&gt;
It isn&#039;t clear whether the current priority scheme is generally effective, and whether the priorities for various messages should be adjusted further. This is a topic for further research, analysis and testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/api/socks&amp;diff=136</id>
		<title>En/docs/api/socks</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/api/socks&amp;diff=136"/>
		<updated>2020-02-04T14:56:53Z</updated>

		<summary type="html">&lt;p&gt;Idk: Created page with &amp;quot; &amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;  = SOCKS =   &amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;  == SOCKS and SOCKS proxies ==  The SOCKS proxy is working as of release 0.7.1. S...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SOCKS =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SOCKS and SOCKS proxies ==&lt;br /&gt;
&lt;br /&gt;
The SOCKS proxy is working as of release 0.7.1. SOCKS 4/4a/5 are supported. Enable SOCKS by creating a SOCKS client tunnel in i2ptunnel. Both shared-clients and non-shared are supported. There is no SOCKS outproxy so it is of limited use.&lt;br /&gt;
&lt;br /&gt;
As it says on the [[en/faq#socks|FAQ]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Many applications leak sensitive&lt;br /&gt;
information that could identify you on the Internet. I2P only filters&lt;br /&gt;
connection data, but if the program you intend to run sends this&lt;br /&gt;
information as content, I2P has no way to protect your anonymity.  For&lt;br /&gt;
example, some mail applications will send the IP address of the machine&lt;br /&gt;
they are running on to a mail server. There is no way for I2P to filter&lt;br /&gt;
this, thus using I2P to &#039;socksify&#039; existing applications is possible, but&lt;br /&gt;
extremely dangerous.&amp;lt;/pre&amp;gt;&lt;br /&gt;
And quoting from a 2005 email:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;... there is a reason why human and&lt;br /&gt;
others have both built and abandoned the SOCKS proxies.  Forwarding&lt;br /&gt;
arbitrary traffic is just plain unsafe, and it behooves us as&lt;br /&gt;
developers of anonymity and security software to have the safety of&lt;br /&gt;
our end users foremost in our minds.&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hoping that we can simply strap an arbitrary client on top of I2P without auditing both its behavior and its exposed protocols for security and anonymity is naive. Pretty much *every* application and protocol violates anonymity, unless it was designed for it specifically, and even then, most of those do too. That&#039;s the reality. End users are better served with systems designed for anonymity and security. Modifying existing systems to work in anonymous environments is no small feat, orders of magnitude more work that simply using the existing I2P APIs.&lt;br /&gt;
&lt;br /&gt;
The SOCKS proxy supports standard addressbook names, but not Base64 destinations. Base32 hashes should work as of release 0.7. It supports outgoing connections only, i.e. an I2PTunnel Client. UDP support is stubbed out but not working yet. Outproxy selection by port number is stubbed out.&lt;br /&gt;
&lt;br /&gt;
=== See Also ===&lt;br /&gt;
&lt;br /&gt;
* The notes for [[en/meetings/81|Meeting 81]] and [[en/meetings/82|Meeting 82]] in March 2004.&lt;br /&gt;
* [http://www.abenteuerland.at/onioncat/ Onioncat]&lt;br /&gt;
* [http://zzz.i2p/ zzz.i2p]&lt;br /&gt;
&lt;br /&gt;
=== If You Do Get Something Working ===&lt;br /&gt;
&lt;br /&gt;
Please let us know. And please provide substantial warnings about the risks of socks proxies.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/spec/datagrams&amp;diff=135</id>
		<title>En/docs/spec/datagrams</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/spec/datagrams&amp;diff=135"/>
		<updated>2020-02-04T14:55:26Z</updated>

		<summary type="html">&lt;p&gt;Idk: Created page with &amp;quot; &amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;  = Datagrams =   &amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;  This page was last updated in February 2019 and is accur...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Datagrams =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page was last updated in February 2019 and is accurate for router version 0.9.39.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
== Datagram Overview ==&lt;br /&gt;
&lt;br /&gt;
Datagrams build upon the base [[en/docs/protocol/i2cp|I2CP]] to provide authenticated and repliable messages in a standard format. This lets applications reliably read the &amp;amp;quot;from&amp;amp;quot; address out of a datagram and know that the address really sent the message. This is necessary for some applications since the base I2P message is completely raw - it has no &amp;amp;quot;from&amp;amp;quot; address (unlike IP packets). In addition, the message and sender are authenticated by signing the payload.&lt;br /&gt;
&lt;br /&gt;
Datagrams, like [[en/docs/api/streaming|streaming library packets]], are an application-level construct. These protocols are independent of the low-level [[en/docs/transport|transports]]; the protocols are converted to I2NP messages by the router, and either protocol may be carried by either transport.&lt;br /&gt;
&lt;br /&gt;
== Application Guide ==&lt;br /&gt;
&lt;br /&gt;
Applications written in Java may use the [http://echelon.i2p/javadoc/net/i2p/client/datagram/package-summary.html datagram API], while applications in other languages can use [[en/docs/api/sam|SAM]]&#039;s datagram support. There is also limited support in i2ptunnel in the [[en/docs/api/socks|SOCKS proxy]], the &#039;streamr&#039; tunnel types, and udpTunnel classes.&lt;br /&gt;
&lt;br /&gt;
=== Datagram Length ===&lt;br /&gt;
&lt;br /&gt;
The application designer should carefully consider the tradeoff of repliable vs. non-repliable datagrams. Also, the datagram size will affect reliability, due to tunnel fragmentation into 1KB tunnel messages. The more message fragments, the more likely that one of them will be dropped by an intermediate hop. Messages larger than a few KB are not recommended. Over about 10 KB, the delivery probablility drops dramatically. Messages over 16 KB cannot be delivered over NTCP, dropping delivery chances even more.&lt;br /&gt;
&lt;br /&gt;
Also note that the various overheads added by lower layers, in particular asymmetric [[en/docs/how/elgamal-aes|ElGamal/AES]], place a large burden on intermittent messages such as used by a Kademlia-over-UDP application. The implementations are currently tuned for frequent traffic using the streaming library. There are a high number of session tags delivered, and a short session tag lifetime, for example. There are currently no configuration parameters available within I2CP to tune the ElGamal Session Tag parameters.&lt;br /&gt;
&lt;br /&gt;
=== I2CP Protocol Number and Ports ===&lt;br /&gt;
&lt;br /&gt;
The standard I2CP protocol number for datagrams is PROTO_DATAGRAM (17). Applications may or may not choose to set the protocol in the I2CP header. It is not set by default. It must be set to demultiplex datagram and streaming traffic received on the same Destination.&lt;br /&gt;
&lt;br /&gt;
As datagrams are not connection-oriented, the application may require port numbers to correlate datagrams with particular peers or communications sessions, as is traditional with UDP over IP. Applications may add &#039;from&#039; and &#039;to&#039; ports to the I2CP (gzip) header as described in the [[en/docs/protocol/i2cp#format|I2CP page]].&lt;br /&gt;
&lt;br /&gt;
There is no method within the datagram API to specify whether it is non-repliable (raw) or repliable. The application should be designed to expect the appropriate type. The I2CP protocol number or port should be used by the application to indicate datagram type. The I2CP protocol numbers PROTO_DATAGRAM (signed) and PROTO_DATAGRAM_RAW are defined in the [http://echelon.i2p/javadoc/net/i2p/client/I2PSession.html I2PSession API] for this purpose. A common design pattern in client/server datagram applications is to use signed datagrams for a request which includes a nonce, and use a raw datagram for the reply, returning the nonce from the request.&lt;br /&gt;
&lt;br /&gt;
Defaults:&lt;br /&gt;
&lt;br /&gt;
* PROTO_DATAGRAM = 17&lt;br /&gt;
* PROTO_DATAGRAM_RAW = 18&lt;br /&gt;
&lt;br /&gt;
The protocols and ports may be set in I2CP&#039;s [http://echelon.i2p/javadoc/net/i2p/client/I2PSession.html I2PSession API], as implemented in [http://echelon.i2p/javadoc/net/i2p/client/I2PSessionMuxedImpl.html I2PSessionMuxedImpl].&lt;br /&gt;
&lt;br /&gt;
=== Data Integrity ===&lt;br /&gt;
&lt;br /&gt;
Data integrity is assured by the gzip CRC-32 checksum implemented in [[en/docs/protocol/i2cp#format|the I2CP layer]]. There is no checksum field in the datagram protocol.&lt;br /&gt;
&lt;br /&gt;
=== Packet Encapsulation ===&lt;br /&gt;
&lt;br /&gt;
Each datagram is sent through I2P as a single message (or as an individual clove in a [[en/docs/how/garlic-routing|Garlic Message]]). Message encapsulation is implemented in the underlying [[en/docs/protocol/i2cp|I2CP]], [[en/docs/protocol/i2np|I2NP]], and [[en/docs/spec/tunnel-message|tunnel message]] layers. There is no packet delimiter mechanism or length field in the datagram protocol.&lt;br /&gt;
&lt;br /&gt;
== Specification ==&lt;br /&gt;
&lt;br /&gt;
[[en/docs/spec/datagrams|See the Datagrams Specification page.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/api/streaming&amp;diff=134</id>
		<title>En/docs/api/streaming</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/api/streaming&amp;diff=134"/>
		<updated>2020-02-04T14:54:28Z</updated>

		<summary type="html">&lt;p&gt;Idk: Created page with &amp;quot; &amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;  = Streaming Library =   &amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;  This page was last updated in July 2018 and is a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Streaming Library =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page was last updated in July 2018 and is accurate for router version 0.9.36.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The streaming library is technically part of the &amp;amp;quot;application&amp;amp;quot; layer, as it is not a core router function. In practice, however, it provides a vital function for almost all existing I2P applications, by providing a TCP-like streams over I2P, and allowing existing apps to be easily ported to I2P. The other end-to-end transport library for client communication is the [[en/docs/spec/datagrams|datagram library]].&lt;br /&gt;
&lt;br /&gt;
The streaming library is a layer on top of the core [[en/docs/protocol/i2cp|I2CP API]] that allows reliable, in-order, and authenticated streams of messages to operate across an unreliable, unordered, and unauthenticated message layer. Just like the TCP to IP relationship, this streaming functionality has a whole series of tradeoffs and optimizations available, but rather than embed that functionality into the base I2P code, it has been factored off into its own library both to keep the TCP-esque complexities separate and to allow alternative optimized implementations.&lt;br /&gt;
&lt;br /&gt;
In consideration of the relatively high cost of messages, the streaming library&#039;s protocol for scheduling and delivering those messages has been optimized to allow individual messages passed to contain as much information as is available. For instance, a small HTTP transaction proxied through the streaming library can be completed in a single round trip - the first messages bundle a SYN, FIN, and the small HTTP request payload, and the reply bundles the SYN, FIN, ACK, and the HTTP response payload. While an additional ACK must be transmitted to tell the HTTP server that the SYN/FIN/ACK has been received, the local HTTP proxy can often deliver the full response to the browser immediately.&lt;br /&gt;
&lt;br /&gt;
The streaming library bears much resemblance to an abstraction of TCP, with its sliding windows, congestion control algorithms (both slow start and congestion avoidance), and general packet behavior (ACK, SYN, FIN, RST, rto calculation, etc).&lt;br /&gt;
&lt;br /&gt;
The streaming library is a robust library which is optimized for operation over I2P. It has a one-phase setup, and it contains a full windowing implementation.&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
The streaming library API provides a standard socket paradigm to Java applications. The lower-level [[en/docs/protocol/i2cp|I2CP]] API is completely hidden, except that applications may pass [[en/docs/protocol/i2cp#options|I2CP parameters]] through the streaming library, to be interpreted by I2CP.&lt;br /&gt;
&lt;br /&gt;
The standard interface to the streaming lib is for the application to use the [http://echelon.i2p/javadoc/net/i2p/client/streaming/I2PSocketManagerFactory.html I2PSocketManagerFactory] to create an [http://echelon.i2p/javadoc/net/i2p/client/streaming/I2PSocketManager.html I2PSocketManager]. The application then asks the socket manager for an [http://echelon.i2p/javadoc/net/i2p/client/I2PSession.html I2PSession], which will cause a connection to the router via [[en/docs/protocol/i2cp|I2CP]]. The application can then setup connections with an [http://echelon.i2p/javadoc/net/i2p/client/streaming/I2PSocket.html I2PSocket] or receive connections with an [http://echelon.i2p/javadoc/net/i2p/client/streaming/I2PServerSocket.html I2PServerSocket].&lt;br /&gt;
&lt;br /&gt;
Here are the [http://echelon.i2p/javadoc/net/i2p/client/streaming/package-summary.html full streaming library Javadocs].&lt;br /&gt;
&lt;br /&gt;
For a good example of usage, see the i2psnark code.&lt;br /&gt;
&lt;br /&gt;
=== Options and Defaults ===&lt;br /&gt;
&lt;br /&gt;
The options and current default values are listed below. Options are case-sensitive and may be set for the whole router, for a particular client, or for an individual socket on a per-connection basis. Many values are tuned for HTTP performance over typical I2P conditions. Other applications such as peer-to-peer services are strongly encouraged to modify as necessary, by setting the options and passing them via the call to [http://echelon.i2p/javadoc/net/i2p/client/streaming/I2PSocketManagerFactory.html I2PSocketManagerFactory].createManager(_i2cpHost, _i2cpPort, opts). Time values are in ms.&lt;br /&gt;
&lt;br /&gt;
Note that higher-layer APIs, such as [[en/docs/api/samv3|SAM]], [[en/docs/api/bob|BOB]], and [[en/docs/api/i2ptunnel|I2PTunnel]], may override these defaults with their own defaults. Also note that many options only apply to servers listening for incoming connections.&lt;br /&gt;
&lt;br /&gt;
As of release 0.9.1, most, but not all, options may be changed on an active socket manager or session. See the javadocs for details.&lt;br /&gt;
&lt;br /&gt;
Option&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Default&lt;br /&gt;
&lt;br /&gt;
Notes&lt;br /&gt;
&lt;br /&gt;
i2cp.accessList&lt;br /&gt;
&lt;br /&gt;
null&lt;br /&gt;
&lt;br /&gt;
Comma- or space-separated list of Base64 peer Hashes used for either access list or blacklist. As of release 0.7.13.&lt;br /&gt;
&lt;br /&gt;
i2cp.destination.sigType&lt;br /&gt;
&lt;br /&gt;
DSA_SHA1&lt;br /&gt;
&lt;br /&gt;
Use the access list as a whitelist for incoming connections. The name or number of the signature type for a transient destination. As of release 0.9.12.&lt;br /&gt;
&lt;br /&gt;
i2cp.enableAccessList&lt;br /&gt;
&lt;br /&gt;
false&lt;br /&gt;
&lt;br /&gt;
Use the access list as a whitelist for incoming connections. As of release 0.7.13.&lt;br /&gt;
&lt;br /&gt;
i2cp.enableBlackList&lt;br /&gt;
&lt;br /&gt;
false&lt;br /&gt;
&lt;br /&gt;
Use the access list as a blacklist for incoming connections. As of release 0.7.13.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.answerPings&lt;br /&gt;
&lt;br /&gt;
true&lt;br /&gt;
&lt;br /&gt;
Whether to respond to incoming pings&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.blacklist&lt;br /&gt;
&lt;br /&gt;
null&lt;br /&gt;
&lt;br /&gt;
Comma- or space-separated list of Base64 peer Hashes to be blacklisted for incoming connections to ALL destinations in the context. This option must be set in the context properties, NOT in the createManager() options argument. Note that setting this in the router context will not affect clients outside the router in a separate JVM and context. As of release 0.9.3.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.bufferSize&lt;br /&gt;
&lt;br /&gt;
64K&lt;br /&gt;
&lt;br /&gt;
How much transmit data (in bytes) will be accepted that hasn&#039;t been written out yet.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.congestionAvoidanceGrowthRateFactor&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
When we&#039;re in congestion avoidance, we grow the window size at the rate of &amp;lt;code&amp;gt;1/(windowSize*factor)&amp;lt;/code&amp;gt;. In standard TCP, window sizes are in bytes, while in I2P, window sizes are in messages. A higher number means slower growth.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.connectDelay&lt;br /&gt;
&lt;br /&gt;
-1&lt;br /&gt;
&lt;br /&gt;
How long to wait after instantiating a new con before actually attempting to connect. If this is &amp;amp;lt;= 0, connect immediately with no initial data. If greater than 0, wait until the output stream is flushed, the buffer fills, or that many milliseconds pass, and include any initial data with the SYN.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.connectTimeout&lt;br /&gt;
&lt;br /&gt;
5*60*1000&lt;br /&gt;
&lt;br /&gt;
How long to block on connect, in milliseconds. Negative means indefinitely. Default is 5 minutes.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.disableRejectLogging&lt;br /&gt;
&lt;br /&gt;
false&lt;br /&gt;
&lt;br /&gt;
Whether to disable warnings in the logs when an incoming connection is rejected due to connection limits. As of release 0.9.4.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.dsalist&lt;br /&gt;
&lt;br /&gt;
null&lt;br /&gt;
&lt;br /&gt;
Comma- or space-separated list of Base64 peer Hashes or host names to be contacted using an alternate DSA destination. Only applies if multisession is enabled and the primary session is non-DSA (generally for shared clients only). This option must be set in the context properties, NOT in the createManager() options argument. Note that setting this in the router context will not affect clients outside the router in a separate JVM and context. As of release 0.9.21.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.enforceProtocol&lt;br /&gt;
&lt;br /&gt;
true&lt;br /&gt;
&lt;br /&gt;
Whether to listen only for the streaming protocol. Setting to true will prohibit communication with Destinations earlier than release 0.7.1 (released March 2009). Set to true if running multiple protocols on this Destination. As of release 0.9.1. Default true as of release 0.9.36.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.inactivityAction&lt;br /&gt;
&lt;br /&gt;
2 (send)&lt;br /&gt;
&lt;br /&gt;
(0=noop, 1=disconnect) What to do on an inactivity timeout - do nothing, disconnect, or send a duplicate ack.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.inactivityTimeout&lt;br /&gt;
&lt;br /&gt;
90*1000&lt;br /&gt;
&lt;br /&gt;
Idle time before sending a keepalive&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.initialAckDelay&lt;br /&gt;
&lt;br /&gt;
750&lt;br /&gt;
&lt;br /&gt;
Delay before sending an ack&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.initialResendDelay&lt;br /&gt;
&lt;br /&gt;
1000&lt;br /&gt;
&lt;br /&gt;
The initial value of the resend delay field in the packet header, times 1000. Not fully implemented; see below.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.initialRTO&lt;br /&gt;
&lt;br /&gt;
9000&lt;br /&gt;
&lt;br /&gt;
Initial timeout (if no [[#sharing|sharing data]] available). As of release 0.9.8.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.initialRTT&lt;br /&gt;
&lt;br /&gt;
8000&lt;br /&gt;
&lt;br /&gt;
Initial round trip time estimate (if no [[#sharing|sharing data]] available). Disabled as of release 0.9.8; uses actual RTT.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.initialWindowSize&lt;br /&gt;
&lt;br /&gt;
6&lt;br /&gt;
&lt;br /&gt;
(if no [[#sharing|sharing data]] available) In standard TCP, window sizes are in bytes, while in I2P, window sizes are in messages.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.limitAction&lt;br /&gt;
&lt;br /&gt;
reset&lt;br /&gt;
&lt;br /&gt;
What action to take when an incoming connection exceeds limits. Valid values are: reset (reset the connection); drop (drop the connection); or http (send a hardcoded HTTP 429 response). Any other value is a custom response to be sent. backslash-r and backslash-n will be replaced with CR and LF. As of release 0.9.34.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.maxConcurrentStreams&lt;br /&gt;
&lt;br /&gt;
-1&lt;br /&gt;
&lt;br /&gt;
(0 or negative value means unlimited) This is a total limit for incoming and outgoing combined.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.maxConnsPerMinute&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
Incoming connection limit (per peer; 0 means disabled) As of release 0.7.14.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.maxConnsPerHour&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
(per peer; 0 means disabled) As of release 0.7.14.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.maxConnsPerDay&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
(per peer; 0 means disabled) As of release 0.7.14.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.maxMessageSize&lt;br /&gt;
&lt;br /&gt;
1730&lt;br /&gt;
&lt;br /&gt;
The MTU in bytes.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.maxResends&lt;br /&gt;
&lt;br /&gt;
8&lt;br /&gt;
&lt;br /&gt;
Maximum number of retransmissions before failure.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.maxTotalConnsPerMinute&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
Incoming connection limit (all peers; 0 means disabled) As of release 0.7.14.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.maxTotalConnsPerHour&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
(all peers; 0 means disabled) Use with caution as exceeding this will disable a server for a long time. As of release 0.7.14.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.maxTotalConnsPerDay&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
(all peers; 0 means disabled) Use with caution as exceeding this will disable a server for a long time. As of release 0.7.14.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.maxWindowSize&lt;br /&gt;
&lt;br /&gt;
128&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.profile&lt;br /&gt;
&lt;br /&gt;
1 (bulk)&lt;br /&gt;
&lt;br /&gt;
(2=interactive not supported) This doesn&#039;t currently do anything, but setting it to a value other than 1 will cause an error.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.readTimeout&lt;br /&gt;
&lt;br /&gt;
-1&lt;br /&gt;
&lt;br /&gt;
How long to block on read, in milliseconds. Negative means indefinitely.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.slowStartGrowthRateFactor&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
When we&#039;re in slow start, we grow the window size at the rate of 1/(factor). In standard TCP, window sizes are in bytes, while in I2P, window sizes are in messages. A higher number means slower growth.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.tcbcache.rttDampening&lt;br /&gt;
&lt;br /&gt;
0.75&lt;br /&gt;
&lt;br /&gt;
Ref: RFC 2140. Floating point value. May be set only via context properties, not connection options. As of release 0.9.8.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.tcbcache.rttdevDampening&lt;br /&gt;
&lt;br /&gt;
0.75&lt;br /&gt;
&lt;br /&gt;
Ref: RFC 2140. Floating point value. May be set only via context properties, not connection options. As of release 0.9.8.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.tcbcache.wdwDampening&lt;br /&gt;
&lt;br /&gt;
0.75&lt;br /&gt;
&lt;br /&gt;
Ref: RFC 2140. Floating point value. May be set only via context properties, not connection options. As of release 0.9.8.&lt;br /&gt;
&lt;br /&gt;
i2p.streaming.writeTimeout&lt;br /&gt;
&lt;br /&gt;
-1&lt;br /&gt;
&lt;br /&gt;
How long to block on write/flush, in milliseconds. Negative means indefinitely.&lt;br /&gt;
&lt;br /&gt;
== Protocol Specification ==&lt;br /&gt;
&lt;br /&gt;
[[en/docs/spec/streaming|See the Streaming Library Specification page.]]&lt;br /&gt;
&lt;br /&gt;
== Implementation Details ==&lt;br /&gt;
&lt;br /&gt;
=== Setup ===&lt;br /&gt;
&lt;br /&gt;
The initiator sends a packet with the SYNCHRONIZE flag set. This packet may contain the initial data as well. The peer replies with a packet with the SYNCHRONIZE flag set. This packet may contain the initial response data as well.&lt;br /&gt;
&lt;br /&gt;
The initiator may send additional data packets, up to the initial window size, before receiving the SYNCHRONIZE response. These packets will also have the send Stream ID field set to 0. Recipients must buffer packets received on unknown streams for a short period of time, as they may arrive out of order, in advance of the SYNCHRONIZE packet.&lt;br /&gt;
&lt;br /&gt;
=== MTU Selection and Negotiation ===&lt;br /&gt;
&lt;br /&gt;
The maximum message size (also called the MTU / MRU) is negotiated to the lower value supported by the two peers. As tunnel messages are padded to 1KB, a poor MTU selection will lead to a large amount of overhead. The MTU is specified by the option i2p.streaming.maxMessageSize. The current default MTU of 1730 was chosen to fit precisely into two 1K I2NP tunnel messages, including overhead for the typical case.&lt;br /&gt;
&lt;br /&gt;
The first message in a connection includes a 387 byte (typical) Destination added by the streaming layer, and usually a 898 byte (typical) LeaseSet, and Session keys, bundled in the Garlic message by the router. (The LeaseSet and Session Keys will not be bundled if an ElGamal Session was previously established). Therefore, the goal of fitting a complete HTTP request in a single 1KB I2NP message is not always attainable. However, the selection of the MTU, together with careful implementation of fragmentation and batching strategies in the tunnel gateway processor, are important factors in network bandwidth, latency, reliability, and efficiency, especially for long-lived connections.&lt;br /&gt;
&lt;br /&gt;
=== Data Integrity ===&lt;br /&gt;
&lt;br /&gt;
Data integrity is assured by the gzip CRC-32 checksum implemented in [[en/docs/protocol/i2cp#format|the I2CP layer]]. There is no checksum field in the streaming protocol.&lt;br /&gt;
&lt;br /&gt;
=== Packet Encapsulation ===&lt;br /&gt;
&lt;br /&gt;
Each packet is sent through I2P as a single message (or as an individual clove in a [[en/docs/how/garlic-routing|Garlic Message]]). Message encapsulation is implemented in the underlying [[en/docs/protocol/i2cp|I2CP]], [[en/docs/protocol/i2np|I2NP]], and [[en/docs/spec/tunnel-message|tunnel message]] layers. There is no packet delimiter mechanism or payload length field in the streaming protocol.&lt;br /&gt;
&lt;br /&gt;
=== Optional Delay ===&lt;br /&gt;
&lt;br /&gt;
Data packets may include an optional delay field specifying the requested delay, in ms, before the receiver should ack the packet. Valid values are 0 to 60000 inclusive. A value of 0 requests an immediate ack. This is advisory only, and receivers should delay slightly so that additional packets may be acknowledged with a single ack. Some implementations may include an advisory value of (measured RTT / 2) in this field. For nonzero optional delay values, receivers should limit the maximum delay before sending an ack to a few seconds at most. Optional delay values greater than 60000 indicate choking, see below.&lt;br /&gt;
&lt;br /&gt;
=== Receive Window and Choking ===&lt;br /&gt;
&lt;br /&gt;
TCP headers include the receive window in bytes. The streaming protocol does not contain a receive window, it uses only a simple choke/unchoke indication. Each endpoint must maintain its own estimate of the far-end receive window, in either bytes or packets. The recommended minimum buffer size for receiver implementations is 128 packets or 217 KB (approximately 128x1730). Because of I2P netowrk latency, packet drops, and the resulting congestion control, a buffer of this size is rarely filled. Overflow is, however, likely to occur on high-bandwidth &amp;amp;quot;local loopback&amp;amp;quot; (same-router) connections.&lt;br /&gt;
&lt;br /&gt;
To quickly indicate and smoothly recover from overflow conditions, there is a simple mechanism for pushback in the streaming protocol. If a packet is received with an optional delay field of value of 60001 or higher, that indicates &amp;amp;quot;choking&amp;amp;quot; or a receive window of zero. A packet with an optional delay field of value of 60000 or less indicates &amp;amp;quot;unchoking&amp;amp;quot;. Packets without an optional delay field do not affect the choke/unchoke state.&lt;br /&gt;
&lt;br /&gt;
After being choked, no more packets with data should be sent until the transmitter is unchoked, except for occasional &amp;amp;quot;probe&amp;amp;quot; data packets to compensate for possible lost unchoke packets. The choked endpoint should start a &amp;amp;quot;persist timer&amp;amp;quot; to control the probing, as in TCP. The unchoking endpoint should send several packets with this field set, or continue sending them periodically until data packets are received again. Maximum time to wait for unchoking is implementation-dependent. Transmitter window size and congestion control strategy after being unchoked is implementation-dependent.&lt;br /&gt;
&lt;br /&gt;
=== Congestion Control ===&lt;br /&gt;
&lt;br /&gt;
The streaming lib uses standard slow-start (exponential window growth) and congestion avoidance (linear window growth) phases, with exponential backoff. Windowing and acknowledgments use packet count, not byte count.&lt;br /&gt;
&lt;br /&gt;
=== Close ===&lt;br /&gt;
&lt;br /&gt;
Any packet, including one with the SYNCHRONIZE flag set, may have the CLOSE flag sent as well. The connection is not closed until the peer responds with the CLOSE flag. CLOSE packets may contain data as well.&lt;br /&gt;
&lt;br /&gt;
=== Ping / Pong ===&lt;br /&gt;
&lt;br /&gt;
There is no ping function at the I2CP layer (equivalent to ICMP echo) or in datagrams. This function is provided in streaming. Pings and pongs may not be combined with a standard streaming packet; if the ECHO option is set, then most other flags, options, ackThrough, sequenceNum, NACKs, etc. are ignored.&lt;br /&gt;
&lt;br /&gt;
A ping packet must have the ECHO, SIGNATURE_INCLUDED, and FROM_INCLUDED flags set. The sendStreamId must be greater than zero, and the receiveStreamId is ignored. The sendStreamId may or may not correspond to an existing connection.&lt;br /&gt;
&lt;br /&gt;
A pong packet must have the ECHO flag set. The sendStreamId must be zero, and the receiveStreamId is the sendStreamId from the ping. Prior to release 0.9.18, the pong packet does not include any payload that was contained in the ping.&lt;br /&gt;
&lt;br /&gt;
As of release 0.9.18, pings and pongs may contain a payload. The payload in the ping, up to a maximum of 32 bytes, is returned in the pong.&lt;br /&gt;
&lt;br /&gt;
Streaming may be configured to disable sending pongs with the configuration i2p.streaming.answerPings=false.&lt;br /&gt;
&lt;br /&gt;
=== Control Block Sharing ===&lt;br /&gt;
&lt;br /&gt;
The streaming lib supports &amp;amp;quot;TCP&amp;amp;quot; Control Block sharing. This shares three important streaming lib parameters (window size, round trip time, round trip time variance) across connections to the same remote peer. This is used for &amp;amp;quot;temporal&amp;amp;quot; sharing at connection open/close time, not &amp;amp;quot;ensemble&amp;amp;quot; sharing during a connection (See [http://www.ietf.org/rfc/rfc2140.txt RFC 2140]). There is a separate share per ConnectionManager (i.e. per local Destination) so that there is no information leakage to other Destinations on the same router. The share data for a given peer expires after a few minutes. The following Control Block Sharing parameters can be set per router:&lt;br /&gt;
&lt;br /&gt;
* RTT_DAMPENING = 0.75&lt;br /&gt;
* RTTDEV_DAMPENING = 0.75&lt;br /&gt;
* WINDOW_DAMPENING = 0.75&lt;br /&gt;
&lt;br /&gt;
=== Other Parameters ===&lt;br /&gt;
&lt;br /&gt;
The following parameters are hardcoded, but may be of interest for analysis:&lt;br /&gt;
&lt;br /&gt;
* MIN_RESEND_DELAY = 100 ms (minimum RTO)&lt;br /&gt;
* MAX_RESEND_DELAY = 45 sec (maximum RTO)&lt;br /&gt;
* MIN_WINDOW_SIZE = 1&lt;br /&gt;
* TREND_COUNT = 3&lt;br /&gt;
* MIN_MESSAGE_SIZE = 512 (minimum MTU)&lt;br /&gt;
* INBOUND_BUFFER_SIZE = maxMessageSize * (maxWindowSize + 2)&lt;br /&gt;
* INITIAL_TIMEOUT (valid only before RTT is sampled) = 9 sec&lt;br /&gt;
* &amp;amp;quot;alpha&amp;amp;quot; ( RTT dampening factor as per RFC 6298 ) = 0.125&lt;br /&gt;
* &amp;amp;quot;beta&amp;amp;quot; ( RTTDEV dampening factor as per RFC 6298 ) = 0.25&lt;br /&gt;
* &amp;amp;quot;K&amp;amp;quot; ( RTDEV multiplier as per RFC 6298 ) = 4&lt;br /&gt;
* PASSIVE_FLUSH_DELAY = 175 ms&lt;br /&gt;
* Maximum RTT estimate: 60 sec&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&lt;br /&gt;
The streaming library has grown organically for I2P - first mihi implemented the &amp;amp;quot;mini streaming library&amp;amp;quot; as part of I2PTunnel, which was limited to a window size of 1 message (requiring an ACK before sending the next one), and then it was refactored out into a generic streaming interface (mirroring TCP sockets) and the full streaming implementation was deployed with a sliding window protocol and optimizations to take into account the high bandwidth x delay product. Individual streams may adjust the maximum packet size and other options. The default message size is selected to fit precisely in two 1K I2NP tunnel messages, and is a reasonable tradeoff between the bandwidth costs of retransmitting lost messages, and the latency and overhead of multiple messages.&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
The behavior of the streaming library has a profound impact on application-level performance, and as such, is an important area for further analysis.&lt;br /&gt;
&lt;br /&gt;
* Additional tuning of the streaming lib parameters may be necessary.&lt;br /&gt;
* Another area for research is the interaction of the streaming lib with the NTCP and SSU transport layers. See [[en/docs/discussions/ntcp|the NTCP discussion page]] for details.&lt;br /&gt;
* The interaction of the routing algorithms with the streaming lib strongly affects performance. In particular, random distribution of messages to multiple tunnels in a pool leads to a high degree of out-of-order delivery which results in smaller window sizes than would otherwise be the case. The router currently routes messages for a single from/to destination pair through a consistent set of tunnels, until tunnel expiration or delivery failure. The router&#039;s failure and tunnel selection algorithms should be reviewed for possible improvements.&lt;br /&gt;
* The data in the first SYN packet may exceed the receiver&#039;s MTU.&lt;br /&gt;
* The DELAY_REQUESTED field could be used more.&lt;br /&gt;
* Duplicate initial SYNCHRONIZE packets on short-lived streams may not be recognized and removed.&lt;br /&gt;
* Don&#039;t send the MTU in a retransmission.&lt;br /&gt;
* Data is sent along unless the outbound window is full. (i.e. no-Nagle or TCP_NODELAY) Probably should have a configuration option for this.&lt;br /&gt;
* zzz has added debug code to the streaming library to log packets in a wireshark-compatible (pcap) format; Use this to further analyze performance. The format may require enhancement to map more streaming lib parameters to TCP fields.&lt;br /&gt;
* There are proposals to replace the streaming lib with standard TCP (or perhaps a null layer together with raw sockets). This would unfortunately be incompatible with the streaming lib but it would be good to compare the performance of the two.&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/protocol/i2cp&amp;diff=133</id>
		<title>En/docs/protocol/i2cp</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/protocol/i2cp&amp;diff=133"/>
		<updated>2020-02-04T14:42:11Z</updated>

		<summary type="html">&lt;p&gt;Idk: Created page with &amp;quot; &amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;  = I2CP =   &amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;  This page was last updated in 2019-09 and is accurate for rou...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= I2CP =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page was last updated in 2019-09 and is accurate for router version 0.9.42.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The I2P Client Protocol (I2CP) exposes a strong separation of concerns between the router and any client that wishes to communicate over the network. It enables secure and asynchronous messaging by sending and receiving messages over a single TCP socket. With I2CP, a client application tells the router who they are (their &amp;amp;quot;destination&amp;amp;quot;), what anonymity, reliability, and latency tradeoffs to make, and where to send messages. In turn the router uses I2CP to tell the client when any messages have arrived, and to request authorization for some tunnels to be used.&lt;br /&gt;
&lt;br /&gt;
The protocol itself is implemented in Java, to provide the [http://echelon.i2p/javadoc/net/i2p/client/package-summary.html Client SDK]. This SDK is exposed in the i2p.jar package, which implements the client-side of I2CP. Clients should never need to access the router.jar package, which contains the router itself and the router-side of I2CP. There is also a [http://git.repo.i2p/w/libi2cp.git C library implementation]. A non-Java client would also have to implement the [[en/docs/api/streaming|streaming library]] for TCP-style connections.&lt;br /&gt;
&lt;br /&gt;
Applications can take advantage of the base I2CP plus the [[en/docs/api/streaming|streaming]] and [[en/docs/spec/datagrams|datagram]] libraries by using the [[en/docs/api/sam|Simple Anonymous Messaging]] or [[en/docs/api/bob|BOB]] protocols, which do not require clients to deal with any sort of cryptography. Also, clients may access the network by one of several proxies - HTTP, CONNECT, and SOCKS 4/4a/5. Alternatively, Java clients may access those libraries in ministreaming.jar and streaming.jar. So there are several options for both Java and non-Java applications.&lt;br /&gt;
&lt;br /&gt;
Client-side end-to-end encryption (encrypting the data over the I2CP connection) was disabled in I2P release 0.6, leaving in place the [[en/docs/how/elgamal-aes|ElGamal/AES end-to-end encryption]] which is implemented in the router. The only cryptography that client libraries must still implement is [[en/docs/how/cryptography#DSA|DSA public/private key signing]] for [[en/docs/spec/i2cp#msg_CreateLeaseSet|LeaseSets]] and [[en/docs/spec/i2cp#struct_SessionConfig|Session Configurations]], and management of those keys.&lt;br /&gt;
&lt;br /&gt;
In a standard I2P installation, port 7654 is used by external java clients to communicate with the local router via I2CP. By default, the router binds to address 127.0.0.1. To bind to 0.0.0.0, set the router advanced configuration option &amp;lt;code&amp;gt;i2cp.tcp.bindAllInterfaces=true&amp;lt;/code&amp;gt; and restart. Clients in the same JVM as the router pass messages directly to the router through an internal JVM interface.&lt;br /&gt;
&lt;br /&gt;
The router also supports external connections over SSL. While SSL is not the default, it is strongly recommended for any traffic that may be exposed to the open Internet. The authorization user/password (if any), the [[en/docs/spec/common-structures#type_PrivateKey|Private Key]] and [[en/docs/spec/common-structures#type_SigningPrivateKey|Signing Private Key]] for the [[en/docs/spec/common-structures#struct_Destination|Destination]] are all transmitted in-the-clear unless SSL is enabled.&lt;br /&gt;
&lt;br /&gt;
== I2CP Protocol Specification ==&lt;br /&gt;
&lt;br /&gt;
Now on the [[en/docs/spec/i2cp|I2CP Specification page]].&lt;br /&gt;
&lt;br /&gt;
== I2CP Initialization ==&lt;br /&gt;
&lt;br /&gt;
When a client connects to the router, it first sends a single protocol version byte (0x2A). Then it sends a [[en/docs/spec/i2cp#msg_GetDate|GetDate Message]] and waits for the [[en/docs/spec/i2cp#msg_SetDate|SetDate Message]] response. Next, it sends a [[en/docs/spec/i2cp#msg_CreateSession|CreateSession Message]] containing the session configuration. It next awaits a [[en/docs/spec/i2cp#msg_RequestLeaseSet|RequestLeaseSet Message]] from the router, indicating that inbound tunnels have been built, and responds with a CreateLeaseSetMessage containing the signed LeaseSet. The client may now initiate or receive connections from other I2P destinations.&lt;br /&gt;
&lt;br /&gt;
== I2CP Options ==&lt;br /&gt;
&lt;br /&gt;
=== Router-side Options ===&lt;br /&gt;
&lt;br /&gt;
The following options are traditionally passed to the router via a [[en/docs/spec/i2cp#struct_SessionConfig|SessionConfig]] contained in a [[en/docs/spec/i2cp#msg_CreateSession|CreateSession Message]] or a [[en/docs/spec/i2cp#msg_ReconfigureSession|ReconfigureSession Message]].&lt;br /&gt;
&lt;br /&gt;
Router-side Options&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Option&lt;br /&gt;
&lt;br /&gt;
As Of Release&lt;br /&gt;
&lt;br /&gt;
Recommended Arguments&lt;br /&gt;
&lt;br /&gt;
Allowable Range&lt;br /&gt;
&lt;br /&gt;
Default&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
clientMessageTimeout&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
8*1000 - 120*1000&lt;br /&gt;
&lt;br /&gt;
60*1000&lt;br /&gt;
&lt;br /&gt;
The timeout (ms) for all sent messages. Unused. See the protocol specification for per-message settings.&lt;br /&gt;
&lt;br /&gt;
crypto.lowTagThreshold&lt;br /&gt;
&lt;br /&gt;
0.9.2&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
1-128&lt;br /&gt;
&lt;br /&gt;
30&lt;br /&gt;
&lt;br /&gt;
Minimum number of ElGamal/AES Session Tags before we send more. Recommended: approximately tagsToSend * 2/3&lt;br /&gt;
&lt;br /&gt;
crypto.tagsToSend&lt;br /&gt;
&lt;br /&gt;
0.9.2&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
1-128&lt;br /&gt;
&lt;br /&gt;
40&lt;br /&gt;
&lt;br /&gt;
Number of ElGamal/AES Session Tags to send at a time. For clients with relatively low bandwidth per-client-pair (IRC, some UDP apps), this may be set lower.&lt;br /&gt;
&lt;br /&gt;
explicitPeers&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
null&lt;br /&gt;
&lt;br /&gt;
Comma-separated list of Base 64 Hashes of peers to build tunnels through; for debugging only&lt;br /&gt;
&lt;br /&gt;
i2cp.dontPublishLeaseSet&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
true, false&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
false&lt;br /&gt;
&lt;br /&gt;
Should generally be set to true for clients and false for servers&lt;br /&gt;
&lt;br /&gt;
i2cp.fastReceive&lt;br /&gt;
&lt;br /&gt;
0.9.4&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
true, false&lt;br /&gt;
&lt;br /&gt;
false&lt;br /&gt;
&lt;br /&gt;
If true, the router just sends the MessagePayload instead of sending a MessageStatus and awaiting a ReceiveMessageBegin.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetAuthType&lt;br /&gt;
&lt;br /&gt;
0.9.41&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
0-2&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
The type of authentication for encrypted LS2. 0 for no per-client authentication (the default); 1 for DH per-client authentication; 2 for PSK per-client authentication. See proposal 123.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetEncType&lt;br /&gt;
&lt;br /&gt;
0.9.38&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
0-65535,...&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
The encryption type to be used, as of 0.9.38. Interpreted client-side, but also passed to the router in the SessionConfig, to declare intent and check support. As of 0.9.39, may be comma-separated values for multiple types. See PublicKey in common strutures spec for values. See proposals 123, 144, and 145.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetOfflineExpiration&lt;br /&gt;
&lt;br /&gt;
0.9.38&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
The expiration of the offline signature, 4 bytes, seconds since the epoch. See proposal 123.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetOfflineSignature&lt;br /&gt;
&lt;br /&gt;
0.9.38&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
The base 64 of the offline signature. See proposal 123.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetPrivKey&lt;br /&gt;
&lt;br /&gt;
0.9.41&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
A base 64 X25519 private key for the router to use to decrypt the encrypted LS2 locally, only if per-client authentication is enabled. Optionally preceded by the key type and &#039;:&#039;. Only &amp;amp;quot;ECIES_X25519:&amp;amp;quot; is supported, which is the default. See proposal 123. Do not confuse with i2cp.leaseSetPrivateKey which is for LS1.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetSecret&lt;br /&gt;
&lt;br /&gt;
0.9.39&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Base 64 encoded UTF-8 secret used to blind the leaseset address. See proposal 123.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetTransientPublicKey&lt;br /&gt;
&lt;br /&gt;
0.9.38&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[type:]b64 The base 64 of the transient private key, prefixed by an optional sig type number or name, default DSA_SHA1. See proposal 123.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetType&lt;br /&gt;
&lt;br /&gt;
0.9.38&lt;br /&gt;
&lt;br /&gt;
1,3,5,7&lt;br /&gt;
&lt;br /&gt;
1-255&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
The type of leaseset to be sent in the CreateLeaseSet2 Message. Interpreted client-side, but also passed to the router in the SessionConfig, to declare intent and check support. See proposal 123.&lt;br /&gt;
&lt;br /&gt;
i2cp.messageReliability&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
BestEffort, None&lt;br /&gt;
&lt;br /&gt;
BestEffort&lt;br /&gt;
&lt;br /&gt;
Guaranteed is disabled; None implemented in 0.8.1; the streaming lib default is None as of 0.8.1, the client side default is None as of 0.9.4&lt;br /&gt;
&lt;br /&gt;
i2cp.password&lt;br /&gt;
&lt;br /&gt;
0.8.2&lt;br /&gt;
&lt;br /&gt;
string&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
For authorization, if required by the router. If the client is running in the same JVM as a router, this option is not required. Warning - username and password are sent in the clear to the router, unless using SSL (i2cp.SSL=true). Authorization is only recommended when using SSL.&lt;br /&gt;
&lt;br /&gt;
i2cp.username&lt;br /&gt;
&lt;br /&gt;
0.8.2&lt;br /&gt;
&lt;br /&gt;
string&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
inbound.allowZeroHop&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
true, false&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
true&lt;br /&gt;
&lt;br /&gt;
If incoming zero hop tunnel is allowed&lt;br /&gt;
&lt;br /&gt;
outbound.allowZeroHop&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
true, false&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
true&lt;br /&gt;
&lt;br /&gt;
If outgoing zero hop tunnel is allowed&lt;br /&gt;
&lt;br /&gt;
inbound.backupQuantity&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
number from 0 to 3&lt;br /&gt;
&lt;br /&gt;
No limit&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
Number of redundant fail-over for tunnels in&lt;br /&gt;
&lt;br /&gt;
outbound.backupQuantity&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
number from 0 to 3&lt;br /&gt;
&lt;br /&gt;
No limit&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
Number of redundant fail-over for tunnels out&lt;br /&gt;
&lt;br /&gt;
inbound.IPRestriction&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
number from 0 to 4&lt;br /&gt;
&lt;br /&gt;
0 to 4&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
Number of IP bytes to match to determine if two routers should not be in the same tunnel. 0 to disable.&lt;br /&gt;
&lt;br /&gt;
outbound.IPRestriction&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
number from 0 to 4&lt;br /&gt;
&lt;br /&gt;
0 to 4&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
Number of IP bytes to match to determine if two routers should not be in the same tunnel. 0 to disable.&lt;br /&gt;
&lt;br /&gt;
inbound.length&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
number from 0 to 3&lt;br /&gt;
&lt;br /&gt;
0 to 7&lt;br /&gt;
&lt;br /&gt;
3&lt;br /&gt;
&lt;br /&gt;
Length of tunnels in&lt;br /&gt;
&lt;br /&gt;
outbound.length&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
number from 0 to 3&lt;br /&gt;
&lt;br /&gt;
0 to 7&lt;br /&gt;
&lt;br /&gt;
3&lt;br /&gt;
&lt;br /&gt;
Length of tunnels out&lt;br /&gt;
&lt;br /&gt;
inbound.lengthVariance&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
number from -1 to 2&lt;br /&gt;
&lt;br /&gt;
-7 to 7&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
Random amount to add or subtract to the length of tunnels in. A positive number x means add a random amount from 0 to x inclusive. A negative number -x means add a random amount from -x to x inclusive. The router will limit the total length of the tunnel to 0 to 7 inclusive. The default variance was 1 prior to release 0.7.6.&lt;br /&gt;
&lt;br /&gt;
outbound.lengthVariance&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
number from -1 to 2&lt;br /&gt;
&lt;br /&gt;
-7 to 7&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
Random amount to add or subtract to the length of tunnels out. A positive number x means add a random amount from 0 to x inclusive. A negative number -x means add a random amount from -x to x inclusive. The router will limit the total length of the tunnel to 0 to 7 inclusive. The default variance was 1 prior to release 0.7.6.&lt;br /&gt;
&lt;br /&gt;
inbound.nickname&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
string&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Name of tunnel - generally used in routerconsole, which will use the first few characters of the Base64 hash of the destination by default.&lt;br /&gt;
&lt;br /&gt;
outbound.nickname&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
string&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Name of tunnel - generally ignored unless inbound.nickname is unset.&lt;br /&gt;
&lt;br /&gt;
outbound.priority&lt;br /&gt;
&lt;br /&gt;
0.9.4&lt;br /&gt;
&lt;br /&gt;
number from -25 to 25&lt;br /&gt;
&lt;br /&gt;
-25 to 25&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
Priority adjustment for outbound messages. Higher is higher priority.&lt;br /&gt;
&lt;br /&gt;
inbound.quantity&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
number from 1 to 3&lt;br /&gt;
&lt;br /&gt;
1 to 16&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
Number of tunnels in. Limit was increased from 6 to 16 in release 0.9; however, numbers higher than 6 are incompatible with older releases.&lt;br /&gt;
&lt;br /&gt;
outbound.quantity&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
number from 1 to 3&lt;br /&gt;
&lt;br /&gt;
No limit&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
Number of tunnels out&lt;br /&gt;
&lt;br /&gt;
inbound.randomKey&lt;br /&gt;
&lt;br /&gt;
0.9.17&lt;br /&gt;
&lt;br /&gt;
Base 64 encoding of 32 random bytes&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Used for consistent peer ordering across restarts.&lt;br /&gt;
&lt;br /&gt;
outbound.randomKey&lt;br /&gt;
&lt;br /&gt;
0.9.17&lt;br /&gt;
&lt;br /&gt;
Base 64 encoding of 32 random bytes&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
inbound.*&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Any other options prefixed with &amp;amp;quot;inbound.&amp;amp;quot; are stored in the &amp;amp;quot;unknown options&amp;amp;quot; properties of the inbound tunnel pool&#039;s settings.&lt;br /&gt;
&lt;br /&gt;
outbound.*&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Any other options prefixed with &amp;amp;quot;outbound.&amp;amp;quot; are stored in the &amp;amp;quot;unknown options&amp;amp;quot; properties of the outbound tunnel pool&#039;s settings.&lt;br /&gt;
&lt;br /&gt;
shouldBundleReplyInfo&lt;br /&gt;
&lt;br /&gt;
0.9.2&lt;br /&gt;
&lt;br /&gt;
true, false&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
true&lt;br /&gt;
&lt;br /&gt;
Set to false to disable ever bundling a reply LeaseSet. For clients that do not publish their LeaseSet, this option must be true for any reply to be possible. &amp;amp;quot;true&amp;amp;quot; is also recommended for multihomed servers with long connection times.&lt;br /&gt;
&lt;br /&gt;
Setting to &amp;amp;quot;false&amp;amp;quot; may save significant outbound bandwidth, especially if the client is configured with a large number of inbound tunnels (Leases). If replies are still required, this may shift the bandwidth burden to the far-end client and the floodfill. There are several cases where &amp;amp;quot;false&amp;amp;quot; may be appropriate:&lt;br /&gt;
&lt;br /&gt;
* Unidirectional communication, no reply required&lt;br /&gt;
* LeaseSet is published and higher reply latency is acceptable&lt;br /&gt;
* LeaseSet is published, client is a &amp;amp;quot;server&amp;amp;quot;, all connections are inbound so the connecting far-end destination obviously has the leaseset already. Connections are either short, or it is acceptable for latency on a long-lived connection to temporarily increase while the other end re-fetches the LeaseSet after expiration. HTTP servers may fit these requirements.&lt;br /&gt;
&lt;br /&gt;
Note: Large quantity, length, or variance settings may cause significant performance or reliability problems.&lt;br /&gt;
&lt;br /&gt;
Note: As of release 0.7.7, option names and values must use UTF-8 encoding. This is primarily useful for nicknames. Prior to that release, options with multi-byte characters were corrupted. Since options are encoded in a [[en/docs/spec/common-structures#type_Mapping|Mapping]], all option names and values are limited to 255 bytes (not characters) maximum.&lt;br /&gt;
&lt;br /&gt;
=== Client-side Options ===&lt;br /&gt;
&lt;br /&gt;
The following options are interpreted on the client side, and will be interpreted if passed to the I2PSession via the I2PClient.createSession() call. The streaming lib should also pass these options through to I2CP. Other implementations may have different defaults.&lt;br /&gt;
&lt;br /&gt;
Do not confuse with i2cp.leaseSetPrivKey which is for LS2.&lt;br /&gt;
&lt;br /&gt;
Client-side Options&lt;br /&gt;
&lt;br /&gt;
Option&lt;br /&gt;
&lt;br /&gt;
As Of Release&lt;br /&gt;
&lt;br /&gt;
Recommended Arguments&lt;br /&gt;
&lt;br /&gt;
Allowable Range&lt;br /&gt;
&lt;br /&gt;
Default&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
i2cp.closeIdleTime&lt;br /&gt;
&lt;br /&gt;
0.7.1&lt;br /&gt;
&lt;br /&gt;
1800000&lt;br /&gt;
&lt;br /&gt;
300000 minimum&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
(ms) Idle time required (default 30 minutes)&lt;br /&gt;
&lt;br /&gt;
i2cp.closeOnIdle&lt;br /&gt;
&lt;br /&gt;
0.7.1&lt;br /&gt;
&lt;br /&gt;
true, false&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
false&lt;br /&gt;
&lt;br /&gt;
Close I2P session when idle&lt;br /&gt;
&lt;br /&gt;
i2cp.encryptLeaseSet&lt;br /&gt;
&lt;br /&gt;
0.7.1&lt;br /&gt;
&lt;br /&gt;
true, false&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
false&lt;br /&gt;
&lt;br /&gt;
Encrypt the lease&lt;br /&gt;
&lt;br /&gt;
i2cp.fastReceive&lt;br /&gt;
&lt;br /&gt;
0.9.4&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
true, false&lt;br /&gt;
&lt;br /&gt;
true&lt;br /&gt;
&lt;br /&gt;
If true, the router just sends the MessagePayload instead of sending a MessageStatus and awaiting a ReceiveMessageBegin.&lt;br /&gt;
&lt;br /&gt;
i2cp.gzip&lt;br /&gt;
&lt;br /&gt;
0.6.5&lt;br /&gt;
&lt;br /&gt;
true, false&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
true&lt;br /&gt;
&lt;br /&gt;
Gzip outbound data&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetAuthType&lt;br /&gt;
&lt;br /&gt;
0.9.41&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
0-2&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
The type of authentication for encrypted LS2. 0 for no per-client authentication (the default); 1 for DH per-client authentication; 2 for PSK per-client authentication. See proposal 123.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetBlindedType&lt;br /&gt;
&lt;br /&gt;
0.9.39&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
0-65535&lt;br /&gt;
&lt;br /&gt;
See prop. 123&lt;br /&gt;
&lt;br /&gt;
The sig type of the blinded key for encrypted LS2. Default depends on the destination sig type. See proposal 123.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetClient.dh.nnn&lt;br /&gt;
&lt;br /&gt;
0.9.41&lt;br /&gt;
&lt;br /&gt;
b64name:b64pubkey&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
The base 64 of the client name (ignored, UI use only), followed by a &#039;:&#039;, followed by the base 64 of the public key to use for DH per-client auth. nnn starts with 0 See proposal 123.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetClient.psk.nnn&lt;br /&gt;
&lt;br /&gt;
0.9.41&lt;br /&gt;
&lt;br /&gt;
b64name:b64privkey&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
The base 64 of the client name (ignored, UI use only), followed by a &#039;:&#039;, followed by the base 64 of the private key to use for PSK per-client auth. nnn starts with 0 See proposal 123.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetEncType&lt;br /&gt;
&lt;br /&gt;
0.9.38&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
0-65535,...&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
The encryption type to be used, as of 0.9.38. Interpreted client-side, but also passed to the router in the SessionConfig, to declare intent and check support. As of 0.9.39, may be comma-separated values for multiple types. See PublicKey in common strutures spec for values. See proposals 123, 144, and 145.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetKey&lt;br /&gt;
&lt;br /&gt;
0.7.1&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
For encrypted leasesets. Base 64 SessionKey (44 characters)&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetPrivateKey&lt;br /&gt;
&lt;br /&gt;
0.9.18&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Base 64 private key for encryption, for old encrypted LS1. Optionally preceded by the key type and &#039;:&#039;. Only &amp;amp;quot;ELGAMAL_2048:&amp;amp;quot; is supported, which is the default. I2CP will generate the public key from the private key. Use for persistent leaseset keys across restarts.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetSecret&lt;br /&gt;
&lt;br /&gt;
0.9.39&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
Base 64 encoded UTF-8 secret used to blind the leaseset address. See proposal 123.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetSigningPrivateKey&lt;br /&gt;
&lt;br /&gt;
0.9.18&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Base 64 private key for signatures. Optionally preceded by the key type and &#039;:&#039;. DSA_SHA1 is the default. Key type must match the signature type in the destination. I2CP will generate the public key from the private key. Use for persistent leaseset keys across restarts.&lt;br /&gt;
&lt;br /&gt;
i2cp.leaseSetType&lt;br /&gt;
&lt;br /&gt;
0.9.38&lt;br /&gt;
&lt;br /&gt;
1,3,5,7&lt;br /&gt;
&lt;br /&gt;
1-255&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
The type of leaseset to be sent in the CreateLeaseSet2 Message. Interpreted client-side, but also passed to the router in the SessionConfig, to declare intent and check support. See proposal 123.&lt;br /&gt;
&lt;br /&gt;
i2cp.messageReliability&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
BestEffort, None&lt;br /&gt;
&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
Guaranteed is disabled; None implemented in 0.8.1; None is the default as of 0.9.4&lt;br /&gt;
&lt;br /&gt;
i2cp.reduceIdleTime&lt;br /&gt;
&lt;br /&gt;
0.7.1&lt;br /&gt;
&lt;br /&gt;
1200000&lt;br /&gt;
&lt;br /&gt;
300000 minimum&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
(ms) Idle time required (default 20 minutes, minimum 5 minutes)&lt;br /&gt;
&lt;br /&gt;
i2cp.reduceOnIdle&lt;br /&gt;
&lt;br /&gt;
0.7.1&lt;br /&gt;
&lt;br /&gt;
true, false&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
false&lt;br /&gt;
&lt;br /&gt;
Reduce tunnel quantity when idle&lt;br /&gt;
&lt;br /&gt;
i2cp.reduceQuantity&lt;br /&gt;
&lt;br /&gt;
0.7.1&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
1 to 5&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
Tunnel quantity when reduced (applies to both inbound and outbound)&lt;br /&gt;
&lt;br /&gt;
i2cp.SSL&lt;br /&gt;
&lt;br /&gt;
0.8.3&lt;br /&gt;
&lt;br /&gt;
true, false&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
false&lt;br /&gt;
&lt;br /&gt;
Connect to the router using SSL. If the client is running in the same JVM as a router, this option is ignored, and the client connects to that router internally.&lt;br /&gt;
&lt;br /&gt;
i2cp.tcp.host&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Router hostname. If the client is running in the same JVM as a router, this option is ignored, and the client connects to that router internally.&lt;br /&gt;
&lt;br /&gt;
i2cp.tcp.port&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
1-65535&lt;br /&gt;
&lt;br /&gt;
7654&lt;br /&gt;
&lt;br /&gt;
Router I2CP port. If the client is running in the same JVM as a router, this option is ignored, and the client connects to that router internally.&lt;br /&gt;
&lt;br /&gt;
Note: All arguments, including numbers, are strings. True/false values are case-insensitive strings. Anything other than case-insensitive &amp;amp;quot;true&amp;amp;quot; is interpreted as false. All option names are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
== I2CP Payload Data Format and Multiplexing ==&lt;br /&gt;
&lt;br /&gt;
The end-to-end messages handled by I2CP (i.e. the data sent by the client in a [[en/docs/spec/i2cp#msg_SendMessage|SendMessageMessage]] and received by the client in a [[en/docs/spec/i2cp#msg_MessagePayload|MessagePayloadMessage]]) are gzipped with a standard 10-byte gzip header beginning with 0x1F 0x8B 0x08 as specified by [http://www.ietf.org/rfc/rfc1952.txt RFC 1952]. As of release 0.7.1, I2P uses ignored portions of the gzip header to include protocol, from-port, and to-port information, thus supporting streaming and datagrams on the same destination, and allowing query/response using datagrams to work reliably in the presence of multiple channels.&lt;br /&gt;
&lt;br /&gt;
The gzip function cannot be completely turned off, however setting i2cp.gzip=false turns the gzip effort setting to 0, which may save a little CPU.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Bytes&lt;br /&gt;
! Content&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| Gzip header 0x1F 0x8B 0x08&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Gzip flags&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| I2P Source port (Gzip mtime)&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| I2P Destination port (Gzip mtime)&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Gzip xflags&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| I2P Protocol (6 = Streaming, 17 = Datagram, 18 = Raw Datagrams) (Gzip OS)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: I2P protocol numbers 224-254 are reserved for experimental protocols. I2P protocol number 255 is reserved for future expansion.&lt;br /&gt;
&lt;br /&gt;
Data integrity is verified with the standard gzip CRC-32 as specified by [http://www.ietf.org/rfc/rfc1952.txt RFC 1952].&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
* The current authorization mechanism could be modified to use hashed passwords.&lt;br /&gt;
* The Signing Private Keys is included in the Create Lease Set message, it is not required. Revocation is unimplemented. It should be replaced with random data or removed.&lt;br /&gt;
* Some improvements may be able to use messages previously defined but not implemented. For reference, here is the [[_static/pdf/I2CP_spec.pdf|I2CP Protocol Specification Version 0.9]] (PDF) dated August 28, 2003. That document also references the [[_static/pdf/datastructures.pdf|Common Data Structures Specification Version 0.9]].&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
[http://git.repo.i2p/w/libi2cp.git C library implementation]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/api/bob&amp;diff=132</id>
		<title>En/docs/api/bob</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/api/bob&amp;diff=132"/>
		<updated>2020-02-04T14:41:07Z</updated>

		<summary type="html">&lt;p&gt;Idk: Created page with &amp;quot; &amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;  = BOB - Basic Open Bridge =   &amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;  This page was last updated in June 2019....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= BOB - Basic Open Bridge =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page was last updated in June 2019.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
== Language libraries for the BOB API ==&lt;br /&gt;
&lt;br /&gt;
* Go - [https://bitbucket.org/kallevedin/ccondom ccondom]&lt;br /&gt;
* Python - [http://git.repo.i2p.xyz/w/i2py-bob.git i2py-bob]&lt;br /&gt;
* Twisted - [https://pypi.python.org/pypi/txi2p txi2p]&lt;br /&gt;
* C++ - [https://gitlab.com/rszibele/bobcpp bobcpp]&lt;br /&gt;
&lt;br /&gt;
== Technical differences from SAMv3 ==&lt;br /&gt;
&lt;br /&gt;
At this point, most of the good ideas from BOB have been incorporated into SAMv3, which has more features and more real-world use. BOB still works, but it is not gaining the advanced features available to SAMv3 and is essentially unsupported at this time.&lt;br /&gt;
&lt;br /&gt;
Alternatives: [[en/docs/api/samv3|SAM V3]]. Older versions: [[en/docs/api/sam|SAM V1]], [[en/docs/api/samv2|SAM V2]],&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KEYS&amp;lt;/code&amp;gt; = keypair public+private, these are BASE64&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;KEY&amp;lt;/code&amp;gt; = public key, also BASE64&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ERROR&amp;lt;/code&amp;gt; as is implied returns the message &amp;lt;code&amp;gt;&amp;amp;quot;ERROR &amp;amp;quot;+DESCRIPTION+&amp;amp;quot;\n&amp;amp;quot;&amp;lt;/code&amp;gt;, where the &amp;lt;code&amp;gt;DESCRIPTION&amp;lt;/code&amp;gt; is what went wrong.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;&amp;amp;quot;OK&amp;amp;quot;&amp;lt;/code&amp;gt;, and if data is to be returned, it is on the same line. &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; means the command is finished.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DATA&amp;lt;/code&amp;gt; lines contain information that you requested. There may be multiple &amp;lt;code&amp;gt;DATA&amp;lt;/code&amp;gt; lines per request.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The help command is the ONLY command that has an exception to the rules... it can actually return nothing! This is intentional, since help is a HUMAN and not an APPLICATION command.&lt;br /&gt;
&lt;br /&gt;
== Connection and Version ==&lt;br /&gt;
&lt;br /&gt;
All BOB status output is by lines. Lines may be \n or \r\n terminated, depending on the system. On connection, BOB outputs two lines:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;highlight&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;BOB version&lt;br /&gt;
OK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The current version is: 00.00.10&lt;br /&gt;
&lt;br /&gt;
Note that previous versions used upper-case hex digits and did not conform to I2P versioning standards. It is recommended that subsequent versions use digits 0-9 only. 00.00.10&lt;br /&gt;
&lt;br /&gt;
Version history&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Version&lt;br /&gt;
! I2P Router Version&lt;br /&gt;
! Changes&lt;br /&gt;
|-&lt;br /&gt;
| 00.00.10&lt;br /&gt;
| 0.9.8&lt;br /&gt;
| current version&lt;br /&gt;
|-&lt;br /&gt;
| 00.00.00 - 00.00.0F&lt;br /&gt;
|  &lt;br /&gt;
| development versions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PLEASE NOTE:&#039;&#039;&#039; For CURRENT details on the commands PLEASE use the built-in help command. Just telnet to localhost 2827 and type help and you can get full documentation on each command.&lt;br /&gt;
&lt;br /&gt;
Commands never get obsoleted or changed, however new commands do get added from time to time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;highlight&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;COMMAND     OPERAND                             RETURNS&lt;br /&gt;
help        (optional command to get help on)   NOTHING or OK and description of the command&lt;br /&gt;
clear                                           ERROR or OK&lt;br /&gt;
getdest                                         ERROR or OK and KEY&lt;br /&gt;
getkeys                                         ERROR or OK and KEYS&lt;br /&gt;
getnick     tunnelname                          ERROR or OK&lt;br /&gt;
inhost      hostname or IP address              ERROR or OK&lt;br /&gt;
inport      port number                         ERROR or OK&lt;br /&gt;
list                                            ERROR or DATA lines and final OK&lt;br /&gt;
lookup      hostname                            ERROR or OK and KEY&lt;br /&gt;
newkeys                                         ERROR or OK and KEY&lt;br /&gt;
option      key1=value1 key2=value2...          ERROR or OK&lt;br /&gt;
outhost     hostname or IP address              ERROR or OK&lt;br /&gt;
outport     port number                         ERROR or OK&lt;br /&gt;
quiet                                           ERROR or OK&lt;br /&gt;
quit                                            OK and terminates the command connection&lt;br /&gt;
setkeys     KEYS                                ERROR or OK and KEY&lt;br /&gt;
setnick     tunnel nickname                     ERROR or OK&lt;br /&gt;
show                                            ERROR or OK and information&lt;br /&gt;
showprops                                       ERROR or OK and information&lt;br /&gt;
start                                           ERROR or OK&lt;br /&gt;
status      tunnel nickname                     ERROR or OK and information&lt;br /&gt;
stop                                            ERROR or OK&lt;br /&gt;
verify      KEY                                 ERROR or OK&lt;br /&gt;
visit                                           OK, and dumps BOB&#039;s threads to the wrapper.log&lt;br /&gt;
zap                                             nothing, quits BOB&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Once set up, all TCP sockets can and will block as needed, and there is no need for any additional messages to/from the command channel. This allows the router to pace the stream without exploding with OOM like SAM does as it chokes on attempting to shove many streams in or out one socket -- that can&#039;t scale when you have alot of connections!&lt;br /&gt;
&lt;br /&gt;
What is also nice about this particular interface is that writing anything to interface to it, is much much easier than SAM. There is no other processing to do after the set up. It&#039;s configuration is so simple, that very simple tools, such as nc (netcat) can be used to point to some application. The value there is that one could schedule up and down times for an application, and not have to change the application to do that, or to even have to stop that application. Instead, you can literally &amp;amp;quot;unplug&amp;amp;quot; the destination, and &amp;amp;quot;plug it in&amp;amp;quot; again. As long as the same IP/port addresses and destination keys are used when bringing the bridge up, the normal TCP application won&#039;t care, and won&#039;t notice. It will simply be fooled -- the destinations are not reachable, and that nothing is coming in.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
For the following example, we&#039;ll setup a very simple local loopback connection, with two destinations. Destination &amp;amp;quot;mouth&amp;amp;quot; will be the CHARGEN service from the INET superserver daemon. Destination &amp;amp;quot;ear&amp;amp;quot; will be a local port that you can telnet into, and watch the pretty ASCII test puke forth.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;highlight&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;EXAMPLE SESSION DIALOGUE -- simple telnet 127.0.0.1 2827 works&lt;br /&gt;
A = Application&lt;br /&gt;
C = BOB&#039;s Command response.&lt;br /&gt;
&lt;br /&gt;
FROM    TO      DIALOGUE&lt;br /&gt;
C       A       BOB 00.00.10&lt;br /&gt;
C       A       OK&lt;br /&gt;
A       C       setnick mouth&lt;br /&gt;
C       A       OK Nickname set to mouth&lt;br /&gt;
A       C       newkeys&lt;br /&gt;
C       A       OK ZMPz1zinTdy3~zGD~f3g9aikZTipujEvvXOEyYfq4Su-mNKerqG710hFbkR6P-xkouVyNQsqWLI8c6ngnkSwGdUfM7hGccqBYDjIubTrlr~0g2-l0vM7Y8nSqtFrSdMw~pyufXZ0Ys3NqUSb8NuZXpiH2lCCkFG21QPRVfKBGwvvyDVU~hPVfBHuR8vkd5x0teMXGGmiTzdB96DuNRWayM0y8vkP-1KJiPFxKjOXULjuXhLmINIOYn39bQprq~dAtNALoBgd-waZedYgFLvwHDCc9Gui8Cpp41EihlYGNW0cu0vhNFUN79N4DEpO7AtJyrSu5ZjFTAGjLw~lOvhyO2NwQ4RiC4UCKSuM70Fz0BFKTJquIjUNkQ8pBPBYvJRRlRG9HjAcSqAMckC3pvKKlcTJJBAE8GqexV7rdCCIsnasJXle-6DoWrDkY1s1KNbEVH6i1iUEtmFr2IHTpPeFCyWfZ581CAFNRbbUs-MmnZu1tXAYF7I2-oXTH2hXoxCGAAAA&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;MAKE NOTE OF THE ABOVE DESTINATION KEY, YOURS WILL BE DIFFERENT!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;highlight&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FROM    TO    DIALOGUE&lt;br /&gt;
A       C     outhost 127.0.0.1&lt;br /&gt;
C       A     OK outhost set&lt;br /&gt;
A       C     outport 19&lt;br /&gt;
C       A     OK outbound port set&lt;br /&gt;
A       C     start&lt;br /&gt;
C       A     OK tunnel starting&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
At this point, there was no error, a destination with a nickname of &amp;amp;quot;mouth&amp;amp;quot; is set up. When you contact the destination provided, you actually connect to the &amp;lt;code&amp;gt;CHARGEN&amp;lt;/code&amp;gt; service on &amp;lt;code&amp;gt;19/TCP&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Now for the other half, so that we can actually contact this destination.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;highlight&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FROM    TO      DIALOGUE&lt;br /&gt;
C       A       BOB 00.00.10&lt;br /&gt;
C       A       OK&lt;br /&gt;
A       C       setnick ear&lt;br /&gt;
C       A       OK Nickname set to ear&lt;br /&gt;
A       C       newkeys&lt;br /&gt;
C       A       OK 8SlWuZ6QNKHPZ8KLUlExLwtglhizZ7TG19T7VwN25AbLPsoxW0fgLY8drcH0r8Klg~3eXtL-7S-qU-wdP-6VF~ulWCWtDMn5UaPDCZytdGPni9pK9l1Oudqd2lGhLA4DeQ0QRKU9Z1ESqejAIFZ9rjKdij8UQ4amuLEyoI0GYs2J~flAvF4wrbF-LfVpMdg~tjtns6fA~EAAM1C4AFGId9RTGot6wwmbVmKKFUbbSmqdHgE6x8-xtqjeU80osyzeN7Jr7S7XO1bivxEDnhIjvMvR9sVNC81f1CsVGzW8AVNX5msEudLEggpbcjynoi-968tDLdvb-CtablzwkWBOhSwhHIXbbDEm0Zlw17qKZw4rzpsJzQg5zbGmGoPgrSD80FyMdTCG0-f~dzoRCapAGDDTTnvjXuLrZ-vN-orT~HIVYoHV7An6t6whgiSXNqeEFq9j52G95MhYIfXQ79pO9mcJtV3sfea6aGkMzqmCP3aikwf4G3y0RVbcPcNMQetDAAAA&lt;br /&gt;
A       C       inhost 127.0.0.1&lt;br /&gt;
C       A       OK inhost set&lt;br /&gt;
A       C       inport 37337&lt;br /&gt;
C       A       OK inbound port set&lt;br /&gt;
A       C       start&lt;br /&gt;
C       A       OK tunnel starting&lt;br /&gt;
A       C       quit&lt;br /&gt;
C       A       OK Bye!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Now all we need to do is telnet into 127.0.0.1, port 37337, send the destination key or host address from addressbook we want to contact. In this case, we want to contact &amp;amp;quot;mouth&amp;amp;quot;, all we do is paste in the key and it goes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The &amp;amp;quot;quit&amp;amp;quot; command in the command channel does NOT disconnect the tunnels like SAM.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;highlight&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ telnet 127.0.0.1 37337&lt;br /&gt;
Trying 127.0.0.1...&lt;br /&gt;
Connected to 127.0.0.1.&lt;br /&gt;
Escape character is &#039;^]&#039;.&lt;br /&gt;
ZMPz1zinTdy3~zGD~f3g9aikZTipujEvvXOEyYfq4Su-mNKerqG710hFbkR6P-xkouVyNQsqWLI8c6ngnkSwGdUfM7hGccqBYDjIubTrlr~0g2-l0vM7Y8nSqtFrSdMw~pyufXZ0Ys3NqUSb8NuZXpiH2lCCkFG21QPRVfKBGwvvyDVU~hPVfBHuR8vkd5x0teMXGGmiTzdB96DuNRWayM0y8vkP-1KJiPFxKjOXULjuXhLmINIOYn39bQprq~dAtNALoBgd-waZedYgFLvwHDCc9Gui8Cpp41EihlYGNW0cu0vhNFUN79N4DEpO7AtJyrSu5ZjFTAGjLw~lOvhyO2NwQ4RiC4UCKSuM70Fz0BFKTJquIjUNkQ8pBPBYvJRRlRG9HjAcSqAMckC3pvKKlcTJJBAE8GqexV7rdCCIsnasJXle-6DoWrDkY1s1KNbEVH6i1iUEtmFr2IHTpPeFCyWfZ581CAFNRbbUs-MmnZu1tXAYF7I2-oXTH2hXoxCGAAAA&lt;br /&gt;
 !&amp;amp;quot;#$%&amp;amp;amp;&#039;()*+,-./0123456789:;&amp;amp;lt;=&amp;amp;gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg&lt;br /&gt;
!&amp;amp;quot;#$%&amp;amp;amp;&#039;()*+,-./0123456789:;&amp;amp;lt;=&amp;amp;gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh&lt;br /&gt;
&amp;amp;quot;#$%&amp;amp;amp;&#039;()*+,-./0123456789:;&amp;amp;lt;=&amp;amp;gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi&lt;br /&gt;
#$%&amp;amp;amp;&#039;()*+,-./0123456789:;&amp;amp;lt;=&amp;amp;gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij&lt;br /&gt;
$%&amp;amp;amp;&#039;()*+,-./0123456789:;&amp;amp;lt;=&amp;amp;gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
After a few virtual miles of this spew, press &amp;lt;code&amp;gt;Control-]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;highlight&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;...&lt;br /&gt;
cdefghijklmnopqrstuvwxyz{|}~ !&amp;amp;quot;#$%&amp;amp;amp;&#039;()*+,-./0123456789:;&amp;amp;lt;=&amp;amp;gt;?@ABCDEFGHIJK&lt;br /&gt;
defghijklmnopqrstuvwxyz{|}~ !&amp;amp;quot;#$%&amp;amp;amp;&#039;()*+,-./0123456789:;&amp;amp;lt;=&amp;amp;gt;?@ABCDEFGHIJKL&lt;br /&gt;
efghijklmnopqrstuvwxyz{|}~ !&amp;amp;quot;#$%&amp;amp;amp;&#039;()*+,-./0123456789:;&amp;amp;lt;=&lt;br /&gt;
telnet&amp;amp;gt; c&lt;br /&gt;
Connection closed.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Here is what happened...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;highlight&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;telnet -&amp;amp;gt; ear -&amp;amp;gt; i2p -&amp;amp;gt; mouth -&amp;amp;gt; chargen -.&lt;br /&gt;
telnet &amp;amp;lt;- ear &amp;amp;lt;- i2p &amp;amp;lt;- mouth &amp;amp;lt;-----------&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
You can connect to EEPSITES too!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;highlight&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ telnet 127.0.0.1 37337&lt;br /&gt;
Trying 127.0.0.1...&lt;br /&gt;
Connected to 127.0.0.1.&lt;br /&gt;
Escape character is &#039;^]&#039;.&lt;br /&gt;
i2host.i2p&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 200 OK&lt;br /&gt;
Date: Fri, 05 Dec 2008 14:20:28 GMT&lt;br /&gt;
Connection: close&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Content-Length: 3946&lt;br /&gt;
Last-Modified: Fri, 05 Dec 2008 10:33:36 GMT&lt;br /&gt;
Accept-Ranges: bytes&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;html&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;head&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;title&amp;amp;gt;I2HOST&amp;amp;lt;/title&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;link rel=&amp;amp;quot;shortcut icon&amp;amp;quot; href=&amp;amp;quot;favicon.ico&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/head&amp;amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;amp;lt;a href=&amp;amp;quot;http://sponge.i2p/&amp;amp;quot;&amp;amp;gt;--Sponge.&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;/pre&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;img src=&amp;amp;quot;/counter.gif&amp;amp;quot; alt=&amp;amp;quot;!@^7A76Z!#(*&amp;amp;amp;amp;%&amp;amp;quot;&amp;amp;gt; visitors. &amp;amp;lt;/body&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/html&amp;amp;gt;&lt;br /&gt;
Connection closed by foreign host.&lt;br /&gt;
$&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Pretty cool isn&#039;t it? Try some other well known EEPSITES if you like, nonexistent ones, etc, to get a feel for what kind of output to expect in different situations. For the most part, it is suggested that you ignore any of the error messages. They would be meaningless to the application, and are only presented for human debugging.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s put down our destinations now that we are all done with them.&lt;br /&gt;
&lt;br /&gt;
First, lets see what destination nicknames we have.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;highlight&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FROM        TO      DIALOGUE&lt;br /&gt;
A       C       list&lt;br /&gt;
C       A       DATA NICKNAME: mouth STARTING: false RUNNING: true STOPPING: false KEYS: true QUIET: false INPORT: not_set INHOST: localhost OUTPORT: 19 OUTHOST: 127.0.0.1&lt;br /&gt;
C       A       DATA NICKNAME: ear STARTING: false RUNNING: true STOPPING: false KEYS: true QUIET: false INPORT: 37337 INHOST: 127.0.0.1 OUTPORT: not_set OUTHOST: localhost&lt;br /&gt;
C       A       OK Listing done&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Alright, there they are. First, let&#039;s remove &amp;amp;quot;mouth&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;highlight&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FROM        TO      DIALOGUE&lt;br /&gt;
A       C       getnick mouth&lt;br /&gt;
C       A       OK Nickname set to mouth&lt;br /&gt;
A       C       stop&lt;br /&gt;
C       A       OK tunnel stopping&lt;br /&gt;
A       C       clear&lt;br /&gt;
C       A       OK cleared&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Now to remove &amp;amp;quot;ear&amp;amp;quot;, note that this is what happens when you type too fast, and shows you what typical ERROR messages looks like.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;highlight&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;FROM        TO      DIALOGUE&lt;br /&gt;
A       C       getnick ear&lt;br /&gt;
C       A       OK Nickname set to ear&lt;br /&gt;
A       C       stop&lt;br /&gt;
C       A       OK tunnel stopping&lt;br /&gt;
A       C       clear&lt;br /&gt;
C       A       ERROR tunnel is active&lt;br /&gt;
A       C       clear&lt;br /&gt;
C       A       OK cleared&lt;br /&gt;
A       C       quit&lt;br /&gt;
C       A       OK Bye!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
I won&#039;t bother to show an example of the receiver end of a bridge because it is very simple. There are two possible settings for it, and it is toggled with the &amp;amp;quot;quiet&amp;amp;quot; command.&lt;br /&gt;
&lt;br /&gt;
The default is NOT quiet, and the first data to come into your listening socket is the destination that is making the contact. It is a single line consisting of the BASE64 address followed by a newline. Everything after that is for the application to actually consume.&lt;br /&gt;
&lt;br /&gt;
In quiet mode, think of it as a regular Internet connection. No extra data comes in at all. It&#039;s just as if you are plain connected to the regular Internet. This mode allows a form of transparency much like is available on the router console tunnel settings pages, so that you can use BOB to point a destination at a web server, for example, and you would not have to modify the web server at all.&lt;br /&gt;
&lt;br /&gt;
The advantage with using BOB for this is as discussed previously. You could schedule random uptimes for the application, redirect to a different machine, etc. One use of this may be something like wanting to try to goof up router-to-destination upness guessing. You could stop and start the destination with a totally different process to make random up and down times on services. That way you would only be stopping the ability to contact such a service, and not have to bother shutting it down and restarting it. You could redirect and point to a different machine on your LAN while you do updates, or point to a set of backup machines depending on what is running, etc, etc. Only your imagination limits what you could do with BOB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/api/samv3&amp;diff=131</id>
		<title>En/docs/api/samv3</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=En/docs/api/samv3&amp;diff=131"/>
		<updated>2020-02-04T14:38:43Z</updated>

		<summary type="html">&lt;p&gt;Idk: Created page with &amp;quot; &amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;  = SAM V3 =   &amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;  This page was last updated in June 2019 and is accurate for...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SAM V3 =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page was last updated in June 2019 and is accurate for router version 0.9.39.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Specified below is a simple client protocol for interacting with I2P.&lt;br /&gt;
&lt;br /&gt;
SAM version 3 was introduced in I2P release 0.7.3. Alternatives: [[en/docs/api/bob|BOB(unsupported)]]. Older versions: [[en/docs/api/sam|SAM V1]], [[en/docs/api/samv2|SAM V2]],&lt;br /&gt;
&lt;br /&gt;
== Known SAM libraries ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;8%&amp;quot;| Library Name&lt;br /&gt;
!width=&amp;quot;8%&amp;quot;| Language&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;| Version&lt;br /&gt;
!width=&amp;quot;4%&amp;quot;| STREAM&lt;br /&gt;
!width=&amp;quot;3%&amp;quot;| DGRAM&lt;br /&gt;
!width=&amp;quot;2%&amp;quot;| RAW&lt;br /&gt;
!width=&amp;quot;65%&amp;quot;| Site&lt;br /&gt;
|-&lt;br /&gt;
| i2psam&lt;br /&gt;
| C++, C wrapper&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
| [https://github.com/i2p/i2psam github.com/i2p/i2psam]&lt;br /&gt;
|-&lt;br /&gt;
| gosam&lt;br /&gt;
| Go&lt;br /&gt;
| 3.2&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
| no&lt;br /&gt;
| [https://github.com/eyedeekay/goSam github.com/eyedeekay/goSam]&lt;br /&gt;
|-&lt;br /&gt;
| sam3&lt;br /&gt;
| Go&lt;br /&gt;
| 3.2&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://bitbucket.org/eyedeekay/sam3 bitbucket.org/eyedeekay/sam3]&lt;br /&gt;
|-&lt;br /&gt;
| txi2p&lt;br /&gt;
| Python&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
| no&lt;br /&gt;
| [https://github.com/str4d/txi2p github.com/str4d/txi2p]&lt;br /&gt;
|-&lt;br /&gt;
| i2p.socket&lt;br /&gt;
| Python&lt;br /&gt;
| 3.2&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://github.com/majestrate/i2p.socket github.com/majestrate/i2p.socket]&lt;br /&gt;
|-&lt;br /&gt;
| i2plib&lt;br /&gt;
| Python&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://github.com/l-n-s/i2plib github.com/l-n-s/i2plib]&lt;br /&gt;
|-&lt;br /&gt;
| i2p-rs&lt;br /&gt;
| Rust&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://github.com/i2p/i2p-rs github.com/i2p/i2p-rs]&lt;br /&gt;
|-&lt;br /&gt;
| libsam3&lt;br /&gt;
| C&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://github.com/i2p/libsam3 github.com/i2p/libsam3]&lt;br /&gt;
|-&lt;br /&gt;
| mooni2p&lt;br /&gt;
| Lua&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://notabug.org/l-n-s/mooni2p notabug.org/l-n-s/mooni2p]&lt;br /&gt;
|-&lt;br /&gt;
| haskell-network-anonymous-i2p&lt;br /&gt;
| Haskell&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://github.com/solatis/haskell-network-anonymous-i2p github.com/solatis/haskell-network-anonymous-i2p]&lt;br /&gt;
|-&lt;br /&gt;
| node-i2p&lt;br /&gt;
| Javascript&lt;br /&gt;
| 3.0&lt;br /&gt;
| yes&lt;br /&gt;
| unk&lt;br /&gt;
| unk&lt;br /&gt;
| [https://github.com/redhog/node-i2p github.com/redhog/node-i2p]&lt;br /&gt;
|-&lt;br /&gt;
| Jsam&lt;br /&gt;
| Java&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
| no&lt;br /&gt;
| [https://github.com/eyedeekay/Jsam github.com/eyedeekay/Jsam]&lt;br /&gt;
|-&lt;br /&gt;
| i2pdotnet&lt;br /&gt;
| .Net&lt;br /&gt;
| 3.0&lt;br /&gt;
| yes&lt;br /&gt;
| unk&lt;br /&gt;
| unk&lt;br /&gt;
| [https://github.com/SamuelFisher/i2pdotnet github.com/SamuelFisher/i2pdotnet]&lt;br /&gt;
|-&lt;br /&gt;
| i2p.rb&lt;br /&gt;
| Ruby&lt;br /&gt;
| 3.0&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
| no&lt;br /&gt;
| [https://github.com/dryruby/i2p.rb github.com/dryruby/i2p.rb]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Version 3 Changes ==&lt;br /&gt;
&lt;br /&gt;
=== Version 3.0 Changes ===&lt;br /&gt;
&lt;br /&gt;
Version 3.0 was introduced in I2P release 0.7.3. SAM v2 provided a way to manage several sockets on the same I2P destination &#039;&#039;in parallel&#039;&#039;, i.e. the client does not have to wait for data being successfully sent on one socket before sending data on another socket. But all data transited through the same client&amp;amp;lt;--&amp;amp;gt;SAM socket, which was quite complicated to manage for the client.&lt;br /&gt;
&lt;br /&gt;
SAM v3 manages sockets in a different way: each &#039;&#039;I2P socket&#039;&#039; matches a unique client&amp;amp;lt;--&amp;amp;gt;SAM socket, which is much more simple to handle. This is similar to [[en/docs/api/bob|BOB]].&amp;lt;br /&amp;gt;&lt;br /&gt;
SAM v3 also offers a UDP port for sending datagrams through I2P, and can forward back I2P datagrams to the client&#039;s datagram server.&lt;br /&gt;
=== Version 3.1 Changes ===&lt;br /&gt;
&lt;br /&gt;
Version 3.1 was introduced in I2P release 0.9.14. SAM 3.1 is the recommended minimum SAM implementation because of its support for better signature types than SAM 3.0.&lt;br /&gt;
&lt;br /&gt;
* DEST GENERATE and SESSION CREATE now support a SIGNATURE_TYPE parameter.&lt;br /&gt;
* The MIN and MAX parameters in HELLO VERSION are now optional.&lt;br /&gt;
* The MIN and MAX parameters in HELLO VERSION now support single-digit versions such as &amp;amp;quot;3&amp;amp;quot;.&lt;br /&gt;
* RAW SEND is now supported on the bridge socket.&lt;br /&gt;
&lt;br /&gt;
=== Version 3.2 Changes ===&lt;br /&gt;
&lt;br /&gt;
Version 3.2 was introduced in I2P release 0.9.24.&lt;br /&gt;
&lt;br /&gt;
==== I2CP Port and Protocol Support ====&lt;br /&gt;
&lt;br /&gt;
* SESSION CREATE options FROM_PORT and TO_PORT&lt;br /&gt;
* SESSION CREATE STYLE=RAW option PROTOCOL&lt;br /&gt;
* STREAM CONNECT, DATAGRAM SEND, and RAW SEND options FROM_PORT and TO_PORT&lt;br /&gt;
* RAW SEND option PROTOCOL&lt;br /&gt;
* DATAGRAM RECEIVED, RAW RECEIVED, and forwarded or received streams and repliable datagrams, includes FROM_PORT and TO_PORT&lt;br /&gt;
* RAW session option HEADER=true will cause the forwarded raw datagrams to be prepended with a line containing PROTOCOL=nnn FROM_PORT=nnnn TO_PORT=nnnn&lt;br /&gt;
* The first line of datagrams sent through port 7655 may now start with any 3.x version&lt;br /&gt;
* The first line of datagrams sent through port 7655 may contain any of the options FROM_PORT, TO_PORT, PROTOCOL&lt;br /&gt;
* RAW RECEIVED includes PROTOCOL=nnn&lt;br /&gt;
&lt;br /&gt;
==== SSL and Authentication ====&lt;br /&gt;
&lt;br /&gt;
* USER/PASSWORD in the HELLO parameters for authorization. See [[#userpw|below]].&lt;br /&gt;
* Optional authorization configuration with the AUTH command. See [[#auth|below]].&lt;br /&gt;
* Optional SSL/TLS support on the control socket. See [[#ssl|below]].&lt;br /&gt;
* STREAM FORWARD option SSL=true&lt;br /&gt;
&lt;br /&gt;
==== Multithreading ====&lt;br /&gt;
&lt;br /&gt;
* Concurrent pending STREAM ACCEPTs are allowed on the same session ID.&lt;br /&gt;
&lt;br /&gt;
==== Command Line Parsing and Keepalive ====&lt;br /&gt;
&lt;br /&gt;
* Optional commands QUIT, STOP and EXIT to close the session and socket. See [[#quit|below]].&lt;br /&gt;
* Command parsing will properly handle UTF-8&lt;br /&gt;
* Command parsing reliably handles whitespace inside quotes&lt;br /&gt;
* A backslash &#039;\&#039; may escape quotes on the command line&lt;br /&gt;
* Recommended that the server map commands to upper case, for ease in testing via telnet.&lt;br /&gt;
* Empty option values such as PROTOCOL or PROTOCOL= may be allowed, implementation dependent.&lt;br /&gt;
* PING/PONG for keepalive. See below.&lt;br /&gt;
* Servers may implement timeouts for the HELLO or subsequent commands, implementation dependent.&lt;br /&gt;
&lt;br /&gt;
=== Version 3.3 Changes ===&lt;br /&gt;
&lt;br /&gt;
Version 3.3 was introduced in I2P release 0.9.25.&lt;br /&gt;
&lt;br /&gt;
* The same session may be used for streams, datagrams, and raw simultaneously. Incoming packets and streams will be routed based on I2P protocol and to-port. See [[#master|the MASTER section below]].&lt;br /&gt;
* DATAGRAM SEND and RAW SEND now support options SEND_TAGS, TAG_THRESHOLD, EXPIRES, and SEND_LEASESET. See [[#v3dgsend|the datagram sending section below]].&lt;br /&gt;
&lt;br /&gt;
== Version 3 Protocol ==&lt;br /&gt;
&lt;br /&gt;
=== Simple Anonymous Messaging (SAM) Version 3.3 Specification Overview ===&lt;br /&gt;
&lt;br /&gt;
The client application talks to the SAM bridge, which deals with all of the I2P functionality (using the [[en/docs/api/streaming|streaming library]] for virtual streams, or [[en/docs/protocol/i2cp|I2CP]] directly for datagrams).&lt;br /&gt;
&lt;br /&gt;
By default, the client&amp;amp;lt;--&amp;amp;gt;SAM bridge communication is unencrypted and unauthenticated. The SAM bridge may support SSL/TLS connections; configuration and implementation details are outside the scope of this specification. As of SAM 3.2, optional authentication user/password parameters are supported in the initial handshake and may be required by the bridge.&lt;br /&gt;
&lt;br /&gt;
I2P communications can take three distinct forms:&lt;br /&gt;
&lt;br /&gt;
* [[en/docs/api/streaming|Virtual streams]]&lt;br /&gt;
* [[en/docs/spec/datagrams#repliable|Repliable datagrams]] (messages with a FROM field)&lt;br /&gt;
* [[en/docs/spec/datagrams#raw|Anonymous datagrams]] (raw anonymous messages)&lt;br /&gt;
&lt;br /&gt;
I2P communications are supported by I2P sessions, and each I2P session is bound to an address (called destination). An I2P session is associated with one of the three types above, and cannot carry communications of another type, unless using [[#master|MASTER sessions]].&lt;br /&gt;
&lt;br /&gt;
=== Encoding and Escaping ===&lt;br /&gt;
&lt;br /&gt;
All of these SAM messages are sent on a single line, terminated by the newline character (\n). Prior to SAM 3.2, only 7-bit ASCII was supported. As of SAM 3.2, the encoding must be UTF-8. Any UTF8-encoded keys or values should work.&lt;br /&gt;
&lt;br /&gt;
The formatting shown in this specification below is merely for readability, and while the first two words in each message must stay in their specific order, the ordering of the key=value pairs can change (e.g. &amp;amp;quot;ONE TWO A=B C=D&amp;amp;quot; or &amp;amp;quot;ONE TWO C=D A=B&amp;amp;quot; are both perfectly valid constructions). In addition, the protocol is case-sensitive. In the following, message examples are preceded by &amp;amp;quot;-&amp;amp;gt; &amp;amp;quot; for messages sent by the client to the SAM bridge, and by &amp;amp;quot;&amp;amp;lt;- &amp;amp;quot; for messages sent by the SAM bridge to the client.&lt;br /&gt;
&lt;br /&gt;
The basic command or response line takes one of the following forms:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;     COMMAND SUBCOMMAND [key=value] [key=value] ...&lt;br /&gt;
     COMMAND                                           # As of SAM 3.2&lt;br /&gt;
     PING[ arbitrary text]                             # As of SAM 3.2&lt;br /&gt;
     PONG[ arbitrary text]                             # As of SAM 3.2&amp;lt;/pre&amp;gt;&lt;br /&gt;
COMMAND without a SUBCOMMAND is supported for some new commands in SAM 3.2 only.&lt;br /&gt;
Key=value pairs must be separated by a single space. (As of SAM 3.2, multiple spaces are allowed) Values may be enclosed in double quotes if they contain spaces, e.g. key=&amp;amp;quot;long value text&amp;amp;quot;. (Prior to SAM 3.2, this did not work reliably in some implementations)&lt;br /&gt;
&lt;br /&gt;
Prior to SAM 3.2, there was no escaping mechanism. As of SAM 3.2, double quotes may be escaped with a backslash &#039;\&#039; and a backslash may be represented as two backslashes &#039;\\&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Empty values ===&lt;br /&gt;
&lt;br /&gt;
As of SAM 3.2, empty option values such as KEY, KEY=, or KEY=&amp;amp;quot;&amp;amp;quot; may be allowed, implementation dependent.&lt;br /&gt;
&lt;br /&gt;
=== Case Sensitivity ===&lt;br /&gt;
&lt;br /&gt;
The protocol, as specified, is case-sensitive. It is recommended but not required that the server map commands to upper case, for ease in testing via telnet. This would allow, for example, &amp;amp;quot;hello version&amp;amp;quot; to work. This is implementation-dependent. Do not map keys or values to upper case, as this would corrupt [[en/docs/protocol/i2cp|I2CP]] options.&lt;br /&gt;
&lt;br /&gt;
=== SAM Connection Handshake ===&lt;br /&gt;
&lt;br /&gt;
No SAM communication can occur until after the client and bridge have agreed on a protocol version, which is done by the client sending a HELLO and the bridge sending a HELLO REPLY:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  HELLO VERSION&lt;br /&gt;
          [MIN=$min]            # Optional as of SAM 3.1, required for 3.0 and earlier&lt;br /&gt;
          [MAX=$max]            # Optional as of SAM 3.1, required for 3.0 and earlier&lt;br /&gt;
          [USER=&amp;amp;quot;xxx&amp;amp;quot;]          # As of SAM 3.2, required if authentication is enabled, see below&lt;br /&gt;
          [PASSWORD=&amp;amp;quot;yyy&amp;amp;quot;]      # As of SAM 3.2, required if authentication is enabled, see below&amp;lt;/pre&amp;gt;&lt;br /&gt;
and&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  HELLO REPLY RESULT=OK VERSION=3.1&amp;lt;/pre&amp;gt;&lt;br /&gt;
As of version 3.1 (I2P 0.9.14), the MIN and MAX parameters are optional. SAM will always return the highest version possible given the MIN and MAX constraints, or the current server version if no constraints are given. If the SAM bridge cannot find a suitable version, it replies with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- HELLO REPLY RESULT=NOVERSION&amp;lt;/pre&amp;gt;&lt;br /&gt;
If some error occurred, such as a bad request format, it replies with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- HELLO REPLY RESULT=I2P_ERROR MESSAGE=$message&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== SSL ====&lt;br /&gt;
&lt;br /&gt;
The server&#039;s control socket may optionally offer SSL/TLS support, as configured on the server and client. Implementations may offer other transport layers as well; this is outside the scope of the protocol definition.&lt;br /&gt;
&lt;br /&gt;
==== Authorization ====&lt;br /&gt;
&lt;br /&gt;
For authorization, client adds USER=&amp;amp;quot;xxx&amp;amp;quot; PASSWORD=&amp;amp;quot;yyy&amp;amp;quot; to the HELLO parameters. Double quotes for user and password are recommended but not required. A double quote inside a user or password must be escaped with a backslash. On failure the server will reply with an I2P_ERROR and a message. It is recommended that SSL be enabled on any SAM servers where authorization is required.&lt;br /&gt;
&lt;br /&gt;
==== Timeouts ====&lt;br /&gt;
&lt;br /&gt;
Servers may implement timeouts for the HELLO or subsequent commands, implementation dependent. Clients should promptly send the HELLO and the next command after connecting.&lt;br /&gt;
&lt;br /&gt;
If a timeout occurs before the HELLO is received, the bridge replies with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- HELLO REPLY RESULT=I2P_ERROR MESSAGE=$message&amp;lt;/pre&amp;gt;&lt;br /&gt;
and then disconnects.&lt;br /&gt;
If a timeout occurs after the HELLO is received but before the next command, the bridge replies with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- SESSION STATUS RESULT=I2P_ERROR MESSAGE=$message&amp;lt;/pre&amp;gt;&lt;br /&gt;
and then disconnects.&lt;br /&gt;
=== I2CP Ports and Protocol ===&lt;br /&gt;
&lt;br /&gt;
As of SAM 3.2, the [[en/docs/protocol/i2cp|I2CP]] ports and protocol may be specified by the SAM client sender to be passed through to [[en/docs/protocol/i2cp|I2CP]], and the SAM bridge will pass the received [[en/docs/protocol/i2cp|I2CP]] port and protocol information to the SAM client.&lt;br /&gt;
&lt;br /&gt;
For FROM_PORT and TO_PORT, the valid range is 0-65535, and the default is 0.&lt;br /&gt;
&lt;br /&gt;
For PROTOCOL, which may be specified only for RAW, the valid range is 0-255, and the default is 18.&lt;br /&gt;
&lt;br /&gt;
For SESSION commands, the specified ports and protocol are the defaults for that session. For individual streams or datagrams, the specified ports and protocol override the session defaults. For received streams or datagrams, the indicated ports and protocol are as received from [[en/docs/protocol/i2cp|I2CP]].&lt;br /&gt;
&lt;br /&gt;
See the [[en/docs/protocol/i2cp|I2CP]] specification for more information.&lt;br /&gt;
&lt;br /&gt;
=== SAM Sessions ===&lt;br /&gt;
&lt;br /&gt;
A SAM session is created by a client opening a socket to the SAM bridge, operating a handshake, and sending a SESSION CREATE message, and the session terminates when the socket is disconnected.&lt;br /&gt;
&lt;br /&gt;
Each registered I2P Destination is uniquely associated with a session ID (or nickname).&lt;br /&gt;
&lt;br /&gt;
Each session is uniquely associated with:&lt;br /&gt;
&lt;br /&gt;
* the socket from which the client creates the session&lt;br /&gt;
* its ID (or nickname)&lt;br /&gt;
&lt;br /&gt;
==== Session Creation Request ====&lt;br /&gt;
&lt;br /&gt;
The session creation message can only use one of these forms (messages received through other forms are answered with an error message) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  SESSION CREATE&lt;br /&gt;
          STYLE={STREAM,DATAGRAM,RAW}&lt;br /&gt;
          ID=$nickname&lt;br /&gt;
          DESTINATION={$privkey,TRANSIENT}&lt;br /&gt;
          [SIGNATURE_TYPE=value]               # SAM 3.1 or higher only, for DESTINATION=TRANSIENT only, default DSA_SHA1&lt;br /&gt;
          [PORT=$port]                         # Required for DATAGRAM and RAW, invalid for STREAM&lt;br /&gt;
          [HOST=$host]                         # Optional for DATAGRAM and RAW, invalid for STREAM&lt;br /&gt;
          [FROM_PORT=nnn]                      # SAM 3.2 or higher only, default 0&lt;br /&gt;
          [TO_PORT=nnn]                        # SAM 3.2 or higher only, default 0&lt;br /&gt;
          [PROTOCOL=nnn]                       # SAM 3.2 or higher only, for STYLE=RAW only, default 18&lt;br /&gt;
          [HEADER={true,false}]                # SAM 3.2 or higher only, for STYLE=RAW only, default false&lt;br /&gt;
          [option=value]*                      # I2CP and streaming options&amp;lt;/pre&amp;gt;&lt;br /&gt;
DESTINATION specifies what destination should be used for sending and receiving messages/streams. The $privkey is the base 64 of the concatenation of the [[en/docs/spec/common-structures#type_Destination|Destination]] followed by the [[en/docs/spec/common-structures#type_PrivateKey|Private Key]] followed by the [[en/docs/spec/common-structures#type_SigningPrivateKey|Signing Private Key]], optionally followed by the [[en/docs/spec/common-structures#struct_OfflineSignature|Offline Signature]], which is 663 or more bytes in binary and 884 or more bytes in base 64, depending on signature type. The binary format is specified in [http://echelon.i2p/javadoc/net/i2p/data/PrivateKeyFile.html Private Key File].&lt;br /&gt;
&lt;br /&gt;
If the signing private key is all zeros, the the [[en/docs/spec/common-structures#struct_OfflineSignature|Offline Signature]] section follows. Offline signatures are only supported for STREAM and RAW sessions. Offline signatures may not be created with DESTINATION=TRANSIENT. The format of the offline signature section is:&lt;br /&gt;
&lt;br /&gt;
# - Expires timestamp (4 bytes, big endian, seconds since epoch, rolls over in 2106)&lt;br /&gt;
# - Sig type of transient Signing Public Key (2 bytes, big endian)&lt;br /&gt;
# - Transient Signing Public key (length as specified by transient sig type)&lt;br /&gt;
# - Signature of above three fields by offline key (length as specified by destination sig type)&lt;br /&gt;
# - Transient Signing Private key (length as specified by transient sig type)&lt;br /&gt;
&lt;br /&gt;
If the destination is specified as TRANSIENT, the SAM bridge creates a new destination. As of version 3.1 (I2P 0.9.14), if the destination is TRANSIENT, an optional parameter SIGNATURE_TYPE is supported. The SIGNATURE_TYPE value may be any name (e.g. ECDSA_SHA256_P256, case insensitive) or number (e.g. 1) supported by [[en/docs/spec/common-structures#type_Certificate|Key Certificates]]. The default is DSA_SHA1.&lt;br /&gt;
&lt;br /&gt;
$nickname is the choice of the client. No whitespace is allowed.&lt;br /&gt;
&lt;br /&gt;
Additional options given are passed to the I2P session configuration if not interpreted by the SAM bridge (e.g. outbound.length=0). These options [[#options|are documented below]].&lt;br /&gt;
&lt;br /&gt;
The SAM bridge itself should already be configured with what router it should communicate over I2P through (though if need be there may be a way to provide an override, e.g. i2cp.tcp.host=localhost and i2cp.tcp.port=7654).&lt;br /&gt;
&lt;br /&gt;
==== Session Creation Response ====&lt;br /&gt;
&lt;br /&gt;
After receiving the session create message, the SAM bridge will reply with a session status message, as follows:&lt;br /&gt;
&lt;br /&gt;
If the creation was successful:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  SESSION STATUS RESULT=OK DESTINATION=$privkey&amp;lt;/pre&amp;gt;&lt;br /&gt;
The $privkey is the base 64 of the concatenation of the [[en/docs/spec/common-structures#type_Destination|Destination]] followed by the [[en/docs/spec/common-structures#type_PrivateKey|Private Key]] followed by the [[en/docs/spec/common-structures#type_SigningPrivateKey|Signing Private Key]], optionally followed by the [[en/docs/spec/common-structures#struct_OfflineSignature|Offline Signature]], which is 663 or more bytes in binary and 884 or more bytes in base 64, depending on signature type. The binary format is specified in [http://echelon.i2p/javadoc/net/i2p/data/PrivateKeyFile.html Private Key File].&lt;br /&gt;
&lt;br /&gt;
If the SESSION CREATE contained a signing private key of all zeros and a [[en/docs/spec/common-structures#struct_OfflineSignature|Offline Signature]] section, the SESSION STATUS reply will include the same data in the same format. See the SESSION CREATE section above for details.&lt;br /&gt;
&lt;br /&gt;
If the nickname is already associated with a session:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  SESSION STATUS RESULT=DUPLICATED_ID&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the destination is already in use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  SESSION STATUS RESULT=DUPLICATED_DEST&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the destination is not a valid private destination key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  SESSION STATUS RESULT=INVALID_KEY&amp;lt;/pre&amp;gt;&lt;br /&gt;
If some other error has occurred:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  SESSION STATUS RESULT=I2P_ERROR MESSAGE=$message&amp;lt;/pre&amp;gt;&lt;br /&gt;
If it&#039;s not OK, the MESSAGE should contain human-readable information as to why the session could not be created.&lt;br /&gt;
&lt;br /&gt;
SAM sessions live and die with the socket they are associated with. When the socket is closed, the session dies, and all communications using the session die at the same time. And the other way round, when the session dies for any reason, the SAM bridge closes the socket.&lt;br /&gt;
&lt;br /&gt;
=== SAM Virtual Streams ===&lt;br /&gt;
&lt;br /&gt;
Virtual streams are guaranteed to be sent reliably and in order, with failure and success notification as soon as it is available.&lt;br /&gt;
&lt;br /&gt;
Streams are bidirectional communication sockets between two I2P destinations, but their opening has to be requested by one of them. Hereafter, CONNECT commands are used by the SAM client for such a request. FORWARD / ACCEPT commands are used by the SAM client when he wants to listen to requests coming from other I2P destinations.&lt;br /&gt;
&lt;br /&gt;
=== SAM Virtual Streams : CONNECT ===&lt;br /&gt;
&lt;br /&gt;
A client asks for a connection by:&lt;br /&gt;
&lt;br /&gt;
* opening a new socket with the SAM bridge&lt;br /&gt;
* passing the same HELLO handshake as above&lt;br /&gt;
* sending the STREAM CONNECT command&lt;br /&gt;
&lt;br /&gt;
==== Connect Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt; STREAM CONNECT&lt;br /&gt;
         ID=$nickname&lt;br /&gt;
         DESTINATION=$destination&lt;br /&gt;
         [SILENT={true,false}]                # default false&lt;br /&gt;
         [FROM_PORT=nnn]                      # SAM 3.2 or higher only, default 0&lt;br /&gt;
         [TO_PORT=nnn]                        # SAM 3.2 or higher only, default 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
This establishes a new virtual connection from the local session whose ID is $nickname to the specified peer.&lt;br /&gt;
&lt;br /&gt;
The target is $destination, which is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
&lt;br /&gt;
==== Connect Response ====&lt;br /&gt;
&lt;br /&gt;
If SILENT=true is passed, the SAM bridge won&#039;t issue any other message on the socket. If the connection fails, the socket will be closed. If the connection succeeds, all remaining data passing through the current socket is forwarded from and to the connected I2P destination peer.&lt;br /&gt;
&lt;br /&gt;
If SILENT=false, which is the default value, the SAM bridge sends a last message to its client before forwarding or shutting down the socket:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  STREAM STATUS&lt;br /&gt;
         RESULT=$result&lt;br /&gt;
         [MESSAGE=...]&amp;lt;/pre&amp;gt;&lt;br /&gt;
The RESULT value may be one of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    OK&lt;br /&gt;
    CANT_REACH_PEER&lt;br /&gt;
    I2P_ERROR&lt;br /&gt;
    INVALID_KEY&lt;br /&gt;
    INVALID_ID&lt;br /&gt;
    TIMEOUT&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the RESULT is OK, all remaining data passing through the current socket is forwarded from and to the connected I2P destination peer. If the connection was not possible (timeout, etc), RESULT will contain the appropriate error value (accompanied by an optional human-readable MESSAGE), and the SAM bridge closes the socket.&lt;br /&gt;
&lt;br /&gt;
=== SAM Virtual Streams : ACCEPT ===&lt;br /&gt;
&lt;br /&gt;
A client waits for an incoming connection request by:&lt;br /&gt;
&lt;br /&gt;
* opening a new socket with the SAM bridge&lt;br /&gt;
* passing the same HELLO handshake as above&lt;br /&gt;
* sending the STREAM ACCEPT command&lt;br /&gt;
&lt;br /&gt;
==== Accept Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt; STREAM ACCEPT&lt;br /&gt;
         ID=$nickname&lt;br /&gt;
         [SILENT={true,false}]                # default false&amp;lt;/pre&amp;gt;&lt;br /&gt;
This makes the session ${nickname} listen for one incoming connection request from the I2P network. ACCEPT is not allowed while there is an active FORWARD on the session.&lt;br /&gt;
&lt;br /&gt;
As of SAM 3.2, multiple concurrent pending STREAM ACCEPTs are allowed on the same session ID (even with the same port). Prior to 3.2, concurrent accepts would fail with ALREADY_ACCEPTING.&lt;br /&gt;
&lt;br /&gt;
==== Accept Response ====&lt;br /&gt;
&lt;br /&gt;
If SILENT=true is passed, the SAM bridge won&#039;t issue any other message on the socket. If the accept fails, the socket will be closed. If the accept succeeds, all remaining data passing through the current socket is forwarded from and to the connected I2P destination peer. For reliability, and to receive the destination for incoming connections, SILENT=false is recommended.&lt;br /&gt;
&lt;br /&gt;
If SILENT=false, which is the default value, the SAM bridge answers with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  STREAM STATUS&lt;br /&gt;
         RESULT=$result&lt;br /&gt;
         [MESSAGE=...]&amp;lt;/pre&amp;gt;&lt;br /&gt;
The RESULT value may be one of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    OK&lt;br /&gt;
    I2P_ERROR&lt;br /&gt;
    INVALID_ID&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the result is not OK, the socket is closed immediately by the SAM bridge. If the result is OK, the SAM bridge starts waiting for an incoming connection request from another I2P peer. When a request arrives, the SAM bridge accepts it and:&lt;br /&gt;
&lt;br /&gt;
If SILENT=true was passed, the SAM bridge won&#039;t issue any other message on the client socket. All remaining data passing through the current socket is forwarded from and to the connected I2P destination peer.&lt;br /&gt;
&lt;br /&gt;
If SILENT=false was passed, which is the default value, the SAM bridge sends the client a ASCII line containing the base64 public destination key of the requesting peer, and additional information for SAM 3.2 only:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    $destination&lt;br /&gt;
    FROM_PORT=nnn                      # SAM 3.2 or higher only&lt;br /&gt;
    TO_PORT=nnn                        # SAM 3.2 or higher only&lt;br /&gt;
    \n&amp;lt;/pre&amp;gt;&lt;br /&gt;
After this &#039;\n&#039; terminated line, all remaining data passing through the current socket is forwarded from and to the connected I2P destination peer, until one of the peer closes the socket.&lt;br /&gt;
=== SAM Virtual Streams : FORWARD ===&lt;br /&gt;
&lt;br /&gt;
A client can use a regular socket server and wait for connection requests coming from I2P. For that, the client must:&lt;br /&gt;
&lt;br /&gt;
* open a new socket with the SAM bridge&lt;br /&gt;
* pass the same HELLO handshake as above&lt;br /&gt;
* send the forward command&lt;br /&gt;
&lt;br /&gt;
==== Forward Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt; STREAM FORWARD&lt;br /&gt;
         ID=$nickname&lt;br /&gt;
         PORT=$port&lt;br /&gt;
         [HOST=$host]&lt;br /&gt;
         [SILENT={true,false}]                # default false&lt;br /&gt;
         [SSL={true,false}]                   # SAM 3.2 or higher only, default false&amp;lt;/pre&amp;gt;&lt;br /&gt;
This makes the session ${nickname} listen for incoming connection requests from the I2P network. FORWARD is not allowed while there is a pending ACCEPT on the session.&lt;br /&gt;
&lt;br /&gt;
==== Forward Response ====&lt;br /&gt;
&lt;br /&gt;
SILENT defaults to false. Whether SILENT is true or false, the SAM bridge always answers with a STREAM STATUS message. Note that this is a different behavior from STREAM ACCEPT and STREAM CONNECT when SILENT=true. The STREAM STATUS message is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  STREAM STATUS&lt;br /&gt;
         RESULT=$result&lt;br /&gt;
         [MESSAGE=...]&amp;lt;/pre&amp;gt;&lt;br /&gt;
The RESULT value may be one of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    OK&lt;br /&gt;
    I2P_ERROR&lt;br /&gt;
    INVALID_ID&amp;lt;/pre&amp;gt;&lt;br /&gt;
$host is the hostname or IP address of the socket server to which SAM will forward connection requests. If not given, SAM takes the IP of the socket that issued the forward command.&lt;br /&gt;
&lt;br /&gt;
$port is the port number of the socket server to which SAM will forward connection requests. It is mandatory.&lt;br /&gt;
&lt;br /&gt;
When a connection request arrives from I2P, the SAM bridge requests a socket connection from $host:$port. If it is accepted after no more than 3 seconds, SAM will accept the connection from I2P, and then:&lt;br /&gt;
&lt;br /&gt;
If SILENT=true was passed, all data passing through the obtained current socket is forwarded from and to the connected I2P destination peer.&lt;br /&gt;
&lt;br /&gt;
If SILENT=false was passed, which is the default value, the SAM bridge sends on the obtained socket an ASCII line containing the base64 public destination key of the requesting peer, and additional information for SAM 3.2 only:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    $destination&lt;br /&gt;
    FROM_PORT=nnn                      # SAM 3.2 or higher only&lt;br /&gt;
    TO_PORT=nnn                        # SAM 3.2 or higher only&lt;br /&gt;
    \n&amp;lt;/pre&amp;gt;&lt;br /&gt;
After this &#039;\n&#039; terminated line, all remaining data passing through the socket is forwarded from and to the connected I2P destination peer, until one of the sides closes the socket.&lt;br /&gt;
As of SAM 3.2, if SSL=true is specified, the forwarding socket is over SSL/TLS.&lt;br /&gt;
&lt;br /&gt;
The I2P router will stop listening to incoming connection requests as soon as the &amp;amp;quot;forwarding&amp;amp;quot; socket is closed.&lt;br /&gt;
&lt;br /&gt;
=== SAM Datagrams : Sending Repliable or Raw Datagrams ===&lt;br /&gt;
&lt;br /&gt;
While I2P doesn&#039;t inherently contain a FROM address, for ease of use an additional layer is provided as repliable datagrams - unordered and unreliable messages of up to 31744 bytes that include a FROM address (leaving up to 1KB for header material). This FROM address is authenticated internally by SAM (making use of the destination&#039;s signing key to verify the source) and includes replay prevention.&lt;br /&gt;
&lt;br /&gt;
Minimum size is 1. For best delivery reliability, recommended maximum size is approximately 11 KB. Reliability is inversely proportional to message size, perhaps even exponentially.&lt;br /&gt;
&lt;br /&gt;
After establishing a SAM session with STYLE=DATAGRAM or STYLE=RAW, the client can send repliable or raw datagrams through SAM&#039;s UDP port (7655).&lt;br /&gt;
&lt;br /&gt;
The first line of a datagram sent through this port must be in the following format. This is all on one line (space separated), shown on multiple lines for clarity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    3.0                                  # As of SAM 3.2, any &amp;amp;quot;3.x&amp;amp;quot; is allowed. Prior to that, &amp;amp;quot;3.0&amp;amp;quot; is required.&lt;br /&gt;
    $nickname&lt;br /&gt;
    $destination&lt;br /&gt;
    [FROM_PORT=nnn]                      # SAM 3.2 or higher only, default 0&lt;br /&gt;
    [TO_PORT=nnn]                        # SAM 3.2 or higher only, default 0&lt;br /&gt;
    [PROTOCOL=nnn]                       # SAM 3.2 or higher only, only for RAW sessions, default 18&lt;br /&gt;
    [SEND_TAGS=nnn]                      # SAM 3.3 or higher only, number of session tags to send&lt;br /&gt;
                                         # Overrides crypto.tagsToSend I2CP session option&lt;br /&gt;
                                         # Default is router-dependent (40 for Java router)&lt;br /&gt;
    [TAG_THRESHOLD=nnn]                  # SAM 3.3 or higher only, low session tag threshold&lt;br /&gt;
                                         # Overrides crypto.lowTagThreshold I2CP session option&lt;br /&gt;
                                         # Default is router-dependent (30 for Java router)&lt;br /&gt;
    [EXPIRES=nnn]                        # SAM 3.3 or higher only, expiration from now in seconds&lt;br /&gt;
                                         # Overrides clientMessageTimeout I2CP session option (which is in ms)&lt;br /&gt;
                                         # Default is router-dependent (60 for Java router)&lt;br /&gt;
    [SEND_LEASESET={true,false}]         # SAM 3.3 or higher only, whether to send our leaseset&lt;br /&gt;
                                         # Overrides shouldBundleReplyInfo I2CP session option&lt;br /&gt;
                                         # Default is true&lt;br /&gt;
    \n&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 3.0 is the version of SAM. As of SAM 3.2, any 3.x is allowed.&lt;br /&gt;
* $nickname is the id of the DATAGRAM session that will be used&lt;br /&gt;
* The target is $destination, which is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
* All options are per-datagram settings that override the defaults specified in the SESSION CREATE.&lt;br /&gt;
* Version 3.3 options SEND_TAGS, TAG_THRESHOLD, EXPIRES, and SEND_LEASESET will be passed to [[en/docs/protocol/i2cp|I2CP]] if supported. See [[../protocol/i2cp#msg_SendMessageExpire|the I2CP specification]] for details. Support by the SAM server is optional, it will ignore these options if unsupported.&lt;br /&gt;
* this line is &#039;\n&#039; terminated.&lt;br /&gt;
&lt;br /&gt;
The first line will be discarded by SAM before sending the remaining data of the message to the specified destination.&lt;br /&gt;
&lt;br /&gt;
For an alternate method of sending repliable and raw datagrams, see [[#dgsend|DATAGRAM SEND and RAW SEND]].&lt;br /&gt;
&lt;br /&gt;
=== SAM Repliable Datagrams : Receiving a Datagram ===&lt;br /&gt;
&lt;br /&gt;
Received datagrams are written by SAM on the socket from which the datagram session was opened, if a forwarding PORT is not specified in the SESSION CREATE command. This is the v1/v2-compatible way of receiving datagrams.&lt;br /&gt;
&lt;br /&gt;
When a datagram arrives, the bridge delivers it to the client via the message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  DATAGRAM RECEIVED&lt;br /&gt;
           DESTINATION=$destination&lt;br /&gt;
           SIZE=$numBytes&lt;br /&gt;
           FROM_PORT=nnn                      # SAM 3.2 or higher only&lt;br /&gt;
           TO_PORT=nnn                        # SAM 3.2 or higher only&lt;br /&gt;
           \n&lt;br /&gt;
       [$numBytes of data]&amp;lt;/pre&amp;gt;&lt;br /&gt;
The source is $destination, which is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
&lt;br /&gt;
The SAM bridge never exposes to the client the authentication headers or other fields, merely the data that the sender provided. This continues until the session is closed (by the client dropping the connection).&lt;br /&gt;
&lt;br /&gt;
=== SAM Datagrams : Forwarding Raw or Repliable Datagrams ===&lt;br /&gt;
&lt;br /&gt;
When creating a datagram session, the client can ask SAM to forward incoming messages to a specified ip:port. It does so by issuing the CREATE command with PORT and HOST options:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt; SESSION CREATE&lt;br /&gt;
          STYLE={DATAGRAM,RAW}&lt;br /&gt;
          ID=$nickname&lt;br /&gt;
          DESTINATION={$privkey,TRANSIENT}&lt;br /&gt;
          PORT=$port&lt;br /&gt;
          [HOST=$host]&lt;br /&gt;
          [FROM_PORT=nnn]                      # SAM 3.2 or higher only, default 0&lt;br /&gt;
          [TO_PORT=nnn]                        # SAM 3.2 or higher only, default 0&lt;br /&gt;
          [PROTOCOL=nnn]                       # SAM 3.2 or higher only, for STYLE=RAW only, default 18&lt;br /&gt;
          [option=value]*                      # I2CP options&amp;lt;/pre&amp;gt;&lt;br /&gt;
The $privkey is the base 64 of the concatenation of the [[en/docs/spec/common-structures#type_Destination|Destination]] followed by the [[en/docs/spec/common-structures#type_PrivateKey|Private Key]] followed by the [[en/docs/spec/common-structures#type_SigningPrivateKey|Signing Private Key]], optionally followed by the [[en/docs/spec/common-structures#struct_OfflineSignature|Offline Signature]], which is 884 or more base 64 characters (663 or more bytes in binary), depending on signature type. The binary format is specified in [http://echelon.i2p/javadoc/net/i2p/data/PrivateKeyFile.html Private Key File].&lt;br /&gt;
&lt;br /&gt;
Offline signatures are only supported for RAW datagrams. See the SESSION CREATE section above for details.&lt;br /&gt;
&lt;br /&gt;
$host is the hostname or IP address of the datagram server to which SAM will forward datagrams. If not given, SAM takes the IP of the socket that issued the forward command.&lt;br /&gt;
&lt;br /&gt;
$port is the port number of the datagram server to which SAM will forward datagrams. If $port is not set, datagrams will NOT be forwarded, they will be received on the control socket, in the v1/v2-compatible way.&lt;br /&gt;
&lt;br /&gt;
Additional options given are passed to the I2P session configuration if not interpreted by the SAM bridge (e.g. outbound.length=0). These options [[#options|are documented below]].&lt;br /&gt;
&lt;br /&gt;
Forwarded repliable datagrams are always prefixed with the destination. When a repliable datagram arrives, the bridge sends to the specified host:port a UDP packet containing the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    $destination&lt;br /&gt;
    FROM_PORT=nnn                      # SAM 3.2 or higher only&lt;br /&gt;
    TO_PORT=nnn                        # SAM 3.2 or higher only&lt;br /&gt;
    \n&lt;br /&gt;
    $datagram_payload&amp;lt;/pre&amp;gt;&lt;br /&gt;
Forwarded raw datagrams are forwarded as-is to the specified host:port without a prefix. The UDP packet contains the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;          $datagram_payload&amp;lt;/pre&amp;gt;&lt;br /&gt;
As of SAM 3.2, when HEADER=true is specified in SESSION CREATE, the forwarded raw datagram will be prepended with a header line as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;          FROM_PORT=nnn&lt;br /&gt;
          TO_PORT=nnn&lt;br /&gt;
          PROTOCOL=nnn&lt;br /&gt;
          \n&lt;br /&gt;
          $datagram_payload&amp;lt;/pre&amp;gt;&lt;br /&gt;
The $destination is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
&lt;br /&gt;
=== SAM Anonymous (Raw) Datagrams ===&lt;br /&gt;
&lt;br /&gt;
Squeezing the most out of I2P&#039;s bandwidth, SAM allows clients to send and receive anonymous datagrams, leaving authentication and reply information up to the client themselves. These datagrams are unreliable and unordered, and may be up to 32768 bytes.&lt;br /&gt;
&lt;br /&gt;
Minimum size is 1. For best delivery reliability, recommended maximum size is approximately 11 KB.&lt;br /&gt;
&lt;br /&gt;
After establishing a SAM session with STYLE=RAW, the client can send anonymous datagrams through the SAM bridge exactly the same way as [[v3dgsend|sending repliable datagrams]].&lt;br /&gt;
&lt;br /&gt;
Both ways of receiving datagrams are also available for anonymous datagrams.&lt;br /&gt;
&lt;br /&gt;
Received datagrams are written by SAM on the socket from which the datagram session was opened, if a forwarding PORT is not specified in the SESSION CREATE command. This is the v1/v2-compatible way of receiving datagrams.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- RAW RECEIVED&lt;br /&gt;
          SIZE=$numBytes&lt;br /&gt;
          FROM_PORT=nnn                      # SAM 3.2 or higher only&lt;br /&gt;
          TO_PORT=nnn                        # SAM 3.2 or higher only&lt;br /&gt;
          PROTOCOL=nnn                       # SAM 3.2 or higher only&lt;br /&gt;
          \n&lt;br /&gt;
      [$numBytes of data]&amp;lt;/pre&amp;gt;&lt;br /&gt;
When anonymous datagrams are to be forwarded to some host:port, the bridge sends to the specified host:port a message containing the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;          $datagram_payload&amp;lt;/pre&amp;gt;&lt;br /&gt;
As of SAM 3.2, when HEADER=true is specified in SESSION CREATE, the forwarded raw datagram will be prepended with a header line as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;          FROM_PORT=nnn&lt;br /&gt;
          TO_PORT=nnn&lt;br /&gt;
          PROTOCOL=nnn&lt;br /&gt;
          \n&lt;br /&gt;
          $datagram_payload&amp;lt;/pre&amp;gt;&lt;br /&gt;
For an alternate method of sending anonymous datagrams, see [[#dgsend|RAW SEND]].&lt;br /&gt;
&lt;br /&gt;
=== DATAGRAM SEND, RAW SEND (V1/V2 Compatible Datagram Handling) ===&lt;br /&gt;
&lt;br /&gt;
In SAM V3, the preferred way to send datagrams is via the datagram socket at port 7655 as documented above. However, repliable datagrams may be sent directly via the SAM bridge socket using the DATAGRAM SEND command, as documented in [[sam|SAM V1]] and [[samv2|SAM V2]].&lt;br /&gt;
&lt;br /&gt;
As of release 0.9.14 (version 3.1), anonymous datagrams may be sent directly via the SAM bridge socket using the RAW SEND command, as documented in [[sam|SAM V1]] and [[samv2|SAM V2]].&lt;br /&gt;
&lt;br /&gt;
As of release 0.9.24 (version 3.2), DATAGRAM SEND and RAW SEND may include the parameters FROM_PORT=nnnn and/or TO_PORT=nnnn to override the default ports. As of release 0.9.24 (version 3.2), RAW SEND may include the parameter PROTOCOL=nnn to override the default protocol.&lt;br /&gt;
&lt;br /&gt;
These commands do &#039;&#039;not&#039;&#039; support the ID parameter. The datagrams are sent to the most recently created DATAGRAM- or RAW-style session, as appropriate. Support for the ID parameter may be added in a future release.&lt;br /&gt;
&lt;br /&gt;
=== MASTER Sessions (V3.3 and higher) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Version 3.3 was introduced in I2P release 0.9.25.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
SAM v3.3 adds support for running streaming, datagrams, and raw subsessions on the same master session, and for running multiple subsessions of the same style. All subsession traffic uses a single destination, or set of tunnels. Routing of traffic from I2P is based on the port and protocol options for the subsessions.&lt;br /&gt;
&lt;br /&gt;
To create multiplexed subsessions, you must create a master session and then add subsessions to the master session. Each subsession must have a unique id and a unique listen protocol and port. Subsessions may also be removed from the master session.&lt;br /&gt;
&lt;br /&gt;
With a MASTER session and a combination of subsessions, a SAM client may support multiple applications, or a single sophisticated application using a variety of protocols, on a single set of tunnels. For example, a bittorrent client could set up a streaming subsession for peer-to-peer connections, together with datagram and raw subsessions for DHT communication.&lt;br /&gt;
&lt;br /&gt;
==== Creating a MASTER Session ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  SESSION CREATE&lt;br /&gt;
          STYLE=MASTER&lt;br /&gt;
          ID=$nickname&lt;br /&gt;
          DESTINATION={$privkey,TRANSIENT}&lt;br /&gt;
          [option=value]*                      # I2CP and streaming options&amp;lt;/pre&amp;gt;&lt;br /&gt;
The SAM bridge will respond with success or failure as in [[#sessionresponse|the response to a standard SESSION CREATE]].&lt;br /&gt;
&lt;br /&gt;
Do not set the PORT, HOST, FROM_PORT, TO_PORT, PROTOCOL, LISTEN_PORT, LISTEN_PROTOCOL, or HEADER options on a master session. You may not send any data on a MASTER session ID or on the control socket. All commands such as STREAM CONNECT, DATAGRAM SEND, etc. must use the subsession ID on a separate socket.&lt;br /&gt;
&lt;br /&gt;
The MASTER session connects to the router and builds tunnels. When the SAM bridge responds, tunnels have been built and the session is ready for subsessions to be added. All [[en/docs/protocol/i2cp|I2CP]] options pertaining to tunnel parameters such as length, quantity, and nickname must be provided in the master&#039;s SESSION CREATE.&lt;br /&gt;
&lt;br /&gt;
All utility commands are supported on a master session.&lt;br /&gt;
&lt;br /&gt;
When the master session is closed, all subsessions get closed also.&lt;br /&gt;
&lt;br /&gt;
==== Creating a Subsession ====&lt;br /&gt;
&lt;br /&gt;
Using the same control socket on which the MASTER session was created:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  SESSION ADD&lt;br /&gt;
          STYLE={STREAM,DATAGRAM,RAW}&lt;br /&gt;
          ID=$nickname                         # must be unique&lt;br /&gt;
          [PORT=$port]                         # Required for DATAGRAM and RAW, invalid for STREAM&lt;br /&gt;
          [HOST=$host]                         # Optional for DATAGRAM and RAW, invalid for STREAM&lt;br /&gt;
          [FROM_PORT=nnn]                      # For outbound traffic, default 0&lt;br /&gt;
          [TO_PORT=nnn]                        # For outbound traffic, default 0&lt;br /&gt;
          [PROTOCOL=nnn]                       # For outbound traffic for STYLE=RAW only, default 18&lt;br /&gt;
          [LISTEN_PORT=nnn]                    # For inbound traffic, default is the FROM_PORT value.&lt;br /&gt;
                                               # For STYLE=STREAM, only the FROM_PORT value or 0 is allowed.&lt;br /&gt;
          [LISTEN_PROTOCOL=nnn]                # For inbound traffic for STYLE=RAW only.&lt;br /&gt;
                                               # Default is the PROTOCOL value; 6 (streaming) is disallowed&lt;br /&gt;
          [HEADER={true,false}]                # For STYLE=RAW only, default false&lt;br /&gt;
          [option=value]*                      # I2CP and streaming options&amp;lt;/pre&amp;gt;&lt;br /&gt;
The SAM bridge will respond with success or failure as in [[#sessionresponse|the response to a standard SESSION CREATE]]. As the tunnels were already built in the master SESSION CREATE, the SAM bridge should respond immediately.&lt;br /&gt;
&lt;br /&gt;
Do not set the DESTINATION option on a SESSION ADD. The subsession will use the destination specified in the master session. All subsessions must be added on the control socket, i.e. the same connection that you created the master session on.&lt;br /&gt;
&lt;br /&gt;
Multiple subsessions must have options sufficiently unique that incoming data can be routed correctly. In particular, multiple sessions of the same style must have different LISTEN_PORT options (and/or LISTEN_PROTOCOL, for RAW only). A SESSION ADD with listen port and protocol that duplicates an existing subsession will result in an error.&lt;br /&gt;
&lt;br /&gt;
The LISTEN_PORT is the local I2P port, i.e. the receive (TO) port for incoming data. If the LISTEN_PORT is not specified, the FROM_PORT value will be used. If the LISTEN_PORT and FROM_PORT are not specified, incoming routing will be based on STYLE and PROTOCOL alone. For LISTEN_PORT and LISTEN_PROTOCOL, 0 means any value, that is, a wildcard. If both LISTEN_PORT and LISTEN_PROTOCOL are 0, this subsession will be the default for incoming traffic that does not get routed to another subsession. Incoming streaming traffic (protocol 6) will never be routed to a RAW subsession, even if its LISTEN_PROTCOL is 0. A RAW subsession may not set a LISTEN_PROTOCOL of 6. If there is no default or subsession that matching the protocol and port of incoming traffic, that data will be dropped.&lt;br /&gt;
&lt;br /&gt;
Use the subsession ID, not the master session ID, for sending and receiving data. All commands such as STREAM CONNECT, DATAGRAM SEND, etc. must use the subsession ID.&lt;br /&gt;
&lt;br /&gt;
All utility commands are supported on a master session or subsession. v1/v2 datagram/raw sending/receiving are not supported on a master session or on subsessions.&lt;br /&gt;
&lt;br /&gt;
==== Stopping a Subsession ====&lt;br /&gt;
&lt;br /&gt;
Using the same control socket on which the MASTER session was created:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  SESSION REMOVE&lt;br /&gt;
          ID=$nickname&amp;lt;/pre&amp;gt;&lt;br /&gt;
This removes a subsession from the master session. Do not set any other options on a SESSION REMOVE. Subsessions must be removed on the control socket, i.e. the same connection that you created the master session on. After a subsession is removed, it is closed and may not be used to send or receive data.&lt;br /&gt;
&lt;br /&gt;
The SAM bridge will respond with success or failure as in [[#sessionresponse|the response to a standard SESSION CREATE]].&lt;br /&gt;
&lt;br /&gt;
=== SAM Utility Commands ===&lt;br /&gt;
&lt;br /&gt;
Some utility commands require a pre-existing session and some do not. See details below.&lt;br /&gt;
&lt;br /&gt;
==== Host Name Lookup ====&lt;br /&gt;
&lt;br /&gt;
The following message can be used by the client to query the SAM bridge for name resolution:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; NAMING LOOKUP&lt;br /&gt;
        NAME=$name&amp;lt;/pre&amp;gt;&lt;br /&gt;
which is answered by&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; NAMING REPLY&lt;br /&gt;
        RESULT=$result&lt;br /&gt;
        NAME=$name&lt;br /&gt;
        [VALUE=$destination]&lt;br /&gt;
        [MESSAGE=$message]&amp;lt;/pre&amp;gt;&lt;br /&gt;
The RESULT value may be one of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    OK&lt;br /&gt;
    INVALID_KEY&lt;br /&gt;
    KEY_NOT_FOUND&amp;lt;/pre&amp;gt;&lt;br /&gt;
If NAME=ME, then the reply will contain the destination used by the current session (useful if you&#039;re using a TRANSIENT one). If $result is not OK, MESSAGE may convey a descriptive message, such as &amp;amp;quot;bad format&amp;amp;quot;, etc. INVALID_KEY implies that something is wrong with $name in the request, possibly invalid characters.&lt;br /&gt;
&lt;br /&gt;
The $destination is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
&lt;br /&gt;
NAMING LOOKUP does not require that a session has been created first. However, in some implementations, a .b32.i2p lookup which is uncached and requires a network query may fail, as no client tunnels are available for the lookup.&lt;br /&gt;
&lt;br /&gt;
==== Destination Key Generation ====&lt;br /&gt;
&lt;br /&gt;
Public and private base64 keys can be generated using the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  DEST GENERATE&lt;br /&gt;
          [SIGNATURE_TYPE=value]               # SAM 3.1 or higher only, default DSA_SHA1&amp;lt;/pre&amp;gt;&lt;br /&gt;
which is answered by&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; DEST REPLY&lt;br /&gt;
      PUB=$destination&lt;br /&gt;
      PRIV=$privkey&amp;lt;/pre&amp;gt;&lt;br /&gt;
As of version 3.1 (I2P 0.9.14), an optional parameter SIGNATURE_TYPE is supported. The SIGNATURE_TYPE value may be any name (e.g. ECDSA_SHA256_P256, case insensitive) or number (e.g. 1) that is supported by [[en/docs/spec/common-structures#type_Certificate|Key Certificates]]. The default is DSA_SHA1.&lt;br /&gt;
&lt;br /&gt;
The $destination is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
&lt;br /&gt;
The $privkey is the base 64 of the concatenation of the [[en/docs/spec/common-structures#type_Destination|Destination]] followed by the [[en/docs/spec/common-structures#type_PrivateKey|Private Key]] followed by the [[en/docs/spec/common-structures#type_SigningPrivateKey|Signing Private Key]], which is 884 or more base 64 characters (663 or more bytes in binary), depending on signature type. The binary format is specified in [http://echelon.i2p/javadoc/net/i2p/data/PrivateKeyFile.html Private Key File].&lt;br /&gt;
&lt;br /&gt;
DEST GENERATE does not require that a session has been created first.&lt;br /&gt;
&lt;br /&gt;
DEST GENERATE cannot be used to create a destination with offline signatures.&lt;br /&gt;
&lt;br /&gt;
==== PING/PONG (SAM 3.2 or higher) ====&lt;br /&gt;
&lt;br /&gt;
Either the client or server may send:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    PING[ arbitrary text]&amp;lt;/pre&amp;gt;&lt;br /&gt;
on the control port, with the response:&lt;br /&gt;
&amp;lt;pre&amp;gt;    PONG[ arbitrary text from the ping]&amp;lt;/pre&amp;gt;&lt;br /&gt;
to be used for control socket keepalive. Either side may close the session and socket if no response is received in a reasonable time, implementation dependent.&lt;br /&gt;
If a timeout occurs waiting for a PONG from the client, the bridge may send:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- SESSION STATUS RESULT=I2P_ERROR MESSAGE=$message&amp;lt;/pre&amp;gt;&lt;br /&gt;
and then disconnect.&lt;br /&gt;
If a timeout occurs waiting for a PONG from the bridge, the client may simply disconnect.&lt;br /&gt;
&lt;br /&gt;
PING/PONG do not require that a session has been created first.&lt;br /&gt;
&lt;br /&gt;
==== QUIT/STOP/EXIT (SAM 3.2 or higher, optional features) ====&lt;br /&gt;
&lt;br /&gt;
Commands QUIT, STOP and EXIT will close the session and socket. Implementation is optional, for ease in testing via telnet. Whether there is any response before the socket is closed (for example, a SESSION STATUS message) is implementation-specific and outside the scope of this specification.&lt;br /&gt;
&lt;br /&gt;
QUIT/STOP/EXIT do not require that a session has been created first.&lt;br /&gt;
&lt;br /&gt;
==== HELP (optional feature) ====&lt;br /&gt;
&lt;br /&gt;
Servers may implement a HELP command. Implementation is optional, for ease in testing via telnet. Output format and detection of the end of the output is implementation-specific and outside the scope of this specification.&lt;br /&gt;
&lt;br /&gt;
HELP does not require that a session has been created first.&lt;br /&gt;
&lt;br /&gt;
==== Authorization Configuration (SAM 3.2 or higher, optional feature) ====&lt;br /&gt;
&lt;br /&gt;
Authorization configuration using the AUTH command. A SAM server may implement these commands to facilite persistent storage of credentials. Configuration of authentication other than with these commands is implementation-specific and outside the scope of this specification.&lt;br /&gt;
&lt;br /&gt;
* AUTH ENABLE enables authorization on subsequent connections&lt;br /&gt;
* AUTH DISABLE disables authorization on subsequent connections&lt;br /&gt;
* AUTH ADD USER=&amp;amp;quot;foo&amp;amp;quot; PASSWORD=&amp;amp;quot;bar&amp;amp;quot; adds a user/password&lt;br /&gt;
* AUTH REMOVE USER=&amp;amp;quot;foo&amp;amp;quot; removes this user&lt;br /&gt;
&lt;br /&gt;
Double quotes for user and password are recommended but not required. A double quote inside a user or password must be escaped with a backslash. On failure the server will reply with an I2P_ERROR and a message.&lt;br /&gt;
&lt;br /&gt;
AUTH does not require that a session has been created first.&lt;br /&gt;
&lt;br /&gt;
=== RESULT Values ===&lt;br /&gt;
&lt;br /&gt;
These are the values that can be carried by the RESULT field, with their meaning:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; OK              Operation completed successfully&lt;br /&gt;
 CANT_REACH_PEER The peer exists, but cannot be reached&lt;br /&gt;
 DUPLICATED_DEST The specified Destination is already in use&lt;br /&gt;
 I2P_ERROR       A generic I2P error (e.g. I2CP disconnection, etc.)&lt;br /&gt;
 INVALID_KEY     The specified key is not valid (bad format, etc.)&lt;br /&gt;
 KEY_NOT_FOUND   The naming system can&#039;t resolve the given name&lt;br /&gt;
 PEER_NOT_FOUND  The peer cannot be found on the network&lt;br /&gt;
 TIMEOUT         Timeout while waiting for an event (e.g. peer answer)&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Tunnel, I2CP, and Streaming Options ===&lt;br /&gt;
&lt;br /&gt;
These options may be passed in as name=value pairs at the end of a SAM SESSION CREATE line.&lt;br /&gt;
&lt;br /&gt;
All sessions may include [[en/docs/protocol/i2cp#options|I2CP options such as tunnel lengths]]. STREAM sessions may include [[en/docs/api/streaming#options|Streaming library options]]. See those references for option names and defaults.&lt;br /&gt;
&lt;br /&gt;
=== BASE 64 Notes ===&lt;br /&gt;
&lt;br /&gt;
Base 64 encoding must use the I2P standard Base 64 alphabet &amp;amp;quot;A-Z, a-z, 0-9, -, ~&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Client Library Implementations ===&lt;br /&gt;
&lt;br /&gt;
Client libraries are available for C, C++, C#, Perl, and Python. These are in the apps/sam/ directory in the [[en/download|I2P Source Package]]. Some may be older and have not been updated for SAMv3 support.&lt;br /&gt;
&lt;br /&gt;
=== Default SAM Setup ===&lt;br /&gt;
&lt;br /&gt;
The default SAM port is 7656. SAM is not enabled by default in the Java I2P Router; it must be started manually, or configured to start automatically, on the configure clients page in the router console, or in the clients.config file. The default SAM UDP port is 7655, listening on 127.0.0.1. These may be changed by adding the arguments sam.udp.port=nnnnn and/or sam.udp.host=w.x.y.z to the invocation.&lt;br /&gt;
&lt;br /&gt;
Configuration in other routers is implementation-specific.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Samv3&amp;diff=130</id>
		<title>Samv3</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Samv3&amp;diff=130"/>
		<updated>2020-02-04T14:35:32Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SAM V3 =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page was last updated in June 2019 and is accurate for router version 0.9.39.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Specified below is a simple client protocol for interacting with I2P.&lt;br /&gt;
&lt;br /&gt;
SAM version 3 was introduced in I2P release 0.7.3. Alternatives: [[en/docs/api/bob|BOB(unsupported)]]. Older versions: [[en/docs/api/sam|SAM V1]], [[en/docs/api/samv2|SAM V2]],&lt;br /&gt;
&lt;br /&gt;
== Known SAM libraries ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;8%&amp;quot;| Library Name&lt;br /&gt;
!width=&amp;quot;8%&amp;quot;| Language&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;| Version&lt;br /&gt;
!width=&amp;quot;4%&amp;quot;| STREAM&lt;br /&gt;
!width=&amp;quot;3%&amp;quot;| DGRAM&lt;br /&gt;
!width=&amp;quot;2%&amp;quot;| RAW&lt;br /&gt;
!width=&amp;quot;65%&amp;quot;| Site&lt;br /&gt;
|-&lt;br /&gt;
| i2psam&lt;br /&gt;
| C++, C wrapper&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
| [https://github.com/i2p/i2psam github.com/i2p/i2psam]&lt;br /&gt;
|-&lt;br /&gt;
| gosam&lt;br /&gt;
| Go&lt;br /&gt;
| 3.2&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
| no&lt;br /&gt;
| [https://github.com/eyedeekay/goSam github.com/eyedeekay/goSam]&lt;br /&gt;
|-&lt;br /&gt;
| sam3&lt;br /&gt;
| Go&lt;br /&gt;
| 3.2&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://bitbucket.org/eyedeekay/sam3 bitbucket.org/eyedeekay/sam3]&lt;br /&gt;
|-&lt;br /&gt;
| txi2p&lt;br /&gt;
| Python&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
| no&lt;br /&gt;
| [https://github.com/str4d/txi2p github.com/str4d/txi2p]&lt;br /&gt;
|-&lt;br /&gt;
| i2p.socket&lt;br /&gt;
| Python&lt;br /&gt;
| 3.2&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://github.com/majestrate/i2p.socket github.com/majestrate/i2p.socket]&lt;br /&gt;
|-&lt;br /&gt;
| i2plib&lt;br /&gt;
| Python&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://github.com/l-n-s/i2plib github.com/l-n-s/i2plib]&lt;br /&gt;
|-&lt;br /&gt;
| i2p-rs&lt;br /&gt;
| Rust&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://github.com/i2p/i2p-rs github.com/i2p/i2p-rs]&lt;br /&gt;
|-&lt;br /&gt;
| libsam3&lt;br /&gt;
| C&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://github.com/i2p/libsam3 github.com/i2p/libsam3]&lt;br /&gt;
|-&lt;br /&gt;
| mooni2p&lt;br /&gt;
| Lua&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://notabug.org/l-n-s/mooni2p notabug.org/l-n-s/mooni2p]&lt;br /&gt;
|-&lt;br /&gt;
| haskell-network-anonymous-i2p&lt;br /&gt;
| Haskell&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://github.com/solatis/haskell-network-anonymous-i2p github.com/solatis/haskell-network-anonymous-i2p]&lt;br /&gt;
|-&lt;br /&gt;
| node-i2p&lt;br /&gt;
| Javascript&lt;br /&gt;
| 3.0&lt;br /&gt;
| yes&lt;br /&gt;
| unk&lt;br /&gt;
| unk&lt;br /&gt;
| [https://github.com/redhog/node-i2p github.com/redhog/node-i2p]&lt;br /&gt;
|-&lt;br /&gt;
| Jsam&lt;br /&gt;
| Java&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
| no&lt;br /&gt;
| [https://github.com/eyedeekay/Jsam github.com/eyedeekay/Jsam]&lt;br /&gt;
|-&lt;br /&gt;
| i2pdotnet&lt;br /&gt;
| .Net&lt;br /&gt;
| 3.0&lt;br /&gt;
| yes&lt;br /&gt;
| unk&lt;br /&gt;
| unk&lt;br /&gt;
| [https://github.com/SamuelFisher/i2pdotnet github.com/SamuelFisher/i2pdotnet]&lt;br /&gt;
|-&lt;br /&gt;
| i2p.rb&lt;br /&gt;
| Ruby&lt;br /&gt;
| 3.0&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
| no&lt;br /&gt;
| [https://github.com/dryruby/i2p.rb github.com/dryruby/i2p.rb]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Version 3 Changes ==&lt;br /&gt;
&lt;br /&gt;
=== Version 3.0 Changes ===&lt;br /&gt;
&lt;br /&gt;
Version 3.0 was introduced in I2P release 0.7.3. SAM v2 provided a way to manage several sockets on the same I2P destination &#039;&#039;in parallel&#039;&#039;, i.e. the client does not have to wait for data being successfully sent on one socket before sending data on another socket. But all data transited through the same client&amp;amp;lt;--&amp;amp;gt;SAM socket, which was quite complicated to manage for the client.&lt;br /&gt;
&lt;br /&gt;
SAM v3 manages sockets in a different way: each &#039;&#039;I2P socket&#039;&#039; matches a unique client&amp;amp;lt;--&amp;amp;gt;SAM socket, which is much more simple to handle. This is similar to [[en/docs/api/bob|BOB]].&amp;lt;br /&amp;gt;&lt;br /&gt;
SAM v3 also offers a UDP port for sending datagrams through I2P, and can forward back I2P datagrams to the client&#039;s datagram server.&lt;br /&gt;
=== Version 3.1 Changes ===&lt;br /&gt;
&lt;br /&gt;
Version 3.1 was introduced in I2P release 0.9.14. SAM 3.1 is the recommended minimum SAM implementation because of its support for better signature types than SAM 3.0.&lt;br /&gt;
&lt;br /&gt;
* DEST GENERATE and SESSION CREATE now support a SIGNATURE_TYPE parameter.&lt;br /&gt;
* The MIN and MAX parameters in HELLO VERSION are now optional.&lt;br /&gt;
* The MIN and MAX parameters in HELLO VERSION now support single-digit versions such as &amp;amp;quot;3&amp;amp;quot;.&lt;br /&gt;
* RAW SEND is now supported on the bridge socket.&lt;br /&gt;
&lt;br /&gt;
=== Version 3.2 Changes ===&lt;br /&gt;
&lt;br /&gt;
Version 3.2 was introduced in I2P release 0.9.24.&lt;br /&gt;
&lt;br /&gt;
==== I2CP Port and Protocol Support ====&lt;br /&gt;
&lt;br /&gt;
* SESSION CREATE options FROM_PORT and TO_PORT&lt;br /&gt;
* SESSION CREATE STYLE=RAW option PROTOCOL&lt;br /&gt;
* STREAM CONNECT, DATAGRAM SEND, and RAW SEND options FROM_PORT and TO_PORT&lt;br /&gt;
* RAW SEND option PROTOCOL&lt;br /&gt;
* DATAGRAM RECEIVED, RAW RECEIVED, and forwarded or received streams and repliable datagrams, includes FROM_PORT and TO_PORT&lt;br /&gt;
* RAW session option HEADER=true will cause the forwarded raw datagrams to be prepended with a line containing PROTOCOL=nnn FROM_PORT=nnnn TO_PORT=nnnn&lt;br /&gt;
* The first line of datagrams sent through port 7655 may now start with any 3.x version&lt;br /&gt;
* The first line of datagrams sent through port 7655 may contain any of the options FROM_PORT, TO_PORT, PROTOCOL&lt;br /&gt;
* RAW RECEIVED includes PROTOCOL=nnn&lt;br /&gt;
&lt;br /&gt;
==== SSL and Authentication ====&lt;br /&gt;
&lt;br /&gt;
* USER/PASSWORD in the HELLO parameters for authorization. See [[#userpw|below]].&lt;br /&gt;
* Optional authorization configuration with the AUTH command. See [[#auth|below]].&lt;br /&gt;
* Optional SSL/TLS support on the control socket. See [[#ssl|below]].&lt;br /&gt;
* STREAM FORWARD option SSL=true&lt;br /&gt;
&lt;br /&gt;
==== Multithreading ====&lt;br /&gt;
&lt;br /&gt;
* Concurrent pending STREAM ACCEPTs are allowed on the same session ID.&lt;br /&gt;
&lt;br /&gt;
==== Command Line Parsing and Keepalive ====&lt;br /&gt;
&lt;br /&gt;
* Optional commands QUIT, STOP and EXIT to close the session and socket. See [[#quit|below]].&lt;br /&gt;
* Command parsing will properly handle UTF-8&lt;br /&gt;
* Command parsing reliably handles whitespace inside quotes&lt;br /&gt;
* A backslash &#039;\&#039; may escape quotes on the command line&lt;br /&gt;
* Recommended that the server map commands to upper case, for ease in testing via telnet.&lt;br /&gt;
* Empty option values such as PROTOCOL or PROTOCOL= may be allowed, implementation dependent.&lt;br /&gt;
* PING/PONG for keepalive. See below.&lt;br /&gt;
* Servers may implement timeouts for the HELLO or subsequent commands, implementation dependent.&lt;br /&gt;
&lt;br /&gt;
=== Version 3.3 Changes ===&lt;br /&gt;
&lt;br /&gt;
Version 3.3 was introduced in I2P release 0.9.25.&lt;br /&gt;
&lt;br /&gt;
* The same session may be used for streams, datagrams, and raw simultaneously. Incoming packets and streams will be routed based on I2P protocol and to-port. See [[#master|the MASTER section below]].&lt;br /&gt;
* DATAGRAM SEND and RAW SEND now support options SEND_TAGS, TAG_THRESHOLD, EXPIRES, and SEND_LEASESET. See [[#v3dgsend|the datagram sending section below]].&lt;br /&gt;
&lt;br /&gt;
== Version 3 Protocol ==&lt;br /&gt;
&lt;br /&gt;
=== Simple Anonymous Messaging (SAM) Version 3.3 Specification Overview ===&lt;br /&gt;
&lt;br /&gt;
The client application talks to the SAM bridge, which deals with all of the I2P functionality (using the [[en/docs/api/streaming|streaming library]] for virtual streams, or [[en/docs/protocol/i2cp|I2CP]] directly for datagrams).&lt;br /&gt;
&lt;br /&gt;
By default, the client&amp;amp;lt;--&amp;amp;gt;SAM bridge communication is unencrypted and unauthenticated. The SAM bridge may support SSL/TLS connections; configuration and implementation details are outside the scope of this specification. As of SAM 3.2, optional authentication user/password parameters are supported in the initial handshake and may be required by the bridge.&lt;br /&gt;
&lt;br /&gt;
I2P communications can take three distinct forms:&lt;br /&gt;
&lt;br /&gt;
* [[en/docs/api/streaming|Virtual streams]]&lt;br /&gt;
* [[en/docs/spec/datagrams#repliable|Repliable datagrams]] (messages with a FROM field)&lt;br /&gt;
* [[en/docs/spec/datagrams#raw|Anonymous datagrams]] (raw anonymous messages)&lt;br /&gt;
&lt;br /&gt;
I2P communications are supported by I2P sessions, and each I2P session is bound to an address (called destination). An I2P session is associated with one of the three types above, and cannot carry communications of another type, unless using [[#master|MASTER sessions]].&lt;br /&gt;
&lt;br /&gt;
=== Encoding and Escaping ===&lt;br /&gt;
&lt;br /&gt;
All of these SAM messages are sent on a single line, terminated by the newline character (\n). Prior to SAM 3.2, only 7-bit ASCII was supported. As of SAM 3.2, the encoding must be UTF-8. Any UTF8-encoded keys or values should work.&lt;br /&gt;
&lt;br /&gt;
The formatting shown in this specification below is merely for readability, and while the first two words in each message must stay in their specific order, the ordering of the key=value pairs can change (e.g. &amp;amp;quot;ONE TWO A=B C=D&amp;amp;quot; or &amp;amp;quot;ONE TWO C=D A=B&amp;amp;quot; are both perfectly valid constructions). In addition, the protocol is case-sensitive. In the following, message examples are preceded by &amp;amp;quot;-&amp;amp;gt; &amp;amp;quot; for messages sent by the client to the SAM bridge, and by &amp;amp;quot;&amp;amp;lt;- &amp;amp;quot; for messages sent by the SAM bridge to the client.&lt;br /&gt;
&lt;br /&gt;
The basic command or response line takes one of the following forms:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;     COMMAND SUBCOMMAND [key=value] [key=value] ...&lt;br /&gt;
     COMMAND                                           # As of SAM 3.2&lt;br /&gt;
     PING[ arbitrary text]                             # As of SAM 3.2&lt;br /&gt;
     PONG[ arbitrary text]                             # As of SAM 3.2&amp;lt;/pre&amp;gt;&lt;br /&gt;
COMMAND without a SUBCOMMAND is supported for some new commands in SAM 3.2 only.&lt;br /&gt;
Key=value pairs must be separated by a single space. (As of SAM 3.2, multiple spaces are allowed) Values may be enclosed in double quotes if they contain spaces, e.g. key=&amp;amp;quot;long value text&amp;amp;quot;. (Prior to SAM 3.2, this did not work reliably in some implementations)&lt;br /&gt;
&lt;br /&gt;
Prior to SAM 3.2, there was no escaping mechanism. As of SAM 3.2, double quotes may be escaped with a backslash &#039;\&#039; and a backslash may be represented as two backslashes &#039;\\&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Empty values ===&lt;br /&gt;
&lt;br /&gt;
As of SAM 3.2, empty option values such as KEY, KEY=, or KEY=&amp;amp;quot;&amp;amp;quot; may be allowed, implementation dependent.&lt;br /&gt;
&lt;br /&gt;
=== Case Sensitivity ===&lt;br /&gt;
&lt;br /&gt;
The protocol, as specified, is case-sensitive. It is recommended but not required that the server map commands to upper case, for ease in testing via telnet. This would allow, for example, &amp;amp;quot;hello version&amp;amp;quot; to work. This is implementation-dependent. Do not map keys or values to upper case, as this would corrupt [[en/docs/protocol/i2cp|I2CP]] options.&lt;br /&gt;
&lt;br /&gt;
=== SAM Connection Handshake ===&lt;br /&gt;
&lt;br /&gt;
No SAM communication can occur until after the client and bridge have agreed on a protocol version, which is done by the client sending a HELLO and the bridge sending a HELLO REPLY:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  HELLO VERSION&lt;br /&gt;
          [MIN=$min]            # Optional as of SAM 3.1, required for 3.0 and earlier&lt;br /&gt;
          [MAX=$max]            # Optional as of SAM 3.1, required for 3.0 and earlier&lt;br /&gt;
          [USER=&amp;amp;quot;xxx&amp;amp;quot;]          # As of SAM 3.2, required if authentication is enabled, see below&lt;br /&gt;
          [PASSWORD=&amp;amp;quot;yyy&amp;amp;quot;]      # As of SAM 3.2, required if authentication is enabled, see below&amp;lt;/pre&amp;gt;&lt;br /&gt;
and&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  HELLO REPLY RESULT=OK VERSION=3.1&amp;lt;/pre&amp;gt;&lt;br /&gt;
As of version 3.1 (I2P 0.9.14), the MIN and MAX parameters are optional. SAM will always return the highest version possible given the MIN and MAX constraints, or the current server version if no constraints are given. If the SAM bridge cannot find a suitable version, it replies with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- HELLO REPLY RESULT=NOVERSION&amp;lt;/pre&amp;gt;&lt;br /&gt;
If some error occurred, such as a bad request format, it replies with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- HELLO REPLY RESULT=I2P_ERROR MESSAGE=$message&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== SSL ====&lt;br /&gt;
&lt;br /&gt;
The server&#039;s control socket may optionally offer SSL/TLS support, as configured on the server and client. Implementations may offer other transport layers as well; this is outside the scope of the protocol definition.&lt;br /&gt;
&lt;br /&gt;
==== Authorization ====&lt;br /&gt;
&lt;br /&gt;
For authorization, client adds USER=&amp;amp;quot;xxx&amp;amp;quot; PASSWORD=&amp;amp;quot;yyy&amp;amp;quot; to the HELLO parameters. Double quotes for user and password are recommended but not required. A double quote inside a user or password must be escaped with a backslash. On failure the server will reply with an I2P_ERROR and a message. It is recommended that SSL be enabled on any SAM servers where authorization is required.&lt;br /&gt;
&lt;br /&gt;
==== Timeouts ====&lt;br /&gt;
&lt;br /&gt;
Servers may implement timeouts for the HELLO or subsequent commands, implementation dependent. Clients should promptly send the HELLO and the next command after connecting.&lt;br /&gt;
&lt;br /&gt;
If a timeout occurs before the HELLO is received, the bridge replies with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- HELLO REPLY RESULT=I2P_ERROR MESSAGE=$message&amp;lt;/pre&amp;gt;&lt;br /&gt;
and then disconnects.&lt;br /&gt;
If a timeout occurs after the HELLO is received but before the next command, the bridge replies with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- SESSION STATUS RESULT=I2P_ERROR MESSAGE=$message&amp;lt;/pre&amp;gt;&lt;br /&gt;
and then disconnects.&lt;br /&gt;
=== I2CP Ports and Protocol ===&lt;br /&gt;
&lt;br /&gt;
As of SAM 3.2, the [[en/docs/protocol/i2cp|I2CP]] ports and protocol may be specified by the SAM client sender to be passed through to [[en/docs/protocol/i2cp|I2CP]], and the SAM bridge will pass the received [[en/docs/protocol/i2cp|I2CP]] port and protocol information to the SAM client.&lt;br /&gt;
&lt;br /&gt;
For FROM_PORT and TO_PORT, the valid range is 0-65535, and the default is 0.&lt;br /&gt;
&lt;br /&gt;
For PROTOCOL, which may be specified only for RAW, the valid range is 0-255, and the default is 18.&lt;br /&gt;
&lt;br /&gt;
For SESSION commands, the specified ports and protocol are the defaults for that session. For individual streams or datagrams, the specified ports and protocol override the session defaults. For received streams or datagrams, the indicated ports and protocol are as received from [[en/docs/protocol/i2cp|I2CP]].&lt;br /&gt;
&lt;br /&gt;
See the [[en/docs/protocol/i2cp|I2CP]] specification for more information.&lt;br /&gt;
&lt;br /&gt;
=== SAM Sessions ===&lt;br /&gt;
&lt;br /&gt;
A SAM session is created by a client opening a socket to the SAM bridge, operating a handshake, and sending a SESSION CREATE message, and the session terminates when the socket is disconnected.&lt;br /&gt;
&lt;br /&gt;
Each registered I2P Destination is uniquely associated with a session ID (or nickname).&lt;br /&gt;
&lt;br /&gt;
Each session is uniquely associated with:&lt;br /&gt;
&lt;br /&gt;
* the socket from which the client creates the session&lt;br /&gt;
* its ID (or nickname)&lt;br /&gt;
&lt;br /&gt;
==== Session Creation Request ====&lt;br /&gt;
&lt;br /&gt;
The session creation message can only use one of these forms (messages received through other forms are answered with an error message) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  SESSION CREATE&lt;br /&gt;
          STYLE={STREAM,DATAGRAM,RAW}&lt;br /&gt;
          ID=$nickname&lt;br /&gt;
          DESTINATION={$privkey,TRANSIENT}&lt;br /&gt;
          [SIGNATURE_TYPE=value]               # SAM 3.1 or higher only, for DESTINATION=TRANSIENT only, default DSA_SHA1&lt;br /&gt;
          [PORT=$port]                         # Required for DATAGRAM and RAW, invalid for STREAM&lt;br /&gt;
          [HOST=$host]                         # Optional for DATAGRAM and RAW, invalid for STREAM&lt;br /&gt;
          [FROM_PORT=nnn]                      # SAM 3.2 or higher only, default 0&lt;br /&gt;
          [TO_PORT=nnn]                        # SAM 3.2 or higher only, default 0&lt;br /&gt;
          [PROTOCOL=nnn]                       # SAM 3.2 or higher only, for STYLE=RAW only, default 18&lt;br /&gt;
          [HEADER={true,false}]                # SAM 3.2 or higher only, for STYLE=RAW only, default false&lt;br /&gt;
          [option=value]*                      # I2CP and streaming options&amp;lt;/pre&amp;gt;&lt;br /&gt;
DESTINATION specifies what destination should be used for sending and receiving messages/streams. The $privkey is the base 64 of the concatenation of the [[en/docs/spec/common-structures#type_Destination|Destination]] followed by the [[en/docs/spec/common-structures#type_PrivateKey|Private Key]] followed by the [[en/docs/spec/common-structures#type_SigningPrivateKey|Signing Private Key]], optionally followed by the [[en/docs/spec/common-structures#struct_OfflineSignature|Offline Signature]], which is 663 or more bytes in binary and 884 or more bytes in base 64, depending on signature type. The binary format is specified in [http://echelon.i2p/javadoc/net/i2p/data/PrivateKeyFile.html Private Key File].&lt;br /&gt;
&lt;br /&gt;
If the signing private key is all zeros, the the [[en/docs/spec/common-structures#struct_OfflineSignature|Offline Signature]] section follows. Offline signatures are only supported for STREAM and RAW sessions. Offline signatures may not be created with DESTINATION=TRANSIENT. The format of the offline signature section is:&lt;br /&gt;
&lt;br /&gt;
# - Expires timestamp (4 bytes, big endian, seconds since epoch, rolls over in 2106)&lt;br /&gt;
# - Sig type of transient Signing Public Key (2 bytes, big endian)&lt;br /&gt;
# - Transient Signing Public key (length as specified by transient sig type)&lt;br /&gt;
# - Signature of above three fields by offline key (length as specified by destination sig type)&lt;br /&gt;
# - Transient Signing Private key (length as specified by transient sig type)&lt;br /&gt;
&lt;br /&gt;
If the destination is specified as TRANSIENT, the SAM bridge creates a new destination. As of version 3.1 (I2P 0.9.14), if the destination is TRANSIENT, an optional parameter SIGNATURE_TYPE is supported. The SIGNATURE_TYPE value may be any name (e.g. ECDSA_SHA256_P256, case insensitive) or number (e.g. 1) supported by [[en/docs/spec/common-structures#type_Certificate|Key Certificates]]. The default is DSA_SHA1.&lt;br /&gt;
&lt;br /&gt;
$nickname is the choice of the client. No whitespace is allowed.&lt;br /&gt;
&lt;br /&gt;
Additional options given are passed to the I2P session configuration if not interpreted by the SAM bridge (e.g. outbound.length=0). These options [[#options|are documented below]].&lt;br /&gt;
&lt;br /&gt;
The SAM bridge itself should already be configured with what router it should communicate over I2P through (though if need be there may be a way to provide an override, e.g. i2cp.tcp.host=localhost and i2cp.tcp.port=7654).&lt;br /&gt;
&lt;br /&gt;
==== Session Creation Response ====&lt;br /&gt;
&lt;br /&gt;
After receiving the session create message, the SAM bridge will reply with a session status message, as follows:&lt;br /&gt;
&lt;br /&gt;
If the creation was successful:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  SESSION STATUS RESULT=OK DESTINATION=$privkey&amp;lt;/pre&amp;gt;&lt;br /&gt;
The $privkey is the base 64 of the concatenation of the [[en/docs/spec/common-structures#type_Destination|Destination]] followed by the [[en/docs/spec/common-structures#type_PrivateKey|Private Key]] followed by the [[en/docs/spec/common-structures#type_SigningPrivateKey|Signing Private Key]], optionally followed by the [[en/docs/spec/common-structures#struct_OfflineSignature|Offline Signature]], which is 663 or more bytes in binary and 884 or more bytes in base 64, depending on signature type. The binary format is specified in [http://echelon.i2p/javadoc/net/i2p/data/PrivateKeyFile.html Private Key File].&lt;br /&gt;
&lt;br /&gt;
If the SESSION CREATE contained a signing private key of all zeros and a [[en/docs/spec/common-structures#struct_OfflineSignature|Offline Signature]] section, the SESSION STATUS reply will include the same data in the same format. See the SESSION CREATE section above for details.&lt;br /&gt;
&lt;br /&gt;
If the nickname is already associated with a session:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  SESSION STATUS RESULT=DUPLICATED_ID&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the destination is already in use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  SESSION STATUS RESULT=DUPLICATED_DEST&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the destination is not a valid private destination key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  SESSION STATUS RESULT=INVALID_KEY&amp;lt;/pre&amp;gt;&lt;br /&gt;
If some other error has occurred:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  SESSION STATUS RESULT=I2P_ERROR MESSAGE=$message&amp;lt;/pre&amp;gt;&lt;br /&gt;
If it&#039;s not OK, the MESSAGE should contain human-readable information as to why the session could not be created.&lt;br /&gt;
&lt;br /&gt;
SAM sessions live and die with the socket they are associated with. When the socket is closed, the session dies, and all communications using the session die at the same time. And the other way round, when the session dies for any reason, the SAM bridge closes the socket.&lt;br /&gt;
&lt;br /&gt;
=== SAM Virtual Streams ===&lt;br /&gt;
&lt;br /&gt;
Virtual streams are guaranteed to be sent reliably and in order, with failure and success notification as soon as it is available.&lt;br /&gt;
&lt;br /&gt;
Streams are bidirectional communication sockets between two I2P destinations, but their opening has to be requested by one of them. Hereafter, CONNECT commands are used by the SAM client for such a request. FORWARD / ACCEPT commands are used by the SAM client when he wants to listen to requests coming from other I2P destinations.&lt;br /&gt;
&lt;br /&gt;
=== SAM Virtual Streams : CONNECT ===&lt;br /&gt;
&lt;br /&gt;
A client asks for a connection by:&lt;br /&gt;
&lt;br /&gt;
* opening a new socket with the SAM bridge&lt;br /&gt;
* passing the same HELLO handshake as above&lt;br /&gt;
* sending the STREAM CONNECT command&lt;br /&gt;
&lt;br /&gt;
==== Connect Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt; STREAM CONNECT&lt;br /&gt;
         ID=$nickname&lt;br /&gt;
         DESTINATION=$destination&lt;br /&gt;
         [SILENT={true,false}]                # default false&lt;br /&gt;
         [FROM_PORT=nnn]                      # SAM 3.2 or higher only, default 0&lt;br /&gt;
         [TO_PORT=nnn]                        # SAM 3.2 or higher only, default 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
This establishes a new virtual connection from the local session whose ID is $nickname to the specified peer.&lt;br /&gt;
&lt;br /&gt;
The target is $destination, which is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
&lt;br /&gt;
==== Connect Response ====&lt;br /&gt;
&lt;br /&gt;
If SILENT=true is passed, the SAM bridge won&#039;t issue any other message on the socket. If the connection fails, the socket will be closed. If the connection succeeds, all remaining data passing through the current socket is forwarded from and to the connected I2P destination peer.&lt;br /&gt;
&lt;br /&gt;
If SILENT=false, which is the default value, the SAM bridge sends a last message to its client before forwarding or shutting down the socket:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  STREAM STATUS&lt;br /&gt;
         RESULT=$result&lt;br /&gt;
         [MESSAGE=...]&amp;lt;/pre&amp;gt;&lt;br /&gt;
The RESULT value may be one of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    OK&lt;br /&gt;
    CANT_REACH_PEER&lt;br /&gt;
    I2P_ERROR&lt;br /&gt;
    INVALID_KEY&lt;br /&gt;
    INVALID_ID&lt;br /&gt;
    TIMEOUT&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the RESULT is OK, all remaining data passing through the current socket is forwarded from and to the connected I2P destination peer. If the connection was not possible (timeout, etc), RESULT will contain the appropriate error value (accompanied by an optional human-readable MESSAGE), and the SAM bridge closes the socket.&lt;br /&gt;
&lt;br /&gt;
=== SAM Virtual Streams : ACCEPT ===&lt;br /&gt;
&lt;br /&gt;
A client waits for an incoming connection request by:&lt;br /&gt;
&lt;br /&gt;
* opening a new socket with the SAM bridge&lt;br /&gt;
* passing the same HELLO handshake as above&lt;br /&gt;
* sending the STREAM ACCEPT command&lt;br /&gt;
&lt;br /&gt;
==== Accept Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt; STREAM ACCEPT&lt;br /&gt;
         ID=$nickname&lt;br /&gt;
         [SILENT={true,false}]                # default false&amp;lt;/pre&amp;gt;&lt;br /&gt;
This makes the session ${nickname} listen for one incoming connection request from the I2P network. ACCEPT is not allowed while there is an active FORWARD on the session.&lt;br /&gt;
&lt;br /&gt;
As of SAM 3.2, multiple concurrent pending STREAM ACCEPTs are allowed on the same session ID (even with the same port). Prior to 3.2, concurrent accepts would fail with ALREADY_ACCEPTING.&lt;br /&gt;
&lt;br /&gt;
==== Accept Response ====&lt;br /&gt;
&lt;br /&gt;
If SILENT=true is passed, the SAM bridge won&#039;t issue any other message on the socket. If the accept fails, the socket will be closed. If the accept succeeds, all remaining data passing through the current socket is forwarded from and to the connected I2P destination peer. For reliability, and to receive the destination for incoming connections, SILENT=false is recommended.&lt;br /&gt;
&lt;br /&gt;
If SILENT=false, which is the default value, the SAM bridge answers with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  STREAM STATUS&lt;br /&gt;
         RESULT=$result&lt;br /&gt;
         [MESSAGE=...]&amp;lt;/pre&amp;gt;&lt;br /&gt;
The RESULT value may be one of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    OK&lt;br /&gt;
    I2P_ERROR&lt;br /&gt;
    INVALID_ID&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the result is not OK, the socket is closed immediately by the SAM bridge. If the result is OK, the SAM bridge starts waiting for an incoming connection request from another I2P peer. When a request arrives, the SAM bridge accepts it and:&lt;br /&gt;
&lt;br /&gt;
If SILENT=true was passed, the SAM bridge won&#039;t issue any other message on the client socket. All remaining data passing through the current socket is forwarded from and to the connected I2P destination peer.&lt;br /&gt;
&lt;br /&gt;
If SILENT=false was passed, which is the default value, the SAM bridge sends the client a ASCII line containing the base64 public destination key of the requesting peer, and additional information for SAM 3.2 only:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    $destination&lt;br /&gt;
    FROM_PORT=nnn                      # SAM 3.2 or higher only&lt;br /&gt;
    TO_PORT=nnn                        # SAM 3.2 or higher only&lt;br /&gt;
    \n&amp;lt;/pre&amp;gt;&lt;br /&gt;
After this &#039;\n&#039; terminated line, all remaining data passing through the current socket is forwarded from and to the connected I2P destination peer, until one of the peer closes the socket.&lt;br /&gt;
=== SAM Virtual Streams : FORWARD ===&lt;br /&gt;
&lt;br /&gt;
A client can use a regular socket server and wait for connection requests coming from I2P. For that, the client must:&lt;br /&gt;
&lt;br /&gt;
* open a new socket with the SAM bridge&lt;br /&gt;
* pass the same HELLO handshake as above&lt;br /&gt;
* send the forward command&lt;br /&gt;
&lt;br /&gt;
==== Forward Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt; STREAM FORWARD&lt;br /&gt;
         ID=$nickname&lt;br /&gt;
         PORT=$port&lt;br /&gt;
         [HOST=$host]&lt;br /&gt;
         [SILENT={true,false}]                # default false&lt;br /&gt;
         [SSL={true,false}]                   # SAM 3.2 or higher only, default false&amp;lt;/pre&amp;gt;&lt;br /&gt;
This makes the session ${nickname} listen for incoming connection requests from the I2P network. FORWARD is not allowed while there is a pending ACCEPT on the session.&lt;br /&gt;
&lt;br /&gt;
==== Forward Response ====&lt;br /&gt;
&lt;br /&gt;
SILENT defaults to false. Whether SILENT is true or false, the SAM bridge always answers with a STREAM STATUS message. Note that this is a different behavior from STREAM ACCEPT and STREAM CONNECT when SILENT=true. The STREAM STATUS message is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  STREAM STATUS&lt;br /&gt;
         RESULT=$result&lt;br /&gt;
         [MESSAGE=...]&amp;lt;/pre&amp;gt;&lt;br /&gt;
The RESULT value may be one of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    OK&lt;br /&gt;
    I2P_ERROR&lt;br /&gt;
    INVALID_ID&amp;lt;/pre&amp;gt;&lt;br /&gt;
$host is the hostname or IP address of the socket server to which SAM will forward connection requests. If not given, SAM takes the IP of the socket that issued the forward command.&lt;br /&gt;
&lt;br /&gt;
$port is the port number of the socket server to which SAM will forward connection requests. It is mandatory.&lt;br /&gt;
&lt;br /&gt;
When a connection request arrives from I2P, the SAM bridge requests a socket connection from $host:$port. If it is accepted after no more than 3 seconds, SAM will accept the connection from I2P, and then:&lt;br /&gt;
&lt;br /&gt;
If SILENT=true was passed, all data passing through the obtained current socket is forwarded from and to the connected I2P destination peer.&lt;br /&gt;
&lt;br /&gt;
If SILENT=false was passed, which is the default value, the SAM bridge sends on the obtained socket an ASCII line containing the base64 public destination key of the requesting peer, and additional information for SAM 3.2 only:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    $destination&lt;br /&gt;
    FROM_PORT=nnn                      # SAM 3.2 or higher only&lt;br /&gt;
    TO_PORT=nnn                        # SAM 3.2 or higher only&lt;br /&gt;
    \n&amp;lt;/pre&amp;gt;&lt;br /&gt;
After this &#039;\n&#039; terminated line, all remaining data passing through the socket is forwarded from and to the connected I2P destination peer, until one of the sides closes the socket.&lt;br /&gt;
As of SAM 3.2, if SSL=true is specified, the forwarding socket is over SSL/TLS.&lt;br /&gt;
&lt;br /&gt;
The I2P router will stop listening to incoming connection requests as soon as the &amp;amp;quot;forwarding&amp;amp;quot; socket is closed.&lt;br /&gt;
&lt;br /&gt;
=== SAM Datagrams : Sending Repliable or Raw Datagrams ===&lt;br /&gt;
&lt;br /&gt;
While I2P doesn&#039;t inherently contain a FROM address, for ease of use an additional layer is provided as repliable datagrams - unordered and unreliable messages of up to 31744 bytes that include a FROM address (leaving up to 1KB for header material). This FROM address is authenticated internally by SAM (making use of the destination&#039;s signing key to verify the source) and includes replay prevention.&lt;br /&gt;
&lt;br /&gt;
Minimum size is 1. For best delivery reliability, recommended maximum size is approximately 11 KB. Reliability is inversely proportional to message size, perhaps even exponentially.&lt;br /&gt;
&lt;br /&gt;
After establishing a SAM session with STYLE=DATAGRAM or STYLE=RAW, the client can send repliable or raw datagrams through SAM&#039;s UDP port (7655).&lt;br /&gt;
&lt;br /&gt;
The first line of a datagram sent through this port must be in the following format. This is all on one line (space separated), shown on multiple lines for clarity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    3.0                                  # As of SAM 3.2, any &amp;amp;quot;3.x&amp;amp;quot; is allowed. Prior to that, &amp;amp;quot;3.0&amp;amp;quot; is required.&lt;br /&gt;
    $nickname&lt;br /&gt;
    $destination&lt;br /&gt;
    [FROM_PORT=nnn]                      # SAM 3.2 or higher only, default 0&lt;br /&gt;
    [TO_PORT=nnn]                        # SAM 3.2 or higher only, default 0&lt;br /&gt;
    [PROTOCOL=nnn]                       # SAM 3.2 or higher only, only for RAW sessions, default 18&lt;br /&gt;
    [SEND_TAGS=nnn]                      # SAM 3.3 or higher only, number of session tags to send&lt;br /&gt;
                                         # Overrides crypto.tagsToSend I2CP session option&lt;br /&gt;
                                         # Default is router-dependent (40 for Java router)&lt;br /&gt;
    [TAG_THRESHOLD=nnn]                  # SAM 3.3 or higher only, low session tag threshold&lt;br /&gt;
                                         # Overrides crypto.lowTagThreshold I2CP session option&lt;br /&gt;
                                         # Default is router-dependent (30 for Java router)&lt;br /&gt;
    [EXPIRES=nnn]                        # SAM 3.3 or higher only, expiration from now in seconds&lt;br /&gt;
                                         # Overrides clientMessageTimeout I2CP session option (which is in ms)&lt;br /&gt;
                                         # Default is router-dependent (60 for Java router)&lt;br /&gt;
    [SEND_LEASESET={true,false}]         # SAM 3.3 or higher only, whether to send our leaseset&lt;br /&gt;
                                         # Overrides shouldBundleReplyInfo I2CP session option&lt;br /&gt;
                                         # Default is true&lt;br /&gt;
    \n&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 3.0 is the version of SAM. As of SAM 3.2, any 3.x is allowed.&lt;br /&gt;
* $nickname is the id of the DATAGRAM session that will be used&lt;br /&gt;
* The target is $destination, which is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
* All options are per-datagram settings that override the defaults specified in the SESSION CREATE.&lt;br /&gt;
* Version 3.3 options SEND_TAGS, TAG_THRESHOLD, EXPIRES, and SEND_LEASESET will be passed to [[en/docs/protocol/i2cp|I2CP]] if supported. See [[../protocol/i2cp#msg_SendMessageExpire|the I2CP specification]] for details. Support by the SAM server is optional, it will ignore these options if unsupported.&lt;br /&gt;
* this line is &#039;\n&#039; terminated.&lt;br /&gt;
&lt;br /&gt;
The first line will be discarded by SAM before sending the remaining data of the message to the specified destination.&lt;br /&gt;
&lt;br /&gt;
For an alternate method of sending repliable and raw datagrams, see [[#dgsend|DATAGRAM SEND and RAW SEND]].&lt;br /&gt;
&lt;br /&gt;
=== SAM Repliable Datagrams : Receiving a Datagram ===&lt;br /&gt;
&lt;br /&gt;
Received datagrams are written by SAM on the socket from which the datagram session was opened, if a forwarding PORT is not specified in the SESSION CREATE command. This is the v1/v2-compatible way of receiving datagrams.&lt;br /&gt;
&lt;br /&gt;
When a datagram arrives, the bridge delivers it to the client via the message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  DATAGRAM RECEIVED&lt;br /&gt;
           DESTINATION=$destination&lt;br /&gt;
           SIZE=$numBytes&lt;br /&gt;
           FROM_PORT=nnn                      # SAM 3.2 or higher only&lt;br /&gt;
           TO_PORT=nnn                        # SAM 3.2 or higher only&lt;br /&gt;
           \n&lt;br /&gt;
       [$numBytes of data]&amp;lt;/pre&amp;gt;&lt;br /&gt;
The source is $destination, which is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
&lt;br /&gt;
The SAM bridge never exposes to the client the authentication headers or other fields, merely the data that the sender provided. This continues until the session is closed (by the client dropping the connection).&lt;br /&gt;
&lt;br /&gt;
=== SAM Datagrams : Forwarding Raw or Repliable Datagrams ===&lt;br /&gt;
&lt;br /&gt;
When creating a datagram session, the client can ask SAM to forward incoming messages to a specified ip:port. It does so by issuing the CREATE command with PORT and HOST options:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt; SESSION CREATE&lt;br /&gt;
          STYLE={DATAGRAM,RAW}&lt;br /&gt;
          ID=$nickname&lt;br /&gt;
          DESTINATION={$privkey,TRANSIENT}&lt;br /&gt;
          PORT=$port&lt;br /&gt;
          [HOST=$host]&lt;br /&gt;
          [FROM_PORT=nnn]                      # SAM 3.2 or higher only, default 0&lt;br /&gt;
          [TO_PORT=nnn]                        # SAM 3.2 or higher only, default 0&lt;br /&gt;
          [PROTOCOL=nnn]                       # SAM 3.2 or higher only, for STYLE=RAW only, default 18&lt;br /&gt;
          [option=value]*                      # I2CP options&amp;lt;/pre&amp;gt;&lt;br /&gt;
The $privkey is the base 64 of the concatenation of the [[en/docs/spec/common-structures#type_Destination|Destination]] followed by the [[en/docs/spec/common-structures#type_PrivateKey|Private Key]] followed by the [[en/docs/spec/common-structures#type_SigningPrivateKey|Signing Private Key]], optionally followed by the [[en/docs/spec/common-structures#struct_OfflineSignature|Offline Signature]], which is 884 or more base 64 characters (663 or more bytes in binary), depending on signature type. The binary format is specified in [http://echelon.i2p/javadoc/net/i2p/data/PrivateKeyFile.html Private Key File].&lt;br /&gt;
&lt;br /&gt;
Offline signatures are only supported for RAW datagrams. See the SESSION CREATE section above for details.&lt;br /&gt;
&lt;br /&gt;
$host is the hostname or IP address of the datagram server to which SAM will forward datagrams. If not given, SAM takes the IP of the socket that issued the forward command.&lt;br /&gt;
&lt;br /&gt;
$port is the port number of the datagram server to which SAM will forward datagrams. If $port is not set, datagrams will NOT be forwarded, they will be received on the control socket, in the v1/v2-compatible way.&lt;br /&gt;
&lt;br /&gt;
Additional options given are passed to the I2P session configuration if not interpreted by the SAM bridge (e.g. outbound.length=0). These options [[#options|are documented below]].&lt;br /&gt;
&lt;br /&gt;
Forwarded repliable datagrams are always prefixed with the destination. When a repliable datagram arrives, the bridge sends to the specified host:port a UDP packet containing the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    $destination&lt;br /&gt;
    FROM_PORT=nnn                      # SAM 3.2 or higher only&lt;br /&gt;
    TO_PORT=nnn                        # SAM 3.2 or higher only&lt;br /&gt;
    \n&lt;br /&gt;
    $datagram_payload&amp;lt;/pre&amp;gt;&lt;br /&gt;
Forwarded raw datagrams are forwarded as-is to the specified host:port without a prefix. The UDP packet contains the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;          $datagram_payload&amp;lt;/pre&amp;gt;&lt;br /&gt;
As of SAM 3.2, when HEADER=true is specified in SESSION CREATE, the forwarded raw datagram will be prepended with a header line as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;          FROM_PORT=nnn&lt;br /&gt;
          TO_PORT=nnn&lt;br /&gt;
          PROTOCOL=nnn&lt;br /&gt;
          \n&lt;br /&gt;
          $datagram_payload&amp;lt;/pre&amp;gt;&lt;br /&gt;
The $destination is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
&lt;br /&gt;
=== SAM Anonymous (Raw) Datagrams ===&lt;br /&gt;
&lt;br /&gt;
Squeezing the most out of I2P&#039;s bandwidth, SAM allows clients to send and receive anonymous datagrams, leaving authentication and reply information up to the client themselves. These datagrams are unreliable and unordered, and may be up to 32768 bytes.&lt;br /&gt;
&lt;br /&gt;
Minimum size is 1. For best delivery reliability, recommended maximum size is approximately 11 KB.&lt;br /&gt;
&lt;br /&gt;
After establishing a SAM session with STYLE=RAW, the client can send anonymous datagrams through the SAM bridge exactly the same way as [[v3dgsend|sending repliable datagrams]].&lt;br /&gt;
&lt;br /&gt;
Both ways of receiving datagrams are also available for anonymous datagrams.&lt;br /&gt;
&lt;br /&gt;
Received datagrams are written by SAM on the socket from which the datagram session was opened, if a forwarding PORT is not specified in the SESSION CREATE command. This is the v1/v2-compatible way of receiving datagrams.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- RAW RECEIVED&lt;br /&gt;
          SIZE=$numBytes&lt;br /&gt;
          FROM_PORT=nnn                      # SAM 3.2 or higher only&lt;br /&gt;
          TO_PORT=nnn                        # SAM 3.2 or higher only&lt;br /&gt;
          PROTOCOL=nnn                       # SAM 3.2 or higher only&lt;br /&gt;
          \n&lt;br /&gt;
      [$numBytes of data]&amp;lt;/pre&amp;gt;&lt;br /&gt;
When anonymous datagrams are to be forwarded to some host:port, the bridge sends to the specified host:port a message containing the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;          $datagram_payload&amp;lt;/pre&amp;gt;&lt;br /&gt;
As of SAM 3.2, when HEADER=true is specified in SESSION CREATE, the forwarded raw datagram will be prepended with a header line as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;          FROM_PORT=nnn&lt;br /&gt;
          TO_PORT=nnn&lt;br /&gt;
          PROTOCOL=nnn&lt;br /&gt;
          \n&lt;br /&gt;
          $datagram_payload&amp;lt;/pre&amp;gt;&lt;br /&gt;
For an alternate method of sending anonymous datagrams, see [[#dgsend|RAW SEND]].&lt;br /&gt;
&lt;br /&gt;
=== DATAGRAM SEND, RAW SEND (V1/V2 Compatible Datagram Handling) ===&lt;br /&gt;
&lt;br /&gt;
In SAM V3, the preferred way to send datagrams is via the datagram socket at port 7655 as documented above. However, repliable datagrams may be sent directly via the SAM bridge socket using the DATAGRAM SEND command, as documented in [[sam|SAM V1]] and [[samv2|SAM V2]].&lt;br /&gt;
&lt;br /&gt;
As of release 0.9.14 (version 3.1), anonymous datagrams may be sent directly via the SAM bridge socket using the RAW SEND command, as documented in [[sam|SAM V1]] and [[samv2|SAM V2]].&lt;br /&gt;
&lt;br /&gt;
As of release 0.9.24 (version 3.2), DATAGRAM SEND and RAW SEND may include the parameters FROM_PORT=nnnn and/or TO_PORT=nnnn to override the default ports. As of release 0.9.24 (version 3.2), RAW SEND may include the parameter PROTOCOL=nnn to override the default protocol.&lt;br /&gt;
&lt;br /&gt;
These commands do &#039;&#039;not&#039;&#039; support the ID parameter. The datagrams are sent to the most recently created DATAGRAM- or RAW-style session, as appropriate. Support for the ID parameter may be added in a future release.&lt;br /&gt;
&lt;br /&gt;
=== MASTER Sessions (V3.3 and higher) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Version 3.3 was introduced in I2P release 0.9.25.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
SAM v3.3 adds support for running streaming, datagrams, and raw subsessions on the same master session, and for running multiple subsessions of the same style. All subsession traffic uses a single destination, or set of tunnels. Routing of traffic from I2P is based on the port and protocol options for the subsessions.&lt;br /&gt;
&lt;br /&gt;
To create multiplexed subsessions, you must create a master session and then add subsessions to the master session. Each subsession must have a unique id and a unique listen protocol and port. Subsessions may also be removed from the master session.&lt;br /&gt;
&lt;br /&gt;
With a MASTER session and a combination of subsessions, a SAM client may support multiple applications, or a single sophisticated application using a variety of protocols, on a single set of tunnels. For example, a bittorrent client could set up a streaming subsession for peer-to-peer connections, together with datagram and raw subsessions for DHT communication.&lt;br /&gt;
&lt;br /&gt;
==== Creating a MASTER Session ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  SESSION CREATE&lt;br /&gt;
          STYLE=MASTER&lt;br /&gt;
          ID=$nickname&lt;br /&gt;
          DESTINATION={$privkey,TRANSIENT}&lt;br /&gt;
          [option=value]*                      # I2CP and streaming options&amp;lt;/pre&amp;gt;&lt;br /&gt;
The SAM bridge will respond with success or failure as in [[#sessionresponse|the response to a standard SESSION CREATE]].&lt;br /&gt;
&lt;br /&gt;
Do not set the PORT, HOST, FROM_PORT, TO_PORT, PROTOCOL, LISTEN_PORT, LISTEN_PROTOCOL, or HEADER options on a master session. You may not send any data on a MASTER session ID or on the control socket. All commands such as STREAM CONNECT, DATAGRAM SEND, etc. must use the subsession ID on a separate socket.&lt;br /&gt;
&lt;br /&gt;
The MASTER session connects to the router and builds tunnels. When the SAM bridge responds, tunnels have been built and the session is ready for subsessions to be added. All [[en/docs/protocol/i2cp|I2CP]] options pertaining to tunnel parameters such as length, quantity, and nickname must be provided in the master&#039;s SESSION CREATE.&lt;br /&gt;
&lt;br /&gt;
All utility commands are supported on a master session.&lt;br /&gt;
&lt;br /&gt;
When the master session is closed, all subsessions get closed also.&lt;br /&gt;
&lt;br /&gt;
==== Creating a Subsession ====&lt;br /&gt;
&lt;br /&gt;
Using the same control socket on which the MASTER session was created:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  SESSION ADD&lt;br /&gt;
          STYLE={STREAM,DATAGRAM,RAW}&lt;br /&gt;
          ID=$nickname                         # must be unique&lt;br /&gt;
          [PORT=$port]                         # Required for DATAGRAM and RAW, invalid for STREAM&lt;br /&gt;
          [HOST=$host]                         # Optional for DATAGRAM and RAW, invalid for STREAM&lt;br /&gt;
          [FROM_PORT=nnn]                      # For outbound traffic, default 0&lt;br /&gt;
          [TO_PORT=nnn]                        # For outbound traffic, default 0&lt;br /&gt;
          [PROTOCOL=nnn]                       # For outbound traffic for STYLE=RAW only, default 18&lt;br /&gt;
          [LISTEN_PORT=nnn]                    # For inbound traffic, default is the FROM_PORT value.&lt;br /&gt;
                                               # For STYLE=STREAM, only the FROM_PORT value or 0 is allowed.&lt;br /&gt;
          [LISTEN_PROTOCOL=nnn]                # For inbound traffic for STYLE=RAW only.&lt;br /&gt;
                                               # Default is the PROTOCOL value; 6 (streaming) is disallowed&lt;br /&gt;
          [HEADER={true,false}]                # For STYLE=RAW only, default false&lt;br /&gt;
          [option=value]*                      # I2CP and streaming options&amp;lt;/pre&amp;gt;&lt;br /&gt;
The SAM bridge will respond with success or failure as in [[#sessionresponse|the response to a standard SESSION CREATE]]. As the tunnels were already built in the master SESSION CREATE, the SAM bridge should respond immediately.&lt;br /&gt;
&lt;br /&gt;
Do not set the DESTINATION option on a SESSION ADD. The subsession will use the destination specified in the master session. All subsessions must be added on the control socket, i.e. the same connection that you created the master session on.&lt;br /&gt;
&lt;br /&gt;
Multiple subsessions must have options sufficiently unique that incoming data can be routed correctly. In particular, multiple sessions of the same style must have different LISTEN_PORT options (and/or LISTEN_PROTOCOL, for RAW only). A SESSION ADD with listen port and protocol that duplicates an existing subsession will result in an error.&lt;br /&gt;
&lt;br /&gt;
The LISTEN_PORT is the local I2P port, i.e. the receive (TO) port for incoming data. If the LISTEN_PORT is not specified, the FROM_PORT value will be used. If the LISTEN_PORT and FROM_PORT are not specified, incoming routing will be based on STYLE and PROTOCOL alone. For LISTEN_PORT and LISTEN_PROTOCOL, 0 means any value, that is, a wildcard. If both LISTEN_PORT and LISTEN_PROTOCOL are 0, this subsession will be the default for incoming traffic that does not get routed to another subsession. Incoming streaming traffic (protocol 6) will never be routed to a RAW subsession, even if its LISTEN_PROTCOL is 0. A RAW subsession may not set a LISTEN_PROTOCOL of 6. If there is no default or subsession that matching the protocol and port of incoming traffic, that data will be dropped.&lt;br /&gt;
&lt;br /&gt;
Use the subsession ID, not the master session ID, for sending and receiving data. All commands such as STREAM CONNECT, DATAGRAM SEND, etc. must use the subsession ID.&lt;br /&gt;
&lt;br /&gt;
All utility commands are supported on a master session or subsession. v1/v2 datagram/raw sending/receiving are not supported on a master session or on subsessions.&lt;br /&gt;
&lt;br /&gt;
==== Stopping a Subsession ====&lt;br /&gt;
&lt;br /&gt;
Using the same control socket on which the MASTER session was created:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  SESSION REMOVE&lt;br /&gt;
          ID=$nickname&amp;lt;/pre&amp;gt;&lt;br /&gt;
This removes a subsession from the master session. Do not set any other options on a SESSION REMOVE. Subsessions must be removed on the control socket, i.e. the same connection that you created the master session on. After a subsession is removed, it is closed and may not be used to send or receive data.&lt;br /&gt;
&lt;br /&gt;
The SAM bridge will respond with success or failure as in [[#sessionresponse|the response to a standard SESSION CREATE]].&lt;br /&gt;
&lt;br /&gt;
=== SAM Utility Commands ===&lt;br /&gt;
&lt;br /&gt;
Some utility commands require a pre-existing session and some do not. See details below.&lt;br /&gt;
&lt;br /&gt;
==== Host Name Lookup ====&lt;br /&gt;
&lt;br /&gt;
The following message can be used by the client to query the SAM bridge for name resolution:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; NAMING LOOKUP&lt;br /&gt;
        NAME=$name&amp;lt;/pre&amp;gt;&lt;br /&gt;
which is answered by&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; NAMING REPLY&lt;br /&gt;
        RESULT=$result&lt;br /&gt;
        NAME=$name&lt;br /&gt;
        [VALUE=$destination]&lt;br /&gt;
        [MESSAGE=$message]&amp;lt;/pre&amp;gt;&lt;br /&gt;
The RESULT value may be one of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    OK&lt;br /&gt;
    INVALID_KEY&lt;br /&gt;
    KEY_NOT_FOUND&amp;lt;/pre&amp;gt;&lt;br /&gt;
If NAME=ME, then the reply will contain the destination used by the current session (useful if you&#039;re using a TRANSIENT one). If $result is not OK, MESSAGE may convey a descriptive message, such as &amp;amp;quot;bad format&amp;amp;quot;, etc. INVALID_KEY implies that something is wrong with $name in the request, possibly invalid characters.&lt;br /&gt;
&lt;br /&gt;
The $destination is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
&lt;br /&gt;
NAMING LOOKUP does not require that a session has been created first. However, in some implementations, a .b32.i2p lookup which is uncached and requires a network query may fail, as no client tunnels are available for the lookup.&lt;br /&gt;
&lt;br /&gt;
==== Destination Key Generation ====&lt;br /&gt;
&lt;br /&gt;
Public and private base64 keys can be generated using the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  DEST GENERATE&lt;br /&gt;
          [SIGNATURE_TYPE=value]               # SAM 3.1 or higher only, default DSA_SHA1&amp;lt;/pre&amp;gt;&lt;br /&gt;
which is answered by&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; DEST REPLY&lt;br /&gt;
      PUB=$destination&lt;br /&gt;
      PRIV=$privkey&amp;lt;/pre&amp;gt;&lt;br /&gt;
As of version 3.1 (I2P 0.9.14), an optional parameter SIGNATURE_TYPE is supported. The SIGNATURE_TYPE value may be any name (e.g. ECDSA_SHA256_P256, case insensitive) or number (e.g. 1) that is supported by [[en/docs/spec/common-structures#type_Certificate|Key Certificates]]. The default is DSA_SHA1.&lt;br /&gt;
&lt;br /&gt;
The $destination is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
&lt;br /&gt;
The $privkey is the base 64 of the concatenation of the [[en/docs/spec/common-structures#type_Destination|Destination]] followed by the [[en/docs/spec/common-structures#type_PrivateKey|Private Key]] followed by the [[en/docs/spec/common-structures#type_SigningPrivateKey|Signing Private Key]], which is 884 or more base 64 characters (663 or more bytes in binary), depending on signature type. The binary format is specified in [http://echelon.i2p/javadoc/net/i2p/data/PrivateKeyFile.html Private Key File].&lt;br /&gt;
&lt;br /&gt;
DEST GENERATE does not require that a session has been created first.&lt;br /&gt;
&lt;br /&gt;
DEST GENERATE cannot be used to create a destination with offline signatures.&lt;br /&gt;
&lt;br /&gt;
==== PING/PONG (SAM 3.2 or higher) ====&lt;br /&gt;
&lt;br /&gt;
Either the client or server may send:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    PING[ arbitrary text]&amp;lt;/pre&amp;gt;&lt;br /&gt;
on the control port, with the response:&lt;br /&gt;
&amp;lt;pre&amp;gt;    PONG[ arbitrary text from the ping]&amp;lt;/pre&amp;gt;&lt;br /&gt;
to be used for control socket keepalive. Either side may close the session and socket if no response is received in a reasonable time, implementation dependent.&lt;br /&gt;
If a timeout occurs waiting for a PONG from the client, the bridge may send:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- SESSION STATUS RESULT=I2P_ERROR MESSAGE=$message&amp;lt;/pre&amp;gt;&lt;br /&gt;
and then disconnect.&lt;br /&gt;
If a timeout occurs waiting for a PONG from the bridge, the client may simply disconnect.&lt;br /&gt;
&lt;br /&gt;
PING/PONG do not require that a session has been created first.&lt;br /&gt;
&lt;br /&gt;
==== QUIT/STOP/EXIT (SAM 3.2 or higher, optional features) ====&lt;br /&gt;
&lt;br /&gt;
Commands QUIT, STOP and EXIT will close the session and socket. Implementation is optional, for ease in testing via telnet. Whether there is any response before the socket is closed (for example, a SESSION STATUS message) is implementation-specific and outside the scope of this specification.&lt;br /&gt;
&lt;br /&gt;
QUIT/STOP/EXIT do not require that a session has been created first.&lt;br /&gt;
&lt;br /&gt;
==== HELP (optional feature) ====&lt;br /&gt;
&lt;br /&gt;
Servers may implement a HELP command. Implementation is optional, for ease in testing via telnet. Output format and detection of the end of the output is implementation-specific and outside the scope of this specification.&lt;br /&gt;
&lt;br /&gt;
HELP does not require that a session has been created first.&lt;br /&gt;
&lt;br /&gt;
==== Authorization Configuration (SAM 3.2 or higher, optional feature) ====&lt;br /&gt;
&lt;br /&gt;
Authorization configuration using the AUTH command. A SAM server may implement these commands to facilite persistent storage of credentials. Configuration of authentication other than with these commands is implementation-specific and outside the scope of this specification.&lt;br /&gt;
&lt;br /&gt;
* AUTH ENABLE enables authorization on subsequent connections&lt;br /&gt;
* AUTH DISABLE disables authorization on subsequent connections&lt;br /&gt;
* AUTH ADD USER=&amp;amp;quot;foo&amp;amp;quot; PASSWORD=&amp;amp;quot;bar&amp;amp;quot; adds a user/password&lt;br /&gt;
* AUTH REMOVE USER=&amp;amp;quot;foo&amp;amp;quot; removes this user&lt;br /&gt;
&lt;br /&gt;
Double quotes for user and password are recommended but not required. A double quote inside a user or password must be escaped with a backslash. On failure the server will reply with an I2P_ERROR and a message.&lt;br /&gt;
&lt;br /&gt;
AUTH does not require that a session has been created first.&lt;br /&gt;
&lt;br /&gt;
=== RESULT Values ===&lt;br /&gt;
&lt;br /&gt;
These are the values that can be carried by the RESULT field, with their meaning:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; OK              Operation completed successfully&lt;br /&gt;
 CANT_REACH_PEER The peer exists, but cannot be reached&lt;br /&gt;
 DUPLICATED_DEST The specified Destination is already in use&lt;br /&gt;
 I2P_ERROR       A generic I2P error (e.g. I2CP disconnection, etc.)&lt;br /&gt;
 INVALID_KEY     The specified key is not valid (bad format, etc.)&lt;br /&gt;
 KEY_NOT_FOUND   The naming system can&#039;t resolve the given name&lt;br /&gt;
 PEER_NOT_FOUND  The peer cannot be found on the network&lt;br /&gt;
 TIMEOUT         Timeout while waiting for an event (e.g. peer answer)&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Tunnel, I2CP, and Streaming Options ===&lt;br /&gt;
&lt;br /&gt;
These options may be passed in as name=value pairs at the end of a SAM SESSION CREATE line.&lt;br /&gt;
&lt;br /&gt;
All sessions may include [[en/docs/protocol/i2cp#options|I2CP options such as tunnel lengths]]. STREAM sessions may include [[en/docs/api/streaming#options|Streaming library options]]. See those references for option names and defaults.&lt;br /&gt;
&lt;br /&gt;
=== BASE 64 Notes ===&lt;br /&gt;
&lt;br /&gt;
Base 64 encoding must use the I2P standard Base 64 alphabet &amp;amp;quot;A-Z, a-z, 0-9, -, ~&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Client Library Implementations ===&lt;br /&gt;
&lt;br /&gt;
Client libraries are available for C, C++, C#, Perl, and Python. These are in the apps/sam/ directory in the [[en/download|I2P Source Package]]. Some may be older and have not been updated for SAMv3 support.&lt;br /&gt;
&lt;br /&gt;
=== Default SAM Setup ===&lt;br /&gt;
&lt;br /&gt;
The default SAM port is 7656. SAM is not enabled by default in the Java I2P Router; it must be started manually, or configured to start automatically, on the configure clients page in the router console, or in the clients.config file. The default SAM UDP port is 7655, listening on 127.0.0.1. These may be changed by adding the arguments sam.udp.port=nnnnn and/or sam.udp.host=w.x.y.z to the invocation.&lt;br /&gt;
&lt;br /&gt;
Configuration in other routers is implementation-specific.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Main_Page&amp;diff=53</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Main_Page&amp;diff=53"/>
		<updated>2020-01-26T00:00:11Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Welcome to the I2P wiki&lt;br /&gt;
&lt;br /&gt;
this should be a central instance for user2user help inside the I2P network.&lt;br /&gt;
Feel free to create a login and contribute content about the I2P network.&lt;br /&gt;
&lt;br /&gt;
Remind: illegal content is prohibited and will be removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|width=&amp;quot;40%&amp;quot; valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
&amp;lt;!-- LEFT --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== General information ==&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== Projects ==&lt;br /&gt;
* [[Samv3]]&lt;br /&gt;
* [[Plugins]]&lt;br /&gt;
* [[I2P-Messenger]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== Events ==&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;30%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;!-- Center --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box3|1=&lt;br /&gt;
== External ==&lt;br /&gt;
* [[BiglyBT]]&lt;br /&gt;
* [[I2Pd]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;30%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;!-- RIGHT --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== Services ==&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Main_Page&amp;diff=52</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Main_Page&amp;diff=52"/>
		<updated>2020-01-25T23:58:55Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Welcome to the I2P wiki&lt;br /&gt;
&lt;br /&gt;
this should be a central instance for user2user help inside the I2P network.&lt;br /&gt;
Feel free to create a login and contribute content about the I2P network.&lt;br /&gt;
&lt;br /&gt;
Remind: illegal content is prohibited and will be removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|width=&amp;quot;40%&amp;quot; valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
&amp;lt;!-- LEFT --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== General information ==&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== Projects ==&lt;br /&gt;
* [[Samv3]]&lt;br /&gt;
* [[Plugins]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== Events ==&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;30%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;!-- Center --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box3|1=&lt;br /&gt;
== External ==&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;30%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;!-- RIGHT --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== Services ==&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Main_Page&amp;diff=51</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Main_Page&amp;diff=51"/>
		<updated>2020-01-25T23:53:32Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Welcome to the I2P wiki&lt;br /&gt;
&lt;br /&gt;
this should be a central instance for user2user help inside the I2P network.&lt;br /&gt;
Feel free to create a login and contribute content about the I2P network.&lt;br /&gt;
&lt;br /&gt;
Remind: illegal content is prohibited and will be removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|width=&amp;quot;40%&amp;quot; valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
&amp;lt;!-- LEFT --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== General information ==&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== Projects ==&lt;br /&gt;
* [[Samv3]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== Events ==&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;30%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;!-- Center --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box3|1=&lt;br /&gt;
== External ==&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;30%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;!-- RIGHT --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Layout_Box2|1=&lt;br /&gt;
== Services ==&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=I2P-Messenger&amp;diff=50</id>
		<title>I2P-Messenger</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=I2P-Messenger&amp;diff=50"/>
		<updated>2020-01-25T23:52:05Z</updated>

		<summary type="html">&lt;p&gt;Idk: Add github source&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:InstantMessenger]]&lt;br /&gt;
[[Category:I2p]]&lt;br /&gt;
&amp;lt;languages /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction to I2P-Messenger ==&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
I2P-Messenger is a simple QT-based (QT is a a cross-platform application framework), serverless, end-to-end-encrypted instant messenger for I2P ([[I2pRfc/I2pRfc0002SimpleAnonymousMessaging| SAM bridge]]). No servers can log the user&#039;s conversations. No ISP can log with whom the user chats, when, or for how long. As it is serverless, it can make use of I2P&#039;s end-to-end encryption, preventing any node between two parties from having access to the plain text. I2P-Messenger can be used for fully anonymous instant communication with persons the user doesn&#039;t even know, or, alternatively, to communicate securely and untraceably with friends, family members, or colleagues. In addition to messaging, file transfer is also supported.&lt;br /&gt;
&lt;br /&gt;
== Short description == &amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
; Author&lt;br /&gt;
: Messenger-Dev@I2P-Messenger&lt;br /&gt;
; Current Version&lt;br /&gt;
: 0.2.25 (note: 0.2.24 released in 2009)&lt;br /&gt;
; Release date&lt;br /&gt;
: 8. Dezember 2014&lt;br /&gt;
; Language&lt;br /&gt;
: [[C++| C++]]&lt;br /&gt;
; OS&lt;br /&gt;
: [[Unix]], [[Linux]], [[Mac_OS_X| Mac OS X]], [[Microsoft_Windows| Windows]]&lt;br /&gt;
; Type&lt;br /&gt;
: Instant Messenger&lt;br /&gt;
; License&lt;br /&gt;
: [[GNU_General_Public_License| GPL]] ([[Free_Software| Free Software]])&lt;br /&gt;
&lt;br /&gt;
== The GUI == &amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Screenshots are from v0.2.25 (2015)&lt;br /&gt;
&lt;br /&gt;
=== The main window === &amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
[[File:I2P-Messenger.png|left|I2P-Messenger.png]]Symbols from the left to the right:&lt;br /&gt;
# 1. add a new user&lt;br /&gt;
# 2. open a window in order to find others users&lt;br /&gt;
# 3. settings&lt;br /&gt;
# 4. debug information&lt;br /&gt;
# 5. copy your own address in the clipboard (the issue on a homepage / forum or the dispatch by E-mail to interlocutor can protect against identity theft)&lt;br /&gt;
# 6. red button to close the messenger&lt;br /&gt;
# 7. (hidden) button &#039;About&#039;&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Settings window === &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
[[File:I2P-Messenger-Settings.png|center|I2P-Messenger-Settings.png]]&lt;br /&gt;
With the default settings I2P messenger runs optimally, only the users details should be adapted. It is advisable to write the language(s) you speak, and your the interests in the area &#039;User Details&#039;.&lt;br /&gt;
&lt;br /&gt;
=== The window where to add a other participant === &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
[[File:I2P-Messenger-Anwendersuche.png|center|I2P-Messenger-Anwendersuche.png]] &lt;br /&gt;
The fields in &#039;Options&#039; are empty by default (example: nickname), without other information I2P messenger is able to find all publicly visible participants after clicking on the button &#039;Search&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Chat window === &amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
[[File:I2P-Messenger-Chatbereich.png|center|I2P-Messenger-Chatbereich.png]]&lt;br /&gt;
The online window: at the top there is two tabs for the online chat and offline chat; under it the news area of the interlocutor; in the middle a menu for options; in the lower part this your own area where to write. Of right side there is a optional avatar image.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
Das Symbol links in der Mitte des Fensters ruft ein Dialog zum auswählen einer Datei auf, die verschickt werden werden kann; die anderen Symbole rechts daneben sind zum formatieren des Textes gedacht. Nachrichten können auch dann gesendet werden, wenn die Gesprächspartner offline sind; I2P-Messenger speichert sie solange es aktiv ist und überträgt sie, sobald die Adressaten wieder online sind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
Belegung der Tastatur: Die Eingabetaste ↩ verschickt den geschriebenen Text; in Verbindung mit der Umschalttaste, oder durch die Eingabetaste im numerischen Block (Entertaste), wird ein Zeilenumbruch erzwungen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
If the mouse goes to a certain place of the text area of the interlocutor, your own answer takes place exactly at this point.&lt;br /&gt;
&lt;br /&gt;
== Installation == &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== I2P Setup === &amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
[[I2pRfc/I2pRfc0002SimpleAnonymousMessaging| SAM application bridge]] must be enabled in your I2P router: [http://127.0.0.1:7657/configclients http://127.0.0.1:7657/configclients]&lt;br /&gt;
&lt;br /&gt;
=== Precompiled === &amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
&#039;&#039;eche|on&#039;&#039; offers a precompiled I2P-Messenger for Windows and Mac OS X: [http://echelon.i2p/qti2pmessenger http://echelon.i2p/qti2pmessenger]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
However, compiling is recommended in order to get the latest version.&lt;br /&gt;
&lt;br /&gt;
=== Compiling === &amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
I2P-Messenger package is officially supplied as a source code and can be compiled with the help of the enclosed files &amp;amp;quot;Unix_build.sh&amp;amp;quot; and &amp;amp;quot;Windows_build.bat&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
Under Linux (and probably also under Windows) Qt-4 development environment&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Qt_(software)&amp;lt;/ref&amp;gt; is demanded for compiling (libqt4-dev under Debian), details stand in the enclosed file &amp;amp;quot;Readme.txt&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
Source code:&lt;br /&gt;
* [http://i2pwiki.i2p/GitDe Git]-Repository: [http://git.repo.i2p/w/I2P-Messenger-QT.git http://git.repo.i2p/w/I2P-Messenger-QT.git]&lt;br /&gt;
&lt;br /&gt;
== What files to backup ? == &amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
Backup and restore the following files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
* application.ini&lt;br /&gt;
* UserBlockList.dat&lt;br /&gt;
* users.config&lt;br /&gt;
&lt;br /&gt;
== References == &amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also == &amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
* [[I2P-Messenger-alt/es]]&lt;br /&gt;
&lt;br /&gt;
== External links == &amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
Forums:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
* (source code) [https://github.com/nonlinear-chaos-order-etc-etal/i2pchat] (Github Source)&lt;br /&gt;
* (en) [http://forum.i2p/viewforum.php?f=28 http://forum.i2p/viewforum.php?f=28] (English)&lt;br /&gt;
* (de) [http://forum.i2p/viewforum.php?f=31 http://forum.i2p/viewforum.php?f=31] (Deutsch)&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Category:Bundles_I2P&amp;diff=49</id>
		<title>Category:Bundles I2P</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Category:Bundles_I2P&amp;diff=49"/>
		<updated>2020-01-25T23:47:42Z</updated>

		<summary type="html">&lt;p&gt;Idk: Created page with &amp;quot;This category applies to software which bundles I2P(Including via i2pd or i2p-zero, for example) either by linking or by incorporating it into an installer, like BiglyBT. It d...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This category applies to software which bundles I2P(Including via i2pd or i2p-zero, for example) either by linking or by incorporating it into an installer, like BiglyBT. It does not apply to software which does not bundle an I2P router implementation.&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=BiglyBT&amp;diff=48</id>
		<title>BiglyBT</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=BiglyBT&amp;diff=48"/>
		<updated>2020-01-25T23:44:56Z</updated>

		<summary type="html">&lt;p&gt;Idk: Add Bundles I2P category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Other languages: [[/de|Deutsch]]&lt;br /&gt;
&lt;br /&gt;
= The following are copied citations. =&lt;br /&gt;
&lt;br /&gt;
[[Image:BiglyBTv1.2.0.0.png|thumb|BiglyBT 1.2.0.0: Dashboard with rotating 3D view. One of three freely configurable themes in addition to the classic view.]]&lt;br /&gt;
BiglyBT is a feature filled, open source, ad-free, bittorrent client. We&#039;ve kept all of the features you love, while dropping the ones you probably don&#039;t (such as ads and third party software). If you are already using Azureus or Vuze, you&#039;ll have the option to copy and migrate the configuration settings, downloads, and plugins.&amp;lt;ref&amp;gt;https://www.biglybt.com/&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
Former [[Vuze]] developers, including the person supporting the I2P plugin, have left Vuze and forked the software, and named it BiglyBT.&amp;lt;ref&amp;gt;https://torrentfreak.com/former-vuze-developers-launch-biglybt-a-new-open-source-torrent-client-170803/&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://torrentfreak.com/tumbleweed-at-vuze-as-torrent-client-development-grinds-to-a-halt-170710/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As long as Vuze users aren&#039;t using something that BiglyBT doesn&#039;t have (which is mainly the Vuze Plus features DVD Burning and Anti-virus (the other two plus features, &amp;quot;no ads&amp;quot; and &amp;quot;play now&amp;quot; are included by default in BiglyBT)) we recommend to switch to it for ongoing support and updates for both the Vuze features and the I2P plugin. BiglyBT is Java 8+ only so people stuck on older versions (mostly ancient Macs that don&#039;t support Java 8 and maybe Windows XP) can&#039;t switch.&lt;br /&gt;
&lt;br /&gt;
The I2P plugin is already available.&amp;lt;ref&amp;gt;https://plugins.biglybt.com/ (I2P support within BiglyBT is via the &amp;quot;I2P Helper&amp;quot; plugin - it will automatically be installed under a number of circumstances when needed - this address is for the manual installation.)&amp;lt;/ref&amp;gt; When a Vuze user installs BiglyBT they are prompted to migrate config and plugins so things should be straightforward.&amp;lt;ref&amp;gt;http://zzz.i2p/topics/2367-vuze-users-recommended-to-switch-to-biglybt&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
In addition to the standard Bittorrent Client Features ([[Magnet URI]], Preload Magnet metadata, [[Super-seeding]], Embedded tracker, [[UPnP]], NAT Port Mapping Protocol, NAT traversal, [[DHT]], [[Peer exchange]], Encryption, UDP tracker, LPD), BiglyBT also offers:&lt;br /&gt;
&lt;br /&gt;
===Downloading Features===&lt;br /&gt;
&lt;br /&gt;
[[Image:BiglyBT-Swarm_Merging.png|thumb|Swarm Merging. Above a torrent from an external tracker with connections to I2P, below the same content but only as I2P-Torrent. The contents are merged.]]&lt;br /&gt;
* Swarm Merging to complete torrents that do not have all the available bits, and to speed up downloading&lt;br /&gt;
* Rate limiting globally, by download, by tag, by peer-set (e.g. peers from a given country), by network (public/I2P) and even by peer. Overall capacity limits are also supported to work with ISP limits. Limits can also be scheduled by time of day etc.&lt;br /&gt;
* WebTorrent support - BiglyBT can download and seed to WebTorrent peers. There is also a built-in WebTorrent tracker.&lt;br /&gt;
&lt;br /&gt;
===Control Features===&lt;br /&gt;
&lt;br /&gt;
[[Image:BiglyBT-Options.png|thumb|Options]]&lt;br /&gt;
* Robust settings. If you want to control it, there’s probably a setting for it!&lt;br /&gt;
* Remote controlling via Android app (any android app that supports the Transmission RPC will do, but we recommend ).&lt;br /&gt;
&lt;br /&gt;
===Organization, Discovery &amp;amp; Social Features===&lt;br /&gt;
&lt;br /&gt;
* Tags and Categories. Allows you also to set share ratios, file locations, speed limits, etc for a group of torrents.&lt;br /&gt;
* Meta-search, with the ability to add and create custom site templates&lt;br /&gt;
* Swarm Discoveries which lists torrents that other people have downloaded along with the torrents you download.&lt;br /&gt;
* Tag Discovery to discover what other users have tagged content with. This can be very helpful before deciding to download the content.&lt;br /&gt;
* Subscriptions to RSS feeds as well as search results. You can also create your own subscription feed to share with others&lt;br /&gt;
* Decentralized ratings and comments. You can view them before the torrent is added to BiglyBT.&lt;br /&gt;
* Decentralized public and anonymous chats with default channels for individual torrents, tags, subscriptions, and trackers&lt;br /&gt;
[[Image:BiglyBT-AllPeers.png|thumb|This view gives an overview of all connected peers.]]&lt;br /&gt;
===Privacy/Security Features===&lt;br /&gt;
&lt;br /&gt;
* I2P support (using I2P DHT) for anonymous downloading&lt;br /&gt;
* Detection of VPNs for better integration&lt;br /&gt;
* Ability to proxy search results, subscriptions, and internal browser connections through Tor if site is inaccessible&lt;br /&gt;
&lt;br /&gt;
===Content Features===&lt;br /&gt;
&lt;br /&gt;
* Media Playback&lt;br /&gt;
* Media Conversion (Transcoding)&lt;br /&gt;
* UPnP Media Server and DLNA support, allowing devices to connect and browse your content, and allowing BiglyBT to send content directly to devices.&lt;br /&gt;
&lt;br /&gt;
===Plugins===&lt;br /&gt;
&lt;br /&gt;
* RSS to chat publisher for sharing content streams via chat&lt;br /&gt;
* Decentralized content replication for sharing arbitrary modifiable files&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
* https://www.biglybt.com/ Homepage&lt;br /&gt;
* [http://que23xpe7o3lzq6auv6stb4bha7ddavrlgqdv2cuhgd36fgfmp6q.b32.i2p/ The Vuze Wiki in I2P]&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:BitTorrent]]&lt;br /&gt;
[[Category:BitTorrent-Client]]&lt;br /&gt;
[[Category:Filesharing]]&lt;br /&gt;
[[Category:I2P-Software]]&lt;br /&gt;
[[Category:Bundles_I2P]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Category:Unofficial_Products&amp;diff=47</id>
		<title>Category:Unofficial Products</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Category:Unofficial_Products&amp;diff=47"/>
		<updated>2020-01-25T23:32:18Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;[[category:Unofficial_Products]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would also be the category for I2Speed, or any other third-party modification to the official I2P router implementation. It is not the category for products which bundle I2P from third parties, i.e. BiglyBT. We identify these products differently in the wiki purely to provide categorical information about their provenance to the I2P Community, it is not a commentary on any behavior that they introduce. In other words, the official project cannot vouch for their behavior, use them at your own risk and please, participate in the documentation process by going into detail on the wiki. Thank you.&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Delete_this&amp;diff=46</id>
		<title>Delete this</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Delete_this&amp;diff=46"/>
		<updated>2020-01-25T23:26:11Z</updated>

		<summary type="html">&lt;p&gt;Idk: Created page with &amp;quot;category:Unofficial_Products&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Unofficial_Products]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Category:Unofficial_Products&amp;diff=45</id>
		<title>Category:Unofficial Products</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Category:Unofficial_Products&amp;diff=45"/>
		<updated>2020-01-25T23:25:32Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;[[category:Unofficial_Products]]&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Category:Unofficial_Products&amp;diff=44</id>
		<title>Category:Unofficial Products</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Category:Unofficial_Products&amp;diff=44"/>
		<updated>2020-01-25T23:23:42Z</updated>

		<summary type="html">&lt;p&gt;Idk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;[[category:Unofficial_products]]&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Category:Unofficial_Products&amp;diff=43</id>
		<title>Category:Unofficial Products</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Category:Unofficial_Products&amp;diff=43"/>
		<updated>2020-01-25T23:21:27Z</updated>

		<summary type="html">&lt;p&gt;Idk: Created page with &amp;quot;&amp;lt;nowiki&amp;gt;category:name&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;[[category:name]]&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=I2P%2B&amp;diff=42</id>
		<title>I2P+</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=I2P%2B&amp;diff=42"/>
		<updated>2020-01-25T23:20:34Z</updated>

		<summary type="html">&lt;p&gt;Idk: Create a category for third-party mods&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I2P+ is an enhanced version of I2P that aims to deliver a superior user experience. Updated themes, easier to understand configuration and diagnostics, and an enhanced feature set make I2P+ a compelling alternative to the official I2P release. Additionally, I2P+ implements improvements to the router&#039;s network performance and, for routers that are firewalled, significantly increases participating traffic and network responsiveness.&lt;br /&gt;
&lt;br /&gt;
Some of the improvements:&lt;br /&gt;
&lt;br /&gt;
* Improved logging subsystem&lt;br /&gt;
* Dynamically resizing iframes for embedded content e.g. Tunnel Manager, I2PSnark &lt;br /&gt;
* Consistent font appearance across browsers/platforms&lt;br /&gt;
* Support for theme overrides for console and webapps to enable persistent changes to default themes&lt;br /&gt;
* Integrated help section with dedicated pages for troubleshooting, new users, advanced settings etc&lt;br /&gt;
* Automatic ajax refresh for console pages with dynamic content e.g. /tunnels and /jobs&lt;br /&gt;
* Elimination of &#039;L&#039; bandwidth tier routers from local tunnel builds&lt;br /&gt;
* Exclusion of older routers from local NetDB with user-configurable version threshold&lt;br /&gt;
* Console information page with at-a-glance router information&lt;br /&gt;
* Enhanced presentation of diagnostic data and configuration pages&lt;br /&gt;
&lt;br /&gt;
For more information, visit the [http://skank.i2p/ I2P+ Homepage].&lt;br /&gt;
&lt;br /&gt;
[[Category:Unofficial_Products]]&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
	<entry>
		<id>http://wiki.i2p-projekt.de/wiki/index.php?title=Samv3&amp;diff=3</id>
		<title>Samv3</title>
		<link rel="alternate" type="text/html" href="http://wiki.i2p-projekt.de/wiki/index.php?title=Samv3&amp;diff=3"/>
		<updated>2020-01-20T04:25:43Z</updated>

		<summary type="html">&lt;p&gt;Idk: Created page with &amp;quot;&amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;  &amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;  This page was last updated in June 2019 and is accurate for router version 0.9.39.   &amp;lt;/div&amp;gt; Specified...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;inner&amp;quot; role=&amp;quot;main&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fluid&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;meta&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page was last updated in June 2019 and is accurate for router version 0.9.39.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Specified below is a simple client protocol for interacting with I2P.&lt;br /&gt;
&lt;br /&gt;
SAM version 3 was introduced in I2P release 0.7.3. Alternatives: [[en/docs/api/bob|BOB(unsupported)]]. Older versions: [[en/docs/api/sam|SAM V1]], [[en/docs/api/samv2|SAM V2]],&lt;br /&gt;
&lt;br /&gt;
== Known SAM libraries ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;16%&amp;quot;| Library Name&lt;br /&gt;
!width=&amp;quot;6%&amp;quot;| Language&lt;br /&gt;
!width=&amp;quot;5%&amp;quot;| Version&lt;br /&gt;
!width=&amp;quot;4%&amp;quot;| STREAM&lt;br /&gt;
!width=&amp;quot;4%&amp;quot;| DGRAM&lt;br /&gt;
!width=&amp;quot;3%&amp;quot;| RAW&lt;br /&gt;
!width=&amp;quot;58%&amp;quot;| Site&lt;br /&gt;
|-&lt;br /&gt;
| i2psam&lt;br /&gt;
| C++, C wrapper&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
| [https://github.com/i2p/i2psam github.com/i2p/i2psam]&lt;br /&gt;
|-&lt;br /&gt;
| gosam&lt;br /&gt;
| Go&lt;br /&gt;
| 3.2&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
| no&lt;br /&gt;
| [https://github.com/eyedeekay/goSam github.com/eyedeekay/goSam]&lt;br /&gt;
|-&lt;br /&gt;
| sam3&lt;br /&gt;
| Go&lt;br /&gt;
| 3.2&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://bitbucket.org/eyedeekay/sam3 bitbucket.org/eyedeekay/sam3]&lt;br /&gt;
|-&lt;br /&gt;
| txi2p&lt;br /&gt;
| Python&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
| no&lt;br /&gt;
| [https://github.com/str4d/txi2p github.com/str4d/txi2p]&lt;br /&gt;
|-&lt;br /&gt;
| i2p.socket&lt;br /&gt;
| Python&lt;br /&gt;
| 3.2&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://github.com/majestrate/i2p.socket github.com/majestrate/i2p.socket]&lt;br /&gt;
|-&lt;br /&gt;
| i2plib&lt;br /&gt;
| Python&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://github.com/l-n-s/i2plib github.com/l-n-s/i2plib]&lt;br /&gt;
|-&lt;br /&gt;
| i2p-rs&lt;br /&gt;
| Rust&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://github.com/i2p/i2p-rs github.com/i2p/i2p-rs]&lt;br /&gt;
|-&lt;br /&gt;
| libsam3&lt;br /&gt;
| C&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://github.com/i2p/libsam3 github.com/i2p/libsam3]&lt;br /&gt;
|-&lt;br /&gt;
| mooni2p&lt;br /&gt;
| Lua&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://notabug.org/l-n-s/mooni2p notabug.org/l-n-s/mooni2p]&lt;br /&gt;
|-&lt;br /&gt;
| haskell-network-anonymous-i2p&lt;br /&gt;
| Haskell&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
| [https://github.com/solatis/haskell-network-anonymous-i2p github.com/solatis/haskell-network-anonymous-i2p]&lt;br /&gt;
|-&lt;br /&gt;
| node-i2p&lt;br /&gt;
| Javascript&lt;br /&gt;
| 3.0&lt;br /&gt;
| yes&lt;br /&gt;
| unk&lt;br /&gt;
| unk&lt;br /&gt;
| [https://github.com/redhog/node-i2p github.com/redhog/node-i2p]&lt;br /&gt;
|-&lt;br /&gt;
| Jsam&lt;br /&gt;
| Java&lt;br /&gt;
| 3.1&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
| no&lt;br /&gt;
| [https://github.com/eyedeekay/Jsam github.com/eyedeekay/Jsam]&lt;br /&gt;
|-&lt;br /&gt;
| i2pdotnet&lt;br /&gt;
| .Net&lt;br /&gt;
| 3.0&lt;br /&gt;
| yes&lt;br /&gt;
| unk&lt;br /&gt;
| unk&lt;br /&gt;
| [https://github.com/SamuelFisher/i2pdotnet github.com/SamuelFisher/i2pdotnet]&lt;br /&gt;
|-&lt;br /&gt;
| i2p.rb&lt;br /&gt;
| Ruby&lt;br /&gt;
| 3.0&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
| no&lt;br /&gt;
| [https://github.com/dryruby/i2p.rb github.com/dryruby/i2p.rb]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Version 3 Changes ==&lt;br /&gt;
&lt;br /&gt;
=== Version 3.0 Changes ===&lt;br /&gt;
&lt;br /&gt;
Version 3.0 was introduced in I2P release 0.7.3. SAM v2 provided a way to manage several sockets on the same I2P destination &#039;&#039;in parallel&#039;&#039;, i.e. the client does not have to wait for data being successfully sent on one socket before sending data on another socket. But all data transited through the same client&amp;amp;lt;--&amp;amp;gt;SAM socket, which was quite complicated to manage for the client.&lt;br /&gt;
&lt;br /&gt;
SAM v3 manages sockets in a different way: each &#039;&#039;I2P socket&#039;&#039; matches a unique client&amp;amp;lt;--&amp;amp;gt;SAM socket, which is much more simple to handle. This is similar to [[en/docs/api/bob|BOB]].&amp;lt;br /&amp;gt;&lt;br /&gt;
SAM v3 also offers a UDP port for sending datagrams through I2P, and can forward back I2P datagrams to the client&#039;s datagram server.&lt;br /&gt;
&lt;br /&gt;
=== Version 3.1 Changes ===&lt;br /&gt;
&lt;br /&gt;
Version 3.1 was introduced in I2P release 0.9.14. SAM 3.1 is the recommended minimum SAM implementation because of its support for better signature types than SAM 3.0.&lt;br /&gt;
&lt;br /&gt;
* DEST GENERATE and SESSION CREATE now support a SIGNATURE_TYPE parameter.&lt;br /&gt;
* The MIN and MAX parameters in HELLO VERSION are now optional.&lt;br /&gt;
* The MIN and MAX parameters in HELLO VERSION now support single-digit versions such as &amp;amp;quot;3&amp;amp;quot;.&lt;br /&gt;
* RAW SEND is now supported on the bridge socket.&lt;br /&gt;
&lt;br /&gt;
=== Version 3.2 Changes ===&lt;br /&gt;
&lt;br /&gt;
Version 3.2 was introduced in I2P release 0.9.24.&lt;br /&gt;
&lt;br /&gt;
==== I2CP Port and Protocol Support ====&lt;br /&gt;
&lt;br /&gt;
* SESSION CREATE options FROM_PORT and TO_PORT&lt;br /&gt;
* SESSION CREATE STYLE=RAW option PROTOCOL&lt;br /&gt;
* STREAM CONNECT, DATAGRAM SEND, and RAW SEND options FROM_PORT and TO_PORT&lt;br /&gt;
* RAW SEND option PROTOCOL&lt;br /&gt;
* DATAGRAM RECEIVED, RAW RECEIVED, and forwarded or received streams and repliable datagrams, includes FROM_PORT and TO_PORT&lt;br /&gt;
* RAW session option HEADER=true will cause the forwarded raw datagrams to be prepended with a line containing PROTOCOL=nnn FROM_PORT=nnnn TO_PORT=nnnn&lt;br /&gt;
* The first line of datagrams sent through port 7655 may now start with any 3.x version&lt;br /&gt;
* The first line of datagrams sent through port 7655 may contain any of the options FROM_PORT, TO_PORT, PROTOCOL&lt;br /&gt;
* RAW RECEIVED includes PROTOCOL=nnn&lt;br /&gt;
&lt;br /&gt;
==== SSL and Authentication ====&lt;br /&gt;
&lt;br /&gt;
* USER/PASSWORD in the HELLO parameters for authorization. See [[#userpw|below]].&lt;br /&gt;
* Optional authorization configuration with the AUTH command. See [[#auth|below]].&lt;br /&gt;
* Optional SSL/TLS support on the control socket. See [[#ssl|below]].&lt;br /&gt;
* STREAM FORWARD option SSL=true&lt;br /&gt;
&lt;br /&gt;
==== Multithreading ====&lt;br /&gt;
&lt;br /&gt;
* Concurrent pending STREAM ACCEPTs are allowed on the same session ID.&lt;br /&gt;
&lt;br /&gt;
==== Command Line Parsing and Keepalive ====&lt;br /&gt;
&lt;br /&gt;
* Optional commands QUIT, STOP and EXIT to close the session and socket. See [[#quit|below]].&lt;br /&gt;
* Command parsing will properly handle UTF-8&lt;br /&gt;
* Command parsing reliably handles whitespace inside quotes&lt;br /&gt;
* A backslash &#039;\&#039; may escape quotes on the command line&lt;br /&gt;
* Recommended that the server map commands to upper case, for ease in testing via telnet.&lt;br /&gt;
* Empty option values such as PROTOCOL or PROTOCOL= may be allowed, implementation dependent.&lt;br /&gt;
* PING/PONG for keepalive. See below.&lt;br /&gt;
* Servers may implement timeouts for the HELLO or subsequent commands, implementation dependent.&lt;br /&gt;
&lt;br /&gt;
=== Version 3.3 Changes ===&lt;br /&gt;
&lt;br /&gt;
Version 3.3 was introduced in I2P release 0.9.25.&lt;br /&gt;
&lt;br /&gt;
* The same session may be used for streams, datagrams, and raw simultaneously. Incoming packets and streams will be routed based on I2P protocol and to-port. See [[#master|the MASTER section below]].&lt;br /&gt;
* DATAGRAM SEND and RAW SEND now support options SEND_TAGS, TAG_THRESHOLD, EXPIRES, and SEND_LEASESET. See [[#v3dgsend|the datagram sending section below]].&lt;br /&gt;
&lt;br /&gt;
== Version 3 Protocol ==&lt;br /&gt;
&lt;br /&gt;
=== Simple Anonymous Messaging (SAM) Version 3.3 Specification Overview ===&lt;br /&gt;
&lt;br /&gt;
The client application talks to the SAM bridge, which deals with all of the I2P functionality (using the [[en/docs/api/streaming|streaming library]] for virtual streams, or [[en/docs/protocol/i2cp|I2CP]] directly for datagrams).&lt;br /&gt;
&lt;br /&gt;
By default, the client&amp;amp;lt;--&amp;amp;gt;SAM bridge communication is unencrypted and unauthenticated. The SAM bridge may support SSL/TLS connections; configuration and implementation details are outside the scope of this specification. As of SAM 3.2, optional authentication user/password parameters are supported in the initial handshake and may be required by the bridge.&lt;br /&gt;
&lt;br /&gt;
I2P communications can take three distinct forms:&lt;br /&gt;
&lt;br /&gt;
* [[en/docs/api/streaming|Virtual streams]]&lt;br /&gt;
* [[en/docs/spec/datagrams#repliable|Repliable datagrams]] (messages with a FROM field)&lt;br /&gt;
* [[en/docs/spec/datagrams#raw|Anonymous datagrams]] (raw anonymous messages)&lt;br /&gt;
&lt;br /&gt;
I2P communications are supported by I2P sessions, and each I2P session is bound to an address (called destination). An I2P session is associated with one of the three types above, and cannot carry communications of another type, unless using [[#master|MASTER sessions]].&lt;br /&gt;
&lt;br /&gt;
=== Encoding and Escaping ===&lt;br /&gt;
&lt;br /&gt;
All of these SAM messages are sent on a single line, terminated by the newline character (\n). Prior to SAM 3.2, only 7-bit ASCII was supported. As of SAM 3.2, the encoding must be UTF-8. Any UTF8-encoded keys or values should work.&lt;br /&gt;
&lt;br /&gt;
The formatting shown in this specification below is merely for readability, and while the first two words in each message must stay in their specific order, the ordering of the key=value pairs can change (e.g. &amp;amp;quot;ONE TWO A=B C=D&amp;amp;quot; or &amp;amp;quot;ONE TWO C=D A=B&amp;amp;quot; are both perfectly valid constructions). In addition, the protocol is case-sensitive. In the following, message examples are preceded by &amp;amp;quot;-&amp;amp;gt; &amp;amp;quot; for messages sent by the client to the SAM bridge, and by &amp;amp;quot;&amp;amp;lt;- &amp;amp;quot; for messages sent by the SAM bridge to the client.&lt;br /&gt;
&lt;br /&gt;
The basic command or response line takes one of the following forms:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;     COMMAND SUBCOMMAND [key=value] [key=value] ...&lt;br /&gt;
     COMMAND                                           # As of SAM 3.2&lt;br /&gt;
     PING[ arbitrary text]                             # As of SAM 3.2&lt;br /&gt;
     PONG[ arbitrary text]                             # As of SAM 3.2&amp;lt;/pre&amp;gt;&lt;br /&gt;
COMMAND without a SUBCOMMAND is supported for some new commands in SAM 3.2 only.&lt;br /&gt;
&lt;br /&gt;
Key=value pairs must be separated by a single space. (As of SAM 3.2, multiple spaces are allowed) Values may be enclosed in double quotes if they contain spaces, e.g. key=&amp;amp;quot;long value text&amp;amp;quot;. (Prior to SAM 3.2, this did not work reliably in some implementations)&lt;br /&gt;
&lt;br /&gt;
Prior to SAM 3.2, there was no escaping mechanism. As of SAM 3.2, double quotes may be escaped with a backslash &#039;\&#039; and a backslash may be represented as two backslashes &#039;\\&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Empty values ===&lt;br /&gt;
&lt;br /&gt;
As of SAM 3.2, empty option values such as KEY, KEY=, or KEY=&amp;amp;quot;&amp;amp;quot; may be allowed, implementation dependent.&lt;br /&gt;
&lt;br /&gt;
=== Case Sensitivity ===&lt;br /&gt;
&lt;br /&gt;
The protocol, as specified, is case-sensitive. It is recommended but not required that the server map commands to upper case, for ease in testing via telnet. This would allow, for example, &amp;amp;quot;hello version&amp;amp;quot; to work. This is implementation-dependent. Do not map keys or values to upper case, as this would corrupt [[en/docs/protocol/i2cp|I2CP]] options.&lt;br /&gt;
&lt;br /&gt;
=== SAM Connection Handshake ===&lt;br /&gt;
&lt;br /&gt;
No SAM communication can occur until after the client and bridge have agreed on a protocol version, which is done by the client sending a HELLO and the bridge sending a HELLO REPLY:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  HELLO VERSION&lt;br /&gt;
          [MIN=$min]            # Optional as of SAM 3.1, required for 3.0 and earlier&lt;br /&gt;
          [MAX=$max]            # Optional as of SAM 3.1, required for 3.0 and earlier&lt;br /&gt;
          [USER=&amp;amp;quot;xxx&amp;amp;quot;]          # As of SAM 3.2, required if authentication is enabled, see below&lt;br /&gt;
          [PASSWORD=&amp;amp;quot;yyy&amp;amp;quot;]      # As of SAM 3.2, required if authentication is enabled, see below&amp;lt;/pre&amp;gt;&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  HELLO REPLY RESULT=OK VERSION=3.1&amp;lt;/pre&amp;gt;&lt;br /&gt;
As of version 3.1 (I2P 0.9.14), the MIN and MAX parameters are optional. SAM will always return the highest version possible given the MIN and MAX constraints, or the current server version if no constraints are given. If the SAM bridge cannot find a suitable version, it replies with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- HELLO REPLY RESULT=NOVERSION&amp;lt;/pre&amp;gt;&lt;br /&gt;
If some error occurred, such as a bad request format, it replies with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- HELLO REPLY RESULT=I2P_ERROR MESSAGE=$message&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== SSL ====&lt;br /&gt;
&lt;br /&gt;
The server&#039;s control socket may optionally offer SSL/TLS support, as configured on the server and client. Implementations may offer other transport layers as well; this is outside the scope of the protocol definition.&lt;br /&gt;
&lt;br /&gt;
==== Authorization ====&lt;br /&gt;
&lt;br /&gt;
For authorization, client adds USER=&amp;amp;quot;xxx&amp;amp;quot; PASSWORD=&amp;amp;quot;yyy&amp;amp;quot; to the HELLO parameters. Double quotes for user and password are recommended but not required. A double quote inside a user or password must be escaped with a backslash. On failure the server will reply with an I2P_ERROR and a message. It is recommended that SSL be enabled on any SAM servers where authorization is required.&lt;br /&gt;
&lt;br /&gt;
==== Timeouts ====&lt;br /&gt;
&lt;br /&gt;
Servers may implement timeouts for the HELLO or subsequent commands, implementation dependent. Clients should promptly send the HELLO and the next command after connecting.&lt;br /&gt;
&lt;br /&gt;
If a timeout occurs before the HELLO is received, the bridge replies with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- HELLO REPLY RESULT=I2P_ERROR MESSAGE=$message&amp;lt;/pre&amp;gt;&lt;br /&gt;
and then disconnects.&lt;br /&gt;
&lt;br /&gt;
If a timeout occurs after the HELLO is received but before the next command, the bridge replies with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- SESSION STATUS RESULT=I2P_ERROR MESSAGE=$message&amp;lt;/pre&amp;gt;&lt;br /&gt;
and then disconnects.&lt;br /&gt;
&lt;br /&gt;
=== I2CP Ports and Protocol ===&lt;br /&gt;
&lt;br /&gt;
As of SAM 3.2, the [[en/docs/protocol/i2cp|I2CP]] ports and protocol may be specified by the SAM client sender to be passed through to [[en/docs/protocol/i2cp|I2CP]], and the SAM bridge will pass the received [[en/docs/protocol/i2cp|I2CP]] port and protocol information to the SAM client.&lt;br /&gt;
&lt;br /&gt;
For FROM_PORT and TO_PORT, the valid range is 0-65535, and the default is 0.&lt;br /&gt;
&lt;br /&gt;
For PROTOCOL, which may be specified only for RAW, the valid range is 0-255, and the default is 18.&lt;br /&gt;
&lt;br /&gt;
For SESSION commands, the specified ports and protocol are the defaults for that session. For individual streams or datagrams, the specified ports and protocol override the session defaults. For received streams or datagrams, the indicated ports and protocol are as received from [[en/docs/protocol/i2cp|I2CP]].&lt;br /&gt;
&lt;br /&gt;
See the [[en/docs/protocol/i2cp|I2CP]] specification for more information.&lt;br /&gt;
&lt;br /&gt;
=== SAM Sessions ===&lt;br /&gt;
&lt;br /&gt;
A SAM session is created by a client opening a socket to the SAM bridge, operating a handshake, and sending a SESSION CREATE message, and the session terminates when the socket is disconnected.&lt;br /&gt;
&lt;br /&gt;
Each registered I2P Destination is uniquely associated with a session ID (or nickname).&lt;br /&gt;
&lt;br /&gt;
Each session is uniquely associated with:&lt;br /&gt;
&lt;br /&gt;
* the socket from which the client creates the session&lt;br /&gt;
* its ID (or nickname)&lt;br /&gt;
&lt;br /&gt;
==== Session Creation Request ====&lt;br /&gt;
&lt;br /&gt;
The session creation message can only use one of these forms (messages received through other forms are answered with an error message) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  SESSION CREATE&lt;br /&gt;
          STYLE={STREAM,DATAGRAM,RAW}&lt;br /&gt;
          ID=$nickname&lt;br /&gt;
          DESTINATION={$privkey,TRANSIENT}&lt;br /&gt;
          [SIGNATURE_TYPE=value]               # SAM 3.1 or higher only, for DESTINATION=TRANSIENT only, default DSA_SHA1&lt;br /&gt;
          [PORT=$port]                         # Required for DATAGRAM and RAW, invalid for STREAM&lt;br /&gt;
          [HOST=$host]                         # Optional for DATAGRAM and RAW, invalid for STREAM&lt;br /&gt;
          [FROM_PORT=nnn]                      # SAM 3.2 or higher only, default 0&lt;br /&gt;
          [TO_PORT=nnn]                        # SAM 3.2 or higher only, default 0&lt;br /&gt;
          [PROTOCOL=nnn]                       # SAM 3.2 or higher only, for STYLE=RAW only, default 18&lt;br /&gt;
          [HEADER={true,false}]                # SAM 3.2 or higher only, for STYLE=RAW only, default false&lt;br /&gt;
          [option=value]*                      # I2CP and streaming options&amp;lt;/pre&amp;gt;&lt;br /&gt;
DESTINATION specifies what destination should be used for sending and receiving messages/streams. The $privkey is the base 64 of the concatenation of the [[en/docs/spec/common-structures#type_Destination|Destination]] followed by the [[en/docs/spec/common-structures#type_PrivateKey|Private Key]] followed by the [[en/docs/spec/common-structures#type_SigningPrivateKey|Signing Private Key]], optionally followed by the [[en/docs/spec/common-structures#struct_OfflineSignature|Offline Signature]], which is 663 or more bytes in binary and 884 or more bytes in base 64, depending on signature type. The binary format is specified in [http://echelon.i2p/javadoc/net/i2p/data/PrivateKeyFile.html Private Key File].&lt;br /&gt;
&lt;br /&gt;
If the signing private key is all zeros, the the [[en/docs/spec/common-structures#struct_OfflineSignature|Offline Signature]] section follows. Offline signatures are only supported for STREAM and RAW sessions. Offline signatures may not be created with DESTINATION=TRANSIENT. The format of the offline signature section is:&lt;br /&gt;
&lt;br /&gt;
# - Expires timestamp (4 bytes, big endian, seconds since epoch, rolls over in 2106)&lt;br /&gt;
# - Sig type of transient Signing Public Key (2 bytes, big endian)&lt;br /&gt;
# - Transient Signing Public key (length as specified by transient sig type)&lt;br /&gt;
# - Signature of above three fields by offline key (length as specified by destination sig type)&lt;br /&gt;
# - Transient Signing Private key (length as specified by transient sig type)&lt;br /&gt;
&lt;br /&gt;
If the destination is specified as TRANSIENT, the SAM bridge creates a new destination. As of version 3.1 (I2P 0.9.14), if the destination is TRANSIENT, an optional parameter SIGNATURE_TYPE is supported. The SIGNATURE_TYPE value may be any name (e.g. ECDSA_SHA256_P256, case insensitive) or number (e.g. 1) supported by [[en/docs/spec/common-structures#type_Certificate|Key Certificates]]. The default is DSA_SHA1.&lt;br /&gt;
&lt;br /&gt;
$nickname is the choice of the client. No whitespace is allowed.&lt;br /&gt;
&lt;br /&gt;
Additional options given are passed to the I2P session configuration if not interpreted by the SAM bridge (e.g. outbound.length=0). These options [[#options|are documented below]].&lt;br /&gt;
&lt;br /&gt;
The SAM bridge itself should already be configured with what router it should communicate over I2P through (though if need be there may be a way to provide an override, e.g. i2cp.tcp.host=localhost and i2cp.tcp.port=7654).&lt;br /&gt;
&lt;br /&gt;
==== Session Creation Response ====&lt;br /&gt;
&lt;br /&gt;
After receiving the session create message, the SAM bridge will reply with a session status message, as follows:&lt;br /&gt;
&lt;br /&gt;
If the creation was successful:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  SESSION STATUS RESULT=OK DESTINATION=$privkey&amp;lt;/pre&amp;gt;&lt;br /&gt;
The $privkey is the base 64 of the concatenation of the [[en/docs/spec/common-structures#type_Destination|Destination]] followed by the [[en/docs/spec/common-structures#type_PrivateKey|Private Key]] followed by the [[en/docs/spec/common-structures#type_SigningPrivateKey|Signing Private Key]], optionally followed by the [[en/docs/spec/common-structures#struct_OfflineSignature|Offline Signature]], which is 663 or more bytes in binary and 884 or more bytes in base 64, depending on signature type. The binary format is specified in [http://echelon.i2p/javadoc/net/i2p/data/PrivateKeyFile.html Private Key File].&lt;br /&gt;
&lt;br /&gt;
If the SESSION CREATE contained a signing private key of all zeros and a [[en/docs/spec/common-structures#struct_OfflineSignature|Offline Signature]] section, the SESSION STATUS reply will include the same data in the same format. See the SESSION CREATE section above for details.&lt;br /&gt;
&lt;br /&gt;
If the nickname is already associated with a session:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  SESSION STATUS RESULT=DUPLICATED_ID&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the destination is already in use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  SESSION STATUS RESULT=DUPLICATED_DEST&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the destination is not a valid private destination key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  SESSION STATUS RESULT=INVALID_KEY&amp;lt;/pre&amp;gt;&lt;br /&gt;
If some other error has occurred:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  SESSION STATUS RESULT=I2P_ERROR MESSAGE=$message&amp;lt;/pre&amp;gt;&lt;br /&gt;
If it&#039;s not OK, the MESSAGE should contain human-readable information as to why the session could not be created.&lt;br /&gt;
&lt;br /&gt;
SAM sessions live and die with the socket they are associated with. When the socket is closed, the session dies, and all communications using the session die at the same time. And the other way round, when the session dies for any reason, the SAM bridge closes the socket.&lt;br /&gt;
&lt;br /&gt;
=== SAM Virtual Streams ===&lt;br /&gt;
&lt;br /&gt;
Virtual streams are guaranteed to be sent reliably and in order, with failure and success notification as soon as it is available.&lt;br /&gt;
&lt;br /&gt;
Streams are bidirectional communication sockets between two I2P destinations, but their opening has to be requested by one of them. Hereafter, CONNECT commands are used by the SAM client for such a request. FORWARD / ACCEPT commands are used by the SAM client when he wants to listen to requests coming from other I2P destinations.&lt;br /&gt;
&lt;br /&gt;
=== SAM Virtual Streams : CONNECT ===&lt;br /&gt;
&lt;br /&gt;
A client asks for a connection by:&lt;br /&gt;
&lt;br /&gt;
* opening a new socket with the SAM bridge&lt;br /&gt;
* passing the same HELLO handshake as above&lt;br /&gt;
* sending the STREAM CONNECT command&lt;br /&gt;
&lt;br /&gt;
==== Connect Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt; STREAM CONNECT&lt;br /&gt;
         ID=$nickname&lt;br /&gt;
         DESTINATION=$destination&lt;br /&gt;
         [SILENT={true,false}]                # default false&lt;br /&gt;
         [FROM_PORT=nnn]                      # SAM 3.2 or higher only, default 0&lt;br /&gt;
         [TO_PORT=nnn]                        # SAM 3.2 or higher only, default 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
This establishes a new virtual connection from the local session whose ID is $nickname to the specified peer.&lt;br /&gt;
&lt;br /&gt;
The target is $destination, which is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
&lt;br /&gt;
==== Connect Response ====&lt;br /&gt;
&lt;br /&gt;
If SILENT=true is passed, the SAM bridge won&#039;t issue any other message on the socket. If the connection fails, the socket will be closed. If the connection succeeds, all remaining data passing through the current socket is forwarded from and to the connected I2P destination peer.&lt;br /&gt;
&lt;br /&gt;
If SILENT=false, which is the default value, the SAM bridge sends a last message to its client before forwarding or shutting down the socket:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  STREAM STATUS&lt;br /&gt;
         RESULT=$result&lt;br /&gt;
         [MESSAGE=...]&amp;lt;/pre&amp;gt;&lt;br /&gt;
The RESULT value may be one of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    OK&lt;br /&gt;
    CANT_REACH_PEER&lt;br /&gt;
    I2P_ERROR&lt;br /&gt;
    INVALID_KEY&lt;br /&gt;
    INVALID_ID&lt;br /&gt;
    TIMEOUT&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the RESULT is OK, all remaining data passing through the current socket is forwarded from and to the connected I2P destination peer. If the connection was not possible (timeout, etc), RESULT will contain the appropriate error value (accompanied by an optional human-readable MESSAGE), and the SAM bridge closes the socket.&lt;br /&gt;
&lt;br /&gt;
=== SAM Virtual Streams : ACCEPT ===&lt;br /&gt;
&lt;br /&gt;
A client waits for an incoming connection request by:&lt;br /&gt;
&lt;br /&gt;
* opening a new socket with the SAM bridge&lt;br /&gt;
* passing the same HELLO handshake as above&lt;br /&gt;
* sending the STREAM ACCEPT command&lt;br /&gt;
&lt;br /&gt;
==== Accept Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt; STREAM ACCEPT&lt;br /&gt;
         ID=$nickname&lt;br /&gt;
         [SILENT={true,false}]                # default false&amp;lt;/pre&amp;gt;&lt;br /&gt;
This makes the session ${nickname} listen for one incoming connection request from the I2P network. ACCEPT is not allowed while there is an active FORWARD on the session.&lt;br /&gt;
&lt;br /&gt;
As of SAM 3.2, multiple concurrent pending STREAM ACCEPTs are allowed on the same session ID (even with the same port). Prior to 3.2, concurrent accepts would fail with ALREADY_ACCEPTING.&lt;br /&gt;
&lt;br /&gt;
==== Accept Response ====&lt;br /&gt;
&lt;br /&gt;
If SILENT=true is passed, the SAM bridge won&#039;t issue any other message on the socket. If the accept fails, the socket will be closed. If the accept succeeds, all remaining data passing through the current socket is forwarded from and to the connected I2P destination peer. For reliability, and to receive the destination for incoming connections, SILENT=false is recommended.&lt;br /&gt;
&lt;br /&gt;
If SILENT=false, which is the default value, the SAM bridge answers with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  STREAM STATUS&lt;br /&gt;
         RESULT=$result&lt;br /&gt;
         [MESSAGE=...]&amp;lt;/pre&amp;gt;&lt;br /&gt;
The RESULT value may be one of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    OK&lt;br /&gt;
    I2P_ERROR&lt;br /&gt;
    INVALID_ID&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the result is not OK, the socket is closed immediately by the SAM bridge. If the result is OK, the SAM bridge starts waiting for an incoming connection request from another I2P peer. When a request arrives, the SAM bridge accepts it and:&lt;br /&gt;
&lt;br /&gt;
If SILENT=true was passed, the SAM bridge won&#039;t issue any other message on the client socket. All remaining data passing through the current socket is forwarded from and to the connected I2P destination peer.&lt;br /&gt;
&lt;br /&gt;
If SILENT=false was passed, which is the default value, the SAM bridge sends the client a ASCII line containing the base64 public destination key of the requesting peer, and additional information for SAM 3.2 only:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    $destination&lt;br /&gt;
    FROM_PORT=nnn                      # SAM 3.2 or higher only&lt;br /&gt;
    TO_PORT=nnn                        # SAM 3.2 or higher only&lt;br /&gt;
    \n&amp;lt;/pre&amp;gt;&lt;br /&gt;
After this &#039;\n&#039; terminated line, all remaining data passing through the current socket is forwarded from and to the connected I2P destination peer, until one of the peer closes the socket.&lt;br /&gt;
&lt;br /&gt;
=== SAM Virtual Streams : FORWARD ===&lt;br /&gt;
&lt;br /&gt;
A client can use a regular socket server and wait for connection requests coming from I2P. For that, the client must:&lt;br /&gt;
&lt;br /&gt;
* open a new socket with the SAM bridge&lt;br /&gt;
* pass the same HELLO handshake as above&lt;br /&gt;
* send the forward command&lt;br /&gt;
&lt;br /&gt;
==== Forward Request ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt; STREAM FORWARD&lt;br /&gt;
         ID=$nickname&lt;br /&gt;
         PORT=$port&lt;br /&gt;
         [HOST=$host]&lt;br /&gt;
         [SILENT={true,false}]                # default false&lt;br /&gt;
         [SSL={true,false}]                   # SAM 3.2 or higher only, default false&amp;lt;/pre&amp;gt;&lt;br /&gt;
This makes the session ${nickname} listen for incoming connection requests from the I2P network. FORWARD is not allowed while there is a pending ACCEPT on the session.&lt;br /&gt;
&lt;br /&gt;
==== Forward Response ====&lt;br /&gt;
&lt;br /&gt;
SILENT defaults to false. Whether SILENT is true or false, the SAM bridge always answers with a STREAM STATUS message. Note that this is a different behavior from STREAM ACCEPT and STREAM CONNECT when SILENT=true. The STREAM STATUS message is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  STREAM STATUS&lt;br /&gt;
         RESULT=$result&lt;br /&gt;
         [MESSAGE=...]&amp;lt;/pre&amp;gt;&lt;br /&gt;
The RESULT value may be one of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    OK&lt;br /&gt;
    I2P_ERROR&lt;br /&gt;
    INVALID_ID&amp;lt;/pre&amp;gt;&lt;br /&gt;
$host is the hostname or IP address of the socket server to which SAM will forward connection requests. If not given, SAM takes the IP of the socket that issued the forward command.&lt;br /&gt;
&lt;br /&gt;
$port is the port number of the socket server to which SAM will forward connection requests. It is mandatory.&lt;br /&gt;
&lt;br /&gt;
When a connection request arrives from I2P, the SAM bridge requests a socket connection from $host:$port. If it is accepted after no more than 3 seconds, SAM will accept the connection from I2P, and then:&lt;br /&gt;
&lt;br /&gt;
If SILENT=true was passed, all data passing through the obtained current socket is forwarded from and to the connected I2P destination peer.&lt;br /&gt;
&lt;br /&gt;
If SILENT=false was passed, which is the default value, the SAM bridge sends on the obtained socket an ASCII line containing the base64 public destination key of the requesting peer, and additional information for SAM 3.2 only:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    $destination&lt;br /&gt;
    FROM_PORT=nnn                      # SAM 3.2 or higher only&lt;br /&gt;
    TO_PORT=nnn                        # SAM 3.2 or higher only&lt;br /&gt;
    \n&amp;lt;/pre&amp;gt;&lt;br /&gt;
After this &#039;\n&#039; terminated line, all remaining data passing through the socket is forwarded from and to the connected I2P destination peer, until one of the sides closes the socket.&lt;br /&gt;
&lt;br /&gt;
As of SAM 3.2, if SSL=true is specified, the forwarding socket is over SSL/TLS.&lt;br /&gt;
&lt;br /&gt;
The I2P router will stop listening to incoming connection requests as soon as the &amp;amp;quot;forwarding&amp;amp;quot; socket is closed.&lt;br /&gt;
&lt;br /&gt;
=== SAM Datagrams : Sending Repliable or Raw Datagrams ===&lt;br /&gt;
&lt;br /&gt;
While I2P doesn&#039;t inherently contain a FROM address, for ease of use an additional layer is provided as repliable datagrams - unordered and unreliable messages of up to 31744 bytes that include a FROM address (leaving up to 1KB for header material). This FROM address is authenticated internally by SAM (making use of the destination&#039;s signing key to verify the source) and includes replay prevention.&lt;br /&gt;
&lt;br /&gt;
Minimum size is 1. For best delivery reliability, recommended maximum size is approximately 11 KB. Reliability is inversely proportional to message size, perhaps even exponentially.&lt;br /&gt;
&lt;br /&gt;
After establishing a SAM session with STYLE=DATAGRAM or STYLE=RAW, the client can send repliable or raw datagrams through SAM&#039;s UDP port (7655).&lt;br /&gt;
&lt;br /&gt;
The first line of a datagram sent through this port must be in the following format. This is all on one line (space separated), shown on multiple lines for clarity:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    3.0                                  # As of SAM 3.2, any &amp;amp;quot;3.x&amp;amp;quot; is allowed. Prior to that, &amp;amp;quot;3.0&amp;amp;quot; is required.&lt;br /&gt;
    $nickname&lt;br /&gt;
    $destination&lt;br /&gt;
    [FROM_PORT=nnn]                      # SAM 3.2 or higher only, default 0&lt;br /&gt;
    [TO_PORT=nnn]                        # SAM 3.2 or higher only, default 0&lt;br /&gt;
    [PROTOCOL=nnn]                       # SAM 3.2 or higher only, only for RAW sessions, default 18&lt;br /&gt;
    [SEND_TAGS=nnn]                      # SAM 3.3 or higher only, number of session tags to send&lt;br /&gt;
                                         # Overrides crypto.tagsToSend I2CP session option&lt;br /&gt;
                                         # Default is router-dependent (40 for Java router)&lt;br /&gt;
    [TAG_THRESHOLD=nnn]                  # SAM 3.3 or higher only, low session tag threshold&lt;br /&gt;
                                         # Overrides crypto.lowTagThreshold I2CP session option&lt;br /&gt;
                                         # Default is router-dependent (30 for Java router)&lt;br /&gt;
    [EXPIRES=nnn]                        # SAM 3.3 or higher only, expiration from now in seconds&lt;br /&gt;
                                         # Overrides clientMessageTimeout I2CP session option (which is in ms)&lt;br /&gt;
                                         # Default is router-dependent (60 for Java router)&lt;br /&gt;
    [SEND_LEASESET={true,false}]         # SAM 3.3 or higher only, whether to send our leaseset&lt;br /&gt;
                                         # Overrides shouldBundleReplyInfo I2CP session option&lt;br /&gt;
                                         # Default is true&lt;br /&gt;
    \n&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 3.0 is the version of SAM. As of SAM 3.2, any 3.x is allowed.&lt;br /&gt;
* $nickname is the id of the DATAGRAM session that will be used&lt;br /&gt;
* The target is $destination, which is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
* All options are per-datagram settings that override the defaults specified in the SESSION CREATE.&lt;br /&gt;
* Version 3.3 options SEND_TAGS, TAG_THRESHOLD, EXPIRES, and SEND_LEASESET will be passed to [[en/docs/protocol/i2cp|I2CP]] if supported. See [[../protocol/i2cp#msg_SendMessageExpire|the I2CP specification]] for details. Support by the SAM server is optional, it will ignore these options if unsupported.&lt;br /&gt;
* this line is &#039;\n&#039; terminated.&lt;br /&gt;
&lt;br /&gt;
The first line will be discarded by SAM before sending the remaining data of the message to the specified destination.&lt;br /&gt;
&lt;br /&gt;
For an alternate method of sending repliable and raw datagrams, see [[#dgsend|DATAGRAM SEND and RAW SEND]].&lt;br /&gt;
&lt;br /&gt;
=== SAM Repliable Datagrams : Receiving a Datagram ===&lt;br /&gt;
&lt;br /&gt;
Received datagrams are written by SAM on the socket from which the datagram session was opened, if a forwarding PORT is not specified in the SESSION CREATE command. This is the v1/v2-compatible way of receiving datagrams.&lt;br /&gt;
&lt;br /&gt;
When a datagram arrives, the bridge delivers it to the client via the message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;-  DATAGRAM RECEIVED&lt;br /&gt;
           DESTINATION=$destination&lt;br /&gt;
           SIZE=$numBytes&lt;br /&gt;
           FROM_PORT=nnn                      # SAM 3.2 or higher only&lt;br /&gt;
           TO_PORT=nnn                        # SAM 3.2 or higher only&lt;br /&gt;
           \n&lt;br /&gt;
       [$numBytes of data]&amp;lt;/pre&amp;gt;&lt;br /&gt;
The source is $destination, which is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
&lt;br /&gt;
The SAM bridge never exposes to the client the authentication headers or other fields, merely the data that the sender provided. This continues until the session is closed (by the client dropping the connection).&lt;br /&gt;
&lt;br /&gt;
=== SAM Datagrams : Forwarding Raw or Repliable Datagrams ===&lt;br /&gt;
&lt;br /&gt;
When creating a datagram session, the client can ask SAM to forward incoming messages to a specified ip:port. It does so by issuing the CREATE command with PORT and HOST options:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt; SESSION CREATE&lt;br /&gt;
          STYLE={DATAGRAM,RAW}&lt;br /&gt;
          ID=$nickname&lt;br /&gt;
          DESTINATION={$privkey,TRANSIENT}&lt;br /&gt;
          PORT=$port&lt;br /&gt;
          [HOST=$host]&lt;br /&gt;
          [FROM_PORT=nnn]                      # SAM 3.2 or higher only, default 0&lt;br /&gt;
          [TO_PORT=nnn]                        # SAM 3.2 or higher only, default 0&lt;br /&gt;
          [PROTOCOL=nnn]                       # SAM 3.2 or higher only, for STYLE=RAW only, default 18&lt;br /&gt;
          [option=value]*                      # I2CP options&amp;lt;/pre&amp;gt;&lt;br /&gt;
The $privkey is the base 64 of the concatenation of the [[en/docs/spec/common-structures#type_Destination|Destination]] followed by the [[en/docs/spec/common-structures#type_PrivateKey|Private Key]] followed by the [[en/docs/spec/common-structures#type_SigningPrivateKey|Signing Private Key]], optionally followed by the [[en/docs/spec/common-structures#struct_OfflineSignature|Offline Signature]], which is 884 or more base 64 characters (663 or more bytes in binary), depending on signature type. The binary format is specified in [http://echelon.i2p/javadoc/net/i2p/data/PrivateKeyFile.html Private Key File].&lt;br /&gt;
&lt;br /&gt;
Offline signatures are only supported for RAW datagrams. See the SESSION CREATE section above for details.&lt;br /&gt;
&lt;br /&gt;
$host is the hostname or IP address of the datagram server to which SAM will forward datagrams. If not given, SAM takes the IP of the socket that issued the forward command.&lt;br /&gt;
&lt;br /&gt;
$port is the port number of the datagram server to which SAM will forward datagrams. If $port is not set, datagrams will NOT be forwarded, they will be received on the control socket, in the v1/v2-compatible way.&lt;br /&gt;
&lt;br /&gt;
Additional options given are passed to the I2P session configuration if not interpreted by the SAM bridge (e.g. outbound.length=0). These options [[#options|are documented below]].&lt;br /&gt;
&lt;br /&gt;
Forwarded repliable datagrams are always prefixed with the destination. When a repliable datagram arrives, the bridge sends to the specified host:port a UDP packet containing the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    $destination&lt;br /&gt;
    FROM_PORT=nnn                      # SAM 3.2 or higher only&lt;br /&gt;
    TO_PORT=nnn                        # SAM 3.2 or higher only&lt;br /&gt;
    \n&lt;br /&gt;
    $datagram_payload&amp;lt;/pre&amp;gt;&lt;br /&gt;
Forwarded raw datagrams are forwarded as-is to the specified host:port without a prefix. The UDP packet contains the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;          $datagram_payload&amp;lt;/pre&amp;gt;&lt;br /&gt;
As of SAM 3.2, when HEADER=true is specified in SESSION CREATE, the forwarded raw datagram will be prepended with a header line as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;          FROM_PORT=nnn&lt;br /&gt;
          TO_PORT=nnn&lt;br /&gt;
          PROTOCOL=nnn&lt;br /&gt;
          \n&lt;br /&gt;
          $datagram_payload&amp;lt;/pre&amp;gt;&lt;br /&gt;
The $destination is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
&lt;br /&gt;
=== SAM Anonymous (Raw) Datagrams ===&lt;br /&gt;
&lt;br /&gt;
Squeezing the most out of I2P&#039;s bandwidth, SAM allows clients to send and receive anonymous datagrams, leaving authentication and reply information up to the client themselves. These datagrams are unreliable and unordered, and may be up to 32768 bytes.&lt;br /&gt;
&lt;br /&gt;
Minimum size is 1. For best delivery reliability, recommended maximum size is approximately 11 KB.&lt;br /&gt;
&lt;br /&gt;
After establishing a SAM session with STYLE=RAW, the client can send anonymous datagrams through the SAM bridge exactly the same way as [[v3dgsend|sending repliable datagrams]].&lt;br /&gt;
&lt;br /&gt;
Both ways of receiving datagrams are also available for anonymous datagrams.&lt;br /&gt;
&lt;br /&gt;
Received datagrams are written by SAM on the socket from which the datagram session was opened, if a forwarding PORT is not specified in the SESSION CREATE command. This is the v1/v2-compatible way of receiving datagrams.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- RAW RECEIVED&lt;br /&gt;
          SIZE=$numBytes&lt;br /&gt;
          FROM_PORT=nnn                      # SAM 3.2 or higher only&lt;br /&gt;
          TO_PORT=nnn                        # SAM 3.2 or higher only&lt;br /&gt;
          PROTOCOL=nnn                       # SAM 3.2 or higher only&lt;br /&gt;
          \n&lt;br /&gt;
      [$numBytes of data]&amp;lt;/pre&amp;gt;&lt;br /&gt;
When anonymous datagrams are to be forwarded to some host:port, the bridge sends to the specified host:port a message containing the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;          $datagram_payload&amp;lt;/pre&amp;gt;&lt;br /&gt;
As of SAM 3.2, when HEADER=true is specified in SESSION CREATE, the forwarded raw datagram will be prepended with a header line as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;          FROM_PORT=nnn&lt;br /&gt;
          TO_PORT=nnn&lt;br /&gt;
          PROTOCOL=nnn&lt;br /&gt;
          \n&lt;br /&gt;
          $datagram_payload&amp;lt;/pre&amp;gt;&lt;br /&gt;
For an alternate method of sending anonymous datagrams, see [[#dgsend|RAW SEND]].&lt;br /&gt;
&lt;br /&gt;
=== DATAGRAM SEND, RAW SEND (V1/V2 Compatible Datagram Handling) ===&lt;br /&gt;
&lt;br /&gt;
In SAM V3, the preferred way to send datagrams is via the datagram socket at port 7655 as documented above. However, repliable datagrams may be sent directly via the SAM bridge socket using the DATAGRAM SEND command, as documented in [[sam|SAM V1]] and [[samv2|SAM V2]].&lt;br /&gt;
&lt;br /&gt;
As of release 0.9.14 (version 3.1), anonymous datagrams may be sent directly via the SAM bridge socket using the RAW SEND command, as documented in [[sam|SAM V1]] and [[samv2|SAM V2]].&lt;br /&gt;
&lt;br /&gt;
As of release 0.9.24 (version 3.2), DATAGRAM SEND and RAW SEND may include the parameters FROM_PORT=nnnn and/or TO_PORT=nnnn to override the default ports. As of release 0.9.24 (version 3.2), RAW SEND may include the parameter PROTOCOL=nnn to override the default protocol.&lt;br /&gt;
&lt;br /&gt;
These commands do &#039;&#039;not&#039;&#039; support the ID parameter. The datagrams are sent to the most recently created DATAGRAM- or RAW-style session, as appropriate. Support for the ID parameter may be added in a future release.&lt;br /&gt;
&lt;br /&gt;
=== MASTER Sessions (V3.3 and higher) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Version 3.3 was introduced in I2P release 0.9.25.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
SAM v3.3 adds support for running streaming, datagrams, and raw subsessions on the same master session, and for running multiple subsessions of the same style. All subsession traffic uses a single destination, or set of tunnels. Routing of traffic from I2P is based on the port and protocol options for the subsessions.&lt;br /&gt;
&lt;br /&gt;
To create multiplexed subsessions, you must create a master session and then add subsessions to the master session. Each subsession must have a unique id and a unique listen protocol and port. Subsessions may also be removed from the master session.&lt;br /&gt;
&lt;br /&gt;
With a MASTER session and a combination of subsessions, a SAM client may support multiple applications, or a single sophisticated application using a variety of protocols, on a single set of tunnels. For example, a bittorrent client could set up a streaming subsession for peer-to-peer connections, together with datagram and raw subsessions for DHT communication.&lt;br /&gt;
&lt;br /&gt;
==== Creating a MASTER Session ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  SESSION CREATE&lt;br /&gt;
          STYLE=MASTER&lt;br /&gt;
          ID=$nickname&lt;br /&gt;
          DESTINATION={$privkey,TRANSIENT}&lt;br /&gt;
          [option=value]*                      # I2CP and streaming options&amp;lt;/pre&amp;gt;&lt;br /&gt;
The SAM bridge will respond with success or failure as in [[#sessionresponse|the response to a standard SESSION CREATE]].&lt;br /&gt;
&lt;br /&gt;
Do not set the PORT, HOST, FROM_PORT, TO_PORT, PROTOCOL, LISTEN_PORT, LISTEN_PROTOCOL, or HEADER options on a master session. You may not send any data on a MASTER session ID or on the control socket. All commands such as STREAM CONNECT, DATAGRAM SEND, etc. must use the subsession ID on a separate socket.&lt;br /&gt;
&lt;br /&gt;
The MASTER session connects to the router and builds tunnels. When the SAM bridge responds, tunnels have been built and the session is ready for subsessions to be added. All [[en/docs/protocol/i2cp|I2CP]] options pertaining to tunnel parameters such as length, quantity, and nickname must be provided in the master&#039;s SESSION CREATE.&lt;br /&gt;
&lt;br /&gt;
All utility commands are supported on a master session.&lt;br /&gt;
&lt;br /&gt;
When the master session is closed, all subsessions get closed also.&lt;br /&gt;
&lt;br /&gt;
==== Creating a Subsession ====&lt;br /&gt;
&lt;br /&gt;
Using the same control socket on which the MASTER session was created:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  SESSION ADD&lt;br /&gt;
          STYLE={STREAM,DATAGRAM,RAW}&lt;br /&gt;
          ID=$nickname                         # must be unique&lt;br /&gt;
          [PORT=$port]                         # Required for DATAGRAM and RAW, invalid for STREAM&lt;br /&gt;
          [HOST=$host]                         # Optional for DATAGRAM and RAW, invalid for STREAM&lt;br /&gt;
          [FROM_PORT=nnn]                      # For outbound traffic, default 0&lt;br /&gt;
          [TO_PORT=nnn]                        # For outbound traffic, default 0&lt;br /&gt;
          [PROTOCOL=nnn]                       # For outbound traffic for STYLE=RAW only, default 18&lt;br /&gt;
          [LISTEN_PORT=nnn]                    # For inbound traffic, default is the FROM_PORT value.&lt;br /&gt;
                                               # For STYLE=STREAM, only the FROM_PORT value or 0 is allowed.&lt;br /&gt;
          [LISTEN_PROTOCOL=nnn]                # For inbound traffic for STYLE=RAW only.&lt;br /&gt;
                                               # Default is the PROTOCOL value; 6 (streaming) is disallowed&lt;br /&gt;
          [HEADER={true,false}]                # For STYLE=RAW only, default false&lt;br /&gt;
          [option=value]*                      # I2CP and streaming options&amp;lt;/pre&amp;gt;&lt;br /&gt;
The SAM bridge will respond with success or failure as in [[#sessionresponse|the response to a standard SESSION CREATE]]. As the tunnels were already built in the master SESSION CREATE, the SAM bridge should respond immediately.&lt;br /&gt;
&lt;br /&gt;
Do not set the DESTINATION option on a SESSION ADD. The subsession will use the destination specified in the master session. All subsessions must be added on the control socket, i.e. the same connection that you created the master session on.&lt;br /&gt;
&lt;br /&gt;
Multiple subsessions must have options sufficiently unique that incoming data can be routed correctly. In particular, multiple sessions of the same style must have different LISTEN_PORT options (and/or LISTEN_PROTOCOL, for RAW only). A SESSION ADD with listen port and protocol that duplicates an existing subsession will result in an error.&lt;br /&gt;
&lt;br /&gt;
The LISTEN_PORT is the local I2P port, i.e. the receive (TO) port for incoming data. If the LISTEN_PORT is not specified, the FROM_PORT value will be used. If the LISTEN_PORT and FROM_PORT are not specified, incoming routing will be based on STYLE and PROTOCOL alone. For LISTEN_PORT and LISTEN_PROTOCOL, 0 means any value, that is, a wildcard. If both LISTEN_PORT and LISTEN_PROTOCOL are 0, this subsession will be the default for incoming traffic that does not get routed to another subsession. Incoming streaming traffic (protocol 6) will never be routed to a RAW subsession, even if its LISTEN_PROTCOL is 0. A RAW subsession may not set a LISTEN_PROTOCOL of 6. If there is no default or subsession that matching the protocol and port of incoming traffic, that data will be dropped.&lt;br /&gt;
&lt;br /&gt;
Use the subsession ID, not the master session ID, for sending and receiving data. All commands such as STREAM CONNECT, DATAGRAM SEND, etc. must use the subsession ID.&lt;br /&gt;
&lt;br /&gt;
All utility commands are supported on a master session or subsession. v1/v2 datagram/raw sending/receiving are not supported on a master session or on subsessions.&lt;br /&gt;
&lt;br /&gt;
==== Stopping a Subsession ====&lt;br /&gt;
&lt;br /&gt;
Using the same control socket on which the MASTER session was created:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  SESSION REMOVE&lt;br /&gt;
          ID=$nickname&amp;lt;/pre&amp;gt;&lt;br /&gt;
This removes a subsession from the master session. Do not set any other options on a SESSION REMOVE. Subsessions must be removed on the control socket, i.e. the same connection that you created the master session on. After a subsession is removed, it is closed and may not be used to send or receive data.&lt;br /&gt;
&lt;br /&gt;
The SAM bridge will respond with success or failure as in [[#sessionresponse|the response to a standard SESSION CREATE]].&lt;br /&gt;
&lt;br /&gt;
=== SAM Utility Commands ===&lt;br /&gt;
&lt;br /&gt;
Some utility commands require a pre-existing session and some do not. See details below.&lt;br /&gt;
&lt;br /&gt;
==== Host Name Lookup ====&lt;br /&gt;
&lt;br /&gt;
The following message can be used by the client to query the SAM bridge for name resolution:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; NAMING LOOKUP&lt;br /&gt;
        NAME=$name&amp;lt;/pre&amp;gt;&lt;br /&gt;
which is answered by&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; NAMING REPLY&lt;br /&gt;
        RESULT=$result&lt;br /&gt;
        NAME=$name&lt;br /&gt;
        [VALUE=$destination]&lt;br /&gt;
        [MESSAGE=$message]&amp;lt;/pre&amp;gt;&lt;br /&gt;
The RESULT value may be one of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    OK&lt;br /&gt;
    INVALID_KEY&lt;br /&gt;
    KEY_NOT_FOUND&amp;lt;/pre&amp;gt;&lt;br /&gt;
If NAME=ME, then the reply will contain the destination used by the current session (useful if you&#039;re using a TRANSIENT one). If $result is not OK, MESSAGE may convey a descriptive message, such as &amp;amp;quot;bad format&amp;amp;quot;, etc. INVALID_KEY implies that something is wrong with $name in the request, possibly invalid characters.&lt;br /&gt;
&lt;br /&gt;
The $destination is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
&lt;br /&gt;
NAMING LOOKUP does not require that a session has been created first. However, in some implementations, a .b32.i2p lookup which is uncached and requires a network query may fail, as no client tunnels are available for the lookup.&lt;br /&gt;
&lt;br /&gt;
==== Destination Key Generation ====&lt;br /&gt;
&lt;br /&gt;
Public and private base64 keys can be generated using the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-&amp;amp;gt;  DEST GENERATE&lt;br /&gt;
          [SIGNATURE_TYPE=value]               # SAM 3.1 or higher only, default DSA_SHA1&amp;lt;/pre&amp;gt;&lt;br /&gt;
which is answered by&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; DEST REPLY&lt;br /&gt;
      PUB=$destination&lt;br /&gt;
      PRIV=$privkey&amp;lt;/pre&amp;gt;&lt;br /&gt;
As of version 3.1 (I2P 0.9.14), an optional parameter SIGNATURE_TYPE is supported. The SIGNATURE_TYPE value may be any name (e.g. ECDSA_SHA256_P256, case insensitive) or number (e.g. 1) that is supported by [[en/docs/spec/common-structures#type_Certificate|Key Certificates]]. The default is DSA_SHA1.&lt;br /&gt;
&lt;br /&gt;
The $destination is the base 64 of the [[en/docs/spec/common-structures#type_Destination|Destination]], which is 516 or more base 64 characters (387 or more bytes in binary), depending on signature type.&lt;br /&gt;
&lt;br /&gt;
The $privkey is the base 64 of the concatenation of the [[en/docs/spec/common-structures#type_Destination|Destination]] followed by the [[en/docs/spec/common-structures#type_PrivateKey|Private Key]] followed by the [[en/docs/spec/common-structures#type_SigningPrivateKey|Signing Private Key]], which is 884 or more base 64 characters (663 or more bytes in binary), depending on signature type. The binary format is specified in [http://echelon.i2p/javadoc/net/i2p/data/PrivateKeyFile.html Private Key File].&lt;br /&gt;
&lt;br /&gt;
DEST GENERATE does not require that a session has been created first.&lt;br /&gt;
&lt;br /&gt;
DEST GENERATE cannot be used to create a destination with offline signatures.&lt;br /&gt;
&lt;br /&gt;
==== PING/PONG (SAM 3.2 or higher) ====&lt;br /&gt;
&lt;br /&gt;
Either the client or server may send:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    PING[ arbitrary text]&amp;lt;/pre&amp;gt;&lt;br /&gt;
on the control port, with the response:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;    PONG[ arbitrary text from the ping]&amp;lt;/pre&amp;gt;&lt;br /&gt;
to be used for control socket keepalive. Either side may close the session and socket if no response is received in a reasonable time, implementation dependent.&lt;br /&gt;
&lt;br /&gt;
If a timeout occurs waiting for a PONG from the client, the bridge may send:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;- SESSION STATUS RESULT=I2P_ERROR MESSAGE=$message&amp;lt;/pre&amp;gt;&lt;br /&gt;
and then disconnect.&lt;br /&gt;
&lt;br /&gt;
If a timeout occurs waiting for a PONG from the bridge, the client may simply disconnect.&lt;br /&gt;
&lt;br /&gt;
PING/PONG do not require that a session has been created first.&lt;br /&gt;
&lt;br /&gt;
==== QUIT/STOP/EXIT (SAM 3.2 or higher, optional features) ====&lt;br /&gt;
&lt;br /&gt;
Commands QUIT, STOP and EXIT will close the session and socket. Implementation is optional, for ease in testing via telnet. Whether there is any response before the socket is closed (for example, a SESSION STATUS message) is implementation-specific and outside the scope of this specification.&lt;br /&gt;
&lt;br /&gt;
QUIT/STOP/EXIT do not require that a session has been created first.&lt;br /&gt;
&lt;br /&gt;
==== HELP (optional feature) ====&lt;br /&gt;
&lt;br /&gt;
Servers may implement a HELP command. Implementation is optional, for ease in testing via telnet. Output format and detection of the end of the output is implementation-specific and outside the scope of this specification.&lt;br /&gt;
&lt;br /&gt;
HELP does not require that a session has been created first.&lt;br /&gt;
&lt;br /&gt;
==== Authorization Configuration (SAM 3.2 or higher, optional feature) ====&lt;br /&gt;
&lt;br /&gt;
Authorization configuration using the AUTH command. A SAM server may implement these commands to facilite persistent storage of credentials. Configuration of authentication other than with these commands is implementation-specific and outside the scope of this specification.&lt;br /&gt;
&lt;br /&gt;
* AUTH ENABLE enables authorization on subsequent connections&lt;br /&gt;
* AUTH DISABLE disables authorization on subsequent connections&lt;br /&gt;
* AUTH ADD USER=&amp;amp;quot;foo&amp;amp;quot; PASSWORD=&amp;amp;quot;bar&amp;amp;quot; adds a user/password&lt;br /&gt;
* AUTH REMOVE USER=&amp;amp;quot;foo&amp;amp;quot; removes this user&lt;br /&gt;
&lt;br /&gt;
Double quotes for user and password are recommended but not required. A double quote inside a user or password must be escaped with a backslash. On failure the server will reply with an I2P_ERROR and a message.&lt;br /&gt;
&lt;br /&gt;
AUTH does not require that a session has been created first.&lt;br /&gt;
&lt;br /&gt;
=== RESULT Values ===&lt;br /&gt;
&lt;br /&gt;
These are the values that can be carried by the RESULT field, with their meaning:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; OK              Operation completed successfully&lt;br /&gt;
 CANT_REACH_PEER The peer exists, but cannot be reached&lt;br /&gt;
 DUPLICATED_DEST The specified Destination is already in use&lt;br /&gt;
 I2P_ERROR       A generic I2P error (e.g. I2CP disconnection, etc.)&lt;br /&gt;
 INVALID_KEY     The specified key is not valid (bad format, etc.)&lt;br /&gt;
 KEY_NOT_FOUND   The naming system can&#039;t resolve the given name&lt;br /&gt;
 PEER_NOT_FOUND  The peer cannot be found on the network&lt;br /&gt;
 TIMEOUT         Timeout while waiting for an event (e.g. peer answer)&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Tunnel, I2CP, and Streaming Options ===&lt;br /&gt;
&lt;br /&gt;
These options may be passed in as name=value pairs at the end of a SAM SESSION CREATE line.&lt;br /&gt;
&lt;br /&gt;
All sessions may include [[en/docs/protocol/i2cp#options|I2CP options such as tunnel lengths]]. STREAM sessions may include [[en/docs/api/streaming#options|Streaming library options]]. See those references for option names and defaults.&lt;br /&gt;
&lt;br /&gt;
=== BASE 64 Notes ===&lt;br /&gt;
&lt;br /&gt;
Base 64 encoding must use the I2P standard Base 64 alphabet &amp;amp;quot;A-Z, a-z, 0-9, -, ~&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Client Library Implementations ===&lt;br /&gt;
&lt;br /&gt;
Client libraries are available for C, C++, C#, Perl, and Python. These are in the apps/sam/ directory in the [[en/download|I2P Source Package]]. Some may be older and have not been updated for SAMv3 support.&lt;br /&gt;
&lt;br /&gt;
=== Default SAM Setup ===&lt;br /&gt;
&lt;br /&gt;
The default SAM port is 7656. SAM is not enabled by default in the Java I2P Router; it must be started manually, or configured to start automatically, on the configure clients page in the router console, or in the clients.config file. The default SAM UDP port is 7655, listening on 127.0.0.1. These may be changed by adding the arguments sam.udp.port=nnnnn and/or sam.udp.host=w.x.y.z to the invocation.&lt;br /&gt;
&lt;br /&gt;
Configuration in other routers is implementation-specific.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
:::&lt;/div&gt;</summary>
		<author><name>Idk</name></author>
	</entry>
</feed>