aboutsummaryrefslogtreecommitdiff
path: root/ber/dump.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-09-26 12:04:34 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-09-26 12:04:34 +0200
commit54caa4e7e085e177ff05b719ae247d21fe8c257e (patch)
tree363400fe1c6c1e7b696c72caaabc4882756355fa /ber/dump.go
parent1fcefc99a82bac6ce725b6f11277e4aa291a7f51 (diff)
Replace with new implementation
Diffstat (limited to 'ber/dump.go')
-rw-r--r--ber/dump.go66
1 files changed, 27 insertions, 39 deletions
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)
}