propagate from branch 'i2p.i2p' (head f672021bb9871a728005be3bd9581710738b9e5f)

to branch 'i2p.i2p.zzz.test' (head e115e218dbb666839e69fa1e1ba7378554b9874f)
This commit is contained in:
zzz
2009-12-10 13:34:05 +00:00
56 changed files with 3627 additions and 2327 deletions

View File

@ -2,6 +2,6 @@
<project-private xmlns="http://www.netbeans.org/ns/project-private/1"> <project-private xmlns="http://www.netbeans.org/ns/project-private/1">
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/> <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/1"> <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/1">
<file>file:/usblv/NetBeansProjects/wi2p.i2p/apps/BOB/src/net/i2p/BOB/BOB.java</file> <file>file:/usblv/NetBeansProjects/i2p.i2p/apps/BOB/src/net/i2p/BOB/TCPio.java</file>
</open-files> </open-files>
</project-private> </project-private>

View File

@ -50,7 +50,7 @@ public class DoCMDS implements Runnable {
// FIX ME // FIX ME
// I need a better way to do versioning, but this will do for now. // I need a better way to do versioning, but this will do for now.
public static final String BMAJ = "00", BMIN = "00", BREV = "08", BEXT = ""; public static final String BMAJ = "00", BMIN = "00", BREV = "0A", BEXT = "";
public static final String BOBversion = BMAJ + "." + BMIN + "." + BREV + BEXT; public static final String BOBversion = BMAJ + "." + BMIN + "." + BREV + BEXT;
private Socket server; private Socket server;
private Properties props; private Properties props;

View File

@ -60,20 +60,9 @@ public class I2Plistener implements Runnable {
this._log = _log; this._log = _log;
this.socketManager = S; this.socketManager = S;
this.serverSocket = SS; this.serverSocket = SS;
// tgwatch = 1;
this.lives = lives; this.lives = lives;
} }
private void rlock() throws Exception {
database.getReadLock();
info.getReadLock();
}
private void runlock() throws Exception {
database.releaseReadLock();
info.releaseReadLock();
}
/** /**
* Simply listen on I2P port, and thread connections * Simply listen on I2P port, and thread connections
* *
@ -83,8 +72,6 @@ public class I2Plistener implements Runnable {
I2PSocket sessSocket = null; I2PSocket sessSocket = null;
int conn = 0; int conn = 0;
try { try {
die:
{
try { try {
serverSocket.setSoTimeout(50); serverSocket.setSoTimeout(50);
@ -111,7 +98,6 @@ public class I2Plistener implements Runnable {
// bad shit // bad shit
System.out.println("Exception " + e); System.out.println("Exception " + e);
} }
}
} finally { } finally {
try { try {
serverSocket.close(); serverSocket.close();

View File

@ -104,10 +104,10 @@ public class MUXlisten implements Runnable {
this.database.releaseReadLock(); this.database.releaseReadLock();
this.info.releaseReadLock(); this.info.releaseReadLock();
socketManager = I2PSocketManagerFactory.createManager(prikey, Q);
if (this.come_in) { if (this.come_in) {
this.listener = new ServerSocket(port, backlog, host); this.listener = new ServerSocket(port, backlog, host);
} }
socketManager = I2PSocketManagerFactory.createManager(prikey, Q);
// I2PException, IOException, RuntimeException // I2PException, IOException, RuntimeException
// To bad we can't just catch and enumerate.... // To bad we can't just catch and enumerate....
// } catch (I2PException e) { // } catch (I2PException e) {
@ -141,8 +141,6 @@ public class MUXlisten implements Runnable {
this.info.add("STARTING", new Boolean(false)); this.info.add("STARTING", new Boolean(false));
this.info.releaseWriteLock(); this.info.releaseWriteLock();
this.database.releaseWriteLock(); this.database.releaseWriteLock();
// throw new Exception(e);
// Debugging, I guess.
e.printStackTrace(); e.printStackTrace();
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -78,16 +78,20 @@ public class TCPio implements Runnable {
* --Sponge * --Sponge
* *
* Tested with 128 bytes, and there was no performance gain. * Tested with 128 bytes, and there was no performance gain.
* 8192 bytes did lower load average across many connections.
* Should I raise it higer? The correct thing to do would be to
* override... perhaps use NTCP, but I2P's streaming lib lacks
* anything NTCP compatable.
* *
* --Sponge * --Sponge
*/ */
int b; int b;
byte a[] = new byte[1]; byte a[] = new byte[8192];
try { try {
try { try {
while (lives.get()) { while (lives.get()) {
b = Ain.read(a, 0, 1); b = Ain.read(a, 0, 8192);
if (b > 0) { if (b > 0) {
Aout.write(a, 0, b); Aout.write(a, 0, b);
} else if (b == 0) { } else if (b == 0) {

View File

@ -64,16 +64,6 @@ public class TCPlistener implements Runnable {
this.lives = lives; this.lives = lives;
} }
private void rlock() throws Exception {
database.getReadLock();
info.getReadLock();
}
private void runlock() throws Exception {
database.releaseReadLock();
info.releaseReadLock();
}
/** /**
* Simply listen on TCP port, and thread connections * Simply listen on TCP port, and thread connections
* *
@ -81,11 +71,9 @@ public class TCPlistener implements Runnable {
public void run() { public void run() {
boolean g = false; boolean g = false;
int conn = 0; int conn = 0;
Socket server = null;
try { try {
die:
{
try { try {
Socket server = new Socket();
listener.setSoTimeout(50); // We don't block, we cycle and check. listener.setSoTimeout(50); // We don't block, we cycle and check.
while (lives.get()) { while (lives.get()) {
try { try {
@ -105,7 +93,6 @@ public class TCPlistener implements Runnable {
} }
} catch (IOException ioe) { } catch (IOException ioe) {
} }
}
} finally { } finally {
try { try {
listener.close(); listener.close();

View File

@ -734,12 +734,12 @@ public class I2PSnarkServlet extends HttpServlet {
out.write("<span class=\"snarkNewTorrent\">\n"); out.write("<span class=\"snarkNewTorrent\">\n");
// *not* enctype="multipart/form-data", so that the input type=file sends the filename, not the file // *not* enctype="multipart/form-data", so that the input type=file sends the filename, not the file
out.write("<form action=\"" + uri + "\" method=\"POST\">\n"); out.write("<form action=\"" + uri + "\" method=\"POST\">\n");
out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" />\n"); out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" >\n");
out.write("<div class=\"addtorrentsection\"><span class=\"snarkConfigTitle\">Add Torrent:</span><br>\n"); out.write("<div class=\"addtorrentsection\"><span class=\"snarkConfigTitle\">Add Torrent</span><br>\n");
out.write("From URL&nbsp;: <input type=\"text\" name=\"newURL\" size=\"80\" value=\"" + newURL + "\" /> \n"); out.write("From URL&nbsp;: <input type=\"text\" name=\"newURL\" size=\"80\" value=\"" + newURL + "\" > \n");
// not supporting from file at the moment, since the file name passed isn't always absolute (so it may not resolve) // not supporting from file at the moment, since the file name passed isn't always absolute (so it may not resolve)
//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");
out.write("<input type=\"submit\" value=\"Add torrent\" name=\"action\" /><br>\n"); out.write("<input type=\"submit\" value=\"Add torrent\" name=\"action\" ><br>\n");
out.write("<span class=\"snarkAddInfo\">Alternately, you can copy .torrent files to " + _manager.getDataDir().getAbsolutePath() + "<br>\n"); out.write("<span class=\"snarkAddInfo\">Alternately, you can copy .torrent files to " + _manager.getDataDir().getAbsolutePath() + "<br>\n");
out.write("Removing that .torrent file will cause the torrent to stop.<br></span>\n"); out.write("Removing that .torrent file will cause the torrent to stop.<br></span>\n");
out.write("</form>\n</span></div>"); out.write("</form>\n</span></div>");
@ -754,12 +754,12 @@ public class I2PSnarkServlet extends HttpServlet {
out.write("<div class=\"newtorrentsection\"><span class=\"snarkNewTorrent\">\n"); out.write("<div class=\"newtorrentsection\"><span class=\"snarkNewTorrent\">\n");
// *not* enctype="multipart/form-data", so that the input type=file sends the filename, not the file // *not* enctype="multipart/form-data", so that the input type=file sends the filename, not the file
out.write("<form action=\"" + uri + "\" method=\"POST\">\n"); out.write("<form action=\"" + uri + "\" method=\"POST\">\n");
out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" />\n"); out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" >\n");
out.write("<span class=\"snarkConfigTitle\">Create Torrent:</span><br>\n"); out.write("<span class=\"snarkConfigTitle\">Create Torrent</span><br>\n");
//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");
out.write("Data to seed: " + _manager.getDataDir().getAbsolutePath() + File.separatorChar out.write("Data to seed: " + _manager.getDataDir().getAbsolutePath() + File.separatorChar
+ "<input type=\"text\" name=\"baseFile\" size=\"20\" value=\"" + baseFile + "<input type=\"text\" name=\"baseFile\" size=\"20\" value=\"" + baseFile
+ "\" title=\"File to seed (must be within the specified path)\" /><br>\n"); + "\" title=\"File to seed (must be within the specified path)\" ><br>\n");
out.write("Tracker: <select name=\"announceURL\"><option value=\"\">Select a tracker</option>\n"); out.write("Tracker: <select name=\"announceURL\"><option value=\"\">Select a tracker</option>\n");
Map trackers = _manager.getTrackers(); Map trackers = _manager.getTrackers();
for (Iterator iter = trackers.entrySet().iterator(); iter.hasNext(); ) { for (Iterator iter = trackers.entrySet().iterator(); iter.hasNext(); ) {
@ -773,8 +773,8 @@ public class I2PSnarkServlet extends HttpServlet {
} }
out.write("</select>\n"); out.write("</select>\n");
out.write("or <input type=\"text\" name=\"announceURLOther\" size=\"50\" value=\"http://\" " + out.write("or <input type=\"text\" name=\"announceURLOther\" size=\"50\" value=\"http://\" " +
"title=\"Custom tracker URL\" /> "); "title=\"Custom tracker URL\" > ");
out.write("<input type=\"submit\" value=\"Create torrent\" name=\"action\" />\n"); out.write("<input type=\"submit\" value=\"Create torrent\" name=\"action\" >\n");
out.write("</form>\n</span></div>"); out.write("</form>\n</span></div>");
} }
@ -788,13 +788,13 @@ public class I2PSnarkServlet extends HttpServlet {
out.write("<form action=\"" + uri + "\" method=\"POST\">\n"); out.write("<form action=\"" + uri + "\" method=\"POST\">\n");
out.write("<div class=\"configsection\"><span class=\"snarkConfig\">\n"); out.write("<div class=\"configsection\"><span class=\"snarkConfig\">\n");
out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" />\n"); out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" >\n");
out.write("<span class=\"snarkConfigTitle\">Configuration:</span><br>\n"); out.write("<span class=\"snarkConfigTitle\">Configuration</span><br>\n");
out.write("Data directory: <input type=\"text\" size=\"40\" name=\"dataDir\" value=\"" + dataDir + "\" "); out.write("<table border=\"0\"><tr><td>Data directory: <td><input type=\"text\" size=\"50\" name=\"dataDir\" value=\"" + dataDir + "\" ");
out.write("title=\"Directory to store torrents and data\" disabled=\"true\" /> <i>(Edit i2psnark.config and restart to change)</i><br>\n"); out.write("title=\"Directory to store torrents and data\" disabled=\"true\" ><br><i>(Edit i2psnark.config and restart to change)</i><br>\n");
out.write("Auto start: <input type=\"checkbox\" class=\"optbox\" name=\"autoStart\" value=\"true\" " out.write("<tr><td>Auto start: <td><input type=\"checkbox\" class=\"optbox\" name=\"autoStart\" value=\"true\" "
+ (autoStart ? "checked " : "") + (autoStart ? "checked " : "")
+ "title=\"If true, automatically start torrents that are added\" />"); + "title=\"If true, automatically start torrents that are added\" >");
//Auto add: <input type="checkbox" name="autoAdd" value="true" title="If true, automatically add torrents that are found in the data directory" /> //Auto add: <input type="checkbox" name="autoAdd" value="true" title="If true, automatically add torrents that are found in the data directory" />
//Auto stop: <input type="checkbox" name="autoStop" value="true" title="If true, automatically stop torrents that are removed from the data directory" /> //Auto stop: <input type="checkbox" name="autoStop" value="true" title="If true, automatically stop torrents that are removed from the data directory" />
//out.write("<br>\n"); //out.write("<br>\n");
@ -814,26 +814,26 @@ public class I2PSnarkServlet extends HttpServlet {
out.write("<option value=\"150\">150%</option>\n\t"); out.write("<option value=\"150\">150%</option>\n\t");
out.write("</select><br>\n"); out.write("</select><br>\n");
*/ */
out.write("Total uploader limit: <input type=\"text\" name=\"upLimit\" value=\"" out.write("<tr><td>Total uploader limit: <td><input type=\"text\" name=\"upLimit\" value=\""
+ _manager.util().getMaxUploaders() + "\" size=\"3\" maxlength=\"3\" /> peers<br>\n"); + _manager.util().getMaxUploaders() + "\" size=\"3\" maxlength=\"3\" > peers<br>\n");
out.write("Up bandwidth limit: <input type=\"text\" name=\"upBW\" value=\"" out.write("<tr><td>Up bandwidth limit: <td><input type=\"text\" name=\"upBW\" value=\""
+ _manager.util().getMaxUpBW() + "\" size=\"3\" maxlength=\"3\" /> KBps <i>(Half <a href=\"/config.jsp\" target=\"blank\">available bandwidth</a> recommended.)</i><br>\n"); + _manager.util().getMaxUpBW() + "\" size=\"3\" maxlength=\"3\" > KBps <i>(Half <a href=\"/config.jsp\" target=\"blank\">available bandwidth</a> recommended.)</i><br>\n");
out.write("Use open trackers also: <input type=\"checkbox\" class=\"optbox\" name=\"useOpenTrackers\" value=\"true\" " out.write("<tr><td>Use open trackers also: <td><input type=\"checkbox\" class=\"optbox\" name=\"useOpenTrackers\" value=\"true\" "
+ (useOpenTrackers ? "checked " : "") + (useOpenTrackers ? "checked " : "")
+ "title=\"If true, uses open trackers in addition\" /> "); + "title=\"If true, uses open trackers in addition\" > ");
out.write("Announce URLs: <input type=\"text\" name=\"openTrackers\" value=\"" out.write("<tr><td>Open tracker announce URLs: <td><input type=\"text\" name=\"openTrackers\" value=\""
+ openTrackers + "\" size=\"50\" /><br>\n"); + openTrackers + "\" size=\"50\" ><br>\n");
//out.write("\n"); //out.write("\n");
//out.write("EepProxy host: <input type=\"text\" name=\"eepHost\" value=\"" //out.write("EepProxy host: <input type=\"text\" name=\"eepHost\" value=\""
// + _manager.util().getEepProxyHost() + "\" size=\"15\" /> "); // + _manager.util().getEepProxyHost() + "\" size=\"15\" /> ");
//out.write("port: <input type=\"text\" name=\"eepPort\" value=\"" //out.write("port: <input type=\"text\" name=\"eepPort\" value=\""
// + _manager.util().getEepProxyPort() + "\" size=\"5\" maxlength=\"5\" /><br>\n"); // + _manager.util().getEepProxyPort() + "\" size=\"5\" maxlength=\"5\" /><br>\n");
out.write("I2CP host: <input type=\"text\" name=\"i2cpHost\" value=\"" out.write("<tr><td>I2CP host: <td><input type=\"text\" name=\"i2cpHost\" value=\""
+ _manager.util().getI2CPHost() + "\" size=\"15\" /> "); + _manager.util().getI2CPHost() + "\" size=\"15\" > ");
out.write("port: <input type=\"text\" name=\"i2cpPort\" value=\"" + out.write("<tr><td>I2CP port: <td><input type=\"text\" name=\"i2cpPort\" value=\"" +
+ _manager.util().getI2CPPort() + "\" size=\"5\" maxlength=\"5\" /> <br>\n"); + _manager.util().getI2CPPort() + "\" size=\"5\" maxlength=\"5\" > <br>\n");
StringBuilder opts = new StringBuilder(64); StringBuilder opts = new StringBuilder(64);
Map options = new TreeMap(_manager.util().getI2CPOptions()); Map options = new TreeMap(_manager.util().getI2CPOptions());
for (Iterator iter = options.entrySet().iterator(); iter.hasNext(); ) { for (Iterator iter = options.entrySet().iterator(); iter.hasNext(); ) {
@ -842,10 +842,10 @@ public class I2PSnarkServlet extends HttpServlet {
String val = (String)entry.getValue(); String val = (String)entry.getValue();
opts.append(key).append('=').append(val).append(' '); opts.append(key).append('=').append(val).append(' ');
} }
out.write("I2CP opts: <input type=\"text\" name=\"i2cpOpts\" size=\"80\" value=\"" out.write("<tr><td>I2CP options: <td><textarea name=\"i2cpOpts\" cols=\"60\" rows=\"1\" wrap=\"off\" >"
+ opts.toString() + "\" /><br>\n"); + opts.toString() + "</textarea><br>\n");
out.write("<input type=\"submit\" value=\"Save configuration\" name=\"action\" />\n"); out.write("<tr><td>&nbsp;<td><input type=\"submit\" value=\"Save configuration\" name=\"action\" >\n");
out.write("</span>\n"); out.write("</table></span>\n");
out.write("</form></div>"); out.write("</form></div>");
} }
@ -869,7 +869,7 @@ public class I2PSnarkServlet extends HttpServlet {
return ((bytes + 512*1024*1024)/(1024*1024*1024)) + "GB"; return ((bytes + 512*1024*1024)/(1024*1024*1024)) + "GB";
} }
private static final String HEADER = "<link href=\"../themes/console/snark.css\" rel=\"stylesheet\" type=\"text/css\" />"; private static final String HEADER = "<link href=\"../themes/console/snark.css\" rel=\"stylesheet\" type=\"text/css\" >";
private static final String TABLE_HEADER = "<table border=\"0\" class=\"snarkTorrents\" width=\"100%\" cellpadding=\"0 10px\">\n" + private static final String TABLE_HEADER = "<table border=\"0\" class=\"snarkTorrents\" width=\"100%\" cellpadding=\"0 10px\">\n" +

View File

@ -268,6 +268,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
OutputStream out = null; OutputStream out = null;
String targetRequest = null; String targetRequest = null;
boolean usingWWWProxy = false; boolean usingWWWProxy = false;
boolean usingInternalServer = false;
String currentProxy = null; String currentProxy = null;
long requestId = ++__requestId; long requestId = ++__requestId;
try { try {
@ -294,6 +295,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
int pos = line.indexOf(" "); int pos = line.indexOf(" ");
if (pos == -1) break; if (pos == -1) break;
method = line.substring(0, pos); method = line.substring(0, pos);
// TODO use Java URL class to make all this simpler and more robust
String request = line.substring(pos + 1); String request = line.substring(pos + 1);
if (request.startsWith("/") && getTunnel().getClientOptions().getProperty("i2ptunnel.noproxy") != null) { if (request.startsWith("/") && getTunnel().getClientOptions().getProperty("i2ptunnel.noproxy") != null) {
request = "http://i2p" + request; request = "http://i2p" + request;
@ -339,8 +341,11 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
} }
} }
// Quick hack for foo.bar.i2p if (host.toLowerCase().equals("proxy.i2p")) {
if (host.toLowerCase().endsWith(".i2p")) { // so we don't do any naming service lookups
destination = "proxy.i2p";
usingInternalServer = true;
} else if (host.toLowerCase().endsWith(".i2p")) {
// Destination gets the host name // Destination gets the host name
destination = host; destination = host;
// Host becomes the destination key // Host becomes the destination key
@ -477,15 +482,15 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
} }
destination = request.substring(0, pos); destination = request.substring(0, pos);
line = method + " " + request.substring(pos); line = method + " " + request.substring(pos);
} } // end host name processing
boolean isValid = usingWWWProxy || isSupportedAddress(host, protocol); boolean isValid = usingWWWProxy || usingInternalServer || isSupportedAddress(host, protocol);
if (!isValid) { if (!isValid) {
if (_log.shouldLog(Log.INFO)) _log.info(getPrefix(requestId) + "notValid(" + host + ")"); if (_log.shouldLog(Log.INFO)) _log.info(getPrefix(requestId) + "notValid(" + host + ")");
method = null; method = null;
destination = null; destination = null;
break; break;
} else if (!usingWWWProxy) { } else if ((!usingWWWProxy) && (!usingInternalServer)) {
if (_log.shouldLog(Log.INFO)) _log.info(getPrefix(requestId) + "host=getHostName(" + destination + ")"); if (_log.shouldLog(Log.INFO)) _log.info(getPrefix(requestId) + "host=getHostName(" + destination + ")");
host = getHostName(destination); // hide original host host = getHostName(destination); // hide original host
} }
@ -497,6 +502,8 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
_log.debug(getPrefix(requestId) + "DEST :" + destination + ":"); _log.debug(getPrefix(requestId) + "DEST :" + destination + ":");
} }
// end first line processing
} else { } else {
if (lowercaseLine.startsWith("host: ") && !usingWWWProxy) { if (lowercaseLine.startsWith("host: ") && !usingWWWProxy) {
line = "Host: " + host; line = "Host: " + host;
@ -535,7 +542,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
boolean gzip = DEFAULT_GZIP; boolean gzip = DEFAULT_GZIP;
if (ok != null) if (ok != null)
gzip = Boolean.valueOf(ok).booleanValue(); gzip = Boolean.valueOf(ok).booleanValue();
if (gzip) { if (gzip && !usingInternalServer) {
// according to rfc2616 s14.3, this *should* force identity, even if // according to rfc2616 s14.3, this *should* force identity, even if
// an explicit q=0 for gzip doesn't. tested against orion.i2p, and it // an explicit q=0 for gzip doesn't. tested against orion.i2p, and it
// seems to work. // seems to work.
@ -549,7 +556,8 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
} else { } else {
newRequest.append(line).append("\r\n"); // HTTP spec newRequest.append(line).append("\r\n"); // HTTP spec
} }
} } // end header processing
if (_log.shouldLog(Log.DEBUG)) if (_log.shouldLog(Log.DEBUG))
_log.debug(getPrefix(requestId) + "NewRequest header: [" + newRequest.toString() + "]"); _log.debug(getPrefix(requestId) + "NewRequest header: [" + newRequest.toString() + "]");
@ -571,7 +579,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
// Serve local proxy files (images, css linked from error pages) // Serve local proxy files (images, css linked from error pages)
// Ignore all the headers // Ignore all the headers
if (destination.equals("proxy.i2p")) { if (usingInternalServer) {
serveLocalFile(out, method, targetRequest); serveLocalFile(out, method, targetRequest);
s.close(); s.close();
return; return;

View File

@ -55,7 +55,7 @@ public class I2PSOCKSTunnel extends I2PTunnelClientBase {
I2PSocket destSock = serv.getDestinationI2PSocket(this); I2PSocket destSock = serv.getDestinationI2PSocket(this);
new I2PTunnelRunner(clientSock, destSock, sockLock, null, mySockets); new I2PTunnelRunner(clientSock, destSock, sockLock, null, mySockets);
} catch (SOCKSException e) { } catch (SOCKSException e) {
_log.error("Error from SOCKS connection: " + e.getMessage()); _log.error("Error from SOCKS connection", e);
closeSocket(s); closeSocket(s);
} }
} }

View File

@ -89,7 +89,7 @@
<!-- jar again to get the latest messages_*.class files --> <!-- jar again to get the latest messages_*.class files -->
<jar destfile="./build/routerconsole.jar" basedir="./build/obj" includes="**/*.class" update="true" /> <jar destfile="./build/routerconsole.jar" basedir="./build/obj" includes="**/*.class" update="true" />
</target> </target>
<target name="poupdate" depends="compile"> <target name="poupdate" depends="build">
<ant target="war" /> <ant target="war" />
<!-- Update the messages_*.po files. <!-- Update the messages_*.po files.
We need to supply the bat file for windows, and then change the fail property to true --> We need to supply the bat file for windows, and then change the fail property to true -->

View File

@ -232,7 +232,7 @@ public class ConfigNetHandler extends FormHandler {
if (_requireIntroductions) { if (_requireIntroductions) {
_context.router().setConfigSetting(UDPTransport.PROP_FORCE_INTRODUCERS, "true"); _context.router().setConfigSetting(UDPTransport.PROP_FORCE_INTRODUCERS, "true");
addFormNotice(_("Requiring SSU introduers")); addFormNotice(_("Requiring SSU introducers"));
} else { } else {
_context.router().removeConfigSetting(UDPTransport.PROP_FORCE_INTRODUCERS); _context.router().removeConfigSetting(UDPTransport.PROP_FORCE_INTRODUCERS);
} }

View File

@ -36,10 +36,10 @@ public class ConfigUIHelper extends HelperBase {
return rv; return rv;
} }
private static final String langs[] = {"de", "en", "fr", "nl", "se", "zh"}; private static final String langs[] = {"de", "en", "fr", "nl", "ru", "sv", "zh"};
private static final String flags[] = {"de", "us", "fr", "nl", "se", "cn"}; private static final String flags[] = {"de", "us", "fr", "nl", "ru", "se", "cn"};
private static final String xlangs[] = {_x("German"), _x("English"), _x("French"), private static final String xlangs[] = {_x("German"), _x("English"), _x("French"),
_x("Dutch"), _x("Swedish"), _x("Chinese")}; _x("Dutch"), _x("Russian"), _x("Swedish"), _x("Chinese")};
/** todo sort by translated string */ /** todo sort by translated string */
public String getLangSettings() { public String getLangSettings() {

View File

@ -4,6 +4,7 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import net.i2p.data.DataHelper;
public class NetDbHelper extends HelperBase { public class NetDbHelper extends HelperBase {
private String _routerPrefix; private String _routerPrefix;
@ -12,7 +13,11 @@ public class NetDbHelper extends HelperBase {
public NetDbHelper() {} public NetDbHelper() {}
public void setRouter(String r) { _routerPrefix = r; } public void setRouter(String r) {
if (r != null)
_routerPrefix = DataHelper.stripHTML(r); // XSS
}
public void setFull(String f) { public void setFull(String f) {
try { try {
_full = Integer.parseInt(f); _full = Integer.parseInt(f);

View File

@ -46,13 +46,13 @@ class ProfileOrganizerRenderer {
Hash peer = (Hash)iter.next(); Hash peer = (Hash)iter.next();
if (_organizer.getUs().equals(peer)) continue; if (_organizer.getUs().equals(peer)) continue;
PeerProfile prof = _organizer.getProfile(peer); PeerProfile prof = _organizer.getProfile(peer);
if (_organizer.isWellIntegrated(peer)) { //if (_organizer.isWellIntegrated(peer)) {
integratedPeers.add(prof); // integratedPeers.add(prof);
} else { //} else {
RouterInfo info = _context.netDb().lookupRouterInfoLocally(peer); RouterInfo info = _context.netDb().lookupRouterInfoLocally(peer);
if (info != null && info.getCapabilities().indexOf("f") >= 0) if (info != null && info.getCapabilities().indexOf("f") >= 0)
integratedPeers.add(prof); integratedPeers.add(prof);
} //}
if (prof.getLastSendSuccessful() <= hideBefore) { if (prof.getLastSendSuccessful() <= hideBefore) {
older++; older++;
continue; continue;

View File

@ -32,15 +32,18 @@
<div class="wideload"><p><table><tr><td><input style="text-align: right; width: 5em;" name="inboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="inboundRate" />" /> <div class="wideload"><p><table><tr><td><input style="text-align: right; width: 5em;" name="inboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="inboundRate" />" />
<%=intl._("KBps In")%> <%=intl._("KBps In")%>
</td><td>(<jsp:getProperty name="nethelper" property="inboundRateBits" />)</td> </td><td>(<jsp:getProperty name="nethelper" property="inboundRateBits" />)</td>
<% /********
<!-- let's keep this simple... <!-- let's keep this simple...
bursting up to bursting up to
<input name="inboundburstrate" type="text" size="5" value="<jsp:getProperty name="nethelper" property="inboundBurstRate" />" /> KBps for <input name="inboundburstrate" type="text" size="5" value="<jsp:getProperty name="nethelper" property="inboundBurstRate" />" /> KBps for
<jsp:getProperty name="nethelper" property="inboundBurstFactorBox" /><br> <jsp:getProperty name="nethelper" property="inboundBurstFactorBox" /><br>
--> -->
*********/ %>
</tr><tr> </tr><tr>
<td><input style="text-align: right; width: 5em;" name="outboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="outboundRate" />" /> <td><input style="text-align: right; width: 5em;" name="outboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="outboundRate" />" />
<%=intl._("KBps Out")%> <%=intl._("KBps Out")%>
</td><td>(<jsp:getProperty name="nethelper" property="outboundRateBits" />)</td> </td><td>(<jsp:getProperty name="nethelper" property="outboundRateBits" />)</td>
<% /********
<!-- let's keep this simple... <!-- let's keep this simple...
bursting up to bursting up to
<input name="outboundburstrate" type="text" size="2" value="<jsp:getProperty name="nethelper" property="outboundBurstRate" />" /> KBps for <input name="outboundburstrate" type="text" size="2" value="<jsp:getProperty name="nethelper" property="outboundBurstRate" />" /> KBps for
@ -48,6 +51,7 @@
<i>KBps = kilobytes per second = 1024 bytes per second = 8192 bits per second.<br> <i>KBps = kilobytes per second = 1024 bytes per second = 8192 bits per second.<br>
A negative rate sets the default.</i><br> A negative rate sets the default.</i><br>
--> -->
*********/ %>
</tr><tr> </tr><tr>
<td><jsp:getProperty name="nethelper" property="sharePercentageBox" /> <%=intl._("Share")%></td> <td><jsp:getProperty name="nethelper" property="sharePercentageBox" /> <%=intl._("Share")%></td>
<td>(<jsp:getProperty name="nethelper" property="shareRateBits" />) <td>(<jsp:getProperty name="nethelper" property="shareRateBits" />)
@ -121,6 +125,7 @@
</p><p><b><%=intl._("UDP Configuration:")%></b><br> </p><p><b><%=intl._("UDP Configuration:")%></b><br>
<%=intl._("UDP port:")%> <%=intl._("UDP port:")%>
<input name ="udpPort" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="configuredUdpPort" />" /><br> <input name ="udpPort" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="configuredUdpPort" />" /><br>
<% /********
<!-- let's keep this simple... <!-- let's keep this simple...
<input type="checkbox" class="optbox" name="requireIntroductions" value="true" <jsp:getProperty name="nethelper" property="requireIntroductionsChecked" /> /> <input type="checkbox" class="optbox" name="requireIntroductions" value="true" <jsp:getProperty name="nethelper" property="requireIntroductionsChecked" /> />
Require SSU introductions Require SSU introductions
@ -128,6 +133,7 @@
</p><p> </p><p>
Current External UDP address: <i><jsp:getProperty name="nethelper" property="udpAddress" /></i><br> Current External UDP address: <i><jsp:getProperty name="nethelper" property="udpAddress" /></i><br>
--> -->
*********/ %>
</p><p> </p><p>
<b><%=intl._("TCP Configuration")%>:</b><br> <b><%=intl._("TCP Configuration")%>:</b><br>
<%=intl._("Externally reachable hostname or IP address")%>:<br> <%=intl._("Externally reachable hostname or IP address")%>:<br>
@ -163,10 +169,12 @@
<%=intl._("Most of the options above are for special situations, for example where UPnP does not work correctly, or a firewall not under your control is doing harm.")%> <%=intl._("Most of the options above are for special situations, for example where UPnP does not work correctly, or a firewall not under your control is doing harm.")%>
<%=intl._("Certain firewalls such as symmetric NATs may not work well with I2P.")%> <%=intl._("Certain firewalls such as symmetric NATs may not work well with I2P.")%>
</p> </p>
<% /********
<!-- let's keep this simple... <!-- let's keep this simple...
<input type="submit" name="recheckReachability" value="Check network reachability..." /> <input type="submit" name="recheckReachability" value="Check network reachability..." />
</p> </p>
--> -->
*********/ %>
<p> <p>
<%=intl._("UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address and forward ports.")%> <%=intl._("UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address and forward ports.")%>
<%=intl._("UPnP support is beta, and may not work for any number of reasons")%>: <%=intl._("UPnP support is beta, and may not work for any number of reasons")%>:

View File

@ -24,7 +24,7 @@
<% String peer = ""; <% String peer = "";
if (request.getParameter("peer") != null) if (request.getParameter("peer") != null)
peer = request.getParameter("peer"); peer = net.i2p.data.DataHelper.stripHTML(request.getParameter("peer")); // XSS
%> %>
<div class="configure"> <div class="configure">
<form action="configpeer.jsp" method="POST"> <form action="configpeer.jsp" method="POST">

View File

@ -3,5 +3,5 @@
<meta http-equiv="pragma" content="no-cache" /> <meta http-equiv="pragma" content="no-cache" />
</head> </head>
<body> <body>
The I2P Tunnel Manager is not currently running. Please visit the<a href="/configclients.jsp">Client Configuration</a> page to start it. The I2P Tunnel Manager is not currently running. Please visit the <a href="/configclients.jsp">Client Configuration</a> page to start it.
</body></html> </body></html>

View File

@ -11,7 +11,7 @@
// pass the new delay parameter to the iframe // pass the new delay parameter to the iframe
newDelay = "?refresh=" + d; newDelay = "?refresh=" + d;
if (!"0".equals(d)) if (!"0".equals(d))
out.print("<iframe src=\"summaryframe.jsp" + newDelay + "\" height=\"1500\" width=\"200\" scrolling=\"auto\" frameborder=\"0\" title=\"sidepanel\">\n"); out.print("<iframe src=\"/summaryframe.jsp" + newDelay + "\" height=\"1500\" width=\"200\" scrolling=\"auto\" frameborder=\"0\" title=\"sidepanel\">\n");
%> %>
<div class="routersummary"> <div class="routersummary">
<%@include file="summarynoframe.jsi" %> <%@include file="summarynoframe.jsi" %>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -35,6 +35,8 @@ import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.Properties; import java.util.Properties;
import net.i2p.data.DataHelper;
public class AddressbookBean public class AddressbookBean
{ {
private String book, action, serial, lastSerial, filter, search, hostname, destination; private String book, action, serial, lastSerial, filter, search, hostname, destination;
@ -140,7 +142,7 @@ public class AddressbookBean
return book; return book;
} }
public void setBook(String book) { public void setBook(String book) {
this.book = book; this.book = DataHelper.stripHTML(book); // XSS
} }
public String getSerial() { public String getSerial() {
lastSerial = "" + Math.random(); lastSerial = "" + Math.random();
@ -326,7 +328,7 @@ public class AddressbookBean
return destination; return destination;
} }
public void setDestination(String destination) { public void setDestination(String destination) {
this.destination = destination; this.destination = DataHelper.stripHTML(destination); // XSS
} }
public String getHostname() { public String getHostname() {
return hostname; return hostname;
@ -338,7 +340,7 @@ public class AddressbookBean
deletionMarks.addLast( name ); deletionMarks.addLast( name );
} }
public void setHostname(String hostname) { public void setHostname(String hostname) {
this.hostname = hostname; this.hostname = DataHelper.stripHTML(hostname); // XSS
} }
private int getBeginInt() { private int getBeginInt() {
return Math.max(0, Math.min(entries.length - 1, beginIndex)); return Math.max(0, Math.min(entries.length - 1, beginIndex));

View File

@ -348,19 +348,19 @@
</copy> </copy>
<!-- make a "classic" theme --> <!-- make a "classic" theme -->
<copy todir="pkg-temp/docs/themes/console/classic/" > <copy todir="pkg-temp/docs/themes/console/classic/" >
<fileset dir="installer/resources/themes/console/classic/" /> <fileset dir="installer/resources/themes/console/classic/" excludes="**/i2plogo.png" />
</copy> </copy>
<!-- Add dark theme --> <!-- Add dark theme -->
<copy todir="pkg-temp/docs/themes/console/dark/" > <copy todir="pkg-temp/docs/themes/console/dark/" >
<fileset dir="installer/resources/themes/console/dark/" /> <fileset dir="installer/resources/themes/console/dark/" excludes="**/i2plogo.png" />
</copy> </copy>
<!-- Add light theme --> <!-- Add light theme -->
<copy todir="pkg-temp/docs/themes/console/light/" > <copy todir="pkg-temp/docs/themes/console/light/" >
<fileset dir="installer/resources/themes/console/light/" /> <fileset dir="installer/resources/themes/console/light/" excludes="**/i2plogo.png" />
</copy> </copy>
<!-- Add midnight theme --> <!-- Add midnight theme -->
<copy todir="pkg-temp/docs/themes/console/midnight/" > <copy todir="pkg-temp/docs/themes/console/midnight/" >
<fileset dir="installer/resources/themes/console/midnight/" /> <fileset dir="installer/resources/themes/console/midnight/" excludes="**/i2plogo.png" />
</copy> </copy>
<!-- Add shared images.. these are subject to flux and change! --> <!-- Add shared images.. these are subject to flux and change! -->
<copy todir="pkg-temp/docs/themes/console/images/" > <copy todir="pkg-temp/docs/themes/console/images/" >

View File

@ -16,7 +16,7 @@ package net.i2p;
public class CoreVersion { public class CoreVersion {
/** deprecated */ /** deprecated */
public final static String ID = "Monotone"; public final static String ID = "Monotone";
public final static String VERSION = "0.7.7"; public final static String VERSION = "0.7.8";
public static void main(String args[]) { public static void main(String args[]) {
System.out.println("I2P Core version: " + VERSION); System.out.println("I2P Core version: " + VERSION);

View File

@ -1,3 +1,41 @@
* 2009-12-08 0.7.8 released
2009-12-08 zzz
* Misc. cleanups after review, prep for release
2009-12-06 zzz
* netdb.jsp: Fix bug caused by XSS fix
* Translations: drop ru until after release
2009-12-05 zzz
* Build: Fix poupdate dependency
* Console: Add Russian option
2009-12-05 sponge
* BOB: fix a critical bug causing ghosts on probes
and remove unused code.
2009-12-04 zzz
* Console: Close up some possible XSS (thanks Pragmatk)
* i2psnark: Config cleanup, more HTML transitional fixes
* readme*.html: Point to translated pages on www.i2p2.i2p
2009-11-29 zzz
* config.jsp: Comment out unused stuff better
* profiles.jsp: Hide non-ff from ff table
* HTTP Proxy: Don't send proxy.i2p to the naming service,
it was making the error pages load slowly
* SOCKS Proxy: Fix an error message
* Transport: Fix the default inbound burst
2009-11-29 sponge
* net.i2p.router.transport.udp deadwood code cleanup.
* documented rare NPE in InboundEstablishState.java.
2009-11-28 sponge
* Improvement to BOB's TCPio to hopefully lower load average. It seems
to be helping a little when stress-tested with Robert.
2009-11-24 zzz 2009-11-24 zzz
* DataStructures: Remove unused Logs * DataStructures: Remove unused Logs
* OrderedProperties: Simplify, use in i2psnark * OrderedProperties: Simplify, use in i2psnark

View File

@ -4,7 +4,7 @@
<info> <info>
<appname>i2p</appname> <appname>i2p</appname>
<appversion>0.7.7</appversion> <appversion>0.7.8</appversion>
<authors> <authors>
<author name="I2P" email="http://forum.i2p2.de/"/> <author name="I2P" email="http://forum.i2p2.de/"/>
</authors> </authors>

View File

@ -1,42 +1,36 @@
<i2p.news date="$Date: 2009-10-12 00:00:00 $"> <i2p.news date="$Date: 2009-12-08 00:00:00 $">
<i2p.release version="0.7.7" date="2009/10/12" minVersion="0.6"/> <i2p.release version="0.7.8" date="2009/12/08" minVersion="0.6"/>
<h4>Congratulations on getting I2P installed!</h4> <h4><ul><li>Congratulations on getting I2P installed!</li></ul></h4>
<ul> <p>
<li>
<b>Welcome to I2P!</b> <b>Welcome to I2P!</b>
Please <b>have patience</b> as I2P boots up and finds peers. Please <b>have patience</b> as I2P boots up and finds peers.
</li> </p>
<li> <p>
While you are waiting, please <b>adjust your bandwidth settings</b> on the While you are waiting, please <b>adjust your bandwidth settings</b> on the
<a href="config.jsp">configuration page</a>. <a href="config.jsp">configuration page</a>.
</li> </p>
<li> <p>
Once you have a "shared clients" destination listed on the left, Once you have a "shared clients" destination listed on the left,
please <b>check out</b> our please <b>check out</b> our
<a href="http://www.i2p2.i2p/faq.html">FAQ</a>. <a href="http://www.i2p2.i2p/faq.html">FAQ</a>.
</li> </p>
<li> <p>
Point your IRC client to <b>localhost:6668</b> and say hi to us on #i2p. Point your IRC client to <b>localhost:6668</b> and say hi to us on #i2p.
</li> </p>
</ul> <h4><ul><li>Gratulation zur erfolgreichen Installation von I2P!</li></ul></h4>
<br> <p>
<h4>Gratulation zur erfolgreichen Installation von I2P!</h4>
<ul>
<li>
<b>Willkommen bei I2P!</b> <b>Willkommen bei I2P!</b>
Bitte noch <b>etwas Geduld</b> w&auml;hrend I2P startet und weitere I2P Router findet. Bitte noch <b>etwas Geduld</b> w&auml;hrend I2P startet und weitere I2P Router findet.
</li> </p>
<li> <p>
Passe bitte In der Wartezeit <b>deine Einstellungen zur Bandbreite</b> auf der Passe bitte In der Wartezeit <b>deine Einstellungen zur Bandbreite</b> auf der
<a href="config.jsp">Einstellungsseite</a> an. <a href="config.jsp">Einstellungsseite</a> an.
</li> </p>
<li> <p>
Sobald auf der linken Seite eine "shared clients" Verbindung aufgelistet ist <b>besuche bitte</b> unsere <a href="http://www.i2p2.i2p/faq_de.html">FAQ</a>. Sobald auf der linken Seite eine "shared clients" Verbindung aufgelistet ist <b>besuche bitte</b> unsere <a href="http://www.i2p2.i2p/faq_de.html">FAQ</a>.
</li> </p>
<li> <p>
Verbinde deinen IRC Klienten mit dem Server auf <b>localhost:6668</b> und sage Hallo zu uns im Kanal #i2p. Verbinde deinen IRC Klienten mit dem Server auf <b>localhost:6668</b> und sage Hallo zu uns im Kanal #i2p.
</li> </p>
</ul>
</i2p.news> </i2p.news>

View File

@ -1,42 +1,26 @@
<i2p.news date="$Date: 2009-10-12 00:00:00 $"> <i2p.news date="$Date: 2009-12-08 00:00:00 $">
<i2p.release version="0.7.7" date="2009/10/12" minVersion="0.6" <i2p.release version="0.7.8" date="2009/12/08" minVersion="0.6" />
anonurl="http://i2p/NF2RLVUxVulR3IqK0sGJR0dHQcGXAzwa6rEO4WAWYXOHw-DoZhKnlbf1nzHXwMEJoex5nFTyiNMqxJMWlY54cvU~UenZdkyQQeUSBZXyuSweflUXFqKN-y8xIoK2w9Ylq1k8IcrAFDsITyOzjUKoOPfVq34rKNDo7fYyis4kT5bAHy~2N1EVMs34pi2RFabATIOBk38Qhab57Umpa6yEoE~rbyR~suDRvD7gjBvBiIKFqhFueXsR2uSrPB-yzwAGofTXuklofK3DdKspciclTVzqbDjsk5UXfu2nTrC1agkhLyqlOfjhyqC~t1IXm-Vs2o7911k7KKLGjB4lmH508YJ7G9fLAUyjuB-wwwhejoWqvg7oWvqo4oIok8LG6ECR71C3dzCvIjY2QcrhoaazA9G4zcGMm6NKND-H4XY6tUWhpB~5GefB3YczOqMbHq4wi0O9MzBFrOJEOs3X4hwboKWANf7DT5PZKJZ5KorQPsYRSq0E3wSOsFCSsdVCKUGsAAAA/i2p/i2pupdate.sud" <h4><ul><li>2009-12-08: <b>0.7.8 <a href="http://www.i2p2.i2p/release-0.7.8.html">Released</a></b></li></ul></h4>
publicurl="http://dev.i2p.net/i2p/i2pupdate.sud"
anonannouncement="http://i2p/NF2RLVUxVulR3IqK0sGJR0dHQcGXAzwa6rEO4WAWYXOHw-DoZhKnlbf1nzHXwMEJoex5nFTyiNMqxJMWlY54cvU~UenZdkyQQeUSBZXyuSweflUXFqKN-y8xIoK2w9Ylq1k8IcrAFDsITyOzjUKoOPfVq34rKNDo7fYyis4kT5bAHy~2N1EVMs34pi2RFabATIOBk38Qhab57Umpa6yEoE~rbyR~suDRvD7gjBvBiIKFqhFueXsR2uSrPB-yzwAGofTXuklofK3DdKspciclTVzqbDjsk5UXfu2nTrC1agkhLyqlOfjhyqC~t1IXm-Vs2o7911k7KKLGjB4lmH508YJ7G9fLAUyjuB-wwwhejoWqvg7oWvqo4oIok8LG6ECR71C3dzCvIjY2QcrhoaazA9G4zcGMm6NKND-H4XY6tUWhpB~5GefB3YczOqMbHq4wi0O9MzBFrOJEOs3X4hwboKWANf7DT5PZKJZ5KorQPsYRSq0E3wSOsFCSsdVCKUGsAAAA/pipermail/i2p/2005-September/000878.html"
publicannouncement="http://dev.i2p.net/pipermail/i2p/2005-September/000878.html" />
<i2p.notes date="2005/08/08"
anonurl="http://i2p/NF2RLVUxVulR3IqK0sGJR0dHQcGXAzwa6rEO4WAWYXOHw-DoZhKnlbf1nzHXwMEJoex5nFTyiNMqxJMWlY54cvU~UenZdkyQQeUSBZXyuSweflUXFqKN-y8xIoK2w9Ylq1k8IcrAFDsITyOzjUKoOPfVq34rKNDo7fYyis4kT5bAHy~2N1EVMs34pi2RFabATIOBk38Qhab57Umpa6yEoE~rbyR~suDRvD7gjBvBiIKFqhFueXsR2uSrPB-yzwAGofTXuklofK3DdKspciclTVzqbDjsk5UXfu2nTrC1agkhLyqlOfjhyqC~t1IXm-Vs2o7911k7KKLGjB4lmH508YJ7G9fLAUyjuB-wwwhejoWqvg7oWvqo4oIok8LG6ECR71C3dzCvIjY2QcrhoaazA9G4zcGMm6NKND-H4XY6tUWhpB~5GefB3YczOqMbHq4wi0O9MzBFrOJEOs3X4hwboKWANf7DT5PZKJZ5KorQPsYRSq0E3wSOsFCSsdVCKUGsAAAA/pipermail/i2p/2005-July/000826.html"
publicurl="http://dev.i2p.net/pipermail/i2p/2005-July/000826.html"
anonlogs="http://i2p/Nf3ab-ZFkmI-LyMt7GjgT-jfvZ3zKDl0L96pmGQXF1B82W2Bfjf0n7~288vafocjFLnQnVcmZd~-p0-Oolfo9aW2Rm-AhyqxnxyLlPBqGxsJBXjPhm1JBT4Ia8FB-VXt0BuY0fMKdAfWwN61-tj4zIcQWRxv3DFquwEf035K~Ra4SWOqiuJgTRJu7~o~DzHVljVgWIzwf8Z84cz0X33pv-mdG~~y0Bsc2qJVnYwjjR178YMcRSmNE0FVMcs6f17c6zqhMw-11qjKpY~EJfHYCx4lBWF37CD0obbWqTNUIbL~78vxqZRT3dgAgnLixog9nqTO-0Rh~NpVUZnoUi7fNR~awW5U3Cf7rU7nNEKKobLue78hjvRcWn7upHUF45QqTDuaM3yZa7OsjbcH-I909DOub2Q0Dno6vIwuA7yrysccN1sbnkwZbKlf4T6~iDdhaSLJd97QCyPOlbyUfYy9QLNExlRqKgNVJcMJRrIual~Lb1CLbnzt0uvobM57UpqSAAAA/meeting141"
publiclogs="http://www.i2p.net/meeting141" />
<h4><ul><li>2009-10-18: Website &amp; Console Translation - Help Needed!</li></ul></h4>
<p> <p>
Shortly after the release of <a href="http://www.i2p2.i2p/release-0.7.7.html">I2P version 0.7.7</a>, we are happy to announce the first stage of the <a href="http://i2p2.i2p/index_zh.html">Chinese translation</a> of the <a href="http://www.i2p2.i2p">website</a>, thanks to our new Chinese translator, "walking". This we hope is the start of a bigger trend to get the website and console translated into YOUR language. Please visit the #i2p chat channel on <a href="irc://irc.freenode.net/i2p"> Freenode IRC</a> or anonymously over I2P via <a href="irc://127.0.0.1:6668/i2p">localhost:6668</a> if you wish to help. We appeal at this time especially to French and Spanish translators, since we seem to have plenty of you running I2P!</p> The 9th I2P release for 2009,
0.7.8, contains initial support for router console translations, and
<h4><ul><li>2009-10-12: <b>0.7.7 <a href="http://www.i2p2.i2p/release-0.7.7.html">Released</a></b></li></ul></h4> changes to the floodfill system which lay the foundation for supporting large growth in the network.
<p>
I2P version 0.7.7 contains several anonymity improvements.
The use of session keys for crypto was completely reworked,
and <a href="/i2psnark">I2PSnark</a> now uses its own tunnels for tracker communication.
Work continues on improving the router console,
including conformance to HTML standards, better support of UTF-8, and dr|z3d's ongoing
<a href="/configui.jsp">console theme</a> wizardry, including an extensively
reworked "classic" theme optimized for less capable computers or browsers.
</p><p> </p><p>
Work also continues on increasing speeds, both by reducing the To prevent easy blocking of I2P by malicious firewalls, the release randomizes the I2P port for new installs.
number of session keys transferred, by improving the For existing installs, please help those who are vulnerable to blocking by changing UDP to a random port on
methods of dropping messages during overload, and by reducing <a href="config.jsp">the network configuration page</a>
drops by high-bandwidth routers. and adjusting your firewall if necessary.
There is a new <a href="/configupdate.jsp">unsigned update option</a> Say goodbye to port 8887!
for those of you that would like automatic updates to bleeding-edge development versions.
</p><p> </p><p>
The release also contains several changes to reduce memory and CPU usage, The release also contains more changes to reduce memory and CPU usage,
and a large assortment of bug fixes. and a large assortment of bug fixes.
Upgrading is recommended. Upgrading is recommended.
We especially encourage those of you still running release 0.7.6 or earlier to upgrade as soon as possible.
Please give the Please give the
developers feedback on IRC #i2p or <a href="http://forum.i2p">forum.i2p</a> developers feedback on IRC #i2p or <a href="http://forum.i2p">forum.i2p</a>
and <a href="http://www.i2p2.i2p/getinvolved.html">get involved</a>! and <a href="http://www.i2p2.i2p/getinvolved.html">get involved</a>
or <a href="http://www.i2p2.i2p/donate.html">donate</a>!
We are also looking for help on new and existing translations.
Please volunteer on IRC #i2p.
</p> </p>
</i2p.news> </i2p.news>

View File

@ -21,4 +21,4 @@ Proxy-Connection: close
或您的路由器在网络中的整合度不佳。 或您的路由器在网络中的整合度不佳。
你可以尝试 你可以尝试
<a href="javascript: window.location.reload()">重试</a>。 <a href="javascript: window.location.reload()">重试</a>。
<hr><b>找不到下目标:</b><BR><BR> <hr><b>找不到下目标:</b><BR><BR>

View File

@ -4,6 +4,7 @@
<a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a>
<a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a>
<a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a>
<a href="/index.jsp?lang=ru"><img src="/flags.jsp?c=ru" title="Русский" alt="Русский"></a>
<a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div> </div>
<div class="welcome"><h2>Welcome to I2P!</h2></div> <div class="welcome"><h2>Welcome to I2P!</h2></div>

View File

@ -1,5 +1,5 @@
<div align="right"> <div align="right">
<div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div> <div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=ru"><img src="/flags.jsp?c=ru" title="Русский" alt="Русский"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div> </div>
<div class="welcome"><h2>Willkommen zu I2P!</h2></div> <div class="welcome"><h2>Willkommen zu I2P!</h2></div>
<p>Wenn Du gerade I2P gestartet hast, sollten die "Active:" Zahlen links in den n&auml;chsten paar Minuten anwachsen und Du siehst dann dort ein "shared clients" lokales Ziel gelistet (falls nicht, <a href="#trouble">siehe Unten</a>). Sobald das erscheint, kannst Du:</p> <p>Wenn Du gerade I2P gestartet hast, sollten die "Active:" Zahlen links in den n&auml;chsten paar Minuten anwachsen und Du siehst dann dort ein "shared clients" lokales Ziel gelistet (falls nicht, <a href="#trouble">siehe Unten</a>). Sobald das erscheint, kannst Du:</p>

View File

@ -1,5 +1,5 @@
<div align="right"> <div align="right">
<div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div> <div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=ru"><img src="/flags.jsp?c=ru" title="Русский" alt="Русский"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div> </div>
<div class="welcome"><h2>Bienvenu a I2P!</h2></div> <div class="welcome"><h2>Bienvenu a I2P!</h2></div>
<p>Si vous venez juste de lancer I2P, les chiffres sur la gauche &agrave; cot&eacute; de Active devraient commencer &agrave; augmenter dans les prochaines minutes et vous verrez un "Shared client" en destination locale list&eacute;s sur la gauche (si non, <a href=#trouble>voir plus bas</a>). Une fois qu'ils apparaissent, vous pouvez:</p> <p>Si vous venez juste de lancer I2P, les chiffres sur la gauche &agrave; cot&eacute; de Active devraient commencer &agrave; augmenter dans les prochaines minutes et vous verrez un "Shared client" en destination locale list&eacute;s sur la gauche (si non, <a href=#trouble>voir plus bas</a>). Une fois qu'ils apparaissent, vous pouvez:</p>
@ -9,8 +9,8 @@
<li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a> et <li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a> et
<a href="http://perv.i2p/stats.cgi">perv.i2p</a>: listent les eepsites actifs</li> <a href="http://perv.i2p/stats.cgi">perv.i2p</a>: listent les eepsites actifs</li>
<li><a href="http://forum.i2p/">forum.i2p</a>: une connection s&eacute;curis&eacute;e et anonyme vers <a href="http://forum.i2p2.de/">forum.i2p2.de</a></li> <li><a href="http://forum.i2p/">forum.i2p</a>: une connection s&eacute;curis&eacute;e et anonyme vers <a href="http://forum.i2p2.de/">forum.i2p2.de</a></li>
<li><a href="http://www.i2p2.i2p/">www.i2p2.i2p</a> et le miroir <a href="http://i2p-projekt.i2p">i2p-projekt.i2p</a>: <li><a href="http://www.i2p2.i2p/index_fr.html">www.i2p2.i2p</a> et le miroir <a href="http://i2p-projekt.i2p/index_fr.html">i2p-projekt.i2p</a>:
connections s&eacute;curis&eacute;es et anonyme vers <a href="http://www.i2p2.de/">www.i2p2.de</a></li> connections s&eacute;curis&eacute;es et anonyme vers <a href="http://www.i2p2.de/index_fr.html">www.i2p2.de</a></li>
<li><a href="http://eepsites.i2p/">eepsites.i2p</a>: un moteur de recherche d'eepsites</li> <li><a href="http://eepsites.i2p/">eepsites.i2p</a>: un moteur de recherche d'eepsites</li>
<li><a href="http://ugha.i2p/">ugha.i2p</a>: l'eepsite d'ugha, un wiki que chaucun peut &eacute;diter ainsi que</li> <li><a href="http://ugha.i2p/">ugha.i2p</a>: l'eepsite d'ugha, un wiki que chaucun peut &eacute;diter ainsi que</li>
<li><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a>: un proxy Freenet 0.5</li> <li><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a>: un proxy Freenet 0.5</li>
@ -38,4 +38,4 @@
<h2><a name="trouble">D&eacute;pannage</a></h2> <h2><a name="trouble">D&eacute;pannage</a></h2>
<p>Soyez patient - i2p peut s'av&eacute;rer lent &agrave; d&eacute;marrer la premi&egrave;re fois car il recherche des pairs. Si, apr&egrave;s 30 minutes, votre Actives: connect&eacute;/r&eacute;cent compte moins de 10 pairs connect&eacute;s, vous devez ouvrir le port 8887 sur votre pare-feu pour avoir une meilleure connection. Si vous ne pouvez acc&eacute;der &agrave; aucun eepsite (m&ecirc;me <a href="http://www.i2p2.i2p/">www.i2p2.i2p</a>), soyez s&ucirc;r que votre navigateur utilise bien le proxy 127.0.0.1 sur le port 4444. Vous pouvez aussi faire part de votre d&eacute;marche sur le <a href="http://www.i2p2.i2p/">site web I2P</a>, poster des message sur le <a href="http://forum.i2p/">forum de discussion</a>, ou passer par #i2p ou #i2p-chat sur IRC sur le serveur <a href="irc://irc.freenode.net/#i2p">irc.freenode.net</a>, irc.postman.i2p ou irc.freshcoffee.i2p (ils sont li&eacute;s).</p><hr /> <p>Soyez patient - i2p peut s'av&eacute;rer lent &agrave; d&eacute;marrer la premi&egrave;re fois car il recherche des pairs. Si, apr&egrave;s 30 minutes, votre Actives: connect&eacute;/r&eacute;cent compte moins de 10 pairs connect&eacute;s, vous devez ouvrir le port 8887 sur votre pare-feu pour avoir une meilleure connection. Si vous ne pouvez acc&eacute;der &agrave; aucun eepsite (m&ecirc;me <a href="http://www.i2p2.i2p/index_fr.html">www.i2p2.i2p</a>), soyez s&ucirc;r que votre navigateur utilise bien le proxy 127.0.0.1 sur le port 4444. Vous pouvez aussi faire part de votre d&eacute;marche sur le <a href="http://www.i2p2.i2p/index_fr.html">site web I2P</a>, poster des message sur le <a href="http://forum.i2p/">forum de discussion</a>, ou passer par #i2p ou #i2p-chat sur IRC sur le serveur <a href="irc://irc.freenode.net/#i2p">irc.freenode.net</a>, irc.postman.i2p ou irc.freshcoffee.i2p (ils sont li&eacute;s).</p><hr />

View File

@ -1,5 +1,5 @@
<div align="right"> <div align="right">
<div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div> <div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=ru"><img src="/flags.jsp?c=ru" title="Русский" alt="Русский"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div> </div>
<div class="welcome"><h2>Welkom bij I2P!</h2></div> <div class="welcome"><h2>Welkom bij I2P!</h2></div>
<p>Als je net I2P opgestart hebt, zullen de 'Active:' (Actieve) getallen aan de linkerkant in de komende minuten stijgen, en je zal een "Shared clients" (Gedeelde clients) lokale bestemming zien staan aan de linkerkant (indien niet, <a href=#trouble>zie hieronder</a>). Eenmaal je deze bestemming ziet, kan je:</p> <p>Als je net I2P opgestart hebt, zullen de 'Active:' (Actieve) getallen aan de linkerkant in de komende minuten stijgen, en je zal een "Shared clients" (Gedeelde clients) lokale bestemming zien staan aan de linkerkant (indien niet, <a href=#trouble>zie hieronder</a>). Eenmaal je deze bestemming ziet, kan je:</p>

View File

@ -0,0 +1,63 @@
<div align="right">
<div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a>
<a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a>
<a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a>
<a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a>
<a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a>
<a href="/index.jsp?lang=ru"><img src="/flags.jsp?c=ru" title="Русский" alt="Русский"></a>
<a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div>
<div class="welcome"><h2>Добро пожаловать в I2P!</h2></div>
<p>Когда Вы запускаете I2P впервые — числа в графе «Active» (слева) начнут расти постепенно, это может занять несколько минут. Затем в списке «Local Destinations» появится запись «shared clients» (если этого не случилось, <a href="#trouble">см. «устранение неполадок»</a>).
<p>После появления записи «shared clients» Вы можете:</p>
<ul>
<li><b>Просматривать I2P-сайты</b> (веб-сайты хостящиеся анонимно внутри I2P сети). Для этого настройте в Вашем браузере <b>HTTP прокси-сервер 127.0.0.1 порт 4444</b>. С этими настройками попробуйте зайти на I2P-сайты по ссылкам ниже:<br>
<ul class="links">
<li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a> и <a href="http://perv.i2p/stats.cgi">perv.i2p</a> — автоматически обновляющиеся списки активных I2P-сайтов</li>
<li><a href="http://forum.i2p/">forum.i2p</a> — безопасное и анонимное зеркало для форума <a href="http://forum.i2p2.de/">forum.i2p2.de</a></li>
<li><a href="http://www.i2p2.i2p/">www.i2p2.i2p</a> или <a href="http://i2p-projekt.i2p">i2p-projekt.i2p</a> — безопасное и анонимное зеркало для <a href="http://www.i2p2.de/">www.i2p2.de</a></li>
<li><a href="http://eepsites.i2p/">eepsites.i2p</a> — анонимная поисковая система по I2P-сайтам</li>
<li><a href="http://ugha.i2p/">ugha.i2p</a> — I2P-вики, которую может редактировать любой пользователь, плюс множество ссылок</li>
<li><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a> — Freenet-прокси</li>
<li><a href="http://echelon.i2p">echelon.i2p</a> — архив программного обеспечения для I2P</li>
<li><a href="http://paste.i2p2.i2p">paste.i2p2.i2p</a> — анонимный pastebin-сервис</li>
</ul><br>
Существует множество других I2P-сайтов — пройдитесь по этому списку, добавьте в свои закладки всё, что Вам понравится. Возвращайтесь почаще!
</li><br />
<li class="tidylist"><b>Анонимно просматривать обычные веб-сайты</b> — в I2P по умолчанию настроен глобальный анонимный «внешний прокси» («Outproxy»), через который будут перенаправляться Ваши запросы к http-серверам обычного интернета. (При необходимости Вы можете отключить эту функцию в свойствах i2p-туннеля <a href="/i2ptunnel/">«eepProxy»</a>)</li>
<li class="tidylist"><b>Передавать файлы</b> — для этого есть встроенный <a href="/i2psnark">порт</a> BitTorrent-клиента <a href="http://www.klomp.org/snark/">Snark</a>.</li>
<li class="tidylist"><b>Пользоваться анонимной почтой</b> — спасибо postman-у за создание почтовой системы <a href="http://hq.postman.i2p/">hq.postman.i2p</a> совместимой с обычными почтовыми клиентами (через протоколы POP3/SMTP). С её помощью можно обмениваться почтой как внутри I2P, так и с адресами обычного интернета. Мы также предлагаем попробовать <a href="/susimail/susimail">Susimail</a> — встроенный почтовый клиент с веб-интерфейсом, уже настроенный на работу с сервером postman-а, вам лишь остается создать аккаунт.</li>
<li class="tidylist"><b>Общаться в анонимных чатах</b> — запустите любой удобный для Вас IRC-клиент и подключитесь к серверу <b>127.0.0.1 порт 6668</b>. По этому адресу расположен вход на два анонимно хостящихся IRC-сервера. Ваше реальное местоположение будет скрыто как от сервера, так и от других пользователей.
<li class="tidylist"><b>Вести анонимный блог</b> — попробуйте <a href="http://syndie.i2p2.de/">Syndie</a></li>
<li class="tidylist">и многое другое</li>
</ul>
<h2>Хотите завести собственный I2P-сайт?</h2>
<p>Для этого в I2P есть встроенный http-сервер <a href="http://jetty.mortbay.org/">Jetty</a> работающий по адресу <a href="http://127.0.0.1:7658/">http://127.0.0.1:7658/</a>.
Просто поместите свои файлы в директорию <code>eepsite/docroot/</code> (<code>.war</code>-файлы JSP/сервлетов в директорию <code>eepsite/webapps/</code>, а CGI-скрипты в директорию <code>eepsite/cgi-bin/</code>).
После этого достаточно запустить i2p-туннель <a href="/i2ptunnel/">«eepsite tunnel»</a>, указывающий на Ваш сайт, и он станет доступным для других пользователей.</p>
<p>Подробную пошаговую инструкцию Вы можете найти на <a href="http://127.0.0.1:7658/">временной страничке-заготовке Вашего сайта</a>.</ps>
<h2><a name="trouble">Поиск и устранение неполадок</a></h2>
<p>Наберитесь терпения — первый старт I2P может занять до получаса из-за начального поиска пиров.
<p>Если через 30 минут в графе «Active» все еще меньше 10 подсоединенных пиров, то для повышения качества соединения Вам нужно открыть порт для I2P на Вашем файерволе или роутере (по умолчанию I2P использует порт 8887).</p>
<p>Если Вы не можете соединиться ни с одним I2P-сайтом (даже <a href="http://www.i2p2.i2p/">www.i2p2.i2p</a>), проверьте, включен ли в Вашем браузере HTTP-прокси 127.0.0.1 порт 4444.</p>
<p>Кроме того, Вам может пригодиться справочная информация на <a href="http://www.i2p2.de/">сайте I2P</a>. Не стесняйтесь задать интересующие вас вопросы на <a href="http://forum.i2p2.de/">форуме I2P</a> или на IRC каналах #i2p и #i2p-chat на серверах <a href="irc://irc.freenode.net/#i2p">irc.freenode.net</a>, irc.postman.i2p или irc.freshcoffee.i2p (последние два объединены в одну сеть, а на freenode работает бот-ретранслятор).</p>
<hr>

View File

@ -1,5 +1,5 @@
<div align="right"> <div align="right">
<div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div> <div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="Chinese" alt="Chinese"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=ru"><img src="/flags.jsp?c=ru" title="Русский" alt="Русский"></a> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div> </div>
<div class="welcome"><h2>Welcome to I2P!</h2></div> <div class="welcome"><h2>Welcome to I2P!</h2></div>
<p>Om du just har startat I2P kommer de "Aktiva: #/#" b&ouml;rja &ouml;ka inom <p>Om du just har startat I2P kommer de "Aktiva: #/#" b&ouml;rja &ouml;ka inom

View File

@ -4,6 +4,7 @@
<a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a> <a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a>
<a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a>
<a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a>
<a href="/index.jsp?lang=ru"><img src="/flags.jsp?c=ru" title="Русский" alt="Русский"></a>
<a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div> </div>
<div class="welcome"><h2>欢迎使用 I2P!</h2></div> <div class="welcome"><h2>欢迎使用 I2P!</h2></div>
@ -12,7 +13,7 @@
<li><B>浏览 I2P 站点 "eepsites"</B> - I2P 网络内匿名运行的小站 - 您要首先设置浏览器的 <b>HTTP 代理</b> 为 127.0.0.1:4444 然后才能浏览 I2P 站点 - <ul class="links"> <li><B>浏览 I2P 站点 "eepsites"</B> - I2P 网络内匿名运行的小站 - 您要首先设置浏览器的 <b>HTTP 代理</b> 为 127.0.0.1:4444 然后才能浏览 I2P 站点 - <ul class="links">
<li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a><a href="http://perv.i2p/stats.cgi">perv.i2p</a>:&nbsp;这两个站点用于跟踪哪些 I2P 站点在线。</li> <li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a><a href="http://perv.i2p/stats.cgi">perv.i2p</a>:&nbsp;这两个站点用于跟踪哪些 I2P 站点在线。</li>
<li><a href="http://forum.i2p/">forum.i2p</a>:I2P官方论坛 <a href="http://forum.i2p2.de/">forum.i2p2.de</a>&nbsp;的匿名入口&nbsp;(个人的I2P站点会在论坛的EEPSITE讨论区发布)</li> <li><a href="http://forum.i2p/">forum.i2p</a>:I2P官方论坛 <a href="http://forum.i2p2.de/">forum.i2p2.de</a>&nbsp;的匿名入口&nbsp;(个人的I2P站点会在论坛的EEPSITE讨论区发布)</li>
<li><a href="http://www.i2p2.i2p/">www.i2p2.i2p</a> 与镜像 <a href="http://i2p-projekt.i2p/">i2p-projekt.i2p</a>:&nbsp;可以安全匿名的访问I2P官网 <a href="http://www.i2p2.de/">www.i2p2.de</a></li> <li><a href="http://www.i2p2.i2p/index_zh.html">www.i2p2.i2p</a> 与镜像 <a href="http://i2p-projekt.i2p/index_zh.html">i2p-projekt.i2p</a>:&nbsp;可以安全匿名的访问I2P官网 <a href="http://www.i2p2.de/index_zh.html">www.i2p2.de</a></li>
<li><a href="http://eepsites.i2p/">eepsites.i2p</a>:&nbsp;I2P网络里的 “Google” 可以用来搜索各个匿名小站</li> <li><a href="http://eepsites.i2p/">eepsites.i2p</a>:&nbsp;I2P网络里的 “Google” 可以用来搜索各个匿名小站</li>
<li><a href="http://ugha.i2p/">ugha.i2p</a>:UGHA 的 I2P 小站任何人都可以编辑的WIKI有丰富的链接</li> <li><a href="http://ugha.i2p/">ugha.i2p</a>:UGHA 的 I2P 小站任何人都可以编辑的WIKI有丰富的链接</li>
<li><a href="http://fproxy.tino.i2p/">fproxy.tino.i2p</a>:FREENET 代理</li> <li><a href="http://fproxy.tino.i2p/">fproxy.tino.i2p</a>:FREENET 代理</li>
@ -34,4 +35,4 @@
<h2><a name="trouble">疑难解答</a></h2> <h2><a name="trouble">疑难解答</a></h2>
<p>保持耐心 - I2P 第一次启动时需要搜索节点可能比较缓慢。如果30分钟后您的活动节点计数仍在 10 个节点以下, 请在防火墙中打开 8887 端口改善连接性能。如果您根本无法打开任何EEPSITE(甚至 <a href="http://www.i2p2.i2p/">www.i2p2.i2p</a>),检查您的浏览器代理设置是否为本地的 127.0.0.1:4444。你也可以到&nbsp;<a href="http://www.i2p2.i2p/">I2P 网站</a>&nbsp;查找信息, 在 <a href="http://forum.i2p2.de/">I2P 论坛</a> 中发帖, 来 <a href="irc://irc.freenode.net/#i2p">irc.freenode.net</a> , irc.postman.i2p 或 irc.freshcoffee.i2p 上的 #i2p 或 #i2p-chat 这两个 IRC 频道上询问。 (这些服务器上的这两个频道是相通的)。</p><hr> <p>保持耐心 - I2P 第一次启动时需要搜索节点可能比较缓慢。如果30分钟后您的活动节点计数仍在 10 个节点以下, 请在防火墙中打开 8887 端口改善连接性能。如果您根本无法打开任何EEPSITE(甚至 <a href="http://www.i2p2.i2p/index_zh.html">www.i2p2.i2p</a>),检查您的浏览器代理设置是否为本地的 127.0.0.1:4444。你也可以到&nbsp;<a href="http://www.i2p2.i2p/index_zh.html">I2P 网站</a>&nbsp;查找信息, 在 <a href="http://forum.i2p2.de/">I2P 论坛</a> 中发帖, 来 <a href="irc://irc.freenode.net/#i2p">irc.freenode.net</a> , irc.postman.i2p 或 irc.freshcoffee.i2p 上的 #i2p 或 #i2p-chat 这两个 IRC 频道上询问。 (这些服务器上的这两个频道是相通的)。</p><hr>

View File

@ -724,7 +724,7 @@ button:active {
padding: 7px 10px 5px 10px; padding: 7px 10px 5px 10px;
color: #eef; color: #eef;
font-size: 7pt; font-size: 7pt;
width: 140px; width: 220px;
text-align: right; text-align: right;
float: right; float: right;
vertical-align: middle; vertical-align: middle;

View File

@ -723,8 +723,8 @@ button:active{
padding: 5px 5px; padding: 5px 5px;
color: #001; color: #001;
font-size: 7pt; font-size: 7pt;
width: 120px; width: 220px;
text-align: center; text-align: right;
float: right; float: right;
valign: middle; valign: middle;
} }

View File

@ -47,7 +47,7 @@ div.logo hr {
background: #99f; background: #99f;
height: 1px; height: 1px;
border: 0px solid #99f; border: 0px solid #99f;
margin: 8px -3px; margin: 8px -5px;
} }
div.logo a:link, div.logo a:visited { div.logo a:link, div.logo a:visited {
@ -103,7 +103,7 @@ div.warning hr {
background: #fb7; background: #fb7;
height: 1px; height: 1px;
border: 0px solid #fb7; border: 0px solid #fb7;
margin: 10px 0 5px 0; margin: 10px 0;
} }
div.warning h3 { div.warning h3 {
@ -114,6 +114,7 @@ div.warning h3 {
font-variant: small-caps; font-variant: small-caps;
text-transform: capitalize; text-transform: capitalize;
font-size: 12.5pt; font-size: 12.5pt;
background: none;
} }
/* console error messages */ /* console error messages */
@ -220,7 +221,7 @@ div.routersummary table {
border: 0; border: 0;
text-align: center !important; text-align: center !important;
margin: -5px 0px -5px 2px; margin: -5px 0px -5px 2px;
width: 185px !important; width: 186px !important;
overflow: hidden; overflow: hidden;
font-size: 8pt; font-size: 8pt;
padding: 0 -12px; padding: 0 -12px;
@ -257,6 +258,7 @@ div.tunnels table{
width: 16px; width: 16px;
text-align: right; text-align: right;
margin-right: -2px; margin-right: -2px;
padding-right: 0;
} }
div.routersummary form { div.routersummary form {
@ -861,3 +863,11 @@ div.graphspanel h3 {
table code { table code {
font-size: 8.5pt; font-size: 8.5pt;
} }
table li:last-child{
margin-bottom: 15px;
}
table ul {
font-size: 8.5pt;
}

View File

@ -18,7 +18,7 @@ public class RouterVersion {
/** deprecated */ /** deprecated */
public final static String ID = "Monotone"; public final static String ID = "Monotone";
public final static String VERSION = CoreVersion.VERSION; public final static String VERSION = CoreVersion.VERSION;
public final static long BUILD = 21; public final static long BUILD = 1;
/** for example "-test" */ /** for example "-test" */
public final static String EXTRA = ""; public final static String EXTRA = "";
public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA; public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA;

View File

@ -42,7 +42,7 @@ public class FIFOBandwidthRefiller implements Runnable {
* adjusting bandwidth class boundaries. * adjusting bandwidth class boundaries.
*/ */
public static final int DEFAULT_OUTBOUND_BANDWIDTH = 40; public static final int DEFAULT_OUTBOUND_BANDWIDTH = 40;
public static final int DEFAULT_INBOUND_BURST_BANDWIDTH = 80; public static final int DEFAULT_INBOUND_BURST_BANDWIDTH = 96;
public static final int DEFAULT_OUTBOUND_BURST_BANDWIDTH = 40; public static final int DEFAULT_OUTBOUND_BURST_BANDWIDTH = 40;
public static final int DEFAULT_BURST_SECONDS = 60; public static final int DEFAULT_BURST_SECONDS = 60;

View File

@ -46,7 +46,7 @@ public class InboundEstablishState {
// general status // general status
private long _establishBegin; private long _establishBegin;
private long _lastReceive; private long _lastReceive;
private long _lastSend; // private long _lastSend;
private long _nextSend; private long _nextSend;
private RemoteHostId _remoteHostId; private RemoteHostId _remoteHostId;
private int _currentState; private int _currentState;
@ -129,6 +129,7 @@ public class InboundEstablishState {
public synchronized byte[] getSentY() { public synchronized byte[] getSentY() {
if (_sentY == null) if (_sentY == null)
// Rare NPE seen here...
_sentY = _keyBuilder.getMyPublicValueBytes(); _sentY = _keyBuilder.getMyPublicValueBytes();
return _sentY; return _sentY;
} }
@ -198,7 +199,7 @@ public class InboundEstablishState {
/** note that we just sent a SessionCreated packet */ /** note that we just sent a SessionCreated packet */
public synchronized void createdPacketSent() { public synchronized void createdPacketSent() {
_lastSend = _context.clock().now(); // _lastSend = _context.clock().now();
if ( (_currentState == STATE_UNKNOWN) || (_currentState == STATE_REQUEST_RECEIVED) ) if ( (_currentState == STATE_UNKNOWN) || (_currentState == STATE_REQUEST_RECEIVED) )
_currentState = STATE_CREATED_SENT; _currentState = STATE_CREATED_SENT;
} }
@ -210,8 +211,7 @@ public class InboundEstablishState {
public synchronized void setNextSendTime(long when) { _nextSend = when; } public synchronized void setNextSendTime(long when) { _nextSend = when; }
/** RemoteHostId, uniquely identifies an attempt */ /** RemoteHostId, uniquely identifies an attempt */
// FIXME Exporting non-public type through public API FIXME RemoteHostId getRemoteHostId() { return _remoteHostId; }
public RemoteHostId getRemoteHostId() { return _remoteHostId; }
public synchronized void receiveSessionConfirmed(UDPPacketReader.SessionConfirmedReader conf) { public synchronized void receiveSessionConfirmed(UDPPacketReader.SessionConfirmedReader conf) {
if (_receivedIdentity == null) if (_receivedIdentity == null)

View File

@ -157,8 +157,7 @@ public class IntroductionManager {
return found; return found;
} }
/* FIXME Exporting non-public type through public API FIXME */ void receiveRelayIntro(RemoteHostId bob, UDPPacketReader reader) {
public void receiveRelayIntro(RemoteHostId bob, UDPPacketReader reader) {
if (_context.router().isHidden()) if (_context.router().isHidden())
return; return;
if (_log.shouldLog(Log.INFO)) if (_log.shouldLog(Log.INFO))
@ -167,8 +166,7 @@ public class IntroductionManager {
_transport.send(_builder.buildHolePunch(reader)); _transport.send(_builder.buildHolePunch(reader));
} }
/* FIXME Exporting non-public type through public API FIXME */ void receiveRelayRequest(RemoteHostId alice, UDPPacketReader reader) {
public void receiveRelayRequest(RemoteHostId alice, UDPPacketReader reader) {
if (_context.router().isHidden()) if (_context.router().isHidden())
return; return;
long tag = reader.getRelayRequestReader().readTag(); long tag = reader.getRelayRequestReader().readTag();

View File

@ -413,8 +413,7 @@ public class OutboundEstablishState {
} }
/** uniquely identifies an attempt */ /** uniquely identifies an attempt */
/* FIXME Exporting non-public type through public API FIXME */ RemoteHostId getRemoteHostId() { return _remoteHostId; }
public RemoteHostId getRemoteHostId() { return _remoteHostId; }
/** we have received a real data packet, so we're done establishing */ /** we have received a real data packet, so we're done establishing */
public synchronized void dataReceived() { public synchronized void dataReceived() {

View File

@ -26,7 +26,7 @@ public class OutboundMessageFragments {
private RouterContext _context; private RouterContext _context;
private Log _log; private Log _log;
private UDPTransport _transport; private UDPTransport _transport;
private ActiveThrottle _throttle; // LINT not used ?? // private ActiveThrottle _throttle; // LINT not used ??
/** peers we are actively sending messages to */ /** peers we are actively sending messages to */
private final List _activePeers; private final List _activePeers;
private boolean _alive; private boolean _alive;
@ -34,8 +34,8 @@ public class OutboundMessageFragments {
private int _nextPeer; private int _nextPeer;
private PacketBuilder _builder; private PacketBuilder _builder;
/** if we can handle more messages explicitly, set this to true */ /** if we can handle more messages explicitly, set this to true */
private boolean _allowExcess; // LINT not used?? // private boolean _allowExcess; // LINT not used??
private volatile long _packetsRetransmitted; // LINT not used?? // private volatile long _packetsRetransmitted; // LINT not used??
// private static final int MAX_ACTIVE = 64; // not used. // private static final int MAX_ACTIVE = 64; // not used.
// don't send a packet more than 10 times // don't send a packet more than 10 times
@ -45,12 +45,12 @@ public class OutboundMessageFragments {
_context = ctx; _context = ctx;
_log = ctx.logManager().getLog(OutboundMessageFragments.class); _log = ctx.logManager().getLog(OutboundMessageFragments.class);
_transport = transport; _transport = transport;
_throttle = throttle; // _throttle = throttle;
_activePeers = new ArrayList(256); _activePeers = new ArrayList(256);
_nextPeer = 0; _nextPeer = 0;
_builder = new PacketBuilder(ctx, transport); _builder = new PacketBuilder(ctx, transport);
_alive = true; _alive = true;
_allowExcess = false; // _allowExcess = false;
_context.statManager().createRateStat("udp.sendVolleyTime", "Long it takes to send a full volley", "udp", UDPTransport.RATES); _context.statManager().createRateStat("udp.sendVolleyTime", "Long it takes to send a full volley", "udp", UDPTransport.RATES);
_context.statManager().createRateStat("udp.sendConfirmTime", "How long it takes to send a message and get the ACK", "udp", UDPTransport.RATES); _context.statManager().createRateStat("udp.sendConfirmTime", "How long it takes to send a message and get the ACK", "udp", UDPTransport.RATES);
_context.statManager().createRateStat("udp.sendConfirmFragments", "How many fragments are included in a fully ACKed message", "udp", UDPTransport.RATES); _context.statManager().createRateStat("udp.sendConfirmFragments", "How many fragments are included in a fully ACKed message", "udp", UDPTransport.RATES);
@ -376,7 +376,7 @@ public class OutboundMessageFragments {
if (state.getPushCount() > 1) { if (state.getPushCount() > 1) {
int toSend = fragments-sparseCount; int toSend = fragments-sparseCount;
peer.messageRetransmitted(toSend); peer.messageRetransmitted(toSend);
_packetsRetransmitted += toSend; // lifetime for the transport // _packetsRetransmitted += toSend; // lifetime for the transport
_context.statManager().addRateData("udp.peerPacketsRetransmitted", peer.getPacketsRetransmitted(), peer.getPacketsTransmitted()); _context.statManager().addRateData("udp.peerPacketsRetransmitted", peer.getPacketsRetransmitted(), peer.getPacketsTransmitted());
_context.statManager().addRateData("udp.packetsRetransmitted", state.getLifetime(), peer.getPacketsTransmitted()); _context.statManager().addRateData("udp.packetsRetransmitted", state.getLifetime(), peer.getPacketsTransmitted());
if (_log.shouldLog(Log.INFO)) if (_log.shouldLog(Log.INFO))

View File

@ -32,7 +32,7 @@ public class OutboundMessageState {
private long _nextSendTime; private long _nextSendTime;
private int _pushCount; private int _pushCount;
private short _maxSends; private short _maxSends;
private int _nextSendFragment; // private int _nextSendFragment;
public static final int MAX_MSG_SIZE = 32 * 1024; public static final int MAX_MSG_SIZE = 32 * 1024;
/** is this enough for a high-bandwidth router? */ /** is this enough for a high-bandwidth router? */
@ -45,7 +45,7 @@ public class OutboundMessageState {
_log = _context.logManager().getLog(OutboundMessageState.class); _log = _context.logManager().getLog(OutboundMessageState.class);
_pushCount = 0; _pushCount = 0;
_maxSends = 0; _maxSends = 0;
_nextSendFragment = 0; // _nextSendFragment = 0;
} }
public boolean initialize(OutNetMessage msg) { public boolean initialize(OutNetMessage msg) {

View File

@ -16,14 +16,14 @@ public class OutboundRefiller implements Runnable {
private OutboundMessageFragments _fragments; private OutboundMessageFragments _fragments;
private MessageQueue _messages; private MessageQueue _messages;
private boolean _alive; private boolean _alive;
private Object _refillLock; // private Object _refillLock;
public OutboundRefiller(RouterContext ctx, OutboundMessageFragments fragments, MessageQueue messages) { public OutboundRefiller(RouterContext ctx, OutboundMessageFragments fragments, MessageQueue messages) {
_context = ctx; _context = ctx;
_log = ctx.logManager().getLog(OutboundRefiller.class); _log = ctx.logManager().getLog(OutboundRefiller.class);
_fragments = fragments; _fragments = fragments;
_messages = messages; _messages = messages;
_refillLock = this; // _refillLock = this;
_context.statManager().createRateStat("udp.timeToActive", "Message lifetime until it reaches the outbound fragment queue", "udp", UDPTransport.RATES); _context.statManager().createRateStat("udp.timeToActive", "Message lifetime until it reaches the outbound fragment queue", "udp", UDPTransport.RATES);
} }

View File

@ -879,8 +879,7 @@ public class PacketBuilder {
*/ */
private static final byte PEER_RELAY_INTRO_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_RELAY_INTRO << 4); private static final byte PEER_RELAY_INTRO_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_RELAY_INTRO << 4);
/* FIXME Exporting non-public type through public API FIXME */ UDPPacket buildRelayIntro(RemoteHostId alice, PeerState charlie, UDPPacketReader.RelayRequestReader request) {
public UDPPacket buildRelayIntro(RemoteHostId alice, PeerState charlie, UDPPacketReader.RelayRequestReader request) {
UDPPacket packet = UDPPacket.acquire(_context, false); UDPPacket packet = UDPPacket.acquire(_context, false);
byte data[] = packet.getPacket().getData(); byte data[] = packet.getPacket().getData();
Arrays.fill(data, 0, data.length, (byte)0x0); Arrays.fill(data, 0, data.length, (byte)0x0);
@ -930,8 +929,7 @@ public class PacketBuilder {
*/ */
private static final byte PEER_RELAY_RESPONSE_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_RELAY_RESPONSE << 4); private static final byte PEER_RELAY_RESPONSE_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_RELAY_RESPONSE << 4);
/* FIXME Exporting non-public type through public API FIXME */ UDPPacket buildRelayResponse(RemoteHostId alice, PeerState charlie, long nonce, SessionKey aliceIntroKey) {
public UDPPacket buildRelayResponse(RemoteHostId alice, PeerState charlie, long nonce, SessionKey aliceIntroKey) {
InetAddress aliceAddr = null; InetAddress aliceAddr = null;
try { try {
aliceAddr = InetAddress.getByAddress(alice.getIP()); aliceAddr = InetAddress.getByAddress(alice.getIP());

View File

@ -36,8 +36,7 @@ public class PacketHandler {
/** let packets be up to 30s slow */ /** let packets be up to 30s slow */
private static final long GRACE_PERIOD = Router.CLOCK_FUDGE_FACTOR + 30*1000; private static final long GRACE_PERIOD = Router.CLOCK_FUDGE_FACTOR + 30*1000;
/* FIXME Exporting non-public type through public API FIXME */ PacketHandler(RouterContext ctx, UDPTransport transport, UDPEndpoint endpoint, EstablishmentManager establisher, InboundMessageFragments inbound, PeerTestManager testManager, IntroductionManager introManager) {// LINT -- Exporting non-public type through public API
public PacketHandler(RouterContext ctx, UDPTransport transport, UDPEndpoint endpoint, EstablishmentManager establisher, InboundMessageFragments inbound, PeerTestManager testManager, IntroductionManager introManager) {// LINT -- Exporting non-public type through public API
_context = ctx; _context = ctx;
_log = ctx.logManager().getLog(PacketHandler.class); _log = ctx.logManager().getLog(PacketHandler.class);
_transport = transport; _transport = transport;

View File

@ -10,14 +10,14 @@ import net.i2p.util.Log;
* *
*/ */
public class PacketPusher implements Runnable { public class PacketPusher implements Runnable {
private RouterContext _context; // private RouterContext _context;
private Log _log; private Log _log;
private OutboundMessageFragments _fragments; private OutboundMessageFragments _fragments;
private UDPSender _sender; private UDPSender _sender;
private boolean _alive; private boolean _alive;
public PacketPusher(RouterContext ctx, OutboundMessageFragments fragments, UDPSender sender) { public PacketPusher(RouterContext ctx, OutboundMessageFragments fragments, UDPSender sender) {
_context = ctx; // _context = ctx;
_log = ctx.logManager().getLog(PacketPusher.class); _log = ctx.logManager().getLog(PacketPusher.class);
_fragments = fragments; _fragments = fragments;
_sender = sender; _sender = sender;

View File

@ -72,7 +72,7 @@ public class PeerState {
/** how many consecutive messages have we sent and not received an ACK to */ /** how many consecutive messages have we sent and not received an ACK to */
private int _consecutiveFailedSends; private int _consecutiveFailedSends;
/** when did we last have a failed send (beginning of period) */ /** when did we last have a failed send (beginning of period) */
private long _lastFailedSendPeriod; // private long _lastFailedSendPeriod;
/** list of messageIds (Long) that we have received but not yet sent */ /** list of messageIds (Long) that we have received but not yet sent */
private final List _currentACKs; private final List _currentACKs;
/** /**
@ -805,7 +805,7 @@ public class PeerState {
_concurrentMessagesActive = 0; _concurrentMessagesActive = 0;
_consecutiveFailedSends = 0; _consecutiveFailedSends = 0;
_lastFailedSendPeriod = -1; // _lastFailedSendPeriod = -1;
if (numSends < 2) { if (numSends < 2) {
if (_context.random().nextInt(_concurrentMessagesAllowed) <= 0) if (_context.random().nextInt(_concurrentMessagesAllowed) <= 0)
_concurrentMessagesAllowed++; _concurrentMessagesAllowed++;
@ -1003,8 +1003,7 @@ public class PeerState {
return MAX_RTO; return MAX_RTO;
} }
/* FIXME Exporting non-public type through public API FIXME */ RemoteHostId getRemoteHostId() { return _remoteHostId; }
public RemoteHostId getRemoteHostId() { return _remoteHostId; }
public int add(OutboundMessageState state) { public int add(OutboundMessageState state) {
if (_dead) { if (_dead) {

View File

@ -4,7 +4,6 @@ import java.net.DatagramSocket;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.SocketException; import java.net.SocketException;
import net.i2p.router.CommSystemFacade;
import net.i2p.router.RouterContext; import net.i2p.router.RouterContext;
import net.i2p.util.Log; import net.i2p.util.Log;

View File

@ -9,14 +9,14 @@ import net.i2p.data.i2np.I2NPMessage;
import net.i2p.router.OutNetMessage; import net.i2p.router.OutNetMessage;
import net.i2p.router.RouterContext; import net.i2p.router.RouterContext;
import net.i2p.util.I2PThread; import net.i2p.util.I2PThread;
import net.i2p.util.Log; // import net.i2p.util.Log;
/** /**
* *
*/ */
class UDPFlooder implements Runnable { class UDPFlooder implements Runnable {
private RouterContext _context; private RouterContext _context;
private Log _log; // private Log _log;
private UDPTransport _transport; private UDPTransport _transport;
private final List _peers; private final List _peers;
private boolean _alive; private boolean _alive;
@ -24,7 +24,7 @@ class UDPFlooder implements Runnable {
public UDPFlooder(RouterContext ctx, UDPTransport transport) { public UDPFlooder(RouterContext ctx, UDPTransport transport) {
_context = ctx; _context = ctx;
_log = ctx.logManager().getLog(UDPFlooder.class); // _log = ctx.logManager().getLog(UDPFlooder.class);
_transport = transport; _transport = transport;
_peers = new ArrayList(4); _peers = new ArrayList(4);
ctx.random().nextBytes(_floodData); ctx.random().nextBytes(_floodData);

View File

@ -38,7 +38,7 @@ public class UDPPacket {
private long _beforeReceiveFragments; private long _beforeReceiveFragments;
private long _afterHandlingTime; private long _afterHandlingTime;
private int _validateCount; private int _validateCount;
private boolean _isInbound; // private boolean _isInbound;
private static final List _packetCache; private static final List _packetCache;
static { static {
@ -83,13 +83,14 @@ public class UDPPacket {
_ivBuf = new byte[IV_SIZE]; _ivBuf = new byte[IV_SIZE];
init(ctx, inbound); init(ctx, inbound);
} }
// FIXME optimization, remove the inbound parameter, as it is unused. FIXME
private void init(I2PAppContext ctx, boolean inbound) { private void init(I2PAppContext ctx, boolean inbound) {
_context = ctx; _context = ctx;
//_dataBuf = _dataCache.acquire(); //_dataBuf = _dataCache.acquire();
Arrays.fill(_data, (byte)0); Arrays.fill(_data, (byte)0);
//_packet = new DatagramPacket(_data, MAX_PACKET_SIZE); //_packet = new DatagramPacket(_data, MAX_PACKET_SIZE);
_packet.setData(_data); _packet.setData(_data);
_isInbound = inbound; // _isInbound = inbound;
_initializeTime = _context.clock().now(); _initializeTime = _context.clock().now();
_markedType = -1; _markedType = -1;
_validateCount = 0; _validateCount = 0;
@ -125,8 +126,7 @@ public class UDPPacket {
int getFragmentCount() { return _fragmentCount; } int getFragmentCount() { return _fragmentCount; }
void setFragmentCount(int count) { _fragmentCount = count; } void setFragmentCount(int count) { _fragmentCount = count; }
// FIXME Exporting non-public type through public API FIXME RemoteHostId getRemoteHost() {
public RemoteHostId getRemoteHost() {
if (_remoteHost == null) { if (_remoteHost == null) {
long before = System.currentTimeMillis(); long before = System.currentTimeMillis();
InetAddress addr = _packet.getAddress(); InetAddress addr = _packet.getAddress();

View File

@ -28,7 +28,7 @@ public class UDPReceiver {
private boolean _keepRunning; private boolean _keepRunning;
private Runner _runner; private Runner _runner;
private UDPTransport _transport; private UDPTransport _transport;
private static int __id; // private static int __id;
private int _id; private int _id;
public UDPReceiver(RouterContext ctx, UDPTransport transport, DatagramSocket socket, String name) { public UDPReceiver(RouterContext ctx, UDPTransport transport, DatagramSocket socket, String name) {

View File

@ -3,7 +3,6 @@ package net.i2p.router.transport.udp;
import java.io.IOException; import java.io.IOException;
import java.io.Writer; import java.io.Writer;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.ArrayList; import java.util.ArrayList;
@ -545,8 +544,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
* get the state for the peer at the given remote host/port, or null * get the state for the peer at the given remote host/port, or null
* if no state exists * if no state exists
*/ */
/* FIXME Exporting non-public type through public API FIXME */ PeerState getPeerState(RemoteHostId hostInfo) {
public PeerState getPeerState(RemoteHostId hostInfo) {
synchronized (_peersByRemoteHost) { synchronized (_peersByRemoteHost) {
return (PeerState)_peersByRemoteHost.get(hostInfo); return (PeerState)_peersByRemoteHost.get(hostInfo);
} }
@ -783,8 +781,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
} }
} }
/* FIXME Exporting non-public type through public API FIXME */ boolean isInDropList(RemoteHostId peer) { synchronized (_dropList) { return _dropList.contains(peer); } }
public boolean isInDropList(RemoteHostId peer) { synchronized (_dropList) { return _dropList.contains(peer); } }
void dropPeer(Hash peer, boolean shouldShitlist, String why) { void dropPeer(Hash peer, boolean shouldShitlist, String why) {
PeerState state = getPeerState(peer); PeerState state = getPeerState(peer);
@ -2235,8 +2232,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
_testEvent.runTest(); _testEvent.runTest();
} }
/* FIXME Exporting non-public type through public API FIXME */ PeerState pickTestPeer(RemoteHostId dontInclude) {
public PeerState pickTestPeer(RemoteHostId dontInclude) {
List peers = null; List peers = null;
synchronized (_peersByIdent) { synchronized (_peersByIdent) {
peers = new ArrayList(_peersByIdent.values()); peers = new ArrayList(_peersByIdent.values());