From 54caa4e7e085e177ff05b719ae247d21fe8c257e Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 26 Sep 2015 12:04:34 +0200 Subject: Replace with new implementation --- ber/dump.go | 66 +++++++++++++++++++++++++------------------------------------ 1 file changed, 27 insertions(+), 39 deletions(-) (limited to 'ber/dump.go') diff --git a/ber/dump.go b/ber/dump.go index da2c8bf..6faca25 100644 --- a/ber/dump.go +++ b/ber/dump.go @@ -1,52 +1,40 @@ package ber import ( - "bytes" "fmt" ) func Dump(b []byte) string { - return dump(bytes.NewBuffer(b), 0) + return newState(b).dump(0) } -func short(b []byte) string { - if len(b) > 5 { - return fmt.Sprint(b[:5], " ...") +func (s *state) dump(indent int) string { + if s.Len() == 0 { + return "" } - return fmt.Sprint(b) -} - -func dump(r *bytes.Buffer, indent int) (s string) { - class, kind, tag, _, value := Split(r) - - s += fmt.Sprintf("%*s", indent*2, "") - - switch class { - case classUniversal: - switch tag { - case tagInteger: - s += fmt.Sprintln(tag, UnmarshalInt(value)) - case tagObjectIdentifier: - s += fmt.Sprintln(tag, UnmarshalOID(value)) - case tagBitString: - s += fmt.Sprintln(tag, UnmarshalBitString(value)) - case tagIA5String, tagOctetString: - s += fmt.Sprintln(tag, string(value)) - case tagBoolean: - s += fmt.Sprintln(tag, UnmarshalBool(value[0])) - default: - s += fmt.Sprintln(tag, kind, short(value)) + //fmt.Printf("%*s%x %x\n", 2*indent, "", s.Len(), s.Bytes()) + for s.Len() > 0 { + h := s.unmarshalClass() + fmt.Printf("%*s%v: ", 2*indent, "", h) + if h.Class == classUniversal && h.Kind == kindPrimitive { + switch h.Tag { + case tagInteger, tagEnumerated: + fmt.Println(s.unmarshalInt()) + case tagBoolean: + fmt.Println(s.unmarshalBool()) + case tagObjectIdentifier: + fmt.Println(s.unmarshalOID()) + case tagBitString: + fmt.Println(s.unmarshalBitString()) + case tagIA5String, tagOctetString: + fmt.Println(s.unmarshalString()) + default: + fmt.Println(s.next()) + } + } else { + fmt.Println("→") + s.subState().dump(indent + 1) } - default: - s += fmt.Sprintln(class, kind, byte(tag), short(value)) - } - - if len(value) > 0 && kind != kindPrimitive { - s += dump(bytes.NewBuffer(value), indent+1) - } - - if r.Len() > 0 { - s += dump(r, indent) } - return + return s.dump(indent) } -- cgit v1.2.3