propagate from branch 'i2p.i2p.zzz.test3' (head d65e8465671ba0b8f6f013b56045bf867e10a78e)

to branch 'i2p.i2p' (head e2ee75916f2ff6bd698585808a81071b44c978b1)
This commit is contained in:
zzz
2009-08-19 23:44:19 +00:00
109 changed files with 1699 additions and 1815 deletions

View File

@ -1,4 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project-private xmlns="http://www.netbeans.org/ns/project-private/1"> <project-private xmlns="http://www.netbeans.org/ns/project-private/1">
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/> <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/1">
<file>file:/usblv/NetBeansProjects/wi2p.i2p/apps/BOB/src/net/i2p/BOB/BOB.java</file>
</open-files>
</project-private> </project-private>

File diff suppressed because it is too large Load Diff

View File

@ -85,8 +85,8 @@ public class I2PSnarkServlet extends HttpServlet {
out.write("<meta http-equiv=\"refresh\" content=\"60;" + req.getRequestURI() + peerString + "\">\n"); out.write("<meta http-equiv=\"refresh\" content=\"60;" + req.getRequestURI() + peerString + "\">\n");
out.write(HEADER); out.write(HEADER);
out.write("</head><body>"); out.write("</head><body>");
out.write("<center><div class=\"page\"><table border=\"0\" width=\"100%\"><tr><td align=\"center\" class=\"snarkTitle\"><a href=\"" + req.getRequestURI() + peerString + "\" title=\"I2PSnark (Manual Page Refresh)\"><img src=\"/themes/console/images/i2psnark.png\" alt=\"I2PSnark Anonymous BitTorrent Client\" border=\"0\" class=\"snarklogo\"></a></table>"); out.write("<center><div class=\"page\">");
out.write("<div class=\"snarknavbar\"><a href=\"http://forum.i2p/viewforum.php?f=21\" class=\"snarkRefresh\" target=\"_blank\">Forum</a>\n"); out.write("<div class=\"snarknavbar\"><a href=\"" + req.getRequestURI() + peerString + "\" title=\"Refresh page\" class=\"snarkRefresh\">I2PSnark</a> <a href=\"http://forum.i2p/viewforum.php?f=21\" class=\"snarkRefresh\" target=\"_blank\">Forum</a>\n");
Map trackers = _manager.getTrackers(); Map trackers = _manager.getTrackers();
for (Iterator iter = trackers.entrySet().iterator(); iter.hasNext(); ) { for (Iterator iter = trackers.entrySet().iterator(); iter.hasNext(); ) {
Map.Entry entry = (Map.Entry)iter.next(); Map.Entry entry = (Map.Entry)iter.next();
@ -112,18 +112,18 @@ public class I2PSnarkServlet extends HttpServlet {
out.write(TABLE_HEADER); out.write(TABLE_HEADER);
if (_manager.util().connected() && snarks.size() > 0) { if (_manager.util().connected() && snarks.size() > 0) {
if (peerParam != null) if (peerParam != null)
out.write("(<a href=\"" + req.getRequestURI() + "\">Hide Peers</a>)<br />\n"); out.write("(<a href=\"" + req.getRequestURI() + "\">Hide Peers</a>)<br>\n");
else else
out.write("(<a href=\"" + req.getRequestURI() + "?p=1" + "\">Show Peers</a>)<br />\n"); out.write("(<a href=\"" + req.getRequestURI() + "?p=1" + "\">Show Peers</a>)<br>\n");
} }
out.write(TABLE_HEADER2); out.write(TABLE_HEADER2);
out.write("<th align=\"left\">"); out.write("<th align=\"center\">");
if (_manager.util().connected()) if (_manager.util().connected())
out.write("<a href=\"" + uri + "?action=StopAll&nonce=" + _nonce + out.write("<a href=\"" + uri + "?action=StopAll&nonce=" + _nonce +
"\" title=\"Stop all torrents and the i2p tunnel\">Stop All</a>"); "\" title=\"Stop all torrents and the I2P tunnel\">Stop All</a>");
else if (snarks.size() > 0) else if (snarks.size() > 0)
out.write("<a href=\"" + uri + "?action=StartAll&nonce=" + _nonce + out.write("<a href=\"" + uri + "?action=StartAll&nonce=" + _nonce +
"\" title=\"Start all torrents and the i2p tunnel\">Start All</a>"); "\" title=\"Start all torrents and the I2P tunnel\">Start All</a>");
else else
out.write("&nbsp;"); out.write("&nbsp;");
out.write("</th></tr></thead>\n"); out.write("</th></tr></thead>\n");
@ -460,7 +460,7 @@ public class I2PSnarkServlet extends HttpServlet {
else { else {
if (err.length() > MAX_DISPLAYED_ERROR_LENGTH) if (err.length() > MAX_DISPLAYED_ERROR_LENGTH)
err = err.substring(0, MAX_DISPLAYED_ERROR_LENGTH) + "&hellip;"; err = err.substring(0, MAX_DISPLAYED_ERROR_LENGTH) + "&hellip;";
statusString = "TrackerErr<br />(" + err + ")"; statusString = "TrackerErr<br>(" + err + ")";
} }
} else if (remaining <= 0) { } else if (remaining <= 0) {
if (isRunning && curPeers > 0 && !showPeers) if (isRunning && curPeers > 0 && !showPeers)
@ -492,7 +492,7 @@ public class I2PSnarkServlet extends HttpServlet {
String rowClass = (row % 2 == 0 ? "snarkTorrentEven" : "snarkTorrentOdd"); String rowClass = (row % 2 == 0 ? "snarkTorrentEven" : "snarkTorrentOdd");
out.write("<tr class=\"" + rowClass + "\">"); out.write("<tr class=\"" + rowClass + "\">");
out.write("<td align=\"left\" class=\"snarkTorrentStatus " + rowClass + "\">"); out.write("<td align=\"center\" class=\"snarkTorrentStatus " + rowClass + "\">");
out.write(statusString + "</td>\n\t"); out.write(statusString + "</td>\n\t");
out.write("<td align=\"left\" class=\"snarkTorrentName " + rowClass + "\">"); out.write("<td align=\"left\" class=\"snarkTorrentName " + rowClass + "\">");
@ -526,7 +526,7 @@ public class I2PSnarkServlet extends HttpServlet {
} }
out.write("</td>\n\t"); out.write("</td>\n\t");
out.write("<td align=\"right\" class=\"snarkTorrentETA " + rowClass + "\">"); out.write("<td align=\"center\" class=\"snarkTorrentETA " + rowClass + "\">");
if(isRunning && remainingSeconds > 0) if(isRunning && remainingSeconds > 0)
out.write(DataHelper.formatDuration(remainingSeconds*1000)); // (eta 6h) out.write(DataHelper.formatDuration(remainingSeconds*1000)); // (eta 6h)
out.write("</td>\n\t"); out.write("</td>\n\t");
@ -546,7 +546,7 @@ public class I2PSnarkServlet extends HttpServlet {
if(isRunning) if(isRunning)
out.write(formatSize(upBps) + "ps"); out.write(formatSize(upBps) + "ps");
out.write("</td>\n\t"); out.write("</td>\n\t");
out.write("<td align=\"left\" class=\"snarkTorrentAction " + rowClass + "\">"); out.write("<td align=\"center\" class=\"snarkTorrentAction " + rowClass + "\">");
String parameters = "&nonce=" + _nonce + "&torrent=" + Base64.encode(snark.meta.getInfoHash()); String parameters = "&nonce=" + _nonce + "&torrent=" + Base64.encode(snark.meta.getInfoHash());
if (showPeers) if (showPeers)
parameters = parameters + "&p=1"; parameters = parameters + "&p=1";
@ -558,7 +558,7 @@ public class I2PSnarkServlet extends HttpServlet {
out.write("<a href=\"" + uri + "?action=Start" + parameters out.write("<a href=\"" + uri + "?action=Start" + parameters
+ "\" title=\"Start the torrent\">Start</a> "); + "\" title=\"Start the torrent\">Start</a> ");
out.write("<a href=\"" + uri + "?action=Remove" + parameters out.write("<a href=\"" + uri + "?action=Remove" + parameters
+ "\" title=\"Remove the torrent from the active list, deleting the .torrent file\">Remove</a><br />"); + "\" title=\"Remove the torrent from the active list, deleting the .torrent file\">Remove</a><br>");
out.write("<a href=\"" + uri + "?action=Delete" + parameters out.write("<a href=\"" + uri + "?action=Delete" + parameters
+ "\" title=\"Delete the .torrent file and the associated data file(s)\">Delete</a> "); + "\" title=\"Delete the .torrent file and the associated data file(s)\">Delete</a> ");
} }
@ -571,9 +571,9 @@ public class I2PSnarkServlet extends HttpServlet {
if (!peer.isConnected()) if (!peer.isConnected())
continue; continue;
out.write("<tr class=\"" + rowClass + "\">"); out.write("<tr class=\"" + rowClass + "\">");
out.write("<td class=\"snarkTorrentStatus " + rowClass + "\">"); out.write("<td align=\"center\" class=\"snarkTorrentStatus " + rowClass + "\">");
out.write("</td>\n\t"); out.write("</td>\n\t");
out.write("<td align=\"right\" class=\"snarkTorrentStatus " + rowClass + "\">"); out.write("<td align=\"center\" class=\"snarkTorrentStatus " + rowClass + "\">");
String ch = peer.toString().substring(0, 4); String ch = peer.toString().substring(0, 4);
String client; String client;
if ("AwMD".equals(ch)) if ("AwMD".equals(ch))
@ -592,7 +592,7 @@ public class I2PSnarkServlet extends HttpServlet {
client = "Robert"; client = "Robert";
else else
client = "Unknown (" + ch + ')'; client = "Unknown (" + ch + ')';
out.write("<font size=-1>" + client + "</font>&nbsp;&nbsp;<tt>" + peer.toString().substring(5, 9) + "</tt>"); out.write("<font size=-1>" + client + "</font>&nbsp;&nbsp;" + peer.toString().substring(5, 9) + "");
if (showDebug) if (showDebug)
out.write(" inactive " + (peer.getInactiveTime() / 1000) + "s"); out.write(" inactive " + (peer.getInactiveTime() / 1000) + "s");
out.write("</td>\n\t"); out.write("</td>\n\t");
@ -660,13 +660,13 @@ public class I2PSnarkServlet extends HttpServlet {
// *not* enctype="multipart/form-data", so that the input type=file sends the filename, not the file // *not* enctype="multipart/form-data", so that the input type=file sends the filename, not the file
out.write("<form action=\"" + uri + "\" method=\"POST\">\n"); out.write("<form action=\"" + uri + "\" method=\"POST\">\n");
out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" />\n"); out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" />\n");
out.write("<div class=\"addtorrentsection\"><span class=\"snarkConfigTitle\">Add Torrent:</span><br />\n"); out.write("<div class=\"addtorrentsection\"><span class=\"snarkConfigTitle\">Add Torrent:</span><br>\n");
out.write("From URL&nbsp;: <input type=\"text\" name=\"newURL\" size=\"80\" value=\"" + newURL + "\" /> \n"); out.write("From URL&nbsp;: <input type=\"text\" name=\"newURL\" size=\"80\" value=\"" + newURL + "\" /> \n");
// not supporting from file at the moment, since the file name passed isn't always absolute (so it may not resolve) // not supporting from file at the moment, since the file name passed isn't always absolute (so it may not resolve)
//out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br />\n"); //out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
out.write("<input type=\"submit\" value=\"Add torrent\" name=\"action\" /><br />\n"); out.write("<input type=\"submit\" value=\"Add torrent\" name=\"action\" /><br>\n");
out.write("<span class=\"snarkAddInfo\">Alternately, you can copy .torrent files to " + _manager.getDataDir().getAbsolutePath() + "<br />\n"); out.write("<span class=\"snarkAddInfo\">Alternately, you can copy .torrent files to " + _manager.getDataDir().getAbsolutePath() + "<br>\n");
out.write("Removing that .torrent file will cause the torrent to stop.<br /></span>\n"); out.write("Removing that .torrent file will cause the torrent to stop.<br></span>\n");
out.write("</form>\n</span></div>"); out.write("</form>\n</span></div>");
} }
@ -680,11 +680,11 @@ public class I2PSnarkServlet extends HttpServlet {
// *not* enctype="multipart/form-data", so that the input type=file sends the filename, not the file // *not* enctype="multipart/form-data", so that the input type=file sends the filename, not the file
out.write("<form action=\"" + uri + "\" method=\"POST\">\n"); out.write("<form action=\"" + uri + "\" method=\"POST\">\n");
out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" />\n"); out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" />\n");
out.write("<span class=\"snarkConfigTitle\">Create Torrent:</span><br />\n"); out.write("<span class=\"snarkConfigTitle\">Create Torrent:</span><br>\n");
//out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br />\n"); //out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
out.write("Data to seed: " + _manager.getDataDir().getAbsolutePath() + File.separatorChar out.write("Data to seed: " + _manager.getDataDir().getAbsolutePath() + File.separatorChar
+ "<input type=\"text\" name=\"baseFile\" size=\"20\" value=\"" + baseFile + "<input type=\"text\" name=\"baseFile\" size=\"20\" value=\"" + baseFile
+ "\" title=\"File to seed (must be within the specified path)\" /><br />\n"); + "\" title=\"File to seed (must be within the specified path)\" /><br>\n");
out.write("Tracker: <select name=\"announceURL\"><option value=\"\">Select a tracker</option>\n"); out.write("Tracker: <select name=\"announceURL\"><option value=\"\">Select a tracker</option>\n");
Map trackers = _manager.getTrackers(); Map trackers = _manager.getTrackers();
for (Iterator iter = trackers.entrySet().iterator(); iter.hasNext(); ) { for (Iterator iter = trackers.entrySet().iterator(); iter.hasNext(); ) {
@ -714,15 +714,15 @@ public class I2PSnarkServlet extends HttpServlet {
out.write("<form action=\"" + uri + "\" method=\"POST\">\n"); out.write("<form action=\"" + uri + "\" method=\"POST\">\n");
out.write("<div class=\"configsection\"><span class=\"snarkConfig\">\n"); out.write("<div class=\"configsection\"><span class=\"snarkConfig\">\n");
out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" />\n"); out.write("<input type=\"hidden\" name=\"nonce\" value=\"" + _nonce + "\" />\n");
out.write("<span class=\"snarkConfigTitle\">Configuration:</span><br />\n"); out.write("<span class=\"snarkConfigTitle\">Configuration:</span><br>\n");
out.write("Data directory: <input type=\"text\" size=\"40\" name=\"dataDir\" value=\"" + dataDir + "\" "); out.write("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("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("Auto start: <input type=\"checkbox\" class=\"optbox\" name=\"autoStart\" value=\"true\" "
+ (autoStart ? "checked " : "") + (autoStart ? "checked " : "")
+ "title=\"If true, automatically start torrents that are added\" />"); + "title=\"If true, automatically start torrents that are added\" />");
//Auto add: <input type="checkbox" name="autoAdd" value="true" title="If true, automatically add torrents that are found in the data directory" /> //Auto add: <input type="checkbox" name="autoAdd" value="true" title="If true, automatically add torrents that are found in the data directory" />
//Auto stop: <input type="checkbox" name="autoStop" value="true" title="If true, automatically stop torrents that are removed from the data directory" /> //Auto stop: <input type="checkbox" name="autoStop" value="true" title="If true, automatically stop torrents that are removed from the data directory" />
//out.write("<br />\n"); //out.write("<br>\n");
/* /*
out.write("Seed percentage: <select name=\"seedPct\" disabled=\"true\" >\n\t"); out.write("Seed percentage: <select name=\"seedPct\" disabled=\"true\" >\n\t");
if (seedPct <= 0) if (seedPct <= 0)
@ -737,28 +737,28 @@ public class I2PSnarkServlet extends HttpServlet {
out.write("<option value=\"150\" selected=\"true\">150%</option>\n\t"); out.write("<option value=\"150\" selected=\"true\">150%</option>\n\t");
else else
out.write("<option value=\"150\">150%</option>\n\t"); out.write("<option value=\"150\">150%</option>\n\t");
out.write("</select><br />\n"); out.write("</select><br>\n");
*/ */
out.write("Total uploader limit: <input type=\"text\" name=\"upLimit\" value=\"" out.write("Total uploader limit: <input type=\"text\" name=\"upLimit\" value=\""
+ _manager.util().getMaxUploaders() + "\" size=\"3\" maxlength=\"3\" /> peers<br />\n"); + _manager.util().getMaxUploaders() + "\" size=\"3\" maxlength=\"3\" /> peers<br>\n");
out.write("Up bandwidth limit: <input type=\"text\" name=\"upBW\" value=\"" out.write("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"); + _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("Use open trackers also: <input type=\"checkbox\" class=\"optbox\" name=\"useOpenTrackers\" value=\"true\" "
+ (useOpenTrackers ? "checked " : "") + (useOpenTrackers ? "checked " : "")
+ "title=\"If true, uses open trackers in addition\" /> "); + "title=\"If true, uses open trackers in addition\" /> ");
out.write("Announce URLs: <input type=\"text\" name=\"openTrackers\" value=\"" out.write("Announce URLs: <input type=\"text\" name=\"openTrackers\" value=\""
+ openTrackers + "\" size=\"50\" /><br />\n"); + openTrackers + "\" size=\"50\" /><br>\n");
//out.write("\n"); //out.write("\n");
out.write("EepProxy host: <input type=\"text\" name=\"eepHost\" value=\"" out.write("EepProxy host: <input type=\"text\" name=\"eepHost\" value=\""
+ _manager.util().getEepProxyHost() + "\" size=\"15\" /> "); + _manager.util().getEepProxyHost() + "\" size=\"15\" /> ");
out.write("port: <input type=\"text\" name=\"eepPort\" value=\"" out.write("port: <input type=\"text\" name=\"eepPort\" value=\""
+ _manager.util().getEepProxyPort() + "\" size=\"5\" maxlength=\"5\" /><br />\n"); + _manager.util().getEepProxyPort() + "\" size=\"5\" maxlength=\"5\" /><br>\n");
out.write("I2CP host: <input type=\"text\" name=\"i2cpHost\" value=\"" out.write("I2CP host: <input type=\"text\" name=\"i2cpHost\" value=\""
+ _manager.util().getI2CPHost() + "\" size=\"15\" /> "); + _manager.util().getI2CPHost() + "\" size=\"15\" /> ");
out.write("port: <input type=\"text\" name=\"i2cpPort\" value=\"" + out.write("port: <input type=\"text\" name=\"i2cpPort\" value=\"" +
+ _manager.util().getI2CPPort() + "\" size=\"5\" maxlength=\"5\" /> <br />\n"); + _manager.util().getI2CPPort() + "\" size=\"5\" maxlength=\"5\" /> <br>\n");
StringBuilder opts = new StringBuilder(64); StringBuilder opts = new StringBuilder(64);
Map options = new TreeMap(_manager.util().getI2CPOptions()); Map options = new TreeMap(_manager.util().getI2CPOptions());
for (Iterator iter = options.entrySet().iterator(); iter.hasNext(); ) { for (Iterator iter = options.entrySet().iterator(); iter.hasNext(); ) {
@ -768,7 +768,7 @@ public class I2PSnarkServlet extends HttpServlet {
opts.append(key).append('=').append(val).append(' '); opts.append(key).append('=').append(val).append(' ');
} }
out.write("I2CP opts: <input type=\"text\" name=\"i2cpOpts\" size=\"80\" value=\"" out.write("I2CP opts: <input type=\"text\" name=\"i2cpOpts\" size=\"80\" value=\""
+ opts.toString() + "\" /><br />\n"); + opts.toString() + "\" /><br>\n");
out.write("<input type=\"submit\" value=\"Save configuration\" name=\"action\" />\n"); out.write("<input type=\"submit\" value=\"Save configuration\" name=\"action\" />\n");
out.write("</span>\n"); out.write("</span>\n");
out.write("</form></div>"); out.write("</form></div>");
@ -795,11 +795,11 @@ public class I2PSnarkServlet extends HttpServlet {
private static final String TABLE_HEADER = "<table border=\"0\" class=\"snarkTorrents\" width=\"100%\" cellpadding=\"0 10px\">\n" + private static final String TABLE_HEADER = "<table border=\"0\" class=\"snarkTorrents\" width=\"100%\" cellpadding=\"0 10px\">\n" +
"<thead>\n" + "<thead>\n" +
"<tr><th align=\"left\">Status \n"; "<tr><th align=\"center\">Status \n";
private static final String TABLE_HEADER2 = "</th>\n" + private static final String TABLE_HEADER2 = "</th>\n" +
" <th align=\"left\">Torrent</th>\n" + " <th align=\"left\">Torrent</th>\n" +
" <th align=\"right\">ETA</th>\n" + " <th align=\"center\">ETA</th>\n" +
" <th align=\"right\">Downloaded</th>\n" + " <th align=\"right\">Downloaded</th>\n" +
" <th align=\"right\">Uploaded</th>\n" + " <th align=\"right\">Uploaded</th>\n" +
" <th align=\"right\">Down Rate</th>\n" + " <th align=\"right\">Down Rate</th>\n" +

View File

@ -345,7 +345,7 @@ public class I2PTunnelConnectClient extends I2PTunnelClientBase implements Runna
if (targetRequest != null) { if (targetRequest != null) {
out.write(targetRequest.getBytes()); out.write(targetRequest.getBytes());
if (usingWWWProxy) if (usingWWWProxy)
out.write(("<br>WWW proxy: " + wwwProxy).getBytes()); out.write(("<br />WWW proxy: " + wwwProxy).getBytes());
} }
out.write("</div>".getBytes()); out.write("</div>".getBytes());
out.write("\n</body></html>\n".getBytes()); out.write("\n</body></html>\n".getBytes());

View File

@ -388,7 +388,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
String conflictURL = protocol + alias + ".i2p/?" + initialFragments; String conflictURL = protocol + alias + ".i2p/?" + initialFragments;
out.write(header); out.write(header);
out.write(("To visit the destination in your host database, click <a href=\"" + trustedURL + "\">here</a>. To visit the conflicting addresshelper link by temporarily giving it a random alias, click <a href=\"" + conflictURL + "\">here</a>.<P/>").getBytes()); out.write(("To visit the destination in your host database, click <a href=\"" + trustedURL + "\">here</a>. To visit the conflicting addresshelper link by temporarily giving it a random alias, click <a href=\"" + conflictURL + "\">here</a>.<P/>").getBytes());
out.write("</div><div class=\"proxyfooter\"><p><i>I2P HTTP Proxy Server<br>Generated on: ".getBytes()); out.write("</div><div class=\"proxyfooter\"><p><i>I2P HTTP Proxy Server<br />Generated on: ".getBytes());
out.write(new Date().toString().getBytes()); out.write(new Date().toString().getBytes());
out.write("</i></div></body></html>\n".getBytes()); out.write("</i></div></body></html>\n".getBytes());
out.flush(); out.flush();
@ -705,9 +705,9 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
out.write("\">http://".getBytes()); out.write("\">http://".getBytes());
out.write(uri.getBytes()); out.write(uri.getBytes());
out.write("</a>".getBytes()); out.write("</a>".getBytes());
if (usingWWWProxy) out.write(("<br>WWW proxy: " + wwwProxy).getBytes()); if (usingWWWProxy) out.write(("<br />WWW proxy: " + wwwProxy).getBytes());
if (showAddrHelper) { if (showAddrHelper) {
out.write("<br><br>Click a link below to look for an address helper by using a \"jump\" service:<br>".getBytes()); out.write("<br /><br />Click a link below to look for an address helper by using a \"jump\" service:<br />".getBytes());
for (int i = 0; i < jumpServers.length; i++) { for (int i = 0; i < jumpServers.length; i++) {
// Skip jump servers we don't know // Skip jump servers we don't know
String jumphost = jumpServers[i].substring(7); // "http://" String jumphost = jumpServers[i].substring(7); // "http://"
@ -719,7 +719,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
continue; continue;
} }
out.write("<br><a href=\"".getBytes()); out.write("<br /><a href=\"".getBytes());
out.write(jumpServers[i].getBytes()); out.write(jumpServers[i].getBytes());
out.write(uri.getBytes()); out.write(uri.getBytes());
out.write("\">".getBytes()); out.write("\">".getBytes());
@ -729,7 +729,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
} }
} }
} }
out.write("</div><div class=\"proxyfooter\"><p><i>I2P HTTP Proxy Server<br>Generated on: ".getBytes()); out.write("</div><div class=\"proxyfooter\"><p><i>I2P HTTP Proxy Server<br />Generated on: ".getBytes());
out.write(new Date().toString().getBytes()); out.write(new Date().toString().getBytes());
out.write("</i></div></body></html>\n".getBytes()); out.write("</i></div></body></html>\n".getBytes());
out.flush(); out.flush();

View File

@ -192,7 +192,7 @@
<div id="tunnelAdvancedNetworking" class="panel"> <div id="tunnelAdvancedNetworking" class="panel">
<div class="header"> <div class="header">
<h4>Advanced networking options</h4> <h4>Advanced networking options</h4><br />
<span class="comment">(NOTE: when this client proxy is configured to share tunnels, then these options are for all the shared proxy clients!)</span> <span class="comment">(NOTE: when this client proxy is configured to share tunnels, then these options are for all the shared proxy clients!)</span>
</div> </div>
@ -335,10 +335,10 @@
<table border="0"><tr><!-- I give up --> <table border="0"><tr><!-- I give up -->
<td><input value="1" type="radio" id="startOnLoad" name="newDest" title="New Destination" <td><input value="1" type="radio" id="startOnLoad" name="newDest" title="New Destination"
<%=(editBean.getNewDest(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" /> <%=(editBean.getNewDest(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />
<td valign="center">Enable <td>Enable
<td><input value="0" type="radio" id="startOnLoad" name="newDest" title="New Destination" <td><input value="0" type="radio" id="startOnLoad" name="newDest" title="New Destination"
<%=(editBean.getNewDest(curTunnel) || editBean.getPersistentClientKey(curTunnel) ? "" : " checked=\"checked\"")%> class="tickbox" /> <%=(editBean.getNewDest(curTunnel) || editBean.getPersistentClientKey(curTunnel) ? "" : " checked=\"checked\"")%> class="tickbox" />
<td valign="center">Disable <td>Disable
</table> </table>
</div> </div>
<div id="portField" class="rowItem"> <div id="portField" class="rowItem">
@ -411,7 +411,8 @@
<div class="header"></div> <div class="header"></div>
<div class="footer"> <div class="footer">
<div class="toolbox"> <div class="toolbox">
<span class="comment">NOTE: If tunnel is currently running, most changes will not take effect until tunnel is stopped and restarted</span> <span class="comment">NOTE: If tunnel is currently running, most changes will not take effect until tunnel is stopped and restarted.</span>
<div class="separator"><hr /></div>
<input type="hidden" value="true" name="removeConfirm" /> <input type="hidden" value="true" name="removeConfirm" />
<button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><span class="accessKey">S</span>ave</button> <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><span class="accessKey">S</span>ave</button>
<button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><span class="accessKey">D</span>elete</button> <button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><span class="accessKey">D</span>elete</button>

View File

@ -399,7 +399,8 @@
<div class="header"></div> <div class="header"></div>
<div class="footer"> <div class="footer">
<div class="toolbox"> <div class="toolbox">
<span class="comment">NOTE: If tunnel is currently running, most changes will not take effect until tunnel is stopped and restarted</span> <span class="comment">NOTE: If tunnel is currently running, most changes will not take effect until tunnel is stopped and restarted.</span>
<div class="separator"><hr /></div>
<input type="hidden" value="true" name="removeConfirm" /> <input type="hidden" value="true" name="removeConfirm" />
<button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><span class="accessKey">S</span>ave</button> <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><span class="accessKey">S</span>ave</button>
<button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><span class="accessKey">D</span>elete</button> <button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><span class="accessKey">D</span>elete</button>

View File

@ -4,7 +4,7 @@
<jsp:setProperty name="indexBean" property="*" /> <jsp:setProperty name="indexBean" property="*" />
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head> <head>
<title>I2PTunnel Webmanager - List</title> <title>I2P Tunnel Manager - List</title>
<meta htt <meta htt
p-equiv="Content-Type" content="text/html; charset=UTF-8" /> p-equiv="Content-Type" content="text/html; charset=UTF-8" />
@ -106,7 +106,7 @@ p-equiv="Content-Type" content="text/html; charset=UTF-8" />
<a class="control" title="Test HTTP server through I2P" href="http://<%=indexBean.getDestHashBase32(curServer)%>.b32.i2p">Preview</a> <a class="control" title="Test HTTP server through I2P" href="http://<%=indexBean.getDestHashBase32(curServer)%>.b32.i2p">Preview</a>
<% <%
} else if (indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) { } else if (indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
%><span class="text">Base32 Address:<br><%=indexBean.getDestHashBase32(curServer)%>.b32.i2p</span> %><span class="text">Base32 Address:<br /><%=indexBean.getDestHashBase32(curServer)%>.b32.i2p</span>
<% <%
} else { } else {
%><span class="comment">No Preview</span> %><span class="comment">No Preview</span>

View File

@ -117,7 +117,7 @@ public class StreamSinkClient {
} }
/** /**
* Fire up the client. <code>Usage: StreamSinkClient [i2cpHost i2cpPort] sendSizeKB writeDelayMs serverDestFile [concurrentSends]</code> <br /> * Fire up the client. <code>Usage: StreamSinkClient [i2cpHost i2cpPort] sendSizeKB writeDelayMs serverDestFile [concurrentSends]</code> <br>
* <ul> * <ul>
* <li><b>sendSizeKB</b>: how many KB to send, or -1 for unlimited</li> * <li><b>sendSizeKB</b>: how many KB to send, or -1 for unlimited</li>
* <li><b>writeDelayMs</b>: how long to wait between each .write (0 for no delay)</li> * <li><b>writeDelayMs</b>: how long to wait between each .write (0 for no delay)</li>

View File

@ -104,7 +104,7 @@ public class StreamSinkSend {
} }
/** /**
* Fire up the client. <code>Usage: StreamSinkClient sendFile writeDelayMs serverDestFile</code> <br /> * Fire up the client. <code>Usage: StreamSinkClient sendFile writeDelayMs serverDestFile</code> <br>
* <ul> * <ul>
* <li><b>sendFile</b>: filename to send</li> * <li><b>sendFile</b>: filename to send</li>
* <li><b>writeDelayMs</b>: how long to wait between each .write (0 for no delay)</li> * <li><b>writeDelayMs</b>: how long to wait between each .write (0 for no delay)</li>

View File

@ -155,7 +155,7 @@ public class StreamSinkServer {
} }
/** /**
* Fire up the streaming server. <code>Usage: StreamSinkServer [i2cpHost i2cpPort] sinkDir ourDestFile [numHandlers]</code><br /> * Fire up the streaming server. <code>Usage: StreamSinkServer [i2cpHost i2cpPort] sinkDir ourDestFile [numHandlers]</code><br>
* <ul> * <ul>
* <li><b>sinkDir</b>: Directory to store received files in</li> * <li><b>sinkDir</b>: Directory to store received files in</li>
* <li><b>ourDestFile</b>: filename to write our binary destination to</li> * <li><b>ourDestFile</b>: filename to write our binary destination to</li>

View File

@ -17,6 +17,7 @@ public class ConfigAdvancedHandler extends FormHandler {
private boolean _shouldSave; private boolean _shouldSave;
private String _config; private String _config;
@Override
protected void processForm() { protected void processForm() {
if (_shouldSave) { if (_shouldSave) {
saveChanges(); saveChanges();

View File

@ -4,7 +4,6 @@ import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.TreeSet; import java.util.TreeSet;
import net.i2p.router.RouterContext;
public class ConfigAdvancedHelper extends HelperBase { public class ConfigAdvancedHelper extends HelperBase {
public ConfigAdvancedHelper() {} public ConfigAdvancedHelper() {}

View File

@ -20,13 +20,14 @@ import org.mortbay.jetty.Server;
* Saves changes to clients.config or webapps.config * Saves changes to clients.config or webapps.config
*/ */
public class ConfigClientsHandler extends FormHandler { public class ConfigClientsHandler extends FormHandler {
private Log _log; private Log configClient_log;
private Map _settings; private Map _settings;
public ConfigClientsHandler() { public ConfigClientsHandler() {
_log = ContextHelper.getContext(null).logManager().getLog(ConfigClientsHandler.class); configClient_log = ContextHelper.getContext(null).logManager().getLog(ConfigClientsHandler.class);
} }
@Override
protected void processForm() { protected void processForm() {
if (_action.startsWith("Save Client")) { if (_action.startsWith("Save Client")) {
saveClientChanges(); saveClientChanges();
@ -80,7 +81,7 @@ public class ConfigClientsHandler extends FormHandler {
return; return;
} }
ClientAppConfig ca = (ClientAppConfig) clients.get(i); ClientAppConfig ca = (ClientAppConfig) clients.get(i);
LoadClientAppsJob.runClient(ca.className, ca.clientName, LoadClientAppsJob.parseArgs(ca.args), _log); LoadClientAppsJob.runClient(ca.className, ca.clientName, LoadClientAppsJob.parseArgs(ca.args), configClient_log);
addFormNotice("Client " + ca.clientName + " started."); addFormNotice("Client " + ca.clientName + " started.");
} }

View File

@ -6,7 +6,6 @@ import java.util.Properties;
import java.util.Set; import java.util.Set;
import java.util.TreeSet; import java.util.TreeSet;
import net.i2p.router.RouterContext;
import net.i2p.router.startup.ClientAppConfig; import net.i2p.router.startup.ClientAppConfig;
public class ConfigClientsHelper extends HelperBase { public class ConfigClientsHelper extends HelperBase {

View File

@ -0,0 +1,61 @@
package net.i2p.router.web;
/**
* Handler to deal with console config.
*
*/
public class ConfigConsoleHandler extends FormHandler {
private boolean _forceRestart;
private boolean _shouldSave;
private String _configPass;
// This is possibly the wrong place for this...
// private String _configPort;
@Override
protected void processForm() {
if(_shouldSave) {
saveChanges();
} else {
// noop
}
}
public void setShouldsave(String moo) {
_shouldSave = true;
}
public void setRestart(String moo) {
_forceRestart = true;
}
public void setConfigPass(String val) {
_configPass = val.trim();
}
/**
* The user made changes to the config and wants to save them, so
* lets go ahead and do so.
*
*/
private void saveChanges() {
if(_configPass != null) {
_context.router().setConfigSetting("consolePassword", _configPass);
} else {
_context.router().setConfigSetting("consolePassword", "");
}
boolean saved = _context.router().saveConfig();
if(saved) {
addFormNotice("Configuration saved successfully");
} else {
addFormNotice("Error saving the configuration (applied but not saved) - please see the error logs");
}
if(_forceRestart) {
addFormNotice("Performing a soft restart");
_context.router().restart();
addFormNotice("Soft restart complete");
}
}
}

View File

@ -0,0 +1,14 @@
package net.i2p.router.web;
public class ConfigConsoleHelper extends HelperBase {
private String consolePassword="consolePassword";
public ConfigConsoleHelper() {}
public String getSettings() {
StringBuilder buf = new StringBuilder(4*1024);
buf.append(consolePassword);
return buf.toString();
}
}

View File

@ -1,6 +1,5 @@
package net.i2p.router.web; package net.i2p.router.web;
import net.i2p.I2PAppContext;
import net.i2p.data.DataFormatException; import net.i2p.data.DataFormatException;
import net.i2p.data.Hash; import net.i2p.data.Hash;
import net.i2p.data.SessionKey; import net.i2p.data.SessionKey;
@ -13,6 +12,7 @@ public class ConfigKeyringHandler extends FormHandler {
private String _peer; private String _peer;
private String _key; private String _key;
@Override
protected void processForm() { protected void processForm() {
if ("Add key".equals(_action)) { if ("Add key".equals(_action)) {
if (_peer == null || _key == null) { if (_peer == null || _key == null) {

View File

@ -4,7 +4,6 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import net.i2p.router.RouterContext;
public class ConfigKeyringHelper extends HelperBase { public class ConfigKeyringHelper extends HelperBase {
public ConfigKeyringHelper() {} public ConfigKeyringHelper() {}

View File

@ -18,6 +18,7 @@ public class ConfigLoggingHandler extends FormHandler {
private String _dateFormat; private String _dateFormat;
private String _fileSize; private String _fileSize;
@Override
protected void processForm() { protected void processForm() {
if (_shouldSave) { if (_shouldSave) {
saveChanges(); saveChanges();

View File

@ -4,7 +4,6 @@ import java.util.Iterator;
import java.util.Properties; import java.util.Properties;
import java.util.TreeSet; import java.util.TreeSet;
import net.i2p.router.RouterContext;
public class ConfigLoggingHelper extends HelperBase { public class ConfigLoggingHelper extends HelperBase {
public ConfigLoggingHelper() {} public ConfigLoggingHelper() {}
@ -43,7 +42,7 @@ public class ConfigLoggingHelper extends HelperBase {
String level = limits.getProperty(prefix); String level = limits.getProperty(prefix);
buf.append(prefix).append('=').append(level).append('\n'); buf.append(prefix).append('=').append(level).append('\n');
} }
buf.append("</textarea><br />\n"); buf.append("</textarea><br>\n");
buf.append("<i>Add additional logging statements above. Example: net.i2p.router.tunnel=WARN</i><br>"); buf.append("<i>Add additional logging statements above. Example: net.i2p.router.tunnel=WARN</i><br>");
buf.append("<i>Or put entries in the logger.config file. Example: logger.record.net.i2p.router.tunnel=WARN</i><br>"); buf.append("<i>Or put entries in the logger.config file. Example: logger.record.net.i2p.router.tunnel=WARN</i><br>");
buf.append("<i>Valid levels are DEBUG, INFO, WARN, ERROR, CRIT</i>\n"); buf.append("<i>Valid levels are DEBUG, INFO, WARN, ERROR, CRIT</i>\n");

View File

@ -1,12 +1,10 @@
package net.i2p.router.web; package net.i2p.router.web;
import net.i2p.data.RouterInfo;
import net.i2p.router.Router; import net.i2p.router.Router;
import net.i2p.router.transport.FIFOBandwidthRefiller; import net.i2p.router.transport.FIFOBandwidthRefiller;
import net.i2p.router.transport.TransportManager; import net.i2p.router.transport.TransportManager;
import net.i2p.router.transport.udp.UDPTransport; import net.i2p.router.transport.udp.UDPTransport;
import net.i2p.router.web.ConfigServiceHandler.UpdateWrapperManagerAndRekeyTask; import net.i2p.router.web.ConfigServiceHandler.UpdateWrapperManagerAndRekeyTask;
import net.i2p.time.Timestamper;
/** /**
* Handler to deal with form submissions from the main config form and act * Handler to deal with form submissions from the main config form and act
@ -44,6 +42,7 @@ public class ConfigNetHandler extends FormHandler {
private static final boolean _ratesOnly = false; // always false - delete me private static final boolean _ratesOnly = false; // always false - delete me
private static final String PROP_HIDDEN = Router.PROP_HIDDEN_HIDDEN; // see Router for other choice private static final String PROP_HIDDEN = Router.PROP_HIDDEN_HIDDEN; // see Router for other choice
@Override
protected void processForm() { protected void processForm() {
if (_saveRequested || ( (_action != null) && ("Save changes".equals(_action)) )) { if (_saveRequested || ( (_action != null) && ("Save changes".equals(_action)) )) {
saveChanges(); saveChanges();

View File

@ -4,7 +4,6 @@ import net.i2p.data.DataHelper;
import net.i2p.data.RouterAddress; import net.i2p.data.RouterAddress;
import net.i2p.router.CommSystemFacade; import net.i2p.router.CommSystemFacade;
import net.i2p.router.Router; import net.i2p.router.Router;
import net.i2p.router.RouterContext;
import net.i2p.router.transport.Addresses; import net.i2p.router.transport.Addresses;
import net.i2p.router.transport.TransportManager; import net.i2p.router.transport.TransportManager;
import net.i2p.router.transport.udp.UDPAddress; import net.i2p.router.transport.udp.UDPAddress;

View File

@ -1,12 +1,8 @@
package net.i2p.router.web; package net.i2p.router.web;
import net.i2p.I2PAppContext;
import net.i2p.data.DataHelper;
import net.i2p.data.Hash; import net.i2p.data.Hash;
import net.i2p.data.Base64; import net.i2p.data.Base64;
import net.i2p.router.Router;
import net.i2p.router.peermanager.PeerProfile; import net.i2p.router.peermanager.PeerProfile;
import net.i2p.util.Log;
/** /**
* *
@ -16,6 +12,7 @@ public class ConfigPeerHandler extends FormHandler {
private String _speed; private String _speed;
private String _capacity; private String _capacity;
@Override
protected void processForm() { protected void processForm() {
if ("Save Configuration".equals(_action)) { if ("Save Configuration".equals(_action)) {
_context.router().saveConfig(); _context.router().saveConfig();

View File

@ -4,7 +4,6 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import net.i2p.router.RouterContext;
public class ConfigPeerHelper extends HelperBase { public class ConfigPeerHelper extends HelperBase {
public ConfigPeerHelper() {} public ConfigPeerHelper() {}

View File

@ -49,16 +49,16 @@ public class ConfigRestartBean {
long timeRemaining = ctx.router().getShutdownTimeRemaining(); long timeRemaining = ctx.router().getShutdownTimeRemaining();
if (shuttingDown) { if (shuttingDown) {
if (timeRemaining <= 0) { if (timeRemaining <= 0) {
return "<b>Shutdown imminent</b>"; return "<center><b>Shutdown imminent</b></center>";
} else { } else {
return "<b>Shutdown in " + DataHelper.formatDuration(timeRemaining) + "</b><br />" return "<center><b>Shutdown in " + DataHelper.formatDuration(timeRemaining) + "</b></center><br>"
+ buttons(urlBase, systemNonce, "shutdownImmediate,Shutdown immediately,cancelShutdown,Cancel shutdown"); + buttons(urlBase, systemNonce, "shutdownImmediate,Shutdown immediately,cancelShutdown,Cancel shutdown");
} }
} else if (restarting) { } else if (restarting) {
if (timeRemaining <= 0) { if (timeRemaining <= 0) {
return "<b>Restart imminent</b>"; return "<center><b>Restart imminent</b></center>";
} else { } else {
return "<b>Restart in " + DataHelper.formatDuration(timeRemaining) + "</b><br />" return "<center><b>Restart in " + DataHelper.formatDuration(timeRemaining) + "</b></center><br>"
+ buttons(urlBase, systemNonce, "restartImmediate,Restart immediately,cancelShutdown,Cancel restart"); + buttons(urlBase, systemNonce, "restartImmediate,Restart immediately,cancelShutdown,Cancel restart");
} }
} else { } else {

View File

@ -1,13 +1,10 @@
package net.i2p.router.web; package net.i2p.router.web;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import net.i2p.apps.systray.SysTray; import net.i2p.apps.systray.SysTray;
import net.i2p.apps.systray.UrlLauncher; import net.i2p.apps.systray.UrlLauncher;
import net.i2p.data.DataHelper;
import net.i2p.router.Router; import net.i2p.router.Router;
import net.i2p.router.startup.ClientAppConfig; import net.i2p.router.startup.ClientAppConfig;
@ -49,6 +46,7 @@ public class ConfigServiceHandler extends FormHandler {
} }
} }
@Override
protected void processForm() { protected void processForm() {
if (_action == null) return; if (_action == null) return;
@ -95,9 +93,9 @@ public class ConfigServiceHandler extends FormHandler {
SysTray tray = SysTray.getInstance(); SysTray tray = SysTray.getInstance();
if (tray != null) { if (tray != null) {
tray.show(); tray.show();
addFormNotice("Systray enabled"); addFormNotice("System tray icon enabled.");
} else { } else {
addFormNotice("Systray not supported on this platform"); addFormNotice("System tray icon feature not supported on this platform. Sorry!");
} }
} catch (Throwable t) { } catch (Throwable t) {
addFormError("Warning: unable to contact the systray manager - " + t.getMessage()); addFormError("Warning: unable to contact the systray manager - " + t.getMessage());
@ -107,9 +105,9 @@ public class ConfigServiceHandler extends FormHandler {
SysTray tray = SysTray.getInstance(); SysTray tray = SysTray.getInstance();
if (tray != null) { if (tray != null) {
tray.hide(); tray.hide();
addFormNotice("Systray disabled"); addFormNotice("System tray icon disabled.");
} else { } else {
addFormNotice("Systray not supported on this platform"); addFormNotice("System tray icon feature not supported on this platform. Sorry!");
} }
} catch (Throwable t) { } catch (Throwable t) {
addFormError("Warning: unable to contact the systray manager - " + t.getMessage()); addFormError("Warning: unable to contact the systray manager - " + t.getMessage());

View File

@ -28,6 +28,7 @@ public class ConfigStatsHandler extends FormHandler {
_isFull = false; _isFull = false;
} }
@Override
protected void processForm() { protected void processForm() {
saveChanges(); saveChanges();
} }

View File

@ -8,7 +8,6 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import net.i2p.router.RouterContext;
import net.i2p.stat.FrequencyStat; import net.i2p.stat.FrequencyStat;
import net.i2p.stat.Rate; import net.i2p.stat.Rate;
import net.i2p.stat.RateStat; import net.i2p.stat.RateStat;

View File

@ -14,7 +14,7 @@ import net.i2p.util.Log;
* *
*/ */
public class ConfigTunnelsHandler extends FormHandler { public class ConfigTunnelsHandler extends FormHandler {
private Log _log; private Log configTunnel_log;
private Map _settings; private Map _settings;
private boolean _shouldSave; private boolean _shouldSave;
@ -22,6 +22,7 @@ public class ConfigTunnelsHandler extends FormHandler {
_shouldSave = false; _shouldSave = false;
} }
@Override
protected void processForm() { protected void processForm() {
if (_shouldSave) { if (_shouldSave) {
saveChanges(); saveChanges();
@ -43,11 +44,11 @@ public class ConfigTunnelsHandler extends FormHandler {
* *
*/ */
private void saveChanges() { private void saveChanges() {
_log = _context.logManager().getLog(ConfigTunnelsHandler.class); configTunnel_log = _context.logManager().getLog(ConfigTunnelsHandler.class);
boolean saveRequired = false; boolean saveRequired = false;
if (_log.shouldLog(Log.DEBUG)) if (configTunnel_log.shouldLog(Log.DEBUG))
_log.debug("Saving changes, with props = " + _settings + "."); configTunnel_log.debug("Saving changes, with props = " + _settings + ".");
int updated = 0; int updated = 0;
int index = 0; int index = 0;
@ -110,16 +111,16 @@ public class ConfigTunnelsHandler extends FormHandler {
} }
if ("exploratory".equals(poolName)) { if ("exploratory".equals(poolName)) {
if (_log.shouldLog(Log.DEBUG)) { if (configTunnel_log.shouldLog(Log.DEBUG)) {
_log.debug("Inbound exploratory settings: " + in); configTunnel_log.debug("Inbound exploratory settings: " + in);
_log.debug("Outbound exploratory settings: " + out); configTunnel_log.debug("Outbound exploratory settings: " + out);
} }
_context.tunnelManager().setInboundSettings(in); _context.tunnelManager().setInboundSettings(in);
_context.tunnelManager().setOutboundSettings(out); _context.tunnelManager().setOutboundSettings(out);
} else { } else {
if (_log.shouldLog(Log.DEBUG)) { if (configTunnel_log.shouldLog(Log.DEBUG)) {
_log.debug("Inbound settings for " + client.toBase64() + ": " + in); configTunnel_log.debug("Inbound settings for " + client.toBase64() + ": " + in);
_log.debug("Outbound settings for " + client.toBase64() + ": " + out); configTunnel_log.debug("Outbound settings for " + client.toBase64() + ": " + out);
} }
_context.tunnelManager().setInboundSettings(client, in); _context.tunnelManager().setInboundSettings(client, in);
_context.tunnelManager().setOutboundSettings(client, out); _context.tunnelManager().setOutboundSettings(client, out);

View File

@ -5,7 +5,6 @@ import java.util.Properties;
import java.util.Set; import java.util.Set;
import net.i2p.data.Destination; import net.i2p.data.Destination;
import net.i2p.router.RouterContext;
import net.i2p.router.TunnelPoolSettings; import net.i2p.router.TunnelPoolSettings;
public class ConfigTunnelsHelper extends HelperBase { public class ConfigTunnelsHelper extends HelperBase {
@ -75,7 +74,7 @@ public class ConfigTunnelsHelper extends HelperBase {
out.getQuantity() + out.getBackupQuantity() >= WARN_QUANTITY) out.getQuantity() + out.getBackupQuantity() >= WARN_QUANTITY)
buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include high tunnel quantities.</font></th></tr>"); buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include high tunnel quantities.</font></th></tr>");
buf.append("<tr><th></th><th><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound Tunnels\"/>&nbsp;&nbsp;Inbound</th><th><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound Tunnels\" title=\"Outbound\"/>&nbsp;&nbsp;Outbound</th></tr>\n"); buf.append("<tr><th></th><th><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound Tunnels\">&nbsp;&nbsp;Inbound</th><th><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound Tunnels\" title=\"Outbound\">&nbsp;&nbsp;Outbound</th></tr>\n");
// buf.append("<tr><th></th><th>Inbound</th><th>Outbound</th></tr>\n"); // buf.append("<tr><th></th><th>Inbound</th><th>Outbound</th></tr>\n");
@ -177,7 +176,7 @@ buf.append("<tr><th></th><th><img src=\"/themes/console/images/inbound.png\" alt
buf.append(prop).append("=").append(val).append(" "); buf.append(prop).append("=").append(val).append(" ");
} }
buf.append("\"/></td></tr>\n"); buf.append("\"/></td></tr>\n");
// buf.append("<tr><td colspan=\"3\"><hr /></td></tr>\n"); // buf.append("<tr><td colspan=\"3\"><br></td></tr>\n");
} }
private void renderOptions(StringBuilder buf, int min, int max, int now, String prefix, String name) { private void renderOptions(StringBuilder buf, int min, int max, int now, String prefix, String name) {

View File

@ -5,6 +5,7 @@ public class ConfigUIHandler extends FormHandler {
private boolean _shouldSave; private boolean _shouldSave;
private String _config; private String _config;
@Override
protected void processForm() { protected void processForm() {
if (_shouldSave) if (_shouldSave)
saveChanges(); saveChanges();

View File

@ -12,7 +12,7 @@ public class ConfigUIHelper extends HelperBase {
buf.append("<input type=\"radio\" class=\"optbox\" name=\"theme\" "); buf.append("<input type=\"radio\" class=\"optbox\" name=\"theme\" ");
if (theme.equals(current)) if (theme.equals(current))
buf.append("checked=\"true\" "); buf.append("checked=\"true\" ");
buf.append("value=\"").append(theme).append("\"/>").append(theme).append("<br />\n"); buf.append("value=\"").append(theme).append("\"/>").append(theme).append("<br>\n");
} }
return buf.toString(); return buf.toString();
} }

View File

@ -49,6 +49,7 @@ public class ConfigUpdateHandler extends FormHandler {
public static final String PROP_TRUSTED_KEYS = "router.trustedUpdateKeys"; public static final String PROP_TRUSTED_KEYS = "router.trustedUpdateKeys";
@Override
protected void processForm() { protected void processForm() {
if ("Check for update now".equals(_action)) { if ("Check for update now".equals(_action)) {
NewsFetcher fetcher = NewsFetcher.getInstance(I2PAppContext.getGlobalContext()); NewsFetcher fetcher = NewsFetcher.getInstance(I2PAppContext.getGlobalContext());

View File

@ -3,7 +3,6 @@ package net.i2p.router.web;
import net.i2p.I2PAppContext; import net.i2p.I2PAppContext;
import net.i2p.crypto.TrustedUpdate; import net.i2p.crypto.TrustedUpdate;
import net.i2p.data.DataHelper; import net.i2p.data.DataHelper;
import net.i2p.router.RouterContext;
public class ConfigUpdateHelper extends HelperBase { public class ConfigUpdateHelper extends HelperBase {
public ConfigUpdateHelper() {} public ConfigUpdateHelper() {}

View File

@ -1,14 +1,12 @@
package net.i2p.router.web; package net.i2p.router.web;
import java.io.IOException; import java.io.IOException;
import java.io.Writer;
import java.util.Comparator; import java.util.Comparator;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.TreeSet; import java.util.TreeSet;
import net.i2p.data.DataHelper; import net.i2p.data.DataHelper;
import net.i2p.router.RouterContext;
import net.i2p.stat.Rate; import net.i2p.stat.Rate;
public class GraphHelper extends HelperBase { public class GraphHelper extends HelperBase {
@ -68,7 +66,7 @@ public class GraphHelper extends HelperBase {
+ "&amp;periodCount=" + _periodCount + "&amp;periodCount=" + _periodCount
+ "&amp;width=" + _width + "&amp;width=" + _width
+ "&amp;height=" + (_height - 14) + "&amp;height=" + (_height - 14)
+ "\" title=\"Combined bandwidth graph\" /></a>\n"); + "\" alt=\"Combined bandwidth graph\" title=\"Combined bandwidth graph\"></a>\n");
} }
for (Iterator iter = ordered.iterator(); iter.hasNext(); ) { for (Iterator iter = ordered.iterator(); iter.hasNext(); ) {
@ -82,7 +80,7 @@ public class GraphHelper extends HelperBase {
+ "&amp;periodCount=" + (3 * _periodCount) + "&amp;periodCount=" + (3 * _periodCount)
+ "&amp;width=" + (3 * _width) + "&amp;width=" + (3 * _width)
+ "&amp;height=" + (3 * _height) + "&amp;height=" + (3 * _height)
+ "\" target=\"_blank\" />"); + "\" target=\"_blank\">");
_out.write("<img class=\"statimage\" border=\"0\" width=\"" _out.write("<img class=\"statimage\" border=\"0\" width=\""
+ (_width + 83) + "\" height=\"" + (_height + 92) + (_width + 83) + "\" height=\"" + (_height + 92)
+ "\" src=\"viewstat.jsp?stat=" + "\" src=\"viewstat.jsp?stat="
@ -92,11 +90,12 @@ public class GraphHelper extends HelperBase {
+ "&amp;periodCount=" + _periodCount + "&amp;periodCount=" + _periodCount
+ "&amp;width=" + _width + "&amp;width=" + _width
+ "&amp;height=" + _height + "&amp;height=" + _height
+ "\" title=\"" + title + "\" /></a>\n"); + "\" alt=\"" + title
+ "\" title=\"" + title + "\"></a>\n");
} }
if (_refreshDelaySeconds > 0) if (_refreshDelaySeconds > 0)
// shorten the refresh by 3 seconds so we beat the iframe // shorten the refresh by 3 seconds so we beat the iframe
_out.write("<meta http-equiv=\"refresh\" content=\"" + (_refreshDelaySeconds - 3) + "\" />\n"); _out.write("<meta http-equiv=\"refresh\" content=\"" + (_refreshDelaySeconds - 3) + "\">\n");
} catch (IOException ioe) { } catch (IOException ioe) {
ioe.printStackTrace(); ioe.printStackTrace();
@ -105,17 +104,16 @@ public class GraphHelper extends HelperBase {
} }
public String getForm() { public String getForm() {
try { try {
_out.write("<hr /><h3>Configure Graph Display</h3>"); _out.write("<br><h3>Configure Graph Display [<a href=\"configstats.jsp\">Select Stats</a>]</h3>");
_out.write("<p />[<a href=\"configstats.jsp\">Select Stats to Graph</a>]<p />");
_out.write("<form action=\"graphs.jsp\" method=\"GET\">"); _out.write("<form action=\"graphs.jsp\" method=\"GET\">");
_out.write("Periods: <input size=\"3\" type=\"text\" name=\"periodCount\" value=\"" + _periodCount + "\" /><br />\n"); _out.write("Periods: <input size=\"3\" type=\"text\" name=\"periodCount\" value=\"" + _periodCount + "\"><br>\n");
_out.write("Plot averages: <input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"false\" " + (_showEvents ? "" : "checked=\"true\" ") + " /> "); _out.write("Plot averages: <input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"false\" " + (_showEvents ? "" : "checked=\"true\" ") + "> ");
_out.write("or plot events: <input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"true\" "+ (_showEvents ? "checked=\"true\" " : "") + " /><br />\n"); _out.write("or plot events: <input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"true\" "+ (_showEvents ? "checked=\"true\" " : "") + "><br>\n");
_out.write("Image sizes: width: <input size=\"4\" type=\"text\" name=\"width\" value=\"" + _width _out.write("Image sizes: width: <input size=\"4\" type=\"text\" name=\"width\" value=\"" + _width
+ "\" /> pixels, height: <input size=\"4\" type=\"text\" name=\"height\" value=\"" + _height + "\"> pixels, height: <input size=\"4\" type=\"text\" name=\"height\" value=\"" + _height
+ "\" /><br />\n"); + "\"><br>\n");
_out.write("Refresh delay: <select name=\"refreshDelay\"><option value=\"60\">1 minute</option><option value=\"120\">2 minutes</option><option value=\"300\">5 minutes</option><option value=\"600\">10 minutes</option><option value=\"1800\">30 minutes</option><option value=\"3600\">1 hour</option><option value=\"-1\">Never</option></select><br />\n"); _out.write("Refresh delay: <select name=\"refreshDelay\"><option value=\"60\">1 minute</option><option value=\"120\">2 minutes</option><option value=\"300\">5 minutes</option><option value=\"600\">10 minutes</option><option value=\"1800\">30 minutes</option><option value=\"3600\">1 hour</option><option value=\"-1\">Never</option></select><br>\n");
_out.write("<hr /><div class=\"formaction\"><input type=\"submit\" value=\"Redraw\" /></div></div>"); _out.write("<hr><div class=\"formaction\"><input type=\"submit\" value=\"Redraw\"></div></form>");
} catch (IOException ioe) { } catch (IOException ioe) {
ioe.printStackTrace(); ioe.printStackTrace();
} }

View File

@ -3,9 +3,7 @@ package net.i2p.router.web;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.Writer;
import net.i2p.router.RouterContext;
public class JobQueueHelper extends HelperBase { public class JobQueueHelper extends HelperBase {
public JobQueueHelper() {} public JobQueueHelper() {}

View File

@ -10,7 +10,7 @@ public class LogsHelper extends HelperBase {
public String getLogs() { public String getLogs() {
String str = formatMessages(_context.logManager().getBuffer().getMostRecentMessages()); String str = formatMessages(_context.logManager().getBuffer().getMostRecentMessages());
return "Location: <code>" + _context.logManager().currentFile() + "</code><br /><br />" + str; return "Location: <code>" + _context.logManager().currentFile() + "</code><br><br>" + str;
} }
public String getCriticalLogs() { public String getCriticalLogs() {

View File

@ -4,7 +4,6 @@ import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import net.i2p.router.RouterContext;
public class NavHelper extends HelperBase { public class NavHelper extends HelperBase {
private static Map _apps = new HashMap(); private static Map _apps = new HashMap();

View File

@ -3,9 +3,7 @@ package net.i2p.router.web;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.Writer;
import net.i2p.router.RouterContext;
public class NetDbHelper extends HelperBase { public class NetDbHelper extends HelperBase {
private String _routerPrefix; private String _routerPrefix;

View File

@ -3,9 +3,7 @@ package net.i2p.router.web;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.Writer;
import net.i2p.router.RouterContext;
public class OldConsoleHelper extends HelperBase { public class OldConsoleHelper extends HelperBase {
public OldConsoleHelper() {} public OldConsoleHelper() {}

View File

@ -1,9 +1,7 @@
package net.i2p.router.web; package net.i2p.router.web;
import java.io.IOException; import java.io.IOException;
import java.io.Writer;
import net.i2p.router.RouterContext;
public class PeerHelper extends HelperBase { public class PeerHelper extends HelperBase {
private int _sortFlags; private int _sortFlags;

View File

@ -4,7 +4,6 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import net.i2p.router.RouterContext;
public class ProfilesHelper extends HelperBase { public class ProfilesHelper extends HelperBase {
public ProfilesHelper() {} public ProfilesHelper() {}

View File

@ -1,6 +1,5 @@
package net.i2p.router.web; package net.i2p.router.web;
import java.io.Writer;
import java.util.Iterator; import java.util.Iterator;
import java.util.Set; import java.util.Set;

View File

@ -80,7 +80,7 @@ public class StatsGenerator {
buf.append(stat); buf.append(stat);
buf.append("\">"); buf.append("\">");
buf.append(stat); buf.append(stat);
buf.append("</a></b><br />"); buf.append("</a></b><br>");
if (_context.statManager().isFrequency(stat)) if (_context.statManager().isFrequency(stat))
renderFrequency(stat, buf); renderFrequency(stat, buf);
else else
@ -88,7 +88,7 @@ public class StatsGenerator {
out.write(buf.toString()); out.write(buf.toString());
buf.setLength(0); buf.setLength(0);
} }
out.write("</ul><hr />"); out.write("</ul><br>");
} }
out.flush(); out.flush();
} }
@ -97,7 +97,7 @@ public class StatsGenerator {
FrequencyStat freq = _context.statManager().getFrequency(name); FrequencyStat freq = _context.statManager().getFrequency(name);
buf.append("<i>"); buf.append("<i>");
buf.append(freq.getDescription()); buf.append(freq.getDescription());
buf.append("</i><br />"); buf.append("</i><br>");
long uptime = _context.router().getUptime(); long uptime = _context.router().getUptime();
long periods[] = freq.getPeriods(); long periods[] = freq.getPeriods();
Arrays.sort(periods); Arrays.sort(periods);
@ -124,9 +124,9 @@ public class StatsGenerator {
buf.append(" using the lifetime of "); buf.append(" using the lifetime of ");
buf.append(curFreq.getEventCount()); buf.append(curFreq.getEventCount());
buf.append(" events)"); buf.append(" events)");
buf.append("<br />"); buf.append("<br>");
} }
buf.append("<br />"); buf.append("<br>");
} }
private void renderRate(String name, StringBuilder buf) { private void renderRate(String name, StringBuilder buf) {
@ -135,10 +135,10 @@ public class StatsGenerator {
if (! "".equals(d)) { if (! "".equals(d)) {
buf.append("<i>"); buf.append("<i>");
buf.append(d); buf.append(d);
buf.append("</i><br />"); buf.append("</i><br>");
} }
if (rate.getLifetimeEventCount() <= 0) { if (rate.getLifetimeEventCount() <= 0) {
buf.append("No lifetime events<br />&nbsp;<br />"); buf.append("No lifetime events<br>&nbsp;<br>");
return; return;
} }
long now = _context.clock().now(); long now = _context.clock().now();
@ -217,9 +217,9 @@ public class StatsGenerator {
buf.append(num(rate.getLifetimeAverageValue())); buf.append(num(rate.getLifetimeAverageValue()));
buf.append(" over "); buf.append(" over ");
buf.append(rate.getLifetimeEventCount()); buf.append(rate.getLifetimeEventCount());
buf.append(" events<br /></li>"); buf.append(" events<br></li>");
buf.append("</ul>"); buf.append("</ul>");
buf.append("<br />"); buf.append("<br>");
} }
private static void renderPeriod(StringBuilder buf, long period, String name) { private static void renderPeriod(StringBuilder buf, long period, String name) {

View File

@ -1,15 +1,12 @@
package net.i2p.router.web; package net.i2p.router.web;
import java.text.Collator; import java.text.Collator;
import java.text.DateFormat;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.Date;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Locale;
import net.i2p.data.DataHelper; import net.i2p.data.DataHelper;
import net.i2p.data.Destination; import net.i2p.data.Destination;
@ -18,7 +15,6 @@ import net.i2p.data.LeaseSet;
import net.i2p.data.RouterAddress; import net.i2p.data.RouterAddress;
import net.i2p.router.CommSystemFacade; import net.i2p.router.CommSystemFacade;
import net.i2p.router.Router; import net.i2p.router.Router;
import net.i2p.router.RouterContext;
import net.i2p.router.RouterVersion; import net.i2p.router.RouterVersion;
import net.i2p.router.TunnelPoolSettings; import net.i2p.router.TunnelPoolSettings;
import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade; import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade;
@ -367,32 +363,32 @@ public class SummaryHelper extends HelperBase {
String name = getName(client); String name = getName(client);
Hash h = client.calculateHash(); Hash h = client.calculateHash();
buf.append("<tr><td align=\"right\"><b><img src=\"/themes/console/images/"); buf.append("<tr><td align=\"right\"><img src=\"/themes/console/images/");
if (_context.clientManager().shouldPublishLeaseSet(h)) if (_context.clientManager().shouldPublishLeaseSet(h))
buf.append("server.png\" alt=\"Server\" title=\"Server\" />"); buf.append("server.png\" alt=\"Server\" title=\"Server\">");
else else
buf.append("client.png\" alt=\"Client\" title=\"Client\" />"); buf.append("client.png\" alt=\"Client\" title=\"Client\">");
buf.append("</td><td align=\"left\"><a href=\"tunnels.jsp#").append(h.toBase64().substring(0,4)); buf.append("</td><td align=\"left\"><b><a href=\"tunnels.jsp#").append(h.toBase64().substring(0,4));
buf.append("\" target=\"_top\" title=\"Show tunnels\">"); buf.append("\" target=\"_top\" title=\"Show tunnels\">");
if (name.length() < 16) if (name.length() < 16)
buf.append(name); buf.append(name);
else else
buf.append(name.substring(0,15)).append("&hellip;"); buf.append(name.substring(0,15)).append("&hellip;");
buf.append("</a></td>\n"); buf.append("</a></b></td>\n");
LeaseSet ls = _context.netDb().lookupLeaseSetLocally(h); LeaseSet ls = _context.netDb().lookupLeaseSetLocally(h);
if (ls != null) { if (ls != null) {
long timeToExpire = ls.getEarliestLeaseDate() - _context.clock().now(); long timeToExpire = ls.getEarliestLeaseDate() - _context.clock().now();
if (timeToExpire < 0) { if (timeToExpire < 0) {
// red or yellow light // red or yellow light
buf.append("<td align=\right\"><img src=\"/themes/console/images/local_inprogress.png\" alt=\"Rebuilding&hellip;\" title=\"Leases expired ").append(DataHelper.formatDuration(0-timeToExpire)); buf.append("<td><img src=\"/themes/console/images/local_inprogress.png\" alt=\"Rebuilding&hellip;\" title=\"Leases expired ").append(DataHelper.formatDuration(0-timeToExpire));
buf.append(" ago. Rebuilding..\"></td></tr>\n"); buf.append(" ago. Rebuilding&hellip;\"></td></tr>\n");
} else { } else {
// green light // green light
buf.append("<td align=\right\"><img src=\"/themes/console/images/local_up.png\" alt=\"Ready\" title=\"Ready\"></td></tr>\n"); buf.append("<td><img src=\"/themes/console/images/local_up.png\" alt=\"Ready\" title=\"Ready\"></td></tr>\n");
} }
} else { } else {
// yellow light // yellow light
buf.append("<td align=\right\"><img src=\"/themes/console/images/local_inprogress.png\" alt=\"Building&hellip;\" title=\"Tunnel building in progress&hellip;\"></td></tr>\n"); buf.append("<td><img src=\"/themes/console/images/local_inprogress.png\" alt=\"Building&hellip;\" title=\"Tunnel building in progress&hellip;\"></td></tr>\n");
} }
} }
buf.append("</table><hr>\n"); buf.append("</table><hr>\n");

View File

@ -132,9 +132,11 @@ class SummaryListener implements RateSummaryListener {
RrdDb getData() { return _db; } RrdDb getData() { return _db; }
long now() { return _context.clock().now(); } long now() { return _context.clock().now(); }
@Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
return ((obj instanceof SummaryListener) && ((SummaryListener)obj)._rate.equals(_rate)); return ((obj instanceof SummaryListener) && ((SummaryListener)obj)._rate.equals(_rate));
} }
@Override
public int hashCode() { return _rate.hashCode(); } public int hashCode() { return _rate.hashCode(); }
} }

View File

@ -3,9 +3,7 @@ package net.i2p.router.web;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.Writer;
import net.i2p.router.RouterContext;
public class TunnelHelper extends HelperBase { public class TunnelHelper extends HelperBase {
public TunnelHelper() {} public TunnelHelper() {}

View File

@ -2,7 +2,6 @@ package net.i2p.router.web;
import java.io.File; import java.io.File;
import net.i2p.I2PAppContext;
import net.i2p.router.Router; import net.i2p.router.Router;
import net.i2p.router.RouterContext; import net.i2p.router.RouterContext;
import net.i2p.util.EepGet; import net.i2p.util.EepGet;
@ -109,11 +108,11 @@ public class UnsignedUpdateHandler extends UpdateHandler {
_context.router().saveConfig(); _context.router().saveConfig();
if ("install".equals(policy)) { if ("install".equals(policy)) {
_log.log(Log.CRIT, "Update was downloaded, restarting to install it"); _log.log(Log.CRIT, "Update was downloaded, restarting to install it");
_status = "<b>Update downloaded</b><br />Restarting"; _status = "<b>Update downloaded</b><br>Restarting";
restart(); restart();
} else { } else {
_log.log(Log.CRIT, "Update was downloaded, will be installed at next restart"); _log.log(Log.CRIT, "Update was downloaded, will be installed at next restart");
_status = "<b>Update downloaded</b><br />"; _status = "<b>Update downloaded</b><br>";
if (System.getProperty("wrapper.version") != null) if (System.getProperty("wrapper.version") != null)
_status += "Click Restart to install"; _status += "Click Restart to install";
else else

View File

@ -201,11 +201,11 @@ public class UpdateHandler {
_context.router().saveConfig(); _context.router().saveConfig();
if ("install".equals(policy)) { if ("install".equals(policy)) {
_log.log(Log.CRIT, "Update was VERIFIED, restarting to install it"); _log.log(Log.CRIT, "Update was VERIFIED, restarting to install it");
_status = "<b>Update verified</b><br />Restarting"; _status = "<b>Update verified</b><br>Restarting";
restart(); restart();
} else { } else {
_log.log(Log.CRIT, "Update was VERIFIED, will be installed at next restart"); _log.log(Log.CRIT, "Update was VERIFIED, will be installed at next restart");
_status = "<b>Update downloaded</b><br />"; _status = "<b>Update downloaded</b><br>";
if (System.getProperty("wrapper.version") != null) if (System.getProperty("wrapper.version") != null)
_status += "Click Restart to install"; _status += "Click Restart to install";
else else

View File

@ -13,7 +13,7 @@
<h1>I2P Network Configuration</h1> <h1>I2P Network Configuration</h1>
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
<jsp:useBean class="net.i2p.router.web.ConfigNetHandler" id="formhandler" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigNetHandler" id="formhandler" scope="request" />
<jsp:setProperty name="formhandler" property="*" /> <jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
@ -25,45 +25,42 @@
System.setProperty("net.i2p.router.web.ConfigNetHandler.nonce", new java.util.Random().nextLong()+""); %> System.setProperty("net.i2p.router.web.ConfigNetHandler.nonce", new java.util.Random().nextLong()+""); %>
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigNetHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigNetHandler.nonce")%>" />
<input type="hidden" name="action" value="blah" /> <input type="hidden" name="action" value="blah" />
<h3>Bandwidth limiter</h3> <h3>Bandwidth limiter</h3><p>
<p>
<b>I2P will work best if you configure your rates to match the speed of your internet connection.</b> <b>I2P will work best if you configure your rates to match the speed of your internet connection.</b>
</p>
<p>
<div class="wideload">
<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" />" /> KBps
In <td>(<jsp:getProperty name="nethelper" property="inboundRateBits" />)<br />
<!-- 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><td><input style="text-align: right; width: 5em;" name="outboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="outboundRate" />" /> KBps
Out <td>(<jsp:getProperty name="nethelper" property="outboundRateBits" />)<br />
<!-- let's keep this simple...
bursting up to
<input name="outboundburstrate" type="text" size="2" value="<jsp:getProperty name="nethelper" property="outboundBurstRate" />" /> KBps for
<jsp:getProperty name="nethelper" property="outboundBurstFactorBox" /><br />
<i>KBps = kilobytes per second = 1024 bytes per second = 8192 bits per second.<br />
A negative rate sets the default.</i><br />
-->
<tr><td><jsp:getProperty name="nethelper" property="sharePercentageBox" />
Share <td>(<jsp:getProperty name="nethelper" property="shareRateBits" />)<br />
</table></div>
</p><p> </p><p>
<div class="wideload"><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" />" /> 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" />" /> 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
<jsp:getProperty name="nethelper" property="outboundBurstFactorBox" /><br>
<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" /> Share</td>
<td>(<jsp:getProperty name="nethelper" property="shareRateBits" />)
</td></tr></table></div></p><p>
<% int share = nethelper.getShareBandwidth(); <% int share = nethelper.getShareBandwidth();
if (share < 12) { if (share < 12) {
out.print("<b>NOTE</b>: You have configured I2P to share only " + share + "KBps. "); out.print("<b>NOTE</b>: You have configured I2P to share only " + share + "KBps. ");
out.print("I2P requires at least 12KBps to enable sharing. "); out.print("I2P requires at least 12KBps to enable sharing. ");
out.print("Please enable sharing (participating in tunnels) by configuring more bandwidth. "); out.print("Please enable sharing (participating in tunnels) by configuring more bandwidth. ");
out.print("It improves your anonymity by creating cover traffic, and helps the network.<br />"); out.print("It improves your anonymity by creating cover traffic, and helps the network.<br>");
} else { } else {
out.print("You have configured I2P to share<b> " + share + "KBps</b>. "); out.print("You have configured I2P to share<b> " + share + "KBps</b>. ");
out.print("The higher the share bandwidth the more you improve your anonymity and help the network.<hr />"); out.print("The higher the share bandwidth the more you improve your anonymity and help the network.<hr>");
} }
%> %>
</p><div class="formaction"> </p><div class="formaction">
<input type="submit" name="save" value="Save changes" /> <input type="reset" value="Cancel" /></div> <input type="submit" name="save" value="Save changes" /> <input type="reset" value="Cancel" /></div>
<!-- <!--
<b>Enable load testing: </b> <b>Enable load testing: </b>
@ -71,28 +68,25 @@
<p>If enabled, your router will periodically anonymously probe some of your peers <p>If enabled, your router will periodically anonymously probe some of your peers
to see what sort of throughput they can handle. This improves your router's ability to see what sort of throughput they can handle. This improves your router's ability
to pick faster peers, but can cost substantial bandwidth. Relevant data from the to pick faster peers, but can cost substantial bandwidth. Relevant data from the
load testing is fed into the profiles as well as the load testing is fed into the profiles as well as the
<a href="oldstats.jsp#test.rtt">test.rtt</a> and related stats.</p> <a href="oldstats.jsp#test.rtt">test.rtt</a> and related stats.</p>
<hr /> <br>
--> -->
<h3>IP and Transport Configuration</h3> <h3>IP and Transport Configuration</h3><p>
<p>
<b>The default settings will work for most people. There is <a href="#chelp">help below</a>.</b> <b>The default settings will work for most people. There is <a href="#chelp">help below</a>.</b>
</p><p> </p><p><b>UPnP Configuration:</b><br>
<b>UPnP Configuration:</b><br />
<input type="checkbox" class="optbox" name="upnp" value="true" <jsp:getProperty name="nethelper" property="upnpChecked" /> /> <input type="checkbox" class="optbox" name="upnp" value="true" <jsp:getProperty name="nethelper" property="upnpChecked" /> />
Enable UPnP to open firewall ports - <a href="peers.jsp#upnp">UPnP status</a> Enable UPnP to open firewall ports - <a href="peers.jsp#upnp">UPnP status</a>
</p><p> </p><p><b>IP Configuration:</b><br>
<b>IP Configuration:</b><br /> Externally reachable hostname or IP address:<br>
Externally reachable hostname or IP address:<br />
<input type="radio" class="optbox" name="udpAutoIP" value="local,upnp,ssu" <%=nethelper.getUdpAutoIPChecked(3) %> /> <input type="radio" class="optbox" name="udpAutoIP" value="local,upnp,ssu" <%=nethelper.getUdpAutoIPChecked(3) %> />
Use all auto-detect methods<br /> Use all auto-detect methods<br>
<input type="radio" class="optbox" name="udpAutoIP" value="local,ssu" <%=nethelper.getUdpAutoIPChecked(4) %> /> <input type="radio" class="optbox" name="udpAutoIP" value="local,ssu" <%=nethelper.getUdpAutoIPChecked(4) %> />
Disable UPnP IP address detection<br /> Disable UPnP IP address detection<br>
<input type="radio" class="optbox" name="udpAutoIP" value="upnp,ssu" <%=nethelper.getUdpAutoIPChecked(5) %> /> <input type="radio" class="optbox" name="udpAutoIP" value="upnp,ssu" <%=nethelper.getUdpAutoIPChecked(5) %> />
Ignore local interface IP address<br /> Ignore local interface IP address<br>
<input type="radio" class="optbox" name="udpAutoIP" value="ssu" <%=nethelper.getUdpAutoIPChecked(0) %> /> <input type="radio" class="optbox" name="udpAutoIP" value="ssu" <%=nethelper.getUdpAutoIPChecked(0) %> />
Use SSU IP address detection only<br /> Use SSU IP address detection only<br>
<input type="radio" class="optbox" name="udpAutoIP" value="fixed" <%=nethelper.getUdpAutoIPChecked(1) %> /> <input type="radio" class="optbox" name="udpAutoIP" value="fixed" <%=nethelper.getUdpAutoIPChecked(1) %> />
Specify hostname or IP: Specify hostname or IP:
<input name ="udpHost1" type="text" size="16" value="<jsp:getProperty name="nethelper" property="udphostname" />" /> <input name ="udpHost1" type="text" size="16" value="<jsp:getProperty name="nethelper" property="udphostname" />" />
@ -109,52 +103,47 @@
out.print("</select>\n"); out.print("</select>\n");
} }
%> %>
<br /> <br>
<input type="radio" class="optbox" name="udpAutoIP" value="hidden" <%=nethelper.getUdpAutoIPChecked(2) %> /> <input type="radio" class="optbox" name="udpAutoIP" value="hidden" <%=nethelper.getUdpAutoIPChecked(2) %> />
Hidden mode - do not publish IP <i>(prevents participating traffic)</i><br /> Hidden mode - do not publish IP <i>(prevents participating traffic)</i><br>
</p><p> </p><p><b>UDP Configuration:</b><br>
<b>UDP Configuration:</b><br />
UDP port: UDP port:
<input name ="udpPort" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="configuredUdpPort" />" /><br /> <input name ="udpPort" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="configuredUdpPort" />" /><br>
<!-- let's keep this simple... <!-- let's keep this simple...
<input type="checkbox" class="optbox" name="requireIntroductions" value="true" <jsp:getProperty name="nethelper" property="requireIntroductionsChecked" /> /> <input type="checkbox" class="optbox" name="requireIntroductions" value="true" <jsp:getProperty name="nethelper" property="requireIntroductionsChecked" /> />
Require SSU introductions Require SSU introductions
<i>(Enable if you cannot open your firewall)</i> <i>(Enable if you cannot open your firewall)</i>
</p><p> </p><p>
Current External UDP address: <i><jsp:getProperty name="nethelper" property="udpAddress" /></i><br /> Current External UDP address: <i><jsp:getProperty name="nethelper" property="udpAddress" /></i><br>
--> -->
</p><p> </p><p>
<b>TCP Configuration:</b><br /> <b>TCP Configuration:</b><br>
Externally reachable hostname or IP address:<br /> Externally reachable hostname or IP address:<br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="true" <%=nethelper.getTcpAutoIPChecked(2) %> /> <input type="radio" class="optbox" name="ntcpAutoIP" value="true" <%=nethelper.getTcpAutoIPChecked(2) %> />
Use auto-detected IP address Use auto-detected IP address
<i>(currently <jsp:getProperty name="nethelper" property="udpIP" />)</i> <i>(currently <jsp:getProperty name="nethelper" property="udpIP" />)</i>
if we are not firewalled<br /> if we are not firewalled<br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="always" <%=nethelper.getTcpAutoIPChecked(3) %> /> <input type="radio" class="optbox" name="ntcpAutoIP" value="always" <%=nethelper.getTcpAutoIPChecked(3) %> />
Always use auto-detected IP address (Not firewalled)<br /> Always use auto-detected IP address (Not firewalled)<br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(1) %> /> <input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(1) %> />
Specify hostname or IP: Specify hostname or IP:
<input name ="ntcphost" type="text" size="16" value="<jsp:getProperty name="nethelper" property="ntcphostname" />" /><br /> <input name ="ntcphost" type="text" size="16" value="<jsp:getProperty name="nethelper" property="ntcphostname" />" /><br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(0) %> /> <input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(0) %> />
Disable inbound (Firewalled)<br /> Disable inbound (Firewalled)<br>
<input type="radio" class="optbox" name="ntcpAutoIP" value="disabled" <%=nethelper.getTcpAutoIPChecked(4) %> /> <input type="radio" class="optbox" name="ntcpAutoIP" value="disabled" <%=nethelper.getTcpAutoIPChecked(4) %> />
Completely disable <i>(select only if behind a firewall that throttles or blocks outbound TCP)</i><br /> Completely disable <i>(select only if behind a firewall that throttles or blocks outbound TCP)</i><br>
</p><p> </p><p>
Externally reachable TCP port:<br /> Externally reachable TCP port:<br>
<input type="radio" class="optbox" name="ntcpAutoPort" value="2" <%=nethelper.getTcpAutoPortChecked(2) %> /> <input type="radio" class="optbox" name="ntcpAutoPort" value="2" <%=nethelper.getTcpAutoPortChecked(2) %> />
Use the same port configured for UDP Use the same port configured for UDP
<i>(currently <jsp:getProperty name="nethelper" property="udpPort" />)</i><br /> <i>(currently <jsp:getProperty name="nethelper" property="udpPort" />)</i><br>
<input type="radio" class="optbox" name="ntcpAutoPort" value="1" <%=nethelper.getTcpAutoPortChecked(1) %> /> <input type="radio" class="optbox" name="ntcpAutoPort" value="1" <%=nethelper.getTcpAutoPortChecked(1) %> />
Specify Port: Specify Port:
<input name ="ntcpport" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="ntcpport" />" /><br /> <input name ="ntcpport" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="ntcpport" />" /><br>
</p><p><b>Note: Changing these settings will restart your router.</b> </p><p><b>Note: Changing these settings will restart your router.</b></p>
</p><hr><div class="formaction"> <hr><div class="formaction">
<input type="submit" name="save" value="Save changes" /> <input type="reset" value="Cancel" /> <input type="submit" name="save" value="Save changes" /> <input type="reset" value="Cancel" />
</div> </div><h3><a name="chelp">Configuration Help:</a></h3><div align="justify"><p>
</div>
<h3><a name="chelp">Configuration Help:</a></h3>
<div align="justify">
<p>
While I2P will work fine behind most firewalls, your speeds and network integration will generally improve While I2P will work fine behind most firewalls, your speeds and network integration will generally improve
if the I2P port (generally 8887) is forwarded for both UDP and TCP. if the I2P port (generally 8887) is forwarded for both UDP and TCP.
</p><p> </p><p>
@ -166,30 +155,30 @@
</p> </p>
<!-- let's keep this simple... <!-- let's keep this simple...
<input type="submit" name="recheckReachability" value="Check network reachability..." /> <input type="submit" name="recheckReachability" value="Check network reachability..." />
</p>
--> -->
</p><p> <p>
UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address
and forward ports. and forward ports.
UPnP support is beta, and may not work for any number of reasons: UPnP support is beta, and may not work for any number of reasons:
<ul> <ul>
<li class="tidylist">No UPnP-compatible device present <li class="tidylist">No UPnP-compatible device present
<li class="tidylist">UPnP disabled on the device <li class="tidylist">UPnP disabled on the device
<li class="tidylist">Software firewall interference with UPnP <li class="tidylist">Software firewall interference with UPnP
<li class="tidylist">Bugs in the device's UPnP implementation <li class="tidylist">Bugs in the device's UPnP implementation
<li class="tidylist">Multiple firewall/routers in the internet connection path <li class="tidylist">Multiple firewall/routers in the internet connection path
<li class="tidylist">UPnP device change, reset, or address change <li class="tidylist">UPnP device change, reset, or address change
</ul><br> </ul><br>
Reviewing the <a href="peers.jsp#upnp">UPnP status</a> may help. Reviewing the <a href="peers.jsp#upnp">UPnP status</a> may help.
UPnP may be enabled or disabled above, but a change requires a router restart to take effect. UPnP may be enabled or disabled above, but a change requires a router restart to take effect.
</p><p>Hostnames entered above will be published in the network database. </p><p>Hostnames entered above will be published in the network database.
They are <b>not private</b>. They are <b>not private</b>.
Also, <b>do not enter a private IP address</b> like 127.0.0.1 or 192.168.1.1. Also, <b>do not enter a private IP address</b> like 127.0.0.1 or 192.168.1.1.
If you specify the wrong IP address or If you specify the wrong IP address or
hostname, or do not properly configure your NAT or firewall, your network performance will degrade hostname, or do not properly configure your NAT or firewall, your network performance will degrade
substantially. When in doubt, leave the settings at the defaults.</p> substantially. When in doubt, leave the settings at the defaults.
</p> </p>
<h3><a name="help">Reachability Help:</a></h3> <h3><a name="help">Reachability Help:</a></h3><p>
<p>
While I2P will work fine behind most firewalls, your speeds and network integration will generally improve While I2P will work fine behind most firewalls, your speeds and network integration will generally improve
if the I2P port (generally 8887) to both UDP and TCP. if the I2P port (generally 8887) to both UDP and TCP.
If you think you have opened up your firewall and I2P still thinks you are firewalled, remember If you think you have opened up your firewall and I2P still thinks you are firewalled, remember
@ -244,19 +233,17 @@
<li class="tidylist"><b>ERR - Client Manager I2CP Error - check logs</b> - <li class="tidylist"><b>ERR - Client Manager I2CP Error - check logs</b> -
This is usually due to a port 7654 conflict. Check the logs to verify. Do you have another I2P instance running? This is usually due to a port 7654 conflict. Check the logs to verify. Do you have another I2P instance running?
Stop the conflicting program and restart I2P. Stop the conflicting program and restart I2P.
</ul> </ul></p><br>
</p>
<hr />
<!-- <!--
<b>Dynamic Router Keys: </b> <b>Dynamic Router Keys: </b>
<input type="checkbox" class="optbox" name="dynamicKeys" value="true" <jsp:getProperty name="nethelper" property="dynamicKeysChecked" /> /><br /> <input type="checkbox" class="optbox" name="dynamicKeys" value="true" <jsp:getProperty name="nethelper" property="dynamicKeysChecked" /> /><br>
<p> <p>
This setting causes your router identity to be regenerated every time your IP address This setting causes your router identity to be regenerated every time your IP address
changes. If you have a dynamic IP this option can speed up your reintegration into changes. If you have a dynamic IP this option can speed up your reintegration into
the network (since people will have shitlisted your old router identity), and, for the network (since people will have shitlisted your old router identity), and, for
very weak adversaries, help frustrate trivial very weak adversaries, help frustrate trivial
<a href="http://www.i2p.net/how_threatmodel#intersection">intersection <a href="http://www.i2p.net/how_threatmodel#intersection">intersection
attacks</a> against the NetDB. Your different router identities would only be attacks</a> against the NetDB. Your different router identities would only be
'hidden' among other I2P users at your ISP, and further analysis would link 'hidden' among other I2P users at your ISP, and further analysis would link
the router identities further.</p> the router identities further.</p>
<p>Note that when I2P detects an IP address change, it will automatically <p>Note that when I2P detects an IP address change, it will automatically
@ -264,10 +251,6 @@
update their profiles - any long lasting client connections will be disconnected, update their profiles - any long lasting client connections will be disconnected,
though such would likely already be the case anyway, since the IP address changed. though such would likely already be the case anyway, since the IP address changed.
</p> </p>
<hr /> <br>
--> -->
</form> </div></form></div></div></body></html>
</div>
</div>
</body>
</html>

View File

@ -2,8 +2,7 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - config advanced</title>
<title>I2P Router Console - config advanced</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
@ -30,15 +29,9 @@
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigAdvancedHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigAdvancedHandler.nonce")%>" />
<input type="hidden" name="action" value="blah" /> <input type="hidden" name="action" value="blah" />
<h3>Advanced I2P Configuration</h3> <h3>Advanced I2P Configuration</h3>
<textarea rows="32" cols="60" name="config" wrap="off"><jsp:getProperty name="advancedhelper" property="settings" /></textarea><br /><hr> <textarea rows="32" cols="60" name="config" wrap="off"><jsp:getProperty name="advancedhelper" property="settings" /></textarea><br><hr>
<div class="formaction"> <div class="formaction">
<input type="submit" name="shouldsave" value="Apply" /> <input type="submit" name="shouldsave" value="Apply" />
<input type="reset" value="Cancel" /><br /> <input type="reset" value="Cancel" /><br>
<b>NOTE:</b> Some changes may require a restart to take effect. <b>NOTE:</b> Some changes may require a restart to take effect.
</div> </div></form></div></div></div></body></html>
</form>
</div>
</div>
</div>
</body>
</html>

View File

@ -2,15 +2,13 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - config clients</title>
<title>I2P Router Console - config clients</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<style type='text/css'> <style type='text/css'>
button span.hide{ button span.hide{
display:none; display:none;
} }
</style> </style></head><body>
</head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
@ -19,33 +17,28 @@ button span.hide{
<h1>I2P Client Configuration</h1> <h1>I2P Client Configuration</h1>
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
<jsp:useBean class="net.i2p.router.web.ConfigClientsHandler" id="formhandler" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigClientsHandler" id="formhandler" scope="request" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:setProperty name="formhandler" property="action" value="<%=request.getParameter("action")%>" /> <jsp:setProperty name="formhandler" property="action" value="<%=request.getParameter("action")%>" />
<jsp:setProperty name="formhandler" property="nonce" value="<%=request.getParameter("nonce")%>" /> <jsp:setProperty name="formhandler" property="nonce" value="<%=request.getParameter("nonce")%>" />
<jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" /> <jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" />
<jsp:getProperty name="formhandler" property="allMessages" /> <jsp:getProperty name="formhandler" property="allMessages" />
<div class="configure"> <div class="configure"><form action="configclients.jsp" method="POST">
<form action="configclients.jsp" method="POST">
<% String prev = System.getProperty("net.i2p.router.web.ConfigClientsHandler.nonce"); <% String prev = System.getProperty("net.i2p.router.web.ConfigClientsHandler.nonce");
if (prev != null) System.setProperty("net.i2p.router.web.ConfigClientsHandler.noncePrev", prev); if (prev != null) System.setProperty("net.i2p.router.web.ConfigClientsHandler.noncePrev", prev);
System.setProperty("net.i2p.router.web.ConfigClientsHandler.nonce", new java.util.Random().nextLong()+""); %> System.setProperty("net.i2p.router.web.ConfigClientsHandler.nonce", new java.util.Random().nextLong()+""); %>
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigClientsHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigClientsHandler.nonce")%>" />
<h3>Client Configuration</h3> <h3>Client Configuration</h3><p>
<p>
The Java clients listed below are started by the router and run in the same JVM. The Java clients listed below are started by the router and run in the same JVM.
</p><p> <div class="wideload"> </p><div class="wideload">
<jsp:getProperty name="clientshelper" property="form1" /> <p><jsp:getProperty name="clientshelper" property="form1" />
</p><p> </p><p><i>To change other client options, edit the file
<i>To change other client options, edit the file
<%=net.i2p.router.startup.ClientAppConfig.configFile(net.i2p.I2PAppContext.getGlobalContext()).getAbsolutePath()%>. <%=net.i2p.router.startup.ClientAppConfig.configFile(net.i2p.I2PAppContext.getGlobalContext()).getAbsolutePath()%>.
All changes require restart to take effect.</i> All changes require restart to take effect.</i>
</p> <hr /><div class="formaction"> </p><hr><div class="formaction">
<input type="submit" name="action" value="Save Client Configuration" /> <input type="submit" name="action" value="Save Client Configuration" />
</div></div> </div></div><h3>WebApp Configuration</h3><p>
<h3>WebApp Configuration</h3>
<p>
The Java web applications listed below are started by the webConsole client and run in the same JVM as the router. The Java web applications listed below are started by the webConsole client and run in the same JVM as the router.
They are usually web applications accessible through the router console. They are usually web applications accessible through the router console.
They may be complete applications (e.g. i2psnark), They may be complete applications (e.g. i2psnark),
@ -55,18 +48,10 @@ All changes require restart to take effect.</i>
A web app may also be disabled by removing the .war file from the webapps directory; A web app may also be disabled by removing the .war file from the webapps directory;
however the .war file and web app will reappear when you update your router to a newer version, however the .war file and web app will reappear when you update your router to a newer version,
so disabling the web app here is the preferred method. so disabling the web app here is the preferred method.
</p><p><div class="wideload"> </p><div class="wideload"><p>
<jsp:getProperty name="clientshelper" property="form2" /> <jsp:getProperty name="clientshelper" property="form2" />
</p> </p><p>
<p>
<i>All changes require restart to take effect.</i> <i>All changes require restart to take effect.</i>
</p> </p><hr><div class="formaction">
<hr><div class="formaction">
<input type="submit" name="action" value="Save WebApp Configuration" /> <input type="submit" name="action" value="Save WebApp Configuration" />
</div> </div></div></form></div></div></body></html>
</form>
</div>
</div>
</div>
</body>
</html>

View File

@ -2,8 +2,7 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - config keyring</title>
<title>I2P Router Console - config keyring</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
@ -16,21 +15,16 @@
<jsp:setProperty name="formhandler" property="*" /> <jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:getProperty name="formhandler" property="allMessages" /> <jsp:getProperty name="formhandler" property="allMessages" />
<jsp:useBean class="net.i2p.router.web.ConfigKeyringHelper" id="keyringhelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigKeyringHelper" id="keyringhelper" scope="request" />
<jsp:setProperty name="keyringhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="keyringhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<div class="configure"> <div class="configure"><p><h3>Keyring</h3>
<p>
<h3>Keyring</h3>
The router keyring is used to decrypt encrypted leaseSets. The router keyring is used to decrypt encrypted leaseSets.
The keyring may contain keys for local or remote encrypted destinations. The keyring may contain keys for local or remote encrypted destinations.
<div class="wideload"><p> <div class="wideload"><p>
<jsp:getProperty name="keyringhelper" property="summary" /> <jsp:getProperty name="keyringhelper" property="summary" />
</p></div> </p></div>
<hr /> <br>
<form action="configkeyring.jsp" method="POST"> <form action="configkeyring.jsp" method="POST">
<% String prev = System.getProperty("net.i2p.router.web.ConfigKeyringHandler.nonce"); <% String prev = System.getProperty("net.i2p.router.web.ConfigKeyringHandler.nonce");
@ -41,23 +35,14 @@
Enter keys for encrypted remote destinations here. Enter keys for encrypted remote destinations here.
Keys for local destinations must be entered on the <a href="i2ptunnel/index.jsp">I2PTunnel page</a>. Keys for local destinations must be entered on the <a href="i2ptunnel/index.jsp">I2PTunnel page</a>.
<p> <p>
<div class="wideload"> <div class="wideload">
<table> <table><tr>
<tr> <td class="mediumtags" align="right">Dest. name, hash, or full key:</td>
<td class="mediumtags" align="right">Dest. name, hash, or full key:</td> <td><textarea name="peer" cols="44" rows="1" style="height: 3em;" wrap="off"></textarea></td>
<td><textarea name="peer" cols="44" rows="1" style="height: 3em;" wrap="off"></textarea></td> </tr><tr>
<tr> <td class="mediumtags" align="right">Session Key:</td>
<td class="mediumtags" align="right">Session Key:</td> <td><input type="text" size="55" name="key" /></td>
<td><input type="text" size="55" name="key" /></td> </tr><tr>
<tr> <td></td>
<td> <td align="right"><input type="submit" name="action" value="Add key" /></td>
<td align="right"> </tr></table></div></form></div></div></body></html>
<input type="submit" name="action" value="Add key" /></td>
</table>
</form>
</div>
</div>
</div>
</body>
</html>

View File

@ -18,7 +18,7 @@
<jsp:setProperty name="formhandler" property="*" /> <jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:getProperty name="formhandler" property="allMessages" /> <jsp:getProperty name="formhandler" property="allMessages" />
<div class="configure"> <div class="configure">
<form action="configlogging.jsp" method="POST"> <form action="configlogging.jsp" method="POST">
<% String prev = System.getProperty("net.i2p.router.web.ConfigLoggingHandler.nonce"); <% String prev = System.getProperty("net.i2p.router.web.ConfigLoggingHandler.nonce");
if (prev != null) System.setProperty("net.i2p.router.web.ConfigLoggingHandler.noncePrev", prev); if (prev != null) System.setProperty("net.i2p.router.web.ConfigLoggingHandler.noncePrev", prev);
@ -28,43 +28,26 @@
<h3>Configure I2P Logging Options</h3> <h3>Configure I2P Logging Options</h3>
<div class="wideload"> <div class="wideload">
<table border="0" cellspacing="5"> <table border="0" cellspacing="5">
<tr> <tr><td class="mediumtags" align="right"><b>Logging filename:</b></td>
<td class="mediumtags" align="right"><b>Logging filename:</b> <td><input type="text" name="logfilename" size="40" value="<jsp:getProperty name="logginghelper" property="logFilePattern" />" />
<td><input type="text" name="logfilename" size="40" value="<jsp:getProperty name="logginghelper" property="logFilePattern" />" /> <br><i>(the symbol '@' will be replaced during log rotation)</i></td>
<br /> <i>(the symbol '@' will be replaced during log rotation)</i> </tr><tr><td class="mediumtags" align="right"><b>Log record format:</b></td>
<tr> <td><input type="text" name="logformat" size="20" value="<jsp:getProperty name="logginghelper" property="recordPattern" />" />
<td class="mediumtags" align="right"><b>Log record format:</b> <br> <i>(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority,
<td><input type="text" name="logformat" size="20" value="<jsp:getProperty name="logginghelper" property="recordPattern" />" /> 'm' = message)</i></td>
<br /> <i>(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, </tr><tr><td class="mediumtags" align="right"><b>Log date format:</b></td>
'm' = message)</i> <td><input type="text" name="logdateformat" size="20" value="<jsp:getProperty name="logginghelper" property="datePattern" />" />
<tr> <br> <i>('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss'
<td class="mediumtags" align="right"><b>Log date format:</b> = second, 'SSS' = millisecond)</i></td>
<td><input type="text" name="logdateformat" size="20" value="<jsp:getProperty name="logginghelper" property="datePattern" />" /> </tr><tr><td class="mediumtags" align="right"><b>Max log file size:</b></td>
<br /> <i>('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' <td><input type="text" name="logfilesize" size="4" value="<jsp:getProperty name="logginghelper" property="maxFileSize" />" /><br></td>
= second, 'SSS' = millisecond)</i> </tr><tr><td class="mediumtags" align="right"><b>Default log level:</b></td>
<tr> <td><jsp:getProperty name="logginghelper" property="defaultLogLevelBox" /><br><i>(DEBUG and INFO are not recommended defaults,
<td class="mediumtags" align="right"><b>Max log file size:</b> as they will drastically slow down your router)</i></td>
<td><input type="text" name="logfilesize" size="4" value="<jsp:getProperty name="logginghelper" property="maxFileSize" />" /> </tr><tr><td class="mediumtags" align="right"><b>Log level overrides:</b></td>
<br /> <td><jsp:getProperty name="logginghelper" property="logLevelTable" /></td>
<tr> </tr><tr><td colspan="2"><hr></td>
<td class="mediumtags" align="right"><b>Default log level:</b> </tr><tr class="tablefooter"><td colspan="2"> <div class="formaction">
<td><jsp:getProperty name="logginghelper" property="defaultLogLevelBox" /> <br /> <i>(DEBUG and INFO are not recommended defaults, <input type="submit" name="shouldsave" value="Save changes" />
as they will drastically slow down your router)</i> <input type="reset" value="Cancel" />
<tr> </div></td></tr></table></div></form></div></div></body></html>
<td class="mediumtags" align="right"><b>Log level overrides:</b>
<td><jsp:getProperty name="logginghelper" property="logLevelTable" />
<tr>
<td colspan="2"><hr>
<tr>
<td>
<td> <div align="right">
<input type="submit" name="shouldsave" value="Save changes" />
<input type="reset" value="Cancel" />
</div>
</table>
</form>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,6 +1,6 @@
<div class="confignav" id="confignav"> <div class="confignav" id="confignav">
<center> <center>
<% if (request.getRequestURI().indexOf("config.jsp") != -1) { <% if (request.getRequestURI().indexOf("config.jsp") != -1) {
%>Network | <% } else { %><a href="config.jsp">Network</a> | <% } %>Network | <% } else { %><a href="config.jsp">Network</a> | <% }
String userAgent = request.getHeader("User-Agent"); String userAgent = request.getHeader("User-Agent");
if (userAgent == null || !userAgent.contains("MSIE")) { if (userAgent == null || !userAgent.contains("MSIE")) {
@ -25,5 +25,4 @@
%>Stats | <% } else { %><a href="configstats.jsp">Stats</a> | <% } %>Stats | <% } else { %><a href="configstats.jsp">Stats</a> | <% }
if (request.getRequestURI().indexOf("configadvanced.jsp") != -1) { if (request.getRequestURI().indexOf("configadvanced.jsp") != -1) {
%>Advanced<% } else { %><a href="configadvanced.jsp">Advanced</a><% } %> %>Advanced<% } else { %><a href="configadvanced.jsp">Advanced</a><% } %>
</center> </center></div>
</div>

View File

@ -2,8 +2,7 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - config peers</title>
<title>I2P Router Console - config peers</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
@ -11,19 +10,19 @@
<h1>I2P Peer Configuration</h1> <h1>I2P Peer Configuration</h1>
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
<jsp:useBean class="net.i2p.router.web.ConfigPeerHandler" id="formhandler" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigPeerHandler" id="formhandler" scope="request" />
<jsp:setProperty name="formhandler" property="*" /> <jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:getProperty name="formhandler" property="allMessages" /> <jsp:getProperty name="formhandler" property="allMessages" />
<jsp:useBean class="net.i2p.router.web.ConfigPeerHelper" id="peerhelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigPeerHelper" id="peerhelper" scope="request" />
<jsp:setProperty name="peerhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="peerhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<% String peer = ""; <% String peer = "";
if (request.getParameter("peer") != null) if (request.getParameter("peer") != null)
peer = request.getParameter("peer"); peer = request.getParameter("peer");
%> %>
<div class="configure"> <div class="configure">
@ -40,9 +39,9 @@
<div class="mediumtags">Router Hash: <div class="mediumtags">Router Hash:
<input type="text" size="55" name="peer" value="<%=peer%>" /></div> <input type="text" size="55" name="peer" value="<%=peer%>" /></div>
<h3>Manually Ban / Unban a Peer</h3> <h3>Manually Ban / Unban a Peer</h3>
Banning will prevent the participation of this peer in tunnels you create. Banning will prevent the participation of this peer in tunnels you create.
<hr /> <hr>
<div class="formaction"> <div class="formaction">
<input type="submit" name="action" value="Ban peer until restart" /> <input type="submit" name="action" value="Ban peer until restart" />
<input type="submit" name="action" value="Unban peer" /> <input type="submit" name="action" value="Unban peer" />
<% if (! "".equals(peer)) { %> <% if (! "".equals(peer)) { %>
@ -51,17 +50,17 @@
</div> </div>
<h3>Adjust Profile Bonuses</h3> <h3>Adjust Profile Bonuses</h3>
Bonuses may be positive or negative, and affect the peer's inclusion in Fast Bonuses may be positive or negative, and affect the peer's inclusion in Fast
and High Capacity tiers. Fast peers are used for client tunnels, and High and High Capacity tiers. Fast peers are used for client tunnels, and High
Capacity peers are used for some exploratory tunnels. Current bonuses are Capacity peers are used for some exploratory tunnels. Current bonuses are
displayed on the <a href="profiles.jsp">profiles page</a>. displayed on the <a href="profiles.jsp">profiles page</a>.
<p> <p>
<% long speed = 0; long capacity = 0; <% long speed = 0; long capacity = 0;
if (! "".equals(peer)) { if (! "".equals(peer)) {
// get existing bonus values? // get existing bonus values?
} }
%> %>
<hr /> <hr>
<div class="mediumtags">Speed: <div class="mediumtags">Speed:
<input type="text" size="8" name="speed" value="<%=speed%>" /> <input type="text" size="8" name="speed" value="<%=speed%>" />
Capacity: Capacity:
@ -73,12 +72,8 @@
<jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" />
<jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:getProperty name="profilesHelper" property="shitlistSummary" /> <jsp:getProperty name="profilesHelper" property="shitlistSummary" />
<hr /> <hr>
<div class="wideload"> <div class="wideload">
<jsp:getProperty name="peerhelper" property="blocklistSummary" /> <jsp:getProperty name="peerhelper" property="blocklistSummary" />
</div> </div></div></div></body></html>
</div>
</div>
</body>
</html>

View File

@ -2,8 +2,7 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - config service</title>
<title>I2P Router Console - config service</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
@ -11,7 +10,7 @@
<h1>I2P Service Configuration</h1> <h1>I2P Service Configuration</h1>
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
<jsp:useBean class="net.i2p.router.web.ConfigServiceHandler" id="formhandler" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigServiceHandler" id="formhandler" scope="request" />
<jsp:setProperty name="formhandler" property="*" /> <jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
@ -23,7 +22,7 @@
System.setProperty("net.i2p.router.web.ConfigServiceHandler.nonce", new java.util.Random().nextLong()+""); %> System.setProperty("net.i2p.router.web.ConfigServiceHandler.nonce", new java.util.Random().nextLong()+""); %>
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigServiceHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigServiceHandler.nonce")%>" />
<h3>Shutdown the router</h3> <h3>Shutdown the router</h3>
<p>Graceful shutdown lets the router satisfy the agreements it has already made <p>Graceful shutdown lets the router satisfy the agreements it has already made
before shutting down, but may take a few minutes. If you need to kill the before shutting down, but may take a few minutes. If you need to kill the
router immediately, that option is available as well.</p> router immediately, that option is available as well.</p>
<hr><div class="formaction"> <hr><div class="formaction">
@ -32,7 +31,7 @@
<input type="submit" name="action" value="Cancel graceful shutdown" /> <input type="submit" name="action" value="Cancel graceful shutdown" />
</div> </div>
<% if (System.getProperty("wrapper.version") != null) { %> <% if (System.getProperty("wrapper.version") != null) { %>
<p>If you want the router to restart itself after shutting down, you can choose one of <p>If you want the router to restart itself after shutting down, you can choose one of
the following. This is useful in some situations - for example, if you changed the following. This is useful in some situations - for example, if you changed
some settings that client applications only read at startup, such as the routerconsole password some settings that client applications only read at startup, such as the routerconsole password
or the interface it listens on. A graceful restart will take a few minutes (but your peers or the interface it listens on. A graceful restart will take a few minutes (but your peers
@ -45,46 +44,41 @@
<% if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %> <% if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %>
<h3>Systray integration</h3> <h3>Systray integration</h3>
<p>On the windows platform, there is a small application to sit in the system <p>On the windows platform, there is a small application to sit in the system
tray, allowing you to view the router's status (later on, I2P client applications tray, allowing you to view the router's status (later on, I2P client applications
will be able to integrate their own functionality into the system tray as well). will be able to integrate their own functionality into the system tray as well).
If you are on windows, you can either enable or disable that icon here.</p> If you are on windows, you can either enable or disable that icon here.</p>
<hr><div class="formaction"> <hr><div class="formaction">
<input type="submit" name="action" value="Show systray icon" /> <input type="submit" name="action" value="Show systray icon" />
<input type="submit" name="action" value="Hide systray icon" /> <input type="submit" name="action" value="Hide systray icon" />
</div> </div><h3>Run on startup</h3>
<h3>Run on startup</h3> <p>You can control whether I2P is run on startup or not by selecting one of the
<p>You can control whether I2P is run on startup or not by selecting one of the
following options - I2P will install (or remove) a service accordingly. You can following options - I2P will install (or remove) a service accordingly. You can
also run the <code>install_i2p_service_winnt.bat</code> (or also run the <code>install_i2p_service_winnt.bat</code> (or
<code>uninstall_i2p_service_winnt.bat</code>) from the command line, if you prefer.</p> <code>uninstall_i2p_service_winnt.bat</code>) from the command line, if you prefer.</p>
<hr><div class="formaction"> <hr><div class="formaction">
<input type="submit" name="action" value="Run I2P on startup" /> <input type="submit" name="action" value="Run I2P on startup" />
<input type="submit" name="action" value="Don't run I2P on startup" /></div> <input type="submit" name="action" value="Don't run I2P on startup" /></div>
<p><b>Note:</b> If you are running I2P as service right now, removing it will shut <p><b>Note:</b> If you are running I2P as service right now, removing it will shut
down your router immediately. You may want to consider shutting down gracefully, as down your router immediately. You may want to consider shutting down gracefully, as
above, then running uninstall_i2p_service_winnt.bat.</p> above, then running uninstall_i2p_service_winnt.bat.</p>
<% } %> <% } %>
<% if (System.getProperty("wrapper.version") != null) { %> <% if (System.getProperty("wrapper.version") != null) { %>
<h3>Debugging</h3> <h3>Debugging</h3>
<p>At times, it may be helpful to debug I2P by getting a thread dump. To do so, <p>At times, it may be helpful to debug I2P by getting a thread dump. To do so,
please select the following option and review the thread dumped to please select the following option and review the thread dumped to
<a href="logs.jsp#servicelogs">wrapper.log</a>.</p> <a href="logs.jsp#servicelogs">wrapper.log</a>.</p>
<hr><div class="formaction"> <hr><div class="formaction">
<input type="submit" name="action" value="Dump threads" /> <input type="submit" name="action" value="Dump threads" />
<% } %></div> <% } %></div>
<h3>Launch browser on router startup?</h3> <h3>Launch browser on router startup?</h3>
<p>I2P's main configuration interface is this web console, so for your convenience <p>I2P's main configuration interface is this web console, so for your convenience
I2P can launch a web browser pointing at I2P can launch a web browser pointing at
<a href="http://127.0.0.1:7657/index.jsp">http://127.0.0.1:7657/index.jsp</a> whenever <a href="http://127.0.0.1:7657/index.jsp">http://127.0.0.1:7657/index.jsp</a> whenever
the router starts up.</p> the router starts up.</p>
<hr><div class="formaction"> <hr><div class="formaction">
<input type="submit" name="action" value="View console on startup" /> <input type="submit" name="action" value="View console on startup" />
<input type="submit" name="action" value="Do not view console on startup" /> <input type="submit" name="action" value="Do not view console on startup" />
</form></div> </div></form></div></div></body></html>
</div>
</div>
</body>
</html>

View File

@ -2,8 +2,7 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - config stats</title>
<title>I2P Router Console - config stats</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<script type="text/javascript"> <script type="text/javascript">
function init() function init()
@ -73,39 +72,40 @@ function toggleAll(category)
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigStatsHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigStatsHandler.nonce")%>" />
<h3>Configure I2P Stat Collection</h3> <h3>Configure I2P Stat Collection</h3>
Enable full stats? Enable full stats?
<input type="checkbox" class="optbox" name="isFull" value="true" <% <input type="checkbox" class="optbox" name="isFull" value="true" <%
if (statshelper.getIsFull()) { %>checked="true" <% } %>/> if (statshelper.getIsFull()) { %>checked="true" <% } %>/>
(change requires restart to take effect)<br /> (change requires restart to take effect)<br>
Stat file: <input type="text" name="filename" value="<%=statshelper.getFilename()%>" /><br /> Stat file: <input type="text" name="filename" value="<%=statshelper.getFilename()%>" /><br>
Filter: (<a href="javascript: void(null);" onclick="toggleAll('*')">toggle all</a>)<hr /> Filter: (<a href="javascript: void(null);" onclick="toggleAll('*')">toggle all</a>)<br>
<div class="wideload"> <div class="wideload">
<table> <table>
<% while (statshelper.hasMoreStats()) { <% while (statshelper.hasMoreStats()) {
while (statshelper.groupRequired()) { %> while (statshelper.groupRequired()) { %>
<tr class="tablefooter"><td align="left" colspan="3"> <tr class="tablefooter">
<td align="left" colspan="3">
<b><%=statshelper.getCurrentGroupName()%></b> <b><%=statshelper.getCurrentGroupName()%></b>
(<a href="javascript: void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')">toggle all</a>) (<a href="javascript: void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')">toggle all</a>)
</td></tr><tr class="tablefooter"><td align="center"><b>Log</b></td><td align="center"><b>Graph</b></td><td></td></tr><% </td></tr>
<tr class="tablefooter">
<td align="center"><b>Log</b></td>
<td align="center"><b>Graph</b></td>
<td></td></tr>
<%
} // end iterating over required groups for the current stat %> } // end iterating over required groups for the current stat %>
<tr><td align="center"> <tr><td align="center">
<a name="<%=statshelper.getCurrentStatName()%>"></a> <a name="<%=statshelper.getCurrentStatName()%>"></a>
<input id="<%=statshelper.getCurrentGroupName()%>" type="checkbox" class="optbox" name="statList" value="<%=statshelper.getCurrentStatName()%>" <% <input id="<%=statshelper.getCurrentGroupName()%>" type="checkbox" class="optbox" name="statList" value="<%=statshelper.getCurrentStatName()%>" <%
if (statshelper.getCurrentIsLogged()) { %>checked="true" <% } %>/></td> if (statshelper.getCurrentIsLogged()) { %>checked="true" <% } %>/></td>
<td align="center"> <td align="center">
<% if (statshelper.getCurrentCanBeGraphed()) { %> <% if (statshelper.getCurrentCanBeGraphed()) { %>
<input id="<%=statshelper.getCurrentGroupName()%>" type="checkbox" class="optbox" name="graphList" value="<%=statshelper.getCurrentGraphName()%>" <% <input id="<%=statshelper.getCurrentGroupName()%>" type="checkbox" class="optbox" name="graphList" value="<%=statshelper.getCurrentGraphName()%>" <%
if (statshelper.getCurrentIsGraphed()) { %>checked="true" <% } %>/><% } %></td> if (statshelper.getCurrentIsGraphed()) { %>checked="true" <% } %>/><% } %></td>
<td align="left"><b><%=statshelper.getCurrentStatName()%>:</b><br /> <td align="left"><b><%=statshelper.getCurrentStatName()%>:</b><br>
<%=statshelper.getCurrentStatDescription()%></td></tr><% <%=statshelper.getCurrentStatDescription()%></td></tr><%
} // end iterating over all stats %> } // end iterating over all stats %>
<tr><td colspan="3"></td></tr> <tr><td colspan="3"></td></tr>
<tr><td align="center"><input type="checkbox" class="optbox" name="explicitFilter" /></td> <tr><td align="center"><input type="checkbox" class="optbox" name="explicitFilter" /></td>
<td colspan="2">Advanced filter: <td colspan="2">Advanced filter:
<input type="text" name="explicitFilterValue" value="<%=statshelper.getExplicitFilter()%>" size="40" /></td></tr> <input type="text" name="explicitFilterValue" value="<%=statshelper.getExplicitFilter()%>" size="40" /></td></tr>
<tr class="tablefooter"><td colspan="3" align="right"><input type="submit" name="shouldsave" value="Save changes" /><input type="reset" value="Cancel" /></td></tr></form> <tr class="tablefooter"><td colspan="3" align="right"><input type="submit" name="shouldsave" value="Save changes" /><input type="reset" value="Cancel" /></td></tr>
</table> </table></div></form></div></div></body></html>
</div>
</div>
</div>
</body>
</html>

View File

@ -2,8 +2,7 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - config tunnels</title>
<title>I2P Router Console - config tunnels</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
@ -21,16 +20,14 @@
<jsp:setProperty name="formhandler" property="nonce" value="<%=request.getParameter("nonce")%>" /> <jsp:setProperty name="formhandler" property="nonce" value="<%=request.getParameter("nonce")%>" />
<jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" /> <jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" />
<jsp:getProperty name="formhandler" property="allMessages" /> <jsp:getProperty name="formhandler" property="allMessages" />
<div class="configure"> <div class="configure"><p><i>
<p><i>
NOTE: The default settings work for most people. NOTE: The default settings work for most people.
There is a fundamental tradeoff between anonymity and performance. There is a fundamental tradeoff between anonymity and performance.
Tunnels longer than 3 hops (for example 2 hops + 0-2 hops, 3 hops + 0-1 hops, 3 hops + 0-2 hops), Tunnels longer than 3 hops (for example 2 hops + 0-2 hops, 3 hops + 0-1 hops, 3 hops + 0-2 hops),
or a high quantity + backup quantity, may severely reduce performance or reliability. or a high quantity + backup quantity, may severely reduce performance or reliability.
High CPU and/or high outbound bandwidth usage may result. High CPU and/or high outbound bandwidth usage may result.
Change these settings with care, and adjust them if you have problems. Change these settings with care, and adjust them if you have problems.
</i></p> </i></p><div class="wideload">
<div class="wideload">
<form action="configtunnels.jsp" method="POST"> <form action="configtunnels.jsp" method="POST">
<% String prev = System.getProperty("net.i2p.router.web.ConfigTunnelsHandler.nonce"); <% String prev = System.getProperty("net.i2p.router.web.ConfigTunnelsHandler.nonce");
if (prev != null) System.setProperty("net.i2p.router.web.ConfigTunnelsHandler.noncePrev", prev); if (prev != null) System.setProperty("net.i2p.router.web.ConfigTunnelsHandler.noncePrev", prev);
@ -38,13 +35,8 @@
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigTunnelsHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigTunnelsHandler.nonce")%>" />
<input type="hidden" name="action" value="blah" /> <input type="hidden" name="action" value="blah" />
<jsp:getProperty name="tunnelshelper" property="form" /> <jsp:getProperty name="tunnelshelper" property="form" />
<i>Note - Exploratory tunnel setting changes are stored in the router.config file.</i></br> <i>Note - Exploratory tunnel setting changes are stored in the router.config file.</i><br>
<i>Client tunnel changes are temporary and are not saved.</i><br> <i>Client tunnel changes are temporary and are not saved.</i><br>
<i>To make permanent client tunnel changes see the </i><a href="i2ptunnel/index.jsp">i2ptunnel page</a>.<br> <i>To make permanent client tunnel changes see the </i><a href="i2ptunnel/index.jsp">i2ptunnel page</a>.<br>
<hr /><div class="formaction"><input type="submit" name="shouldsave" value="Save changes" /> <input type="reset" value="Cancel" /></div> <hr><div class="formaction"><input type="submit" name="shouldsave" value="Save changes" /> <input type="reset" value="Cancel" /></div>
</form> </form></div></div></div></body></html>
</div>
</div>
</div>
</body>
</html>

View File

@ -2,8 +2,7 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - config UI</title>
<title>I2P Router Console - config UI</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
@ -16,13 +15,12 @@
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
<jsp:useBean class="net.i2p.router.web.ConfigUIHandler" id="formhandler" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigUIHandler" id="formhandler" scope="request" />
<jsp:setProperty name="formhandler" property="*" /> <jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:getProperty name="formhandler" property="allMessages" /> <jsp:getProperty name="formhandler" property="allMessages" />
<div class="configure"> <div class="configure"><h3>Router Console Theme</h3>
<h3>Router Console Theme</h3>
<% <%
// userAgent defined in confignav // userAgent defined in confignav
if (userAgent == null || !userAgent.contains("MSIE")) { if (userAgent == null || !userAgent.contains("MSIE")) {
@ -34,14 +32,11 @@
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigUIHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigUIHandler.nonce")%>" />
<input type="hidden" name="action" value="blah" /> <input type="hidden" name="action" value="blah" />
<jsp:getProperty name="uihelper" property="settings" /> <jsp:getProperty name="uihelper" property="settings" />
<hr><div class="formaction"> <hr><div class="formaction">
<input type="submit" name="shouldsave" value="Apply" /> <input type="reset" value="Cancel" /> <input type="submit" name="shouldsave" value="Apply" /> <input type="reset" value="Cancel" />
</form></div> </div></form></div>
<% } else { %> <% } else { %>
Theme selection disabled for Internet Explorer, sorry.<hr>If you're not using IE, it's likely that Theme selection disabled for Internet Explorer, sorry.<hr>If you're not using IE, it's likely that
your browser is pretending to be IE; please configure your browser (or proxy) to use a different User Agent string if you'd like to access the console themes. your browser is pretending to be IE; please configure your browser (or proxy) to use a different User Agent string if you'd like to access the console themes.
<% } %> <% } %>
</div> </div></body></html>
</div>
</body>
</html>

View File

@ -2,8 +2,7 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - config update</title>
<title>I2P Router Console - config update</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
@ -11,16 +10,15 @@
<h1>I2P Update Configuration</h1> <h1>I2P Update Configuration</h1>
<div class="main" id="main"> <div class="main" id="main">
<%@include file="confignav.jsp" %> <%@include file="confignav.jsp" %>
<jsp:useBean class="net.i2p.router.web.ConfigUpdateHandler" id="formhandler" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigUpdateHandler" id="formhandler" scope="request" />
<jsp:setProperty name="formhandler" property="*" /> <jsp:setProperty name="formhandler" property="*" />
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:getProperty name="formhandler" property="allMessages" /> <jsp:getProperty name="formhandler" property="allMessages" />
<jsp:useBean class="net.i2p.router.web.ConfigUpdateHelper" id="updatehelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigUpdateHelper" id="updatehelper" scope="request" />
<jsp:setProperty name="updatehelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="updatehelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<div class="messages"> <div class="messages">
<i><jsp:getProperty name="updatehelper" property="newsStatus" /></i></div> <i><jsp:getProperty name="updatehelper" property="newsStatus" /></i></div>
<div class="configure"> <div class="configure">
<form action="configupdate.jsp" method="POST"> <form action="configupdate.jsp" method="POST">
<% String prev = System.getProperty("net.i2p.router.web.ConfigUpdateHandler.nonce"); <% String prev = System.getProperty("net.i2p.router.web.ConfigUpdateHandler.nonce");
@ -29,56 +27,33 @@
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigUpdateHandler.nonce")%>" /> <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigUpdateHandler.nonce")%>" />
<h3>Check for I2P and news updates</h3> <h3>Check for I2P and news updates</h3>
<div class="wideload"><table border="0" cellspacing="5"> <div class="wideload"><table border="0" cellspacing="5">
<tr> <tr><td colspan="2"></tr>
<td colspan="2"></tr> <tr><td class= "mediumtags" align="right"><b>News &amp; I2P Updates:</b></td>
<tr> <td> <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> <i>Update In Progress</i><br> <% } else { %> <input type="submit" name="action" value="Check for updates" />
<td class= "mediumtags" align="right"><b>News:</b></td> <% } %></td></tr>
<td> <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> <i>Update In Progress</i><br /> <% } else { %> <input type="submit" name="action" value="Check for update now" /> <tr><td colspan="2"><br></td></tr>
<% } %></tr> <tr><td class= "mediumtags" align="right"><b>News URL:</b></td>
<tr>
<td colspan="2"><hr /></td>
</tr>
<tr>
<td class= "mediumtags" align="right"><b>News URL:</b></td>
<td><input type="text" size="60" name="newsURL" value="<jsp:getProperty name="updatehelper" property="newsURL" />"></td> <td><input type="text" size="60" name="newsURL" value="<jsp:getProperty name="updatehelper" property="newsURL" />"></td>
</tr> </tr><tr><td class= "mediumtags" align="right"><b>Refresh frequency:</b>
<tr> <td><jsp:getProperty name="updatehelper" property="refreshFrequencySelectBox" /></td><tr>
<td class= "mediumtags" align="right"><b>Refresh frequency:</b> <td class= "mediumtags" align="right"><b>Update policy:</b></td>
<td><jsp:getProperty name="updatehelper" property="refreshFrequencySelectBox" /> <td><jsp:getProperty name="updatehelper" property="updatePolicySelectBox" /></td>
<tr> <tr><td class= "mediumtags" align="right"><b>Update through the eepProxy?</b></td>
<td class= "mediumtags" align="right"><b>Update policy:</b> <td><jsp:getProperty name="updatehelper" property="updateThroughProxy" /></td>
<td><jsp:getProperty name="updatehelper" property="updatePolicySelectBox" /> </tr><tr><td class= "mediumtags" align="right"><b>eepProxy host:</b></td>
<tr> <td><input type="text" size="10" name="proxyHost" value="<jsp:getProperty name="updatehelper" property="proxyHost" />" /></td>
<td class= "mediumtags" align="right"><b>Update through the eepProxy?</b> </tr><tr><td class= "mediumtags" align="right"><b>eepProxy port:</b></td>
<td><jsp:getProperty name="updatehelper" property="updateThroughProxy" /> <td><input type="text" size="4" name="proxyPort" value="<jsp:getProperty name="updatehelper" property="proxyPort" />" /></td>
<tr> </tr><tr><td class= "mediumtags" align="right"><b>Update URLs:</b></td>
<td class= "mediumtags" align="right"><b>eepProxy host:</b> <td><textarea name="updateURL" wrap="off"><jsp:getProperty name="updatehelper" property="updateURL" /></textarea></td>
<td><input type="text" size="10" name="proxyHost" value="<jsp:getProperty name="updatehelper" property="proxyHost" />" /> </tr><tr><td class= "mediumtags" align="right"><b>Trusted keys:</b></td>
<tr> <td><textarea name="trustedKeys" wrap="off"><jsp:getProperty name="updatehelper" property="trustedKeys" /></textarea></td>
<td class= "mediumtags" align="right"><b>eepProxy port:</b> </tr><tr><td class= "mediumtags" align="right"><b>Update with unsigned development builds?</b></td>
<td><input type="text" size="4" name="proxyPort" value="<jsp:getProperty name="updatehelper" property="proxyPort" />" /> <td><jsp:getProperty name="updatehelper" property="updateUnsigned" /></td>
<tr> </tr><tr><td class= "mediumtags" align="right"><b>Unsigned Build URL:</b></td>
<td class= "mediumtags" align="right"><b>Update URLs:</b>
<td><textarea name="updateURL" wrap="off"><jsp:getProperty name="updatehelper" property="updateURL" /></textarea>
<tr>
<td class= "mediumtags" align="right"><b>Trusted keys:</b>
<td><textarea name="trustedKeys" wrap="off"><jsp:getProperty name="updatehelper" property="trustedKeys" /></textarea>
<tr>
<td class= "mediumtags" align="right"><b>Update with unsigned development builds?</b>
<td><jsp:getProperty name="updatehelper" property="updateUnsigned" />
<tr>
<td class= "mediumtags" align="right"><b>Unsigned Build URL:</b></td>
<td><input type="text" size="60" name="zipURL" value="<jsp:getProperty name="updatehelper" property="zipURL" />"></td> <td><input type="text" size="60" name="zipURL" value="<jsp:getProperty name="updatehelper" property="zipURL" />"></td>
<tr> </tr><tr class="tablefooter"><td colspan="2">
<td> <div class="formaction">
<td><div class="formaction"> <input type="submit" name="action" value="Save" />
<input type="submit" name="action" value="Save" /> <input type="reset" value="Cancel" />
<input type="reset" value="Cancel" /> </div></td></tr></table></div></form></div></div></body></html>
</div>
</table>
</div>
</form>
</div>
</div>
</body>
</html>

View File

@ -8,14 +8,14 @@
response.setHeader("Cache-Control","no-cache"); response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0); response.setDateHeader("Expires", 0);
// the above will b0rk if the servlet engine has already flushed // the above will b0rk if the servlet engine has already flushed
// the response prior to including this file, so it should be // the response prior to including this file, so it should be
// near the top // near the top
if (request.getParameter("i2p.contextId") != null) { if (request.getParameter("i2p.contextId") != null) {
session.setAttribute("i2p.contextId", request.getParameter("i2p.contextId")); session.setAttribute("i2p.contextId", request.getParameter("i2p.contextId"));
} }
%> %>
<jsp:useBean class="net.i2p.router.web.CSSHelper" id="cssHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.CSSHelper" id="cssHelper" scope="request" />
<jsp:setProperty name="cssHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="cssHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<link href="<%=cssHelper.getTheme(request.getHeader("User-Agent"))%>console.css" rel="stylesheet" type="text/css" /> <link href="<%=cssHelper.getTheme(request.getHeader("User-Agent"))%>console.css" rel="stylesheet" type="text/css">
<!--[if IE]><link href="/themes/console/classic/ieshim.css" rel="stylesheet" type="text/css" /><![endif]--> <!--[if IE]><link href="/themes/console/classic/ieshim.css" rel="stylesheet" type="text/css" /><![endif]-->

View File

@ -1,5 +1,5 @@
<%@page contentType="text/plain" <%@page contentType="text/plain"
%><jsp:useBean id="helper" class="net.i2p.router.web.StatHelper" %><jsp:useBean id="helper" class="net.i2p.router.web.StatHelper"
/><jsp:setProperty name="helper" property="peer" value="<%=request.getParameter("peer")%>" /><jsp:setProperty name="helper" property="peer" value="<%=request.getParameter("peer")%>"
/><jsp:setProperty name="helper" property="writer" value="<%=out%>" /><jsp:setProperty name="helper" property="writer" value="<%=out%>"
/><jsp:getProperty name="helper" property="profile" /> /><jsp:getProperty name="helper" property="profile" />

View File

@ -12,12 +12,10 @@
} }
// If it can't find the iframe or viewtheme.jsp I wonder if the whole thing blows up... // If it can't find the iframe or viewtheme.jsp I wonder if the whole thing blows up...
%> %>
<html><head> <html><head><title>I2P Router Console</title>
<title>I2P Router Console</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
<link rel="shortcut icon" href="favicon.ico" /> <link rel="shortcut icon" href="favicon.ico" /></head><body>
</head><body>
<% <%
if (System.getProperty("router.consoleNonce") == null) { if (System.getProperty("router.consoleNonce") == null) {
System.setProperty("router.consoleNonce", new java.util.Random().nextLong() + ""); System.setProperty("router.consoleNonce", new java.util.Random().nextLong() + "");
@ -27,6 +25,4 @@ if (System.getProperty("router.consoleNonce") == null) {
<h1><%=ERROR_CODE%> <%=ERROR_MESSAGE%></h1> <h1><%=ERROR_CODE%> <%=ERROR_MESSAGE%></h1>
<div class="warning" id="warning"> <div class="warning" id="warning">
The Router Console page <%=ERROR_URI%> was not found. The Router Console page <%=ERROR_URI%> was not found.
</div> </div></body></html>
</body>
</html>

View File

@ -2,8 +2,7 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - graphs</title>
<title>I2P Router Console - graphs</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
@ -11,14 +10,11 @@
<h1>I2P Performance Graphs</h1> <h1>I2P Performance Graphs</h1>
<div class="main" id="main"> <div class="main" id="main">
<div class="graphspanel"> <div class="graphspanel">
<div class="widepanel"> <div class="widepanel">
<jsp:useBean class="net.i2p.router.web.GraphHelper" id="graphHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.GraphHelper" id="graphHelper" scope="request" />
<jsp:setProperty name="graphHelper" property="*" /> <jsp:setProperty name="graphHelper" property="*" />
<jsp:setProperty name="graphHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="graphHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:setProperty name="graphHelper" property="writer" value="<%=out%>" /> <jsp:setProperty name="graphHelper" property="writer" value="<%=out%>" />
<jsp:getProperty name="graphHelper" property="images" /> <jsp:getProperty name="graphHelper" property="images" />
<jsp:getProperty name="graphHelper" property="form" /> <jsp:getProperty name="graphHelper" property="form" />
</div> </div></div></div></body></html>
</div>
</body>
</html>

View File

@ -2,34 +2,27 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - help</title>
<title>I2P Router Console - help</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1>I2P Router Help & Support</h1> <h1>I2P Router Help & Support</h1>
<div class="main" id="main"><div align="justify"> <div class="main" id="main"><div align="justify">
If you'd like to help improve or translate the documentation, or If you'd like to help improve or translate the documentation, or
help with other aspects of the project, please see the documentation for help with other aspects of the project, please see the documentation for
<a href="http://www.i2p2.i2p/getinvolved.html">volunteers.</a> <a href="http://www.i2p2.i2p/getinvolved.html">volunteers.</a>
<br><br>Further assistance is available here: <br><br>Further assistance is available here:<br></div>
<br></div>
<ul class="links"> <ul class="links">
<li class="tidylist"><a href="http://www.i2p2.i2p/faq.html">FAQ on www.i2p2.i2p</a> <li class="tidylist"><a href="http://www.i2p2.i2p/faq.html">FAQ on www.i2p2.i2p</a>
<li class="tidylist"><a href="http://www.i2p2.i2p/faq_de.html">Deutsch FAQ</a>. <li class="tidylist"><a href="http://www.i2p2.i2p/faq_de.html">Deutsch FAQ</a>.</ul><br>
</ul>
<br>
You may also try the <a href="http://forum.i2p/">I2P forum</a> You may also try the <a href="http://forum.i2p/">I2P forum</a>
or IRC.<br /> or IRC.<br>
<h2>Summary Bar Information</h2><div align="justify"> <h2>Summary Bar Information</h2><div align="justify">
Many of the stats on the summary bar may be Many of the stats on the summary bar may be
<a href="configstats.jsp">configured</a> to be <a href="configstats.jsp">configured</a> to be
<a href="graphs.jsp">graphed</a> for further analysis. <a href="graphs.jsp">graphed</a> for further analysis.
</div> </div><h3>General</h3><ul>
<h3>General</h3>
<ul>
<li class="tidylist"><b>Ident:</b> <li class="tidylist"><b>Ident:</b>
The first four characters (24 bits) of your 44-character (256-bit) Base64 router hash. The first four characters (24 bits) of your 44-character (256-bit) Base64 router hash.
The full hash is shown on your <a href="netdb.jsp?r=.">router info page</a>. The full hash is shown on your <a href="netdb.jsp?r=.">router info page</a>.
@ -43,10 +36,7 @@ your computer's time.
<li class="tidylist"><b>Reachability:</b> <li class="tidylist"><b>Reachability:</b>
The router's view of whether it can be contacted by other routers. The router's view of whether it can be contacted by other routers.
Further information is on the <a href="config.jsp#help">configuration page</a>. Further information is on the <a href="config.jsp#help">configuration page</a>.
</ul> </ul><h3>Peers</h3><ul>
<h3>Peers</h3>
<ul>
<li class="tidylist"><b>Active:</b> <li class="tidylist"><b>Active:</b>
The first number is the number of peers you've sent or received a message from in the last few minutes. The first number is the number of peers you've sent or received a message from in the last few minutes.
This may range from 8-10 to several hundred, depending on your total bandwidth, This may range from 8-10 to several hundred, depending on your total bandwidth,
@ -75,21 +65,17 @@ This number is not the total size of the network;
it may vary widely depending on your total bandwidth, it may vary widely depending on your total bandwidth,
shared bandwidth, and locally-generated traffic. shared bandwidth, and locally-generated traffic.
I2P does not require a router to know every other router. I2P does not require a router to know every other router.
</ul> </ul><h3>Bandwidth in/out</h3><div align="justify">
<h3>Bandwidth in/out</h3><div align="justify">
Should be self-explanatory. All values are in bytes per second, not bits per second. Should be self-explanatory. All values are in bytes per second, not bits per second.
Change your bandwidth limits on the <a href="config.jsp#help">configuration page</a>. Change your bandwidth limits on the <a href="config.jsp#help">configuration page</a>.
Bandwidth is <a href="graphs.jsp">graphed</a> by default. Bandwidth is <a href="graphs.jsp">graphed</a> by default.</div>
</div>
<h3>Local destinations</h3><div align="justify"> <h3>Local destinations</h3><div align="justify">
The local applications connecting through your router. The local applications connecting through your router.
These may be clients started through <a href="i2ptunnel/index.jsp">I2PTunnel</a> These may be clients started through <a href="i2ptunnel/index.jsp">I2PTunnel</a>
or external programs connecting through SAM, BOB, or directly to I2CP. or external programs connecting through SAM, BOB, or directly to I2CP.
</div> </div><h3>Tunnels in/out</h3><div align="justify">
<h3>Tunnels in/out</h3><div align="justify"> The actual tunnels are shown on the <a href="tunnels.jsp">the tunnels page</a>.</div><br><ul>
The actual tunnels are shown on the <a href="tunnels.jsp">the tunnels page</a>.</div><br>
<ul>
<li class="tidylist"><div align="justify"><b>Exploratory:</b> <li class="tidylist"><div align="justify"><b>Exploratory:</b>
Tunnels built by your router and used for communication with the floodfill peers, Tunnels built by your router and used for communication with the floodfill peers,
building new tunnels, and testing existing tunnels.</div> building new tunnels, and testing existing tunnels.</div>
@ -102,12 +88,10 @@ shared bandwidth, and amount of locally-generated traffic.
The recommended method for limiting participating tunnels is The recommended method for limiting participating tunnels is
to change your share percentage on the <a href="config.jsp#help">configuration page</a>. to change your share percentage on the <a href="config.jsp#help">configuration page</a>.
You may also limit the total number by setting <tt>router.maxParticipatingTunnels=nnn</tt> on You may also limit the total number by setting <tt>router.maxParticipatingTunnels=nnn</tt> on
the <a href="configadvanced.jsp">advanced configuration page</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Enable graphing]</a>. the <a href="configadvanced.jsp">advanced configuration page</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Enable graphing]</a>.</ul>
</ul>
<h3>Congestion</h3><div align="justify"> <h3>Congestion</h3><div align="justify">
Some basic indications of router overload:</div><br> Some basic indications of router overload:</div><br><ul>
<ul>
<li class="tidylist"><b>Job lag:</b> <li class="tidylist"><b>Job lag:</b>
How long jobs are waiting before execution. The job queue is listed on the <a href="jobs.jsp">jobs page</a>. How long jobs are waiting before execution. The job queue is listed on the <a href="jobs.jsp">jobs page</a>.
Unfortunately, there are several other job queues in the router that may be congested, Unfortunately, there are several other job queues in the router that may be congested,
@ -143,42 +127,41 @@ participating tunnel through your router.
Your router may accept all requests, accept or reject a percentage of requests, Your router may accept all requests, accept or reject a percentage of requests,
or reject all requests for a number of reasons, to control or reject all requests for a number of reasons, to control
the bandwidth and CPU demands and maintain capacity for the bandwidth and CPU demands and maintain capacity for
local clients. local clients.</ul>
</ul>
<h2>Legal stuff</h2><div align="justify"> <h2>Legal stuff</h2><div align="justify">
The I2P router (router.jar) and SDK (i2p.jar) are almost entirely public domain, with The I2P router (router.jar) and SDK (i2p.jar) are almost entirely public domain, with
a few notable exceptions:</div><br /><ul> a few notable exceptions:</div><br><ul>
<li class="tidylist">ElGamal and DSA code, under the BSD license, written by TheCrypto</li> <li class="tidylist">ElGamal and DSA code, under the BSD license, written by TheCrypto</li>
<li class="tidylist">SHA256 and HMAC-SHA256, under the MIT license, written by the Legion of the Bouncycastle</li> <li class="tidylist">SHA256 and HMAC-SHA256, under the MIT license, written by the Legion of the Bouncycastle</li>
<li class="tidylist">AES code, under the Cryptix (MIT) license, written by the Cryptix team</li> <li class="tidylist">AES code, under the Cryptix (MIT) license, written by the Cryptix team</li>
<li class="tidylist">SNTP code, under the BSD license, written by Adam Buckley</li> <li class="tidylist">SNTP code, under the BSD license, written by Adam Buckley</li>
<li class="tidylist">The rest is outright public domain, written by jrandom, mihi, hypercubus, oOo, <li class="tidylist">The rest is outright public domain, written by jrandom, mihi, hypercubus, oOo,
ugha, duck, shendaras, and others.</li> ugha, duck, shendaras, and others.</li>
</ul> </ul>
<p>On top of the I2P router are a series of client applications, each with their own set of <p>On top of the I2P router are a series of client applications, each with their own set of
licenses and dependencies. This webpage is being served as part of the I2P routerconsole licenses and dependencies. This webpage is being served as part of the I2P routerconsole
client application, which is built off a trimmed down <a href="http://jetty.mortbay.com/jetty/index.html">Jetty</a> client application, which is built off a trimmed down <a href="http://jetty.mortbay.com/jetty/index.html">Jetty</a>
instance (trimmed down, as in, we do not include the demo apps or other add-ons, and we simplify configuration), instance (trimmed down, as in, we do not include the demo apps or other add-ons, and we simplify configuration),
allowing you to deploy standard JSP/Servlet web applications into your router. Jetty in turn makes use of allowing you to deploy standard JSP/Servlet web applications into your router. Jetty in turn makes use of
Apache's javax.servlet (javax.servlet.jar) implementation. Apache's javax.servlet (javax.servlet.jar) implementation.
This product includes software developed by the Apache Software Foundation This product includes software developed by the Apache Software Foundation
(http://www.apache.org/). </p> (http://www.apache.org/). </p>
<p>Another application you can see on this webpage is <a href="http://www.i2p2.i2p/i2ptunnel">I2PTunnel</a> <p>Another application you can see on this webpage is <a href="http://www.i2p2.i2p/i2ptunnel">I2PTunnel</a>
(your <a href="i2ptunnel/" target="_blank">web interface</a>) - a GPL'ed application written by mihi that (your <a href="i2ptunnel/" target="_blank">web interface</a>) - a GPL'ed application written by mihi that
lets you tunnel normal TCP/IP traffic over I2P (such as the eepproxy and the irc proxy). There is also a lets you tunnel normal TCP/IP traffic over I2P (such as the eepproxy and the irc proxy). There is also a
<a href="http://susi.i2p/">susimail</a> web based mail client <a href="susimail/susimail">available</a> on <a href="http://susi.i2p/">susimail</a> web based mail client <a href="susimail/susimail">available</a> on
the console, which is a GPL'ed application written by susi23. The addressbook application, written by the console, which is a GPL'ed application written by susi23. The addressbook application, written by
<a href="http://ragnarok.i2p/">Ragnarok</a> helps maintain your hosts.txt files (see ./addressbook/ for <a href="http://ragnarok.i2p/">Ragnarok</a> helps maintain your hosts.txt files (see ./addressbook/ for
more information).</p> more information).</p>
<p>The router by default also includes human's public domain <a href="http://www.i2p2.i2p/sam">SAM</a> bridge, <p>The router by default also includes human's public domain <a href="http://www.i2p2.i2p/sam">SAM</a> bridge,
which other client applications (such the <a href="http://duck.i2p/i2p-bt/">bittorrent port</a>) can use. which other client applications (such the <a href="http://duck.i2p/i2p-bt/">bittorrent port</a>) can use.
There is also an optimized library for doing large number calculations - jbigi - which in turn uses the There is also an optimized library for doing large number calculations - jbigi - which in turn uses the
LGPL licensed <a href="http://swox.com/gmp/">GMP</a> library, tuned for various PC architectures. Launchers for windows users are built with <a href="http://launch4j.sourceforge.net/">Launch4J</a>, and the installer is built with <a href="http://www.izforge.com/izpack/">IzPack</a>. For LGPL licensed <a href="http://swox.com/gmp/">GMP</a> library, tuned for various PC architectures. Launchers for windows users are built with <a href="http://launch4j.sourceforge.net/">Launch4J</a>, and the installer is built with <a href="http://www.izforge.com/izpack/">IzPack</a>. For
details on other applications available, as well as their licenses, please see the details on other applications available, as well as their licenses, please see the
<a href="http://www.i2p2.i2p/licenses">license policy</a>. Source for the I2P code and most bundled <a href="http://www.i2p2.i2p/licenses">license policy</a>. Source for the I2P code and most bundled
client applications can be found on our <a href="http://www.i2p2.i2p/download">download page</a>. client applications can be found on our <a href="http://www.i2p2.i2p/download">download page</a>.
.</p> .</p>
@ -190,10 +173,7 @@ client applications can be found on our <a href="http://www.i2p2.i2p/download">d
<jsp:setProperty name="contenthelper" property="maxLines" value="256" /> <jsp:setProperty name="contenthelper" property="maxLines" value="256" />
<jsp:setProperty name="contenthelper" property="startAtBeginning" value="true" /> <jsp:setProperty name="contenthelper" property="startAtBeginning" value="true" />
<jsp:getProperty name="contenthelper" property="textContent" /> <jsp:getProperty name="contenthelper" property="textContent" />
<p>A more complete list of changes can be found <p>A more complete list of changes can be found
in the history.txt file in your i2p directory. in the history.txt file in your i2p directory.
</p><hr /> </p><br></div></body></html>
</div>
</body>
</html>

View File

@ -1,8 +1,7 @@
<html><head><title>I2PTunnel Disabled</title> <html><head><title>I2P Tunnel Manager Not Running</title>
<meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="pragma" content="no-cache" /> <meta http-equiv="pragma" content="no-cache" />
</head> </head>
<body> <body>
I2PTunnel is not running. Go to <a href="/configclients.jsp">the config clients page</a> The I2P Tunnel Manager is not currently running. Please visit the<a href="/configclients.jsp">Client Configuration</a> page to start it.
to start it.
</body></html> </body></html>

View File

@ -14,9 +14,7 @@ if (System.getProperty("router.consoleNonce") == null) {
} }
%> %>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %><h1>I2P Router Console</h1>
<h1>I2P Router Console</h1>
<div class="news" id="news"> <div class="news" id="news">
<jsp:useBean class="net.i2p.router.web.ContentHelper" id="newshelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ContentHelper" id="newshelper" scope="request" />
<% java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getRouterDir(), "docs/news.xml"); %> <% java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getRouterDir(), "docs/news.xml"); %>
@ -26,17 +24,12 @@ if (System.getProperty("router.consoleNonce") == null) {
<jsp:useBean class="net.i2p.router.web.ConfigUpdateHelper" id="updatehelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ConfigUpdateHelper" id="updatehelper" scope="request" />
<jsp:setProperty name="updatehelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="updatehelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<hr /><i><jsp:getProperty name="updatehelper" property="newsStatus" /></i><br /> <hr><i><jsp:getProperty name="updatehelper" property="newsStatus" /></i><br>
</div> </div><div class="main" id="main">
<div class="main" id="main">
<jsp:useBean class="net.i2p.router.web.ContentHelper" id="contenthelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ContentHelper" id="contenthelper" scope="request" />
<% fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getBaseDir(), "docs/readme.html"); %> <% fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getBaseDir(), "docs/readme.html"); %>
<jsp:setProperty name="contenthelper" property="page" value="<%=fpath.getAbsolutePath()%>" /> <jsp:setProperty name="contenthelper" property="page" value="<%=fpath.getAbsolutePath()%>" />
<jsp:setProperty name="contenthelper" property="maxLines" value="300" /> <jsp:setProperty name="contenthelper" property="maxLines" value="300" />
<jsp:setProperty name="contenthelper" property="lang" value="<%=request.getParameter("lang")%>" /> <jsp:setProperty name="contenthelper" property="lang" value="<%=request.getParameter("lang")%>" />
<jsp:getProperty name="contenthelper" property="content" /> <jsp:getProperty name="contenthelper" property="content" />
</div> </div></body></html>
</body>
</html>

View File

@ -2,19 +2,13 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - job queue</title>
<title>I2P Router Console - job queue</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
<%@include file="summary.jsp" %><h1>I2P Router Job Queue</h1>
<%@include file="summary.jsp" %>
<h1>I2P Router Job Queue</h1>
<div class="main" id="main"> <div class="main" id="main">
<jsp:useBean class="net.i2p.router.web.JobQueueHelper" id="jobQueueHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.JobQueueHelper" id="jobQueueHelper" scope="request" />
<jsp:setProperty name="jobQueueHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="jobQueueHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:setProperty name="jobQueueHelper" property="writer" value="<%=out%>" /> <jsp:setProperty name="jobQueueHelper" property="writer" value="<%=out%>" />
<jsp:getProperty name="jobQueueHelper" property="jobQueueSummary" /> <jsp:getProperty name="jobQueueHelper" property="jobQueueSummary" />
</div> </div></body></html>
</body>
</html>

View File

@ -2,37 +2,27 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - logs</title>
<title>I2P Router Console - logs</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1>I2P Router Logs</h1> <h1>I2P Router Logs</h1>
<div class="main" id="main"> <div class="main" id="main">
<div class="joblog"> <div class="joblog"><h3>Version:</h3><a name="version"> </a>
<h3>Version:</h3><a name="version"> </a>
Please include this information in bug reports. Please include this information in bug reports.
<p> <p>
I2P <jsp:getProperty name="helper" property="version" /><br /> I2P <jsp:getProperty name="helper" property="version" /><br>
<%=System.getProperty("java.vendor")%> <%=System.getProperty("java.version")%><br /> <%=System.getProperty("java.vendor")%> <%=System.getProperty("java.version")%><br>
<%=System.getProperty("os.name")%> <%=System.getProperty("os.arch")%> <%=System.getProperty("os.version")%><br /> <%=System.getProperty("os.name")%> <%=System.getProperty("os.arch")%> <%=System.getProperty("os.version")%><br>
CPU <%=net.i2p.util.NativeBigInteger.cpuModel()%> (<%=net.i2p.util.NativeBigInteger.cpuType()%>)<br /> CPU <%=net.i2p.util.NativeBigInteger.cpuModel()%> (<%=net.i2p.util.NativeBigInteger.cpuType()%>)<br>
jbigi <%=net.i2p.util.NativeBigInteger.loadStatus()%><br /> jbigi <%=net.i2p.util.NativeBigInteger.loadStatus()%><br>
Encoding <%=System.getProperty("file.encoding")%><br> Encoding <%=System.getProperty("file.encoding")%><br></p><br>
</p>
<hr />
<jsp:useBean class="net.i2p.router.web.LogsHelper" id="logsHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.LogsHelper" id="logsHelper" scope="request" />
<jsp:setProperty name="logsHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="logsHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<h3>Critical logs:</h3><a name="criticallogs"> </a> <h3>Critical logs:</h3><a name="criticallogs"> </a>
<jsp:getProperty name="logsHelper" property="criticalLogs" /> <jsp:getProperty name="logsHelper" property="criticalLogs" /><br>
<hr />
<h3>Router logs (<a href="configlogging.jsp">configure</a>):</h3> <h3>Router logs (<a href="configlogging.jsp">configure</a>):</h3>
<jsp:getProperty name="logsHelper" property="logs" /> <jsp:getProperty name="logsHelper" property="logs" /><br>
<hr />
<h3>Service (Wrapper) logs:</h3><a name="servicelogs"> </a> <h3>Service (Wrapper) logs:</h3><a name="servicelogs"> </a>
<jsp:getProperty name="logsHelper" property="serviceLogs" /> <jsp:getProperty name="logsHelper" property="serviceLogs" />
</div> </div></div></body></html>
</div>
</body>
</html>

View File

@ -6,7 +6,6 @@
<title>I2P Router Console - network database summary</title> <title>I2P Router Console - network database summary</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1>I2P Network Database Summary</h1> <h1>I2P Network Database Summary</h1>
<div class="main" id="main"> <div class="main" id="main">
@ -18,7 +17,4 @@
<jsp:setProperty name="netdbHelper" property="router" value="<%=request.getParameter("r")%>" /> <jsp:setProperty name="netdbHelper" property="router" value="<%=request.getParameter("r")%>" />
<jsp:setProperty name="netdbHelper" property="lease" value="<%=request.getParameter("l")%>" /> <jsp:setProperty name="netdbHelper" property="lease" value="<%=request.getParameter("l")%>" />
<jsp:getProperty name="netdbHelper" property="netDbSummary" /> <jsp:getProperty name="netdbHelper" property="netDbSummary" />
</div> </div></div></body></html>
</div>
</body>
</html>

View File

@ -2,20 +2,14 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - internals</title>
<title>I2P Router Console - internals</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<jsp:useBean class="net.i2p.router.web.OldConsoleHelper" id="conhelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.OldConsoleHelper" id="conhelper" scope="request" />
<jsp:setProperty name="conhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="conhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:setProperty name="conhelper" property="writer" value="<%=out%>" /> <jsp:setProperty name="conhelper" property="writer" value="<%=out%>" />
<h1>I2P Router &raquo; Old Console</h1> <h1>I2P Router &raquo; Old Console</h1>
<div class="main" id="main"> <div class="main" id="main">
<jsp:getProperty name="conhelper" property="console" /> <jsp:getProperty name="conhelper" property="console" />
</div> </div></body></html>
</body>
</html>

View File

@ -2,20 +2,14 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - statistics</title>
<title>I2P Router Console - statistics</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<jsp:useBean class="net.i2p.router.web.OldConsoleHelper" id="oldhelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.OldConsoleHelper" id="oldhelper" scope="request" />
<jsp:setProperty name="oldhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="oldhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:setProperty name="oldhelper" property="writer" value="<%=out%>" /> <jsp:setProperty name="oldhelper" property="writer" value="<%=out%>" />
<h1>I2P Router Statistics</h1> <h1>I2P Router Statistics</h1>
<div class="main" id="main"> <div class="main" id="main">
<jsp:getProperty name="oldhelper" property="stats" /> <jsp:getProperty name="oldhelper" property="stats" />
</div> </div></body></html>
</div>
</body>
</html>

View File

@ -2,13 +2,11 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - peer connections</title>
<title>I2P Router Console - peer connections</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
<%@include file="summary.jsp" %> <%@include file="summary.jsp" %>
<h1>I2P Network Peers</h1> <h1>I2P Network Peers</h1>
<div class="main" id="main"> <div class="main" id="main">
<jsp:useBean class="net.i2p.router.web.PeerHelper" id="peerHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.PeerHelper" id="peerHelper" scope="request" />
<jsp:setProperty name="peerHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="peerHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
@ -16,7 +14,4 @@
<jsp:setProperty name="peerHelper" property="urlBase" value="peers.jsp" /> <jsp:setProperty name="peerHelper" property="urlBase" value="peers.jsp" />
<jsp:setProperty name="peerHelper" property="sort" value="<%=request.getParameter("sort") != null ? request.getParameter("sort") : ""%>" /> <jsp:setProperty name="peerHelper" property="sort" value="<%=request.getParameter("sort") != null ? request.getParameter("sort") : ""%>" />
<jsp:getProperty name="peerHelper" property="peerSummary" /> <jsp:getProperty name="peerHelper" property="peerSummary" />
</div> </div></body></html>
</body>
</html>

View File

@ -2,21 +2,15 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - peer profiles</title>
<title>I2P Router Console - peer profiles</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body><%@include file="summary.jsp" %>
<h1>I2P Network Peer Profiles</h1>
<%@include file="summary.jsp" %>
<h1>I2P Network Peer Profiles</h1>
<div class="main" id="main"><div class="wideload"> <div class="main" id="main"><div class="wideload">
<jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" />
<jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:getProperty name="profilesHelper" property="profileSummary" /> <jsp:getProperty name="profilesHelper" property="profileSummary" />
<hr /> <br>
<a name="shitlist"> </a> <a name="shitlist"> </a>
<jsp:getProperty name="profilesHelper" property="shitlistSummary" /> <jsp:getProperty name="profilesHelper" property="shitlistSummary" />
</div> </div></div></body></html>
</div>
</body>
</html>

View File

@ -1,6 +1,6 @@
<% // put width here too to prevent bad layout at startup %> <% // put width here too to prevent bad layout at startup %>
<% // let's remove that for now since we're no longer using percentage width here %>
<div class="routersummaryouter" style="width: 200px;"> <div class="routersummaryouter">
<% <%
// skip the iframe if refresh disabled // skip the iframe if refresh disabled
String d = request.getParameter("refresh"); String d = request.getParameter("refresh");
@ -11,7 +11,7 @@
// pass the new delay parameter to the iframe // pass the new delay parameter to the iframe
newDelay = "?refresh=" + d; newDelay = "?refresh=" + d;
if (!"0".equals(d)) if (!"0".equals(d))
out.print("<iframe src=\"summaryframe.jsp" + newDelay + "\" height=\"1500\" width=\"100%\" scrolling=\"auto\" frameborder=\"0\" allowtransparency=\"true\">\n"); out.print("<iframe src=\"summaryframe.jsp" + newDelay + "\" height=\"1500\" width=\"200\" scrolling=\"auto\" frameborder=\"0\" title=\"sidepanel\">\n");
%> %>
<div class="routersummary"> <div class="routersummary">
<%@include file="summarynoframe.jsp" %> <%@include file="summarynoframe.jsp" %>
@ -22,10 +22,10 @@
} else { } else {
// since we don't have an iframe this will reload the base page, and // since we don't have an iframe this will reload the base page, and
// the new delay will be passed to the iframe above // the new delay will be passed to the iframe above
out.print("<hr /><p><center><form action=\"" + request.getRequestURI() + "\" method=\"GET\">\n"); out.print("<form action=\"" + request.getRequestURI() + "\" method=\"GET\">\n");
out.print("<b>Refresh (s):</b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" />\n"); out.print("<b>Refresh (s):</b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" />\n");
out.print("<button type=\"submit\">Enable</button>\n"); out.print("<button type=\"submit\">Enable</button>\n");
out.print("</form></center></p></div>\n"); out.print("</form></div>\n");
} }
%> %>
</div> </div>

View File

@ -49,16 +49,12 @@
} }
} }
%> %>
</head> </head><body style="margin: 0;"><div class="routersummary">
<body style="margin: 0;">
<div class="routersummary">
<%@include file="summarynoframe.jsp" %> <%@include file="summarynoframe.jsp" %>
<% <%
// d and shutdownSoon defined above // d and shutdownSoon defined above
if (!shutdownSoon) { if (!shutdownSoon) {
out.print("<hr /><p><form action=\"summaryframe.jsp\" method=\"GET\">\n"); out.print("<hr><form action=\"summaryframe.jsp\" method=\"GET\">\n");
if ("0".equals(d)) { if ("0".equals(d)) {
out.print("<b>Refresh (s):<b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" align=\"right\" />\n"); out.print("<b>Refresh (s):<b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" align=\"right\" />\n");
out.print("<button type=\"submit\">Enable</button>\n"); out.print("<button type=\"submit\">Enable</button>\n");
@ -67,10 +63,7 @@
out.print("<input type=\"hidden\" name=\"refresh\" value=\"0\" />\n"); out.print("<input type=\"hidden\" name=\"refresh\" value=\"0\" />\n");
out.print("<button type=\"submit\">Disable " + d + "s Refresh</button>\n"); out.print("<button type=\"submit\">Disable " + d + "s Refresh</button>\n");
} }
out.print("</form></p><hr />\n"); out.print("</form><hr>\n");
} }
%> %>
</div> </div></body></html>
</body>
</html>

View File

@ -12,7 +12,7 @@
<jsp:useBean class="net.i2p.router.web.UpdateHandler" id="update" scope="request" /> <jsp:useBean class="net.i2p.router.web.UpdateHandler" id="update" scope="request" />
<jsp:setProperty name="update" property="*" /> <jsp:setProperty name="update" property="*" />
<jsp:setProperty name="update" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="update" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<a href="index.jsp" target="_top"><img src="/themes/console/images/i2plogo.png" alt="I2P Router Console" title="I2P Router Console"/></a><hr /> <a href="index.jsp" target="_top"><img src="/themes/console/images/i2plogo.png" alt="I2P Router Console" title="I2P Router Console"></a><hr>
<% java.io.File lpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getBaseDir(), "docs/toolbar.html"); <% java.io.File lpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getBaseDir(), "docs/toolbar.html");
// you better have target="_top" for the links in there... // you better have target="_top" for the links in there...
if (lpath.exists()) { %> if (lpath.exists()) { %>
@ -21,42 +21,33 @@
<jsp:setProperty name="linkhelper" property="maxLines" value="100" /> <jsp:setProperty name="linkhelper" property="maxLines" value="100" />
<jsp:getProperty name="linkhelper" property="content" /> <jsp:getProperty name="linkhelper" property="content" />
<% } else { %> <% } else { %>
<h3><a href="/configclients.jsp" target="_top" title="Configure startup of clients and webapps (services); manually start dormant services.">I2P Services</a></h3><hr> <h3><a href="/configclients.jsp" target="_top" title="Configure startup of clients and webapps (services); manually start dormant services.">I2P Services</a></h3>
<table> <hr><table>
<tr> <tr><td><a href="susidns/index.jsp" target="_blank" title="Manage your I2P hosts file here (I2P domain name resolution).">Addressbook</a>
<td><a href="susidns/index.jsp" target="_blank" title="Manage your I2P hosts file here (I2P domain name resolution).">Addressbook</a>
<a href="i2psnark/" target="_blank" title="Built-in anonymous BitTorrent Client">Torrents</a> <a href="i2psnark/" target="_blank" title="Built-in anonymous BitTorrent Client">Torrents</a>
<a href="susimail/susimail" target="blank" title="Anonymous webmail client.">Webmail</a> <a href="susimail/susimail" target="blank" title="Anonymous webmail client.">Webmail</a>
<a href="http://127.0.0.1:7658/" target="_blank" title="Anonymous resident webserver.">Webserver</a></td> <a href="http://127.0.0.1:7658/" target="_blank" title="Anonymous resident webserver.">Webserver</a></td></tr></table>
</tr></table><hr> <hr><h3><a href="config.jsp" target="_top" title="Configure I2P Router.">I2P Internals</a></h3><hr>
<h3><a href="config.jsp" target="_top" title="Configure I2P Router.">I2P Internals</a></h3><hr> <table><tr><td>
<table><tr> <a href="tunnels.jsp" target="_top" title="View existing tunnels and tunnel build status.">Tunnels</a>
<td> <a href="peers.jsp" target="_top" title="Show all current peer connections.">Peers</a>
<a href="tunnels.jsp" target="_top" title="View existing tunnels and tunnel build status.">Tunnels</a> <a href="profiles.jsp" target="_top" title="Show recent peer performance profiles.">Profiles</a>
<a href="peers.jsp" target="_top" title="Show all current peer connections.">Peers</a> <a href="netdb.jsp" target="_top" title="Show list of all known I2P routers.">NetDB</a>
<a href="profiles.jsp" target="_top" title="Show recent peer performance profiles.">Profiles</a> <a href="logs.jsp" target="_top" title="Health Report.">Logs</a>
<a href="netdb.jsp" target="_top" title="Show list of all known I2P routers.">NetDB</a>
<a href="logs.jsp" target="_top" title="Health Report.">Logs</a>
<a href="jobs.jsp" target="_top" title="Show the router's workload, and how it's performing.">Jobs</a> <a href="jobs.jsp" target="_top" title="Show the router's workload, and how it's performing.">Jobs</a>
<a href="graphs.jsp" target="_top" title="Graph router performance.">Graphs</a> <a href="graphs.jsp" target="_top" title="Graph router performance.">Graphs</a>
<a href="oldstats.jsp" target="_top" title="Textual router performance statistics.">Stats</a> <a href="oldstats.jsp" target="_top" title="Textual router performance statistics.">Stats</a></td></tr></table>
</td></tr></table>
<% } %> <% } %>
<hr> <hr><h3><a href="help.jsp" target="_top" title="I2P Router Help.">General</a></h3><hr>
<h3><a href="help.jsp" target="_top" title="I2P Router Help.">General</a></h3><hr> <h4><a title="Your unique I2P router identity is <jsp:getProperty name="helper" property="ident" />, never reveal it to anyone" href="netdb.jsp?r=." target="_top">Local Identity</a></h4><hr>
<h4> <table><tr><td align="left">
<a title="Your unique I2P router identity is <jsp:getProperty name="helper" property="ident" />, never reveal it to anyone" href="netdb.jsp?r=." target="_top">Local Identity</a></h4>
<hr>
<table><tr>
<td align="left">
<b>Version:</b></td> <b>Version:</b></td>
<td align="right"><jsp:getProperty name="helper" property="version" /></td></tr> <td align="right"><jsp:getProperty name="helper" property="version" /></td></tr>
<tr title="How long we've been running for this session."> <tr title="How long we've been running for this session.">
<td align="left"> <td align="left"><b>Uptime:</b></td>
<b>Uptime:</b></td> <td align="right"><jsp:getProperty name="helper" property="uptime" />
<td align="right"><jsp:getProperty name="helper" property="uptime" /></td></tr></table> </td></tr></table>
<hr><h4><a href="config.jsp#help" target="_top" title="Help with configuring your firewall and router for optimal I2P performance."><jsp:getProperty name="helper" property="reachability" /></a></h4> <hr><h4><a href="config.jsp#help" target="_top" title="Help with configuring your firewall and router for optimal I2P performance."><jsp:getProperty name="helper" property="reachability" /></a></h4><hr>
<hr>
<% <%
if (helper.updateAvailable() || helper.unsignedUpdateAvailable()) { if (helper.updateAvailable() || helper.unsignedUpdateAvailable()) {
// display all the time so we display the final failure message // display all the time so we display the final failure message
@ -71,26 +62,27 @@
if (prev != null) System.setProperty("net.i2p.router.web.UpdateHandler.noncePrev", prev); if (prev != null) System.setProperty("net.i2p.router.web.UpdateHandler.noncePrev", prev);
System.setProperty("net.i2p.router.web.UpdateHandler.nonce", nonce+""); System.setProperty("net.i2p.router.web.UpdateHandler.nonce", nonce+"");
String uri = request.getRequestURI(); String uri = request.getRequestURI();
out.print("<p><form action=\"" + uri + "\" method=\"GET\">\n"); out.print("<form action=\"" + uri + "\" method=\"GET\">\n");
out.print("<input type=\"hidden\" name=\"updateNonce\" value=\"" + nonce + "\" />\n"); out.print("<input type=\"hidden\" name=\"updateNonce\" value=\"" + nonce + "\" />\n");
if (helper.updateAvailable()) if (helper.updateAvailable())
out.print("<button type=\"submit\" name=\"updateAction\" value=\"signed\" >Download " + helper.getUpdateVersion() + " Update</button>\n"); out.print("<button type=\"submit\" name=\"updateAction\" value=\"signed\" >Download " + helper.getUpdateVersion() + " Update</button>\n");
if (helper.unsignedUpdateAvailable()) if (helper.unsignedUpdateAvailable())
out.print("<button type=\"submit\" name=\"updateAction\" value=\"Unsigned\" >Download Unsigned<br>Update " + helper.getUnsignedUpdateVersion() + "</button>\n"); out.print("<button type=\"submit\" name=\"updateAction\" value=\"Unsigned\" >Download Unsigned<br>Update " + helper.getUnsignedUpdateVersion() + "</button>\n");
out.print("</form></p>\n"); out.print("</form>\n");
} }
} }
%> %>
<p> <p>
<%=net.i2p.router.web.ConfigRestartBean.renderStatus(request.getRequestURI(), request.getParameter("action"), request.getParameter("consoleNonce"))%> <%=net.i2p.router.web.ConfigRestartBean.renderStatus(request.getRequestURI(), request.getParameter("action"), request.getParameter("consoleNonce"))%>
</p> </p><hr><h3><a href="peers.jsp" target="_top" title="Show all current peer connections.">Peers</a></h3><hr>
<hr /> <table>
<h3><a href="peers.jsp" target="_top" title="Show all current peer connections.">Peers</a></h3><hr><table>
<tr><td align="left"><b>Active:</b></td><td align="right"><jsp:getProperty name="helper" property="activePeers" />/<jsp:getProperty name="helper" property="activeProfiles" /></td></tr> <tr><td align="left"><b>Active:</b></td><td align="right"><jsp:getProperty name="helper" property="activePeers" />/<jsp:getProperty name="helper" property="activeProfiles" /></td></tr>
<tr><td align="left"><b>Fast:</b></td><td align="right"><jsp:getProperty name="helper" property="fastPeers" /></td></tr> <tr><td align="left"><b>Fast:</b></td><td align="right"><jsp:getProperty name="helper" property="fastPeers" /></td></tr>
<tr><td align="left"><b>High capacity:</b></td><td align="right"><jsp:getProperty name="helper" property="highCapacityPeers" /></td></tr> <tr><td align="left"><b>High capacity:</b></td><td align="right"><jsp:getProperty name="helper" property="highCapacityPeers" /></td></tr>
<tr><td align="left"><b>Integrated:</b></td><td align="right"><jsp:getProperty name="helper" property="wellIntegratedPeers" /></td></tr> <tr><td align="left"><b>Integrated:</b></td><td align="right"><jsp:getProperty name="helper" property="wellIntegratedPeers" /></td></tr>
<tr><td align="left"><b>Known:</b></td><td align="right"><jsp:getProperty name="helper" property="allPeers" /></td></tr></table><hr><% <tr><td align="left"><b>Known:</b></td><td align="right"><jsp:getProperty name="helper" property="allPeers" /></td></tr>
</table><hr>
<%
if (helper.showFirewallWarning()) { if (helper.showFirewallWarning()) {
%><h4><a href="config.jsp" target="_top" title="Help with firewall configuration.">Check NAT/firewall</a></h4><% %><h4><a href="config.jsp" target="_top" title="Help with firewall configuration.">Check NAT/firewall</a></h4><%
} }
@ -99,7 +91,7 @@
if (helper.allowReseed()) { if (helper.allowReseed()) {
if (reseedInProgress) { if (reseedInProgress) {
// While reseed occurring, show status message instead // While reseed occurring, show status message instead
out.print("<i>" + System.getProperty("net.i2p.router.web.ReseedHandler.statusMessage","") + "</i><br />"); out.print("<i>" + System.getProperty("net.i2p.router.web.ReseedHandler.statusMessage","") + "</i><br>");
} else { } else {
// While no reseed occurring, show reseed link // While no reseed occurring, show reseed link
long nonce = new java.util.Random().nextLong(); long nonce = new java.util.Random().nextLong();
@ -107,38 +99,34 @@
if (prev != null) System.setProperty("net.i2p.router.web.ReseedHandler.noncePrev", prev); if (prev != null) System.setProperty("net.i2p.router.web.ReseedHandler.noncePrev", prev);
System.setProperty("net.i2p.router.web.ReseedHandler.nonce", nonce+""); System.setProperty("net.i2p.router.web.ReseedHandler.nonce", nonce+"");
String uri = request.getRequestURI(); String uri = request.getRequestURI();
out.print("<p><form action=\"" + uri + "\" method=\"GET\">\n"); out.print("<form action=\"" + uri + "\" method=\"GET\">\n");
out.print("<input type=\"hidden\" name=\"reseedNonce\" value=\"" + nonce + "\" />\n"); out.print("<input type=\"hidden\" name=\"reseedNonce\" value=\"" + nonce + "\" />\n");
out.print("<button type=\"submit\" >Reseed</button></form></p>\n"); out.print("<button type=\"submit\" >Reseed</button></form>\n");
} }
} }
// If a new reseed ain't running, and the last reseed had errors, show error message // If a new reseed ain't running, and the last reseed had errors, show error message
if (!reseedInProgress) { if (!reseedInProgress) {
String reseedErrorMessage = System.getProperty("net.i2p.router.web.ReseedHandler.errorMessage",""); String reseedErrorMessage = System.getProperty("net.i2p.router.web.ReseedHandler.errorMessage","");
if (reseedErrorMessage.length() > 0) { if (reseedErrorMessage.length() > 0) {
out.print("<i>" + reseedErrorMessage + "</i><br />"); out.print("<i>" + reseedErrorMessage + "</i><br>");
} }
} }
%><hr /> %>
<h3><a href="config.jsp" title="Configure router bandwidth allocation." target="_top">Bandwidth in/out</a></h3><hr> <hr><h3><a href="config.jsp" title="Configure router bandwidth allocation." target="_top">Bandwidth in/out</a></h3><hr>
<table> <table>
<tr><td align="left"><b>1s:</b></td><td align="right"><jsp:getProperty name="helper" property="inboundSecondKBps" />/<jsp:getProperty name="helper" property="outboundSecondKBps" />K/s</td></tr> <tr><td align="left"><b>1s:</b></td><td align="right"><jsp:getProperty name="helper" property="inboundSecondKBps" />/<jsp:getProperty name="helper" property="outboundSecondKBps" />K/s</td></tr>
<tr><td align="left"><b>5m:</b></td><td align="right"><jsp:getProperty name="helper" property="inboundFiveMinuteKBps" />/<jsp:getProperty name="helper" property="outboundFiveMinuteKBps" />K/s</td></tr> <tr><td align="left"><b>5m:</b></td><td align="right"><jsp:getProperty name="helper" property="inboundFiveMinuteKBps" />/<jsp:getProperty name="helper" property="outboundFiveMinuteKBps" />K/s</td></tr>
<tr><td align="left"><b>Total:</b></td><td align="right"><jsp:getProperty name="helper" property="inboundLifetimeKBps" />/<jsp:getProperty name="helper" property="outboundLifetimeKBps" />K/s</td></tr> <tr><td align="left"><b>Total:</b></td><td align="right"><jsp:getProperty name="helper" property="inboundLifetimeKBps" />/<jsp:getProperty name="helper" property="outboundLifetimeKBps" />K/s</td></tr>
<tr><td align="left"><b>Used:</b></td><td align="right"><jsp:getProperty name="helper" property="inboundTransferred" />/<jsp:getProperty name="helper" property="outboundTransferred" /></td></tr></table> <tr><td align="left"><b>Used:</b></td><td align="right"><jsp:getProperty name="helper" property="inboundTransferred" />/<jsp:getProperty name="helper" property="outboundTransferred" /></td></tr></table>
<hr> <hr><h3><a href="tunnels.jsp" target="_top" title="View existing tunnels and tunnel build status.">Tunnels in/out</a></h3><hr>
<h3><a href="tunnels.jsp" target="_blank" title="View existing tunnels and tunnel build status.">Tunnels in/out</a></h3><hr> <table>
<table><tr> <tr><td align="left"><b>Exploratory:</b></td><td align="right"><jsp:getProperty name="helper" property="inboundTunnels" />/<jsp:getProperty name="helper" property="outboundTunnels" /></td></tr>
<td align="left"><b>Exploratory:</b></td><td align="right"><jsp:getProperty name="helper" property="inboundTunnels" />/<jsp:getProperty name="helper" property="outboundTunnels" /></td></tr>
<tr><td align="left"><b>Client:</b></td><td align="right"><jsp:getProperty name="helper" property="inboundClientTunnels" />/<jsp:getProperty name="helper" property="outboundClientTunnels" /></td></tr> <tr><td align="left"><b>Client:</b></td><td align="right"><jsp:getProperty name="helper" property="inboundClientTunnels" />/<jsp:getProperty name="helper" property="outboundClientTunnels" /></td></tr>
<tr><td align="left"><b>Participating:</b></td><td align="right"><jsp:getProperty name="helper" property="participatingTunnels" /></td></tr></table> <tr><td align="left"><b>Participating:</b></td><td align="right"><jsp:getProperty name="helper" property="participatingTunnels" /></td></tr>
<hr> </table><hr><h3><a href="/jobs.jsp" target="_top" title="What's in the router's job queue?">Congestion</a></h3><hr>
<h3><a href="/oldstats.jsp#JobQueue" target="_top" title="What's in the router's job queue?">Congestion</a></h3><hr> <table>
<table><tr> <tr><td align="left"><b>Job lag:</b></td><td align="right"><jsp:getProperty name="helper" property="jobLag" /></td></tr>
<td align="left"><b>Job lag:</b></td><td align="right"><jsp:getProperty name="helper" property="jobLag" /></td></tr>
<tr><td align="left"><b>Message delay:</b></td><td align="right"><jsp:getProperty name="helper" property="messageDelay" /></td></tr> <tr><td align="left"><b>Message delay:</b></td><td align="right"><jsp:getProperty name="helper" property="messageDelay" /></td></tr>
<tr><td align="left"><b>Tunnel lag:</b></td><td align="right"><jsp:getProperty name="helper" property="tunnelLag" /></td></tr> <tr><td align="left"><b>Tunnel lag:</b></td><td align="right"><jsp:getProperty name="helper" property="tunnelLag" /></td></tr>
<tr><td align="left"><b>Backlog:</b></td><td align="right"><jsp:getProperty name="helper" property="inboundBacklog" /></td></tr><table align="center" title="Router tunnel build status."> <tr><td align="left"><b>Backlog:</b></td><td align="right"><jsp:getProperty name="helper" property="inboundBacklog" /></td></tr>
<hr><h4><jsp:getProperty name="helper" property="tunnelStatus" /></h4> </table><hr><h4><jsp:getProperty name="helper" property="tunnelStatus" /></h4><hr><jsp:getProperty name="helper" property="destinations" />
<hr>
<jsp:getProperty name="helper" property="destinations" />

View File

@ -2,19 +2,13 @@
<%@page pageEncoding="UTF-8"%> <%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <html><head><title>I2P Router Console - tunnel summary</title>
<title>I2P Router Console - tunnel summary</title>
<%@include file="css.jsp" %> <%@include file="css.jsp" %>
</head><body> </head><body>
<%@include file="summary.jsp" %><h1>I2P Tunnel Summary</h1>
<%@include file="summary.jsp" %>
<h1>I2P Tunnel Summary</h1>
<div class="main" id="main"> <div class="main" id="main">
<jsp:useBean class="net.i2p.router.web.TunnelHelper" id="tunnelHelper" scope="request" /> <jsp:useBean class="net.i2p.router.web.TunnelHelper" id="tunnelHelper" scope="request" />
<jsp:setProperty name="tunnelHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" /> <jsp:setProperty name="tunnelHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:setProperty name="tunnelHelper" property="writer" value="<%=out%>" /> <jsp:setProperty name="tunnelHelper" property="writer" value="<%=out%>" />
<jsp:getProperty name="tunnelHelper" property="tunnelSummary" /> <jsp:getProperty name="tunnelHelper" property="tunnelSummary" />
</div> </div></body></html>
</body>
</html>

View File

@ -10,7 +10,7 @@ String templateFile = request.getParameter("template");
if (templateFile != null) { if (templateFile != null) {
java.io.OutputStream cout = response.getOutputStream(); java.io.OutputStream cout = response.getOutputStream();
response.setContentType("image/png"); response.setContentType("image/png");
rendered = net.i2p.router.web.StatSummarizer.instance().renderPng(cout, templateFile); rendered = net.i2p.router.web.StatSummarizer.instance().renderPng(cout, templateFile);
} }
net.i2p.stat.Rate rate = null; net.i2p.stat.Rate rate = null;
String stat = request.getParameter("stat"); String stat = request.getParameter("stat");
@ -19,11 +19,11 @@ boolean fakeBw = (stat != null && ("bw.combined".equals(stat)));
net.i2p.stat.RateStat rs = net.i2p.I2PAppContext.getGlobalContext().statManager().getRate(stat); net.i2p.stat.RateStat rs = net.i2p.I2PAppContext.getGlobalContext().statManager().getRate(stat);
if ( !rendered && ((rs != null) || fakeBw) ) { if ( !rendered && ((rs != null) || fakeBw) ) {
long per = -1; long per = -1;
try { try {
if (fakeBw) if (fakeBw)
per = 60*1000; per = 60*1000;
else else
per = Long.parseLong(period); per = Long.parseLong(period);
if (!fakeBw) if (!fakeBw)
rate = rs.getRate(per); rate = rs.getRate(per);
if ( (rate != null) || (fakeBw) ) { if ( (rate != null) || (fakeBw) ) {
@ -63,7 +63,7 @@ if ( !rendered && ((rs != null) || fakeBw) ) {
} }
} catch (NumberFormatException nfe) {} } catch (NumberFormatException nfe) {}
} }
if (!rendered) { if (!rendered) {
response.sendError(404, "That stat is not available"); response.sendError(404, "That stat is not available");
} }
%> %>

View File

@ -8,7 +8,7 @@ import net.i2p.util.Log;
* connection was reset.</p> * connection was reset.</p>
* *
* <h2>Entry conditions:</h2><ul> * <h2>Entry conditions:</h2><ul>
* <li>Both sides have closed and ACKed and the timeout has passed. <br /> * <li>Both sides have closed and ACKed and the timeout has passed. <br>
* <b>or</b></li> * <b>or</b></li>
* <li>A RESET was received</li> * <li>A RESET was received</li>
* </ul> * </ul>

View File

@ -536,9 +536,9 @@ public class TransientSessionKeyManager extends SessionKeyManager {
Set<OutboundSession> outbound = getOutboundSessions(); Set<OutboundSession> outbound = getOutboundSessions();
for (Iterator<OutboundSession> iter = outbound.iterator(); iter.hasNext();) { for (Iterator<OutboundSession> iter = outbound.iterator(); iter.hasNext();) {
OutboundSession sess = iter.next(); OutboundSession sess = iter.next();
buf.append("<tr><td><b>Target key:</b> ").append(sess.getTarget().toString()).append("<br />"); buf.append("<tr><td><b>Target key:</b> ").append(sess.getTarget().toString()).append("<br>");
buf.append("<b>Established:</b> ").append(new Date(sess.getEstablishedDate())).append("<br />"); buf.append("<b>Established:</b> ").append(new Date(sess.getEstablishedDate())).append("<br>");
buf.append("<b>Last Used:</b> ").append(new Date(sess.getLastUsedDate())).append("<br />"); buf.append("<b>Last Used:</b> ").append(new Date(sess.getLastUsedDate())).append("<br>");
buf.append("<b># Sets:</b> ").append(sess.getTagSets().size()).append("</td></tr>"); buf.append("<b># Sets:</b> ").append(sess.getTagSets().size()).append("</td></tr>");
buf.append("<tr><td><b>Session key:</b> ").append(sess.getCurrentKey().toBase64()).append("</td></tr>"); buf.append("<tr><td><b>Session key:</b> ").append(sess.getCurrentKey().toBase64()).append("</td></tr>");
buf.append("<tr><td><ul>"); buf.append("<tr><td><ul>");

View File

@ -1,3 +1,20 @@
2009-08-19 sponge
* Java code to set Router Console password for dr|z3d
2009-08-18 dr|z3d
* Fixes for sidepanel
* Overhauled classic theme for i2ptunnels
* First stage of code validation to fix broken and "illegal" code
* Multifarious other UI tweaks and fiddles.
2009-08-15 sponge
* Merge in dr|z3d and my own html fixes for router console java and jsp
files so that Opera (and now IE?) doesn't puke anymore on the missing
and misplaced HTML tags.
* Optimized all jsp files so that they are shorter to save space, which
is then used to fix the broken HTML. We should break even space-wise.
* Bump to -13.
2009-08-11 sponge 2009-08-11 sponge
* Code Janitor time! Many fixes and documenting fixes that should be * Code Janitor time! Many fixes and documenting fixes that should be
done in the future. for the most part, this is a general code cleanup. done in the future. for the most part, this is a general code cleanup.

View File

@ -1,4 +1,4 @@
/* Optimised for less capable browers and system specifications */ /* Optimised for less capable browsers and system specifications */
body { body {
margin: 2px 0 0 2px; margin: 2px 0 0 2px;
@ -20,7 +20,8 @@ img {
pre { pre {
overflow: auto; overflow: auto;
font-size: 8pt !important; font-size: 8pt !important;
width: 100%; width: 95%;
padding-top: 10px;
} }
div.logo { div.logo {
@ -110,7 +111,7 @@ div.toolbar {
div.routersummaryouter { div.routersummaryouter {
float: left; float: left;
width: 205px; width: 200px;
margin: 0; margin: 0;
padding: 0; padding: 0;
border: 0; border: 0;
@ -119,7 +120,7 @@ div.routersummaryouter {
div.routersummary { div.routersummary {
background: #ddf; background: #ddf;
width: 190px; width: 185px;
color: inherit; color: inherit;
margin: 0; margin: 0;
padding: 7px 1px; padding: 7px 1px;
@ -171,7 +172,7 @@ div.routersummary h4 {
div.routersummary table { div.routersummary table {
border: 0; border: 0;
text-align: center !important; text-align: center !important;
margin: -5px 5px; margin: -5px 5px -5px 2px;
width: 180px !important; width: 180px !important;
overflow: hidden; overflow: hidden;
font-size: 8pt; font-size: 8pt;
@ -225,7 +226,7 @@ div.warning h3 {
} }
div.main { div.main {
margin: 0px 0px 0px 196px; margin: 0px 0px 0px 195px;
padding: 15px 15px 15px 15px; padding: 15px 15px 15px 15px;
background: #eef; background: #eef;
border: 5px solid #bbf; border: 5px solid #bbf;
@ -251,7 +252,7 @@ div.main textarea {
} }
div.news { div.news {
margin: -5px 0px 0 196px; margin: -5px 0px 0 195px;
padding: -10px 15px 8px 15px; padding: -10px 15px 8px 15px;
background: #ffffc0; background: #ffffc0;
border: 5px solid #bbf; border: 5px solid #bbf;
@ -271,7 +272,7 @@ div.news li {
list-style: none; list-style: none;
margin: -15px 15px -20px -20px; margin: -15px 15px -20px -20px;
padding: 0px 0 15px 0; padding: 0px 0 15px 0;
border-bottom: 2px solid #cc7; border-bottom: 5px solid #cc7;
border-top: 0px solid #cc7; border-top: 0px solid #cc7;
padding: 3px 5px 5px 5px; padding: 3px 5px 5px 5px;
font-size: 12pt; font-size: 12pt;
@ -358,7 +359,7 @@ h1 {
text-align: center; text-align: center;
border: 5px solid #bbf; border: 5px solid #bbf;
padding: 13px 10px 12px 10px; padding: 13px 10px 12px 10px;
margin: 0 0px 0 196px; margin: 0 0px 0 195px;
line-height: 93%; line-height: 93%;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.3em; letter-spacing: 0.3em;

View File

@ -1,182 +1,204 @@
body { body {
margin : 0px; margin: 0px;
padding : 0px; padding: 0px;
text-align : center; text-align: center;
font-family : Arial, Helvetica, sans-serif; font: 10pt/140% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
background-color : #ffffff; background: #bbf;
color : #000000; color: #000;
font-size : 100%; -moz-box-sizing: border-box;
box-sizing: border-box;
/* we've avoided Tantek Hacks so far,
** but we can't avoid using the non-w3c method of
** box rendering. (and therefore one of mozilla's
** proprietry -moz properties (which hopefully they'll
** drop soon).
*/
-moz-box-sizing : border-box;
box-sizing : border-box;
} }
div { div {
-moz-box-sizing : border-box; -moz-box-sizing: border-box;
box-sizing : border-box; box-sizing: border-box;
} }
h4, label { h4, label {
margin : 0px; margin: 0px;
padding : 2px; padding: 2px;
float : left; float: left;
width : 150px; width: 150px;
height : 24px; height: 24px;
font-weight : bold; font-weight: normal;
text-align : right; text-align: right;
font-size : 1.0em; font-size: 8.5pt;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
box-sizing : border-box; box-sizing: border-box;
} }
h4 { h4 {
font-size : 1.2em; font-size: 10.5pt;
text-align : center; text-align: center !important;
width : 750px; font-weight: bold;
border: 1px solid #77f;
border-top: 2px solid #77f;
margin: -6px 0 5px -10px !important;
padding: 5px 10px 25px 10px;
background: #fff;
text-shadow: 0px 0px 1px rgba(32, 32, 192, 0.3);
text-transform: uppercase;
white-space: nowrap;
width: 782px;
letter-spacing: 0.09em;
}
label {
font-style: italic;
margin: 0 3px 0 -3px;
} }
a { a {
text-decoration : none; text-decoration: none;
} }
form { form {
margin : 0px; margin: 0px;
} }
textarea, input, select, button, a { textarea, input, select, button, a {
font-family : Arial, Helvetica, sans-serif; -moz-box-sizing: border-box;
-moz-box-sizing : border-box; box-sizing: border-box;
box-sizing : border-box; font: 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
font-size : 1.0em; float: left;
float : left; margin: 2px 0 5px 0;
} }
button { button {
float : none; float: none;
height: 20px !important;
} }
textarea { textarea {
border : 1px solid #ddddc0; border: 1px solid #ddddc0;
} }
br { br {
clear : left; clear: left;
} }
div.statusNotRunning { div.statusNotRunning {
float : left; float: left;
width : 82px; width: 82px;
height : 24px; height: 24px;
color : #dd0000; color: #d00;
} }
div.statusRunning { div.statusRunning {
float : left; float: left;
width : 82px; width: 82px;
height : 24px; height: 24px;
color : #00dd00; color: #0d0;
} }
div.statusStarting { div.statusStarting {
float : left; float: left;
width : 82px; width: 82px;
height : 24px; height: 24px;
color : #339933; color: #393;
} }
hr { hr {
display : none; display: none;
} }
.separator, .subdivider { .separator, .subdivider {
clear : both; clear: both;
height : 1px; height: 1px;
margin : 3px 0px 3px 0px; margin: 5px -8px 5px -8px;
border-bottom : 1px solid #ddddc0; border-bottom: 1px solid #aaf;
} }
.subdivider { .subdivider {
border-bottom : 1px dashed #ddddc0; border-bottom: 1px dotted #aaf;
margin: 0 0 10px 0;
} }
.freetext { .freetext {
width : 150px; width: 150px;
height : 22px; height: 22px;
border : 1px solid #aaaac0; border: 1px solid #aaf;
} }
.control { .control {
margin : 0 4px 0 0; margin: 2px;
padding : 0 0 4px 0; padding: 2px;
overflow : hidden; overflow: hidden;
height : 20px; height: 20px;
width : 60px; width: 60px;
font-weight : normal; font-weight: bold;
background-color : #dddddd; background: #ddd;
color : black; color: #000;
border : 1px outset #ddddc0; border: 1px outset #ddddc0;
text-align : center; text-align: center;
white-space : nowrap; vertical-align: middle;
white-space: nowrap;
} }
.control:hover { .control:hover {
background-color : #ffffed; background: #229;
color: #fff;
} }
.control:active { .control:active {
border : 2px inset; border: 2px inset;
} }
.panel { .panel {
width : 760px; width: 790px;
margin : 16px auto 16px auto; margin: 16px auto 16px auto;
overflow : hidden; padding: 5px 10px;
text-align : left; overflow: hidden;
font-size : 0.8em; text-align: left;
background-color : #ffffef; font-size: 8pt;
border : 4px solid #ffffd0; background: #eef;
border: 4px solid #77f;
-moz-box-shadow: inset 0px 0px 0px 1px #99f;
} }
.panel .footer { .panel .footer {
float : right;
padding : 4px; padding: 4px;
} }
.toolbox { .toolbox {
float : right; width: 100%;
} }
.rowItem { .rowItem {
width : 750px; width: 750px;
float : left; float: left;
margin : 0px; margin: 0px;
} }
.comment { .comment {
font-style : italic; font-style: italic;
white-space: nowrap;
} }
.text { .text {
height : 24px; height: 24px;
width : 150px; width: 150px;
padding : 2px 0 0 2px; padding: 2px 0 0 2px;
float : left; float: left;
margin : 0; margin: 0;
font-weight: bold;
} }
.accessKey { .accessKey {
text-decoration : underline; text-decoration: underline;
} }
#globalOperationsPanel { #globalOperationsPanel {
background-color : #ffefef; background: #eef;
border : 4px solid #ffd0d0; border: 4px solid #77f;
-moz-box-shadow: inset 0px 0px 0px 1px #900;
padding: 5px 5px 10px 5px;
text-align: right;
} }
#globalOperationsPanel .control { #globalOperationsPanel .control {
width : 100px; width: 100px !important;
} margin-top: 3px;
float: right;
}

View File

@ -110,9 +110,11 @@
} }
#tunnelListPage textarea { #tunnelListPage textarea {
width : 750px; width : 100%;
height : 100px; height : 88px;
padding : 0 0 0 4px; padding : 0 0 0 4px;
color: green;
margin-bottom: 7px;
} }
#tunnelListPage .footer .control { #tunnelListPage .footer .control {

View File

@ -122,7 +122,7 @@ div.routersummary hr {
div.routersummary h3 { div.routersummary h3 {
border: 0px solid #f00; border: 0px solid #f00;
text-align: center !important; text-align: center !important;
font-size: 10pt; font-size: 9pt;
letter-spacing: 0.05em; letter-spacing: 0.05em;
margin: -14px 0px -15px 1px; margin: -14px 0px -15px 1px;
padding: 5px 0px 5px 0px; padding: 5px 0px 5px 0px;
@ -133,7 +133,7 @@ div.routersummary h3 {
div.routersummary h4 { div.routersummary h4 {
border: 0px solid #f00; border: 0px solid #f00;
border-bottom: 0 !important; border-bottom: 0 !important;
font-size: 9pt; font-size: 8.5pt;
letter-spacing: 0.05em; letter-spacing: 0.05em;
margin: -14px 0px -15px 1px !important; margin: -14px 0px -15px 1px !important;
padding: 2px 3px 3px 3px; padding: 2px 3px 3px 3px;
@ -154,6 +154,7 @@ div.routersummary table {
padding: 0px -10px; padding: 0px -10px;
background-image: none !important; background-image: none !important;
background-color: transparent !important; background-color: transparent !important;
text-align: center !important;
} }
div.routersummary tr { div.routersummary tr {
@ -172,10 +173,12 @@ div.routersummary p {
padding: 0; padding: 0;
} }
/*
div.routersummary img { div.routersummary img {
margin: 5px -10px -5px -10px; margin: 5px -10px -5px -10px;
overflow: hidden; overflow: hidden;
} }
*/
div.routersummary a:link, div.routersummary a:visited { div.routersummary a:link, div.routersummary a:visited {
text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.3); text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.3);

View File

@ -1,7 +1,7 @@
/* Not yet complete. Subject to flux and change. dr|z3d - 07.25.09 */ /* Not yet complete. Subject to flux and change. dr|z3d - 07.25.09 */
body { body {
margin: 25px 10px 0 5px; margin: 20px 5px 0 15px;
padding: 0; padding: 0;
text-align: center; text-align: center;
background: #002; background: #002;
@ -79,7 +79,7 @@ a:active{
div.routersummaryouter { div.routersummaryouter {
float: left; float: left;
width: 200px; width: 200px;
margin: 0 0 10px 20px; margin: 0 0 10px 5px;
padding: 0; padding: 0;
border: 0; border: 0;
clear: left;/* fixes a bug in Opera */ clear: left;/* fixes a bug in Opera */
@ -125,7 +125,7 @@ div.routersummary hr {
div.routersummary h3 { div.routersummary h3 {
border: 0; border: 0;
font-size: 10pt; font-size: 10pt;
letter-spacing: 0.05em; letter-spacing: 0.04em;
margin: -7px -9px -10px -9px; margin: -7px -9px -10px -9px;
padding: 3px 0px 5px 0px; padding: 3px 0px 5px 0px;
background: #007; background: #007;
@ -140,8 +140,8 @@ div.routersummary h3 {
div.routersummary h4 { div.routersummary h4 {
border: 0; border: 0;
border-bottom: 0 !important; border-bottom: 0 !important;
font-size: 9pt; font-size: 8.5pt;
letter-spacing: 0.05em; letter-spacing: 0.03em;
margin: -7px -9px -10px -9px !important; margin: -7px -9px -10px -9px !important;
padding: 2px 3px 5px 3px; padding: 2px 3px 5px 3px;
background: #005; background: #005;
@ -154,7 +154,7 @@ div.routersummary h4 {
div.routersummary table { div.routersummary table {
border: 0; border: 0;
text-align: center !important; text-align: center !important;
margin: -5px -5px; margin: -1px -4px -4px -4px;
width: 185px !important; width: 185px !important;
overflow: hidden; overflow: hidden;
font-size: 8pt; font-size: 8pt;
@ -178,7 +178,7 @@ div.routersummary p {
} }
div.routersummary a:link, div.routersummary a:visited { div.routersummary a:link, div.routersummary a:visited {
text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.3); text-shadow: 0px 0px 1px rgba(192, 192, 255, 0.5);
} }
div.routersummary a:hover { div.routersummary a:hover {
@ -224,7 +224,7 @@ div.warning {
} }
div.main { div.main {
margin: 0px 0px 20px 215px; margin: 0px 0px 20px 195px;
padding: 0 15px 15px 25px; padding: 0 15px 15px 25px;
background: #002; background: #002;
text-align: left; text-align: left;
@ -240,7 +240,7 @@ div.main textarea {
} }
div.news { div.news {
margin: 0px 15px 20px 240px; margin: 0px 15px 20px 220px;
padding: 20px 30px 20px 30px; padding: 20px 30px 20px 30px;
border: 1px solid #99f; border: 1px solid #99f;
background: #004; background: #004;
@ -266,7 +266,7 @@ div.news li {
div.confignav { div.confignav {
padding: 15px 10px !important; padding: 15px 10px !important;
margin: 0 0 25px 0; margin: 0 0 15px 0;
background: #004 url('images/darkbluebg.png'); background: #004 url('images/darkbluebg.png');
-moz-border-radius: 4px; -moz-border-radius: 4px;
-khtml-border-radius: 4px; -khtml-border-radius: 4px;
@ -325,7 +325,7 @@ div.messages li {
} }
div.graphspanel { div.graphspanel {
padding: 15px 15px 15px 15px; padding: 15px;
margin: 10px 0px; margin: 10px 0px;
background: #005; background: #005;
-moz-border-radius: 4px; -moz-border-radius: 4px;
@ -336,6 +336,12 @@ div.graphspanel {
-moz-box-shadow: inset 0px 0px 1px 0px #eef; -moz-box-shadow: inset 0px 0px 1px 0px #eef;
-khtml-box-shadow: inset 0px 0px 1px 0px #eef; -khtml-box-shadow: inset 0px 0px 1px 0px #eef;
box-shadow: inset 0px 0px 1px 0px #eef; box-shadow: inset 0px 0px 1px 0px #eef;
text-align: center;
}
div.graphspanel form {
text-align: left;
padding: 15px;
} }
div.graphspanel img { div.graphspanel img {
@ -347,7 +353,7 @@ div.graphspanel img {
-moz-box-shadow: inset 0px 0px 1px 0px #eef; -moz-box-shadow: inset 0px 0px 1px 0px #eef;
-khtml-box-shadow: inset 0px 0px 1px 0px #eef; -khtml-box-shadow: inset 0px 0px 1px 0px #eef;
box-shadow: inset 0px 0px 1px 0px #eef; box-shadow: inset 0px 0px 1px 0px #eef;
opacity: 0.9; opacity: 0.8;
} }
div.graphspanel img:hover { div.graphspanel img:hover {
@ -361,6 +367,7 @@ div.graphspanel img:hover {
box-shadow: inset 0px 0px 1px 1px #f60; box-shadow: inset 0px 0px 1px 1px #f60;
opacity: 1; opacity: 1;
} }
table { table {
border-collapse: collapse; border-collapse: collapse;
width: 100%; width: 100%;
@ -497,7 +504,7 @@ h1 {
text-align: left; text-align: left;
color: #fff; color: #fff;
padding: 10px 15px; padding: 10px 15px;
margin: 0 15px 25px 240px; margin: 0 15px 15px 220px;
font-size: 16pt; font-size: 16pt;
font-weight: bold; font-weight: bold;
font-style: normal; font-style: normal;
@ -529,7 +536,7 @@ h2 {
-moz-border-radius: 4px; -moz-border-radius: 4px;
-khtml-border-radius: 4px; -khtml-border-radius: 4px;
vertical-align: middle; vertical-align: middle;
margin: 25px 0 20px 0 !important; margin: 15px 0 10px 0 !important;
-moz-box-shadow: inset 0px 0px 1px 0px #eef; -moz-box-shadow: inset 0px 0px 1px 0px #eef;
-khtml-box-shadow: inset 0px 0px 1px 0px #eef; -khtml-box-shadow: inset 0px 0px 1px 0px #eef;
box-shadow: inset 0px 0px 1px 0px #eef; box-shadow: inset 0px 0px 1px 0px #eef;
@ -757,8 +764,8 @@ form {}
} }
.joblog { .joblog {
margin: 25px 0 25px 0; margin: 15px 0 15px 0;
padding: 20px 30px 20px 30px !important; padding: 20px !important;
border: 1px solid #99f; border: 1px solid #99f;
background-color: #004; background-color: #004;
background: url("images/darkbluebg.png"); background: url("images/darkbluebg.png");

Binary file not shown.

Before

Width:  |  Height:  |  Size: 512 B

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 514 B

After

Width:  |  Height:  |  Size: 597 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 579 B

After

Width:  |  Height:  |  Size: 640 B

View File

@ -119,21 +119,21 @@ div.routersummary hr {
} }
div.routersummary h3 { div.routersummary h3 {
border: 0px solid #f00; border: 0;
/* border-bottom: 1px solid #99f !important;*/
font-size: 10pt; font-size: 10pt;
letter-spacing: 0.05em; letter-spacing: 0.04em;
margin: -7px -9px -7px -9px; margin: -7px -9px -7px -9px;
padding: 5px 0px 5px 0px; padding: 5px 0px 5px 0px;
background: #c5d5fb; background: #c5d5fb;
text-transform: uppercase; text-transform: uppercase;
background-image: -moz-linear-gradient(top, bottom, from(#ddf), to(#c5d5fb), color-stop(25%, #c5d5fb), color-stop(100%, #ddf));
} }
div.routersummary h4 { div.routersummary h4 {
border: 0px solid #f00; border: 0px solid #f00;
border-bottom: 0 !important; border-bottom: 0 !important;
font-size: 9pt; font-size: 8.5pt;
letter-spacing: 0.05em; letter-spacing: 0.02em;
margin: -7px -9px -7px -9px !important; margin: -7px -9px -7px -9px !important;
padding: 2px 3px 3px 3px; padding: 2px 3px 3px 3px;
background: #c1d1f7; background: #c1d1f7;
@ -145,7 +145,7 @@ div.routersummary h4 {
div.routersummary table { div.routersummary table {
border: 0; border: 0;
text-align: center !important; text-align: center !important;
margin: -5px -5px; margin: -2px -4px;
width: 185px !important; width: 185px !important;
overflow: hidden; overflow: hidden;
font-size: 8pt; font-size: 8pt;
@ -169,11 +169,11 @@ div.routersummary p {
} }
div.routersummary a:link, div.routersummary a:visited { div.routersummary a:link, div.routersummary a:visited {
text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.3); text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.5);
} }
div.routersummary a:hover { div.routersummary a:hover {
text-shadow: 0px 0px 1px rgba(255, 96, 0, 0.7); text-shadow: 0px 0px 0.5px rgba(255, 255, 255, 0.7);
color: #f60; color: #f60;
} }

View File

@ -47,7 +47,7 @@ body {
color: #f30; color: #f30;
border-bottom: 3px solid #f30; border-bottom: 3px solid #f30;
border-top: 3px solid #f30; border-top: 3px solid #f30;
text-shadow: 0px 0px 1px rgba(255, 163, 0, 0.9); text-shadow: 0px 0px 1px rgba(255, 32, 0, 0.5);
} }
.snarkMessages { .snarkMessages {
@ -95,7 +95,7 @@ th {
border-top: 1px outset #001; border-top: 1px outset #001;
border-bottom: 1px inset #001; border-bottom: 1px inset #001;
background: #f60 url('/themes/console/images/tabletitleorange.png') repeat-x; background: #f60 url('/themes/console/images/tabletitleorange.png') repeat-x;
text-align: right; /* text-align: right; */
whitespace: nowrap; whitespace: nowrap;
} }
@ -107,7 +107,7 @@ th {
td { td {
padding: 5px; padding: 5px;
text-align: right; /* text-align: right;*/
} }
.snarkTorrentEven { .snarkTorrentEven {
background-color: #fb1; background-color: #fb1;
@ -139,8 +139,8 @@ td {
color:#310; color:#310;
min-width: 800px !important; min-width: 800px !important;
/* max-width: 800px !important; */ /* max-width: 800px !important; */
margin: 20px; margin: 5px 0px;
padding: 10px 20px 5px 20px; padding: 10px 10px 0px 10px;
-moz-border-radius: 4px; -moz-border-radius: 4px;
-khtml-border-radius: 4px; -khtml-border-radius: 4px;
border-radius: 4px; border-radius: 4px;
@ -224,7 +224,7 @@ img:hover{
div.section { div.section {
margin: 0 0 20px 0; margin: 0 0 10px 0;
padding: 10px; padding: 10px;
background: #ffe; background: #ffe;
border: 1px solid #001; border: 1px solid #001;
@ -241,7 +241,7 @@ div.section {
} }
div.mainsection { div.mainsection {
margin: 0 0 20px 0; margin: 0 0 10px 0;
padding: 10px; padding: 10px;
background: #ffe; background: #ffe;
border: 1px solid #001; border: 1px solid #001;
@ -258,7 +258,7 @@ div.mainsection {
} }
div.newtorrentsection { div.newtorrentsection {
margin: 0 0 20px 0; margin: 0 0 10px 0;
padding: 10px; padding: 10px;
background: #ffe; background: #ffe;
border: 1px solid #001; border: 1px solid #001;
@ -275,7 +275,7 @@ div.newtorrentsection {
} }
div.addtorrentsection { div.addtorrentsection {
margin: 0 0 20px 0; margin: 0 0 10px 0;
padding: 10px; padding: 10px;
background: #ffe; background: #ffe;
border: 1px solid #001; border: 1px solid #001;
@ -292,7 +292,7 @@ div.addtorrentsection {
} }
div.configsection { div.configsection {
margin: 0 0 20px 0; margin: 0;
padding: 10px; padding: 10px;
background: #ffe; background: #ffe;
border: 1px solid #001; border: 1px solid #001;
@ -317,7 +317,7 @@ div.configsection a:hover{
} }
.snarknavbar { .snarknavbar {
margin: 5px 0 20px 0 !important; margin: 0 0 10px 0 !important;
padding: 10px; padding: 10px;
border: 1px solid #001; border: 1px solid #001;
-moz-border-radius: 4px; -moz-border-radius: 4px;
@ -326,4 +326,10 @@ div.configsection a:hover{
background: #eef; background: #eef;
-moz-box-shadow: inset 0px 0px 1px 0px #002; -moz-box-shadow: inset 0px 0px 1px 0px #002;
background: #ddf url('../console/light/images/tabletile.png'); background: #ddf url('../console/light/images/tabletile.png');
text-transform: uppercase !important;
letter-spacing: 0.05em;
font-weight: bold;
font-size: 11pt;
color: #001;
text-shadow: 0px 0px 1px rgba(0, 0, 148, 0.9);
} }

View File

@ -1,83 +1,81 @@
<div align="right"> <div align="right">
<div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a> <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=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=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a>
<a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a> <a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Fran&ccedil;ais" alt="Fran&ccedil;ais"></a>
<a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a> <a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a>
<a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div> </div>
<h2>Welcome to I2P!</h2> <h2>Welcome to I2P!</h2>
<p>If you've just started I2P, the Active: numbers on the left should start to <p>If you've just started I2P, the Active: numbers on the left should start to
grow over the next few minutes and you'll see a "shared clients" local destination grow over the next few minutes and you'll see a "shared clients" local destination
listed on the left (if not, <a href="#trouble">see below</a>). Once those show listed on the left (if not, <a href="#trouble">see below</a>). Once those show
up, you can: up, you can:</p>
<ul> <ul>
<li><b>browse "eepsites"</b> - on I2P there are anonymously hosted websites <li><b>browse "eepsites"</b> - on I2P there are anonymously hosted websites
- tell your browser to use the <b>HTTP proxy at 127.0.0.1 port 4444</b>, then - tell your browser to use the <b>HTTP proxy at 127.0.0.1 port 4444</b>, then
browse to an eepsite:<br /> browse to an eepsite:<br />
<ul class="links"> <ul class="links">
<li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a> <li><a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p</a>
and <a href="http://perv.i2p/stats.cgi">perv.i2p</a>: sites tracking active and <a href="http://perv.i2p/stats.cgi">perv.i2p</a>: sites tracking active
eepsites</li> eepsites</li>
<li><a href="http://forum.i2p/">forum.i2p</a>: a secure <li><a href="http://forum.i2p/">forum.i2p</a>: a secure
and anonymous connection to <a href="http://forum.i2p2.de/">forum.i2p2.de</a></li> and anonymous connection to <a href="http://forum.i2p2.de/">forum.i2p2.de</a></li>
<li><a href="http://www.i2p2.i2p/">www.i2p2.i2p</a> and <li><a href="http://www.i2p2.i2p/">www.i2p2.i2p</a> and
mirror <a href="http://i2p-projekt.i2p">i2p-projekt.i2p</a>: secure and mirror <a href="http://i2p-projekt.i2p">i2p-projekt.i2p</a>: secure and
anonymous connections to <a href="http://www.i2p2.de/">www.i2p2.de</a></li> anonymous connections to <a href="http://www.i2p2.de/">www.i2p2.de</a></li>
<li><a href="http://eepsites.i2p/">eepsites.i2p</a>: an <li><a href="http://eepsites.i2p/">eepsites.i2p</a>: an
anonymously hosted search engine of eepsites</li> anonymously hosted search engine of eepsites</li>
<li><a href="http://ugha.i2p/">ugha.i2p</a>: ugha's eepsite, <li><a href="http://ugha.i2p/">ugha.i2p</a>: ugha's eepsite,
a wiki that anyone can edit, and lots of links</li> a wiki that anyone can edit, and lots of links</li>
<li><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a>: <li><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a>:
Freenet proxy</li> Freenet proxy</li>
<li><a href="http://echelon.i2p">echelon.i2p</a>: software <li><a href="http://echelon.i2p">echelon.i2p</a>: software
archive and information for I2P</li> archive and information for I2P</li>
<p></p> </ul></ul><ul>
There are many more eepsites - just follow the links from the ones you see, There are many more eepsites - just follow the links from the ones you see,
bookmark your favorites, and visit them often! bookmark your favorites, and visit them often!
</ul></ul> </ul>
<br /> <ul>
<br /> <li class="tidylist"><b>browse the web</b> - there is currently an HTTP
<ul> "outproxy" in I2P hooked up to your own HTTP proxy on port 4444 - simply
<li class="tidylist"><b>browse the web</b> - there is currently an HTTP set your browser's proxy to use it (as above) and go to any normal URL
"outproxy" in I2P hooked up to your own HTTP proxy on port 4444 - simply - your requests will be bounced through the I2P network.</li>
set your browser's proxy to use it (as above) and go to any normal URL <li class="tidylist"><b>transfer files</b> - there is an integrated <a href="/i2psnark">port</a>
- your requests will be bounced through the I2P network.</li> of the <a href="http://www.klomp.org/snark/">Snark</a> <a href="http://www.bittorrent.com/">BitTorrent</a>
<li class="tidylist"><b>transfer files</b> - there is an integrated <a href="/i2psnark">port</a> client.</li>
of the <a href="http://www.klomp.org/snark/">Snark</a> <a href="http://www.bittorrent.com/">BitTorrent</a> <li class="tidylist"><b>use anonymous email</b> - postman has created a
client.</li> mail system compatible with normal mail clients (POP3 / SMTP) that allows
<li class="tidylist"><b>use anonymous email</b> - postman has created a email within I2P as well as mail from and to the normal internet! get
mail system compatible with normal mail clients (POP3 / SMTP) that allows your account at <a href="http://hq.postman.i2p/">hq.postman.i2p</a>. We
email within I2P as well as mail from and to the normal internet! get bundle <a href="/susimail/susimail">susimail</a>, a web based anonymity-oriented
your account at <a href="http://hq.postman.i2p/">hq.postman.i2p</a>. We pop3/smtp client configured to access postman's mail services.</li>
bundle <a href="/susimail/susimail">susimail</a>, a web based anonymity-oriented <li class="tidylist"><b>chat anonymously</b> - fire up your own IRC client
pop3/smtp client configured to access postman's mail services.</li> and connect to the server at <b>127.0.0.1 port 6668</b>. This points at
<li class="tidylist"><b>chat anonymously</b> - fire up your own IRC client one of two anonymously hosted IRC servers, but neither you nor they know
and connect to the server at <b>127.0.0.1 port 6668</b>. This points at where the other is.</li>
one of two anonymously hosted IRC servers, but neither you nor they know <li class="tidylist"><b>blog anonymously</b> - check out <a href="http://syndie.i2p2.de/">Syndie</a></li>
where the other is.</li> <li class="tidylist">and lots more</li>
<li class="tidylist"><b>blog anonymously</b> - check out <a href="http://syndie.i2p2.de/">Syndie</a></li> </ul>
<li class="tidylist">and lots more</li> </ul>
</ul> <h2>Want your own eepsite?</h2>
</ul> <p>We've bundled some software to let you run your own eepsite - a <a href="http://jetty.mortbay.org/">Jetty</a>
<h2>Want your own eepsite?</h2> instance listening on <a href="http://127.0.0.1:7658/">http://127.0.0.1:7658/</a>.
<p>We've bundled some software to let you run your own eepsite - a <a href="http://jetty.mortbay.org/">Jetty</a> Simply place your files in the <code>eepsite/docroot/</code> directory (or place
instance listening on <a href="http://127.0.0.1:7658/">http://127.0.0.1:7658/</a>. any standard JSP/Servlet <code>.war</code> files under <code>eepsite/webapps</code>,
Simply place your files in the <code>eepsite/docroot/</code> directory (or place or standard CGI script under <code>eepsite/cgi-bin</code>) and they'll show
any standard JSP/Servlet <code>.war</code> files under <code>eepsite/webapps</code>, up. After starting up an <a href="/i2ptunnel/">eepsite tunnel</a> pointing at
or standard CGI script under <code>eepsite/cgi-bin</code>) and they'll show it, your eepsite will be visible to others. Detailed instructions for starting
up. After starting up an <a href="/i2ptunnel/">eepsite tunnel</a> pointing at your eepsite are on <a href="http://127.0.0.1:7658/">your temporary eepsite
it, your eepsite will be visible to others. Detailed instructions for starting page</a>. </p>
your eepsite are on <a href="http://127.0.0.1:7658/">your temporary eepsite <h2><a name="trouble">Troubleshooting</a></h2>
page</a>. </p> <p>Be patient - I2P may be slow to start the first time as it searches for peers.
<h2><a name="trouble">Troubleshooting</a></h2> If, after 30 minutes, your Active: connected/recent count has less than 10 connected
<p>Be patient - I2P may be slow to start the first time as it searches for peers. peers, you should open port 8887 on your firewall for better connectivity. If
If, after 30 minutes, your Active: connected/recent count has less than 10 connected you cannot see any eepsites at all (even <a href="http://www.i2p2.i2p/">www.i2p2.i2p</a>),
peers, you should open port 8887 on your firewall for better connectivity. If be sure your browser proxy is set to 127.0.0.1 port 4444. You may also want
you cannot see any eepsites at all (even <a href="http://www.i2p2.i2p/">www.i2p2.i2p</a>), to review the information on the <a href="http://www.i2p2.i2p/">I2P website</a>,
be sure your browser proxy is set to 127.0.0.1 port 4444. You may also want post up messages to the <a href="http://forum.i2p2.de/">I2P discussion forum</a>,
to review the information on the <a href="http://www.i2p2.i2p/">I2P website</a>, or swing by #i2p or #i2p-chat on IRC at <a href="irc://irc.freenode.net/#i2p">irc.freenode.net</a>,
post up messages to the <a href="http://forum.i2p2.de/">I2P discussion forum</a>, irc.postman.i2p or irc.freshcoffee.i2p (they're linked together).</p>
or swing by #i2p or #i2p-chat on IRC at <a href="irc://irc.freenode.net/#i2p">irc.freenode.net</a>, <hr>
irc.postman.i2p or irc.freshcoffee.i2p (they're linked together).</p>
<hr />

View File

@ -778,7 +778,7 @@ public class Blocklist {
if (to != from) { if (to != from) {
out.write(toStr(to)); out.write("</td></tr>\n"); out.write(toStr(to)); out.write("</td></tr>\n");
} else } else
out.write("&nbsp</td></tr>\n"); out.write("&nbsp;</td></tr>\n");
} }
if (_blocklistSize > MAX_DISPLAY) if (_blocklistSize > MAX_DISPLAY)
out.write("<tr><th colspan=2>First " + MAX_DISPLAY + " displayed, see the " + out.write("<tr><th colspan=2>First " + MAX_DISPLAY + " displayed, see the " +

View File

@ -615,7 +615,7 @@ public class JobQueue {
// for (int i = 0; i < states.length; i++) // for (int i = 0; i < states.length; i++)
// buf.append(states[i]).append(" "); // buf.append(states[i]).append(" ");
//buf.append(']'); //buf.append(']');
buf.append("</b><br />\n"); buf.append("</b><br>\n");
long now = _context.clock().now(); long now = _context.clock().now();

View File

@ -597,23 +597,23 @@ public class Router {
"<option value=\"/oldconsole.jsp#netdb\">Network Database</option>\n" + "<option value=\"/oldconsole.jsp#netdb\">Network Database</option>\n" +
"<option value=\"/oldconsole.jsp#logs\">Log messages</option>\n" + "<option value=\"/oldconsole.jsp#logs\">Log messages</option>\n" +
"</select> <input type=\"submit\" value=\"GO\" /> </form>" + "</select> <input type=\"submit\" value=\"GO\" /> </form>" +
"<hr />\n"); "<hr>\n");
StringBuilder buf = new StringBuilder(32*1024); StringBuilder buf = new StringBuilder(32*1024);
if ( (_routerInfo != null) && (_routerInfo.getIdentity() != null) ) if ( (_routerInfo != null) && (_routerInfo.getIdentity() != null) )
buf.append("<b>Router: </b> ").append(_routerInfo.getIdentity().getHash().toBase64()).append("<br />\n"); buf.append("<b>Router: </b> ").append(_routerInfo.getIdentity().getHash().toBase64()).append("<br>\n");
buf.append("<b>As of: </b> ").append(new Date(_context.clock().now())).append(" (uptime: ").append(DataHelper.formatDuration(getUptime())).append(") <br />\n"); buf.append("<b>As of: </b> ").append(new Date(_context.clock().now())).append(" (uptime: ").append(DataHelper.formatDuration(getUptime())).append(") <br>\n");
buf.append("<b>Started on: </b> ").append(new Date(getWhenStarted())).append("<br />\n"); buf.append("<b>Started on: </b> ").append(new Date(getWhenStarted())).append("<br>\n");
buf.append("<b>Clock offset: </b> ").append(_context.clock().getOffset()).append("ms (OS time: ").append(new Date(_context.clock().now() - _context.clock().getOffset())).append(")<br />\n"); buf.append("<b>Clock offset: </b> ").append(_context.clock().getOffset()).append("ms (OS time: ").append(new Date(_context.clock().now() - _context.clock().getOffset())).append(")<br>\n");
long tot = Runtime.getRuntime().totalMemory()/1024; long tot = Runtime.getRuntime().totalMemory()/1024;
long free = Runtime.getRuntime().freeMemory()/1024; long free = Runtime.getRuntime().freeMemory()/1024;
buf.append("<b>Memory:</b> In use: ").append((tot-free)).append("KB Free: ").append(free).append("KB <br />\n"); buf.append("<b>Memory:</b> In use: ").append((tot-free)).append("KB Free: ").append(free).append("KB <br>\n");
buf.append("<b>Version:</b> Router: ").append(RouterVersion.VERSION).append(" / SDK: ").append(CoreVersion.VERSION).append("<br />\n"); buf.append("<b>Version:</b> Router: ").append(RouterVersion.VERSION).append(" / SDK: ").append(CoreVersion.VERSION).append("<br>\n");
if (_higherVersionSeen) if (_higherVersionSeen)
buf.append("<b><font color=\"red\">HIGHER VERSION SEEN</font><b> - please <a href=\"http://www.i2p.net/\">check</a> to see if there is a new release out<br />\n"); buf.append("<b><font color=\"red\">HIGHER VERSION SEEN</font><b> - please <a href=\"http://www.i2p.net/\">check</a> to see if there is a new release out<br>\n");
buf.append("<hr /><a name=\"bandwidth\"> </a><h2>Bandwidth</h2>\n"); buf.append("<hr><a name=\"bandwidth\"> </a><h2>Bandwidth</h2>\n");
long sent = _context.bandwidthLimiter().getTotalAllocatedOutboundBytes(); long sent = _context.bandwidthLimiter().getTotalAllocatedOutboundBytes();
long received = _context.bandwidthLimiter().getTotalAllocatedInboundBytes(); long received = _context.bandwidthLimiter().getTotalAllocatedInboundBytes();
buf.append("<ul>"); buf.append("<ul>");
@ -723,41 +723,41 @@ public class Router {
_context.bandwidthLimiter().renderStatusHTML(out); _context.bandwidthLimiter().renderStatusHTML(out);
out.write("<hr /><a name=\"clients\"> </a>\n"); out.write("<hr><a name=\"clients\"> </a>\n");
_context.clientManager().renderStatusHTML(out); _context.clientManager().renderStatusHTML(out);
out.write("\n<hr /><a name=\"transports\"> </a>\n"); out.write("\n<hr><a name=\"transports\"> </a>\n");
_context.commSystem().renderStatusHTML(out); _context.commSystem().renderStatusHTML(out);
out.write("\n<hr /><a name=\"profiles\"> </a>\n"); out.write("\n<hr><a name=\"profiles\"> </a>\n");
_context.peerManager().renderStatusHTML(out); _context.peerManager().renderStatusHTML(out);
out.write("\n<hr /><a name=\"tunnels\"> </a>\n"); out.write("\n<hr><a name=\"tunnels\"> </a>\n");
_context.tunnelManager().renderStatusHTML(out); _context.tunnelManager().renderStatusHTML(out);
out.write("\n<hr /><a name=\"jobs\"> </a>\n"); out.write("\n<hr><a name=\"jobs\"> </a>\n");
_context.jobQueue().renderStatusHTML(out); _context.jobQueue().renderStatusHTML(out);
out.write("\n<hr /><a name=\"shitlist\"> </a>\n"); out.write("\n<hr><a name=\"shitlist\"> </a>\n");
_context.shitlist().renderStatusHTML(out); _context.shitlist().renderStatusHTML(out);
out.write("\n<hr /><a name=\"pending\"> </a>\n"); out.write("\n<hr><a name=\"pending\"> </a>\n");
_context.messageRegistry().renderStatusHTML(out); _context.messageRegistry().renderStatusHTML(out);
out.write("\n<hr /><a name=\"netdb\"> </a>\n"); out.write("\n<hr><a name=\"netdb\"> </a>\n");
_context.netDb().renderLeaseSetHTML(out); _context.netDb().renderLeaseSetHTML(out);
_context.netDb().renderStatusHTML(out); _context.netDb().renderStatusHTML(out);
buf.setLength(0); buf.setLength(0);
buf.append("\n<hr /><a name=\"logs\"> </a>\n"); buf.append("\n<hr><a name=\"logs\"> </a>\n");
List msgs = _context.logManager().getBuffer().getMostRecentMessages(); List msgs = _context.logManager().getBuffer().getMostRecentMessages();
buf.append("\n<h2>Most recent console messages:</h2><table>\n"); buf.append("\n<h2>Most recent console messages:</h2><table>\n");
for (Iterator iter = msgs.iterator(); iter.hasNext(); ) { for (Iterator iter = msgs.iterator(); iter.hasNext(); ) {

View File

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

View File

@ -274,7 +274,7 @@ public class Shitlist {
if ( (transports != null) && (transports.size() > 0) ) if ( (transports != null) && (transports.size() > 0) )
buf.append(" on the following transport: ").append(transports); buf.append(" on the following transport: ").append(transports);
if (entry.cause != null) { if (entry.cause != null) {
buf.append("<br />\n"); buf.append("<br>\n");
buf.append(entry.cause); buf.append(entry.cause);
} }
buf.append(" (<a href=\"configpeer.jsp?peer=").append(key.toBase64()).append("#unsh\">unban now</a>)"); buf.append(" (<a href=\"configpeer.jsp?peer=").append(key.toBase64()).append("#unsh\">unban now</a>)");

Some files were not shown because too many files have changed in this diff Show More