Author: zothar
Date: 2007-07-15 16:00:38 +0000 (Sun, 15 Jul 2007)
New Revision: 14136

Modified:
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/TextModeClientInterface.java
   trunk/freenet/src/freenet/node/fcp/ListPeerNotesMessage.java
   trunk/freenet/src/freenet/node/fcp/ModifyPeer.java
   trunk/freenet/src/freenet/node/fcp/ModifyPeerNote.java
Log:
FCP: ModifyPeer, ModifyPeerNote and ListPeerNotes now return DARKNET_ONLY 
protocol error message when not given a darknet peer to operate on, which I 
believe completes the process of making FCP opennet safe.  node.getPeerNode() 
now returns a PeerNode rather than a DarknetPeerNode.

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2007-07-15 15:04:33 UTC (rev 
14135)
+++ trunk/freenet/src/freenet/node/Node.java    2007-07-15 16:00:38 UTC (rev 
14136)
@@ -2425,8 +2425,8 @@
        /**
         * Return a peer of the node given its ip and port, name or identity, 
as a String
         */
-       public DarknetPeerNode getPeerNode(String nodeIdentifier) {
-               DarknetPeerNode[] pn = peers.getDarknetPeers();
+       public PeerNode getPeerNode(String nodeIdentifier) {
+               PeerNode[] pn = peers.myPeers;
                for(int i=0;i<pn.length;i++)
                {
                        Peer peer = pn[i].getPeer();
@@ -2434,11 +2434,17 @@
                        if(peer != null) {
                                nodeIpAndPort = peer.toString();
                        }
-                       String name = pn[i].myName;
                        String identity = pn[i].getIdentityString();
-                       if(identity.equals(nodeIdentifier) || 
nodeIpAndPort.equals(nodeIdentifier) || name.equals(nodeIdentifier))
-                       {
-                               return pn[i];
+                       if(pn[i] instanceof DarknetPeerNode) {
+                               DarknetPeerNode dpn = (DarknetPeerNode) pn[i];
+                               String name = dpn.myName;
+                               if(identity.equals(nodeIdentifier) || 
nodeIpAndPort.equals(nodeIdentifier) || name.equals(nodeIdentifier)) {
+                                       return pn[i];
+                               }
+                       } else {
+                               if(identity.equals(nodeIdentifier) || 
nodeIpAndPort.equals(nodeIdentifier)) {
+                                       return pn[i];
+                               }
                        }
                }
                return null;

Modified: trunk/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterface.java 2007-07-15 
15:04:33 UTC (rev 14135)
+++ trunk/freenet/src/freenet/node/TextModeClientInterface.java 2007-07-15 
16:00:38 UTC (rev 14136)
@@ -739,13 +739,19 @@
                        out.flush();
                        return false;
                }
-                       DarknetPeerNode pn = n.getPeerNode(nodeIdentifier);
+                       PeerNode pn = n.getPeerNode(nodeIdentifier);
                if(pn == null) {
                        out.write(("n.getPeerNode() failed to get peer details 
for "+nodeIdentifier+"\r\n\r\n").getBytes());
                        out.flush();
                        return false;
                }
-                       pn.setListenOnly(true);
+                       if(!(pn instanceof DarknetPeerNode)) {
+                               out.write(("Error: "+nodeIdentifier+" 
identifies a non-darknet peer and this command is only available for darknet 
peers\r\n\r\n").getBytes());
+                               out.flush();
+                               return false;
+                       }
+                       DarknetPeerNode dpn = (DarknetPeerNode) pn;
+                       dpn.setListenOnly(true);
             outsb.append("set ListenOnly suceeded for 
").append(nodeIdentifier).append("\r\n");
                } else if(uline.startsWith("UNSETPEERLISTENONLY:")) {
                        String nodeIdentifier = 
(line.substring("UNSETPEERLISTENONLY:".length())).trim();
@@ -754,13 +760,19 @@
                        out.flush();
                        return false;
                }
-                       DarknetPeerNode pn = n.getPeerNode(nodeIdentifier);
+                       PeerNode pn = n.getPeerNode(nodeIdentifier);
                if(pn == null) {
                        out.write(("n.getPeerNode() failed to get peer details 
for "+nodeIdentifier+"\r\n\r\n").getBytes());
                        out.flush();
                        return false;
                }
-                       pn.setListenOnly(false);
+                       if(!(pn instanceof DarknetPeerNode)) {
+                               out.write(("Error: "+nodeIdentifier+" 
identifies a non-darknet peer and this command is only available for darknet 
peers\r\n\r\n").getBytes());
+                               out.flush();
+                               return false;
+                       }
+                       DarknetPeerNode dpn = (DarknetPeerNode) pn;
+                       dpn.setListenOnly(false);
             outsb.append("unset ListenOnly suceeded for 
").append(nodeIdentifier).append("\r\n");
         } else if(uline.startsWith("HAVEPEER:")) {
                String nodeIdentifier = 
(line.substring("HAVEPEER:".length())).trim();

Modified: trunk/freenet/src/freenet/node/fcp/ListPeerNotesMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ListPeerNotesMessage.java        
2007-07-15 15:04:33 UTC (rev 14135)
+++ trunk/freenet/src/freenet/node/fcp/ListPeerNotesMessage.java        
2007-07-15 16:00:38 UTC (rev 14136)
@@ -5,6 +5,7 @@

 import freenet.node.DarknetPeerNode;
 import freenet.node.Node;
+import freenet.node.PeerNode;
 import freenet.support.SimpleFieldSet;

 public class ListPeerNotesMessage extends FCPMessage {
@@ -30,14 +31,18 @@
                        throw new 
MessageInvalidException(ProtocolErrorMessage.ACCESS_DENIED, "ListPeerNotes 
requires full access", fs.get("Identifier"), false);
                }
                String nodeIdentifier = fs.get("NodeIdentifier");
-               DarknetPeerNode pn = node.getPeerNode(nodeIdentifier);
+               PeerNode pn = node.getPeerNode(nodeIdentifier);
                if(pn == null) {
                        FCPMessage msg = new 
UnknownNodeIdentifierMessage(nodeIdentifier);
                        handler.outputHandler.queue(msg);
                        return;
                }
+               if(!(pn instanceof DarknetPeerNode)) {
+                       throw new 
MessageInvalidException(ProtocolErrorMessage.DARKNET_ONLY, "ModifyPeer only 
available for darknet peers", fs.get("Identifier"), false);
+               }
+               DarknetPeerNode dpn = (DarknetPeerNode) pn;
                // **FIXME** this should be generalized for multiple peer notes 
per peer, after PeerNode is similarly generalized
-               String noteText = pn.getPrivateDarknetCommentNote();
+               String noteText = dpn.getPrivateDarknetCommentNote();
                handler.outputHandler.queue(new PeerNote(nodeIdentifier, 
noteText, Node.PEER_NOTE_TYPE_PRIVATE_DARKNET_COMMENT));
                handler.outputHandler.queue(new 
EndListPeerNotesMessage(nodeIdentifier));
        }

Modified: trunk/freenet/src/freenet/node/fcp/ModifyPeer.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ModifyPeer.java  2007-07-15 15:04:33 UTC 
(rev 14135)
+++ trunk/freenet/src/freenet/node/fcp/ModifyPeer.java  2007-07-15 16:00:38 UTC 
(rev 14136)
@@ -5,6 +5,7 @@

 import freenet.node.DarknetPeerNode;
 import freenet.node.Node;
+import freenet.node.PeerNode;
 import freenet.support.Fields;
 import freenet.support.SimpleFieldSet;

@@ -31,44 +32,48 @@
                        throw new 
MessageInvalidException(ProtocolErrorMessage.ACCESS_DENIED, "ModifyPeer 
requires full access", fs.get("Identifier"), false);
                }
                String nodeIdentifier = fs.get("NodeIdentifier");
-               DarknetPeerNode pn = node.getPeerNode(nodeIdentifier);
+               PeerNode pn = node.getPeerNode(nodeIdentifier);
                if(pn == null) {
                        FCPMessage msg = new 
UnknownNodeIdentifierMessage(nodeIdentifier);
                        handler.outputHandler.queue(msg);
                        return;
                }
+               if(!(pn instanceof DarknetPeerNode)) {
+                       throw new 
MessageInvalidException(ProtocolErrorMessage.DARKNET_ONLY, "ModifyPeer only 
available for darknet peers", fs.get("Identifier"), false);
+               }
+               DarknetPeerNode dpn = (DarknetPeerNode) pn;
                String isDisabledString = fs.get("IsDisabled");
                if(isDisabledString != null) {
                        if(!isDisabledString.equals("")) {
                                if(Fields.stringToBool(isDisabledString, 
false)) {
-                                       pn.disablePeer();
+                                       dpn.disablePeer();
                                } else {
-                                       pn.enablePeer();
+                                       dpn.enablePeer();
                                }
                        }
                }
                String isListenOnlyString = fs.get("IsListenOnly");
                if(isListenOnlyString != null) {
                        if(!isListenOnlyString.equals("")) {
-                               
pn.setListenOnly(Fields.stringToBool(isListenOnlyString, false));
+                               
dpn.setListenOnly(Fields.stringToBool(isListenOnlyString, false));
                        }
                }
                String isBurstOnlyString = fs.get("IsBurstOnly");
                if(isBurstOnlyString != null) {
                        if(!isBurstOnlyString.equals("")) {
-                               
pn.setBurstOnly(Fields.stringToBool(isBurstOnlyString, false));
+                               
dpn.setBurstOnly(Fields.stringToBool(isBurstOnlyString, false));
                        }
                }
                String ignoreSourcePortString = fs.get("IgnoreSourcePort");
                if(ignoreSourcePortString != null) {
                        if(!ignoreSourcePortString.equals("")) {
-                               
pn.setIgnoreSourcePort(Fields.stringToBool(ignoreSourcePortString, false));
+                               
dpn.setIgnoreSourcePort(Fields.stringToBool(ignoreSourcePortString, false));
                        }
                }
                String allowLocalAddressesString = 
fs.get("AllowLocalAddresses");
                if(allowLocalAddressesString != null) {
                        if(!allowLocalAddressesString.equals("")) {
-                               
pn.setAllowLocalAddresses(Fields.stringToBool(allowLocalAddressesString, 
false));
+                               
dpn.setAllowLocalAddresses(Fields.stringToBool(allowLocalAddressesString, 
false));
                        }
                }
                handler.outputHandler.queue(new Peer(pn, true, true));

Modified: trunk/freenet/src/freenet/node/fcp/ModifyPeerNote.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ModifyPeerNote.java      2007-07-15 
15:04:33 UTC (rev 14135)
+++ trunk/freenet/src/freenet/node/fcp/ModifyPeerNote.java      2007-07-15 
16:00:38 UTC (rev 14136)
@@ -6,6 +6,7 @@
 import freenet.node.DarknetPeerNode;
 import freenet.node.FSParseException;
 import freenet.node.Node;
+import freenet.node.PeerNode;
 import freenet.support.Base64;
 import freenet.support.IllegalBase64Exception;
 import freenet.support.Logger;
@@ -37,12 +38,16 @@
                if( nodeIdentifier == null ) {
                        throw new 
MessageInvalidException(ProtocolErrorMessage.MISSING_FIELD, "Error: 
NodeIdentifier field missing", null, false);
                }
-               DarknetPeerNode pn = node.getPeerNode(nodeIdentifier);
+               PeerNode pn = node.getPeerNode(nodeIdentifier);
                if(pn == null) {
                        FCPMessage msg = new 
UnknownNodeIdentifierMessage(nodeIdentifier);
                        handler.outputHandler.queue(msg);
                        return;
                }
+               if(!(pn instanceof DarknetPeerNode)) {
+                       throw new 
MessageInvalidException(ProtocolErrorMessage.DARKNET_ONLY, "ModifyPeerNote only 
available for darknet peers", fs.get("Identifier"), false);
+               }
+               DarknetPeerNode dpn = (DarknetPeerNode) pn;
                int peerNoteType;
                try {
                        peerNoteType = fs.getInt("PeerNoteType");
@@ -62,7 +67,7 @@
                        return;
                }
                if(peerNoteType == Node.PEER_NOTE_TYPE_PRIVATE_DARKNET_COMMENT) 
{
-                       pn.setPrivateDarknetCommentNote(noteText);
+                       dpn.setPrivateDarknetCommentNote(noteText);
                } else {
                        FCPMessage msg = new 
UnknownPeerNoteTypeMessage(peerNoteType);
                        handler.outputHandler.queue(msg);


Reply via email to