You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by jo...@apache.org on 2020/09/23 14:33:18 UTC

[mina] branch 2.1.X updated: HexDump improvements

This is an automated email from the ASF dual-hosted git repository.

johnnyv pushed a commit to branch 2.1.X
in repository https://gitbox.apache.org/repos/asf/mina.git


The following commit(s) were added to refs/heads/2.1.X by this push:
     new 6540022  HexDump improvements
6540022 is described below

commit 6540022cb71f25faab43b1f0a3cbce461484bb55
Author: Jonathan Valliere <jo...@apache.org>
AuthorDate: Wed Sep 23 10:33:12 2020 -0400

    HexDump improvements
---
 .../apache/mina/core/buffer/AbstractIoBuffer.java  | 22 -------
 .../java/org/apache/mina/core/buffer/IoBuffer.java | 34 ++++++++---
 .../apache/mina/core/buffer/IoBufferHexDumper.java | 71 +++++++++++-----------
 .../apache/mina/core/buffer/IoBufferWrapper.java   | 21 -------
 4 files changed, 60 insertions(+), 88 deletions(-)

diff --git a/mina-core/src/main/java/org/apache/mina/core/buffer/AbstractIoBuffer.java b/mina-core/src/main/java/org/apache/mina/core/buffer/AbstractIoBuffer.java
index e725f08..cc8c758 100644
--- a/mina-core/src/main/java/org/apache/mina/core/buffer/AbstractIoBuffer.java
+++ b/mina-core/src/main/java/org/apache/mina/core/buffer/AbstractIoBuffer.java
@@ -1575,28 +1575,6 @@ public abstract class AbstractIoBuffer extends IoBuffer {
 	 * {@inheritDoc}
 	 */
 	@Override
-	public String getHexDump() {
-		return this.getHexDump(Integer.MAX_VALUE);
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	public String getHexDump(int lengthLimit) {
-		return getHexDump(lengthLimit, false);
-	}
-
-	@Override
-	public String getHexDump(int lengthLimit, boolean pretty) {
-		return (pretty) ? IoBufferHexDumper.getPrettyHexDump(this, this.position(), lengthLimit)
-				: IoBufferHexDumper.getHexdump(this, lengthLimit);
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
 	public String getString(CharsetDecoder decoder) throws CharacterCodingException {
 		if (!hasRemaining()) {
 			return "";
diff --git a/mina-core/src/main/java/org/apache/mina/core/buffer/IoBuffer.java b/mina-core/src/main/java/org/apache/mina/core/buffer/IoBuffer.java
index 648d56d..844ca96 100644
--- a/mina-core/src/main/java/org/apache/mina/core/buffer/IoBuffer.java
+++ b/mina-core/src/main/java/org/apache/mina/core/buffer/IoBuffer.java
@@ -1512,28 +1512,42 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
 	 * 
 	 * @return hexidecimal representation of this buffer
 	 */
-	public abstract String getHexDump();
+	public String getHexDump() {
+		return this.getHexDump(this.remaining(), false);
+	}
 
 	/**
-	 * Return hexdump of this buffer with limited length.
+	 * Returns hexdump of this buffer. The data and pointer are not changed as a
+	 * result of this method call.
 	 * 
-	 * @param lengthLimit The maximum number of bytes to dump from the current
-	 *                    buffer position.
 	 * @return hexidecimal representation of this buffer
 	 */
-	public abstract String getHexDump(int lengthLimit);
+	public String getHexDump(boolean pretty) {
+		return getHexDump(this.remaining(), pretty);
+	}
 
 	/**
 	 * Return hexdump of this buffer with limited length.
 	 * 
-	 * @param lengthLimit The maximum number of bytes to dump from the current
-	 *                    buffer position.
-	 * 
-	 * @param pretty      Produces multi-line pretty hex dumps
+	 * @param length The maximum number of bytes to dump from the current buffer
+	 *               position.
+	 * @return hexidecimal representation of this buffer
+	 */
+	public String getHexDump(int length) {
+		return getHexDump(length, false);
+	}
+
+	/**
+	 * Return hexdump of this buffer with limited length.
 	 * 
+	 * @param length The maximum number of bytes to dump from the current buffer
+	 *               position.
 	 * @return hexidecimal representation of this buffer
 	 */
-	public abstract String getHexDump(int lengthLimit, boolean pretty);
+	public String getHexDump(int length, boolean pretty) {
+		return (pretty) ? IoBufferHexDumper.getPrettyHexDumpSlice(this, this.position(), length)
+				: IoBufferHexDumper.getHexDumpSlice(this, this.position(), length);
+	}
 
 	// //////////////////////////////
 	// String getters and putters //
diff --git a/mina-core/src/main/java/org/apache/mina/core/buffer/IoBufferHexDumper.java b/mina-core/src/main/java/org/apache/mina/core/buffer/IoBufferHexDumper.java
index 1bcf322..14f4582 100644
--- a/mina-core/src/main/java/org/apache/mina/core/buffer/IoBufferHexDumper.java
+++ b/mina-core/src/main/java/org/apache/mina/core/buffer/IoBufferHexDumper.java
@@ -20,6 +20,7 @@
 package org.apache.mina.core.buffer;
 
 import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
 
 /**
  * Provides utility methods to dump an {@link IoBuffer} into a hex formatted
@@ -32,21 +33,25 @@ class IoBufferHexDumper {
 	/**
 	 * Dumps an {@link IoBuffer} to a hex formatted string.
 	 * 
-	 * @param in     the buffer to dump
-	 * @param length the limit at which hex dumping will stop
+	 * @param buf    the buffer to dump
+	 * @param offset the starting position to begin reading the hex dump
+	 * @param length the number of bytes to dump
 	 * @return a hex formatted string representation of the <i>in</i>
 	 *         {@link IoBuffer}.
 	 */
-	public static String getHexdump(IoBuffer in, int length) {
-		if (length < 0) {
-			throw new IllegalArgumentException("length: " + length + " must be non-negative number");
+	public static String getHexDumpSlice(final IoBuffer buf, final int offset, final int length) {
+		if (buf == null) {
+			throw new IllegalArgumentException();
 		}
 
-		int pos = in.position();
-		int rem = in.limit() - pos;
-		int items = Math.min(rem, length);
+		if (length < 0 || offset < 0 || offset + length > buf.limit()) {
+			throw new IndexOutOfBoundsException();
+		}
+
+		int pos = offset;
+		int items = Math.min(offset + length, offset + buf.limit()) - pos;
 
-		if (items == 0) {
+		if (items <= 0) {
 			return "";
 		}
 
@@ -55,7 +60,7 @@ class IoBufferHexDumper {
 		StringBuilder out = new StringBuilder((items * 3) + 6);
 
 		for (;;) {
-			int byteValue = in.get(pos++) & 0xFF;
+			int byteValue = buf.get(pos++) & 0xFF;
 			out.append((char) hexDigit[(byteValue >> 4) & 0x0F]);
 			out.append((char) hexDigit[byteValue & 0xf]);
 
@@ -66,39 +71,32 @@ class IoBufferHexDumper {
 			}
 		}
 
-		if (items != rem) {
-			out.append("...");
-		}
-
 		return out.toString();
 	}
 
 	/**
-	 * Produces a verbose hex dump from the {@link ReadableBuffer}
-	 *
-	 * @return The formatted String representing the content between position() and
-	 *         limit().
-	 */
-	public static final String getPrettyHexDump(final IoBuffer buf) {
-		return getPrettyHexDump(buf, buf.position(), buf.remaining());
-	}
-
-	/**
 	 * Produces a verbose hex dump
 	 *
-	 * @param start   initial position which to read bytes
+	 * @param offset initial position which to read bytes
 	 *
 	 * @param length number of bytes to display
 	 *
 	 * @return The formatted String representing the content between (offset) and
 	 *         (offset+count)
 	 */
-	public static final String getPrettyHexDump(final IoBuffer buf, final int start, final int length) {
-		final int len = Math.min(length, buf.limit() - start);
+	public static final String getPrettyHexDumpSlice(final IoBuffer buf, final int offset, final int length) {
+		if (buf == null) {
+			throw new IllegalArgumentException();
+		}
+
+		if (length < 0 || offset < 0 || offset + length > buf.limit()) {
+			throw new IndexOutOfBoundsException();
+		}
 
+		final int len = Math.min(length, buf.limit() - offset);
 		final byte[] bytes = new byte[len];
 
-		int o = start;
+		int o = offset;
 
 		for (int i = 0; i < len; i++) {
 			bytes[i] = buf.get(o++);
@@ -109,9 +107,9 @@ class IoBufferHexDumper {
 		sb.append("Source ");
 		sb.append(buf);
 		sb.append(" showing index ");
-		sb.append(start);
+		sb.append(offset);
 		sb.append(" through ");
-		sb.append((start + length));
+		sb.append((offset + length));
 		sb.append("\n");
 		sb.append(toPrettyHexDump(bytes, 0, bytes.length));
 
@@ -131,8 +129,12 @@ class IoBufferHexDumper {
 	 * @return string hex dump
 	 */
 	public static final String toPrettyHexDump(final byte[] data, final int pos, final int len) {
-		if ((data == null) || ((pos < 0) | (len < 0)) || ((pos + len) > data.length)) {
-			throw new IllegalArgumentException("byte[] is null || pos < 0 || len < 0 || pos + len > byte[].length");
+		if (data == null) {
+			throw new IllegalArgumentException();
+		}
+
+		if (len < 0 || pos < 0 || pos + len > data.length) {
+			throw new IndexOutOfBoundsException();
 		}
 
 		final StringBuilder b = new StringBuilder();
@@ -141,7 +143,6 @@ class IoBufferHexDumper {
 
 		for (int i = pos, c = 0, line = 16; i < len; i += line) {
 			b.append(String.format("%06d", Integer.valueOf(c)) + "  ");
-
 			b.append(toPrettyHexDumpLine(data, i, Math.min((pos + len) - i, line), 8, line));
 
 			if ((i + line) < len) {
@@ -222,8 +223,8 @@ class IoBufferHexDumper {
 		return b.toString();
 	}
 
-	private static final char hexDigit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e',
-			'f' };
+	private static final char hexDigit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
+			'F' };
 
 	public static final String toHex(final byte b) {
 		// Returns hex String representation of byte
diff --git a/mina-core/src/main/java/org/apache/mina/core/buffer/IoBufferWrapper.java b/mina-core/src/main/java/org/apache/mina/core/buffer/IoBufferWrapper.java
index d0d14dd..49a1201 100644
--- a/mina-core/src/main/java/org/apache/mina/core/buffer/IoBufferWrapper.java
+++ b/mina-core/src/main/java/org/apache/mina/core/buffer/IoBufferWrapper.java
@@ -817,19 +817,6 @@ public class IoBufferWrapper extends IoBuffer {
 	 * {@inheritDoc}
 	 */
 	@Override
-	public String getHexDump() {
-		return buf.getHexDump();
-	}
-
-	@Override
-	public String getHexDump(int lengthLimit, boolean pretty) {
-		return buf.getHexDump(lengthLimit, pretty);
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
 	public String getString(int fieldSize, CharsetDecoder decoder) throws CharacterCodingException {
 		return buf.getString(fieldSize, decoder);
 	}
@@ -1222,14 +1209,6 @@ public class IoBufferWrapper extends IoBuffer {
 	 * {@inheritDoc}
 	 */
 	@Override
-	public String getHexDump(int lengthLimit) {
-		return buf.getHexDump(lengthLimit);
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
 	public boolean prefixedDataAvailable(int prefixLength) {
 		return buf.prefixedDataAvailable(prefixLength);
 	}