Author: cyberdo
Date: 2006-03-04 17:46:47 +0000 (Sat, 04 Mar 2006)
New Revision: 8158

Added:
   trunk/freenet/src/freenet/pluginmanager/PluginSecurityException.java
Modified:
   trunk/freenet/src/freenet/clients/http/FproxyToadlet.java
   trunk/freenet/src/freenet/clients/http/ToadletContextImpl.java
   trunk/freenet/src/freenet/node/Version.java
   trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
   trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
   trunk/freenet/src/freenet/pluginmanager/PluginManager.java
   trunk/freenet/src/freenet/pluginmanager/PluginRespirator.java
   trunk/freenet/src/freenet/pluginmanager/PproxyToadlet.java
Log:
492:
Fixed the URI-bug, Re-organized the plugin system a bit to make
http://../plugins/ better. Prepared for adding more exceptions
to plugin system.


Modified: trunk/freenet/src/freenet/clients/http/FproxyToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/FproxyToadlet.java   2006-03-04 
17:00:02 UTC (rev 8157)
+++ trunk/freenet/src/freenet/clients/http/FproxyToadlet.java   2006-03-04 
17:46:47 UTC (rev 8158)
@@ -31,7 +31,8 @@

        public void handleGet(URI uri, ToadletContext ctx)
                        throws ToadletContextClosedException, IOException {
-               String ks = uri.toString();
+               //String ks = uri.toString();
+               String ks = uri.getPath();
                if(ks.startsWith("/"))
                        ks = ks.substring(1);
                FreenetURI key;

Modified: trunk/freenet/src/freenet/clients/http/ToadletContextImpl.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/ToadletContextImpl.java      
2006-03-04 17:00:02 UTC (rev 8157)
+++ trunk/freenet/src/freenet/clients/http/ToadletContextImpl.java      
2006-03-04 17:46:47 UTC (rev 8158)
@@ -133,13 +133,16 @@

                                URI uri;
                                try {
-                                       uri = new 
URI(URLDecoder.decode(split[1]));
+                                       //uri = new 
URI(URLDecoder.decode(split[1]));
+                                       uri = new URI(split[1]);
                                } catch (URISyntaxException e) {
                                        
sendURIParseError(sock.getOutputStream(), true);
                                        return;
+                               /*
                                } catch (URLEncodedFormatException e) {
                                        
sendURIParseError(sock.getOutputStream(), true);
                                        return;
+                                       */
                                }

                                String method = split[0];

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-03-04 17:00:02 UTC (rev 
8157)
+++ trunk/freenet/src/freenet/node/Version.java 2006-03-04 17:46:47 UTC (rev 
8158)
@@ -20,7 +20,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 491;
+       private static final int buildNumber = 492;

        /** Oldest build of Fred we will talk to */
        private static final int lastGoodBuild = 475;

Modified: trunk/freenet/src/freenet/pluginmanager/PluginHandler.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginHandler.java  2006-03-04 
17:00:02 UTC (rev 8157)
+++ trunk/freenet/src/freenet/pluginmanager/PluginHandler.java  2006-03-04 
17:46:47 UTC (rev 8158)
@@ -53,10 +53,8 @@

                        if (plugin instanceof FredPlugin) {
                                FredPlugin plug = ((FredPlugin)plugin);
-                               // handles fproxy? If so, register
                                //if (plug.handles(FredPlugin.handleFproxy))
-                               if (plug instanceof FredPluginHTTP)
-                                       pm.registerToadlet(plug);
+
                                ((FredPlugin)plugin).runPlugin(pr);
                        }
                        // If not FredPlugin, then the whole thing is aborted,

Modified: trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java      
2006-03-04 17:00:02 UTC (rev 8157)
+++ trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java      
2006-03-04 17:46:47 UTC (rev 8158)
@@ -11,19 +11,19 @@
        private long start;
        private String threadName;
        private FredPlugin plug;
+       private boolean isPproxyPlugin;
        //public String 

        public void putPluginThread(FredPlugin plug, Thread ps) {
                if (fedPluginThread) return;
-               
                className = plug.getClass().toString();
                thread = ps;
                this.plug = plug;
                threadName = "p" + className.replaceAll("^class ", "") + "_" + 
ps.hashCode();
                start = System.currentTimeMillis();
                ps.setName(threadName);
-               
                fedPluginThread = true;
+               isPproxyPlugin = (plug instanceof FredPluginHTTP);
        }

        public String toString() {
@@ -34,6 +34,10 @@
                return threadName;
        }

+       public long getStarted() {
+               return start;
+       }
+       
        public String getPluginClassName(){
                return plug.getClass().getName().toString();
        }
@@ -46,5 +50,9 @@
        public boolean sameThread(Thread t){
                return (t == thread);
        }
+
+       public boolean isPproxyPlugin() {
+               return isPproxyPlugin;
+       }

 }

Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2006-03-04 
17:00:02 UTC (rev 8157)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2006-03-04 
17:46:47 UTC (rev 8158)
@@ -12,6 +12,7 @@
 import java.util.Date;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
@@ -66,6 +67,11 @@
                try {
                        plug = LoadPlugin(filename);
                        PluginInfoWrapper pi = PluginHandler.startPlugin(this, 
plug, pluginRespirator);
+                       // handles fproxy? If so, register
+                       
+                       if (pi.isPproxyPlugin())
+                               registerToadlet(plug);
+                       
                        synchronized (pluginInfo) {
                                pluginInfo.put(pi.getThreadName(), pi);
                        }
@@ -74,8 +80,7 @@
                }
        }

-       public void registerToadlet(FredPlugin pl){
-               Exception e = new Exception();
+       private void registerToadlet(FredPlugin pl){
                //toadletList.put(e.getStackTrace()[1].getClass().toString(), 
pl);
                synchronized (toadletList) {
                        toadletList.put(pl.getClass().getName(), pl);
@@ -95,6 +100,8 @@
                                        synchronized (toadletList) {
                                                try {
                                                        
toadletList.remove(pi.getPluginClassName());
+                                                       
System.err.println("Removed HTTP handler for /plugins/"+
+                                                                       
pi.getPluginClassName()+"/");
                                                } catch (Throwable ex) {
                                                }
                                        }
@@ -119,6 +126,19 @@
                return out.toString();
        }

+       public Set getPlugins() {
+               
+               HashSet out = new HashSet();
+               synchronized (pluginInfo) {
+                       Iterator it = pluginInfo.keySet().iterator();
+                       while (it.hasNext()) {
+                               PluginInfoWrapper pi = (PluginInfoWrapper) 
pluginInfo.get(it.next());
+                               out.add(pi);
+                       }
+               }
+               return out;
+       }
+       
        public String handleHTTPGet(String plugin, String path) throws 
PluginHTTPException {
                FredPlugin handler = null;
                synchronized (toadletList) {

Modified: trunk/freenet/src/freenet/pluginmanager/PluginRespirator.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginRespirator.java       
2006-03-04 17:00:02 UTC (rev 8157)
+++ trunk/freenet/src/freenet/pluginmanager/PluginRespirator.java       
2006-03-04 17:46:47 UTC (rev 8158)
@@ -17,15 +17,12 @@
        }

        public void setPluginManager(PluginManager pm) {
+               // Write once only
                if (this.pm == null)
                        this.pm = pm;
        }

-       /*// TODO:.. really best solution?
-       public void registerToadlet(FredPlugin pl){
-               pm.registerToadlet(pl);
-       }*/
-       
+       //public HighLevelSimpleClient getHLSimpleClient() throws 
PluginSecurityException {
        public HighLevelSimpleClient getHLSimpleClient() {
                return hlsc;
        }

Added: trunk/freenet/src/freenet/pluginmanager/PluginSecurityException.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginSecurityException.java        
2006-03-04 17:00:02 UTC (rev 8157)
+++ trunk/freenet/src/freenet/pluginmanager/PluginSecurityException.java        
2006-03-04 17:46:47 UTC (rev 8158)
@@ -0,0 +1,38 @@
+package freenet.pluginmanager;
+
+public class PluginSecurityException extends Exception {
+
+       /**
+        * 
+        */
+       public PluginSecurityException() {
+               super();
+               // TODO Auto-generated constructor stub
+       }
+
+       /**
+        * @param arg0
+        * @param arg1
+        */
+       public PluginSecurityException(String arg0, Throwable arg1) {
+               super(arg0, arg1);
+               // TODO Auto-generated constructor stub
+       }
+
+       /**
+        * @param arg0
+        */
+       public PluginSecurityException(String arg0) {
+               super(arg0);
+               // TODO Auto-generated constructor stub
+       }
+
+       /**
+        * @param arg0
+        */
+       public PluginSecurityException(Throwable arg0) {
+               super(arg0);
+               // TODO Auto-generated constructor stub
+       }
+
+}

Modified: trunk/freenet/src/freenet/pluginmanager/PproxyToadlet.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PproxyToadlet.java  2006-03-04 
17:00:02 UTC (rev 8157)
+++ trunk/freenet/src/freenet/pluginmanager/PproxyToadlet.java  2006-03-04 
17:46:47 UTC (rev 8158)
@@ -5,9 +5,13 @@
 import java.io.StringWriter;
 import java.net.MalformedURLException;
 import java.net.URI;
+import java.util.Date;
+import java.util.Iterator;

+import sun.security.krb5.internal.crypto.c;


+
 import freenet.client.FetchException;
 import freenet.client.FetchResult;
 import freenet.client.HighLevelSimpleClient;
@@ -17,6 +21,8 @@
 import freenet.keys.FreenetURI;
 import freenet.support.Bucket;
 import freenet.support.Logger;
+import freenet.support.URLDecoder;
+import freenet.support.URLEncodedFormatException;

 public class PproxyToadlet extends Toadlet {
        private PluginManager pm = null;
@@ -36,7 +42,7 @@
        private String mkPage(String title, String content) {
                if (content == null) content = "null";
                return "<html><head><title>" + title + 
"</title></head><body><h1>"+
-               title +"</h1>" + content.replaceAll("\n", "<br/>\n") + 
"</body>";
+               title +"</h1>" + content + "</body>";
        }

        private String mkForwardPage(String title, String content, String 
nextpage, int interval) {
@@ -50,15 +56,46 @@
        public void handleGet(URI uri, ToadletContext ctx)
                        throws ToadletContextClosedException, IOException {
                //String basepath = "/plugins/";
-               String ks = uri.toString();
+               String ks;
+               try {
+                       ks = URLDecoder.decode(uri.toString());
+               } catch (URLEncodedFormatException e) {
+                       // TODO Auto-generated catch block
+                       writeReply(ctx, 500, "text/html", "OK", 
mkPage("Internal Server Error", "Could not parse URI"));
+                       return;
+               }
+               
                if(ks.startsWith("/"))
                        ks = ks.substring(1);
                ks = ks.substring("plugins/".length());
                Logger.minor(this, "Pproxy fetching "+ks);
                try {
                        if (ks.equals("")) {
-                               String ret = "<hr/>";
-                               ret = pm.dumpPlugins().replaceAll(",", 
"\n&nbsp; &nbsp; ").replaceAll("\"", " \" ");
+                               StringBuffer out = new StringBuffer();
+                               out.append("<table style=\"border: 1pt solid 
#c0c0c0;\">");
+                               out.append("  <tr>\n");
+                               out.append("    <td 
align=\"center\">Name</td>\n");
+                               out.append("    <td 
align=\"center\">ID</td>\n");
+                               out.append("    <td 
align=\"center\">Started</td>\n");
+                               out.append("    <td align=\"center\"></td>\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("&nbsp;<A 
HREF=\""+pi.getPluginClassName()+"/\">[VISIT]</A>&nbsp;");
+                                       out.append("&nbsp;<A 
HREF=\"?remove="+pi.getThreadName()+"\">[UNLOAD]</A>&nbsp;");
+                                       out.append("</td>\n");
+                                       out.append("  </tr>\n");
+                               }
+                               out.append("</table>");
+                               String ret = "<hr/>" + out.toString();
+                               //ret = pm.dumpPlugins().replaceAll(",", 
"\n&nbsp; &nbsp; ").replaceAll("\"", " \" ");
                                if (ret.length() < 6)
                                        ret += "<i>No plugins loaded</i>\n";
                                ret += "<hr/>";


Reply via email to