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&nbsp; &nbsp; ");
+                               String ret = "<hr/>";
+                               ret = pm.dumpPlugins().replaceAll(",", 
"\n&nbsp; &nbsp; ").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;
        }


Reply via email to