Author: toad
Date: 2007-12-15 23:49:15 +0000 (Sat, 15 Dec 2007)
New Revision: 16591

Modified:
   trunk/freenet/src/freenet/node/AnnounceSender.java
   trunk/freenet/src/freenet/node/OpennetManager.java
Log:
Send the announcee data after we are accepted.

Modified: trunk/freenet/src/freenet/node/AnnounceSender.java
===================================================================
--- trunk/freenet/src/freenet/node/AnnounceSender.java  2007-12-15 23:23:59 UTC 
(rev 16590)
+++ trunk/freenet/src/freenet/node/AnnounceSender.java  2007-12-15 23:49:15 UTC 
(rev 16591)
@@ -139,7 +139,8 @@
             if(hasForwarded)
                htl = node.decrementHTL(source, htl);

-            if(!sendTo(next)) continue;
+            long xferUID = sendTo(next);
+            if(xferUID == -1) continue;

             hasForwarded = true;

@@ -222,6 +223,16 @@

             if(logMINOR) Logger.minor(this, "Got Accepted");

+            // Send the rest
+            
+            try {
+                               sendRest(next, xferUID);
+                       } catch (NotConnectedException e1) {
+                               if(logMINOR)
+                                       Logger.minor(this, "Not connected while 
sending noderef on "+next);
+                               continue;
+                       }
+            
             // Otherwise, must be Accepted

             // So wait...
@@ -381,16 +392,25 @@
         * @param next The node to send the announcement to.
         * @return True if the announcement was successfully sent.
         */
-       private boolean sendTo(PeerNode next) {
+       private long sendTo(PeerNode next) {
                try {
-                       om.sendAnnouncementRequest(uid, next, noderefBuf, this, 
target, htl, nearestLoc);
+                       return om.startSendAnnouncementRequest(uid, next, 
noderefBuf, this, target, htl, nearestLoc);
                } catch (NotConnectedException e) {
                        if(logMINOR) Logger.minor(this, "Disconnected");
-                       return false;
+                       return -1;
                }
-               return true;
        }

+       /**
+        * Send an AnnouncementRequest.
+        * @param next The node to send the announcement to.
+        * @return True if the announcement was successfully sent.
+        * @throws NotConnectedException 
+        */
+       private void sendRest(PeerNode next, long xferUID) throws 
NotConnectedException {
+               om.finishSentAnnouncementRequest(next, noderefBuf, this, 
xferUID);
+       }
+
        private void timedOut(PeerNode next) {
                Message msg = DMT.createFNPRejectedOverload(uid, false);
                if(source != null) {

Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java  2007-12-15 23:23:59 UTC 
(rev 16590)
+++ trunk/freenet/src/freenet/node/OpennetManager.java  2007-12-15 23:49:15 UTC 
(rev 16591)
@@ -514,19 +514,20 @@
                }
        }

-       public void sendAnnouncementRequest(long uid, PeerNode peer, byte[] 
noderef, ByteCounter ctr, 
+       public long startSendAnnouncementRequest(long uid, PeerNode peer, 
byte[] noderef, ByteCounter ctr, 
                        double target, short htl, double nearestLocSoFar) 
throws NotConnectedException {
+               long xferUID = node.random.nextLong();
+               Message msg = DMT.createFNPOpennetAnnounceRequest(uid, xferUID, 
noderef.length, 
+                               paddedSize(noderef.length), target, htl, 
nearestLocSoFar);
+               peer.sendAsync(msg, null, 0, ctr);
+               return xferUID;
+       }
+       
+       public void finishSentAnnouncementRequest(PeerNode peer, byte[] 
noderef, ByteCounter ctr, 
+                       long xferUID) throws NotConnectedException {
                byte[] padded = new byte[paddedSize(noderef.length)];
-               if(noderef.length > padded.length) {
-                       Logger.error(this, "Noderef too big: "+noderef.length+" 
bytes");
-                       return;
-               }
                node.fastWeakRandom.nextBytes(padded); // FIXME implement 
nextBytes(buf,offset, length)
                System.arraycopy(noderef, 0, padded, 0, noderef.length);
-               long xferUID = node.random.nextLong();
-               Message msg = DMT.createFNPOpennetAnnounceRequest(uid, xferUID, 
noderef.length, 
-                               padded.length, target, htl, nearestLocSoFar);
-               peer.sendAsync(msg, null, 0, ctr);
                innerSendOpennetRef(xferUID, padded, peer);
        }



Reply via email to