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