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()));
