[freenet-cvs] r15798 - in trunk/freenet/src/freenet: node/fcp pluginmanager

saces at freenetproject.org saces at freenetproject.org
Sat Nov 17 12:27:58 UTC 2007


Author: saces
Date: 2007-11-17 12:27:57 +0000 (Sat, 17 Nov 2007)
New Revision: 15798

Modified:
   trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
   trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java
   trunk/freenet/src/freenet/node/fcp/FCPMessage.java
   trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java
   trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
   trunk/freenet/src/freenet/pluginmanager/PluginManager.java
Log:
initial plugin-fcp implementation

Modified: trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java	2007-11-17 12:27:06 UTC (rev 15797)
+++ trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java	2007-11-17 12:27:57 UTC (rev 15798)
@@ -54,7 +54,7 @@
 	final FCPServer server;
 	final Socket sock;
 	final FCPConnectionInputHandler inputHandler;
-	final FCPConnectionOutputHandler outputHandler;
+	public final FCPConnectionOutputHandler outputHandler;
 	private boolean isClosed;
 	private boolean inputClosed;
 	private boolean outputClosed;

Modified: trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java	2007-11-17 12:27:06 UTC (rev 15797)
+++ trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java	2007-11-17 12:27:57 UTC (rev 15798)
@@ -82,7 +82,7 @@
 			try {
 				if(Logger.shouldLog(Logger.DEBUG, this))
 					Logger.debug(this, "Incoming FCP message:\n"+messageType+'\n'+fs.toString());
-				msg = FCPMessage.create(messageType, fs, handler.bf, handler.server.core.persistentTempBucketFactory);
+				msg = FCPMessage.create(messageType, fs, handler.bf, handler.server.core.persistentTempBucketFactory, handler.server.node.pluginManager);
 				if(msg == null) continue;
 			} catch (MessageInvalidException e) {
 				if(firstMessage) {

Modified: trunk/freenet/src/freenet/node/fcp/FCPMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPMessage.java	2007-11-17 12:27:06 UTC (rev 15797)
+++ trunk/freenet/src/freenet/node/fcp/FCPMessage.java	2007-11-17 12:27:57 UTC (rev 15798)
@@ -4,6 +4,8 @@
 import java.io.OutputStream;
 
 import freenet.node.Node;
+import freenet.pluginmanager.FredPluginFCP;
+import freenet.pluginmanager.PluginManager;
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
 import freenet.support.api.BucketFactory;
@@ -34,7 +36,7 @@
 	/**
 	 * Create a message from a SimpleFieldSet, and the message's name, if possible. 
 	 */
-	public static FCPMessage create(String name, SimpleFieldSet fs, BucketFactory bfTemp, PersistentTempBucketFactory bfPersistent) throws MessageInvalidException {
+	public static FCPMessage create(String name, SimpleFieldSet fs, BucketFactory bfTemp, PersistentTempBucketFactory bfPersistent, PluginManager pluginmanager) throws MessageInvalidException {
 		if(name.equals(AddPeer.NAME))
 			return new AddPeer(fs);
 		if(name.equals(ClientGetMessage.NAME))
@@ -87,6 +89,28 @@
 			return new WatchGlobal(fs);
 		if(name.equals("Void"))
 			return null;
+		// We reached here? Must be a plugin. find it
+		
+		// plugins.HelloFCP.HelloFCP.Ping
+		// split at last point
+		int lp = name.lastIndexOf('.'); 
+		if (lp > 2) {
+			String plugname = name.substring(0, lp);
+			String plugcmd = name.substring(lp+1);
+			
+			System.err.println("plugname: " + plugname);
+			System.err.println("plugcmd: " + plugcmd);
+		
+			FredPluginFCP plug = pluginmanager.getFCPPlugin(plugname);
+			if (plug != null) {
+				System.err.println("plug found: " + plugname);
+				FCPMessage msg = plug.create(plugcmd, fs);
+				if (msg != null) {
+					System.err.println("plug cmd seems valid: " + plugcmd);
+					return msg;
+				}
+			}
+		}
 		throw new MessageInvalidException(ProtocolErrorMessage.INVALID_MESSAGE, "Unknown message name "+name, null, false);
 	}
 	
@@ -95,7 +119,7 @@
 	 * Usefull for FCPClients
 	 */
 	public static FCPMessage create(String name, SimpleFieldSet fs) throws MessageInvalidException {
-		return FCPMessage.create(name, fs, null, null);
+		return FCPMessage.create(name, fs, null, null, null);
 	}
 
 	/** Do whatever it is that we do with this type of message. 

Modified: trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java	2007-11-17 12:27:06 UTC (rev 15797)
+++ trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java	2007-11-17 12:27:57 UTC (rev 15798)
@@ -28,7 +28,7 @@
 	static final int FREENET_URI_PARSE_ERROR = 4;
 	static final int MISSING_FIELD = 5;
 	static final int ERROR_PARSING_NUMBER = 6;
-	static final int INVALID_MESSAGE = 7;
+	public static final int INVALID_MESSAGE = 7;
 	static final int INVALID_FIELD = 8;
 	static final int FILE_NOT_FOUND = 9;
 	static final int DISK_TARGET_EXISTS = 10;

Modified: trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java	2007-11-17 12:27:06 UTC (rev 15797)
+++ trunk/freenet/src/freenet/pluginmanager/PluginInfoWrapper.java	2007-11-17 12:27:57 UTC (rev 15798)
@@ -20,6 +20,7 @@
 	private boolean isIPDetectorPlugin;
 	private boolean isPortForwardPlugin;
 	private boolean isMultiplePlugin;
+	private boolean isFCPPlugin;
 	private String filename;
 	private HashSet toadletLinks=new HashSet();
 	private boolean stopping = false;
@@ -39,6 +40,7 @@
 		isIPDetectorPlugin = (plug instanceof FredPluginIPDetector);
 		isPortForwardPlugin = (plug instanceof FredPluginPortForward);
 		isMultiplePlugin = (plug instanceof FredPluginMultiple);
+		isFCPPlugin = (plug instanceof FredPluginFCP);
 	}
 
 	void setThread(Thread ps) {
@@ -156,6 +158,10 @@
 	public boolean isMultiplePlugin() {
 		return isMultiplePlugin;
 	}
+	
+	public boolean isFCPPlugin() {
+		return isFCPPlugin;
+	}
 
 	public synchronized boolean isStopping() {
 		return stopping;

Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java	2007-11-17 12:27:06 UTC (rev 15797)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java	2007-11-17 12:27:57 UTC (rev 15798)
@@ -344,6 +344,22 @@
 		}
 		return out;
 	}
+	
+	/**
+	 * look for a FCPPlugin with given classname
+	 * @param plugname
+	 * @return the plugin or null if not found
+	 */
+	public FredPluginFCP getFCPPlugin(String plugname) {
+		synchronized (pluginWrappers) {
+			for(int i=0;i<pluginWrappers.size();i++) {
+				PluginInfoWrapper pi = (PluginInfoWrapper) pluginWrappers.get(i);
+				if (pi.isFCPPlugin() && pi.getPluginClassName().equals(plugname))
+					return (FredPluginFCP) pi.plug;
+			}
+		}
+		return null;
+	}
 
 	public String handleHTTPGet(String plugin, HTTPRequest request) throws PluginHTTPException {
 		FredPlugin handler = null;




More information about the cvs mailing list