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);
}