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) {


Reply via email to