Author: toad
Date: 2007-10-26 16:25:53 +0000 (Fri, 26 Oct 2007)
New Revision: 15570
Modified:
trunk/freenet/src/freenet/node/OpennetManager.java
trunk/freenet/src/freenet/node/OpennetPeerNode.java
trunk/freenet/src/freenet/node/RequestHandler.java
trunk/freenet/src/freenet/node/RequestSender.java
Log:
factor out validation of opennet noderefs
Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java 2007-10-26 16:13:28 UTC
(rev 15569)
+++ trunk/freenet/src/freenet/node/OpennetManager.java 2007-10-26 16:25:53 UTC
(rev 15570)
@@ -578,4 +578,21 @@
}
}
+ public SimpleFieldSet validateNoderef(byte[] noderef, int offset, int
length, PeerNode from) {
+ SimpleFieldSet ref;
+ try {
+ ref = PeerNode.compressedNoderefToFieldSet(noderef, 0,
noderef.length);
+ } catch (FSParseException e) {
+ Logger.error(this, "Invalid noderef: "+e, e);
+ return null;
+ }
+
+ if(!OpennetPeerNode.validateRef(ref)) {
+ Logger.error(this, "Could not parse opennet noderef for
"+this+" from "+from);
+ return null;
+ }
+
+ return ref;
+ }
+
}
Modified: trunk/freenet/src/freenet/node/OpennetPeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetPeerNode.java 2007-10-26 16:13:28 UTC
(rev 15569)
+++ trunk/freenet/src/freenet/node/OpennetPeerNode.java 2007-10-26 16:25:53 UTC
(rev 15570)
@@ -83,5 +83,13 @@
public synchronized long timeLastDisconnect() {
return timeLastDisconnect;
}
+
+ /**
+ * Is the SimpleFieldSet a valid noderef?
+ */
+ public static boolean validateRef(SimpleFieldSet ref) {
+ if(!ref.getBoolean("opennet", false)) return false;
+ return true;
+ }
}
Modified: trunk/freenet/src/freenet/node/RequestHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestHandler.java 2007-10-26 16:13:28 UTC
(rev 15569)
+++ trunk/freenet/src/freenet/node/RequestHandler.java 2007-10-26 16:25:53 UTC
(rev 15570)
@@ -350,14 +350,18 @@
return;
}
- SimpleFieldSet ref;
- try {
- ref =
PeerNode.compressedNoderefToFieldSet(noderef, 0, noderef.length);
- } catch (FSParseException e) {
- Logger.error(this, "Could not parse opennet
noderef for "+this+" from "+source, e);
+ SimpleFieldSet ref = om.validateNoderef(noderef, 0,
noderef.length, source);
+
+ if(ref == null) {
+ Message msg =
DMT.createFNPOpennetCompletedAck(uid);
+ try {
+ source.sendAsync(msg, null, 0, this);
+ } catch (NotConnectedException e) {
+ // Oh well...
+ }
return;
}
-
+
try {
if(!node.addNewOpennetNode(ref)) {
Logger.normal(this, "Asked for opennet
ref but didn't want it for "+this+" :\n"+ref);
@@ -408,18 +412,13 @@
// Send it forward to the data source, if it is valid.
- try {
- SimpleFieldSet fs =
PeerNode.compressedNoderefToFieldSet(newNoderef, 0, newNoderef.length);
- if(fs.getBoolean("opennet", false)) {
- try {
- om.sendOpennetRef(true, uid,
dataSource, newNoderef, this);
- } catch (NotConnectedException e) {
- // How sad
- return;
- }
+ if(om.validateNoderef(newNoderef, 0, newNoderef.length, source)
!= null) {
+ try {
+ om.sendOpennetRef(true, uid, dataSource,
newNoderef, this);
+ } catch (NotConnectedException e) {
+ // How sad
+ return;
}
- } catch (FSParseException e1) {
- // Invalid, clear it
}
}
Modified: trunk/freenet/src/freenet/node/RequestSender.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestSender.java 2007-10-26 16:13:28 UTC
(rev 15569)
+++ trunk/freenet/src/freenet/node/RequestSender.java 2007-10-26 16:25:53 UTC
(rev 15570)
@@ -676,13 +676,10 @@
if(noderef == null) return;
- SimpleFieldSet ref =
PeerNode.compressedNoderefToFieldSet(noderef, 0, noderef.length);
-
- if(!ref.getBoolean("opennet", false)) {
- Logger.error(this, "Could not parse opennet noderef for
"+this+" from "+next);
- return;
- }
+ SimpleFieldSet ref = om.validateNoderef(noderef, 0,
noderef.length, next);
+ if(ref == null) return;
+
if(!node.addNewOpennetNode(ref)) {
// If we don't want it let somebody else have it
synchronized(this) {