Author: zothar
Date: 2006-11-12 20:23:42 +0000 (Sun, 12 Nov 2006)
New Revision: 10905

Added:
   trunk/freenet/src/freenet/node/fcp/EndListPeerNotesMessage.java
   trunk/freenet/src/freenet/node/fcp/ListPeerNotesMessage.java
   trunk/freenet/src/freenet/node/fcp/ModifyPeerNote.java
   trunk/freenet/src/freenet/node/fcp/PeerNote.java
   trunk/freenet/src/freenet/node/fcp/UnknownPeerNoteTypeMessage.java
Modified:
   trunk/freenet/src/freenet/node/fcp/FCPMessage.java
Log:
Add FCP access to peer private notes, hopefully generic enough to be extended 
to all peer notes in the future; docs on wiki shortly.

Added: trunk/freenet/src/freenet/node/fcp/EndListPeerNotesMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/EndListPeerNotesMessage.java     
2006-11-12 19:17:45 UTC (rev 10904)
+++ trunk/freenet/src/freenet/node/fcp/EndListPeerNotesMessage.java     
2006-11-12 20:23:42 UTC (rev 10905)
@@ -0,0 +1,33 @@
+/* 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;
+
+public class EndListPeerNotesMessage extends FCPMessage {
+
+       final String nodeIdentifier;
+       static final String name = "EndListPeerNotes";
+       
+       public EndListPeerNotesMessage(String id) {
+               this.nodeIdentifier = id;
+       }
+       
+       public SimpleFieldSet getFieldSet() {
+               SimpleFieldSet sfs = new SimpleFieldSet();
+               sfs.put("NodeIdentifier", nodeIdentifier);
+               return sfs;
+       }
+
+       public String getName() {
+               return name;
+       }
+
+       public void run(FCPConnectionHandler handler, Node node)
+                       throws MessageInvalidException {
+               throw new 
MessageInvalidException(ProtocolErrorMessage.INVALID_MESSAGE, "EndListPeerNotes 
goes from server to client not the other way around", null);
+       }
+
+}

Modified: trunk/freenet/src/freenet/node/fcp/FCPMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPMessage.java  2006-11-12 19:17:45 UTC 
(rev 10904)
+++ trunk/freenet/src/freenet/node/fcp/FCPMessage.java  2006-11-12 20:23:42 UTC 
(rev 10905)
@@ -52,12 +52,16 @@
                        return new GetRequestStatusMessage(fs);
                if(name.equals(ListPeersMessage.name))
                        return new ListPeersMessage(fs);
+               if(name.equals(ListPeerNotesMessage.name))
+                       return new ListPeerNotesMessage(fs);
                if(name.equals(ListPersistentRequestsMessage.name))
                        return new ListPersistentRequestsMessage(fs);
                if(name.equals(ModifyConfig.name))
                        return new ModifyConfig(fs);
                if(name.equals(ModifyPeer.name))
                        return new ModifyPeer(fs);
+               if(name.equals(ModifyPeerNote.name))
+                       return new ModifyPeerNote(fs);
                if(name.equals(ModifyPersistentRequest.name))
                        return new ModifyPersistentRequest(fs);
                if(name.equals(RemovePeer.name))

Added: trunk/freenet/src/freenet/node/fcp/ListPeerNotesMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ListPeerNotesMessage.java        
2006-11-12 19:17:45 UTC (rev 10904)
+++ trunk/freenet/src/freenet/node/fcp/ListPeerNotesMessage.java        
2006-11-12 20:23:42 UTC (rev 10905)
@@ -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.node.fcp;
+
+import freenet.node.Node;
+import freenet.node.PeerNode;
+import freenet.support.Fields;
+import freenet.support.SimpleFieldSet;
+
+public class ListPeerNotesMessage extends FCPMessage {
+
+       static final String name = "ListPeerNotes";
+       final SimpleFieldSet fs;
+       
+       public ListPeerNotesMessage(SimpleFieldSet fs) {
+               this.fs = fs;
+       }
+       
+       public SimpleFieldSet getFieldSet() {
+               return new SimpleFieldSet();
+       }
+       
+       public String getName() {
+               return name;
+       }
+       
+       public void run(FCPConnectionHandler handler, Node node)
+                       throws MessageInvalidException {
+               String nodeIdentifier = fs.get("NodeIdentifier");
+               PeerNode pn = node.getPeerNode(nodeIdentifier);
+               if(pn == null) {
+                       FCPMessage msg = new 
UnknownNodeIdentifierMessage(nodeIdentifier);
+                       handler.outputHandler.queue(msg);
+                       return;
+               }
+               // **FIXME** this should be generalized for multiple peer notes 
per peer, after PeerNode is similarly generalized
+               String noteText = pn.getPrivateDarknetCommentNote();
+               handler.outputHandler.queue(new PeerNote(nodeIdentifier, 
noteText, Node.PEER_NOTE_TYPE_PRIVATE_DARKNET_COMMENT));
+               handler.outputHandler.queue(new 
EndListPeerNotesMessage(nodeIdentifier));
+       }
+       
+}

Added: trunk/freenet/src/freenet/node/fcp/ModifyPeerNote.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ModifyPeerNote.java      2006-11-12 
19:17:45 UTC (rev 10904)
+++ trunk/freenet/src/freenet/node/fcp/ModifyPeerNote.java      2006-11-12 
20:23:42 UTC (rev 10905)
@@ -0,0 +1,66 @@
+/* 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.FSParseException;
+import freenet.node.Node;
+import freenet.node.PeerNode;
+import freenet.support.Base64;
+import freenet.support.Fields;
+import freenet.support.IllegalBase64Exception;
+import freenet.support.Logger;
+import freenet.support.SimpleFieldSet;
+
+public class ModifyPeerNote extends FCPMessage {
+
+       static final String name = "ModifyPeerNote";
+       
+       final SimpleFieldSet fs;
+       
+       public ModifyPeerNote(SimpleFieldSet fs) {
+               this.fs = fs;
+       }
+
+       public SimpleFieldSet getFieldSet() {
+               return new SimpleFieldSet();
+       }
+
+       public String getName() {
+               return name;
+       }
+
+       public void run(FCPConnectionHandler handler, Node node) throws 
MessageInvalidException {
+               String nodeIdentifier = fs.get("NodeIdentifier");
+               PeerNode pn = node.getPeerNode(nodeIdentifier);
+               if(pn == null) {
+                       FCPMessage msg = new 
UnknownNodeIdentifierMessage(nodeIdentifier);
+                       handler.outputHandler.queue(msg);
+                       return;
+               }
+               int peerNoteType;
+               try {
+                       peerNoteType = fs.getInt("PeerNoteType");
+               } catch (FSParseException e) {
+                       throw new 
MessageInvalidException(ProtocolErrorMessage.INVALID_FIELD, "Error parsing 
PeerNoteType field: "+e.getMessage(), null);
+               }
+               String encodedNoteText = fs.get("NoteText");
+               String noteText;
+               // **FIXME** this should be generalized for multiple peer notes 
per peer, after PeerNode is similarly generalized
+               try {
+                       noteText = new String(Base64.decode(encodedNoteText));
+               } catch (IllegalBase64Exception e) {
+                       Logger.error(this, "Bad Base64 encoding when decoding a 
FCP-received private darknet comment SimpleFieldSet", e);
+                       return;
+               }
+               if(peerNoteType == Node.PEER_NOTE_TYPE_PRIVATE_DARKNET_COMMENT) 
{
+                       pn.setPrivateDarknetCommentNote(noteText);
+               } else {
+                       FCPMessage msg = new 
UnknownPeerNoteTypeMessage(peerNoteType);
+                       handler.outputHandler.queue(msg);
+                       return;
+               }
+               handler.outputHandler.queue(new PeerNote(nodeIdentifier, 
noteText, peerNoteType));
+       }
+
+}

Added: trunk/freenet/src/freenet/node/fcp/PeerNote.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PeerNote.java    2006-11-12 19:17:45 UTC 
(rev 10904)
+++ trunk/freenet/src/freenet/node/fcp/PeerNote.java    2006-11-12 20:23:42 UTC 
(rev 10905)
@@ -0,0 +1,40 @@
+/* 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.Base64;
+import freenet.support.SimpleFieldSet;
+
+public class PeerNote extends FCPMessage {
+       static final String name = "PeerNote";
+       
+       final String noteText;
+       final int peerNoteType;
+       final String nodeIdentifier;
+       
+       public PeerNote(String nodeIdentifier, String noteText, int 
peerNoteType) {
+               this.nodeIdentifier = nodeIdentifier;
+               this.noteText = noteText;
+               this.peerNoteType = peerNoteType;
+       }
+       
+       public SimpleFieldSet getFieldSet() {
+               SimpleFieldSet fs = new SimpleFieldSet();
+               fs.put("NodeIdentifier", nodeIdentifier);
+               fs.put("PeerNoteType", Integer.toString(peerNoteType));
+               fs.put("NoteText", Base64.encode(noteText.getBytes(), true));
+               return fs;
+       }
+
+       public String getName() {
+               return name;
+       }
+
+       public void run(FCPConnectionHandler handler, Node node)
+                       throws MessageInvalidException {
+               throw new 
MessageInvalidException(ProtocolErrorMessage.INVALID_MESSAGE, "PeerNote goes 
from server to client not the other way around", null);
+       }
+
+}

Added: trunk/freenet/src/freenet/node/fcp/UnknownPeerNoteTypeMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/UnknownPeerNoteTypeMessage.java  
2006-11-12 19:17:45 UTC (rev 10904)
+++ trunk/freenet/src/freenet/node/fcp/UnknownPeerNoteTypeMessage.java  
2006-11-12 20:23:42 UTC (rev 10905)
@@ -0,0 +1,32 @@
+/* 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;
+
+public class UnknownPeerNoteTypeMessage extends FCPMessage {
+
+       final int peerNoteType;
+       
+       public UnknownPeerNoteTypeMessage(int peerNoteType) {
+               this.peerNoteType = peerNoteType;
+       }
+
+       public SimpleFieldSet getFieldSet() {
+               SimpleFieldSet fs = new SimpleFieldSet();
+               fs.put("PeerNoteType", peerNoteType);
+               return fs;
+       }
+
+       public String getName() {
+               return "UnknownPeerNoteType";
+       }
+
+       public void run(FCPConnectionHandler handler, Node node)
+                       throws MessageInvalidException {
+               throw new 
MessageInvalidException(ProtocolErrorMessage.INVALID_MESSAGE, 
"UnknownPeerNoteType goes from server to client not the other way around", 
null);
+       }
+
+}


Reply via email to