summaryrefslogtreecommitdiff
path: root/gnu/javax/net/ssl/provider/Extension.java
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/javax/net/ssl/provider/Extension.java')
-rw-r--r--gnu/javax/net/ssl/provider/Extension.java53
1 files changed, 50 insertions, 3 deletions
diff --git a/gnu/javax/net/ssl/provider/Extension.java b/gnu/javax/net/ssl/provider/Extension.java
index 9e2b69e3b..cd0285ed3 100644
--- a/gnu/javax/net/ssl/provider/Extension.java
+++ b/gnu/javax/net/ssl/provider/Extension.java
@@ -83,7 +83,7 @@ public final class Extension implements Constructed
return Type.forValue (buffer.getShort (0) & 0xFFFF);
}
- public byte[] value()
+ public byte[] valueBytes()
{
int len = buffer.getShort (2) & 0xFFFF;
byte[] value = new byte[len];
@@ -91,6 +91,48 @@ public final class Extension implements Constructed
return value;
}
+ public ByteBuffer valueBuffer()
+ {
+ int len = buffer.getShort(2) & 0xFFFF;
+ return ((ByteBuffer) buffer.duplicate().position(4).limit(len+4)).slice();
+ }
+
+ public Value value()
+ {
+ switch (type ())
+ {
+ case SERVER_NAME:
+ return new ServerNameList(valueBuffer());
+
+ case MAX_FRAGMENT_LENGTH:
+ switch (valueBuffer().get() & 0xFF)
+ {
+ case 1: return MaxFragmentLength.LEN_2_9;
+ case 2: return MaxFragmentLength.LEN_2_10;
+ case 3: return MaxFragmentLength.LEN_2_11;
+ case 4: return MaxFragmentLength.LEN_2_12;
+ default:
+ throw new IllegalArgumentException("invalid max_fragment_len");
+ }
+
+ case TRUNCATED_HMAC:
+ return new TruncatedHMAC();
+
+ case CLIENT_CERTIFICATE_URL:
+ return new CertificateURL(valueBuffer());
+
+ case TRUSTED_CA_KEYS:
+ return new TrustedAuthorities(valueBuffer());
+
+ case STATUS_REQUEST:
+ return new CertificateStatusRequest(valueBuffer());
+
+ case SRP:
+ case CERT_TYPE:
+ }
+ return new UnresolvedExtensionValue(valueBuffer());
+ }
+
public void setLength (final int newLength)
{
if (newLength < 0 || newLength > 65535)
@@ -130,13 +172,14 @@ public final class Extension implements Constructed
out.println(" type = " + type () + ";");
if (prefix != null) out.print (prefix);
out.println(" value =");
- out.println(Util.hexDump(value (), (prefix != null) ? prefix + " " : " "));
+// out.println(Util.hexDump(value (), (prefix != null) ? prefix + " " : " "));
+ out.println(value());
if (prefix != null) out.print (prefix);
out.print("} Extension;");
return str.toString();
}
- // Inner class.
+ // Inner classes.
// -------------------------------------------------------------------------
public static enum Type
@@ -178,4 +221,8 @@ public final class Extension implements Constructed
return value;
}
}
+
+ public static abstract class Value implements Constructed
+ {
+ }
}