Author: toad
Date: 2008-03-19 15:45:27 +0000 (Wed, 19 Mar 2008)
New Revision: 18602

Modified:
   trunk/freenet/src/freenet/node/FailureTable.java
Log:
Send new format SSK messages in FailureTable.

Modified: trunk/freenet/src/freenet/node/FailureTable.java
===================================================================
--- trunk/freenet/src/freenet/node/FailureTable.java    2008-03-19 15:38:28 UTC 
(rev 18601)
+++ trunk/freenet/src/freenet/node/FailureTable.java    2008-03-19 15:45:27 UTC 
(rev 18602)
@@ -13,6 +13,7 @@
 import freenet.io.comm.NotConnectedException;
 import freenet.io.xfer.BlockTransmitter;
 import freenet.io.xfer.PartiallyReceivedBlock;
+import freenet.io.xfer.WaitedTooLongException;
 import freenet.keys.CHKBlock;
 import freenet.keys.Key;
 import freenet.keys.KeyBlock;
@@ -346,7 +347,7 @@
         * @param source The node that asked for the key.
         * @throws NotConnectedException If the sender ceases to be connected.
         */
-       public void sendOfferedKey(Key key, final boolean isSSK, boolean 
needPubKey, final long uid, PeerNode source) throws NotConnectedException {
+       public void sendOfferedKey(Key key, final boolean isSSK, boolean 
needPubKey, final long uid, final PeerNode source) throws NotConnectedException 
{
                if(isSSK) {
                        SSKBlock block = node.fetch((NodeSSK)key, false);
                        if(block == null) {
@@ -354,33 +355,36 @@
                                
source.sendAsync(DMT.createFNPGetOfferedKeyInvalid(uid, 
DMT.GET_OFFERED_KEY_REJECTED_NO_KEY), null, 0, senderCounter);
                                return;
                        }
-                       Message df = DMT.createFNPSSKDataFound(uid, 
block.getRawHeaders(), block.getRawData());
-                       node.sentPayload(block.getRawData().length);
-                       source.sendAsync(df, new AsyncMessageCallback() {
-                               boolean finished = false;
-                               public synchronized void acknowledged() {
-                                       if(finished) return;
-                                       finished = true;
-                                       node.unlockUID(uid, isSSK, false, 
false, true);
-                               }
+                       
+                       final Message data = DMT.createFNPSSKDataFoundData(uid, 
block.getRawData());
+                       Message headers = DMT.createFNPSSKDataFoundHeaders(uid, 
block.getRawHeaders());
+                       final int dataLength = block.getRawData().length;
+                       
+                       source.sendAsync(headers, null, 0, senderCounter);
+                       
+                       node.executor.execute(new PrioRunnable() {

-                               public void disconnected() {
-                                       if(finished) return;
-                                       finished = true;
-                                       node.unlockUID(uid, isSSK, false, 
false, true);
+                               public int getPriority() {
+                                       return NativeThread.HIGH_PRIORITY;
                                }

-                               public void fatalError() {
-                                       if(finished) return;
-                                       finished = true;
-                                       node.unlockUID(uid, isSSK, false, 
false, true);
+                               public void run() {
+                                       try {
+                                               
source.sendThrottledMessage(data, dataLength, senderCounter, 60*1000);
+                                       } catch (NotConnectedException e) {
+                                               // :(
+                                       } catch (WaitedTooLongException e) {
+                                               // :<
+                                               Logger.error(this, "Waited too 
long sending SSK data");
+                                       } finally {
+                                               node.unlockUID(uid, isSSK, 
false, false, true);
+                                       }
                                }
-
-                               public void sent() {
-                                       // Ignore
-                               }

-                       }, 0, senderCounter);
+                       }, "Send offered SSK");
+                       
+                       Message df = DMT.createFNPSSKDataFound(uid, 
block.getRawHeaders(), block.getRawData());
+                       source.sendAsync(df, null, 0, senderCounter);
                        if(needPubKey) {
                                Message pk = DMT.createFNPSSKPubKey(uid, 
block.getPubKey());
                                source.sendAsync(pk, null, 0, senderCounter);


Reply via email to