aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-08-11 16:11:38 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-08-11 16:11:38 +0200
commit60f72236c260c3ee0a0c72fe29d61786671424f8 (patch)
tree8a70c8dfd735008c0aef0d68620bb6ccc2637185
parentdbf201b61a9f3d9e55d6744009f0f8f35c204e9d (diff)
Primitive, but works somehow
-rw-r--r--ber/marshal.go9
-rw-r--r--unmarshal/main.go19
2 files changed, 27 insertions, 1 deletions
diff --git a/ber/marshal.go b/ber/marshal.go
index 282ab45..aaca0c2 100644
--- a/ber/marshal.go
+++ b/ber/marshal.go
@@ -88,9 +88,16 @@ func objEncoder(e *encodeState, v reflect.Value) {
}
func structEncoder(e *encodeState, v reflect.Value) {
+ sube := &encodeState{}
for i := 0; i < v.NumField(); i++ {
- e.reflectValue(v.Field(i))
+ sube.reflectValue(v.Field(i))
}
+ b := sube.Bytes()
+ l := MarshalLen(len(b))
+ t := MarshalClass(classUniversal, kindConstructed, tagSequence)
+ e.Write(t)
+ e.Write(l)
+ e.Write(b)
}
func sliceEncoder(e *encodeState, v reflect.Value) {
diff --git a/unmarshal/main.go b/unmarshal/main.go
new file mode 100644
index 0000000..b04df04
--- /dev/null
+++ b/unmarshal/main.go
@@ -0,0 +1,19 @@
+package main
+
+import (
+ "fmt"
+
+ "dim13.org/asn1/ber"
+ rose "dim13.org/asn1/ROSE"
+)
+
+func main() {
+ pdu := rose.Invoke{
+ InvokeId: 2,
+ Opcode: 511,
+ Argument: []byte{2, 1, 0},
+ }
+ b, err := ber.Marshal(pdu)
+ fmt.Println(err, b)
+ fmt.Println(ber.Dump(b))
+}