propagate from branch 'i2p.i2p' (head f672021bb9871a728005be3bd9581710738b9e5f)
to branch 'i2p.i2p.zzz.test' (head e115e218dbb666839e69fa1e1ba7378554b9874f)
This commit is contained in:
@ -2,6 +2,6 @@
|
||||
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
|
||||
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/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>
|
||||
</project-private>
|
||||
|
@ -50,7 +50,7 @@ public class DoCMDS implements Runnable {
|
||||
|
||||
// FIX ME
|
||||
// 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;
|
||||
private Socket server;
|
||||
private Properties props;
|
||||
|
@ -60,20 +60,9 @@ public class I2Plistener implements Runnable {
|
||||
this._log = _log;
|
||||
this.socketManager = S;
|
||||
this.serverSocket = SS;
|
||||
// tgwatch = 1;
|
||||
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
|
||||
*
|
||||
@ -83,34 +72,31 @@ public class I2Plistener implements Runnable {
|
||||
I2PSocket sessSocket = null;
|
||||
int conn = 0;
|
||||
try {
|
||||
die:
|
||||
{
|
||||
try {
|
||||
serverSocket.setSoTimeout(50);
|
||||
|
||||
while (lives.get()) {
|
||||
try {
|
||||
sessSocket = serverSocket.accept();
|
||||
g = true;
|
||||
} catch (ConnectException ce) {
|
||||
g = false;
|
||||
} catch (SocketTimeoutException ste) {
|
||||
g = false;
|
||||
}
|
||||
if (g) {
|
||||
g = false;
|
||||
conn++;
|
||||
// toss the connection to a new thread.
|
||||
I2PtoTCP conn_c = new I2PtoTCP(sessSocket, info, database, lives);
|
||||
Thread t = new Thread(conn_c, Thread.currentThread().getName() + " I2PtoTCP " + conn);
|
||||
t.start();
|
||||
}
|
||||
try {
|
||||
serverSocket.setSoTimeout(50);
|
||||
|
||||
while (lives.get()) {
|
||||
try {
|
||||
sessSocket = serverSocket.accept();
|
||||
g = true;
|
||||
} catch (ConnectException ce) {
|
||||
g = false;
|
||||
} catch (SocketTimeoutException ste) {
|
||||
g = false;
|
||||
}
|
||||
} catch (I2PException e) {
|
||||
// bad shit
|
||||
System.out.println("Exception " + e);
|
||||
if (g) {
|
||||
g = false;
|
||||
conn++;
|
||||
// toss the connection to a new thread.
|
||||
I2PtoTCP conn_c = new I2PtoTCP(sessSocket, info, database, lives);
|
||||
Thread t = new Thread(conn_c, Thread.currentThread().getName() + " I2PtoTCP " + conn);
|
||||
t.start();
|
||||
}
|
||||
|
||||
}
|
||||
} catch (I2PException e) {
|
||||
// bad shit
|
||||
System.out.println("Exception " + e);
|
||||
}
|
||||
} finally {
|
||||
try {
|
||||
|
@ -104,10 +104,10 @@ public class MUXlisten implements Runnable {
|
||||
this.database.releaseReadLock();
|
||||
this.info.releaseReadLock();
|
||||
|
||||
socketManager = I2PSocketManagerFactory.createManager(prikey, Q);
|
||||
if (this.come_in) {
|
||||
this.listener = new ServerSocket(port, backlog, host);
|
||||
}
|
||||
socketManager = I2PSocketManagerFactory.createManager(prikey, Q);
|
||||
// I2PException, IOException, RuntimeException
|
||||
// To bad we can't just catch and enumerate....
|
||||
// } catch (I2PException e) {
|
||||
@ -141,8 +141,6 @@ public class MUXlisten implements Runnable {
|
||||
this.info.add("STARTING", new Boolean(false));
|
||||
this.info.releaseWriteLock();
|
||||
this.database.releaseWriteLock();
|
||||
// throw new Exception(e);
|
||||
// Debugging, I guess.
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
@ -78,16 +78,20 @@ public class TCPio implements Runnable {
|
||||
* --Sponge
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
int b;
|
||||
byte a[] = new byte[1];
|
||||
byte a[] = new byte[8192];
|
||||
try {
|
||||
try {
|
||||
while (lives.get()) {
|
||||
b = Ain.read(a, 0, 1);
|
||||
b = Ain.read(a, 0, 8192);
|
||||
if (b > 0) {
|
||||
Aout.write(a, 0, b);
|
||||
} else if (b == 0) {
|
||||
|
@ -64,16 +64,6 @@ public class TCPlistener implements Runnable {
|
||||
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
|
||||
*
|
||||
@ -81,30 +71,27 @@ public class TCPlistener implements Runnable {
|
||||
public void run() {
|
||||
boolean g = false;
|
||||
int conn = 0;
|
||||
Socket server = null;
|
||||
try {
|
||||
die:
|
||||
{
|
||||
try {
|
||||
Socket server = new Socket();
|
||||
listener.setSoTimeout(50); // We don't block, we cycle and check.
|
||||
while (lives.get()) {
|
||||
try {
|
||||
server = listener.accept();
|
||||
g = true;
|
||||
} catch (SocketTimeoutException ste) {
|
||||
g = false;
|
||||
}
|
||||
if (g) {
|
||||
conn++;
|
||||
// toss the connection to a new thread.
|
||||
TCPtoI2P conn_c = new TCPtoI2P(socketManager, server, info, database, lives);
|
||||
Thread t = new Thread(conn_c, Thread.currentThread().getName() + " TCPtoI2P " + conn);
|
||||
t.start();
|
||||
g = false;
|
||||
}
|
||||
try {
|
||||
listener.setSoTimeout(50); // We don't block, we cycle and check.
|
||||
while (lives.get()) {
|
||||
try {
|
||||
server = listener.accept();
|
||||
g = true;
|
||||
} catch (SocketTimeoutException ste) {
|
||||
g = false;
|
||||
}
|
||||
if (g) {
|
||||
conn++;
|
||||
// toss the connection to a new thread.
|
||||
TCPtoI2P conn_c = new TCPtoI2P(socketManager, server, info, database, lives);
|
||||
Thread t = new Thread(conn_c, Thread.currentThread().getName() + " TCPtoI2P " + conn);
|
||||
t.start();
|
||||
g = false;
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
}
|
||||
} finally {
|
||||
try {
|
||||
|
@ -734,12 +734,12 @@ public class I2PSnarkServlet extends HttpServlet {
|
||||
out.write("<span class=\"snarkNewTorrent\">\n");
|
||||
// *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("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" />\n");
|
||||
out.write("<div class=\"addtorrentsection\"><span class=\"snarkConfigTitle\">Add Torrent:</span><br>\n");
|
||||
out.write("From URL : <input type=\"text\" name=\"newURL\" size=\"80\" value=\"" + newURL + "\" /> \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("From URL : <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)
|
||||
//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("Removing that .torrent file will cause the torrent to stop.<br></span>\n");
|
||||
out.write("</form>\n</span></div>");
|
||||
@ -754,12 +754,12 @@ public class I2PSnarkServlet extends HttpServlet {
|
||||
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
|
||||
out.write("<form action=\"" + uri + "\" method=\"POST\">\n");
|
||||
out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" />\n");
|
||||
out.write("<span class=\"snarkConfigTitle\">Create Torrent:</span><br>\n");
|
||||
out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" >\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("Data to seed: " + _manager.getDataDir().getAbsolutePath() + File.separatorChar
|
||||
+ "<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");
|
||||
Map trackers = _manager.getTrackers();
|
||||
for (Iterator iter = trackers.entrySet().iterator(); iter.hasNext(); ) {
|
||||
@ -773,8 +773,8 @@ public class I2PSnarkServlet extends HttpServlet {
|
||||
}
|
||||
out.write("</select>\n");
|
||||
out.write("or <input type=\"text\" name=\"announceURLOther\" size=\"50\" value=\"http://\" " +
|
||||
"title=\"Custom tracker URL\" /> ");
|
||||
out.write("<input type=\"submit\" value=\"Create torrent\" name=\"action\" />\n");
|
||||
"title=\"Custom tracker URL\" > ");
|
||||
out.write("<input type=\"submit\" value=\"Create torrent\" name=\"action\" >\n");
|
||||
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("<div class=\"configsection\"><span class=\"snarkConfig\">\n");
|
||||
out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" />\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("title=\"Directory to store torrents and data\" disabled=\"true\" /> <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("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" >\n");
|
||||
out.write("<span class=\"snarkConfigTitle\">Configuration</span><br>\n");
|
||||
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\" ><br><i>(Edit i2psnark.config and restart to change)</i><br>\n");
|
||||
out.write("<tr><td>Auto start: <td><input type=\"checkbox\" class=\"optbox\" name=\"autoStart\" value=\"true\" "
|
||||
+ (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 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");
|
||||
@ -814,26 +814,26 @@ public class I2PSnarkServlet extends HttpServlet {
|
||||
out.write("<option value=\"150\">150%</option>\n\t");
|
||||
out.write("</select><br>\n");
|
||||
*/
|
||||
out.write("Total uploader limit: <input type=\"text\" name=\"upLimit\" value=\""
|
||||
+ _manager.util().getMaxUploaders() + "\" size=\"3\" maxlength=\"3\" /> peers<br>\n");
|
||||
out.write("Up bandwidth limit: <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");
|
||||
out.write("<tr><td>Total uploader limit: <td><input type=\"text\" name=\"upLimit\" value=\""
|
||||
+ _manager.util().getMaxUploaders() + "\" size=\"3\" maxlength=\"3\" > peers<br>\n");
|
||||
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");
|
||||
|
||||
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 " : "")
|
||||
+ "title=\"If true, uses open trackers in addition\" /> ");
|
||||
out.write("Announce URLs: <input type=\"text\" name=\"openTrackers\" value=\""
|
||||
+ openTrackers + "\" size=\"50\" /><br>\n");
|
||||
+ "title=\"If true, uses open trackers in addition\" > ");
|
||||
out.write("<tr><td>Open tracker announce URLs: <td><input type=\"text\" name=\"openTrackers\" value=\""
|
||||
+ openTrackers + "\" size=\"50\" ><br>\n");
|
||||
|
||||
//out.write("\n");
|
||||
//out.write("EepProxy host: <input type=\"text\" name=\"eepHost\" value=\""
|
||||
// + _manager.util().getEepProxyHost() + "\" size=\"15\" /> ");
|
||||
//out.write("port: <input type=\"text\" name=\"eepPort\" value=\""
|
||||
// + _manager.util().getEepProxyPort() + "\" size=\"5\" maxlength=\"5\" /><br>\n");
|
||||
out.write("I2CP host: <input type=\"text\" name=\"i2cpHost\" value=\""
|
||||
+ _manager.util().getI2CPHost() + "\" size=\"15\" /> ");
|
||||
out.write("port: <input type=\"text\" name=\"i2cpPort\" value=\"" +
|
||||
+ _manager.util().getI2CPPort() + "\" size=\"5\" maxlength=\"5\" /> <br>\n");
|
||||
out.write("<tr><td>I2CP host: <td><input type=\"text\" name=\"i2cpHost\" value=\""
|
||||
+ _manager.util().getI2CPHost() + "\" size=\"15\" > ");
|
||||
out.write("<tr><td>I2CP port: <td><input type=\"text\" name=\"i2cpPort\" value=\"" +
|
||||
+ _manager.util().getI2CPPort() + "\" size=\"5\" maxlength=\"5\" > <br>\n");
|
||||
StringBuilder opts = new StringBuilder(64);
|
||||
Map options = new TreeMap(_manager.util().getI2CPOptions());
|
||||
for (Iterator iter = options.entrySet().iterator(); iter.hasNext(); ) {
|
||||
@ -842,10 +842,10 @@ public class I2PSnarkServlet extends HttpServlet {
|
||||
String val = (String)entry.getValue();
|
||||
opts.append(key).append('=').append(val).append(' ');
|
||||
}
|
||||
out.write("I2CP opts: <input type=\"text\" name=\"i2cpOpts\" size=\"80\" value=\""
|
||||
+ opts.toString() + "\" /><br>\n");
|
||||
out.write("<input type=\"submit\" value=\"Save configuration\" name=\"action\" />\n");
|
||||
out.write("</span>\n");
|
||||
out.write("<tr><td>I2CP options: <td><textarea name=\"i2cpOpts\" cols=\"60\" rows=\"1\" wrap=\"off\" >"
|
||||
+ opts.toString() + "</textarea><br>\n");
|
||||
out.write("<tr><td> <td><input type=\"submit\" value=\"Save configuration\" name=\"action\" >\n");
|
||||
out.write("</table></span>\n");
|
||||
out.write("</form></div>");
|
||||
}
|
||||
|
||||
@ -869,7 +869,7 @@ public class I2PSnarkServlet extends HttpServlet {
|
||||
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" +
|
||||
|
@ -268,6 +268,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
|
||||
OutputStream out = null;
|
||||
String targetRequest = null;
|
||||
boolean usingWWWProxy = false;
|
||||
boolean usingInternalServer = false;
|
||||
String currentProxy = null;
|
||||
long requestId = ++__requestId;
|
||||
try {
|
||||
@ -294,6 +295,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
|
||||
int pos = line.indexOf(" ");
|
||||
if (pos == -1) break;
|
||||
method = line.substring(0, pos);
|
||||
// TODO use Java URL class to make all this simpler and more robust
|
||||
String request = line.substring(pos + 1);
|
||||
if (request.startsWith("/") && getTunnel().getClientOptions().getProperty("i2ptunnel.noproxy") != null) {
|
||||
request = "http://i2p" + request;
|
||||
@ -339,8 +341,11 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
|
||||
}
|
||||
}
|
||||
|
||||
// Quick hack for foo.bar.i2p
|
||||
if (host.toLowerCase().endsWith(".i2p")) {
|
||||
if (host.toLowerCase().equals("proxy.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 = host;
|
||||
// Host becomes the destination key
|
||||
@ -477,15 +482,15 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
|
||||
}
|
||||
destination = request.substring(0, 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 (_log.shouldLog(Log.INFO)) _log.info(getPrefix(requestId) + "notValid(" + host + ")");
|
||||
method = null;
|
||||
destination = null;
|
||||
break;
|
||||
} else if (!usingWWWProxy) {
|
||||
} else if ((!usingWWWProxy) && (!usingInternalServer)) {
|
||||
if (_log.shouldLog(Log.INFO)) _log.info(getPrefix(requestId) + "host=getHostName(" + destination + ")");
|
||||
host = getHostName(destination); // hide original host
|
||||
}
|
||||
@ -496,7 +501,9 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
|
||||
_log.debug(getPrefix(requestId) + "HOST :" + host + ":");
|
||||
_log.debug(getPrefix(requestId) + "DEST :" + destination + ":");
|
||||
}
|
||||
|
||||
|
||||
// end first line processing
|
||||
|
||||
} else {
|
||||
if (lowercaseLine.startsWith("host: ") && !usingWWWProxy) {
|
||||
line = "Host: " + host;
|
||||
@ -528,14 +535,14 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
|
||||
continue; // completely strip the line
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (line.length() == 0) {
|
||||
|
||||
String ok = getTunnel().getClientOptions().getProperty("i2ptunnel.gzip");
|
||||
boolean gzip = DEFAULT_GZIP;
|
||||
if (ok != null)
|
||||
gzip = Boolean.valueOf(ok).booleanValue();
|
||||
if (gzip) {
|
||||
if (gzip && !usingInternalServer) {
|
||||
// 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
|
||||
// seems to work.
|
||||
@ -549,7 +556,8 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
|
||||
} else {
|
||||
newRequest.append(line).append("\r\n"); // HTTP spec
|
||||
}
|
||||
}
|
||||
} // end header processing
|
||||
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_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)
|
||||
// Ignore all the headers
|
||||
if (destination.equals("proxy.i2p")) {
|
||||
if (usingInternalServer) {
|
||||
serveLocalFile(out, method, targetRequest);
|
||||
s.close();
|
||||
return;
|
||||
|
@ -55,7 +55,7 @@ public class I2PSOCKSTunnel extends I2PTunnelClientBase {
|
||||
I2PSocket destSock = serv.getDestinationI2PSocket(this);
|
||||
new I2PTunnelRunner(clientSock, destSock, sockLock, null, mySockets);
|
||||
} catch (SOCKSException e) {
|
||||
_log.error("Error from SOCKS connection: " + e.getMessage());
|
||||
_log.error("Error from SOCKS connection", e);
|
||||
closeSocket(s);
|
||||
}
|
||||
}
|
||||
|
@ -89,7 +89,7 @@
|
||||
<!-- jar again to get the latest messages_*.class files -->
|
||||
<jar destfile="./build/routerconsole.jar" basedir="./build/obj" includes="**/*.class" update="true" />
|
||||
</target>
|
||||
<target name="poupdate" depends="compile">
|
||||
<target name="poupdate" depends="build">
|
||||
<ant target="war" />
|
||||
<!-- Update the messages_*.po files.
|
||||
We need to supply the bat file for windows, and then change the fail property to true -->
|
||||
|
@ -232,7 +232,7 @@ public class ConfigNetHandler extends FormHandler {
|
||||
|
||||
if (_requireIntroductions) {
|
||||
_context.router().setConfigSetting(UDPTransport.PROP_FORCE_INTRODUCERS, "true");
|
||||
addFormNotice(_("Requiring SSU introduers"));
|
||||
addFormNotice(_("Requiring SSU introducers"));
|
||||
} else {
|
||||
_context.router().removeConfigSetting(UDPTransport.PROP_FORCE_INTRODUCERS);
|
||||
}
|
||||
|
@ -36,10 +36,10 @@ public class ConfigUIHelper extends HelperBase {
|
||||
return rv;
|
||||
}
|
||||
|
||||
private static final String langs[] = {"de", "en", "fr", "nl", "se", "zh"};
|
||||
private static final String flags[] = {"de", "us", "fr", "nl", "se", "cn"};
|
||||
private static final String langs[] = {"de", "en", "fr", "nl", "ru", "sv", "zh"};
|
||||
private static final String flags[] = {"de", "us", "fr", "nl", "ru", "se", "cn"};
|
||||
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 */
|
||||
public String getLangSettings() {
|
||||
|
@ -4,6 +4,7 @@ import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStreamWriter;
|
||||
|
||||
import net.i2p.data.DataHelper;
|
||||
|
||||
public class NetDbHelper extends HelperBase {
|
||||
private String _routerPrefix;
|
||||
@ -12,7 +13,11 @@ public class NetDbHelper extends HelperBase {
|
||||
|
||||
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) {
|
||||
try {
|
||||
_full = Integer.parseInt(f);
|
||||
|
@ -46,13 +46,13 @@ class ProfileOrganizerRenderer {
|
||||
Hash peer = (Hash)iter.next();
|
||||
if (_organizer.getUs().equals(peer)) continue;
|
||||
PeerProfile prof = _organizer.getProfile(peer);
|
||||
if (_organizer.isWellIntegrated(peer)) {
|
||||
integratedPeers.add(prof);
|
||||
} else {
|
||||
//if (_organizer.isWellIntegrated(peer)) {
|
||||
// integratedPeers.add(prof);
|
||||
//} else {
|
||||
RouterInfo info = _context.netDb().lookupRouterInfoLocally(peer);
|
||||
if (info != null && info.getCapabilities().indexOf("f") >= 0)
|
||||
integratedPeers.add(prof);
|
||||
}
|
||||
//}
|
||||
if (prof.getLastSendSuccessful() <= hideBefore) {
|
||||
older++;
|
||||
continue;
|
||||
|
@ -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" />" />
|
||||
<%=intl._("KBps In")%>
|
||||
</td><td>(<jsp:getProperty name="nethelper" property="inboundRateBits" />)</td>
|
||||
<% /********
|
||||
<!-- let's keep this simple...
|
||||
bursting up to
|
||||
<input name="inboundburstrate" type="text" size="5" value="<jsp:getProperty name="nethelper" property="inboundBurstRate" />" /> KBps for
|
||||
<jsp:getProperty name="nethelper" property="inboundBurstFactorBox" /><br>
|
||||
-->
|
||||
*********/ %>
|
||||
</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" />" />
|
||||
<%=intl._("KBps Out")%>
|
||||
</td><td>(<jsp:getProperty name="nethelper" property="outboundRateBits" />)</td>
|
||||
<% /********
|
||||
<!-- let's keep this simple...
|
||||
bursting up to
|
||||
<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>
|
||||
A negative rate sets the default.</i><br>
|
||||
-->
|
||||
*********/ %>
|
||||
</tr><tr>
|
||||
<td><jsp:getProperty name="nethelper" property="sharePercentageBox" /> <%=intl._("Share")%></td>
|
||||
<td>(<jsp:getProperty name="nethelper" property="shareRateBits" />)
|
||||
@ -121,6 +125,7 @@
|
||||
</p><p><b><%=intl._("UDP Configuration:")%></b><br>
|
||||
<%=intl._("UDP port:")%>
|
||||
<input name ="udpPort" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="configuredUdpPort" />" /><br>
|
||||
<% /********
|
||||
<!-- let's keep this simple...
|
||||
<input type="checkbox" class="optbox" name="requireIntroductions" value="true" <jsp:getProperty name="nethelper" property="requireIntroductionsChecked" /> />
|
||||
Require SSU introductions
|
||||
@ -128,6 +133,7 @@
|
||||
</p><p>
|
||||
Current External UDP address: <i><jsp:getProperty name="nethelper" property="udpAddress" /></i><br>
|
||||
-->
|
||||
*********/ %>
|
||||
</p><p>
|
||||
<b><%=intl._("TCP Configuration")%>:</b><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._("Certain firewalls such as symmetric NATs may not work well with I2P.")%>
|
||||
</p>
|
||||
<% /********
|
||||
<!-- let's keep this simple...
|
||||
<input type="submit" name="recheckReachability" value="Check network reachability..." />
|
||||
</p>
|
||||
-->
|
||||
*********/ %>
|
||||
<p>
|
||||
<%=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")%>:
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
<% String peer = "";
|
||||
if (request.getParameter("peer") != null)
|
||||
peer = request.getParameter("peer");
|
||||
peer = net.i2p.data.DataHelper.stripHTML(request.getParameter("peer")); // XSS
|
||||
%>
|
||||
<div class="configure">
|
||||
<form action="configpeer.jsp" method="POST">
|
||||
|
@ -3,5 +3,5 @@
|
||||
<meta http-equiv="pragma" content="no-cache" />
|
||||
</head>
|
||||
<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>
|
||||
|
@ -11,7 +11,7 @@
|
||||
// pass the new delay parameter to the iframe
|
||||
newDelay = "?refresh=" + 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">
|
||||
<%@include file="summarynoframe.jsi" %>
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -35,6 +35,8 @@ import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Properties;
|
||||
|
||||
import net.i2p.data.DataHelper;
|
||||
|
||||
public class AddressbookBean
|
||||
{
|
||||
private String book, action, serial, lastSerial, filter, search, hostname, destination;
|
||||
@ -140,7 +142,7 @@ public class AddressbookBean
|
||||
return book;
|
||||
}
|
||||
public void setBook(String book) {
|
||||
this.book = book;
|
||||
this.book = DataHelper.stripHTML(book); // XSS
|
||||
}
|
||||
public String getSerial() {
|
||||
lastSerial = "" + Math.random();
|
||||
@ -326,7 +328,7 @@ public class AddressbookBean
|
||||
return destination;
|
||||
}
|
||||
public void setDestination(String destination) {
|
||||
this.destination = destination;
|
||||
this.destination = DataHelper.stripHTML(destination); // XSS
|
||||
}
|
||||
public String getHostname() {
|
||||
return hostname;
|
||||
@ -338,7 +340,7 @@ public class AddressbookBean
|
||||
deletionMarks.addLast( name );
|
||||
}
|
||||
public void setHostname(String hostname) {
|
||||
this.hostname = hostname;
|
||||
this.hostname = DataHelper.stripHTML(hostname); // XSS
|
||||
}
|
||||
private int getBeginInt() {
|
||||
return Math.max(0, Math.min(entries.length - 1, beginIndex));
|
||||
|
@ -348,19 +348,19 @@
|
||||
</copy>
|
||||
<!-- make a "classic" theme -->
|
||||
<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>
|
||||
<!-- Add dark theme -->
|
||||
<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>
|
||||
<!-- Add light theme -->
|
||||
<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>
|
||||
<!-- Add midnight theme -->
|
||||
<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>
|
||||
<!-- Add shared images.. these are subject to flux and change! -->
|
||||
<copy todir="pkg-temp/docs/themes/console/images/" >
|
||||
|
@ -16,7 +16,7 @@ package net.i2p;
|
||||
public class CoreVersion {
|
||||
/** deprecated */
|
||||
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[]) {
|
||||
System.out.println("I2P Core version: " + VERSION);
|
||||
|
38
history.txt
38
history.txt
@ -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
|
||||
* DataStructures: Remove unused Logs
|
||||
* OrderedProperties: Simplify, use in i2psnark
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
<info>
|
||||
<appname>i2p</appname>
|
||||
<appversion>0.7.7</appversion>
|
||||
<appversion>0.7.8</appversion>
|
||||
<authors>
|
||||
<author name="I2P" email="http://forum.i2p2.de/"/>
|
||||
</authors>
|
||||
|
@ -1,42 +1,36 @@
|
||||
<i2p.news date="$Date: 2009-10-12 00:00:00 $">
|
||||
<i2p.release version="0.7.7" date="2009/10/12" minVersion="0.6"/>
|
||||
<h4>Congratulations on getting I2P installed!</h4>
|
||||
<ul>
|
||||
<li>
|
||||
<i2p.news date="$Date: 2009-12-08 00:00:00 $">
|
||||
<i2p.release version="0.7.8" date="2009/12/08" minVersion="0.6"/>
|
||||
<h4><ul><li>Congratulations on getting I2P installed!</li></ul></h4>
|
||||
<p>
|
||||
<b>Welcome to I2P!</b>
|
||||
Please <b>have patience</b> as I2P boots up and finds peers.
|
||||
</li>
|
||||
<li>
|
||||
</p>
|
||||
<p>
|
||||
While you are waiting, please <b>adjust your bandwidth settings</b> on the
|
||||
<a href="config.jsp">configuration page</a>.
|
||||
</li>
|
||||
<li>
|
||||
</p>
|
||||
<p>
|
||||
Once you have a "shared clients" destination listed on the left,
|
||||
please <b>check out</b> our
|
||||
<a href="http://www.i2p2.i2p/faq.html">FAQ</a>.
|
||||
</li>
|
||||
<li>
|
||||
</p>
|
||||
<p>
|
||||
Point your IRC client to <b>localhost:6668</b> and say hi to us on #i2p.
|
||||
</li>
|
||||
</ul>
|
||||
<br>
|
||||
<h4>Gratulation zur erfolgreichen Installation von I2P!</h4>
|
||||
<ul>
|
||||
<li>
|
||||
</p>
|
||||
<h4><ul><li>Gratulation zur erfolgreichen Installation von I2P!</li></ul></h4>
|
||||
<p>
|
||||
<b>Willkommen bei I2P!</b>
|
||||
Bitte noch <b>etwas Geduld</b> während I2P startet und weitere I2P Router findet.
|
||||
</li>
|
||||
<li>
|
||||
</p>
|
||||
<p>
|
||||
Passe bitte In der Wartezeit <b>deine Einstellungen zur Bandbreite</b> auf der
|
||||
<a href="config.jsp">Einstellungsseite</a> an.
|
||||
</li>
|
||||
<li>
|
||||
</p>
|
||||
<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>.
|
||||
</li>
|
||||
<li>
|
||||
</p>
|
||||
<p>
|
||||
Verbinde deinen IRC Klienten mit dem Server auf <b>localhost:6668</b> und sage Hallo zu uns im Kanal #i2p.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</p>
|
||||
</i2p.news>
|
||||
|
||||
|
@ -1,42 +1,26 @@
|
||||
<i2p.news date="$Date: 2009-10-12 00:00:00 $">
|
||||
<i2p.release version="0.7.7" date="2009/10/12" minVersion="0.6"
|
||||
anonurl="http://i2p/NF2RLVUxVulR3IqK0sGJR0dHQcGXAzwa6rEO4WAWYXOHw-DoZhKnlbf1nzHXwMEJoex5nFTyiNMqxJMWlY54cvU~UenZdkyQQeUSBZXyuSweflUXFqKN-y8xIoK2w9Ylq1k8IcrAFDsITyOzjUKoOPfVq34rKNDo7fYyis4kT5bAHy~2N1EVMs34pi2RFabATIOBk38Qhab57Umpa6yEoE~rbyR~suDRvD7gjBvBiIKFqhFueXsR2uSrPB-yzwAGofTXuklofK3DdKspciclTVzqbDjsk5UXfu2nTrC1agkhLyqlOfjhyqC~t1IXm-Vs2o7911k7KKLGjB4lmH508YJ7G9fLAUyjuB-wwwhejoWqvg7oWvqo4oIok8LG6ECR71C3dzCvIjY2QcrhoaazA9G4zcGMm6NKND-H4XY6tUWhpB~5GefB3YczOqMbHq4wi0O9MzBFrOJEOs3X4hwboKWANf7DT5PZKJZ5KorQPsYRSq0E3wSOsFCSsdVCKUGsAAAA/i2p/i2pupdate.sud"
|
||||
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 & Console Translation - Help Needed!</li></ul></h4>
|
||||
|
||||
<i2p.news date="$Date: 2009-12-08 00:00:00 $">
|
||||
<i2p.release version="0.7.8" date="2009/12/08" minVersion="0.6" />
|
||||
<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>
|
||||
<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>
|
||||
|
||||
<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>
|
||||
<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.
|
||||
The 9th I2P release for 2009,
|
||||
0.7.8, contains initial support for router console translations, and
|
||||
changes to the floodfill system which lay the foundation for supporting large growth in the network.
|
||||
</p><p>
|
||||
Work also continues on increasing speeds, both by reducing the
|
||||
number of session keys transferred, by improving the
|
||||
methods of dropping messages during overload, and by reducing
|
||||
drops by high-bandwidth routers.
|
||||
There is a new <a href="/configupdate.jsp">unsigned update option</a>
|
||||
for those of you that would like automatic updates to bleeding-edge development versions.
|
||||
To prevent easy blocking of I2P by malicious firewalls, the release randomizes the I2P port for new installs.
|
||||
For existing installs, please help those who are vulnerable to blocking by changing UDP to a random port on
|
||||
<a href="config.jsp">the network configuration page</a>
|
||||
and adjusting your firewall if necessary.
|
||||
Say goodbye to port 8887!
|
||||
</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.
|
||||
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
|
||||
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>
|
||||
</i2p.news>
|
||||
|
@ -21,4 +21,4 @@ Proxy-Connection: close
|
||||
或您的路由器在网络中的整合度不佳。
|
||||
你可以尝试
|
||||
<a href="javascript: window.location.reload()">重试</a>。
|
||||
<hr><b>找不到一下目标:</b><BR><BR>
|
||||
<hr><b>找不到 以下目标:</b><BR><BR>
|
||||
|
@ -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=fr"><img src="/flags.jsp?c=fr" title="Français" alt="Franç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>Welcome to I2P!</h2></div>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<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çais" alt="Franç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çais" alt="Franç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>Willkommen zu I2P!</h2></div>
|
||||
<p>Wenn Du gerade I2P gestartet hast, sollten die "Active:" Zahlen links in den nä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>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<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çais" alt="Franç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çais" alt="Franç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>Bienvenu a I2P!</h2></div>
|
||||
<p>Si vous venez juste de lancer I2P, les chiffres sur la gauche à coté de Active devraient commencer à augmenter dans les prochaines minutes et vous verrez un "Shared client" en destination locale listé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
|
||||
<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écurisé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>:
|
||||
connections sécurisées et anonyme vers <a href="http://www.i2p2.de/">www.i2p2.de</a></li>
|
||||
<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écurisé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://ugha.i2p/">ugha.i2p</a>: l'eepsite d'ugha, un wiki que chaucun peut éditer ainsi que</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épannage</a></h2>
|
||||
|
||||
<p>Soyez patient - i2p peut s'avérer lent à démarrer la première fois car il recherche des pairs. Si, après 30 minutes, votre Actives: connecté/récent compte moins de 10 pairs connectés, vous devez ouvrir le port 8887 sur votre pare-feu pour avoir une meilleure connection. Si vous ne pouvez accéder à aucun eepsite (même <a href="http://www.i2p2.i2p/">www.i2p2.i2p</a>), soyez sûr que votre navigateur utilise bien le proxy 127.0.0.1 sur le port 4444. Vous pouvez aussi faire part de votre dé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és).</p><hr />
|
||||
<p>Soyez patient - i2p peut s'avérer lent à démarrer la première fois car il recherche des pairs. Si, après 30 minutes, votre Actives: connecté/récent compte moins de 10 pairs connectés, vous devez ouvrir le port 8887 sur votre pare-feu pour avoir une meilleure connection. Si vous ne pouvez accéder à aucun eepsite (même <a href="http://www.i2p2.i2p/index_fr.html">www.i2p2.i2p</a>), soyez sûr que votre navigateur utilise bien le proxy 127.0.0.1 sur le port 4444. Vous pouvez aussi faire part de votre dé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és).</p><hr />
|
||||
|
@ -1,5 +1,5 @@
|
||||
<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çais" alt="Franç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çais" alt="Franç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>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>
|
||||
|
63
installer/resources/readme/readme_ru.html
Normal file
63
installer/resources/readme/readme_ru.html
Normal 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çais" alt="Franç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>
|
@ -1,5 +1,5 @@
|
||||
<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çais" alt="Franç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çais" alt="Franç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>Welcome to I2P!</h2></div>
|
||||
<p>Om du just har startat I2P kommer de "Aktiva: #/#" börja öka inom
|
||||
|
@ -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=fr"><img src="/flags.jsp?c=fr" title="Français" alt="Franç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>
|
||||
@ -12,7 +13,7 @@
|
||||
<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>: 这两个站点用于跟踪哪些 I2P 站点在线。</li>
|
||||
<li><a href="http://forum.i2p/">forum.i2p</a>:I2P官方论坛 <a href="http://forum.i2p2.de/">forum.i2p2.de</a> 的匿名入口 (个人的I2P站点会在论坛的EEPSITE讨论区发布)</li>
|
||||
<li><a href="http://www.i2p2.i2p/">www.i2p2.i2p</a> 与镜像 <a href="http://i2p-projekt.i2p/">i2p-projekt.i2p</a>: 可以安全匿名的访问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>: 可以安全匿名的访问I2P官网 <a href="http://www.i2p2.de/index_zh.html">www.i2p2.de</a></li>
|
||||
<li><a href="http://eepsites.i2p/">eepsites.i2p</a>: I2P网络里的 “Google” 可以用来搜索各个匿名小站</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>
|
||||
@ -34,4 +35,4 @@
|
||||
|
||||
<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。你也可以到 <a href="http://www.i2p2.i2p/">I2P 网站</a> 查找信息, 在 <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。你也可以到 <a href="http://www.i2p2.i2p/index_zh.html">I2P 网站</a> 查找信息, 在 <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>
|
||||
|
@ -773,4 +773,4 @@ div.graphspanel form:last-child {
|
||||
div.graphspanel h3 {
|
||||
text-align: left;
|
||||
margin: 10px 20px 10px 20px;
|
||||
}
|
||||
}
|
||||
|
@ -724,7 +724,7 @@ button:active {
|
||||
padding: 7px 10px 5px 10px;
|
||||
color: #eef;
|
||||
font-size: 7pt;
|
||||
width: 140px;
|
||||
width: 220px;
|
||||
text-align: right;
|
||||
float: right;
|
||||
vertical-align: middle;
|
||||
@ -967,4 +967,4 @@ position: relative;
|
||||
|
||||
.formaction {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
|
@ -723,8 +723,8 @@ button:active{
|
||||
padding: 5px 5px;
|
||||
color: #001;
|
||||
font-size: 7pt;
|
||||
width: 120px;
|
||||
text-align: center;
|
||||
width: 220px;
|
||||
text-align: right;
|
||||
float: right;
|
||||
valign: middle;
|
||||
}
|
||||
@ -993,4 +993,4 @@ div.joblog hr {
|
||||
|
||||
.formaction {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
|
@ -47,7 +47,7 @@ div.logo hr {
|
||||
background: #99f;
|
||||
height: 1px;
|
||||
border: 0px solid #99f;
|
||||
margin: 8px -3px;
|
||||
margin: 8px -5px;
|
||||
}
|
||||
|
||||
div.logo a:link, div.logo a:visited {
|
||||
@ -103,7 +103,7 @@ div.warning hr {
|
||||
background: #fb7;
|
||||
height: 1px;
|
||||
border: 0px solid #fb7;
|
||||
margin: 10px 0 5px 0;
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
div.warning h3 {
|
||||
@ -114,6 +114,7 @@ div.warning h3 {
|
||||
font-variant: small-caps;
|
||||
text-transform: capitalize;
|
||||
font-size: 12.5pt;
|
||||
background: none;
|
||||
}
|
||||
|
||||
/* console error messages */
|
||||
@ -220,7 +221,7 @@ div.routersummary table {
|
||||
border: 0;
|
||||
text-align: center !important;
|
||||
margin: -5px 0px -5px 2px;
|
||||
width: 185px !important;
|
||||
width: 186px !important;
|
||||
overflow: hidden;
|
||||
font-size: 8pt;
|
||||
padding: 0 -12px;
|
||||
@ -257,6 +258,7 @@ div.tunnels table{
|
||||
width: 16px;
|
||||
text-align: right;
|
||||
margin-right: -2px;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
div.routersummary form {
|
||||
@ -564,7 +566,7 @@ h2, h3 {
|
||||
|
||||
.proxyfooter{
|
||||
font-size: 7pt;
|
||||
display: none !important;
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
table {
|
||||
@ -860,4 +862,12 @@ div.graphspanel h3 {
|
||||
|
||||
table code {
|
||||
font-size: 8.5pt;
|
||||
}
|
||||
}
|
||||
|
||||
table li:last-child{
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
table ul {
|
||||
font-size: 8.5pt;
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ public class RouterVersion {
|
||||
/** deprecated */
|
||||
public final static String ID = "Monotone";
|
||||
public final static String VERSION = CoreVersion.VERSION;
|
||||
public final static long BUILD = 21;
|
||||
public final static long BUILD = 1;
|
||||
/** for example "-test" */
|
||||
public final static String EXTRA = "";
|
||||
public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA;
|
||||
|
@ -42,7 +42,7 @@ public class FIFOBandwidthRefiller implements Runnable {
|
||||
* adjusting bandwidth class boundaries.
|
||||
*/
|
||||
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_BURST_SECONDS = 60;
|
||||
|
@ -46,7 +46,7 @@ public class InboundEstablishState {
|
||||
// general status
|
||||
private long _establishBegin;
|
||||
private long _lastReceive;
|
||||
private long _lastSend;
|
||||
// private long _lastSend;
|
||||
private long _nextSend;
|
||||
private RemoteHostId _remoteHostId;
|
||||
private int _currentState;
|
||||
@ -129,6 +129,7 @@ public class InboundEstablishState {
|
||||
|
||||
public synchronized byte[] getSentY() {
|
||||
if (_sentY == null)
|
||||
// Rare NPE seen here...
|
||||
_sentY = _keyBuilder.getMyPublicValueBytes();
|
||||
return _sentY;
|
||||
}
|
||||
@ -198,7 +199,7 @@ public class InboundEstablishState {
|
||||
|
||||
/** note that we just sent a SessionCreated packet */
|
||||
public synchronized void createdPacketSent() {
|
||||
_lastSend = _context.clock().now();
|
||||
// _lastSend = _context.clock().now();
|
||||
if ( (_currentState == STATE_UNKNOWN) || (_currentState == STATE_REQUEST_RECEIVED) )
|
||||
_currentState = STATE_CREATED_SENT;
|
||||
}
|
||||
@ -210,8 +211,7 @@ public class InboundEstablishState {
|
||||
public synchronized void setNextSendTime(long when) { _nextSend = when; }
|
||||
|
||||
/** RemoteHostId, uniquely identifies an attempt */
|
||||
// FIXME Exporting non-public type through public API FIXME
|
||||
public RemoteHostId getRemoteHostId() { return _remoteHostId; }
|
||||
RemoteHostId getRemoteHostId() { return _remoteHostId; }
|
||||
|
||||
public synchronized void receiveSessionConfirmed(UDPPacketReader.SessionConfirmedReader conf) {
|
||||
if (_receivedIdentity == null)
|
||||
|
@ -157,8 +157,7 @@ public class IntroductionManager {
|
||||
return found;
|
||||
}
|
||||
|
||||
/* FIXME Exporting non-public type through public API FIXME */
|
||||
public void receiveRelayIntro(RemoteHostId bob, UDPPacketReader reader) {
|
||||
void receiveRelayIntro(RemoteHostId bob, UDPPacketReader reader) {
|
||||
if (_context.router().isHidden())
|
||||
return;
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
@ -167,8 +166,7 @@ public class IntroductionManager {
|
||||
_transport.send(_builder.buildHolePunch(reader));
|
||||
}
|
||||
|
||||
/* FIXME Exporting non-public type through public API FIXME */
|
||||
public void receiveRelayRequest(RemoteHostId alice, UDPPacketReader reader) {
|
||||
void receiveRelayRequest(RemoteHostId alice, UDPPacketReader reader) {
|
||||
if (_context.router().isHidden())
|
||||
return;
|
||||
long tag = reader.getRelayRequestReader().readTag();
|
||||
|
@ -413,8 +413,7 @@ public class OutboundEstablishState {
|
||||
}
|
||||
|
||||
/** uniquely identifies an attempt */
|
||||
/* FIXME Exporting non-public type through public API FIXME */
|
||||
public RemoteHostId getRemoteHostId() { return _remoteHostId; }
|
||||
RemoteHostId getRemoteHostId() { return _remoteHostId; }
|
||||
|
||||
/** we have received a real data packet, so we're done establishing */
|
||||
public synchronized void dataReceived() {
|
||||
|
@ -26,7 +26,7 @@ public class OutboundMessageFragments {
|
||||
private RouterContext _context;
|
||||
private Log _log;
|
||||
private UDPTransport _transport;
|
||||
private ActiveThrottle _throttle; // LINT not used ??
|
||||
// private ActiveThrottle _throttle; // LINT not used ??
|
||||
/** peers we are actively sending messages to */
|
||||
private final List _activePeers;
|
||||
private boolean _alive;
|
||||
@ -34,8 +34,8 @@ public class OutboundMessageFragments {
|
||||
private int _nextPeer;
|
||||
private PacketBuilder _builder;
|
||||
/** if we can handle more messages explicitly, set this to true */
|
||||
private boolean _allowExcess; // LINT not used??
|
||||
private volatile long _packetsRetransmitted; // LINT not used??
|
||||
// private boolean _allowExcess; // LINT not used??
|
||||
// private volatile long _packetsRetransmitted; // LINT not used??
|
||||
|
||||
// private static final int MAX_ACTIVE = 64; // not used.
|
||||
// don't send a packet more than 10 times
|
||||
@ -45,12 +45,12 @@ public class OutboundMessageFragments {
|
||||
_context = ctx;
|
||||
_log = ctx.logManager().getLog(OutboundMessageFragments.class);
|
||||
_transport = transport;
|
||||
_throttle = throttle;
|
||||
// _throttle = throttle;
|
||||
_activePeers = new ArrayList(256);
|
||||
_nextPeer = 0;
|
||||
_builder = new PacketBuilder(ctx, transport);
|
||||
_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.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);
|
||||
@ -376,7 +376,7 @@ public class OutboundMessageFragments {
|
||||
if (state.getPushCount() > 1) {
|
||||
int toSend = fragments-sparseCount;
|
||||
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.packetsRetransmitted", state.getLifetime(), peer.getPacketsTransmitted());
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
|
@ -32,7 +32,7 @@ public class OutboundMessageState {
|
||||
private long _nextSendTime;
|
||||
private int _pushCount;
|
||||
private short _maxSends;
|
||||
private int _nextSendFragment;
|
||||
// private int _nextSendFragment;
|
||||
|
||||
public static final int MAX_MSG_SIZE = 32 * 1024;
|
||||
/** is this enough for a high-bandwidth router? */
|
||||
@ -45,7 +45,7 @@ public class OutboundMessageState {
|
||||
_log = _context.logManager().getLog(OutboundMessageState.class);
|
||||
_pushCount = 0;
|
||||
_maxSends = 0;
|
||||
_nextSendFragment = 0;
|
||||
// _nextSendFragment = 0;
|
||||
}
|
||||
|
||||
public boolean initialize(OutNetMessage msg) {
|
||||
|
@ -16,14 +16,14 @@ public class OutboundRefiller implements Runnable {
|
||||
private OutboundMessageFragments _fragments;
|
||||
private MessageQueue _messages;
|
||||
private boolean _alive;
|
||||
private Object _refillLock;
|
||||
// private Object _refillLock;
|
||||
|
||||
public OutboundRefiller(RouterContext ctx, OutboundMessageFragments fragments, MessageQueue messages) {
|
||||
_context = ctx;
|
||||
_log = ctx.logManager().getLog(OutboundRefiller.class);
|
||||
_fragments = fragments;
|
||||
_messages = messages;
|
||||
_refillLock = this;
|
||||
// _refillLock = this;
|
||||
_context.statManager().createRateStat("udp.timeToActive", "Message lifetime until it reaches the outbound fragment queue", "udp", UDPTransport.RATES);
|
||||
}
|
||||
|
||||
|
@ -879,8 +879,7 @@ public class PacketBuilder {
|
||||
*/
|
||||
private static final byte PEER_RELAY_INTRO_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_RELAY_INTRO << 4);
|
||||
|
||||
/* FIXME Exporting non-public type through public API FIXME */
|
||||
public UDPPacket buildRelayIntro(RemoteHostId alice, PeerState charlie, UDPPacketReader.RelayRequestReader request) {
|
||||
UDPPacket buildRelayIntro(RemoteHostId alice, PeerState charlie, UDPPacketReader.RelayRequestReader request) {
|
||||
UDPPacket packet = UDPPacket.acquire(_context, false);
|
||||
byte data[] = packet.getPacket().getData();
|
||||
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);
|
||||
|
||||
/* FIXME Exporting non-public type through public API FIXME */
|
||||
public UDPPacket buildRelayResponse(RemoteHostId alice, PeerState charlie, long nonce, SessionKey aliceIntroKey) {
|
||||
UDPPacket buildRelayResponse(RemoteHostId alice, PeerState charlie, long nonce, SessionKey aliceIntroKey) {
|
||||
InetAddress aliceAddr = null;
|
||||
try {
|
||||
aliceAddr = InetAddress.getByAddress(alice.getIP());
|
||||
|
@ -36,8 +36,7 @@ public class PacketHandler {
|
||||
/** let packets be up to 30s slow */
|
||||
private static final long GRACE_PERIOD = Router.CLOCK_FUDGE_FACTOR + 30*1000;
|
||||
|
||||
/* FIXME Exporting non-public type through public API FIXME */
|
||||
public PacketHandler(RouterContext ctx, UDPTransport transport, UDPEndpoint endpoint, EstablishmentManager establisher, InboundMessageFragments inbound, PeerTestManager testManager, IntroductionManager introManager) {// LINT -- Exporting non-public type through public API
|
||||
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;
|
||||
_log = ctx.logManager().getLog(PacketHandler.class);
|
||||
_transport = transport;
|
||||
|
@ -10,14 +10,14 @@ import net.i2p.util.Log;
|
||||
*
|
||||
*/
|
||||
public class PacketPusher implements Runnable {
|
||||
private RouterContext _context;
|
||||
// private RouterContext _context;
|
||||
private Log _log;
|
||||
private OutboundMessageFragments _fragments;
|
||||
private UDPSender _sender;
|
||||
private boolean _alive;
|
||||
|
||||
public PacketPusher(RouterContext ctx, OutboundMessageFragments fragments, UDPSender sender) {
|
||||
_context = ctx;
|
||||
// _context = ctx;
|
||||
_log = ctx.logManager().getLog(PacketPusher.class);
|
||||
_fragments = fragments;
|
||||
_sender = sender;
|
||||
|
@ -72,7 +72,7 @@ public class PeerState {
|
||||
/** how many consecutive messages have we sent and not received an ACK to */
|
||||
private int _consecutiveFailedSends;
|
||||
/** 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 */
|
||||
private final List _currentACKs;
|
||||
/**
|
||||
@ -805,7 +805,7 @@ public class PeerState {
|
||||
_concurrentMessagesActive = 0;
|
||||
|
||||
_consecutiveFailedSends = 0;
|
||||
_lastFailedSendPeriod = -1;
|
||||
// _lastFailedSendPeriod = -1;
|
||||
if (numSends < 2) {
|
||||
if (_context.random().nextInt(_concurrentMessagesAllowed) <= 0)
|
||||
_concurrentMessagesAllowed++;
|
||||
@ -1003,8 +1003,7 @@ public class PeerState {
|
||||
return MAX_RTO;
|
||||
}
|
||||
|
||||
/* FIXME Exporting non-public type through public API FIXME */
|
||||
public RemoteHostId getRemoteHostId() { return _remoteHostId; }
|
||||
RemoteHostId getRemoteHostId() { return _remoteHostId; }
|
||||
|
||||
public int add(OutboundMessageState state) {
|
||||
if (_dead) {
|
||||
|
@ -4,7 +4,6 @@ import java.net.DatagramSocket;
|
||||
import java.net.InetAddress;
|
||||
import java.net.SocketException;
|
||||
|
||||
import net.i2p.router.CommSystemFacade;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
|
@ -9,14 +9,14 @@ import net.i2p.data.i2np.I2NPMessage;
|
||||
import net.i2p.router.OutNetMessage;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.util.I2PThread;
|
||||
import net.i2p.util.Log;
|
||||
// import net.i2p.util.Log;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class UDPFlooder implements Runnable {
|
||||
private RouterContext _context;
|
||||
private Log _log;
|
||||
// private Log _log;
|
||||
private UDPTransport _transport;
|
||||
private final List _peers;
|
||||
private boolean _alive;
|
||||
@ -24,7 +24,7 @@ class UDPFlooder implements Runnable {
|
||||
|
||||
public UDPFlooder(RouterContext ctx, UDPTransport transport) {
|
||||
_context = ctx;
|
||||
_log = ctx.logManager().getLog(UDPFlooder.class);
|
||||
// _log = ctx.logManager().getLog(UDPFlooder.class);
|
||||
_transport = transport;
|
||||
_peers = new ArrayList(4);
|
||||
ctx.random().nextBytes(_floodData);
|
||||
|
@ -38,7 +38,7 @@ public class UDPPacket {
|
||||
private long _beforeReceiveFragments;
|
||||
private long _afterHandlingTime;
|
||||
private int _validateCount;
|
||||
private boolean _isInbound;
|
||||
// private boolean _isInbound;
|
||||
|
||||
private static final List _packetCache;
|
||||
static {
|
||||
@ -83,13 +83,14 @@ public class UDPPacket {
|
||||
_ivBuf = new byte[IV_SIZE];
|
||||
init(ctx, inbound);
|
||||
}
|
||||
// FIXME optimization, remove the inbound parameter, as it is unused. FIXME
|
||||
private void init(I2PAppContext ctx, boolean inbound) {
|
||||
_context = ctx;
|
||||
//_dataBuf = _dataCache.acquire();
|
||||
Arrays.fill(_data, (byte)0);
|
||||
//_packet = new DatagramPacket(_data, MAX_PACKET_SIZE);
|
||||
_packet.setData(_data);
|
||||
_isInbound = inbound;
|
||||
// _isInbound = inbound;
|
||||
_initializeTime = _context.clock().now();
|
||||
_markedType = -1;
|
||||
_validateCount = 0;
|
||||
@ -125,8 +126,7 @@ public class UDPPacket {
|
||||
int getFragmentCount() { return _fragmentCount; }
|
||||
void setFragmentCount(int count) { _fragmentCount = count; }
|
||||
|
||||
// FIXME Exporting non-public type through public API FIXME
|
||||
public RemoteHostId getRemoteHost() {
|
||||
RemoteHostId getRemoteHost() {
|
||||
if (_remoteHost == null) {
|
||||
long before = System.currentTimeMillis();
|
||||
InetAddress addr = _packet.getAddress();
|
||||
|
@ -28,7 +28,7 @@ public class UDPReceiver {
|
||||
private boolean _keepRunning;
|
||||
private Runner _runner;
|
||||
private UDPTransport _transport;
|
||||
private static int __id;
|
||||
// private static int __id;
|
||||
private int _id;
|
||||
|
||||
public UDPReceiver(RouterContext ctx, UDPTransport transport, DatagramSocket socket, String name) {
|
||||
|
@ -3,7 +3,6 @@ package net.i2p.router.transport.udp;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.net.InetAddress;
|
||||
import java.net.SocketException;
|
||||
import java.net.UnknownHostException;
|
||||
import java.text.DecimalFormat;
|
||||
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
|
||||
* if no state exists
|
||||
*/
|
||||
/* FIXME Exporting non-public type through public API FIXME */
|
||||
public PeerState getPeerState(RemoteHostId hostInfo) {
|
||||
PeerState getPeerState(RemoteHostId hostInfo) {
|
||||
synchronized (_peersByRemoteHost) {
|
||||
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 */
|
||||
public boolean isInDropList(RemoteHostId peer) { synchronized (_dropList) { return _dropList.contains(peer); } }
|
||||
boolean isInDropList(RemoteHostId peer) { synchronized (_dropList) { return _dropList.contains(peer); } }
|
||||
|
||||
void dropPeer(Hash peer, boolean shouldShitlist, String why) {
|
||||
PeerState state = getPeerState(peer);
|
||||
@ -2235,8 +2232,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
|
||||
_testEvent.runTest();
|
||||
}
|
||||
|
||||
/* FIXME Exporting non-public type through public API FIXME */
|
||||
public PeerState pickTestPeer(RemoteHostId dontInclude) {
|
||||
PeerState pickTestPeer(RemoteHostId dontInclude) {
|
||||
List peers = null;
|
||||
synchronized (_peersByIdent) {
|
||||
peers = new ArrayList(_peersByIdent.values());
|
||||
|
Reference in New Issue
Block a user