IMHO this is ugly. It's basically a function of the plugin loader, not the 
interface.

On Thursday 13 September 2007 12:24, you wrote:
> Author: nextgens
> Date: 2007-09-13 11:24:55 +0000 (Thu, 13 Sep 2007)
> New Revision: 15135
> 
> Modified:
>    trunk/freenet/src/freenet/clients/http/PproxyToadlet.java
>    trunk/freenet/src/freenet/pluginmanager/PluginManager.java
> Log:
> plugins: Move some code around... sorry for the big diff
> 
> Basically, checking for <plugname># should be done on the toadlet and not on 
the plugin manager ... otherwise we end up storing the # version in the 
configuration ... and we actually re-download everything on each startup :(
> 
> nb: current loaded plugins using # will be "forgotten"
> 
> Modified: trunk/freenet/src/freenet/clients/http/PproxyToadlet.java
> ===================================================================
> --- trunk/freenet/src/freenet/clients/http/PproxyToadlet.java 2007-09-13 
09:08:18 UTC (rev 15134)
> +++ trunk/freenet/src/freenet/clients/http/PproxyToadlet.java 2007-09-13 
11:24:55 UTC (rev 15135)
> @@ -1,7 +1,12 @@
>  package freenet.clients.http;
>  
> +import java.io.File;
> +import java.io.FileNotFoundException;
>  import java.io.IOException;
> +import java.io.InputStream;
> +import java.net.MalformedURLException;
>  import java.net.URI;
> +import java.net.URL;
>  import java.util.Date;
>  import java.util.Iterator;
>  
> @@ -20,6 +25,7 @@
>  import freenet.support.Logger;
>  import freenet.support.MultiValueTable;
>  import freenet.support.api.HTTPRequest;
> +import freenet.support.io.FileUtil;
>  
>  public class PproxyToadlet extends Toadlet {
>       private static final int MAX_PLUGIN_NAME_LENGTH = 1024;
> @@ -39,7 +45,7 @@
>       }
>  
>       public void handlePost(URI uri, HTTPRequest request, ToadletContext ctx)
> -             throws ToadletContextClosedException, IOException {
> +     throws ToadletContextClosedException, IOException {
>  
>               MultiValueTable headers = new MultiValueTable();
>  
> @@ -55,7 +61,7 @@
>                       super.sendErrorPage(ctx, 403, "Unauthorized", 
> l10n("unauthorized"));
>                       return;
>               }
> -             
> +
>               String path=request.getPath();
>  
>               // remove leading / and plugins/ from path
> @@ -65,7 +71,7 @@
>               if(Logger.shouldLog(Logger.MINOR, this)) Logger.minor(this, 
> "Pproxy 
received POST on "+path);
>  
>               PluginManager pm = node.pluginManager;
> -             
> +
>               if(path.length()>0)
>               {
>                       try
> @@ -114,10 +120,85 @@
>               {
>  
>                       if (request.isPartSet("load")) {
> -                             if(Logger.shouldLog(Logger.MINOR, this)) 
Logger.minor(this, "Loading "+request.getPartAsString("load", 
MAX_PLUGIN_NAME_LENGTH));
> -                             pm.startPlugin(request.getPartAsString("load", 
> MAX_PLUGIN_NAME_LENGTH), 
true);
> -                             //writeReply(ctx, 200, "text/html", "OK", 
> mkForwardPage("Loading 
plugin", "Loading plugin...", ".", 5));
> +                             String filename = 
> request.getPartAsString("load", 
MAX_PLUGIN_NAME_LENGTH);
> +                             final boolean logMINOR = 
> Logger.shouldLog(Logger.MINOR, this);
> +                             boolean downloaded = false;
>  
> +                             if(logMINOR) Logger.minor(this, "Loading 
> "+filename);
> +                             if (filename.endsWith("#")) {
> +                                     for (int tries = 0; (tries <= 5) && 
> (downloaded == false); tries++) {
> +                                             if (filename.indexOf('@') > -1) 
> {
> +                                                     Logger
> +                                                     .error(this,
> +                                                     "We don't allow 
> downloads from anywhere else but our server");
> +                                                     return;
> +                                             }
> +                                             String pluginname = 
> filename.substring(0,
> +                                                             
> filename.length() - 1);
> +                                             filename = null;
> +
> +                                             URL url;
> +                                             InputStream is = null;
> +
> +                                             try {
> +                                                     url = new URL(
> +                                                                     
> "http://downloads.freenetproject.org/alpha/plugins/";
> +                                                                     + 
> pluginname + ".jar.url");
> +                                                     if (logMINOR)
> +                                                             
> Logger.minor(this, "Downloading " + url);
> +                                                     is = url.openStream();
> +
> +                                                     File pluginsDirectory = 
> new File("plugins");
> +                                                     if 
> (!pluginsDirectory.exists()) {
> +                                                             Logger
> +                                                             .normal(this,
> +                                                             "The plugin 
> directory hasn't been found, let's create it");
> +                                                             if 
> (!pluginsDirectory.mkdir())
> +                                                                     return;
> +                                                     }
> +
> +                                                     File finalFile = new 
> File("plugins/" + pluginname
> +                                                                     + 
> ".jar");
> +                                                     if 
> (!FileUtil.writeTo(is, finalFile))
> +                                                             
> Logger.error(this,
> +                                                                             
> "Failed to rename the temporary file into "
> +                                                                             
> + finalFile);
> +
> +                                                     filename = "*@file://"
> +                                                             + 
> FileUtil.getCanonicalFile(finalFile);
> +                                                     if (logMINOR)
> +                                                             
> Logger.minor(this, "Rewritten to " + filename);
> +                                                     downloaded = true;
> +                                             } catch (MalformedURLException 
> mue) {
> +                                                     Logger.error(this,
> +                                                                     
> "MalformedURLException has occured : " + mue,
> +                                                                     mue);
> +                                                     return;
> +                                             } catch (FileNotFoundException 
> e) {
> +                                                     Logger.error(this,
> +                                                                     
> "FileNotFoundException has occured : " + e, e);
> +                                                     return;
> +                                             } catch (IOException ioe) {
> +                                                     
> System.out.println("Caught :" + ioe.getMessage());
> +                                                     ioe.printStackTrace();
> +                                                     return;
> +                                             } finally {
> +                                                     try {
> +                                                             if (is != null)
> +                                                                     
> is.close();
> +                                                     } catch (IOException 
> ioe) {
> +                                                     }
> +                                             }
> +                                             if (filename == null)
> +                                                     return;
> +                                             else if(!downloaded) {
> +                                                     Logger.error(this, 
> "Can't load the given plugin; giving up");
> +                                                     return;
> +                                             }
> +                                     }
> +                             }
> +
> +                             pm.startPlugin(filename, true);
>                               headers.put("Location", ".");
>                               ctx.sendReplyHeaders(302, "Found", headers, 
> null, 0);
>                               return;
> @@ -192,7 +273,7 @@
>       }
>  
>       public void handleGet(URI uri, HTTPRequest request, ToadletContext ctx)
> -             throws ToadletContextClosedException, IOException {
> +     throws ToadletContextClosedException, IOException {
>  
>               //String basepath = "/plugins/";
>               String path = request.getPath();
> @@ -202,7 +283,7 @@
>               if(path.startsWith("plugins/")) path = 
path.substring("plugins/".length());
>  
>               PluginManager pm = node.pluginManager;
> -             
> +
>               if(Logger.shouldLog(Logger.MINOR, this))
>                       Logger.minor(this, "Pproxy fetching "+path);
>               try {
> @@ -281,18 +362,18 @@
>                                       if(pi.isStopping()) {
>                                               actionCell.addChild("#", 
> l10n("pluginStopping"));
>                                       } else {
> -                                     if (pi.isPproxyPlugin()) {
> -                                             HTMLNode visitForm = 
> actionCell.addChild("form", new String[] 
{ "method", "action", "target" }, new String[] { "get", 
pi.getPluginClassName(), "_new" });
> -                                             visitForm.addChild("input", new 
> String[] { "type", "name", "value" }, 
new String[] { "hidden", "formPassword", core.formPassword });
> -                                             visitForm.addChild("input", new 
> String[] { "type", "value" }, new 
String[] { "submit", L10n.getString("PluginToadlet.visit") });
> +                                             if (pi.isPproxyPlugin()) {
> +                                                     HTMLNode visitForm = 
> actionCell.addChild("form", new String[] 
{ "method", "action", "target" }, new String[] { "get", 
pi.getPluginClassName(), "_new" });
> +                                                     
> visitForm.addChild("input", new String[] 
{ "type", "name", "value" }, new String[] { "hidden", "formPassword", 
core.formPassword });
> +                                                     
> visitForm.addChild("input", new String[] { "type", "value" }, new 
String[] { "submit", L10n.getString("PluginToadlet.visit") });
> +                                             }
> +                                             HTMLNode unloadForm = 
ctx.addFormChild(actionCell, ".", "unloadPluginForm");
> +                                             unloadForm.addChild("input", 
> new String[] 
{ "type", "name", "value" }, new String[] { "hidden", "unload", 
pi.getThreadName() });
> +                                             unloadForm.addChild("input", 
> new String[] { "type", "value" }, new 
String[] { "submit", l10n("unload") });
> +                                             HTMLNode reloadForm = 
ctx.addFormChild(actionCell, ".", "reloadPluginForm");
> +                                             reloadForm.addChild("input", 
> new String[] 
{ "type", "name", "value" }, new String[] { "hidden", "reload", 
pi.getThreadName() });
> +                                             reloadForm.addChild("input", 
> new String[] { "type", "value" }, new 
String[] { "submit", l10n("reload") });
>                                       }
> -                                     HTMLNode unloadForm = 
ctx.addFormChild(actionCell, ".", "unloadPluginForm");
> -                                     unloadForm.addChild("input", new 
> String[] { "type", "name", "value" }, 
new String[] { "hidden", "unload", pi.getThreadName() });
> -                                     unloadForm.addChild("input", new 
> String[] { "type", "value" }, new 
String[] { "submit", l10n("unload") });
> -                                     HTMLNode reloadForm = 
ctx.addFormChild(actionCell, ".", "reloadPluginForm");
> -                                     reloadForm.addChild("input", new 
> String[] { "type", "name", "value" }, 
new String[] { "hidden", "reload", pi.getThreadName() });
> -                                     reloadForm.addChild("input", new 
> String[] { "type", "value" }, new 
String[] { "submit", l10n("reload") });
> -                                     }
>                               }
>                       }
>  
> 
> Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
> ===================================================================
> --- trunk/freenet/src/freenet/pluginmanager/PluginManager.java        
> 2007-09-13 
09:08:18 UTC (rev 15134)
> +++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java        
> 2007-09-13 
11:24:55 UTC (rev 15135)
> @@ -4,13 +4,10 @@
>  package freenet.pluginmanager;
>  
>  import java.io.BufferedReader;
> -import java.io.File;
> -import java.io.FileNotFoundException;
>  import java.io.IOException;
>  import java.io.InputStream;
>  import java.io.InputStreamReader;
>  import java.net.JarURLConnection;
> -import java.net.MalformedURLException;
>  import java.net.URI;
>  import java.net.URL;
>  import java.net.URLClassLoader;
> @@ -34,7 +31,6 @@
>  import freenet.support.URIPreEncoder;
>  import freenet.support.api.HTTPRequest;
>  import freenet.support.api.StringArrCallback;
> -import freenet.support.io.FileUtil;
>  
>  public class PluginManager {
>  
> @@ -68,15 +64,15 @@
>               // Start plugins in the config
>               pmconfig.register("loadplugin", null, 9, true, 
false, "PluginManager.loadedOnStartup", "PluginManager.loadedOnStartupLong",
>                               new StringArrCallback() {
> -                                     public String[] get() {
> -                                             return getConfigLoadString();
> -                                     }
> -                                     public void set(String[] val) throws 
> InvalidConfigValueException {
> -                                             //if(storeDir.equals(new 
> File(val))) return;
> -                                             // FIXME
> -                                             throw new 
InvalidConfigValueException(L10n.getString("PluginManager.cannotSetOnceLoaded"));
> -                                     }
> -                             });
> +                     public String[] get() {
> +                             return getConfigLoadString();
> +                     }
> +                     public void set(String[] val) throws 
> InvalidConfigValueException {
> +                             //if(storeDir.equals(new File(val))) return;
> +                             // FIXME
> +                             throw new 
InvalidConfigValueException(L10n.getString("PluginManager.cannotSetOnceLoaded"));
> +                     }
> +             });
>  
>               String fns[] = pmconfig.getStringArr("loadplugin");
>               if (fns != null) {
> @@ -93,7 +89,7 @@
>                 for (int i = 0 ; i < fns.length ; i++)
>                 System.err.println("Load: " + StringArrOption.decode(fns[i]));
>                 System.err.println("=================================");
> -               */
> +              */
>       }
>  
>       private String[] getConfigLoadString() {
> @@ -135,9 +131,9 @@
>                               System.err.println("Plugin "+filename+" appears 
> to require a later 
JVM");
>                               Logger.error(this, "Plugin "+filename+" appears 
> to require a later 
JVM");
>                               core.alerts.register(new SimpleUserAlert(true, 
> -                                                     
> l10n("pluginReqNewerJVMTitle", "name", filename),
> -                                                     
> l10n("pluginReqNewerJVM", "name", filename),
> -                                                     UserAlert.ERROR));
> +                                             l10n("pluginReqNewerJVMTitle", 
> "name", filename),
> +                                             l10n("pluginReqNewerJVM", 
> "name", filename),
> +                                             UserAlert.ERROR));
>                       }
>               }
>               if(store) core.storeConfig();
> @@ -156,7 +152,7 @@
>                       
> node.ipDetector.registerPortForwardPlugin((FredPluginPortForward) plug);
>               }
>       }
> -     
> +
>       private String l10n(String key, String pattern, String value) {
>               return L10n.getString("PluginManager."+key, pattern, value);
>       }
> @@ -178,7 +174,7 @@
>               }
>               core.storeConfig();
>       }
> -     
> +
>       public void unregisterPluginToadlet(PluginInfoWrapper pi) {
>               synchronized (toadletList) {
>                       try {
> @@ -260,7 +256,7 @@
>               }
>               /*if (handler == null)
>                 return null;
> -               */
> +              */
>  
>               if (handler instanceof FredPluginHTTP)
>                       return ((FredPluginHTTP)handler).handleHTTPGet(request);
> @@ -275,7 +271,7 @@
>               }
>               /*if (handler == null)
>                 return null;
> -               */
> +              */
>  
>               if (handler instanceof FredPluginHTTP)
>                       return 
> ((FredPluginHTTP)handler).handleHTTPPost(request);
> @@ -310,94 +306,19 @@
>        * @throws PluginNotFoundException      If anything goes wrong.
>        */
>       private FredPlugin LoadPlugin(String origFilename)
> -                     throws PluginNotFoundException {
> +     throws PluginNotFoundException {
>               logMINOR = Logger.shouldLog(Logger.MINOR, this);
>               Class cls = null;
>               for (int tries = 0; (tries <= 5) && (cls == null); tries++) {
>                       String filename = origFilename;
> +                     if (filename.endsWith("*")) {
> +                             filename = 
> "*@http://downloads.freenetproject.org/alpha/plugins/";
> +                                             + 
> filename.substring(filename.lastIndexOf(".") + 1,
> +                                                             
> filename.length() - 1) + ".jar.url";
> +                             if (logMINOR)
> +                                     Logger.minor(this, "Rewritten to " + 
> filename);
> +                     }
>                       try {
> -                             if (filename.endsWith("*")) {
> -                                     filename = 
> "*@http://downloads.freenetproject.org/alpha/plugins/";
> -                                                     + 
> filename.substring(filename.lastIndexOf(".") + 1,
> -                                                                     
> filename.length() - 1) + ".jar.url";
> -                                     // System.out.println(filename);
> -                                     if (logMINOR)
> -                                             Logger.minor(this, "Rewritten 
> to " + filename);
> -                             }
> -                             if (filename.endsWith("#")) {
> -                                     if (filename.indexOf('@') > -1) {
> -                                             Logger
> -                                                             .error(this,
> -                                                                             
> "We don't allow downloads from anywhere else but our server");
> -                                             return null;
> -                                     }
> -                                     String pluginname = 
> filename.substring(0,
> -                                                     filename.length() - 1);
> -                                     filename = null;
> -
> -                                     URL url;
> -                                     InputStream is = null;
> -
> -                                     try {
> -                                             url = new URL(
> -                                                             
> "http://downloads.freenetproject.org/alpha/plugins/";
> -                                                                             
> + pluginname + ".jar.url");
> -                                             if (logMINOR)
> -                                                     Logger.minor(this, 
> "Downloading " + url);
> -                                             is = url.openStream();
> -
> -                                             File pluginsDirectory = new 
> File("plugins");
> -                                             if (!pluginsDirectory.exists()) 
> {
> -                                                     Logger
> -                                                                     
> .normal(this,
> -                                                                             
>         "The plugin directory hasn't been found, let's create it");
> -                                                     if 
> (!pluginsDirectory.mkdir())
> -                                                             return null;
> -                                             }
> -
> -                                             File finalFile = new 
> File("plugins/" + pluginname
> -                                                             + ".jar");
> -                                             if (!FileUtil.writeTo(is, 
> finalFile)) {
> -                                                     Logger.error(this,
> -                                                                     "Failed 
> to rename the temporary file into "
> -                                                                             
>         + finalFile);
> -                                                     throw new 
> PluginNotFoundException(
> -                                                                     "Cannot 
> write plugin to "
> -                                                                             
>         + finalFile
> -                                                                             
>         + " from "
> -                                                                             
>         + url
> -                                                                             
>         + " - check for permissions problem and disk full!");
> -                                             }
> -
> -                                             filename = "*@file://"
> -                                                             + 
> FileUtil.getCanonicalFile(finalFile);
> -                                             if (logMINOR)
> -                                                     Logger.minor(this, 
> "Rewritten to " + filename);
> -
> -                                     } catch (MalformedURLException mue) {
> -                                             Logger.error(this,
> -                                                             
> "MalformedURLException has occured : " + mue,
> -                                                             mue);
> -                                             return null;
> -                                     } catch (FileNotFoundException e) {
> -                                             Logger.error(this,
> -                                                             
> "FileNotFoundException has occured : " + e, e);
> -                                             return null;
> -                                     } catch (IOException ioe) {
> -                                             System.out.println("Caught :" + 
> ioe.getMessage());
> -                                             ioe.printStackTrace();
> -                                             return null;
> -                                     } finally {
> -                                             try {
> -                                                     if (is != null)
> -                                                             is.close();
> -                                             } catch (IOException ioe) {
> -                                             }
> -                                     }
> -                                     if (filename == null)
> -                                             return null;
> -                             }
> -
>                               BufferedReader in = null;
>                               InputStream is = null;
>                               if ((filename.indexOf("@") >= 0)) {
> @@ -411,7 +332,7 @@
>                                               String[] parts = 
> filename.split("@");
>                                               if (parts.length != 2) {
>                                                       throw new 
> PluginNotFoundException(
> -                                                                     "Could 
> not split at \"@\".");
> +                                                     "Could not split at 
> \"@\".");
>                                               }
>                                               realClass = parts[0];
>                                               realURL = parts[1];
> @@ -431,8 +352,8 @@
>                                                               if (realURL == 
> null)
>                                                                       throw 
> new PluginNotFoundException(
>                                                                               
>         "Initialization error: "
> -                                                                             
>                         + url
> -                                                                             
>                         + " isn't a plugin loading url!");
> +                                                                             
>         + url
> +                                                                             
>         + " isn't a plugin loading url!");
>                                                               realURL = 
> realURL.trim();
>                                                               if (logMINOR)
>                                                                       
> Logger.minor(this, "Loaded new URL: "
> @@ -458,7 +379,7 @@
>  
>                                                       URL url = new 
> URL("jar:" + realURL + "!/");
>                                                       JarURLConnection 
> jarConnection = (JarURLConnection) url
> -                                                                     
> .openConnection();
> +                                                     .openConnection();
>                                                       // Java seems to cache 
> even file: urls...
>                                                       
> jarConnection.setUseCaches(false);
>                                                       JarFile jf = 
> jarConnection.getJarFile();
> @@ -487,8 +408,8 @@
>                                                                       if 
> (logMINOR)
>                                                                               
> Logger.minor(this,
>                                                                               
>                 "Found plugin main class "
> -                                                                             
>                                 + realClass
> -                                                                             
>                                 + " from manifest");
> +                                                                             
>                 + realClass
> +                                                                             
>                 + " from manifest");
>                                                               }
>                                                       }
>                                                       // 
> System.err.println("Real classname: " +
> @@ -517,7 +438,6 @@
>  
>                               if (cls == null)
>                                       throw new 
> PluginNotFoundException("Unknown error");
> -
>                       } catch (Exception e) {
>                               Logger.normal(this, "Failed to load plugin " + 
> filename + " : "
>                                               + e, e);
> @@ -548,7 +468,7 @@
>  
>               return (FredPlugin) o;
>       }
> -     
> +
>       Ticker getTicker() {
>               return node.getTicker();
>       }
> 
> _______________________________________________
> cvs mailing list
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
> 
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: 
<https://emu.freenetproject.org/pipermail/devl/attachments/20070914/9af0b5bd/attachment.pgp>

Reply via email to