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
-               
        }
+       
 }


Reply via email to