Author: cyberdo
Date: 2006-02-23 19:50:42 +0000 (Thu, 23 Feb 2006)
New Revision: 8132

Modified:
   trunk/freenet/src/freenet/node/TextModeClientInterface.java
   trunk/freenet/src/freenet/node/Version.java
   trunk/freenet/src/freenet/pluginmanager/PluginManager.java
   trunk/freenet/src/freenet/pluginmanager/PproxyToadlet.java
Log:
477:
PLUGLOAD now handles an asterisk as pluginpkg/name. This will read the data 
from the manifest in the jarfile.
ex.: PLUGLOAD: 
*@http://downloads.freenetproject.org/alpha/plugins/TestGallery.jar.url


Modified: trunk/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterface.java 2006-02-23 
14:36:05 UTC (rev 8131)
+++ trunk/freenet/src/freenet/node/TextModeClientInterface.java 2006-02-23 
19:50:42 UTC (rev 8132)
@@ -512,9 +512,10 @@

         } else if(uline.startsWith("PLUGLOAD:")) {
                if (line.substring("PLUGLOAD:".length()).trim().equals("?")) {
-                       System.out.println("  PLUGLOAD: pkg.Class               
         - Load plugin from current classpath");                        
-                       System.out.println("  PLUGLOAD: pkg.Class at 
file:<filename>        - Load plugin from file");
-                       System.out.println("  PLUGLOAD: pkg.Class at http://... 
            - Load plugin from online file");
+                       System.out.println("  PLUGLOAD: pkg.Class               
   - Load plugin from current classpath");                      
+                       System.out.println("  PLUGLOAD: pkg.Class at 
file:<filename>  - Load plugin from file");
+                       System.out.println("  PLUGLOAD: pkg.Class at http://... 
      - Load plugin from online file");
+                       System.out.println("  PLUGLOAD:         *@...           
   - Load plugin from manifest in given jarfile");
                        System.out.println("");
                        System.out.println("If the filename/url ends with 
\".url\", it" +
                                        " is treated as a link, meaning that 
the first line is" +

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-02-23 14:36:05 UTC (rev 
8131)
+++ trunk/freenet/src/freenet/node/Version.java 2006-02-23 19:50:42 UTC (rev 
8132)
@@ -20,7 +20,7 @@
        public static final String protocolVersion = "1.0";

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

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

Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2006-02-23 
14:36:05 UTC (rev 8131)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2006-02-23 
19:50:42 UTC (rev 8132)
@@ -1,15 +1,32 @@
 package freenet.pluginmanager;

 import java.io.BufferedReader;
+import java.io.File;
+import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.net.JarURLConnection;
+import java.net.URI;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.net.URLConnection;
 import java.util.Date;
+import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.jar.Attributes;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;

+import sun.net.www.protocol.jar.URLJarFile;
+
 import freenet.client.HighLevelSimpleClient;
+import freenet.support.Bucket;
+import freenet.support.BucketFactory;
+import freenet.support.BucketTools;
+import freenet.support.Buffer;
+import freenet.support.BucketTools.BucketFactoryWrapper;

 public class PluginManager {

@@ -182,7 +199,42 @@
                // Load the class inside file
                URL[] serverURLs = new URL[]{new URL(realURL)};
                ClassLoader cl = new URLClassLoader(serverURLs);
+               
+         
+               // Handle automatic fetching of pluginclassname
+               if (realClass.equals("*")) {
+                       if (realURL.startsWith("file:")) {
+                               URI liburi = new 
File(realURL.substring("file:".length())).toURI();
+                               realURL = liburi.toString();
+                       }
+                       
+                       URL url = new URL("jar:"+realURL+"!/");
+                       JarURLConnection jarConnection = 
(JarURLConnection)url.openConnection();
+                       JarFile jf = jarConnection.getJarFile();
+                       //URLJarFile jf = new URLJarFile(new File(liburi));
+                       //is = 
jf.getInputStream(jf.getJarEntry("META-INF/MANIFEST.MF"));
+                       
+                       //BufferedReader manifest = new BufferedReader(new 
InputStreamReader(cl.getResourceAsStream("/META-INF/MANIFEST.MF")));
+                       
+                       //URL url = new URL(parts[1]);
+                    //URLConnection uc = 
cl.getResource("/META-INF/MANIFEST.MF").openConnection();
+                       
+                       InputStream is = 
jf.getInputStream(jf.getJarEntry("META-INF/MANIFEST.MF"));
+                       BufferedReader in = new BufferedReader(new 
InputStreamReader(is));      
+                       String line;
+                       while ((line = in.readLine())!=null) {
+                               //      System.err.println(line + "\t\t\t" + 
realClass);
+                               if (line.startsWith("Plugin-Main-Class: ")) {
+                                       realClass = 
line.substring("Plugin-Main-Class: ".length()).trim();
+                               }
+                       }
+                       //System.err.println("Real classname: " + realClass);
+               }
+               
+                               
+               
                cls = cl.loadClass(realClass);
+               
             } catch (Exception e) {
                throw new PluginNotFoundException("Initialization error:"
                                + filename, e);

Modified: trunk/freenet/src/freenet/pluginmanager/PproxyToadlet.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PproxyToadlet.java  2006-02-23 
14:36:05 UTC (rev 8131)
+++ trunk/freenet/src/freenet/pluginmanager/PproxyToadlet.java  2006-02-23 
19:50:42 UTC (rev 8132)
@@ -62,8 +62,8 @@
                                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";
+                               ret += "<form method=\"GET\">Remove plugin: 
(enter ID) <input type=text name=\"remove\" size=40/><input type=submit 
value=\"Remove\"/></form>\n";
+                               ret += "<form method=\"GET\">Load plugin: 
<input type=text name=\"load\" size=40/><input type=submit value=\"Load\" 
/></form>\n";
                                writeReply(ctx, 200, "text/html", "OK", 
mkPage("Plugin list", ret));
                        } else if (ks.startsWith("?remove=")) {
                                
pm.killPlugin(ks.substring("?remove=".length()));


Reply via email to