Author: Jogy
Date: 2006-05-18 19:47:04 +0000 (Thu, 18 May 2006)
New Revision: 8778
Modified:
trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
trunk/freenet/src/freenet/clients/http/PproxyToadlet.java
trunk/freenet/src/freenet/clients/http/staticfiles/themes/clean/theme.css
Log:
Spiced up PproxyToadlet (?PluginsToadlet?)
Hello nextgen :)
Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
2006-05-18 19:40:40 UTC (rev 8777)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
2006-05-18 19:47:04 UTC (rev 8778)
@@ -95,131 +95,135 @@
buf.append("<div class=\"infobox-content\">\n");
buf.append("<form action=\".\" method=\"post\"
enctype=\"multipart/form-data\">\n");
buf.append("<table class=\"darknet_connections\">\n");
- buf.append("<tr><th>Status</th><th>Name</th><th> <span
title=\"Address:Port\" style=\"border-bottom:1px
dotted;cursor:help;\">Address</span></th><th>Version</th><th>Location</th><th>
<span title=\"Temporarily disconnected. Other node busy? Wait time(s)
remaining/total\" style=\"border-bottom:1px
dotted;cursor:help;\">Backoff</span></th><th> <span title=\"Number of minutes
since the node was last seen in this session\" style=\"border-bottom:1px
dotted;cursor:help;\">Idle</span></th><th></th></tr>\n");
-
- final Integer CONNECTED = new Integer(0);
- final Integer BACKED_OFF = new Integer(1);
- final Integer TOO_NEW = new Integer(2);
- final Integer INCOMPATIBLE = new Integer(3);
- final Integer DISCONNECTED = new Integer(4);
+ buf.append("<tr><th>Status</th><th>Name</th><th><span
title=\"Address:Port\" style=\"border-bottom:1px
dotted;cursor:help;\">Address</span></th><th>Version</th><th>Location</th><th><span
title=\"Temporarily disconnected. Other node busy? Wait time(s)
remaining/total\" style=\"border-bottom:1px
dotted;cursor:help;\">Backoff</span></th><th><span title=\"Number of minutes
since the node was last seen in this session\" style=\"border-bottom:1px
dotted;cursor:help;\">Idle</span></th><th></th></tr>\n");
- int numberOfConnected = 0;
- int numberOfBackedOff = 0;
- int numberOfTooNew = 0;
- int numberOfIncompatible = 0;
- int numberOfDisconnected = 0;
-
- // Create array
- Object[][] rows = new Object[peerNodes.length][];
- for(int i=0;i<peerNodes.length;i++) {
- PeerNode pn = peerNodes[i];
- long routingBackedOffUntil =
pn.getRoutingBackedOffUntil();
- boolean routingBackedOffNow = (now <
routingBackedOffUntil);
- int backoff = (int)(Math.max(routingBackedOffUntil -
now, 0));
- long idle = pn.lastReceivedPacketTime();
+ if (peerNodes.length == 0) {
+ buf.append("<tr><td colspan=\"8\">No connections so
far</td></tr>\n");
+ buf.append("</table>\n");
+ }
+ else {
+ final Integer CONNECTED = new Integer(0);
+ final Integer BACKED_OFF = new Integer(1);
+ final Integer TOO_NEW = new Integer(2);
+ final Integer INCOMPATIBLE = new Integer(3);
+ final Integer DISCONNECTED = new Integer(4);
- // Elements must be HTML encoded.
- Object[] row = new Object[9]; // where [0] is the pn
object!
- rows[i] = row;
+ int numberOfConnected = 0;
+ int numberOfBackedOff = 0;
+ int numberOfTooNew = 0;
+ int numberOfIncompatible = 0;
+ int numberOfDisconnected = 0;
- Object status;
- if(pn.isConnected()) {
- status = CONNECTED;
- if(routingBackedOffNow) {
- status = BACKED_OFF;
+ // Create array
+ Object[][] rows = new Object[peerNodes.length][];
+ for(int i=0;i<peerNodes.length;i++) {
+ PeerNode pn = peerNodes[i];
+ long routingBackedOffUntil =
pn.getRoutingBackedOffUntil();
+ boolean routingBackedOffNow = (now <
routingBackedOffUntil);
+ int backoff =
(int)(Math.max(routingBackedOffUntil - now, 0));
+ long idle = pn.lastReceivedPacketTime();
+
+ // Elements must be HTML encoded.
+ Object[] row = new Object[9]; // where [0] is
the pn object!
+ rows[i] = row;
+
+ Object status;
+ if(pn.isConnected()) {
+ status = CONNECTED;
+ if(routingBackedOffNow) {
+ status = BACKED_OFF;
+ }
+ } else if(pn.hasCompletedHandshake() &&
pn.isVerifiedIncompatibleNewerVersion()) {
+ status = TOO_NEW;
+ } else if(pn.hasCompletedHandshake() &&
!Version.checkGoodVersion(pn.getVersion())) {
+ status = INCOMPATIBLE;
+ } else {
+ status = DISCONNECTED;
}
- } else if(pn.hasCompletedHandshake() &&
pn.isVerifiedIncompatibleNewerVersion()) {
- status = TOO_NEW;
- } else if(pn.hasCompletedHandshake() &&
!Version.checkGoodVersion(pn.getVersion())) {
- status = INCOMPATIBLE;
- } else {
- status = DISCONNECTED;
+
+ row[0] = pn;
+ row[1] = status;
+ row[2] = HTMLEncoder.encode(pn.getName());
+ row[3] = pn.getDetectedPeer() != null ?
HTMLEncoder.encode(pn.getDetectedPeer().toString()) : "(address unknown)";
+ row[4] = HTMLEncoder.encode(pn.getVersion());
+ row[5] = new
Double(pn.getLocation().getValue());
+ row[6] = backoff/1000 + "/" +
pn.getRoutingBackoffLength()/1000;
+ if (idle == -1) row[7] = " ";
+ else row[7] = new Long((now - idle) / 60000);
+ row[8] = "<input type=\"checkbox\"
name=\"delete_node_"+pn.hashCode()+"\" />";
}
+
+ // Sort array
+ Arrays.sort(rows, new MyComparator());
- row[0] = pn;
- row[1] = status;
- row[2] = HTMLEncoder.encode(pn.getName());
- row[3] = pn.getDetectedPeer() != null ?
HTMLEncoder.encode(pn.getDetectedPeer().toString()) : "(address unknown)";
- row[4] = HTMLEncoder.encode(pn.getVersion());
- row[5] = new Double(pn.getLocation().getValue());
- row[6] = backoff/1000 + "/" +
pn.getRoutingBackoffLength()/1000;
- if (idle == -1) row[7] = " ";
- else row[7] = new Long((now - idle) / 60000);
- row[8] = "<input type=\"checkbox\"
name=\"delete_node_"+pn.hashCode()+"\" />";
- }
-
- // Sort array
- Arrays.sort(rows, new MyComparator());
-
- // Convert status codes into status strings
- for(int i=0;i<rows.length;i++) {
- Object[] row = rows[i];
- Integer x = (Integer) row[1];
- if(x == CONNECTED) {
- row[1] = "<span
class=\"peer_connected\">CONNECTED</span>";
- numberOfConnected++;
+ // Convert status codes into status strings
+ for(int i=0;i<rows.length;i++) {
+ Object[] row = rows[i];
+ Integer x = (Integer) row[1];
+ if(x == CONNECTED) {
+ row[1] = "<span
class=\"peer_connected\">CONNECTED</span>";
+ numberOfConnected++;
+ }
+ else if(x == BACKED_OFF) {
+ row[1] = "<span
class=\"peer_backedoff\">BACKED OFF</span>";
+ numberOfBackedOff++;
+ }
+ else if(x == TOO_NEW) {
+ row[1] = "<span
class=\"peer_too_new\">TOO NEW</span>";
+ numberOfTooNew++;
+ }
+ else if(x == INCOMPATIBLE) {
+ row[1] = "<span
class=\"peer_incompatible\">INCOMPATIBLE</span>";
+ numberOfIncompatible++;
+ }
+ else if(x == DISCONNECTED) {
+ row[1] = "<span
class=\"peer_disconnected\">DISCONNECTED</span>";
+ numberOfDisconnected++;
+ }
}
- else if(x == BACKED_OFF) {
- row[1] = "<span class=\"peer_backedoff\">BACKED
OFF</span>";
- numberOfBackedOff++;
- }
- else if(x == TOO_NEW) {
- row[1] = "<span class=\"peer_too_new\">TOO
NEW</span>";
- numberOfTooNew++;
- }
- else if(x == INCOMPATIBLE) {
- row[1] = "<span
class=\"peer_incompatible\">INCOMPATIBLE</span>";
- numberOfIncompatible++;
- }
- else if(x == DISCONNECTED) {
- row[1] = "<span
class=\"peer_disconnected\">DISCONNECTED</span>";
- numberOfDisconnected++;
- }
- }
-
- // Turn array into HTML
- for(int i=0;i<rows.length;i++) {
- Object[] row = rows[i];
- buf.append("<tr>");
- for(int j=1;j<row.length;j++) { // skip index 0 as
it's the PeerNode object
- buf.append("<td>"+row[j]+"</td>");
- }
- buf.append("</tr>\n");
- if (path.endsWith("displaymessagetypes.html"))
- {
- buf.append("<tr class=\"messagetypes\"><td
colspan=\"8\">\n");
- buf.append("<table
class=\"sentmessagetypes\">\n");
- buf.append("<tr><th>Sent Message
Type</th><th>Count</th></tr>\n");
- for (Enumeration
keys=((PeerNode)row[0]).getLocalNodeSentMessagesToStatistic().keys();
keys.hasMoreElements(); )
- {
- Object curkey = keys.nextElement();
- buf.append("<tr><td>");
- buf.append((String)curkey);
- buf.append("</td><td>");
-
buf.append(((Long)((PeerNode)row[0]).getLocalNodeSentMessagesToStatistic().get(curkey))
+ "");
- buf.append("</td></tr>\n");
+ // Turn array into HTML
+ for(int i=0;i<rows.length;i++) {
+ Object[] row = rows[i];
+ buf.append("<tr>");
+ for(int j=1;j<row.length;j++) { // skip index
0 as it's the PeerNode object
+ buf.append("<td>"+row[j]+"</td>");
}
- buf.append("</table>\n");
-
- buf.append("<table
class=\"receivedmessagetypes\">\n");
- buf.append("<tr><th>Received Message
Type</th><th>Count</th></tr>\n");
- for (Enumeration
keys=((PeerNode)row[0]).getLocalNodeReceivedMessagesFromStatistic().keys();
keys.hasMoreElements(); )
+ buf.append("</tr>\n");
+
+ if (path.endsWith("displaymessagetypes.html"))
{
- Object curkey = keys.nextElement();
- buf.append("<tr><td>");
- buf.append((String)curkey);
- buf.append("</td><td>");
-
buf.append(((Long)((PeerNode)row[0]).getLocalNodeReceivedMessagesFromStatistic().get(curkey))
+ "");
+ buf.append("<tr
class=\"messagetypes\"><td colspan=\"8\">\n");
+ buf.append("<table
class=\"sentmessagetypes\">\n");
+ buf.append("<tr><th>Sent Message
Type</th><th>Count</th></tr>\n");
+ for (Enumeration
keys=((PeerNode)row[0]).getLocalNodeSentMessagesToStatistic().keys();
keys.hasMoreElements(); )
+ {
+ Object curkey =
keys.nextElement();
+ buf.append("<tr><td>");
+ buf.append((String)curkey);
+ buf.append("</td><td>");
+
buf.append(((Long)((PeerNode)row[0]).getLocalNodeSentMessagesToStatistic().get(curkey))
+ "");
+ buf.append("</td></tr>\n");
+ }
+ buf.append("</table>\n");
+
+ buf.append("<table
class=\"receivedmessagetypes\">\n");
+ buf.append("<tr><th>Received Message
Type</th><th>Count</th></tr>\n");
+ for (Enumeration
keys=((PeerNode)row[0]).getLocalNodeReceivedMessagesFromStatistic().keys();
keys.hasMoreElements(); )
+ {
+ Object curkey =
keys.nextElement();
+ buf.append("<tr><td>");
+ buf.append((String)curkey);
+ buf.append("</td><td>");
+
buf.append(((Long)((PeerNode)row[0]).getLocalNodeReceivedMessagesFromStatistic().get(curkey))
+ "");
+ buf.append("</td></tr>\n");
+ }
+ buf.append("</table>\n");
buf.append("</td></tr>\n");
}
- buf.append("</table>\n");
- buf.append("</td></tr>\n");
}
- }
- buf.append("</table>\n");
- //
- if (rows.length != 0) {
+ buf.append("</table>\n");
+ //
buf.append("<table class=\"darknet_connections\">\n");
buf.append("<tr><td>");
boolean separatorNeeded = false;
@@ -253,10 +257,10 @@
}
buf.append("</td></tr>\n");
buf.append("</table>\n");
+ //
+ buf.append("<input type=\"submit\" name=\"disconnect\"
value=\"Disconnect from selected peers\" />\n");
+ buf.append("</form>\n");
}
- //
- buf.append("<input type=\"submit\" name=\"disconnect\"
value=\"Disconnect from selected peers\" />\n");
- buf.append("</form>\n");
buf.append("</div>\n");
buf.append("</div>\n");
Modified: trunk/freenet/src/freenet/clients/http/PproxyToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/PproxyToadlet.java 2006-05-18
19:40:40 UTC (rev 8777)
+++ trunk/freenet/src/freenet/clients/http/PproxyToadlet.java 2006-05-18
19:47:04 UTC (rev 8778)
@@ -14,6 +14,7 @@
import freenet.pluginmanager.PluginManager;
import freenet.support.Bucket;
import freenet.support.BucketTools;
+import freenet.support.HTMLEncoder;
import freenet.support.Logger;
import freenet.support.MultiValueTable;
@@ -33,7 +34,7 @@
throws ToadletContextClosedException, IOException {
if(data.size() > 1024*1024) {
- this.writeReply(ctx, 400, "text/plain", "Too big", "Too
much data, config servlet limited to 1MB");
+ this.writeReply(ctx, 400, "text/plain", "Too big", "Too
much data, plugin servlet limited to 1MB");
return;
}
byte[] d = BucketTools.toByteArray(data);
@@ -63,13 +64,12 @@
}if (request.getParam("unloadconfirm").length() > 0) {
pm.killPlugin(request.getParam("unloadconfirm"));
ctx.getPageMaker().makeHead(buf, "Plugins");
- buf.append("<div class=\"infobox
infobox-information\">\n");
+ buf.append("<div class=\"infobox infobox-success\">\n");
buf.append("<div class=\"infobox-header\">\n");
- buf.append("Plugin operation\n");
+ buf.append("Plugin Unloaded\n");
buf.append("</div>\n");
buf.append("<div class=\"infobox-content\">\n");
- buf.append("The plugin "+request.getParam("remove")+"
has been removed.\n");
- buf.append("<a href=\"/plugins/\">Back</a>");
+ buf.append("The plugin " +
HTMLEncoder.encode(request.getParam("remove")) + " has been unloaded.<br /><a
href=\"/plugins/\">Return to Plugins Page</a>\n");
buf.append("</div>\n");
buf.append("</div>\n");
ctx.getPageMaker().makeTail(buf);
@@ -80,16 +80,14 @@
ctx.getPageMaker().makeHead(buf, "Plugins");
buf.append("<div class=\"infobox infobox-query\">\n");
buf.append("<div class=\"infobox-header\">\n");
- buf.append("Plugin operation\n");
+ buf.append("Unload Plugin?\n");
buf.append("</div>\n");
buf.append("<div class=\"infobox-content\">\n");
- buf.append("Are you sure you wish to unload
"+request.getParam("unload")+"?\n");
+ buf.append("Are you sure you wish to unload " +
HTMLEncoder.encode(request.getParam("unload")) + "?\n");
buf.append("<form action=\"/plugins/\"
method=\"post\">\n");
buf.append("<input type=\"submit\" name=\"cancel\"
value=\"Cancel\" />\n");
- buf.append("</form>");
- buf.append("<form action=\"/plugins/\"
method=\"post\">\n");
- buf.append("<input type=\"hidden\"
name=\"unloadconfirm\" value=\""+request.getParam("unload")+"\">\n");
- buf.append("<input type=\"submit\" name=\"confirm\"
value=\"UNLOAD\" />\n");
+ buf.append("<input type=\"hidden\"
name=\"unloadconfirm\" value=\"" +
HTMLEncoder.encode(request.getParam("unload")) + "\">\n");
+ buf.append("<input type=\"submit\" name=\"confirm\"
value=\"Unload\" />\n");
buf.append("</form>\n");
buf.append("</div>\n");
buf.append("</div>\n");
@@ -108,7 +106,7 @@
}
if (fn == null) {
- this.sendErrorPage(ctx, 404, "Plugin not
found", "The specified plugin could not be located in order to reload it.");
+ this.sendErrorPage(ctx, 404, "Plugin Not
Found", "The specified plugin could not be located in order to reload it.");
//writeReply(ctx, 200, "text/html", "OK",
mkForwardPage(ctx,"Error", "Plugin not found...", ".", 5));
} else {
pm.killPlugin(request.getParam("reload"));
@@ -183,42 +181,41 @@
private void showPluginList(ToadletContext ctx, HTTPRequest request)
throws ToadletContextClosedException, IOException {
if (!request.hasParameters()) {
StringBuffer out = new StringBuffer();
- ctx.getPageMaker().makeHead(out, "Plugin List");
- out.append("<table style=\"border: 1pt solid
#c0c0c0;\">");
- out.append(" <tr>\n");
- out.append(" <th>Name</th>\n");
- out.append(" <th>ID</th>\n");
- out.append(" <th>Started</th>\n");
- out.append(" <th></th>\n");
- out.append(" </tr>\n");
- Iterator it = pm.getPlugins().iterator();
- while (it.hasNext()) {
- PluginInfoWrapper pi = (PluginInfoWrapper)
it.next();
- out.append(" <tr>\n");
- out.append(" <td style=\"border: 1pt solid
#c0c0c0;\">" + pi.getPluginClassName() + "</td>\n");
- out.append(" <td style=\"border: 1pt solid
#c0c0c0;\">" + pi.getThreadName() + "</td>\n");
- out.append(" <td style=\"border: 1pt solid
#c0c0c0;\">" + (new Date(pi.getStarted())) + "</td>\n");
- out.append(" <td style=\"border: 1pt solid
#c0c0c0;\">");
- if (pi.isPproxyPlugin())
- out.append(" <a
href=\""+pi.getPluginClassName()+"/\">[VISIT]</a> ");
- out.append(" <form method=\"post\"
action=\".\">" +
- "<input type=\"hidden\"
name=\"unload\" value=\""+pi.getThreadName()+"\" />"+
- "<input type=\"submit\"
value=\"[UNLOAD]\"></form> ");
- out.append(" <form method=\"post\"
action=\".\">" +
- "<input type=\"hidden\"
name=\"reload\" value=\""+pi.getThreadName()+"\" />"+
- "<input type=\"submit\"
value=\"[RELOAD]\"></form> ");
- out.append("</td>\n");
- out.append(" </tr>\n");
- }
-
+ ctx.getPageMaker().makeHead(out, "Plugins");
+ //
+ out.append("<div class=\"infobox infobox-normal\">\n");
+ out.append("<div class=\"infobox-header\">\n");
+ out.append("Plugin List\n");
+ out.append("</div>\n");
+ out.append("<div class=\"infobox-content\">\n");
+ //
+ out.append("<table class=\"plugins\">");
+ out.append("<tr><th>Classname</th><th>Internal
ID</th><th>Started at</th><th></th></tr>\n");
if (pm.getPlugins().isEmpty()) {
- out.append("<tr>\n");
- out.append("<td colspan=\"4\"\n");
- out.append("<i>No plugins loaded</i>\n");
- out.append("</td>\n");
- out.append("</tr>\n");
+ out.append("<tr><td colspan=\"4\">No plugins
loaded</td></tr>\n");
}
-
+ else {
+ Iterator it = pm.getPlugins().iterator();
+ while (it.hasNext()) {
+ PluginInfoWrapper pi =
(PluginInfoWrapper) it.next();
+ out.append("<tr>");
+ out.append("<td>" +
pi.getPluginClassName() + "</td>");
+ out.append("<td>" + pi.getThreadName()
+ "</td>");
+ out.append("<td>" + (new
Date(pi.getStarted())) + "</td>");
+ out.append("<td>");
+ if (pi.isPproxyPlugin()) {
+ out.append("<form
method=\"get\" action=\"" + pi.getPluginClassName() + "\">" +
+ "<input
type=\"submit\" value=\"Visit\"></form>");
+ }
+ out.append("<form method=\"post\"
action=\".\">" +
+ "<input type=\"hidden\"
name=\"unload\" value=\"" + pi.getThreadName() + "\" />"+
+ "<input type=\"submit\"
value=\"Unload\"></form>");
+ out.append("<form method=\"post\"
action=\".\">" +
+ "<input type=\"hidden\"
name=\"reload\" value=\"" + pi.getThreadName() + "\" />"+
+ "<input type=\"submit\"
value=\"Reload\"></form>");
+ out.append("</td></tr>\n");
+ }
+ }
out.append("</table>");
//String ret = "<hr/>" + out.toString();
//ret = pm.dumpPlugins().replaceAll(",", "\n
").replaceAll("\"", " \" ");
@@ -230,6 +227,10 @@
// Obsolete
//out.append("<form method=\"get\"><div>Remove plugin:
(enter ID) <input type=\"text\" name=\"remove\" size=40/><input type=\"submit\"
value=\"Remove\"/></div></form>\n");
out.append("<form method=\"post\"
action=\".\"><div>Load plugin: <input type=\"text\" name=\"load\"
size=\"40\"/><input type=\"submit\" value=\"Load\" /></div></form>\n");
+ //
+ out.append("</div>\n");
+ out.append("</div>\n");
+ //
ctx.getPageMaker().makeTail(out);
writeReply(ctx, 200, "text/html", "OK", out.toString());
}
Modified:
trunk/freenet/src/freenet/clients/http/staticfiles/themes/clean/theme.css
===================================================================
--- trunk/freenet/src/freenet/clients/http/staticfiles/themes/clean/theme.css
2006-05-18 19:40:40 UTC (rev 8777)
+++ trunk/freenet/src/freenet/clients/http/staticfiles/themes/clean/theme.css
2006-05-18 19:47:04 UTC (rev 8778)
@@ -203,6 +203,21 @@
list-style: none;
}
+/* plugins page */
+
+table.plugins th, table.plugins td {
+ font-size: 8pt;
+}
+
+table.plugins span {
+ font-weight: bold;
+ font-size: 8pt;
+}
+
+table.plugins form {
+ display: inline;
+}
+
/* configuration page */
ul.config {
@@ -241,16 +256,6 @@
width: 300px;
}
-/*
-.cancel {
- float: left;
-}
-
-.confirm {
- float: right;
-}
-*/
-
/* darknet page */
table.darknet_connections th, table.darknet_connections td {