OER CHOICE extensions support + fuzzing
diff --git a/skeletons/oer_encoder.c b/skeletons/oer_encoder.c
index a6f7a78..d0e6ea0 100644
--- a/skeletons/oer_encoder.c
+++ b/skeletons/oer_encoder.c
@@ -109,3 +109,34 @@
}
}
+static int
+oer__count_bytes(const void *buffer, size_t size, void *bytes_ptr) {
+ size_t *bytes = bytes_ptr;
+ *bytes += size;
+ return 0;
+}
+
+ssize_t
+oer_open_type_put(asn_TYPE_descriptor_t *td,
+ const asn_oer_constraints_t *constraints,
+ void *sptr, asn_app_consume_bytes_f *cb,
+ void *app_key) {
+ size_t serialized_byte_count = 0;
+ asn_enc_rval_t er;
+ ssize_t len_len;
+
+ er = td->op->oer_encoder(td, constraints, sptr, oer__count_bytes,
+ &serialized_byte_count);
+ if(er.encoded == -1) return -1;
+ assert(serialized_byte_count == er.encoded);
+
+ len_len = oer_serialize_length(serialized_byte_count, cb, app_key);
+ if(len_len == -1) return -1;
+
+ er = td->op->oer_encoder(td, constraints, sptr, cb, app_key);
+ if(er.encoded == -1) return -1;
+ assert(serialized_byte_count == er.encoded);
+
+ return er.encoded + len_len;
+}
+