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); + } + +}
