[freenet-dev] [freenet-cvs] r15857 - in trunk/freenet/src/freenet: node/fcp pluginmanager
Matthew Toseland
toad at amphibian.dyndns.org
Mon Nov 19 23:30:37 UTC 2007
Why not keep the <class name>.<command name> syntax?
On Monday 19 November 2007 21:46, you wrote:
> Author: saces
> Date: 2007-11-19 21:46:50 +0000 (Mon, 19 Nov 2007)
> New Revision: 15857
>
> Added:
> trunk/freenet/src/freenet/node/fcp/FCPPluginMessage.java
> trunk/freenet/src/freenet/node/fcp/FCPPluginReply.java
> trunk/freenet/src/freenet/pluginmanager/FCPPluginOutputWrapper.java
> Log:
> new file for the rewritten fcp plugin interface
>
> Added: trunk/freenet/src/freenet/node/fcp/FCPPluginMessage.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/fcp/FCPPluginMessage.java
(rev 0)
> +++ trunk/freenet/src/freenet/node/fcp/FCPPluginMessage.java 2007-11-19
21:46:50 UTC (rev 15857)
> @@ -0,0 +1,120 @@
> +/* 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.FCPPluginOutputWrapper;
> +import freenet.pluginmanager.FredPluginFCP;
> +import freenet.support.Logger;
> +import freenet.support.SimpleFieldSet;
> +import freenet.support.api.Bucket;
> +
> +/**
> + * @author saces
> + *
> + * FCPPluginMessage
> + * Identifer=me
> + * PluginName=plugins.HelloFCP (or plugins.HelloFCP.HelloFCP?)
> + * Param.Itemname1=value1
> + * Param.Itemname2=value2
> + * ...
> + *
> + * EndMessage
> + * or
> + * DataLength=datasize
> + * Data
> + * <datasize> bytes of data
> + *
> + */
> +public class FCPPluginMessage extends DataCarryingMessage {
> +
> + public static final String NAME = "FCPPluginMessage";
> +
> + public static final String PARAM_PREFIX = "Param";
> +
> + private final String identifier;
> + private final String pluginname;
> +
> + private final long dataLength;
> +
> + private final SimpleFieldSet plugparams;
> +
> + FCPPluginMessage(SimpleFieldSet fs) throws MessageInvalidException {
> + identifier = fs.get("Identifier");
> + if(identifier == null)
> + throw new
MessageInvalidException(ProtocolErrorMessage.MISSING_FIELD, "FCPPluginMessage
must contain a Identifier field", null, false);
> + pluginname = fs.get("PluginName");
> + if(pluginname == null)
> + throw new
MessageInvalidException(ProtocolErrorMessage.MISSING_FIELD, "FCPPluginMessage
must contain a PluginName field", null, false);
> +
> + boolean havedata = "Data".equals(fs.getEndMarker());
> +
> + String dataLengthString = fs.get("DataLength");
> +
> + if(!havedata && (dataLengthString != null))
> + throw new MessageInvalidException(ProtocolErrorMessage.INVALID_FIELD, "A
nondata message can't have a DataLength field", identifier, false);
> +
> + if(havedata) {
> + if (dataLengthString == null)
> + throw new
MessageInvalidException(ProtocolErrorMessage.MISSING_FIELD, "Need DataLength
on a Datamessage", identifier, false);
> +
> + try {
> + dataLength = Long.parseLong(dataLengthString, 10);
> + } catch (NumberFormatException e) {
> + throw new
MessageInvalidException(ProtocolErrorMessage.ERROR_PARSING_NUMBER, "Error
parsing DataLength field: "+e.getMessage(), identifier, false);
> + }
> + } else {
> + dataLength = -1;
> + }
> +
> + plugparams = fs.subset(PARAM_PREFIX);
> + }
> +
> + String getIdentifier() {
> + return identifier;
> + }
> +
> + boolean isGlobal() {
> + return false;
> + }
> +
> + long dataLength() {
> + return dataLength;
> + }
> +
> + public SimpleFieldSet getFieldSet() {
> + return null;
> + }
> +
> + public String getName() {
> + return NAME;
> + }
> +
> + public void run(final FCPConnectionHandler handler, final Node node)
throws MessageInvalidException {
> +
> + final Bucket data2 = this.bucket;
> + final FCPPluginOutputWrapper replysender = new
FCPPluginOutputWrapper(handler, pluginname, identifier);
> + node.executor.execute(new Runnable() {
> +
> + public void run() {
> + Logger.normal(this, "Searching fcp plugin: " + pluginname);
> + FredPluginFCP plug = node.pluginManager.getFCPPlugin(pluginname);
> + if (plug == null) {
> + Logger.error(this, "Could not find fcp plugin: " + pluginname);
> + return;
> + }
> + Logger.normal(this, "Found fcp plugin: " + pluginname);
> +
> + try {
> + plug.handle(replysender, plugparams, data2, handler.hasFullAccess());
> + } catch (Throwable t) {
> + Logger.error(this, "Cought error while execute fcp plugin handler" +
t.getMessage(), t);
> + }
> +
> + }
> + }, "FCPPlugin runner for " + pluginname);
> +
> + }
> +
> +}
>
> Added: trunk/freenet/src/freenet/node/fcp/FCPPluginReply.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/fcp/FCPPluginReply.java
(rev 0)
> +++ trunk/freenet/src/freenet/node/fcp/FCPPluginReply.java 2007-11-19
21:46:50 UTC (rev 15857)
> @@ -0,0 +1,64 @@
> +/* 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.support.SimpleFieldSet;
> +
> +/**
> + * @author saces
> + *
> + */
> +public class FCPPluginReply extends DataCarryingMessage {
> +
> + private static final String NAME = "FCPPluginReply";
> +
> + public static final String PARAM_PREFIX = "Param";
> +
> + private final String plugname;
> + private final String identifier;
> + private final SimpleFieldSet plugparams;
> +
> + public FCPPluginReply(String pluginname, String identifier2,
SimpleFieldSet fs) {
> + plugname = pluginname;
> + identifier = identifier2;
> + plugparams = fs;
> + }
> +
> + String getIdentifier() {
> + return identifier;
> + }
> +
> + boolean isGlobal() {
> + return false;
> + }
> +
> + long dataLength() {
> + return -1;
> + }
> +
> + String getEndString() {
> + if (dataLength() > 0)
> + return "Data";
> + else
> + return "EndMessage";
> + }
> +
> + public SimpleFieldSet getFieldSet() {
> + SimpleFieldSet sfs = new SimpleFieldSet(true);
> + sfs.putSingle("PluginName", plugname);
> + sfs.putSingle("Identifier", identifier);
> + sfs.put("Replies", plugparams);
> + 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);
> + }
> +
> +}
>
> Added: trunk/freenet/src/freenet/pluginmanager/FCPPluginOutputWrapper.java
> ===================================================================
> --- trunk/freenet/src/freenet/pluginmanager/FCPPluginOutputWrapper.java
(rev 0)
> +++ trunk/freenet/src/freenet/pluginmanager/FCPPluginOutputWrapper.java
2007-11-19 21:46:50 UTC (rev 15857)
> @@ -0,0 +1,43 @@
> +/* 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.pluginmanager;
> +
> +import freenet.node.fcp.FCPConnectionHandler;
> +import freenet.node.fcp.FCPPluginReply;
> +import freenet.support.SimpleFieldSet;
> +import freenet.support.api.Bucket;
> +
> +/**
> + * @author saces
> + *
> + */
> +public class FCPPluginOutputWrapper {
> +
> + private final String identifier;
> + private final String plugname;
> + private final FCPConnectionHandler handler;
> +
> +
> + public FCPPluginOutputWrapper(FCPConnectionHandler handler2, String
pluginname, String identifier2) {
> + identifier = identifier2;
> + plugname = pluginname;
> + handler = handler2;
> + }
> +
> + public void send(SimpleFieldSet params) {
> + FCPPluginReply reply = new FCPPluginReply(plugname, identifier, params);
> + handler.outputHandler.queue(reply);
> + }
> +
> + public void send(SimpleFieldSet params, byte[] data) {
> + FCPPluginReply reply = new FCPPluginReply(plugname, identifier, params);
> + handler.outputHandler.queue(reply);
> + }
> +
> + public void send(SimpleFieldSet params, Bucket data) {
> + FCPPluginReply reply = new FCPPluginReply(plugname, identifier, params);
> + handler.outputHandler.queue(reply);
> + }
> +
> +}
>
> _______________________________________________
> 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/devl/attachments/20071119/5cc4063b/attachment.pgp
More information about the Devl
mailing list