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">
<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>

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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);
}

View File

@@ -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) {

View File

@@ -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 {

View File

@@ -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&nbsp;: <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&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)
//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>&nbsp;<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" +

View File

@@ -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;

View File

@@ -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);
}
}

View File

@@ -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 -->

View File

@@ -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);
}

View File

@@ -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() {

View File

@@ -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);

View File

@@ -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;

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" />" />
<%=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")%>:

View File

@@ -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">

View File

@@ -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>

View File

@@ -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

View File

@@ -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));