Author: zothar
Date: 2006-07-04 03:26:40 +0000 (Tue, 04 Jul 2006)
New Revision: 9463

Added:
   trunk/freenet/src/freenet/node/fcp/AddPeer.java
Modified:
   trunk/freenet/src/freenet/node/Version.java
   trunk/freenet/src/freenet/node/fcp/FCPMessage.java
Log:
857: Added support for AddPeer client-to-node FCP message.  Needs FCPifying of 
error conditions.

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-07-04 02:16:07 UTC (rev 
9462)
+++ trunk/freenet/src/freenet/node/Version.java 2006-07-04 03:26:40 UTC (rev 
9463)
@@ -18,7 +18,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 856;
+       private static final int buildNumber = 857;

        /** Oldest build of Fred we will talk to */
        private static final int oldLastGoodBuild = 839;

Added: trunk/freenet/src/freenet/node/fcp/AddPeer.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/AddPeer.java     2006-07-04 02:16:07 UTC 
(rev 9462)
+++ trunk/freenet/src/freenet/node/fcp/AddPeer.java     2006-07-04 03:26:40 UTC 
(rev 9463)
@@ -0,0 +1,138 @@
+package freenet.node.fcp;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import freenet.io.comm.PeerParseException;
+import freenet.keys.FreenetURI;
+import freenet.node.FSParseException;
+import freenet.node.Node;
+import freenet.node.PeerNode;
+import freenet.support.Fields;
+import freenet.support.Logger;
+import freenet.support.SimpleFieldSet;
+
+public class AddPeer extends FCPMessage {
+
+       static final String name = "AddPeer";
+       
+       SimpleFieldSet fs;
+       
+       public AddPeer(SimpleFieldSet fs) {
+               this.fs = fs;
+       }
+
+       public SimpleFieldSet getFieldSet() {
+               return new SimpleFieldSet(false);
+       }
+
+       public String getName() {
+               return name;
+       }
+
+       public void run(FCPConnectionHandler handler, Node node) throws 
MessageInvalidException {
+               String urlString = fs.get("URL");
+               String fileString = fs.get("File");
+               String ref = null;
+               BufferedReader in;
+               if(urlString != null) {
+                       try {
+                               URL url = new URL(urlString);
+                               URLConnection uc = url.openConnection();
+                               in = new BufferedReader( new 
InputStreamReader(uc.getInputStream()));
+                               ref = "";
+                               String line;
+                               while((line = in.readLine()) != null) {
+                                       line = line.trim();
+                                       ref += line+"\n";
+                               }
+                               in.close();
+                       } catch (MalformedURLException e) {
+                               // **FIXME** FCPify
+                               System.err.println("Did not parse: "+e);
+                               e.printStackTrace();
+                               return;
+                       } catch (IOException e) {
+                               // **FIXME** FCPify
+                               System.err.println("Did not parse: "+e);
+                               e.printStackTrace();
+                               return;
+                       }
+                       ref = ref.trim();
+                       if(ref == null) return;  // **FIXME** FCPify
+                       if(ref.equals("")) return;  // **FIXME** FCPify
+                       try {
+                               fs = new SimpleFieldSet(ref, true);
+                       } catch (IOException e) {
+                               // **FIXME** FCPify
+                               System.err.println("Did not parse: "+e);
+                               e.printStackTrace();
+                               return;
+                       }
+               } else if(fileString != null) {
+                       File f = new File(fileString);
+                       if(!f.isFile()) {
+                               // **FIXME** FCPify
+                               System.err.println("Not a file: "+fileString);
+                               return;
+                       }
+                       try {
+                               in = new BufferedReader(new FileReader(f));
+                               ref = "";
+                               String line;
+                               while((line = in.readLine()) != null) {
+                                       line = line.trim();
+                                       ref += line+"\n";
+                               }
+                               in.close();
+                       } catch (FileNotFoundException e) {
+                               // **FIXME** FCPify
+                               System.err.println("Did not parse: "+e);
+                               e.printStackTrace();
+                               return;
+                       } catch (IOException e) {
+                               // **FIXME** FCPify
+                               System.err.println("Did not parse: "+e);
+                               e.printStackTrace();
+                               return;
+                       }
+                       ref = ref.trim();
+                       if(ref == null) return;  // **FIXME** FCPify
+                       if(ref.equals("")) return;  // **FIXME** FCPify
+                       try {
+                               fs = new SimpleFieldSet(ref, true);
+                       } catch (IOException e) {
+                               // **FIXME** FCPify
+                               System.err.println("Did not parse: "+e);
+                               e.printStackTrace();
+                               return;
+                       }
+               }
+               PeerNode pn;
+               try {
+                       pn = new PeerNode(fs, node, false);
+               } catch (FSParseException e1) {
+                       // **FIXME** FCPify
+                       System.err.println("Did not parse: "+e1);
+                       Logger.error(this, "Did not parse: "+e1, e1);
+                       return;
+               } catch (PeerParseException e1) {
+                       // **FIXME** FCPify
+                       System.err.println("Did not parse: "+e1);
+                       Logger.error(this, "Did not parse: "+e1, e1);
+                       return;
+               }
+               // **FIXME** Handle duplicates somehow maybe?  What about when 
node.addDarknetConnection() fails for some reason?
+               if(node.addDarknetConnection(pn))
+                       System.out.println("Added peer: "+pn);
+               handler.outputHandler.queue(new Peer(pn, true, true));
+       }
+
+}

Modified: trunk/freenet/src/freenet/node/fcp/FCPMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPMessage.java  2006-07-04 02:16:07 UTC 
(rev 9462)
+++ trunk/freenet/src/freenet/node/fcp/FCPMessage.java  2006-07-04 03:26:40 UTC 
(rev 9463)
@@ -30,6 +30,8 @@
         * 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 {
+               if(name.equals(AddPeer.name))
+                       return new AddPeer(fs);
                if(name.equals(ClientGetMessage.name))
                        return new ClientGetMessage(fs);
                if(name.equals(ClientHelloMessage.name))


Reply via email to