Author: toad
Date: 2006-03-13 20:56:40 +0000 (Mon, 13 Mar 2006)
New Revision: 8241

Modified:
   trunk/freenet/src/freenet/keys/FreenetURI.java
   trunk/freenet/src/freenet/node/Version.java
   trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java
Log:
531:
doh

Modified: trunk/freenet/src/freenet/keys/FreenetURI.java
===================================================================
--- trunk/freenet/src/freenet/keys/FreenetURI.java      2006-03-13 20:25:10 UTC 
(rev 8240)
+++ trunk/freenet/src/freenet/keys/FreenetURI.java      2006-03-13 20:56:40 UTC 
(rev 8241)
@@ -383,6 +383,7 @@

        static final byte CHK = 1;
        static final byte SSK = 2;
+       static final byte KSK = 3;

        public static FreenetURI readFullBinaryKeyWithLength(DataInputStream 
dis) throws IOException {
                int len = dis.readShort();
@@ -405,22 +406,29 @@
                        keyType = "CHK";
                else if(type == SSK)
                        keyType = "SSK";
-               else 
+               else if(type == KSK)
+                       keyType = "KSK";
+               else
                        throw new MalformedURLException("Unrecognized type 
"+type);
-               // routingKey is a hash, so is exactly 32 bytes
-               byte[] routingKey = new byte[32];
-               dis.readFully(routingKey);
-               // cryptoKey is a 256 bit AES key, so likewise
-               byte[] cryptoKey = new byte[32];
-               dis.readFully(cryptoKey);
-               // Number of bytes of extra depends on key type
-               int extraLen;
-               if(type == CHK)
-                       extraLen = ClientCHK.EXTRA_LENGTH;
-               else //if(type == SSK)
-                       extraLen = ClientSSK.EXTRA_LENGTH;
-               byte[] extra = new byte[extraLen];
-               dis.readFully(extra);
+               byte[] routingKey = null;
+               byte[] cryptoKey = null;
+               byte[] extra = null;
+               if(type == CHK || type == SSK) {
+                       // routingKey is a hash, so is exactly 32 bytes
+                       routingKey = new byte[32];
+                       dis.readFully(routingKey);
+                       // cryptoKey is a 256 bit AES key, so likewise
+                       cryptoKey = new byte[32];
+                       dis.readFully(cryptoKey);
+                       // Number of bytes of extra depends on key type
+                       int extraLen;
+                       if(type == CHK)
+                               extraLen = ClientCHK.EXTRA_LENGTH;
+                       else //if(type == SSK)
+                               extraLen = ClientSSK.EXTRA_LENGTH;
+                       extra = new byte[extraLen];
+                       dis.readFully(extra);
+               }
                String docName = null;
                if(type != CHK)
                        docName = dis.readUTF();
@@ -462,19 +470,23 @@
                        dos.writeByte(CHK);
                } else if(keyType.equals("SSK")) {
                        dos.writeByte(SSK);
+               } else if(keyType.equals("KSK")) {
+                       dos.writeByte(KSK);
                } else
                        throw new MalformedURLException("Cannot write key of 
type "+keyType+" - do not know how");
-               if(routingKey.length != 32)
-                       throw new MalformedURLException("Routing key must be of 
length 32");
-               dos.write(routingKey);
-               if(cryptoKey.length != 32)
-                       throw new MalformedURLException("Crypto key must be of 
length 32");
-               dos.write(cryptoKey);
-               if(keyType.equals("CHK") && extra.length != 
ClientCHK.EXTRA_LENGTH)
-                       throw new MalformedURLException("Wrong number of extra 
bytes for CHK");
-               if(keyType.equals("SSK"))
-                       throw new UnsupportedOperationException("SSK support 
not yet implemented");
-               dos.write(extra);
+               if(!keyType.equals("KSK")) {
+                       if(routingKey.length != 32)
+                               throw new MalformedURLException("Routing key 
must be of length 32");
+                       dos.write(routingKey);
+                       if(cryptoKey.length != 32)
+                               throw new MalformedURLException("Crypto key 
must be of length 32");
+                       dos.write(cryptoKey);
+                       if(keyType.equals("CHK") && extra.length != 
ClientCHK.EXTRA_LENGTH)
+                               throw new MalformedURLException("Wrong number 
of extra bytes for CHK");
+                       if(keyType.equals("SSK") && extra.length != 
ClientSSK.EXTRA_LENGTH)
+                               throw new MalformedURLException("Wrong number 
of extra bytes for SSK");
+                       dos.write(extra);
+               }
                if(!keyType.equals("CHK"))
                        dos.writeUTF(docName);
                if(metaStr != null) {

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-03-13 20:25:10 UTC (rev 
8240)
+++ trunk/freenet/src/freenet/node/Version.java 2006-03-13 20:56:40 UTC (rev 
8241)
@@ -20,7 +20,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 530;
+       private static final int buildNumber = 531;

        /** Oldest build of Fred we will talk to */
        private static final int lastGoodBuild = 507;

Modified: trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java    2006-03-13 
20:25:10 UTC (rev 8240)
+++ trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java    2006-03-13 
20:56:40 UTC (rev 8241)
@@ -200,8 +200,13 @@
                handler.startClientPut(this);
        }

+       /**
+        * Get the length of the trailing field.
+        */
        long dataLength() {
-               return dataLength;
+               if(uploadFromType == UPLOAD_FROM_DIRECT)
+                       return dataLength;
+               else return 0;
        }

        String getIdentifier() {


Reply via email to