[freenet-cvs] r15800 - in trunk/freenet/src/freenet: node/fcp pluginmanager
Matthew Toseland
toad at amphibian.dyndns.org
Sat Nov 17 22:04:37 UTC 2007
If you're going to include filename you should include the URI it was fetched
from and whether it will be auto-refreshed. Are there corresponding commands
to list plugins? Also eventually we may have multiple plugins of the same
class - is there anything we can do to prepare for this?
On Saturday 17 November 2007 21:06, saces at freenetproject.org wrote:
> Author: saces
> Date: 2007-11-17 21:06:14 +0000 (Sat, 17 Nov 2007)
> New Revision: 15800
>
> Added:
> trunk/freenet/src/freenet/node/fcp/GetPluginInfo.java
> trunk/freenet/src/freenet/node/fcp/PluginInfoMessage.java
> Modified:
> trunk/freenet/src/freenet/node/fcp/FCPMessage.java
> trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java
> trunk/freenet/src/freenet/pluginmanager/PluginManager.java
> Log:
> new fcp command to ask for the presence of a plugin (GetPluginInfo)
>
> Modified: trunk/freenet/src/freenet/node/fcp/FCPMessage.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/fcp/FCPMessage.java 2007-11-17 12:29:18
UTC (rev 15799)
> +++ trunk/freenet/src/freenet/node/fcp/FCPMessage.java 2007-11-17 21:06:14
UTC (rev 15800)
> @@ -55,6 +55,8 @@
> return new GetConfig(fs);
> if(name.equals(GetNode.NAME))
> return new GetNode(fs);
> + if(name.equals(GetPluginInfo.NAME))
> + return new GetPluginInfo(fs);
> if(name.equals(GetRequestStatusMessage.NAME))
> return new GetRequestStatusMessage(fs);
> if(name.equals(ListPeerMessage.NAME))
>
> Added: trunk/freenet/src/freenet/node/fcp/GetPluginInfo.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/fcp/GetPluginInfo.java
(rev 0)
> +++ trunk/freenet/src/freenet/node/fcp/GetPluginInfo.java 2007-11-17
21:06:14 UTC (rev 15800)
> @@ -0,0 +1,50 @@
> +/* This code is part of Freenet. It is distributed under the GNU General
> + * Public License, version 2 (or at your option any later version). See
> + * http://www.gnu.org/ for further details of the GPL. */
> +package freenet.node.fcp;
> +
> +import freenet.node.Node;
> +import freenet.pluginmanager.PluginInfoWrapper;
> +import freenet.pluginmanager.PluginManager;
> +import freenet.support.Fields;
> +import freenet.support.SimpleFieldSet;
> +
> +public class GetPluginInfo extends FCPMessage {
> +
> + static final String NAME = "GetPluginInfo";
> +
> + private final String identifier;
> + private final boolean detailed;
> + private final String plugname;
> +
> + public GetPluginInfo(SimpleFieldSet fs) throws MessageInvalidException {
> + identifier = fs.get("Identifier"); // optional
> + detailed = Fields.stringToBool(fs.get("Detailed"), false);
> + plugname = fs.get("PluginName");
> + if(plugname == null)
> + throw new
MessageInvalidException(ProtocolErrorMessage.MISSING_FIELD, "GetPluginInfo
must contain a PluginName field", null, false);
> + }
> +
> + public SimpleFieldSet getFieldSet() {
> + return new SimpleFieldSet(true);
> + }
> +
> + public String getName() {
> + return NAME;
> + }
> +
> + public void run(FCPConnectionHandler handler, Node node)
> + throws MessageInvalidException {
> + if(!handler.hasFullAccess()) {
> + throw new
MessageInvalidException(ProtocolErrorMessage.ACCESS_DENIED, "GetPluginInfo
requires full access", identifier, false);
> + }
> +
> + PluginInfoWrapper pi = node.pluginManager.getPluginInfo(plugname);
> + if (pi == null) {
> + handler.outputHandler.queue(new
ProtocolErrorMessage(ProtocolErrorMessage.NO_SUCH_PLUGIN, false, "Plugin '"+
plugname + "' does not exist", identifier, false));
> + } else {
> + handler.outputHandler.queue(new PluginInfoMessage(pi, identifier,
detailed));
> + }
> + }
> +
> +}
>
> Added: trunk/freenet/src/freenet/node/fcp/PluginInfoMessage.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/fcp/PluginInfoMessage.java
(rev 0)
> +++ trunk/freenet/src/freenet/node/fcp/PluginInfoMessage.java 2007-11-17
21:06:14 UTC (rev 15800)
> @@ -0,0 +1,62 @@
> +/* This code is part of Freenet. It is distributed under the GNU General
> + * Public License, version 2 (or at your option any later version). See
> + * http://www.gnu.org/ for further details of the GPL. */
> +package freenet.node.fcp;
> +
> +import freenet.node.Node;
> +import freenet.pluginmanager.PluginInfoWrapper;
> +import freenet.support.SimpleFieldSet;
> +
> +/**
> + * @author saces
> + *
> + */
> +public class PluginInfoMessage extends FCPMessage {
> +
> + static final String NAME = "PluginInfo";
> +
> + private final String identifier;
> +
> + private final boolean detailed;
> +
> + private final String classname;
> + private final String filename;
> +
> + private final boolean isHTTP;
> + private final boolean isFCP;
> +
> + PluginInfoMessage(PluginInfoWrapper pi, String identifier, boolean detail)
{
> + this.identifier = identifier;
> + this.detailed = detail;
> +
> + classname = pi.getPluginClassName();
> + filename = pi.getFilename();
> +
> + isHTTP = pi.isPproxyPlugin();
> + isFCP = pi.isFCPPlugin();
> + }
> +
> + public SimpleFieldSet getFieldSet() {
> + SimpleFieldSet sfs = new SimpleFieldSet(true);
> + if(identifier != null) // is optional on these two only
> + sfs.putSingle("Identifier", identifier);
> + sfs.putSingle("PluginName", classname);
> +
> + if (detailed) {
> + sfs.putSingle("FileName", filename);
> +
> + sfs.put("IsHTTPPlugin", isHTTP);
> + sfs.put("IsFCPPlugin", isFCP);
> + }
> + return sfs;
> + }
> +
> + public String getName() {
> + return NAME;
> + }
> +
> + public void run(FCPConnectionHandler handler, Node node) throws
MessageInvalidException {
> + throw new MessageInvalidException(ProtocolErrorMessage.INVALID_MESSAGE,
NAME + " goes from server to client not the other way around", null, false);
> + }
> +
> +}
>
> Modified: trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java 2007-11-17
12:29:18 UTC (rev 15799)
> +++ trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java 2007-11-17
21:06:14 UTC (rev 15800)
> @@ -53,6 +53,7 @@
> static final int DUPLICATE_PEER_REF = 29;
> static final int OPENNET_DISABLED = 30;
> static final int DARKNET_ONLY = 31;
> + static final int NO_SUCH_PLUGIN = 32;
>
> final int code;
> final String extra;
> @@ -124,6 +125,8 @@
> return "Opennet is currently disabled in the node's configuration";
> case DARKNET_ONLY:
> return "Operation only available on a darknet peer";
> + case NO_SUCH_PLUGIN:
> + return "No such plugin";
> default:
> Logger.error(this, "Unknown error code: "+code, new Exception("debug"));
> return "(Unknown)";
>
> Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
> ===================================================================
> --- trunk/freenet/src/freenet/pluginmanager/PluginManager.java 2007-11-17
12:29:18 UTC (rev 15799)
> +++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java 2007-11-17
21:06:14 UTC (rev 15800)
> @@ -346,6 +346,22 @@
> }
>
> /**
> + * look for PluginInfo for a Plugin with given classname
> + * @param plugname
> + * @return the PluginInfo or null if not found
> + */
> + public PluginInfoWrapper getPluginInfo(String plugname) {
> + synchronized (pluginWrappers) {
> + for(int i=0;i<pluginWrappers.size();i++) {
> + PluginInfoWrapper pi = (PluginInfoWrapper) pluginWrappers.get(i);
> + if (pi.getPluginClassName().equals(plugname))
> + return pi;
> + }
> + }
> + return null;
> + }
> +
> + /**
> * look for a FCPPlugin with given classname
> * @param plugname
> * @return the plugin or null if not found
>
> _______________________________________________
> 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 : http://emu.freenetproject.org/pipermail/cvs/attachments/20071117/f88c00a6/attachment.pgp
More information about the cvs
mailing list