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))