Author: cyberdo
Date: 2006-02-22 22:39:09 +0000 (Wed, 22 Feb 2006)
New Revision: 8118
Added:
trunk/freenet/src/freenet/pluginmanager/FredPluginHTTP.java
trunk/freenet/src/freenet/pluginmanager/PluginHTTPException.java
Modified:
trunk/freenet/src/freenet/node/Version.java
trunk/freenet/src/freenet/pluginmanager/FredPlugin.java
trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
trunk/freenet/src/freenet/pluginmanager/PluginManager.java
trunk/freenet/src/freenet/pluginmanager/PproxyToadlet.java
trunk/freenet/src/freenet/pluginmanager/TestPlugin.java
Log:
470:
Cleaned up the plugin API making it better for expansion.
Added web-form-based loading of plugins (as in... look at ...88/plugins/)
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-02-22 22:39:08 UTC (rev
8117)
+++ trunk/freenet/src/freenet/node/Version.java 2006-02-22 22:39:09 UTC (rev
8118)
@@ -20,7 +20,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- private static final int buildNumber = 469;
+ private static final int buildNumber = 470;
/** Oldest build of Fred we will talk to */
private static final int lastGoodBuild = 403;
Modified: trunk/freenet/src/freenet/pluginmanager/FredPlugin.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/FredPlugin.java 2006-02-22
22:39:08 UTC (rev 8117)
+++ trunk/freenet/src/freenet/pluginmanager/FredPlugin.java 2006-02-22
22:39:09 UTC (rev 8118)
@@ -1,12 +1,9 @@
package freenet.pluginmanager;
public interface FredPlugin {
- public static int handleFproxy = 1;
+ // HTTP-stuff has been moved to FredPluginHTTP
-
- public boolean handles(int thing);
-
public void terminate();
- public String handleHTTPGet(String path);
+
public void runPlugin(PluginRespirator pr);
}
Added: trunk/freenet/src/freenet/pluginmanager/FredPluginHTTP.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/FredPluginHTTP.java 2006-02-22
22:39:08 UTC (rev 8117)
+++ trunk/freenet/src/freenet/pluginmanager/FredPluginHTTP.java 2006-02-22
22:39:09 UTC (rev 8118)
@@ -0,0 +1,10 @@
+package freenet.pluginmanager;
+
+public interface FredPluginHTTP {
+
+ // Let them return null if unhandled
+
+ public String handleHTTPGet(String path) throws PluginHTTPException;
+ public String handleHTTPPut(String path) throws PluginHTTPException;
+ public String handleHTTPPost(String path) throws PluginHTTPException;
+}
Added: trunk/freenet/src/freenet/pluginmanager/PluginHTTPException.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginHTTPException.java
2006-02-22 22:39:08 UTC (rev 8117)
+++ trunk/freenet/src/freenet/pluginmanager/PluginHTTPException.java
2006-02-22 22:39:09 UTC (rev 8118)
@@ -0,0 +1,30 @@
+package freenet.pluginmanager;
+
+public class PluginHTTPException extends Exception {
+ private int code;
+ private String mimeType;
+ private String desc;
+ private String reply;
+ public PluginHTTPException () {
+ this(404, "text/html", "FAIL", "Page not found");
+ }
+ public PluginHTTPException (int code, String mimeType, String desc,
String reply) {
+ this.code = code;
+ this.mimeType = mimeType;
+ this.desc = desc;
+ this.reply = reply;
+ }
+ public int getCode() {
+ return code;
+ }
+ public String getDesc() {
+ return desc;
+ }
+ public String getMimeType() {
+ return mimeType;
+ }
+ public String getReply() {
+ return reply;
+ }
+
+}
Modified: trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginHandler.java 2006-02-22
22:39:08 UTC (rev 8117)
+++ trunk/freenet/src/freenet/pluginmanager/PluginHandler.java 2006-02-22
22:39:09 UTC (rev 8118)
@@ -54,7 +54,8 @@
if (plugin instanceof FredPlugin) {
FredPlugin plug = ((FredPlugin)plugin);
// handles fproxy? If so, register
- if (plug.handles(FredPlugin.handleFproxy))
+ //if (plug.handles(FredPlugin.handleFproxy))
+ if (plug instanceof FredPluginHTTP)
pm.registerToadlet(plug);
((FredPlugin)plugin).runPlugin(pr);
}
Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java 2006-02-22
22:39:08 UTC (rev 8117)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java 2006-02-22
22:39:09 UTC (rev 8118)
@@ -34,9 +34,11 @@
//StartPlugin("misc at file:plugin.jar");
// Needed to include plugin in jar-files
- if (new Date().equals(null)){
+ /*
+ if (new Date().equals(null)){
System.err.println(new TestPlugin());
}
+ */
}
public void startPlugin(String filename) {
@@ -97,15 +99,20 @@
return out.toString();
}
- public String handleHTTPGet(String plugin, String path) {
+ public String handleHTTPGet(String plugin, String path) throws
PluginHTTPException {
FredPlugin handler = null;
synchronized (toadletList) {
handler = (FredPlugin)toadletList.get(plugin);
}
- if (handler == null)
+ /*if (handler == null)
return null;
+ */
- return handler.handleHTTPGet(path);
+ if (handler instanceof FredPluginHTTP)
+ return ((FredPluginHTTP)handler).handleHTTPGet(path);
+
+ // no plugin found
+ throw new PluginHTTPException();
}
public void killPlugin(String name) {
Modified: trunk/freenet/src/freenet/pluginmanager/PproxyToadlet.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PproxyToadlet.java 2006-02-22
22:39:08 UTC (rev 8117)
+++ trunk/freenet/src/freenet/pluginmanager/PproxyToadlet.java 2006-02-22
22:39:09 UTC (rev 8118)
@@ -39,8 +39,17 @@
title +"</h1>" + content.replaceAll("\n", "<br/>\n") +
"</body>";
}
+ private String mkForwardPage(String title, String content, String
nextpage, int interval) {
+ if (content == null) content = "null";
+ return "<html><head><title>" + title + "</title>"+
+ "<META HTTP-EQUIV=Refresh CONTENT=\"" + interval +
+ "; URL="+nextpage+"\"></head><body><h1>" + title +
+ "</h1>" + content.replaceAll("\n", "<br/>\n") + "</body>";
+ }
+
public void handleGet(URI uri, ToadletContext ctx)
throws ToadletContextClosedException, IOException {
+ //String basepath = "/plugins/";
String ks = uri.toString();
if(ks.startsWith("/"))
ks = ks.substring(1);
@@ -48,8 +57,20 @@
Logger.minor(this, "Pproxy fetching "+ks);
try {
if (ks.equals("")) {
- String ret = pm.dumpPlugins().replaceAll(",",
"\n ");
+ String ret = "<hr/>";
+ ret = pm.dumpPlugins().replaceAll(",",
"\n ").replaceAll("\"", " \" ");
+ if (ret.length() < 6)
+ ret += "<i>No plugins loaded</i>\n";
+ ret += "<hr/>";
+ ret += "<form method=\"GET\">Remove plugin:
<input type=text name=\"remove\"/><input type=submit /></form>\n";
+ ret += "<form method=\"GET\">Load plugin:
<input type=text name=\"load\"/><input type=submit /></form>\n";
writeReply(ctx, 200, "text/html", "OK",
mkPage("Plugin list", ret));
+ } else if (ks.startsWith("?remove=")) {
+
pm.killPlugin(ks.substring("?remove=".length()));
+ writeReply(ctx, 200, "text/html", "OK",
mkForwardPage("Removing plugin", "Removing plugin...", ".", 5));
+ } else if (ks.startsWith("?load=")) {
+ pm.startPlugin(ks.substring("?load=".length()));
+ writeReply(ctx, 200, "text/html", "OK",
mkForwardPage("Loading plugin", "Loading plugin...", ".", 5));
} else {
int to = ks.indexOf("/");
String plugin, data;
@@ -64,7 +85,11 @@
//pm.handleHTTPGet(plugin, data);
//writeReply(ctx, 200, "text/html", "OK",
mkPage("plugin", pm.handleHTTPGet(plugin, data)));
- writeReply(ctx, 200, "text/html", "OK",
pm.handleHTTPGet(plugin, data));
+ try {
+ writeReply(ctx, 200, "text/html", "OK",
pm.handleHTTPGet(plugin, data));
+ } catch (PluginHTTPException ex) {
+ writeReply(ctx, ex.getCode(),
ex.getMimeType(), ex.getDesc(), ex.getMessage());
+ }
}
Modified: trunk/freenet/src/freenet/pluginmanager/TestPlugin.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/TestPlugin.java 2006-02-22
22:39:08 UTC (rev 8117)
+++ trunk/freenet/src/freenet/pluginmanager/TestPlugin.java 2006-02-22
22:39:09 UTC (rev 8118)
@@ -13,13 +13,13 @@
boolean goon = true;
Random rnd = new Random();
PluginRespirator pr;
-
+ /*
public boolean handles(int thing) {
return ((thing == FredPlugin.handleFproxy) ||
(thing == FredPlugin.handleFproxy) ||
(thing == FredPlugin.handleFproxy));
}
-
+ */
public void terminate() {
goon = false;
}