s243a

RequestSender.handleCHKDataFound.BlockReceiverCompletion

Jun 20th, 2015
666
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.06 KB | None | 0 0
  1. // Line 1100 of https://github.com/freenet/fred/blob/3fcc2d1b3a0d5ccbeb73928d6b267440e5b4c17b/src/freenet/node/RequestSender.java#L1
  2.  
  3. final BlockReceiver br = new BlockReceiver(node.usm, next, uid, prb, this, node.getTicker(), true, realTimeFlag, myTimeoutHandler, true);
  4.        
  5.         if(failNow) {
  6.             if(logMINOR) Logger.minor(this, "Terminating forked transfer on "+this+" from "+next);
  7.             prb.abort(RetrievalException.CANCELLED_BY_RECEIVER, "Cancelling fork", true);
  8.             br.receive(new BlockReceiverCompletion() {
  9.  
  10.                 @Override
  11.                 public void blockReceived(byte[] buf) {
  12.                     if(!wasFork)
  13.                         origTag.senderTransferEnds((NodeCHK)key, RequestSender.this);
  14.                     next.noLongerRoutingTo(origTag, false);
  15.                 }
  16.  
  17.                 @Override
  18.                 public void blockReceiveFailed(RetrievalException e) {
  19.                     if(!wasFork)
  20.                         origTag.senderTransferEnds((NodeCHK)key, RequestSender.this);
  21.                     next.noLongerRoutingTo(origTag, false);
  22.                 }
  23.                
  24.             });
  25.             return;
  26.         }
  27.        
  28.         if(logMINOR) Logger.minor(this, "Receiving data");
  29.         if(!wasFork) {
  30.             synchronized(this) {
  31.                 transferringFrom = next;
  32.             }
  33.         } else
  34.             if(logMINOR) Logger.minor(this, "Receiving data from fork");
  35.        
  36.         receivingAsync = true;
  37.         br.receive(new BlockReceiverCompletion() {
  38.            
  39.             @Override
  40.             public void blockReceived(byte[] data) {
  41.                 try {
  42.                     long tEnd = System.currentTimeMillis();
  43.                     transferTime = tEnd - tStart;
  44.                     boolean haveSetPRB = false;
  45.                     synchronized(RequestSender.this) {
  46.                         transferringFrom = null;
  47.                         if(RequestSender.this.prb == null || !RequestSender.this.prb.allReceivedAndNotAborted()) {
  48.                             RequestSender.this.prb = prb;
  49.                             haveSetPRB = true;
  50.                         }
  51.                     }
  52.                     if(!wasFork)
  53.                         origTag.senderTransferEnds((NodeCHK)key, RequestSender.this);
  54.                     next.transferSuccess(realTimeFlag);
  55.                     next.successNotOverload(realTimeFlag);
  56.                     node.nodeStats.successfulBlockReceive(realTimeFlag, source == null);
  57.                     if(logMINOR) Logger.minor(this, "Received data");
  58.                     // Received data
  59.                     try {
  60.                         verifyAndCommit(waiter.headers, data);
  61.                         if(logMINOR) Logger.minor(this, "Written to store");
  62.                     } catch (KeyVerifyException e1) {
  63.                         Logger.normal(this, "Got data but verify failed: "+e1, e1);
  64.                         node.failureTable.onFinalFailure(key, next, htl, origHTL, FailureTable.RECENTLY_FAILED_TIME, FailureTable.REJECT_TIME, source);
  65.                         if(!wasFork)
  66.                             finish(VERIFY_FAILURE, next, false);
  67.                         else
  68.                             next.noLongerRoutingTo(origTag, false);
  69.                         return;
  70.                     }
  71.                     if(haveSetPRB) // It was a fork, so we didn't immediately send the data.
  72.                         fireCHKTransferBegins();
  73.                     finish(SUCCESS, next, false);
  74.                 } catch (Throwable t) {
  75.                     Logger.error(this, "Failed on "+this, t);
  76.                     if(!wasFork)
  77.                         finish(INTERNAL_ERROR, next, true);
  78.                 } finally {
  79.                     if(wasFork)
  80.                         next.noLongerRoutingTo(origTag, false);
  81.                 }
  82.             }
Advertisement
Add Comment
Please, Sign In to add comment