merge of '598d00efae4c9b675b64fd626bc2eab2b921e0c5'

and 'd38686d88680521e54d7bcb8be24e21d252eb946'
This commit is contained in:
HungryHobo
2010-11-02 04:00:43 +00:00
74 changed files with 1830 additions and 1261 deletions

View File

@ -236,3 +236,7 @@ distributions. See the source package for the additional license information.
SAM Python Library: SAM Python Library:
Public domain. Public domain.
I2PSnark:
"Man with hat over face" graphic licensed under a Creative Commons 2.0 license.
Original photo by Florian Kuhlmann. http://www.flickr.com/photos/floriankuhlmann/3117758155

View File

@ -2,15 +2,32 @@
# Start/stop i2p service. # Start/stop i2p service.
i2p_start() { i2p_start() {
/bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory start )" # Check if router is up first!
/bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory status )" > /dev/null
if [ ! $? -eq 0 ] ; then {
# I2p is already running, so tell the user.
echo "I2P is already running..."
i2p_status
}
else
{
# Just in-case there are leftover junk in /tmp...
rm -Rf `grep /tmp/hsperfdata_root/* -le i2p` /tmp/i2p-*.tmp /tmp/router.ping
# Now that all junk is cleaned up, start.
/bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory start )"
}
fi
} }
i2p_stop() { i2p_stop() {
/bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory stop )" /bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory stop )"
rm -Rf `grep /tmp/hsperfdata_root/* -le i2p` /tmp/i2p-*.tmp /tmp/router.ping
} }
i2p_restart() { i2p_restart() {
/bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory restart)" # We want a FULL cycle here, not the wrappers idea of this!
i2p_stop
i2p_start
} }
i2p_status() { i2p_status() {

View File

@ -85,23 +85,26 @@ cp -a ../i2p $PKG/$INSTALL_DIR/
mkdir -p $PKG/install mkdir -p $PKG/install
############################################################################# #############################################################################
# Preconfigureation to make package smaller # Preconfigureation to make package smaller, and...
# we keep as much as reasonable in the installation directory.
# This makes the install map fairly well to the standard installation.
# It also makes it easier to find the log and pid files!
############################################################################# #############################################################################
cd $PKG/$INSTALL_DIR/i2p cd $PKG/$INSTALL_DIR/i2p
# wrapper.config $INSTALL_PATH and $SYSTEM_java_io_tmpdir # wrapper.config $INSTALL_PATH and $SYSTEM_java_io_tmpdir
sed "s|\$INSTALL_PATH|$INSTALL_DIR/i2p|g" wrapper.config > a sed "s|\$INSTALL_PATH|/$INSTALL_DIR/i2p|g" wrapper.config > a
sed "s|\$SYSTEM_java_io_tmpdir|/var/tmp|g" a > wrapper.config sed "s|\$SYSTEM_java_io_tmpdir|/$INSTALL_DIR/i2p|g" a > wrapper.config
# eepget %INSTALL_PATH # eepget %INSTALL_PATH
sed "s|\$INSTALL_PATH|$INSTALL_DIR/i2p|g" eepget > a sed "s|\$INSTALL_PATH|/$INSTALL_DIR/i2p|g" eepget > a
rm eepget rm eepget
mv a eepget mv a eepget
# runplain.sh %INSTALL_PATH and %SYSTEM_java_io_tmpdir # runplain.sh %INSTALL_PATH and %SYSTEM_java_io_tmpdir
sed "s|%INSTALL_PATH|$INSTALL_DIR/i2p|g" runplain.sh > a sed "s|%INSTALL_PATH|/$INSTALL_DIR/i2p|g" runplain.sh > a
sed "s|%SYSTEM_java_io_tmpdir|/var/tmp|g" a > runplain.sh sed "s|%SYSTEM_java_io_tmpdir|/$INSTALL_DIR/i2p|g" a > runplain.sh
# i2prouter %INSTALL_PATH and %SYSTEM_java_io_tmpdir # i2prouter %INSTALL_PATH and %SYSTEM_java_io_tmpdir
sed "s|%INSTALL_PATH|$INSTALL_DIR/i2p|g" i2prouter > a sed "s|%INSTALL_PATH|/$INSTALL_DIR/i2p|g" i2prouter > a
sed "s|%SYSTEM_java_io_tmpdir|/var/tmp|g" a > i2prouter sed "s|%SYSTEM_java_io_tmpdir|/$INSTALL_DIR/i2p|g" a > i2prouter
chmod 744 ./i2prouter chmod 744 ./i2prouter
chmod 744 ./osid chmod 744 ./osid

View File

@ -133,7 +133,6 @@ public class I2PSnarkServlet extends Default {
// bypass the horrid Resource.getListHTML() // bypass the horrid Resource.getListHTML()
String pathInfo = req.getPathInfo(); String pathInfo = req.getPathInfo();
String pathInContext = URI.addPaths(path, pathInfo); String pathInContext = URI.addPaths(path, pathInfo);
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8"); resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html; charset=UTF-8"); resp.setContentType("text/html; charset=UTF-8");
Resource resource = getResource(pathInContext); Resource resource = getResource(pathInContext);
@ -141,7 +140,7 @@ public class I2PSnarkServlet extends Default {
resp.sendError(HttpResponse.__404_Not_Found); resp.sendError(HttpResponse.__404_Not_Found);
} else { } else {
String base = URI.addPaths(req.getRequestURI(), "/"); String base = URI.addPaths(req.getRequestURI(), "/");
String listing = getListHTML(resource, base, true, method.equals("POST") ? req.getParameterMap() : null); String listing = getListHTML(resource, base, true);
if (listing != null) if (listing != null)
resp.getWriter().write(listing); resp.getWriter().write(listing);
else // shouldn't happen else // shouldn't happen
@ -503,7 +502,7 @@ public class I2PSnarkServlet extends Default {
File torrentFile = new File(baseFile.getParent(), baseFile.getName() + ".torrent"); File torrentFile = new File(baseFile.getParent(), baseFile.getName() + ".torrent");
if (torrentFile.exists()) if (torrentFile.exists())
throw new IOException("Cannot overwrite an existing .torrent file: " + torrentFile.getPath()); throw new IOException("Cannot overwrite an existing .torrent file: " + torrentFile.getPath());
_manager.saveTorrentStatus(info, s.getBitField(), null); // so addTorrent won't recheck _manager.saveTorrentStatus(info, s.getBitField()); // so addTorrent won't recheck
// DirMonitor could grab this first, maybe hold _snarks lock? // DirMonitor could grab this first, maybe hold _snarks lock?
FileOutputStream out = new FileOutputStream(torrentFile); FileOutputStream out = new FileOutputStream(torrentFile);
out.write(info.getTorrentData()); out.write(info.getTorrentData());
@ -530,8 +529,6 @@ public class I2PSnarkServlet extends Default {
_manager.stopTorrent(snark.torrent, false); _manager.stopTorrent(snark.torrent, false);
} }
if (_manager.util().connected()) { if (_manager.util().connected()) {
// Give the stopped announces time to get out
try { Thread.sleep(2000); } catch (InterruptedException ie) {}
_manager.util().disconnect(); _manager.util().disconnect();
_manager.addMessage(_("I2P tunnel closed.")); _manager.addMessage(_("I2P tunnel closed."));
} }
@ -1216,9 +1213,7 @@ public class I2PSnarkServlet extends Default {
/** @since 0.7.14 */ /** @since 0.7.14 */
private static String urlify(String s) { private static String urlify(String s) {
StringBuilder buf = new StringBuilder(256); StringBuilder buf = new StringBuilder(256);
// browsers seem to work without doing this but let's be strict buf.append("<a href=\"").append(s).append("\">").append(s).append("</a>");
String link = s.replace("&", "&amp;");
buf.append("<a href=\"").append(link).append("\">").append(link).append("</a>");
return buf.toString(); return buf.toString();
} }
@ -1257,11 +1252,10 @@ public class I2PSnarkServlet extends Default {
* @param r The Resource * @param r The Resource
* @param base The base URL * @param base The base URL
* @param parent True if the parent directory should be included * @param parent True if the parent directory should be included
* @param postParams map of POST parameters or null if not a POST
* @return String of HTML * @return String of HTML
* @since 0.7.14 * @since 0.7.14
*/ */
private String getListHTML(Resource r, String base, boolean parent, Map postParams) private String getListHTML(Resource r, String base, boolean parent)
throws IOException throws IOException
{ {
if (!r.isDirectory()) if (!r.isDirectory())
@ -1286,10 +1280,6 @@ public class I2PSnarkServlet extends Default {
else else
torrentName = title; torrentName = title;
Snark snark = _manager.getTorrentByBaseName(torrentName); Snark snark = _manager.getTorrentByBaseName(torrentName);
if (snark != null && postParams != null)
savePriorities(snark, postParams);
if (title.endsWith("/")) if (title.endsWith("/"))
title = title.substring(0, title.length() - 1); title = title.substring(0, title.length() - 1);
title = _("Torrent") + ": " + title; title = _("Torrent") + ": " + title;
@ -1307,19 +1297,12 @@ public class I2PSnarkServlet extends Default {
.append(_("Up to higher level directory")).append("</A>\n"); .append(_("Up to higher level directory")).append("</A>\n");
} }
buf.append("</div><div class=\"page\"><div class=\"mainsection\">"); buf.append("</div><div class=\"page\"><div class=\"mainsection\">" +
boolean showPriority = snark != null && !snark.storage.complete(); "<TABLE BORDER=0 class=\"snarkTorrents\" cellpadding=\"5px 10px\">" +
if (showPriority)
buf.append("<form action=\"").append(base).append("\" method=\"POST\">\n");
buf.append("<TABLE BORDER=0 class=\"snarkTorrents\" cellpadding=\"5px 10px\">" +
"<thead><tr><th>").append(_("File")).append("</th><th>").append(_("Size")) "<thead><tr><th>").append(_("File")).append("</th><th>").append(_("Size"))
.append("</th><th>").append(_("Status")).append("</th>"); .append("</th><th>").append(_("Status")).append("</th></tr></thead>");
if (showPriority)
buf.append("<th>").append(_("Priority")).append("</th>");
buf.append("</tr></thead>\n");
//DateFormat dfmt=DateFormat.getDateTimeInstance(DateFormat.MEDIUM, //DateFormat dfmt=DateFormat.getDateTimeInstance(DateFormat.MEDIUM,
// DateFormat.MEDIUM); // DateFormat.MEDIUM);
boolean showSaveButton = false;
for (int i=0 ; i< ls.length ; i++) for (int i=0 ; i< ls.length ; i++)
{ {
String encoded=URI.encodePath(ls[i]); String encoded=URI.encodePath(ls[i]);
@ -1357,8 +1340,7 @@ public class I2PSnarkServlet extends Default {
complete = true; complete = true;
status = toImg("tick") + _("Complete"); status = toImg("tick") + _("Complete");
} else { } else {
status = status = toImg("clock") +
(snark.storage.getPriority(f.getCanonicalPath()) < 0 ? toImg("cancel") : toImg("clock")) +
(100 * (length - remaining) / length) + "% " + _("complete") + (100 * (length - remaining) / length) + "% " + _("complete") +
" (" + DataHelper.formatSize2(remaining) + _("bytes remaining") + ")"; " (" + DataHelper.formatSize2(remaining) + _("bytes remaining") + ")";
} }
@ -1402,40 +1384,9 @@ public class I2PSnarkServlet extends Default {
buf.append("</TD><TD class=\"").append(rowClass).append(" snarkFileStatus\">"); buf.append("</TD><TD class=\"").append(rowClass).append(" snarkFileStatus\">");
//buf.append(dfmt.format(new Date(item.lastModified()))); //buf.append(dfmt.format(new Date(item.lastModified())));
buf.append(status); buf.append(status);
buf.append("</TD>"); buf.append("</TD></TR>\n");
if (showPriority) {
buf.append("<td>");
File f = item.getFile();
if ((!complete) && (!item.isDirectory()) && f != null) {
int pri = snark.storage.getPriority(f.getCanonicalPath());
buf.append("<input type=\"radio\" value=\"5\" name=\"pri.").append(f.getCanonicalPath()).append("\" ");
if (pri > 0)
buf.append("checked=\"true\"");
buf.append('>').append(_("High"));
buf.append("<input type=\"radio\" value=\"0\" name=\"pri.").append(f.getCanonicalPath()).append("\" ");
if (pri == 0)
buf.append("checked=\"true\"");
buf.append('>').append(_("Normal"));
buf.append("<input type=\"radio\" value=\"-9\" name=\"pri.").append(f.getCanonicalPath()).append("\" ");
if (pri < 0)
buf.append("checked=\"true\"");
buf.append('>').append(_("Do not download"));
showSaveButton = true;
}
buf.append("</td>");
}
buf.append("</TR>\n");
}
if (showSaveButton) {
buf.append("<thead><tr><th colspan=\"3\">&nbsp;</th><th align=\"center\"><input type=\"submit\" value=\"");
buf.append(_("Save priorities"));
buf.append("\" name=\"foo\" ></th></tr></thead>\n");
} }
buf.append("</TABLE>\n"); buf.append("</TABLE>\n");
if (showPriority)
buf.append("</form>");
buf.append("</div></div></BODY></HTML>\n"); buf.append("</div></div></BODY></HTML>\n");
return buf.toString(); return buf.toString();
@ -1501,26 +1452,6 @@ public class I2PSnarkServlet extends Default {
return "<img alt=\"\" height=\"16\" width=\"16\" src=\"/i2psnark/_icons/" + icon + ".png\"> "; return "<img alt=\"\" height=\"16\" width=\"16\" src=\"/i2psnark/_icons/" + icon + ".png\"> ";
} }
/** @since 0.8.1 */
private void savePriorities(Snark snark, Map postParams) {
Set<Map.Entry> entries = postParams.entrySet();
for (Map.Entry entry : entries) {
String key = (String)entry.getKey();
if (key.startsWith("pri.")) {
try {
String file = key.substring(4);
String val = ((String[])entry.getValue())[0]; // jetty arrays
int pri = Integer.parseInt(val);
snark.storage.setPriority(file, pri);
//System.err.println("Priority now " + pri + " for " + file);
} catch (Throwable t) { t.printStackTrace(); }
}
}
if (snark.coordinator != null)
snark.coordinator.updatePiecePriorities();
_manager.saveTorrentStatus(snark.storage.getMetaInfo(), snark.storage.getBitField(), snark.storage.getFilePriorities());
}
/** inner class, don't bother reindenting */ /** inner class, don't bother reindenting */
private static class FetchAndAdd implements Runnable { private static class FetchAndAdd implements Runnable {

View File

@ -8,8 +8,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: I2P i2psnark\n" "Project-Id-Version: I2P i2psnark\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-07-01 04:52+0000\n" "POT-Creation-Date: 2010-10-04 02:45+0000\n"
"PO-Revision-Date: 2010-07-01 12:53+0800\n" "PO-Revision-Date: 2010-10-04 12:00+0800\n"
"Last-Translator: walking <walking@mail.i2p>\n" "Last-Translator: walking <walking@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n" "Language-Team: foo <foo@bar>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -224,7 +224,6 @@ msgid "Torrents"
msgstr "种子" msgstr "种子"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:187 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:187
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:193
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:837 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:837
msgid "I2PSnark" msgid "I2PSnark"
msgstr "" msgstr ""
@ -233,63 +232,65 @@ msgstr ""
msgid "Refresh page" msgid "Refresh page"
msgstr "刷新页面" msgstr "刷新页面"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:193
msgid "<img border=\"0\" src=\"/themes/console/snark/images/arrow_refresh.png\"> I2PSnark"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:195 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:195
msgid "Forum" msgid "Forum"
msgstr "论坛" msgstr "论坛"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:240 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:240
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1289 msgid "<img border=\"0\" src=\"/themes/console/snark/images/status.png\" title=\"Torrent Status\">Status"
msgid "Status" msgstr "<img border=\"0\" src=\"/themes/console/snark/images/status.png\" title=\"种子状态\">状态"
msgstr "状态"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:246 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:246
msgid "Hide Peers" msgid "<img border=\"0\" src=\"/themes/console/snark/images/showpeers.png\" title=\"Toggle Peer Visibility\" alt=\"Hide Peers\">"
msgstr "隐藏用户" msgstr "<img border=\"0\" src=\"/themes/console/snark/images/showpeers.png\" title=\"隐藏节点\" alt=\"隐藏节点\">"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:249 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:249
msgid "Show Peers" msgid "<img border=\"0\" src=\"/themes/console/snark/images/hidepeers.png\" title=\"Toggle Peer Visibility\" alt=\"Show Peers\">"
msgstr "显示用户" msgstr "<img border=\"0\" src=\"/themes/console/snark/images/hidepeers.png\" title=\"显示节点\" alt=\"显示节点\">"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:254 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:254
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1271 msgid "<img border=\"0\" src=\"/themes/console/snark/images/torrent.png\" title=\"Loaded Torrents\">Torrent"
msgid "Torrent" msgstr "<img border=\"0\" src=\"/themes/console/snark/images/torrent.png\" title=\"载入的种子\">种子"
msgstr "种子"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:256 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:256
msgid "ETA" msgid "<img border=\"0\" src=\"/themes/console/snark/images/eta.png\" title=\"Estimated Download Time\">ETA"
msgstr "预计剩余时间" msgstr "<img border=\"0\" src=\"/themes/console/snark/images/eta.png\" title=\"预计剩余时间\">预计剩余时间"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:258 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:258
msgid "Downloaded" msgid "<img border=\"0\" src=\"/themes/console/images/inbound.png\" title=\"Data Downloaded\">RX"
msgstr "下载" msgstr "<img border=\"0\" src=\"/themes/console/images/inbound.png\" title=\"下载数据量\">下载"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:260 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:260
msgid "Uploaded" msgid "<img border=\"0\" src=\"/themes/console/images/outbound.png\" title=\"Data Uploaded\">TX"
msgstr "上传" msgstr "<img border=\"0\" src=\"/themes/console/images/outbound.png\" title=\"上传数据量\">上传"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:262 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:262
msgid "Down Rate" msgid "<img border=\"0\" src=\"/themes/console/images/inbound.png\" title=\"Download Speed\">Rate"
msgstr "下载速度" msgstr "<img border=\"0\" src=\"/themes/console/images/inbound.png\" title=\"下载速度\">下载速度"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:264 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:264
msgid "Up Rate" msgid "<img border=\"0\" src=\"/themes/console/images/outbound.png\" title=\"Upload Speed\">Rate"
msgstr "上传速度" msgstr "<img border=\"0\" src=\"/themes/console/images/outbound.png\" title=\"上传速度\">上传速度"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:271 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:271
msgid "Stop all torrents and the I2P tunnel" msgid "Stop all torrents and the I2P tunnel"
msgstr "停止全部种子及I2P隧道" msgstr "停止全部种子及I2P隧道"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:273 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:273
msgid "Stop All" msgid "<img src=\"/themes/console/snark/images/stop_all.png\" title=\"Stop All Torrents\" alt=\"Stop All\">"
msgstr "停止全部" msgstr "<img src=\"/themes/console/snark/images/stop_all.png\" title=\"全部停止\" alt=\"全部停止\">"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:278 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:278
msgid "Start all torrents and the I2P tunnel" msgid "Start all torrents and the I2P tunnel"
msgstr "启动全部种子及I2P隧道" msgstr "启动全部种子及I2P隧道"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:280 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:280
msgid "Start All" msgid "<img src=\"/themes/console/snark/images/start_all.png\" title=\"Start All Torrents\" alt=\"Start All\">"
msgstr "启动全部" msgstr "<img src=\"/themes/console/snark/images/start_all.png\" title=\"全部开始\" alt=\"全部开始\">"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:297 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:297
msgid "No torrents loaded." msgid "No torrents loaded."
@ -317,13 +318,13 @@ msgid "Torrent file {0} does not exist"
msgstr "种子文件{0}不存在" msgstr "种子文件{0}不存在"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:346 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:346
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1476 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1481
#, java-format #, java-format
msgid "Torrent already running: {0}" msgid "Torrent already running: {0}"
msgstr "种子已启动:{0}" msgstr "种子已启动:{0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:348 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:348
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1478 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1483
#, java-format #, java-format
msgid "Torrent already in the queue: {0}" msgid "Torrent already in the queue: {0}"
msgstr "种子排队中:{0}" msgstr "种子排队中:{0}"
@ -450,7 +451,7 @@ msgid "Seeding"
msgstr "正做种" msgstr "正做种"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:682 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:682
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1327 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1317
msgid "Complete" msgid "Complete"
msgstr "完成" msgstr "完成"
@ -486,24 +487,24 @@ msgid "Tracker"
msgstr "Tracker服务器" msgstr "Tracker服务器"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:751 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:751
msgid "Details" msgid "<img border=\"0\" src=\"/themes/console/snark/images/details.png\">"
msgstr "详情" msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:785 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:785
msgid "Stop the torrent" msgid "Stop the torrent"
msgstr "停止种子" msgstr "停止种子"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:787 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:787
msgid "Stop" msgid "<img src=\"/themes/console/snark/images/stop.png\" title=\"Stop Torrent\" alt=\"Stop\">"
msgstr "停止" msgstr "<img src=\"/themes/console/snark/images/stop.png\" title=\"停止下载\" alt=\"停止\">"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:793 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:793
msgid "Start the torrent" msgid "Start the torrent"
msgstr "启动种子" msgstr "启动种子"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:795 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:795
msgid "Start" msgid "<img src=\"/themes/console/snark/images/start.png\" title=\"Start Torrent\" alt=\"Start\">"
msgstr "启动" msgstr "<img src=\"/themes/console/snark/images/start.png\" title=\"开始下载\" alt=\"开始\">"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:800 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:800
msgid "Remove the torrent from the active list, deleting the .torrent file" msgid "Remove the torrent from the active list, deleting the .torrent file"
@ -518,8 +519,8 @@ msgid "Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded
msgstr "您确定要删除文件“{0}.torrent”(下载的数据文件不会被删除)?" msgstr "您确定要删除文件“{0}.torrent”(下载的数据文件不会被删除)?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:807 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:807
msgid "Remove" msgid "<img src=\"/themes/console/snark/images/remove.png\" title=\"Remove Torrent\" alt=\"Remove\">"
msgstr "移除" msgstr "<img src=\"/themes/console/snark/images/remove.png\" title=\"删除种子\" alt=\"删除种子\">"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:811 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:811
msgid "Delete the .torrent file and the associated data file(s)" msgid "Delete the .torrent file and the associated data file(s)"
@ -534,8 +535,8 @@ msgid "Are you sure you want to delete the torrent \\''{0}\\'' and all downloade
msgstr "您确定要删除种子“{0}”(下载的数据文件会一并被删除)?" msgstr "您确定要删除种子“{0}”(下载的数据文件会一并被删除)?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:818 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:818
msgid "Delete" msgid "<img src=\"/themes/console/snark/images/delete.png\" title=\"Delete Torrent + Data\" alt=\"Delete\">"
msgstr "删除" msgstr "<img src=\"/themes/console/snark/images/delete.png\" title=\"删除种子 + 数据\" alt=\"删除种子 + 数据\">"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:861 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:861
msgid "Seed" msgid "Seed"
@ -558,8 +559,8 @@ msgid "Choking (We are not allowing the peer to request pieces)"
msgstr "拒绝请求" msgstr "拒绝请求"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:927 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:927
msgid "Add Torrent" msgid "<img border=\"0\" src=\"/themes/console/snark/images/add.png\">Add Torrent"
msgstr "添加种子" msgstr "<img border=\"0\" src=\"/themes/console/snark/images/add.png\">添加种子"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:929 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:929
msgid "From URL" msgid "From URL"
@ -571,16 +572,16 @@ msgstr "添加种子"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:937 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:937
#, java-format #, java-format
msgid "Alternately, you can copy .torrent files to the directory {0}." msgid "You can also copy .torrent files to: <code>{0}"
msgstr "或者您可以将.torrent文件复制到以下目录{0}." msgstr "或者您可以将.torrent文件复制到<code>{0}."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:939 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:939
msgid "Removing a .torrent file will cause the torrent to stop." msgid "Removing a .torrent will cause it to stop."
msgstr "删除种子文件将导致中止该下载任务。" msgstr "删除种子文件将导致该下载任务中止。"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:958 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:958
msgid "Create Torrent" msgid "<img border=\"0\" src=\"/themes/console/snark/images/create.png\">Create Torrent"
msgstr "创建种子" msgstr "<img border=\"0\" src=\"/themes/console/snark/images/create.png\">创建种子"
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n"); #. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:961 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:961
@ -596,8 +597,8 @@ msgid "Select a tracker"
msgstr "选择一个Tracker" msgstr "选择一个Tracker"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:982 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:982
msgid "or" msgid "or&nbsp;"
msgstr "或" msgstr "或&nbsp;"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:985 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:985
msgid "Specify custom tracker announce URL" msgid "Specify custom tracker announce URL"
@ -609,8 +610,8 @@ msgstr "创建种子"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1133 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1133
msgid "Configuration" msgid "<img border=\"0\" src=\"/themes/console/snark/images/config.png\">Configuration"
msgstr "设置" msgstr "<img border=\"0\" src=\"/themes/console/snark/images/config.png\">设置"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1009 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1009
msgid "Data directory" msgid "Data directory"
@ -709,53 +710,103 @@ msgid "1 tunnel"
msgid_plural "{0} tunnels" msgid_plural "{0} tunnels"
msgstr[0] "{0}隧道" msgstr[0] "{0}隧道"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1283 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1271
msgid "Up to higher level directory" msgid "Torrent"
msgstr "上一层文件夹" msgstr "种子"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1288 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1278
msgid "File" msgid "<img border=\"0\" src=\"/themes/console/snark/images/file.png\" title=\"File\" alt=\"File\">&nbsp;"
msgstr "文件" msgstr "<img border=\"0\" src=\"/themes/console/snark/images/file.png\" title=\"文件\" alt=\"文件\">&nbsp;"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1288 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1278
msgid "Size" msgid "<img border=\"0\" src=\"/themes/console/snark/images/size.png\" title=\"FileSize\" alt=\"FileSize\">Size"
msgstr "大小" msgstr "<img border=\"0\" src=\"/themes/console/snark/images/size.png\" title=\"文件大小\" alt=\"文件大小\">大小"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1311 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1279
msgid "<img border=\"0\" src=\"/themes/console/snark/images/status.png\" title=\"Download Status\">Status"
msgstr "<img border=\"0\" src=\"/themes/console/snark/images/status.png\" title=\"下载状态\">状态"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1301
msgid "Directory" msgid "Directory"
msgstr "文件夹" msgstr "文件夹"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1316 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1306
msgid "Torrent not found?" msgid "Torrent not found?"
msgstr "种子未找到" msgstr "种子未找到"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1324 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1314
msgid "File not found in torrent?" msgid "File not found in torrent?"
msgstr "种子中没有发现文件?" msgstr "种子中没有发现文件?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1330 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1320
msgid "complete" msgid "complete"
msgstr "完成" msgstr "完成"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1331 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1321
msgid "bytes remaining" msgid "bytes remaining"
msgstr "剩余字节数" msgstr "剩余字节数"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1456 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1373
msgid "Up to higher level directory"
msgstr "上一层文件夹"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1461
#, java-format #, java-format
msgid "Torrent fetched from {0}" msgid "Torrent fetched from {0}"
msgstr "从{0}获取种子成功" msgstr "从{0}获取种子成功"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1484 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1489
#, java-format #, java-format
msgid "Torrent at {0} was not valid" msgid "Torrent at {0} was not valid"
msgstr "{0}的种子中有错误" msgstr "{0}的种子中有错误"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1489 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1494
#, java-format #, java-format
msgid "Torrent was not retrieved from {0}" msgid "Torrent was not retrieved from {0}"
msgstr "从{0}获得种子失败" msgstr "从{0}获得种子失败"
#~ msgid "Status"
#~ msgstr "状态"
#~ msgid "Hide Peers"
#~ msgstr "隐藏用户"
#~ msgid "Show Peers"
#~ msgstr "显示用户"
#~ msgid "ETA"
#~ msgstr "预计剩余时间"
#~ msgid "Downloaded"
#~ msgstr "已下载"
#~ msgid "Uploaded"
#~ msgstr "已上传"
#~ msgid "Down Rate"
#~ msgstr "下载速度"
#~ msgid "Up Rate"
#~ msgstr "上传速度"
#~ msgid "Stop All"
#~ msgstr "停止全部"
#~ msgid "Start All"
#~ msgstr "启动全部"
#~ msgid "Details"
#~ msgstr "详情"
#~ msgid "Stop"
#~ msgstr "停止"
#~ msgid "Start"
#~ msgstr "启动"
#~ msgid "Remove"
#~ msgstr "移除"
#~ msgid "Delete"
#~ msgstr "删除"
#~ msgid "Add Torrent"
#~ msgstr "添加种子"
#~ msgid "Create Torrent"
#~ msgstr "创建种子"
#~ msgid "or"
#~ msgstr "或"
#~ msgid "Configuration"
#~ msgstr "设置"
#~ msgid "File"
#~ msgstr "文件"
#~ msgid "Size"
#~ msgstr "大小"
#~ msgid "Cannot change the I2CP settings while torrents are active" #~ msgid "Cannot change the I2CP settings while torrents are active"
#~ msgstr "正在下载/上传无法更改I2CP设置" #~ msgstr "正在下载/上传无法更改I2CP设置"
#~ msgid "{0} torrents" #~ msgid "{0} torrents"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: I2P i2ptunnel\n" "Project-Id-Version: I2P i2ptunnel\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-07-01 04:52+0000\n" "POT-Creation-Date: 2010-10-04 02:45+0000\n"
"PO-Revision-Date: 2010-05-29 10:57+0800\n" "PO-Revision-Date: 2010-05-29 10:57+0800\n"
"Last-Translator: walking <walking@mail.i2p>\n" "Last-Translator: walking <walking@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n" "Language-Team: foo <foo@bar>\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Chinese\n" "X-Poedit-Language: Chinese\n"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:493 #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:492
#, java-format #, java-format
msgid "" msgid ""
"To visit the destination in your host database, click <a href=\"{0}\">here</" "To visit the destination in your host database, click <a href=\"{0}\">here</"
@ -35,55 +35,55 @@ msgstr ""
"请点击下面的链接通过【跳转(Jump)】服务提供的【地址助手】链接跳转至域名对应的" "请点击下面的链接通过【跳转(Jump)】服务提供的【地址助手】链接跳转至域名对应的"
"主机:" "主机:"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:369 #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:372
msgid "New Tunnel" msgid "New Tunnel"
msgstr "新建隧道" msgstr "新建隧道"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:389 #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:392
msgid "Standard client" msgid "Standard client"
msgstr "标准客户端" msgstr "标准客户端"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:390 #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:393
msgid "HTTP client" msgid "HTTP client"
msgstr "HTTP 客户端" msgstr "HTTP 客户端"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:391 #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:394
msgid "IRC client" msgid "IRC client"
msgstr "IRC 客户端" msgstr "IRC 客户端"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:392 #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:395
msgid "Standard server" msgid "Standard server"
msgstr "标准服务器" msgstr "标准服务器"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:393 #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:396
msgid "HTTP server" msgid "HTTP server"
msgstr "HTTP 服务器" msgstr "HTTP 服务器"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:394 #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:397
msgid "SOCKS 4/4a/5 proxy" msgid "SOCKS 4/4a/5 proxy"
msgstr "SOCKS4/4A/5 代理" msgstr "SOCKS4/4A/5 代理"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:395 #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:398
msgid "SOCKS IRC proxy" msgid "SOCKS IRC proxy"
msgstr "SOCKS IRC 代理" msgstr "SOCKS IRC 代理"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:396 #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:399
msgid "CONNECT/SSL/HTTPS proxy" msgid "CONNECT/SSL/HTTPS proxy"
msgstr "CONNECT/SSL/HTTPS 代理" msgstr "CONNECT/SSL/HTTPS 代理"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:397 #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:400
msgid "IRC server" msgid "IRC server"
msgstr "IRC 服务器" msgstr "IRC 服务器"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:398 #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:401
msgid "Streamr client" msgid "Streamr client"
msgstr "Streamr 客户端" msgstr "Streamr 客户端"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:399 #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:402
msgid "Streamr server" msgid "Streamr server"
msgstr "Streamr 服务器" msgstr "Streamr 服务器"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:400 #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:403
msgid "HTTP bidir" msgid "HTTP bidir"
msgstr "双向http" msgstr "双向http"

File diff suppressed because it is too large Load Diff

View File

@ -42,7 +42,6 @@ public class Config {
/** /**
* *
* @param name * @param name
* @return
*/ */
public static String getProperty( String name ) public static String getProperty( String name )
{ {
@ -98,7 +97,6 @@ public class Config {
* *
* @param name * @param name
* @param defaultValue * @param defaultValue
* @return
*/ */
public static String getProperty( String name, String defaultValue ) public static String getProperty( String name, String defaultValue )
{ {
@ -109,7 +107,6 @@ public class Config {
* *
* @param name * @param name
* @param defaultValue * @param defaultValue
* @return
*/ */
public static int getProperty( String name, int defaultValue ) public static int getProperty( String name, int defaultValue )
{ {

View File

@ -270,7 +270,7 @@ public class Folder {
/** /**
* Returns the element on the current page on the given position. * Returns the element on the current page on the given position.
* *
* @param Position of the element on the current page. * @param x Position of the element on the current page.
* @return Element on the current page on the given position. * @return Element on the current page on the given position.
*/ */
public Object getElementAtPosXonCurrentPage( int x ) public Object getElementAtPosXonCurrentPage( int x )
@ -331,7 +331,7 @@ public class Folder {
* Gets index of an element in the array regardless of sorting direction. * Gets index of an element in the array regardless of sorting direction.
* *
* @param element * @param element
* @return * @return index
*/ */
private int getIndexOf( Object element ) private int getIndexOf( Object element )
{ {
@ -348,7 +348,7 @@ public class Folder {
* Sorting direction is taken into account. * Sorting direction is taken into account.
* *
* @param element * @param element
* @return * @return The next element
*/ */
public Object getNextElement( Object element ) public Object getNextElement( Object element )
{ {
@ -369,7 +369,7 @@ public class Folder {
* Sorting direction is taken into account. * Sorting direction is taken into account.
* *
* @param element * @param element
* @return * @return The previous element
*/ */
public Object getPreviousElement( Object element ) public Object getPreviousElement( Object element )
{ {
@ -388,7 +388,7 @@ public class Folder {
* Retrieves element at index i. Depends on sorting direction. * Retrieves element at index i. Depends on sorting direction.
* *
* @param i * @param i
* @return * @return Element at index i
*/ */
private Object getElement( int i ) private Object getElement( int i )
{ {
@ -404,8 +404,6 @@ public class Folder {
/** /**
* Returns true, if folder shows points to the last page. * Returns true, if folder shows points to the last page.
*
* @return
*/ */
public boolean isLastPage() public boolean isLastPage()
{ {
@ -414,8 +412,6 @@ public class Folder {
/** /**
* Returns true, if folder shows points to the first page. * Returns true, if folder shows points to the first page.
*
* @return
*/ */
public boolean isFirstPage() public boolean isFirstPage()
{ {
@ -427,7 +423,6 @@ public class Folder {
* The sorting direction influences which element is taken for comparison. * The sorting direction influences which element is taken for comparison.
* *
* @param element * @param element
* @return
*/ */
public boolean isLastElement( Object element ) public boolean isLastElement( Object element )
{ {
@ -441,7 +436,6 @@ public class Folder {
* The sorting direction influences which element is taken for comparison. * The sorting direction influences which element is taken for comparison.
* *
* @param element * @param element
* @return
*/ */
public boolean isFirstElement( Object element ) public boolean isFirstElement( Object element )
{ {

View File

@ -56,16 +56,12 @@ public class Attachment {
public void setBuffer(ReadBuffer buffer) { public void setBuffer(ReadBuffer buffer) {
this.buffer = buffer; this.buffer = buffer;
} }
/**
* @return
*/
public String getTransferEncoding() { public String getTransferEncoding() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return transferEncoding; return transferEncoding;
} }
/**
* @return
*/
public String getContentType() { public String getContentType() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return contentType; return contentType;
@ -82,9 +78,7 @@ public class Attachment {
public void setTransferEncoding(String transferEncoding) { public void setTransferEncoding(String transferEncoding) {
this.transferEncoding = transferEncoding; this.transferEncoding = transferEncoding;
} }
/**
* @param string
*/
public void setData(String data ) { public void setData(String data ) {
this.data = data; this.data = data;
} }

View File

@ -78,8 +78,8 @@ public class Mail {
} }
/** /**
* *
* @param address * @param address E-mail address to be validated
* @return * @return Is the e-mail address valid?
*/ */
public static boolean validateAddress( String address ) public static boolean validateAddress( String address )
{ {
@ -105,7 +105,6 @@ public class Mail {
} }
/** /**
* @param address * @param address
* @return
*/ */
public static String getAddress(String address ) public static String getAddress(String address )
{ {

View File

@ -47,9 +47,9 @@ public class MailCache {
/** /**
* Fetch any needed data from pop3 server. * Fetch any needed data from pop3 server.
* *
* @param id message id to get * @param uidl message id to get
* @param headerOnly fetch only header lines? * @param headerOnly fetch only header lines?
* @return * @return An e-mail
*/ */
public Mail getMail( String uidl, boolean headerOnly ) { public Mail getMail( String uidl, boolean headerOnly ) {

View File

@ -67,29 +67,25 @@ public class RequestWrapper {
/** /**
* @param b * @param b
* @return
*/ */
public HttpSession getSession(boolean b) { public HttpSession getSession(boolean b) {
return httpRequest.getSession( b ); return httpRequest.getSession( b );
} }
/** /**
* @param key * @param name Specific parameter key
* @return * @return parameter value
*/ */
public String getParameter(String name ) { public String getParameter(String name ) {
return getParameter( name, null ); return getParameter( name, null );
} }
/**
* @return
*/
public HttpSession getSession() { public HttpSession getSession() {
return httpRequest.getSession(); return httpRequest.getSession();
} }
/** /**
* @return * @return List of request parameter names
*/ */
public Enumeration getParameterNames() { public Enumeration getParameterNames() {
if( multiPartRequest != null ) { if( multiPartRequest != null ) {
@ -106,24 +102,19 @@ public class RequestWrapper {
} }
/** /**
* @return * @return The total length of the content.
*/ */
public int getContentLength() { public int getContentLength() {
return httpRequest.getContentLength(); return httpRequest.getContentLength();
} }
/** /**
* @return * @return The content type of the request.
*/ */
public String getContentType() { public String getContentType() {
return httpRequest.getContentType(); return httpRequest.getContentType();
} }
/**
*
* @param partName
* @return
*/
public String getContentType( String partName ) public String getContentType( String partName )
{ {
String result = null; String result = null;
@ -143,19 +134,11 @@ public class RequestWrapper {
} }
return result; return result;
} }
/**
* @param string
* @return
*/
public Object getAttribute(String string) { public Object getAttribute(String string) {
return httpRequest.getAttribute( string ); return httpRequest.getAttribute( string );
} }
/**
* @param new_subject
* @param string
* @return
*/
public String getParameter( String name, String defaultValue ) public String getParameter( String name, String defaultValue )
{ {
String result = defaultValue; String result = defaultValue;
@ -184,10 +167,7 @@ public class RequestWrapper {
} }
return result; return result;
} }
/**
* @param new_filename
* @return
*/
public String getFilename(String partName ) public String getFilename(String partName )
{ {
String result = null; String result = null;
@ -198,10 +178,7 @@ public class RequestWrapper {
} }
return result; return result;
} }
/**
* @param new_filename
* @return
*/
public InputStream getInputStream(String partName ) public InputStream getInputStream(String partName )
{ {
InputStream result = null; InputStream result = null;

View File

@ -42,7 +42,7 @@ public class Base64 implements Encoding {
return "base64"; return "base64";
} }
/** /**
* @return * @return Base64-encoded String.
* @throws EncodingException * @throws EncodingException
*/ */
public String encode( byte in[] ) throws EncodingException public String encode( byte in[] ) throws EncodingException
@ -53,8 +53,8 @@ public class Base64 implements Encoding {
throw new EncodingException( e.getMessage() ); throw new EncodingException( e.getMessage() );
} }
} }
/* (non-Javadoc) /**
* @see i2p.susi23.util.Encoding#encode(java.lang.String) * @see Base64#encode(byte[])
*/ */
public String encode(String str) throws EncodingException { public String encode(String str) throws EncodingException {
try { try {
@ -66,7 +66,7 @@ public class Base64 implements Encoding {
/** /**
* *
* @param in * @param in
* @return * @see Base64#encode(String)
*/ */
private String encode( InputStream in ) throws IOException, EncodingException private String encode( InputStream in ) throws IOException, EncodingException
{ {
@ -116,7 +116,7 @@ public class Base64 implements Encoding {
/** /**
* @param b * @param b
* @return * @return Encoded single byte.
*/ */
private static int encodeByte(int b) { private static int encodeByte(int b) {
/* /*
@ -173,21 +173,21 @@ public class Base64 implements Encoding {
/** /**
* @param text * @param text
* @return * @return Buffer containing a decoded String.
*/ */
public ReadBuffer decode(String text) throws DecodingException { public ReadBuffer decode(String text) throws DecodingException {
return text != null ? decode( text.getBytes() ) : null; return text != null ? decode( text.getBytes() ) : null;
} }
/* (non-Javadoc) /**
* @see i2p.susi23.util.Encoding#decode(byte[]) * @see Base64#decode(String)
*/ */
public ReadBuffer decode(byte[] in) throws DecodingException { public ReadBuffer decode(byte[] in) throws DecodingException {
return decode( in, 0, in.length ); return decode( in, 0, in.length );
} }
/* (non-Javadoc) /**
* @see i2p.susi23.util.Encoding#decode(byte[], int, int) * @see Base64#decode(String)
*/ */
public ReadBuffer decode(byte[] in, int offset, int length) throws DecodingException { public ReadBuffer decode(byte[] in, int offset, int length) throws DecodingException {
byte out[] = new byte[length * 3 / 4 + 1 ]; byte out[] = new byte[length * 3 / 4 + 1 ];
@ -228,10 +228,10 @@ public class Base64 implements Encoding {
return readBuffer; return readBuffer;
} }
/* (non-Javadoc) /*
* @see i2p.susi23.util.Encoding#decode(i2p.susi23.util.ReadBuffer) * @see Base64#decode(String)
*/ */
public ReadBuffer decode(ReadBuffer in) throws DecodingException { public ReadBuffer decode(ReadBuffer in) throws DecodingException {
return decode( in.content, in.offset, in.length ); return decode( in.content, in.offset, in.length );
} }
} }

View File

@ -35,21 +35,21 @@ public interface Encoding {
/** /**
* *
* @param in * @param in
* @return * @return Encoded string.
* @throws EncodingException * @throws EncodingException
*/ */
public String encode( byte in[] ) throws EncodingException; public String encode( byte in[] ) throws EncodingException;
/** /**
* *
* @param str * @param str
* @return * @see Encoding#encode(byte[])
* @throws EncodingException * @throws EncodingException
*/ */
public String encode( String str ) throws EncodingException; public String encode( String str ) throws EncodingException;
/** /**
* *
* @param in * @param in
* @return * @see Encoding#decode(byte[], int, int)
* @throws DecodingException * @throws DecodingException
*/ */
public ReadBuffer decode( byte in[] ) throws DecodingException; public ReadBuffer decode( byte in[] ) throws DecodingException;
@ -58,21 +58,21 @@ public interface Encoding {
* @param in * @param in
* @param offset * @param offset
* @param length * @param length
* @return * @return Output buffer containing decoded String.
* @throws DecodingException * @throws DecodingException
*/ */
public ReadBuffer decode( byte in[], int offset, int length ) throws DecodingException; public ReadBuffer decode( byte in[], int offset, int length ) throws DecodingException;
/** /**
* *
* @param str * @param str
* @return * @see Encoding#decode(byte[], int, int)
* @throws DecodingException * @throws DecodingException
*/ */
public ReadBuffer decode( String str ) throws DecodingException; public ReadBuffer decode( String str ) throws DecodingException;
/** /**
* *
* @param in * @param in
* @return * @see Encoding#decode(byte[], int, int)
* @throws DecodingException * @throws DecodingException
*/ */
public ReadBuffer decode( ReadBuffer in ) throws DecodingException; public ReadBuffer decode( ReadBuffer in ) throws DecodingException;

View File

@ -62,7 +62,7 @@ public class EncodingFactory {
* *
* @param name name of encoding (e.g. quoted-printable) * @param name name of encoding (e.g. quoted-printable)
* *
* @return * @return Encoder instance
*/ */
public static Encoding getEncoding( String name ) public static Encoding getEncoding( String name )
{ {
@ -71,7 +71,7 @@ public class EncodingFactory {
/** /**
* Returns list of available encodings; * Returns list of available encodings;
* *
* @return * @return List of encodings
*/ */
public static Set availableEncodings() public static Set availableEncodings()
{ {

View File

@ -85,7 +85,7 @@ public class POP3MailBox {
/** /**
* *
* @param uidl * @param uidl
* @return * @return Byte buffer containing header data.
*/ */
public ReadBuffer getHeader( String uidl ) { public ReadBuffer getHeader( String uidl ) {
synchronized( synchronizer ) { synchronized( synchronizer ) {
@ -97,7 +97,7 @@ public class POP3MailBox {
* retrieves header from pop3 server (with TOP command and RETR as fallback) * retrieves header from pop3 server (with TOP command and RETR as fallback)
* *
* @param id message id * @param id message id
* @return byte buffer containing data * @return Byte buffer containing header data.
*/ */
private ReadBuffer getHeader( int id ) { private ReadBuffer getHeader( int id ) {
synchronized( synchronizer ) { synchronized( synchronizer ) {
@ -138,7 +138,7 @@ public class POP3MailBox {
/** /**
* *
* @param uidl * @param uidl
* @return * @return Byte buffer containing body data.
*/ */
public ReadBuffer getBody( String uidl ) { public ReadBuffer getBody( String uidl ) {
synchronized( synchronizer ) { synchronized( synchronizer ) {
@ -150,7 +150,7 @@ public class POP3MailBox {
* retrieve message body from pop3 server (via RETR command) * retrieve message body from pop3 server (via RETR command)
* *
* @param id message id * @param id message id
* @return byte buffer containing data * @return Byte buffer containing body data.
*/ */
private ReadBuffer getBody(int id) { private ReadBuffer getBody(int id) {
synchronized( synchronizer ) { synchronized( synchronizer ) {
@ -179,7 +179,7 @@ public class POP3MailBox {
/** /**
* *
* @param uidl * @param uidl
* @return * @return Success of delete operation: true if successful.
*/ */
public boolean delete( String uidl ) public boolean delete( String uidl )
{ {
@ -193,7 +193,7 @@ public class POP3MailBox {
* delete message on pop3 server * delete message on pop3 server
* *
* @param id message id * @param id message id
* @return true if successful * @return Success of delete operation: true if successful.
*/ */
private boolean delete(int id) private boolean delete(int id)
{ {
@ -215,7 +215,7 @@ public class POP3MailBox {
/** /**
* *
* @param uidl * @param uidl
* @return * @return Message size in bytes.
*/ */
public int getSize( String uidl ) { public int getSize( String uidl ) {
synchronized( synchronizer ) { synchronized( synchronizer ) {
@ -227,7 +227,7 @@ public class POP3MailBox {
* get size of a message (via LIST command) * get size of a message (via LIST command)
* *
* @param id message id * @param id message id
* @return message size in bytes * @return Message size in bytes.
*/ */
private int getSize(int id) { private int getSize(int id) {
synchronized( synchronizer ) { synchronized( synchronizer ) {
@ -627,7 +627,7 @@ public class POP3MailBox {
} }
/** /**
* @return * @return The amount of e-mails available.
*/ */
public int getNumMails() { public int getNumMails() {
synchronized( synchronizer ) { synchronized( synchronizer ) {
@ -641,7 +641,7 @@ public class POP3MailBox {
} }
/** /**
* @return * @return The most recent error message.
*/ */
public String lastError() { public String lastError() {
Debug.debug(Debug.DEBUG, "lastError()"); Debug.debug(Debug.DEBUG, "lastError()");
@ -673,7 +673,7 @@ public class POP3MailBox {
* returns number of message with given UIDL * returns number of message with given UIDL
* *
* @param uidl * @param uidl
* @return * @return Message number.
*/ */
private int getIDfromUIDL( String uidl ) private int getIDfromUIDL( String uidl )
{ {
@ -687,7 +687,7 @@ public class POP3MailBox {
/** /**
* *
* @param id * @param id
* @return * @return UIDL.
*/ */
public String getUIDLfromID( int id ) public String getUIDLfromID( int id )
{ {
@ -695,7 +695,7 @@ public class POP3MailBox {
} }
/** /**
* *
* @return * @return A list of the available UIDLs.
*/ */
public Object[] getUIDLs() public Object[] getUIDLs()
{ {

View File

@ -420,9 +420,11 @@
<copy file="installer/lib/launch4j/lib/XStream.LICENSE.txt" tofile="pkg-temp/licenses/LICENSE-XStream.txt" /> <copy file="installer/lib/launch4j/lib/XStream.LICENSE.txt" tofile="pkg-temp/licenses/LICENSE-XStream.txt" />
</target> </target>
<target name="prepthemeupdates"> <target name="prepthemeupdates">
<!-- Add extricated I2PSnark css here, for now --> <!-- Migrated all Snark content to its own dir. Need to ensure snark dir excluded from console theme choices!! -->
<copy file="installer/resources/themes/console/snark.css" todir="pkg-temp/docs/themes/console/" /> <!-- Snark's visible Assets -->
<!-- these files now in docs/, not in the .war --> <copy todir="pkg-temp/docs/themes/snark/ubergine/" >
<fileset dir="installer/resources/themes/snark/ubergine/" />
</copy>
<!-- No need to copy these individually, we're copying the whole dir below.. <!-- No need to copy these individually, we're copying the whole dir below..
<copy file="installer/resources/themes/console/images/favicon.ico" todir="pkg-temp/docs/themes/console/images/" /> <copy file="installer/resources/themes/console/images/favicon.ico" todir="pkg-temp/docs/themes/console/images/" />
<copy file="installer/resources/themes/console/images/i2plogo.png" todir="pkg-temp/docs/themes/console/images/" /> <copy file="installer/resources/themes/console/images/i2plogo.png" todir="pkg-temp/docs/themes/console/images/" />

View File

@ -102,6 +102,25 @@ iD8DBQFHphOV+h38a3n8zjMRAll+AJ9KA6WiDJcTN4qfrslSemUMr+FBrwCeM8pF
D8usM7Dxp5yrDrCYZ5AIijc= D8usM7Dxp5yrDrCYZ5AIijc=
=SrXI =SrXI
-----END PGP SIGNATURE----- -----END PGP SIGNATURE-----
*/
/*
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
*/
/* HungryHobo's key */
private static final String DEFAULT_TRUSTED_KEY4 =
"l3G6um9nB9EDLkT9cUusz5fX-GxXSWE5zaj2~V8lUL~XsGuFf8gKqzJLK" +
"NkAw0CgDIDsLRHHuUaF7ZHo5Z7HG~9JJU9Il4G2jyNYtg5S8AzG0UxkEt" +
"-JeBEqIxv5GDn6OFKr~wTI0UafJbegEWokl-8m-GPWf0vW-yPMjL7y5MI=";
/*
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
iEYEARECAAYFAkysnNIACgkQHix7YXbc3BJVfwCeNGUHaWSqZUbWN9L8VyQLpwxI
JXQAnA28vDmMMMH/WPbC5ixmJeGGNUiR
=3oMC
-----END PGP SIGNATURE-----
*/ */
private static final int VERSION_BYTES = 16; private static final int VERSION_BYTES = 16;
@ -148,6 +167,7 @@ D8usM7Dxp5yrDrCYZ5AIijc=
addKey(DEFAULT_TRUSTED_KEY, "jrandom@mail.i2p"); addKey(DEFAULT_TRUSTED_KEY, "jrandom@mail.i2p");
addKey(DEFAULT_TRUSTED_KEY2, "zzz@mail.i2p"); addKey(DEFAULT_TRUSTED_KEY2, "zzz@mail.i2p");
//addKey(DEFAULT_TRUSTED_KEY3, "complication@mail.i2p"); //addKey(DEFAULT_TRUSTED_KEY3, "complication@mail.i2p");
addKey(DEFAULT_TRUSTED_KEY4, "HungryHobo@mail.i2p");
} }
if (_log.shouldLog(Log.DEBUG)) if (_log.shouldLog(Log.DEBUG))
_log.debug("TrustedUpdate created, trusting " + _trustedKeys.size() + " keys."); _log.debug("TrustedUpdate created, trusting " + _trustedKeys.size() + " keys.");

View File

@ -0,0 +1,11 @@
<html>
<body>
<p>
These classes provide a number of low-level cryptographic routines.
</p>
<p>
These cryptographic routines include symmetric and asymmetric encryption and decryption, hashing, secure random number generation...
</p>
</body>
</html>

View File

@ -0,0 +1,7 @@
<html>
<body>
<p>
Core I2P package, contains information about the I2P version and an entry point to access important elements.
</p>
</body>
</html>

View File

@ -0,0 +1,7 @@
<html>
<body>
<p>
Provides classes for time synchronisation using NTP.
</p>
</body>
</html>

4
debian/control vendored
View File

@ -9,8 +9,8 @@ Package: i2p
Architecture: all Architecture: all
Section: net Section: net
Priority: optional Priority: optional
Depends: java-runtime Depends: sun-java6-jre | default-jre | java-runtime
Description: load-balanced unspoofable packet switching network Description: Load-balanced unspoofable packet switching network
I2P is an anonymizing network, offering a simple layer that identity-sensitive I2P is an anonymizing network, offering a simple layer that identity-sensitive
applications can use to securely communicate. All data is wrapped with several applications can use to securely communicate. All data is wrapped with several
layers of encryption, and the network is both distributed and dynamic, with no layers of encryption, and the network is both distributed and dynamic, with no

12
debian/rules vendored
View File

@ -1,5 +1,8 @@
#!/usr/bin/make -f #!/usr/bin/make -f
VERSION=`grep String\ VERSION core/java/src/net/i2p/CoreVersion.java | cut -d\" -f2`
SOURCEURL=http://mirror.i2p2.de/i2psource_${VERSION}.tar.bz2
build: build:
ant preppkg-linux-only ant preppkg-linux-only
mkdir -p debian/tmp/usr/lib mkdir -p debian/tmp/usr/lib
@ -12,14 +15,12 @@ build:
mkdir -p debian/tmp/usr/bin mkdir -p debian/tmp/usr/bin
sed 's|%INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/eepget > debian/tmp/usr/lib/i2p/a sed 's|%INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/eepget > debian/tmp/usr/lib/i2p/a
mv debian/tmp/usr/lib/i2p/a debian/tmp/usr/lib/i2p/eepget mv debian/tmp/usr/lib/i2p/a debian/tmp/usr/lib/i2p/eepget
cp debian/tmp/usr/lib/i2p/eepget debian/tmp/usr/bin/eepget ln -s /usr/lib/i2p/eepget debian/tmp/usr/bin/eepget
chmod +x debian/tmp/usr/bin/eepget
sed 's|%INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/runplain.sh > debian/tmp/usr/lib/i2p/a sed 's|%INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/runplain.sh > debian/tmp/usr/lib/i2p/a
sed 's|%SYSTEM_java_io_tmpdir|/tmp|g' debian/tmp/usr/lib/i2p/a > debian/tmp/usr/lib/i2p/runplain.sh sed 's|%SYSTEM_java_io_tmpdir|/tmp|g' debian/tmp/usr/lib/i2p/a > debian/tmp/usr/lib/i2p/runplain.sh
sed 's|%INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/i2prouter > debian/tmp/usr/lib/i2p/a sed 's|%INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/i2prouter > debian/tmp/usr/lib/i2p/a
sed 's|%SYSTEM_java_io_tmpdir|/tmp|g' debian/tmp/usr/lib/i2p/a > debian/tmp/usr/lib/i2p/i2prouter sed 's|%SYSTEM_java_io_tmpdir|/tmp|g' debian/tmp/usr/lib/i2p/a > debian/tmp/usr/lib/i2p/i2prouter
cp debian/tmp/usr/lib/i2p/i2prouter debian/tmp/usr/bin/i2prouter ln -s /usr/lib/i2p/i2prouter debian/tmp/usr/bin/i2prouter
chmod +x debian/tmp/usr/bin/i2prouter
rm debian/tmp/usr/lib/i2p/a rm debian/tmp/usr/lib/i2p/a
touch debian/build touch debian/build
@ -34,3 +35,6 @@ clean:
rm -rf debian/tmp/ rm -rf debian/tmp/
ant distclean ant distclean
@exit 0 @exit 0
get-orig-source:
wget ${SOURCEURL}

5
debian/scripts/init vendored
View File

@ -17,6 +17,11 @@ I2P () {
su i2psvc -c "/usr/lib/i2p/i2prouter $1" su i2psvc -c "/usr/lib/i2p/i2prouter $1"
} }
if [ `id -un` != "root" ]; then
echo "This script ($0) must be run as root"
exit 1
fi
case "$1" in case "$1" in
start) start)
log_daemon_msg "Starting I2P" "i2p" log_daemon_msg "Starting I2P" "i2p"

View File

@ -11,4 +11,10 @@ chown $I2PUSER:$I2PUSER $SVCHOME
update-rc.d i2p defaults update-rc.d i2p defaults
cd $I2P cd $I2P
exec su $I2PUSER ./postinstall.sh su $I2PUSER ./postinstall.sh
chmod 755 /usr/lib/i2p/eepget
chmod 755 /usr/lib/i2p/i2prouter
chmod 755 /usr/lib/i2p/i2psvc
invoke-rc.d i2p start

View File

@ -1,4 +1,12 @@
#!/bin/sh #!/bin/sh
# $1 is either "remove" or "purge". Since there are no config
# files left after a remove, exit here if called with "purge".
# This avoids calling userdel again which would cause an error.
if [ "$1" = "purge" ]; then
exit 0;
fi
I2PUSER=i2psvc I2PUSER=i2psvc
exec userdel $I2PUSER exec userdel $I2PUSER

View File

@ -38,6 +38,12 @@
* Router: Set permissions on wrapper.log when not called by RouterLaunch * Router: Set permissions on wrapper.log when not called by RouterLaunch
* Systray: New doc and main() * Systray: New doc and main()
2010-10-22 sponge
* Sanity and some fixs for slackware package
2010-10-22 sponge
* Fix rc.i2p for slackware package
2010-10-19 zzz 2010-10-19 zzz
* Escape & in logs and i2psnark (much more to do) * Escape & in logs and i2psnark (much more to do)
* JobImpl: Deprecate two debugging methods * JobImpl: Deprecate two debugging methods
@ -149,6 +155,12 @@
- Logging cleanup - Logging cleanup
- Comment out a main() - Comment out a main()
2010-10-10 sponge
* Fulfill Request for name resolving in BOB
2010-09-15 dr|z3d
* I2PSnark: Overhaul UI, implement new theme.
* 2010-07-12 0.8 released * 2010-07-12 0.8 released
2010-07-08 zzz 2010-07-08 zzz

View File

@ -1,338 +0,0 @@
/* Not yet complete. Subject to flux and change. dr|z3d - 07.25.09 */
body {
background: #eef;
color: #001;
font: 8pt "Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Tahoma,Helvetica,sans-serif;
}
.snarkTitle {
font-size: 12pt;
font-weight: bold;
text-align: center;
}
.snarkRefresh:link,.snarkRefresh:visited {
text-decoration: none !important;
text-transform: uppercase !important;
padding: 0 16px;
letter-spacing: 0.05em;
font-weight: bold;
font-size: 11pt;
color: #005;
}
.snarkRefresh:hover {
text-decoration: none !important;
text-transform: uppercase !important;
padding: 0 16px;
letter-spacing: 0.05em;
font-weight: bold;
font-size: 11pt;
color: #f60;
border-bottom: 3px solid #f60;
border-top: 3px solid #f60;
}
.snarkRefresh:active {
text-decoration: none !important;
text-transform: uppercase !important;
padding: 0 16px;
letter-spacing: 0.05em;
font-weight: bold;
font-size: 11pt;
color: #f30;
border-bottom: 3px solid #f30;
border-top: 3px solid #f30;
}
.snarkMessages {
font: bold 9pt "Lucida Console","DejaVu Sans Mono",Courier,mono !important;
text-align: left;
margin: 0 0px 10px 0px;
padding: 0;
border-spacing: 0px;
-moz-border-radius: 4px 0 0 0;
-khtml-border-radius: 4px;
border-radius: 4px;
border: 2px solid #930;
overflow: auto;
color: #531;
height: 79px;
width: auto;
background: #f0dea0;
}
pre {
width: 100%;
font: 8pt "Lucida Console","DejaVu Sans Mono",Courier,mono !important;
padding: 0;
text-align: left !important;
height: 8px;
}
table {
margin: 0px 0px 10px 0px;
border: 0px;
padding: 0px;
border-spacing: 0px;
border-collapse: collapse;
}
th {
padding: 4px;
font-size: 9pt;
border-top: 1px outset #001;
border-bottom: 1px inset #001;
background: #fda;
whitespace: nowrap;
}
.SnarkTorrents {
margin: 0;
border: 1px solid #001;
background: #f9f;
}
td {
padding: 4px;
}
.snarkTorrentEven {
background: #fea;
font-size: 8pt;
}
.snarkTorrentOdd {
background: #f0dea0;
font-size: 8pt;
}
.snarkFileName {
min-width: 25em;
padding: 4px 10px;
}
.snarkFileSize {
padding: 4px 10px;
}
.snarkFileStatus {
padding: 4px 10px;
}
.thumb {
max-height: 64px;
max-width: 96px;
}
.snarkNewTorrent {
font-size: 9pt;
}
.snarkAddInfo {
font-size: 9pt;
line-height: 130% !important;
}
.snarkConfigTitle {
font-size: 11pt;
font-weight: bold;
text-transform: uppercase;
}
.snarkConfig {
font-size: 10pt;
width: 100%;
}
.page {
background: #fff;
color: #310;
min-width: 800px !important;
margin: 5px 0 0 0;
padding: 10px 10px 0px 10px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
border: 1px solid #001;
font-size: 9pt !important;
line-height: 160% !important;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
text-align: center;
opacity: 1.0;
}
form {
line-height: 250%;
}
p {
line-height: 150%;
}
hr {
color: #003;
background: #003;
height: 1px;
border: 0px solid #003;
width: 100%;
margin: 10px 0 7px 0;
text-align: center;
}
a:link {
color: #930;
text-decoration: none;
font-weight: bold;
word-wrap: break-word;
}
a:visited {
color: #606;
text-decoration: none;
font-weight: bold;
}
a:hover {
color: #900;
font-weight: bold;
}
input {
font-size: 9pt;
font-weight: bold;
text-align: left;
padding: 2px 4px;
-moz-border-radius: 4px;
border-radius: 4px;
border: 1px;
background: #ffe;
}
input.r {
text-align: right;
}
select {
background: #ffe;
color: #310;
font: 9pt "Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Tahoma,Helvetica,sans-serif;
font-weight: bold;
padding: 2px 2px 2px 3px;
-moz-border-radius: 4px;
border-radius: 4px;
}
textarea {
background: #ffe;
color: #310;
font-weight: bold;
padding: 1px 4px 0px;
-moz-border-radius: 4px;
border-radius: 4px;
}
img {
border: none;
margin: 3px 8px 5px 4px;
vertical-align: middle;
opacity: 1.0;
line-height: 100%;
}
img: hover {
border: none;
margin: 5px 5px 0px 5px;
opacity: 0.5;
line-height: 100%;
}
div.section,div.mainsection {
margin: 0 0 10px 0;
padding: 10px;
border: 1px solid #001;
color: #001;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
word-wrap: break-word;
text-align: center;
background: #ffe url('../console/light/images/tabletile.png');
opacity: 1.0;
}
div.newtorrentsection {
margin: 0 0 10px 0;
padding: 0 10px 10px 10px;
border: 1px solid #001;
text-align: center;
color: #001;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
word-wrap: break-word;
background: #bb4 url('../console/images/yellowtile.png');
opacity: 1.0;
}
div.addtorrentsection {
margin: 0 0 10px 0;
padding: 0 10px 10px 10px;
border: 1px solid #001;
text-align: center;
color: #001;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
word-wrap: break-word;
background: #7f7 url('../console/images/greentile.png');
opacity: 1.0;
}
div.configsection {
margin: 0;
padding: 0 10px 10px 10px;
border: 1px solid #001;
color: #ffb;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 0px 1px #900;
word-wrap: break-word;
text-align: center;
background: #700 url('../console/light/images/darkbluetile.png');
font-weight: bold;/* red tile needs bold text! */
}
div.configsection table{
color: #ffb;
}
div.configsection a {
color: #f90;
}
div.configsection a: hover {
color: #f60;
text-decoration: underline;
}
.snarknavbar {
margin: 0 0 10px 0 !important;
padding: 10px;
border: 1px solid #001;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
background: #ddf url('../console/light/images/tabletile.png');
text-transform: uppercase !important;
letter-spacing: 0.05em;
font-weight: bold;
font-size: 11pt;
color: #001;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 777 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 584 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 570 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 716 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 561 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 921 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 843 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 888 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 920 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 659 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 910 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 499 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 823 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1008 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 788 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 B

View File

@ -0,0 +1,634 @@
/* I2PSnark theme "Ubergine" by dr|z3d */
/* Guantanamo Commemorative Edition. */
body {
background: #101 url('/themes/snark/ubergine/images/graytile.png');
color: #001;
font: 8pt "Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Tahoma,Helvetica,sans-serif;
}
.snarkTitle {
font-size: 12pt;
font-weight: bold;
text-align: center;
}
.snarkRefresh:link,.snarkRefresh:visited {
text-decoration: none !important;
text-transform: uppercase !important;
padding: 4px 16px 5px !important;
margin: -5px -7px -5px 0 !important;
letter-spacing: 0.05em;
font-weight: bold;
font-size: 11pt;
color: #f70;
text-shadow: 1px 1px #420;
background: url('/themes/snark/ubergine/images/snarknav_lowlight.png') no-repeat scroll center bottom;
background: #310 url('/themes/snark/ubergine/images/snarknav_on.png') repeat-x scroll center center;
-moz-border-radius: 0px;
-khtml-border-radius: 3px;
border-radius: 0px;
-moz-box-shadow: inset 0 0 1px 0 #f90;
-khtml-box-shadow: inset 0 0 1px 0 #f90;
box-shadow: 0 0 1px 0 #f90;
}
.snarkRefresh:hover {
text-decoration: none !important;
text-transform: uppercase !important;
padding: 1px 16px;
letter-spacing: 0.05em;
font-weight: bold;
font-size: 11pt;
color: #f50;
background: #310 url('/themes/snark/ubergine/images/snarknav_on.png') repeat-x scroll center center;
background: url('/themes/snark/ubergine/images/snarknav_lowlight.png') repeat-x scroll center center;
-moz-border-radius: 0;
-khtml-border-radius: 0;
border-radius: 0;
-moz-box-shadow: inset 0 0 1px 0 #f90;
-khtml-box-shadow: inset 0 0 1px 0 #f90;
box-shadow: 0 0 1px #f90;
}
.snarkRefresh:active {
text-decoration: none !important;
text-transform: uppercase !important;
padding: 0 16px;
letter-spacing: 0.05em;
font-weight: bold;
font-size: 11pt;
color: #fb0;
background: #310 url('/themes/snark/ubergine/images/snarknav_on.png') repeat-x scroll center center;
}
.snarkRefresh:last-child {
-moz-border-radius: 0 3px 3px 0px;
-khtml-border-radius: 0 3px 0 0;
border-radius: 0;
-moz-box-shadow: inset 0 0 1px 0 #f90;
-khtml-box-shadow: inset 0 0 1px 0 #f90;
box-shadow: 0 0 1px 0 #f90;
}
.snarkRefresh:first-child {
-moz-border-radius: 3px 0 0 3px;
-khtml-border-radius: 3px;
border-radius: 0;
-moz-box-shadow: inset 0 0 1px 0 #f90;
-khtml-box-shadow: inset 0 0 1px 0 #f90;
box-shadow: 0 0 1px 0 #f90;
}
.snarkMessages {
font: bold 9pt "Lucida Console","DejaVu Sans Mono",Courier,mono !important;
text-align: left;
margin: 0 0 10px 0;
padding: 3px 0;
border-spacing: 0px;
-moz-border-radius: 4px 0 0 0;
-khtml-border-radius: 4px 0 0 0;
border-radius: 4px 0 0 0;
border: 1px solid #000;
overflow: auto;
color: #26f;
height: 70px;
width: auto;
background: #101 url('/themes/snark/ubergine/images/hat.png') no-repeat scroll right center;
}
.snarkMessages a:link {
color: #37f !important;
}
.snarkMessages a:hover {
color: #59f !important;
}
.logshim {
margin-top: -10px !important;
}
pre {
width: 100%;
font: 8pt "Lucida Console","DejaVu Sans Mono",Courier,mono !important;
padding: 0;
text-align: left !important;
height: 8px;
color: #13f;
font-weight: bold !important;
}
table {
margin: 0px 0px 10px 0px;
border: 0px;
padding: 0px;
border-spacing: 0px;
border-collapse: collapse;
color: #323;
width: 100%;
opacity: 1 !important;
}
tr {
opacity: 1;
}
thead, tfoot {
background: url("/themes/snark/ubergine/images/snark_thead.png") repeat-x scroll 0 0 #101;
text-shadow:0 2px 5px #333333;
}
thead a, tfoot a {
text-shadow:1px 1px #550000;
}
thead {
border-bottom: 1px solid #101;
}
th {
padding: 4px 2px 4px 4px;
font-size: 9pt;
border-top: 1px outset #001;
border-bottom: 1px inset #101;
color: #ddd;
whitespace: nowrap;
font-variant: small-caps !important;
letter-spacing: 0.05em;
}
th:first-child {
text-align: left !important;
padding-left: 2px;
max-width: 120px;
}
tfoot td:first-child {
text-align: left !important;
padding-left: 0px;
}
th:first-child img {
margin: 1px 1px 3px 1px !important;
}
th:nth-child(2) img {
margin: 1px 7px 3px 2px !important;
}
tfoot th {
padding-bottom: 4px !important;
}
.SnarkTorrents {
margin: 0;
border: 1px solid #101;
background: #212;
}
td {
padding: 1px;
color: #ddd !important;
font-size: 9.5pt;
opacity: 1;
}
.mainsection td {
color: #111;
}
td:first-child {
text-align: right;
padding-left: 10px;
}
.snarkTorrentName {
text-shadow:1px 1px #550000;
padding: 2px 0 0;
}
.snarkTorrentAction {
text-shadow:1px 1px #550000;
padding: 1px 1px 1px 1px !important;
margin: 0 !important;
text-align: center;
width: 68px;
}
.snarkTorrentAction img {
margin: 0 2px !important;
opacity: 0.6;
}
.snarkTorrentAction img:hover {
-moz-box-shadow: 0 0 1px 1px #f90;
opacity: 1;
}
.snarkTorrentEven {
background: #545;
font-size: 8pt;
background: #202;
}
/*
.snarkTorrentEven tr:first-child {
border: 1px dotted #fff !important;
}
*/
.snarkTorrentNoneLoaded {
background: #323;
font-size: 8.5pt;
font-weight: bold;
text-align: center !important;
color: #bbb !important;
}
.snarkTorrentStatus {
padding: 1px 0 2px;
}
.snarkTorrentStatus:first-child {
text-align: left !important;
font-style: italic;
padding-left: 0px;
min-width: 92px;
font-weight: bold;
font-size: 7pt !important;
color: #dd9 !important;
}
.snarkTorrentStatus:first-child img {
margin-right: 0px !important;
}
.snarkTorrentRate, .snarkTorrentDownloaded, .snarkTorrentUploaded {
font-size: 8pt;
font-weight: bold;
padding: 0 3px;
}
.snarkTorrentDownloaded {
color: #76a !important;
}
.snarkTorrentUploaded {
color: #b9b !important;
}
.snarkTorrentRate {
color: #d9d !important;
}
.snarkTorrentOdd {
background: #656;
background: #351933;
font-size: 8pt;
border: 0px inset #101 !important;
border-left: 0 !important;
border-right: 0 !important;
}
.snarkTorrentOdd td, .snarkTorrentEven td {
border-top: 1px dotted #313 !important;
}
.snarkFileName {
/* min-width: 25em;*/
padding: 4px 0px !important;
text-align: left !important;
}
.snarkFileSize {
padding: 4px 2px;
}
.snarkFileStatus {
padding: 4px 10px;
text-align: center;
font-style: italic;
}
.snarkTorrentETA {
font-weight: bold;
font-style: italic;
color: #dd7 !important;
}
.thumb {
max-height: 64px;
max-width: 96px;
}
.snarkNewTorrent {
font-size: 9pt;
}
.snarkAddInfo {
font-size: 9pt;
line-height: 130% !important;
}
.snarkConfigTitle {
font-size: 11pt;
font-weight: bold;
padding: 0 25px 3px 25px;
margin: 5px 0 10px 0 !important;
letter-spacing: 0.25em;
border: 1px solid #111;
-moz-border-radius: 0 0 5px 5px;
-khtml-border-radius: 0 0 5px 5px;
border-radius: 0 0 5px 5px;
border-top: 0;
text-shadow: 0px 3px 5px #323;
background: #101 url('/themes/snark/ubergine/images/snarknav.png') repeat-x scroll center center !important;
font-variant: small-caps !important;
}
.snarkConfig {
font-size: 10pt;
width: 100%;
}
.page {
background: #323 url('/themes/snark/ubergine/images/tile2.png');
color: #310;
min-width: 880px !important;
margin: 5px 0 0 0;
padding: 10px 10px 0px 10px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
border: 1px solid #101;
font-size: 9pt !important;
line-height: 160% !important;
-moz-box-shadow: inset 0px 0px 1px 0px #212;
-khtml-box-shadow: inset 0px 0px 1px 0px #002;
box-shadow: inset 0px 0px 1px 0px #002;
text-align: center;
opacity: 1;
}
form {
margin-bottom: 0;
}
p {
line-height: 150%;
}
hr {
color: #444;
background: #444;
height: 1px;
border: 0px solid #444;
width: 0%;
margin: 5px 0 7px 0;
text-align: center;
}
a:link {
color: #f70;
text-decoration: none;
font-weight: bold;
word-wrap: break-word;
}
a:visited {
color: #f50;
text-decoration: none;
font-weight: bold;
}
a:hover {
color: #f90;
font-weight: bold;
}
input {
font-size: 9pt;
font-weight: bold;
text-align: left;
padding: 2px 4px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
border: 1px inset #000;
background: #212 url('/themes/snark/ubergine/images/graytile.png');
color: #f60;
}
input.r {
text-align: right;
background: url('/themes/snark/ubergine/images/graytile.png');
}
input[type=submit] {
text-shadow: 0px 0px #410;
color: #000;
background: #989;
border: 1px inset #bbb;
}
input[type=submit]:hover {
border: 1px outset #bbb;
text-shadow: 0 0;
background: #f60;
color: #fff;
text-shadow: 0px 1px 5px #f00;
}
input[type=submit]:active {
background: #000 !important;
color: #f60 !important;
text-shadow: 0 !important;
}
input[type=text]:active, input[type=text]:hover, input.r:hover {
background: #f60;
color: #fff;
}
select {
background: #333;
background: url('/themes/snark/ubergine/images/graytile.png') !important;
color: #f60;
font: 9pt "Lucida Sans Unicode","Bitstream Vera Sans",Verdana,Tahoma,Helvetica,sans-serif;
font-weight: bold;
padding: 2px 2px 2px 3px;
-moz-border-radius: 4px 0 0 4px;
-khtml-border-radius: 4px 0 0 4px;
border-radius: 4px 0 0 4px;
border: 1px solid #000;
}
select:hover, textarea:hover {
background: #f60 !important;
color: #fff;
}
textarea {
background: #111 url('/themes/snark/ubergine/images/graytile.png');
color: #f60;
font-weight: bold;
padding: 1px 4px 0px;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
border: 1px inset #000;
}
img {
border: none;
margin: 0 3px 1px 3px;
vertical-align: middle;
opacity: 1.0;
line-height: 100%;
}
img: hover {
border: none;
opacity: 0.5;
line-height: 100%;
}
div.section,div.mainsection {
margin: 0 0 10px 0;
padding: 10px;
border: 1px solid #001;
color: #001;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #212;
word-wrap: break-word;
text-align: center;
background: #545;
opacity: 1 !important;
}
div.newtorrentsection {
margin: 0 0 10px 0;
padding: 0 10px 0px 10px;
border: 1px solid #001;
text-align: center;
color: #ddd;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #101;
-khtml-box-shadow: inset 0px 0px 1px 0px #101;
box-shadow: inset 0px 0px 1px 0px #101;
word-wrap: break-word;
background: #545 url('/themes/snark/ubergine/images/snark_create.png') no-repeat scroll right center;
opacity: 1.0;
}
div.addtorrentsection {
margin: 0 0 10px 0;
padding: 0 10px 0px 10px;
border: 1px solid #001;
text-align: center;
color: #ddd;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #101;
-khtml-box-shadow: inset 0px 0px 1px 0px #101;
box-shadow: inset 0px 0px 1px 0px #101;
word-wrap: break-word;
background: #545 url('/themes/snark/ubergine/images/snark_add.png') no-repeat scroll right center;
opacity: 1.0;
}
div.configsection {
margin: 0 0 10px 0;
padding: 0 10px 15px 10px;
border: 1px solid #000;
color: #ddd;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #101;
-khtml-box-shadow: inset 0px 0px 1px 0px #101;
box-shadow: inset 0px 0px 1px 0px #101;
word-wrap: break-word;
text-align: center;
background: #545;
font-weight: bold;
}
div.configsectionpanel {
margin: 0 0 10px 0;
padding: 0 10px;
border: 1px solid #000;
color: #ddd;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #101;
-khtml-box-shadow: inset 0px 0px 1px 0px #101;
box-shadow: inset 0px 0px 1px 0px #101;
word-wrap: break-word;
text-align: center;
background: #545 url('/themes/snark/ubergine/images/configuration.png') no-repeat scroll right center;
font-weight: bold;
}
.newtorrentsection form, .configsection form, .addtorrentsection form {
color: #ddd !important;
}
div.configsection table{
color: #ffb;
opacity: 1;
}
div.configsection a {
color: #f60;
text-shadow: 1px 1px #500;
}
div.configsection a:hover {
color: #f90;
text-decoration: none;
}
code {
font-size: 9pt;
color: #b8b;
padding: 0 2px;
font-weight: bold;
font-family: "Lucida Console", "DejaVu Sans Mono", Courier, mono;
}
.snarknavbar {
margin: -10px 0 5px 0 !important;
padding: 11px 10px 12px;
border: 1px solid #101;
-moz-border-radius: 0 0 8px 8px;
-khtml-border-radius: 0 0 4px 4px;
border-radius: 0 0 4px 4px;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
-khtml-box-shadow: inset 0px 0px 1px 0px #002;
box-shadow: inset 0px 0px 1px 0px #002;
background: #101 url('/themes/snark/ubergine/images/snarktopnav.png') repeat-x scroll center center;
text-transform: uppercase !important;
letter-spacing: 0.065em !important;
font-weight: bold;
font-size: 11.5pt;
color: #001;
min-width: 700px;
width: 700px;
text-align: center;
}
.snarknavbar img {
border: 0;
margin: 0 -6px 0 -2px;
padding: 1px 0 0px !important;
vertical-align: top;
}

View File

@ -0,0 +1,10 @@
<html>
<body>
<p>
The I2P router application handles the I2P network communication.
</p>
<p>
It encompasses sending and receiving messages, building up tunnels, encrypting and decrypting (on multiple levels) where applicable, and so on.
</p>
</body>
</html>

View File

@ -0,0 +1,10 @@
<html>
<body>
<p>
The peer manager logs information about the history and quality of network peers.
</p>
<p>
Peer capacity, speed and other parameters are calculated to determine in what cases we should use each peer.
</p>
</body>
</html>

View File

@ -0,0 +1,10 @@
<html>
<body>
<p>
The I2P startup package loads the configuration when I2P is started.
</p>
<p>
The startup consists of a number of different jobs, like loading data from files for the network database, creating new router information (keypairs), and so on.
</p>
</body>
</html>

View File

@ -0,0 +1,7 @@
<html>
<body>
<p>
The NTCP transport allows passing I2P messages on top of TCP. The N in NTCP stands for 'New', as the NTCP transport replaces an older TCP transport which had issues concerning congestion collapse.
</p>
</body>
</html>

View File

@ -0,0 +1,7 @@
<html>
<body>
<p>
The transport system allows the usage of communication layers that are below I2P in the stack, on which I2P messages are sent.
</p>
</body>
</html>

View File

@ -0,0 +1,7 @@
<html>
<body>
<p>
The UDP transport (also known as 'SSU transport') allows passing I2P messages on top of UDP.
</p>
</body>
</html>