[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