summaryrefslogtreecommitdiff
path: root/gnu/javax/net/ssl/provider/ClientHello.java
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/javax/net/ssl/provider/ClientHello.java')
-rw-r--r--gnu/javax/net/ssl/provider/ClientHello.java33
1 files changed, 10 insertions, 23 deletions
diff --git a/gnu/javax/net/ssl/provider/ClientHello.java b/gnu/javax/net/ssl/provider/ClientHello.java
index 9592bb8ff..cf1635db6 100644
--- a/gnu/javax/net/ssl/provider/ClientHello.java
+++ b/gnu/javax/net/ssl/provider/ClientHello.java
@@ -38,25 +38,12 @@ exception statement from your version. */
package gnu.javax.net.ssl.provider;
-import java.io.BufferedReader;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.OutputStream;
import java.io.PrintWriter;
-import java.io.StringReader;
import java.io.StringWriter;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.net.ssl.SSLProtocolException;
-
/**
* A ClientHello handshake message.
*
@@ -87,6 +74,7 @@ public class ClientHello implements Handshake.Body
protected static final int SESSID_OFFSET2 = SESSID_OFFSET + 1;
protected ByteBuffer buffer;
+ protected boolean disableExtensions;
// Constructor.
// -------------------------------------------------------------------------
@@ -94,18 +82,19 @@ public class ClientHello implements Handshake.Body
public ClientHello (final ByteBuffer buffer)
{
this.buffer = buffer.duplicate().order(ByteOrder.BIG_ENDIAN);
+ disableExtensions = false;
}
// Instance methods.
// -------------------------------------------------------------------------
- public int length ()
+ public int length()
{
int len = SESSID_OFFSET2 + buffer.get(SESSID_OFFSET);
len += (buffer.getShort(len) & 0xFFFF) + 2;
len += (buffer.get(len) & 0xFF) + 1;
- if (hasExtensions())
- len += (buffer.get(len) & 0xFFFF) + 2;
+ if (!disableExtensions && len + 1 < buffer.capacity())
+ len += (buffer.getShort(len) & 0xFFFF) + 2;
return len;
}
@@ -164,22 +153,20 @@ public class ClientHello implements Handshake.Body
public boolean hasExtensions()
{
int offset = getExtensionsOffset();
- if (offset + 1 > buffer.limit())
- return false;
- return (buffer.getShort(offset) & 0xFFFF) == 0;
+ return (offset + 1 > buffer.capacity());
}
public ExtensionList extensions()
{
int offset = getExtensionsOffset ();
- if (offset >= buffer.limit())
+ if (offset + 1 >= buffer.limit())
return null;
int len = buffer.getShort(offset) & 0xFFFF;
if (len == 0)
len = buffer.limit() - offset - 2;
- ByteBuffer ebuf = ((ByteBuffer) buffer.duplicate ().position (offset)
- .limit (offset + len + 2)).slice ();
- return new ExtensionList (ebuf);
+ ByteBuffer ebuf = ((ByteBuffer) buffer.duplicate().position(offset)
+ .limit(offset + len + 2)).slice ();
+ return new ExtensionList(ebuf);
}
public int extensionsLength()