SIM-115: update simulator to use latest E2SM KPM version 3
[sim/e2-interface.git] / e2sim / asn1c / jer_encoder.h
diff --git a/e2sim/asn1c/jer_encoder.h b/e2sim/asn1c/jer_encoder.h
new file mode 100644 (file)
index 0000000..672976d
--- /dev/null
@@ -0,0 +1,86 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _JER_ENCODER_H_
+#define        _JER_ENCODER_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;  /* Forward declaration */
+
+/* Flags used by the jer_encode() and (*jer_type_encoder_f), defined below
+ *
+ * This isn't actually used, it might be used in the future to support
+ * both normal JSON and prettified JSON output or removed.
+ * It came from XER
+ */
+enum jer_encoder_flags_e {
+       /* Mode of encoding */
+       JER_F   = 0x01, /* JER (pretty-printing) */
+};
+
+/*
+ * The JER encoder of any type. May be invoked by the application.
+ * Produces JER output.
+ */
+asn_enc_rval_t jer_encode(const struct asn_TYPE_descriptor_s *type_descriptor,
+                          const void *struct_ptr, /* Structure to be encoded */
+                          asn_app_consume_bytes_f *consume_bytes_cb,
+                          void *app_key /* Arbitrary callback argument */
+);
+
+/*
+ * The variant of the above function which dumps the JER
+ * output into the chosen file pointer.
+ * RETURN VALUES:
+ *      0: The structure is printed.
+ *     -1: Problem printing the structure.
+ * WARNING: No sensible errno value is returned.
+ */
+int jer_fprint(FILE *stream, const struct asn_TYPE_descriptor_s *td,
+               const void *struct_ptr);
+
+/*
+ * A helper function that uses JER encoding/decoding to verify that:
+ * - Both structures encode into the same JER.
+ * - Both resulting JER byte streams can be decoded back.
+ * - Both decoded structures encode into the same JER (round-trip).
+ * All of this verifies equivalence between structures and a round-trip.
+ * ARGUMENTS:
+ *  (opt_debug_stream)  - If specified, prints ongoing details.
+ */
+enum jer_equivalence_e {
+    JEQ_SUCCESS,          /* The only completely positive return value */
+    JEQ_FAILURE,          /* General failure */
+    JEQ_ENCODE1_FAILED,   /* First structure JER encoding failed */
+    JEQ_ENCODE2_FAILED,   /* Second structure JER encoding failed */
+    JEQ_DIFFERENT,        /* Structures encoded into different JER */
+    JEQ_DECODE_FAILED,    /* Decode of the JER data failed */
+    JEQ_ROUND_TRIP_FAILED /* Bad round-trip */
+};
+enum jer_equivalence_e jer_equivalent(
+    const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct1,
+    const void *struct2, FILE *opt_debug_stream);
+
+/*
+ * Type of the generic JER encoder.
+ */
+typedef asn_enc_rval_t(jer_type_encoder_f)(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const void *struct_ptr, /* Structure to be encoded */
+    int ilevel,             /* Level of indentation */
+    enum jer_encoder_flags_e jer_flags,
+    asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */
+    void *app_key                              /* Arbitrary callback argument */
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _JER_ENCODER_H_ */