ASN1. Refined dumping output and refactored some codes
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Converter.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Converter.java
index b1efd93..820d08b 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Converter.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Asn1Converter.java
@@ -47,7 +47,7 @@
tmpValue.decode(parseResult);
return tmpValue;
} else {
- throw new IOException("Unknow type of tag=" + parseResult.tag());
+ throw new IOException("Unexpected item: " + parseResult.typeStr());
}
}
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Tag.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Tag.java
index 3768ae7..d248802 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/Tag.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/Tag.java
@@ -140,6 +140,16 @@
return String.format("0x%02X", tagByte());
}
+ public String typeStr() {
+ if (isUniversal()) {
+ return universalTag().toStr();
+ } else if (isAppSpecific()) {
+ return "application [" + tagNo() + "]";
+ } else {
+ return "context [" + tagNo() + "]";
+ }
+ }
+
public static Tag newAppTag(int tagNo) {
return new Tag(TagClass.APPLICATION, tagNo);
}
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Container.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Container.java
index 7cbd471..d423e76 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Container.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Container.java
@@ -66,19 +66,13 @@
@Override
public String toString() {
- String typeStr;
- if (tag().isUniversal()) {
- typeStr = tag().universalTag().toStr();
- } else if (tag().isAppSpecific()) {
- typeStr = "application " + tagNo();
- } else {
- typeStr = "[" + tagNo() + "]";
- }
- return typeStr + " ["
+ String typeStr = tag().typeStr();
+ typeStr += " ["
+ "tag=" + tag()
+ ", off=" + getOffset()
+ ", len=" + getHeaderLength() + "+" + getBodyLength()
+ (isDefinitiveLength() ? "" : "(undefined)")
+ "]";
+ return typeStr;
}
}
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Item.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Item.java
index 1e4f6f6..d70af2f 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Item.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1Item.java
@@ -37,13 +37,6 @@
@Override
public String toString() {
String valueStr = "##undecoded##";
- String typeStr = tag().isUniversal() ? tag().universalTag().toStr()
- : tag().tagClass().name().toLowerCase();
- return typeStr + " ["
- + "tag=" + tag()
- + ", off=" + getOffset()
- + ", len=" + getHeaderLength() + "+" + getBodyLength()
- + "] "
- + valueStr;
+ return typeStr() + valueStr;
}
}
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1ParseResult.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1ParseResult.java
index bf80ced..78b7865 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1ParseResult.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/parse/Asn1ParseResult.java
@@ -105,4 +105,12 @@
public boolean checkBodyFinished(int pos) {
return getBodyEnd() != -1 && pos >= getBodyEnd();
}
+
+ public String typeStr() {
+ return tag().typeStr() + " ["
+ + "tag=" + tag()
+ + ", off=" + getOffset()
+ + ", len=" + getHeaderLength() + "+" + getBodyLength()
+ + "] ";
+ }
}
diff --git a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
index 97221ce..97b2883 100644
--- a/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
+++ b/kerby-asn1/src/main/java/org/apache/kerby/asn1/type/Asn1CollectionType.java
@@ -110,9 +110,7 @@
}
}
if (foundPos == -1) {
- String error = String.format("Unexpected item tag=%s, off=%d",
- parseItem.tag(), parseItem.getOffset());
- throw new IOException(error);
+ throw new IOException("Unexpected item: " + parseItem.typeStr());
}
lastPos = foundPos;