New HTTP2 module (low level)
diff --git a/core/src/main/java/org/apache/mina/util/ByteBufferDumper.java b/core/src/main/java/org/apache/mina/util/ByteBufferDumper.java
index e351a13..b56e013 100644
--- a/core/src/main/java/org/apache/mina/util/ByteBufferDumper.java
+++ b/core/src/main/java/org/apache/mina/util/ByteBufferDumper.java
@@ -143,7 +143,10 @@
ByteBuffer res = ByteBuffer.allocate(size);
for (int i = 0; i < size; i++) {
- int b = ((Character.digit(hex.charAt(i * 2), 16) << 4) | (Character.digit(hex.charAt(i * 2 + 1), 16)));
+ int b = Integer.parseInt(hex.substring(i*2, i*2 + 2), 16);
+ if (Integer.highestOneBit(b) == 128) {
+ b = b - 256;
+ }
res.put((byte) b);
}
diff --git a/core/src/test/java/org/apache/mina/util/ByteBufferDumperTest.java b/core/src/test/java/org/apache/mina/util/ByteBufferDumperTest.java
index e319521..00985bd 100644
--- a/core/src/test/java/org/apache/mina/util/ByteBufferDumperTest.java
+++ b/core/src/test/java/org/apache/mina/util/ByteBufferDumperTest.java
@@ -92,4 +92,31 @@
bb.flip();
assertEquals("000102FE", ByteBufferDumper.toHex(bb));
}
+
+ @Test
+ public void checkFromHexStringEmptyStringReturnsEmptyByteArray() {
+ ByteBuffer buffer = ByteBufferDumper.fromHexString("");
+ assertEquals(0, buffer.remaining());
+ }
+
+ @Test
+ public void checkFromHexStringNormalStringReturnsByteArray() {
+ ByteBuffer buffer = ByteBufferDumper.fromHexString("ff");
+ assertEquals(1, buffer.remaining());
+ assertEquals(-1, buffer.get());
+ }
+
+ @Test
+ public void checkFromHexStringNormalStringUppercaseReturnsByteArray() {
+ ByteBuffer buffer = ByteBufferDumper.fromHexString("FF");
+ assertEquals(1, buffer.remaining());
+ assertEquals(-1, buffer.get());
+ }
+
+ @Test(expected=NumberFormatException.class)
+ public void checkFromHexStringInvalidStringReturnsException() {
+ ByteBuffer buffer = ByteBufferDumper.fromHexString("non-hexastring");
+ assertEquals(1, buffer.remaining());
+ assertEquals(-1, buffer.get());
+ }
}