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.java26
1 files changed, 21 insertions, 5 deletions
diff --git a/gnu/javax/net/ssl/provider/Extension.java b/gnu/javax/net/ssl/provider/Extension.java
index 5442daa02..c79e58832 100644
--- a/gnu/javax/net/ssl/provider/Extension.java
+++ b/gnu/javax/net/ssl/provider/Extension.java
@@ -55,28 +55,44 @@ import java.nio.ByteOrder;
*
* @author csm@gnu.org
*/
-public final class Extension implements Constructed
+public final class Extension implements Builder, Constructed
{
// Fields.
// -------------------------------------------------------------------------
- private final ByteBuffer buffer;
+ private ByteBuffer buffer;
// Constructor.
// -------------------------------------------------------------------------
- Extension(final ByteBuffer buffer)
+ public Extension(final ByteBuffer buffer)
{
this.buffer = buffer.duplicate().order(ByteOrder.BIG_ENDIAN);
}
+
+ public Extension(final Type type, final Value value)
+ {
+ ByteBuffer valueBuffer = value.buffer();
+ int length = 2 + 2 + valueBuffer.remaining();
+ buffer = ByteBuffer.allocate(length);
+ buffer.putShort((short) type.getValue());
+ buffer.putShort((short) valueBuffer.remaining());
+ buffer.put(valueBuffer);
+ buffer.rewind();
+ }
// Instance methods.
// -------------------------------------------------------------------------
public int length ()
{
- return (buffer.getShort (2) & 0xFFFF) + 2;
+ return (buffer.getShort (2) & 0xFFFF) + 4;
+ }
+
+ public ByteBuffer buffer()
+ {
+ return (ByteBuffer) buffer.duplicate().limit(length());
}
public Type type()
@@ -224,7 +240,7 @@ public final class Extension implements Constructed
}
}
- public static abstract class Value implements Constructed
+ public static abstract class Value implements Builder, Constructed
{
}
}