diff options
Diffstat (limited to 'gnu/javax/net/ssl/provider/Extension.java')
-rw-r--r-- | gnu/javax/net/ssl/provider/Extension.java | 26 |
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 { } } |