Author: toad
Date: 2006-07-25 20:13:46 +0000 (Tue, 25 Jul 2006)
New Revision: 9761
Modified:
trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
trunk/freenet/src/freenet/client/async/SplitFileInserter.java
trunk/freenet/src/freenet/node/PacketSender.java
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/RequestSender.java
trunk/freenet/src/freenet/node/Version.java
trunk/freenet/src/freenet/node/fcp/ClientPut.java
Log:
900: Various bugfixes.
Modified: trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
2006-07-25 20:03:22 UTC (rev 9760)
+++ trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
2006-07-25 20:13:46 UTC (rev 9761)
@@ -303,8 +303,6 @@
} catch (MalformedURLException e) {
throw new
FetchException(FetchException.INVALID_URI, e);
}
- if((key instanceof ClientCHK) &&
!((ClientCHK)key).isMetadata())
- rcb.onBlockSetFinished(this);
LinkedList newMetaStrings =
uri.listMetaStrings();
// Move any new meta strings to beginning of
our list of remaining meta strings
@@ -315,6 +313,8 @@
// **FIXME** Is key in the call to
SingleFileFetcher here supposed to be this.key or the same key used in the try
block above? MultiLevelMetadataCallback.onSuccess() below uses this.key, thus
the question
SingleFileFetcher f = new
SingleFileFetcher((ClientGetter)parent, rcb, clientMetadata, key, metaStrings,
ctx, actx, maxRetries, recursionLevel, false, null, true, returnBucket);
+ if((key instanceof ClientCHK) &&
!((ClientCHK)key).isMetadata())
+ rcb.onBlockSetFinished(this);
if(metadata.isCompressed()) {
Compressor codec =
Compressor.getCompressionAlgorithmByMetadataID(metadata.getCompressionCodec());
f.addDecompressor(codec);
Modified: trunk/freenet/src/freenet/client/async/SplitFileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileInserter.java
2006-07-25 20:03:22 UTC (rev 9760)
+++ trunk/freenet/src/freenet/client/async/SplitFileInserter.java
2006-07-25 20:13:46 UTC (rev 9761)
@@ -227,7 +227,6 @@
public void segmentHasURIs(SplitFileInserterSegment segment) {
if(haveSentMetadata) {
- Logger.error(this, "WTF? Already sent metadata");
return;
}
Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java 2006-07-25 20:03:22 UTC
(rev 9760)
+++ trunk/freenet/src/freenet/node/PacketSender.java 2006-07-25 20:13:46 UTC
(rev 9761)
@@ -163,7 +163,7 @@
// Is the node dead?
if(now - pn.lastReceivedPacketTime() >
pn.maxTimeBetweenReceivedPackets()) {
- Logger.error(this, "Disconnecting from "+pn+" - haven't
received packets recently");
+ Logger.normal(this, "Disconnecting from "+pn+" -
haven't received packets recently");
pn.disconnected();
continue;
}
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2006-07-25 20:03:22 UTC
(rev 9760)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2006-07-25 20:13:46 UTC
(rev 9761)
@@ -752,7 +752,7 @@
public boolean isConnected(){
long now = System.currentTimeMillis();
synchronized(this) {
- if( isConnected ) {
+ if( isConnected && currentTracker != null ) {
timeLastConnected = now;
return true;
}
@@ -1243,13 +1243,14 @@
} catch (FSParseException e1) {
synchronized(this) {
bogusNoderef = true;
+ // Disconnect, something broke
+ isConnected = false;
}
Logger.error(this, "Failed to parse new noderef for
"+this+": "+e1, e1);
- // Treat as invalid version
}
- synchronized(this) {
- isRoutable = true;
- }
+ boolean routable = true;
+ boolean newer = false;
+ boolean older = false;
if(reverseInvalidVersion()) {
try {
node.setNewestPeerLastGoodVersion(Version.getArbitraryBuildNumber(getLastGoodVersion()));
@@ -1257,68 +1258,45 @@
// ignore
}
Logger.normal(this, "Not connecting to "+this+" -
reverse invalid version "+Version.getVersionString()+" for peer's
lastGoodversion: "+getLastGoodVersion());
- synchronized(this) {
- verifiedIncompatibleNewerVersion = true;
- isRoutable = false;
- }
- node.peers.disconnected(this);
+ newer = true;
} else {
- synchronized(this) {
- verifiedIncompatibleNewerVersion = false;
- }
+ newer = false;
}
if(invalidVersion()) {
Logger.normal(this, "Not connecting to "+this+" -
invalid version "+getVersion());
- synchronized(this) {
- verifiedIncompatibleOlderVersion = true;
- isRoutable = false;
- }
- node.peers.disconnected(this);
+ older = true;
+ routable = false;
} else {
- synchronized(this) {
- verifiedIncompatibleOlderVersion = false;
- }
+ older = false;
}
- setPeerNodeStatus(now);
+ synchronized(this) {
+ isRoutable = routable;
+ verifiedIncompatibleNewerVersion = newer;
+ verifiedIncompatibleOlderVersion = older;
+ }
KeyTracker newTracker = new KeyTracker(this, encCipher, encKey);
changedIP(replyTo);
boolean bootIDChanged = false;
synchronized(this) {
bootIDChanged = (thisBootID != this.bootID);
+ if(bootIDChanged)
+ Logger.minor(this, "Changed boot ID from
"+bootID+" to "+thisBootID+" for "+getPeer());
this.bootID = thisBootID;
+ connectedTime = now;
}
if(bootIDChanged) {
- synchronized(this) {
- connectedTime = now;
- Logger.minor(this, "Changed boot ID from
"+bootID+" to "+thisBootID+" for "+getPeer());
- }
- boolean previousTrackerIsNull = true;
+ KeyTracker oldPrev = null;
+ KeyTracker oldCur = null;
synchronized(this) {
- previousTrackerIsNull = (previousTracker ==
null);
+ oldPrev = previousTracker;
+ oldCur = currentTracker;
+ previousTracker = currentTracker = null;
}
- if(!previousTrackerIsNull) {
- KeyTracker old = null;
- synchronized(this) {
- old = previousTracker;
- previousTracker = null;
- }
- old.completelyDeprecated(newTracker);
+ if(oldPrev != null) {
+ oldPrev.completelyDeprecated(newTracker);
}
- synchronized(this) {
- previousTracker = null;
- }
- boolean currentTrackerIsNull = true;
- synchronized(this) {
- currentTrackerIsNull = (currentTracker == null);
- }
- if(!currentTrackerIsNull) {
- KeyTracker old = null;
- synchronized(this) {
- old = currentTracker;
- currentTracker = null;
- }
- old.completelyDeprecated(newTracker);
- }
+ if(oldCur != null)
+ oldCur.completelyDeprecated(newTracker);
node.lm.lostOrRestartedNode(this);
} // else it's a rekey
@@ -1330,33 +1308,20 @@
Logger.minor(this, "sentHandshake() being called for
unverifiedTracker: "+getPeer());
sentHandshake();
} else {
+ KeyTracker prev;
synchronized(this) {
- previousTracker = currentTracker;
+ prev = currentTracker;
+ previousTracker = prev;
currentTracker = newTracker;
unverifiedTracker = null;
- }
- boolean previousTrackerIsNull = true;
- synchronized(this) {
- previousTrackerIsNull = (previousTracker ==
null);
- }
- if(!previousTrackerIsNull) {
- KeyTracker localPreviousTracker = null;
- synchronized(this) {
- localPreviousTracker = previousTracker;
- }
- localPreviousTracker.deprecated();
- }
- synchronized(this) {
neverConnected = false;
peerAddedTime = 0; // don't store anymore
- }
- setPeerNodeStatus(now);
- synchronized(this) {
ctx = null;
}
+ if(prev != null)
+ prev.deprecated();
+ setPeerNodeStatus(now);
}
- if(!isConnected())
- node.peers.disconnected(this);
synchronized(this) {
Logger.normal(this, "Completed handshake with "+this+"
on "+replyTo+" - current: "+currentTracker+" old: "+previousTracker+"
unverified: "+unverifiedTracker+" bootID: "+thisBootID+" getName():
"+getName());
}
@@ -1366,9 +1331,11 @@
Logger.error(this, "Disconnected in completedHandshake
with "+this);
return true; // i suppose
}
- if(isConnected()) {
- node.peers.addConnectedPeer(this);
- }
+ if(newer || older || !isConnected())
+ node.peers.disconnected(this);
+ else
+ node.peers.addConnectedPeer(this);
+ setPeerNodeStatus(now);
synchronized(this) {
sentInitialMessages = false;
}
@@ -1401,7 +1368,7 @@
sendAsync(locMsg, null, 0, null);
sendAsync(ipMsg, null, 0, null);
} catch (NotConnectedException e) {
- Logger.error(this, "Completed handshake with "+getPeer()+" but
disconnected!!!", new Exception("error"));
+ Logger.error(this, "Completed handshake with "+getPeer()+" but
disconnected ("+isConnected+":"+currentTracker+"!!!: "+e, e);
}
}
Modified: trunk/freenet/src/freenet/node/RequestSender.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestSender.java 2006-07-25 20:03:22 UTC
(rev 9760)
+++ trunk/freenet/src/freenet/node/RequestSender.java 2006-07-25 20:13:46 UTC
(rev 9761)
@@ -74,7 +74,12 @@
public String toString() {
return super.toString()+" for "+uid;
}
-
+
+ /**
+ * RequestSender constructor.
+ * @param key The key to request. Its public key should have been looked up
+ * already; RequestSender will not look it up.
+ */
public RequestSender(Key key, DSAPublicKey pubKey, short htl, long uid,
Node n, double nearestLoc,
PeerNode source) {
this.key = key;
@@ -85,6 +90,7 @@
this.source = source;
this.nearestLoc = nearestLoc;
target = key.toNormalizedDouble();
+ node.addRequestSender(key, htl, this);
}
public void start() {
@@ -96,12 +102,9 @@
public void run() {
if((key instanceof NodeSSK) && (pubKey == null)) {
pubKey = ((NodeSSK)key).getPubKey();
- if(pubKey == null)
- pubKey = node.getKey(((NodeSSK)key).getPubKeyHash());
}
short origHTL = htl;
- node.addRequestSender(key, htl, this);
HashSet nodesRoutedTo = new HashSet();
HashSet nodesNotIgnored = new HashSet();
try {
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-07-25 20:03:22 UTC (rev
9760)
+++ trunk/freenet/src/freenet/node/Version.java 2006-07-25 20:13:46 UTC (rev
9761)
@@ -18,7 +18,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- private static final int buildNumber = 899;
+ private static final int buildNumber = 900;
/** Oldest build of Fred we will talk to */
private static final int oldLastGoodBuild = 870;
Modified: trunk/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPut.java 2006-07-25 20:03:22 UTC
(rev 9760)
+++ trunk/freenet/src/freenet/node/fcp/ClientPut.java 2006-07-25 20:13:46 UTC
(rev 9761)
@@ -115,7 +115,7 @@
targetURI = null;
} else if(uploadFrom == ClientPutMessage.UPLOAD_FROM_DIRECT) {
origFilename = null;
- if(!succeeded) {
+ if(!finished) {
byte[] key =
HexUtil.hexToBytes(fs.get("TempBucket.DecryptKey"));
String fnam = fs.get("TempBucket.Filename");
long sz =
Long.parseLong(fs.get("TempBucket.Size"));
@@ -180,12 +180,14 @@
fs.put("UploadFrom",
ClientPutMessage.uploadFromString(uploadFrom));
if(uploadFrom == ClientPutMessage.UPLOAD_FROM_DISK) {
fs.put("Filename", origFilename.getPath());
- } else if(uploadFrom == ClientPutMessage.UPLOAD_FROM_DIRECT) {
- // the bucket is a persistent encrypted temp bucket
- PaddedEphemerallyEncryptedBucket bucket =
(PaddedEphemerallyEncryptedBucket) data;
- fs.put("TempBucket.DecryptKey",
HexUtil.bytesToHex(bucket.getKey()));
- fs.put("TempBucket.Filename",
((FileBucket)(bucket.getUnderlying())).getName());
- fs.put("TempBucket.Size", Long.toString(bucket.size()));
+ } else if(uploadFrom == ClientPutMessage.UPLOAD_FROM_DIRECT) {
+ if(!finished) {
+ // the bucket is a persistent encrypted temp
bucket
+ PaddedEphemerallyEncryptedBucket bucket =
(PaddedEphemerallyEncryptedBucket) data;
+ fs.put("TempBucket.DecryptKey",
HexUtil.bytesToHex(bucket.getKey()));
+ fs.put("TempBucket.Filename",
((FileBucket)(bucket.getUnderlying())).getName());
+ fs.put("TempBucket.Size",
Long.toString(bucket.size()));
+ }
} else if(uploadFrom == ClientPutMessage.UPLOAD_FROM_REDIRECT) {
fs.put("TargetURI", targetURI.toString());
}