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 ").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(" <A HREF=\""+pi.getPluginClassName()+"/\">[VISIT]</A> "); + out.append(" <A HREF=\"?remove="+pi.getThreadName()+"\">[UNLOAD]</A> "); + out.append("</td>\n"); + out.append(" </tr>\n"); + } + out.append("</table>"); + String ret = "<hr/>" + out.toString(); + //ret = pm.dumpPlugins().replaceAll(",", "\n ").replaceAll("\"", " \" "); if (ret.length() < 6) ret += "<i>No plugins loaded</i>\n"; ret += "<hr/>";
