aboutsummaryrefslogtreecommitdiff
path: root/ber/new/common.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-09-25 20:41:38 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-09-25 20:41:38 +0200
commit511cf41a779929b5c81b7429c37dc11bd9544182 (patch)
tree6ab421d4b7ec868c48b40da57e3de542831767dd /ber/new/common.go
parent0559b7d4eab07cacf0f005e8e756c1d04470e0c7 (diff)
Rewrite from scratch
Diffstat (limited to 'ber/new/common.go')
-rw-r--r--ber/new/common.go70
1 files changed, 70 insertions, 0 deletions
diff --git a/ber/new/common.go b/ber/new/common.go
new file mode 100644
index 0000000..823dc23
--- /dev/null
+++ b/ber/new/common.go
@@ -0,0 +1,70 @@
+package ber
+
+import (
+ "bytes"
+ "strconv"
+ "strings"
+)
+
+type state struct{ bytes.Buffer }
+
+func newState(b []byte) *state {
+ s := &state{}
+ s.Write(b)
+ return s
+}
+
+func (s *state) subState() *state {
+ ss := &state{}
+ ss.Write(s.next())
+ return ss
+}
+
+func (s *state) next() []byte {
+ return s.Next(s.unmarshalLen())
+}
+
+type OID []int
+
+func (o OID) Equal(p OID) bool {
+ for i := range o {
+ if o[i] != p[i] {
+ return false
+ }
+ }
+ return true
+}
+
+func (o OID) String() string {
+ s := make([]string, len(o))
+ for i, v := range o {
+ s[i] = strconv.Itoa(v)
+ }
+ return strings.Join(s, ".")
+}
+
+type BitString []bool
+
+func (o BitString) Equal(p BitString) bool {
+ for i := range o {
+ if o[i] != p[i] {
+ return false
+ }
+ }
+ return true
+}
+
+func (o BitString) String() string {
+ bmap := map[bool]string{
+ true: "1",
+ false: "0",
+ }
+ var s string
+ for i, bit := range o {
+ if i != 0 && i%4 == 0 {
+ s += " "
+ }
+ s += bmap[bit]
+ }
+ return s
+}