Author: zothar
Date: 2007-07-13 21:43:41 +0000 (Fri, 13 Jul 2007)
New Revision: 14097

Added:
   trunk/freenet/src/freenet/node/OpennetDisabledException.java
Modified:
   trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/TextModeClientInterface.java
   trunk/freenet/src/freenet/node/fcp/AddPeer.java
   trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java
   trunk/freenet/src/freenet/node/fcp/RemovePeer.java
Log:
FCP: added support for adding opennet peers via FCP.  Remamed 
node.(add|remove)DarknetConnection() to node.(add|remove)PeerConnection() 
because neither is specific to darknet.  Added OpennetDisabledException, though 
is should probably be DisabledByConfigurationException.  Added corresponding 
OPENNET_DISABLED ProtocolErrorMessage code.

Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2007-07-13 21:34:14 UTC (rev 14096)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2007-07-13 21:43:41 UTC (rev 14097)
@@ -174,7 +174,7 @@
                                this.sendErrorPage(ctx, 200, 
l10n("failedToAddNodeTitle"), l10n("triedToAddSelf"));
                                return;
                        }
-                       if(!this.node.addDarknetConnection(pn)) {
+                       if(!this.node.addPeerConnection(pn)) {
                                this.sendErrorPage(ctx, 200, 
l10n("failedToAddNodeTitle"), l10n("alreadyInReferences"));
                                return;
                        }
@@ -353,7 +353,7 @@
                        for(int i = 0; i < peerNodes.length; i++) {
                                if 
(request.isPartSet("node_"+peerNodes[i].hashCode())) {       
                                        
if((peerNodes[i].timeLastConnectionCompleted() < (System.currentTimeMillis() - 
1000*60*60*24*7) /* one week */) ||  (peerNodes[i].peerNodeStatus == 
PeerManager.PEER_NODE_STATUS_NEVER_CONNECTED) || request.isPartSet("forceit")){
-                                               
this.node.removeDarknetConnection(peerNodes[i]);
+                                               
this.node.removePeerConnection(peerNodes[i]);
                                                if(logMINOR) Logger.minor(this, 
"Removed node: node_"+peerNodes[i].hashCode());
                                        }else{
                                                if(logMINOR) Logger.minor(this, 
"Refusing to remove : node_"+peerNodes[i].hashCode()+" (trying to prevent 
network churn) : let's display the warning message.");

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2007-07-13 21:34:14 UTC (rev 
14096)
+++ trunk/freenet/src/freenet/node/Node.java    2007-07-13 21:43:41 UTC (rev 
14097)
@@ -2264,13 +2264,13 @@
                return peers.getDarknetPeers();
        }

-       public boolean addDarknetConnection(PeerNode pn) {
+       public boolean addPeerConnection(PeerNode pn) {
                boolean retval = peers.addPeer(pn);
                peers.writePeers();
                return retval;
        }

-       public void removeDarknetConnection(PeerNode pn) {
+       public void removePeerConnection(PeerNode pn) {
                peers.disconnect(pn);
        }

@@ -2569,13 +2569,22 @@
        public DarknetPeerNode createNewDarknetNode(SimpleFieldSet fs) throws 
FSParseException, PeerParseException, ReferenceSignatureVerificationException {
        return new DarknetPeerNode(fs, this, darknetCrypto, peers, false, 
darknetCrypto.packetMangler);
        }
+
+       public OpennetPeerNode createNewOpennetNode(SimpleFieldSet fs) throws 
FSParseException, OpennetDisabledException, PeerParseException, 
ReferenceSignatureVerificationException {
+               if(opennet == null) throw new OpennetDisabledException("Opennet 
is not currently enabled");
+       return new OpennetPeerNode(fs, this, opennet.crypto, opennet, peers, 
false, opennet.crypto.packetMangler);
+       }

        public boolean addNewOpennetNode(SimpleFieldSet fs) throws 
FSParseException, PeerParseException, ReferenceSignatureVerificationException {
+               // FIXME: perhaps this should throw OpennetDisabledExcemption 
rather than returing false?
                if(opennet == null) return false;
                return opennet.addNewOpennetNode(fs);
        }

-
+       public byte[] getOpennetIdentity() {
+               return opennet.crypto.myIdentity;
+       }
+       
        public byte[] getDarknetIdentity() {
                return darknetCrypto.myIdentity;
        }

Added: trunk/freenet/src/freenet/node/OpennetDisabledException.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetDisabledException.java                
                (rev 0)
+++ trunk/freenet/src/freenet/node/OpennetDisabledException.java        
2007-07-13 21:43:41 UTC (rev 14097)
@@ -0,0 +1,20 @@
+/* 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;
+
+/**
+ * Exception thrown when a caller attempts to use opennet
+ * functionality, but it is not currently enabled in the node.
+ */
+public class OpennetDisabledException extends Exception {
+       private static final long serialVersionUID = -1;
+    public OpennetDisabledException(Exception e) {
+        super(e);
+    }
+    
+    public OpennetDisabledException(String msg) {
+        super(msg);
+    }
+
+}

Modified: trunk/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterface.java 2007-07-13 
21:34:14 UTC (rev 14096)
+++ trunk/freenet/src/freenet/node/TextModeClientInterface.java 2007-07-13 
21:43:41 UTC (rev 14097)
@@ -1128,7 +1128,7 @@
                String identity = pn[i].getIdentityString();
                if(identity.equals(nodeIdentifier) || 
nodeIpAndPort.equals(nodeIdentifier) || name.equals(nodeIdentifier))
                {
-                       n.removeDarknetConnection(pn[i]);
+                       n.removePeerConnection(pn[i]);
                        return true;
                }
        }

Modified: trunk/freenet/src/freenet/node/fcp/AddPeer.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/AddPeer.java     2007-07-13 21:34:14 UTC 
(rev 14096)
+++ trunk/freenet/src/freenet/node/fcp/AddPeer.java     2007-07-13 21:43:41 UTC 
(rev 14097)
@@ -18,7 +18,9 @@
 import freenet.io.comm.ReferenceSignatureVerificationException;
 import freenet.node.FSParseException;
 import freenet.node.Node;
+import freenet.node.OpennetDisabledException;
 import freenet.node.PeerNode;
+import freenet.support.Fields;
 import freenet.support.SimpleFieldSet;

 public class AddPeer extends FCPMessage {
@@ -111,21 +113,42 @@
                }
                fs.setEndMarker( "End" );
                PeerNode pn;
-               try {
-                       pn = node.createNewDarknetNode(fs);
-               } catch (FSParseException e) {
-                       throw new 
MessageInvalidException(ProtocolErrorMessage.REF_PARSE_ERROR, "Error parsing 
ref: "+e.getMessage(), null, false);
-               } catch (PeerParseException e) {
-                       throw new 
MessageInvalidException(ProtocolErrorMessage.REF_PARSE_ERROR, "Error parsing 
ref: "+e.getMessage(), null, false);
-               } catch (ReferenceSignatureVerificationException e) {
-                       throw new 
MessageInvalidException(ProtocolErrorMessage.REF_SIGNATURE_INVALID, "Error 
adding ref: "+e.getMessage(), null, false);
+               boolean isOpennetRef = Fields.stringToBool(fs.get("opennet"), 
false);
+               if(isOpennetRef) {
+                       try {
+                               pn = node.createNewOpennetNode(fs);
+                       } catch (FSParseException e) {
+                               throw new 
MessageInvalidException(ProtocolErrorMessage.REF_PARSE_ERROR, "Error parsing 
ref: "+e.getMessage(), null, false);
+                       } catch (OpennetDisabledException e) {
+                               throw new 
MessageInvalidException(ProtocolErrorMessage.OPENNET_DISABLED, "Error adding 
ref: "+e.getMessage(), null, false);
+                       } catch (PeerParseException e) {
+                               throw new 
MessageInvalidException(ProtocolErrorMessage.REF_PARSE_ERROR, "Error parsing 
ref: "+e.getMessage(), null, false);
+                       } catch (ReferenceSignatureVerificationException e) {
+                               throw new 
MessageInvalidException(ProtocolErrorMessage.REF_SIGNATURE_INVALID, "Error 
adding ref: "+e.getMessage(), null, false);
+                       }
+                       if(Arrays.equals(pn.getIdentity(), 
node.getOpennetIdentity()))
+                               throw new 
MessageInvalidException(ProtocolErrorMessage.CANNOT_PEER_WITH_SELF, "Node 
cannot peer with itself", null, false);
+                       if(!node.addPeerConnection(pn)) {
+                               throw new 
MessageInvalidException(ProtocolErrorMessage.DUPLICATE_PEER_REF, "Node already 
has a peer with that identity", null, false);
+                       }
+                       System.out.println("Added opennet peer: "+pn);
+               } else {
+                       try {
+                               pn = node.createNewDarknetNode(fs);
+                       } catch (FSParseException e) {
+                               throw new 
MessageInvalidException(ProtocolErrorMessage.REF_PARSE_ERROR, "Error parsing 
ref: "+e.getMessage(), null, false);
+                       } catch (PeerParseException e) {
+                               throw new 
MessageInvalidException(ProtocolErrorMessage.REF_PARSE_ERROR, "Error parsing 
ref: "+e.getMessage(), null, false);
+                       } catch (ReferenceSignatureVerificationException e) {
+                               throw new 
MessageInvalidException(ProtocolErrorMessage.REF_SIGNATURE_INVALID, "Error 
adding ref: "+e.getMessage(), null, false);
+                       }
+                       if(Arrays.equals(pn.getIdentity(), 
node.getDarknetIdentity()))
+                               throw new 
MessageInvalidException(ProtocolErrorMessage.CANNOT_PEER_WITH_SELF, "Node 
cannot peer with itself", null, false);
+                       if(!node.addPeerConnection(pn)) {
+                               throw new 
MessageInvalidException(ProtocolErrorMessage.DUPLICATE_PEER_REF, "Node already 
has a peer with that identity", null, false);
+                       }
+                       System.out.println("Added darknet peer: "+pn);
                }
-               if(Arrays.equals(pn.getIdentity(), node.getDarknetIdentity()))
-                       throw new 
MessageInvalidException(ProtocolErrorMessage.CANNOT_PEER_WITH_SELF, "Node 
cannot peer with itself", null, false);
-               if(!node.addDarknetConnection(pn)) {
-                       throw new 
MessageInvalidException(ProtocolErrorMessage.DUPLICATE_PEER_REF, "Node already 
has a peer with that identity", null, false);
-               }
-               System.out.println("Added peer: "+pn);
                handler.outputHandler.queue(new Peer(pn, true, true));
        }


Modified: trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java        
2007-07-13 21:34:14 UTC (rev 14096)
+++ trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java        
2007-07-13 21:43:41 UTC (rev 14097)
@@ -51,6 +51,7 @@
        static final int REF_SIGNATURE_INVALID = 27;
        static final int CANNOT_PEER_WITH_SELF = 28;
        static final int DUPLICATE_PEER_REF = 29;
+       static final int OPENNET_DISABLED = 30;

        final int code;
        final String extra;
@@ -118,6 +119,8 @@
                        return "Node cannot peer with itself";
                case DUPLICATE_PEER_REF:
                        return "Node already has a peer with that ref";
+               case OPENNET_DISABLED:
+                       return "Opennet is currently disabled in the node's 
configuration";
                default:
                        Logger.error(this, "Unknown error code: "+code, new 
Exception("debug"));
                return "(Unknown)";

Modified: trunk/freenet/src/freenet/node/fcp/RemovePeer.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/RemovePeer.java  2007-07-13 21:34:14 UTC 
(rev 14096)
+++ trunk/freenet/src/freenet/node/fcp/RemovePeer.java  2007-07-13 21:43:41 UTC 
(rev 14097)
@@ -37,7 +37,7 @@
                        return;
                }
                String identity = pn.getIdentityString();
-               node.removeDarknetConnection(pn);
+               node.removePeerConnection(pn);
                handler.outputHandler.queue(new PeerRemoved(identity, 
nodeIdentifier));
        }



Reply via email to