aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-10-06 19:54:53 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-10-06 19:54:53 +0200
commit2b958672f6424afbe93fe06e9d67434a14289ee5 (patch)
tree3b53a20718d2f7061dcd77a93ee43736d2a5ca44
parent1091a4fd67111771d70983b7f9d79c043cb328c0 (diff)
Parse only universal primitive
-rw-r--r--ber/dump.go32
1 files changed, 20 insertions, 12 deletions
diff --git a/ber/dump.go b/ber/dump.go
index 3d27b4e..c9c4d9c 100644
--- a/ber/dump.go
+++ b/ber/dump.go
@@ -8,6 +8,23 @@ func Dump(b []byte) string {
return newState(b).dump(0)
}
+func (s *state) universal(h Header) string {
+ switch h.Tag {
+ case tagInteger, tagEnumerated:
+ return fmt.Sprintln(s.unmarshalInt())
+ case tagBoolean:
+ return fmt.Sprintln(s.unmarshalBool())
+ case tagObjectIdentifier:
+ return fmt.Sprintln(s.unmarshalOID())
+ case tagBitString:
+ return fmt.Sprintln(s.unmarshalBitString())
+ case tagIA5String, tagOctetString:
+ return fmt.Sprintln(s.unmarshalString())
+ default:
+ return fmt.Sprintln(s.next())
+ }
+}
+
func (s *state) dump(indent int) (ret string) {
if s.Len() == 0 {
return ""
@@ -17,18 +34,9 @@ func (s *state) dump(indent int) (ret string) {
ret += fmt.Sprintf("%3d: %*s%v: ", s.Len(), 2*indent, "", h)
switch h.Kind {
case kindPrimitive:
- switch h.Tag {
- case tagInteger, tagEnumerated:
- ret += fmt.Sprintln(s.unmarshalInt())
- case tagBoolean:
- ret += fmt.Sprintln(s.unmarshalBool())
- case tagObjectIdentifier:
- ret += fmt.Sprintln(s.unmarshalOID())
- case tagBitString:
- ret += fmt.Sprintln(s.unmarshalBitString())
- case tagIA5String, tagOctetString:
- ret += fmt.Sprintln(s.unmarshalString())
- default:
+ if h.Class == classUniversal {
+ ret += s.universal(h)
+ } else {
ret += fmt.Sprintln(s.next())
}
case kindConstructed: