Author: toad
Date: 2007-10-24 18:30:32 +0000 (Wed, 24 Oct 2007)
New Revision: 15548
Modified:
trunk/freenet/src/freenet/io/xfer/BulkTransmitter.java
trunk/freenet/src/freenet/node/DarknetPeerNode.java
trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
Log:
Support sending a bulk transfer without necessarily expecting a response. Will
use this for back compat in sending noderefs as bulk transfers.
Javadocs.
Modified: trunk/freenet/src/freenet/io/xfer/BulkTransmitter.java
===================================================================
--- trunk/freenet/src/freenet/io/xfer/BulkTransmitter.java 2007-10-24
18:16:29 UTC (rev 15547)
+++ trunk/freenet/src/freenet/io/xfer/BulkTransmitter.java 2007-10-24
18:30:32 UTC (rev 15548)
@@ -42,12 +42,24 @@
private boolean sentCancel;
private boolean finished;
final int packetSize;
+ /** Not expecting a response? */
+ final boolean noWait;
- public BulkTransmitter(PartiallyReceivedBulk prb, PeerContext peer,
long uid, DoubleTokenBucket masterThrottle) throws DisconnectedException {
+ /**
+ * Create a bulk data transmitter.
+ * @param prb The PartiallyReceivedBulk containing the file we want to
send, or the part of it that we have so far.
+ * @param peer The peer we want to send it to.
+ * @param uid The unique identifier for this data transfer
+ * @param masterThrottle The overall output throttle
+ * @param noWait If true, don't wait for an FNPBulkReceivedAll, return
as soon as we've sent everything.
+ * @throws DisconnectedException If the peer we are trying to send to
becomes disconnected.
+ */
+ public BulkTransmitter(PartiallyReceivedBulk prb, PeerContext peer,
long uid, DoubleTokenBucket masterThrottle, boolean noWait) throws
DisconnectedException {
this.prb = prb;
this.peer = peer;
this.uid = uid;
this.masterThrottle = masterThrottle;
+ this.noWait = noWait;
peerBootID = peer.getBootID();
// Need to sync on prb while doing both operations, to avoid
race condition.
// Specifically, we must not get calls to blockReceived() until
blocksNotSentButPresent
@@ -167,6 +179,10 @@
blockNo = blocksNotSentButPresent.firstOne();
}
if(blockNo < 0) {
+ if(noWait && prb.hasWholeFile()) {
+ completed();
+ return true;
+ }
// Wait for a packet, BulkReceivedAll or
BulkReceiveAborted
synchronized(this) {
try {
Modified: trunk/freenet/src/freenet/node/DarknetPeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/DarknetPeerNode.java 2007-10-24 18:16:29 UTC
(rev 15547)
+++ trunk/freenet/src/freenet/node/DarknetPeerNode.java 2007-10-24 18:30:32 UTC
(rev 15548)
@@ -867,7 +867,7 @@
public void send() throws DisconnectedException {
prb = new PartiallyReceivedBulk(node.usm, size,
Node.PACKET_SIZE, data, true);
- transmitter = new BulkTransmitter(prb,
DarknetPeerNode.this, uid, node.outputThrottle);
+ transmitter = new BulkTransmitter(prb,
DarknetPeerNode.this, uid, node.outputThrottle, false);
if(logMINOR)
Logger.minor(this, "Sending "+uid);
node.executor.execute(new Runnable() {
Modified: trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
===================================================================
--- trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2007-10-24 18:16:29 UTC (rev 15547)
+++ trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2007-10-24 18:30:32 UTC (rev 15548)
@@ -505,7 +505,7 @@
final BulkTransmitter bt;
try {
- bt = new BulkTransmitter(prb, source, uid,
updateManager.node.outputThrottle);
+ bt = new BulkTransmitter(prb, source, uid,
updateManager.node.outputThrottle, false);
} catch (DisconnectedException e) {
Logger.error(this, "Peer "+source+" asked us for the
blob file for the revocation key, then disconnected: "+e, e);
return true;
@@ -878,7 +878,7 @@
final BulkTransmitter bt;
try {
- bt = new BulkTransmitter(prb, source, uid,
updateManager.node.outputThrottle);
+ bt = new BulkTransmitter(prb, source, uid,
updateManager.node.outputThrottle, false);
} catch (DisconnectedException e) {
Logger.error(this, "Peer "+source+" asked us for the
blob file for the main jar, then disconnected: "+e, e);
return true;