diff options
Diffstat (limited to 'gnu/javax/net/ssl/provider/ExtensionList.java')
-rw-r--r-- | gnu/javax/net/ssl/provider/ExtensionList.java | 53 |
1 files changed, 36 insertions, 17 deletions
diff --git a/gnu/javax/net/ssl/provider/ExtensionList.java b/gnu/javax/net/ssl/provider/ExtensionList.java index 07c689ae8..d5aaad621 100644 --- a/gnu/javax/net/ssl/provider/ExtensionList.java +++ b/gnu/javax/net/ssl/provider/ExtensionList.java @@ -6,6 +6,7 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.ConcurrentModificationException; import java.util.Iterator; +import java.util.List; import java.util.ListIterator; import java.util.NoSuchElementException; @@ -17,7 +18,7 @@ import java.util.NoSuchElementException; * * @author csm */ -public class ExtensionList implements Iterable<Extension> +public class ExtensionList implements Builder, Iterable<Extension> { private final ByteBuffer buffer; private int modCount; @@ -27,6 +28,23 @@ public class ExtensionList implements Iterable<Extension> this.buffer = buffer.duplicate().order(ByteOrder.BIG_ENDIAN); modCount = 0; } + + public ExtensionList(List<Extension> extensions) + { + int length = 2; + for (Extension extension : extensions) + length += extension.length(); + buffer = ByteBuffer.allocate(length); + buffer.putShort((short) (length - 2)); + for (Extension extension : extensions) + buffer.put(extension.buffer()); + buffer.rewind(); + } + + public ByteBuffer buffer() + { + return (ByteBuffer) buffer.duplicate().limit(length()); + } public Extension get (final int index) { @@ -42,7 +60,8 @@ public class ExtensionList implements Iterable<Extension> if (n < index) throw new IndexOutOfBoundsException ("no elemenet at " + index); int el = buffer.getShort (i+2) & 0xFFFF; - return new Extension (((ByteBuffer) buffer.duplicate().position(i).limit(i+el+4)).slice()); + ByteBuffer b = (ByteBuffer) buffer.duplicate().position(i).limit(i+el+4); + return new Extension(b.slice()); } /** @@ -72,7 +91,7 @@ public class ExtensionList implements Iterable<Extension> */ public int length () { - return buffer.getShort (0) & 0xFFFF; + return (buffer.getShort (0) & 0xFFFF) + 2; } /** @@ -165,31 +184,31 @@ public class ExtensionList implements Iterable<Extension> public Iterator<Extension> iterator() { - return new ExtensionsIterator (); + return new ExtensionsIterator(); } - public String toString () + public String toString() { return toString (null); } - public String toString (final String prefix) + public String toString(final String prefix) { - StringWriter str = new StringWriter (); - PrintWriter out = new PrintWriter (str); - if (prefix != null) out.print (prefix); - out.println ("ExtensionList {"); - if (prefix != null) out.print (prefix); - out.print (" length = "); - out.print (length ()); - out.println (";"); + StringWriter str = new StringWriter(); + PrintWriter out = new PrintWriter(str); + if (prefix != null) out.print(prefix); + out.println("ExtensionList {"); + if (prefix != null) out.print(prefix); + out.print(" length = "); + out.print(length()); + out.println(";"); String subprefix = " "; if (prefix != null) subprefix = prefix + subprefix; for (Extension e : this) - out.println (e.toString(subprefix)); - if (prefix != null) out.print (prefix); - out.println ("};"); + out.println(e.toString(subprefix)); + if (prefix != null) out.print(prefix); + out.print("};"); return str.toString(); } |