Author: toad
Date: 2006-02-09 14:01:19 +0000 (Thu, 09 Feb 2006)
New Revision: 8009
Modified:
trunk/freenet/src/freenet/node/Version.java
trunk/freenet/src/freenet/node/fcp/ClientGet.java
trunk/freenet/src/freenet/node/fcp/ClientPut.java
trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
Log:
438:
Fix FCP not reporting ID collisions.
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-02-09 13:42:01 UTC (rev
8008)
+++ trunk/freenet/src/freenet/node/Version.java 2006-02-09 14:01:19 UTC (rev
8009)
@@ -20,7 +20,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- private static final int buildNumber = 437;
+ private static final int buildNumber = 438;
/** Oldest build of Fred we will talk to */
private static final int lastGoodBuild = 403;
Modified: trunk/freenet/src/freenet/node/fcp/ClientGet.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientGet.java 2006-02-09 13:42:01 UTC
(rev 8008)
+++ trunk/freenet/src/freenet/node/fcp/ClientGet.java 2006-02-09 14:01:19 UTC
(rev 8009)
@@ -12,7 +12,6 @@
import freenet.client.async.BaseClientPutter;
import freenet.client.async.ClientCallback;
import freenet.client.async.ClientGetter;
-import freenet.client.async.ClientPutter;
import freenet.client.events.ClientEvent;
import freenet.client.events.ClientEventListener;
import freenet.client.events.SplitfileProgressEvent;
@@ -66,13 +65,16 @@
this.targetFile = message.diskFile;
this.tempFile = message.tempFile;
getter = new ClientGetter(this, handler.node.fetchScheduler,
uri, fctx, priorityClass, handler.defaultFetchContext);
+ }
+
+ void start() {
try {
getter.start();
} catch (FetchException e) {
onFailure(e, null);
}
}
-
+
public void cancel() {
getter.cancel();
}
@@ -110,6 +112,11 @@
ProtocolErrorMessage pm = new
ProtocolErrorMessage(ProtocolErrorMessage.COULD_NOT_WRITE_FILE, false, null,
identifier);
handler.outputHandler.queue(pm);
data.free();
+ try {
+ fos.close();
+ } catch (IOException e1) {
+ // Ignore
+ }
return;
}
try {
@@ -120,7 +127,7 @@
if(!tempFile.renameTo(targetFile)) {
ProtocolErrorMessage pm = new
ProtocolErrorMessage(ProtocolErrorMessage.COULD_NOT_RENAME_FILE, false, null,
identifier);
handler.outputHandler.queue(pm);
- // Don't delete temp bucket, might want it
+ // Don't delete temp file, user might want it.
}
data.free();
handler.outputHandler.queue(msg);
Modified: trunk/freenet/src/freenet/node/fcp/ClientPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPut.java 2006-02-09 13:42:01 UTC
(rev 8008)
+++ trunk/freenet/src/freenet/node/fcp/ClientPut.java 2006-02-09 14:01:19 UTC
(rev 8009)
@@ -46,6 +46,9 @@
String mimeType = message.contentType;
block = new InsertBlock(message.bucket, new
ClientMetadata(mimeType), uri);
inserter = new ClientPutter(this, message.bucket, uri, new
ClientMetadata(mimeType), ctx, handler.node.putScheduler, priorityClass,
getCHKOnly, false, handler.defaultInsertContext);
+ }
+
+ void start() {
try {
inserter.start();
} catch (InserterException e) {
Modified: trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
2006-02-09 13:42:01 UTC (rev 8008)
+++ trunk/freenet/src/freenet/node/fcp/FCPConnectionHandler.java
2006-02-09 14:01:19 UTC (rev 8009)
@@ -99,32 +99,46 @@
public void startClientGet(ClientGetMessage message) {
String id = message.identifier;
- if(requestsByIdentifier.containsKey(id)) {
+ ClientGet cg = null;
+ boolean success;
+ synchronized(this) {
+ if(isClosed) return;
+ success = !requestsByIdentifier.containsKey(id);
+ if(success) {
+ cg = new ClientGet(this, message);
+ requestsByIdentifier.put(id, cg);
+ }
+ }
+ if(!success) {
Logger.normal(this, "Identifier collision on "+this);
FCPMessage msg = new IdentifierCollisionMessage(id);
outputHandler.queue(msg);
return;
+ } else {
+ cg.start();
}
- synchronized(this) {
- if(isClosed) return;
- ClientGet cg = new ClientGet(this, message);
- }
}
public void startClientPut(ClientPutMessage message) {
String id = message.identifier;
- if(requestsByIdentifier.containsKey(id)) {
+ ClientPut cp = null;
+ boolean success;
+ synchronized(this) {
+ if(isClosed) return;
+ success = !requestsByIdentifier.containsKey(id);
+ if(success) {
+ cp = new ClientPut(this, message);
+ requestsByIdentifier.put(id, cp);
+ }
+ }
+ if(!success) {
Logger.normal(this, "Identifier collision on "+this);
FCPMessage msg = new IdentifierCollisionMessage(id);
outputHandler.queue(msg);
return;
+ } else {
+ cp.start();
}
- synchronized(this) {
- if(isClosed) return;
- ClientPut cg = new ClientPut(this, message);
- }
-
- // TODO Auto-generated method stub
-
}
+
}