From 64d99e9deaadd43c2c1ab7168e793ef246477f0b Mon Sep 17 00:00:00 2001 From: Lev Walkin Date: Sun, 30 Jan 2005 18:34:07 +0000 Subject: new functionality --- tests/39-sequence-of-OK.asn1.-P | 4 +- tests/42-real-life-OK.asn1.-PR | 4 +- tests/69-reserved-words-OK.asn1 | 21 +++++ tests/69-reserved-words-OK.asn1.-P | 185 +++++++++++++++++++++++++++++++++++++ 4 files changed, 210 insertions(+), 4 deletions(-) create mode 100644 tests/69-reserved-words-OK.asn1 create mode 100644 tests/69-reserved-words-OK.asn1.-P diff --git a/tests/39-sequence-of-OK.asn1.-P b/tests/39-sequence-of-OK.asn1.-P index 5b0a517c..f447c67b 100644 --- a/tests/39-sequence-of-OK.asn1.-P +++ b/tests/39-sequence-of-OK.asn1.-P @@ -15,7 +15,7 @@ extern asn_TYPE_descriptor_t asn_DEF_T; typedef struct T { - INTEGER_t int; + INTEGER_t Int; struct collection { A_SEQUENCE_OF(T2_t) list; @@ -70,7 +70,7 @@ asn_TYPE_descriptor_t asn_DEF_collection = { }; static asn_TYPE_member_t asn_MBR_T[] = { - { ATF_NOFLAGS, 0, offsetof(struct T, int), + { ATF_NOFLAGS, 0, offsetof(struct T, Int), .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), .tag_mode = 0, .type = (void *)&asn_DEF_INTEGER, diff --git a/tests/42-real-life-OK.asn1.-PR b/tests/42-real-life-OK.asn1.-PR index 83be42f7..716928fb 100644 --- a/tests/42-real-life-OK.asn1.-PR +++ b/tests/42-real-life-OK.asn1.-PR @@ -47,7 +47,7 @@ memb_varsets_1_constraint(asn_TYPE_descriptor_t *td, const void *sptr, { /* Determine the number of elements */ const A_SEQUENCE_OF(void) *list; - list = (const A_SEQUENCE_OF(void) *)sptr; + (const void *)list = sptr; size = list->count; } @@ -376,7 +376,7 @@ memb_vset_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, { /* Determine the number of elements */ const A_SET_OF(void) *list; - list = (const A_SET_OF(void) *)sptr; + (const void *)list = sptr; size = list->count; } diff --git a/tests/69-reserved-words-OK.asn1 b/tests/69-reserved-words-OK.asn1 new file mode 100644 index 00000000..29014ee1 --- /dev/null +++ b/tests/69-reserved-words-OK.asn1 @@ -0,0 +1,21 @@ + +-- OK: Everything is Fine + +-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1) +-- .spelio.software.asn1c.test (9363.1.5.1) +-- .69 + +ModuleTestReservedWords + { iso org(3) dod(6) internet(1) private(4) enterprise(1) + spelio(9363) software(1) asn1c(5) test(1) 69 } + DEFINITIONS ::= +BEGIN + + T ::= SEQUENCE { + int INTEGER, + char OCTET STRING (SIZE(1)), + class SET { ... }, + double REAL + } + +END diff --git a/tests/69-reserved-words-OK.asn1.-P b/tests/69-reserved-words-OK.asn1.-P new file mode 100644 index 00000000..f826aff9 --- /dev/null +++ b/tests/69-reserved-words-OK.asn1.-P @@ -0,0 +1,185 @@ + +/*** <<< INCLUDES [T] >>> ***/ + +#include +#include +#include +#include +#include + +/*** <<< DEPS [T] >>> ***/ + + +/* + * Method of determining the components presence + */ +typedef enum class_PR { +} class_PR; +extern asn_TYPE_descriptor_t asn_DEF_T; + +/*** <<< TYPE-DECLS [T] >>> ***/ + + +typedef struct T { + INTEGER_t Int; + OCTET_STRING_t Char; + struct Class { + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Presence bitmask: ASN_SET_ISPRESENT(pclass, class_PR_x) */ + unsigned int _presence_map + [((0+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))]; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } Class; + REAL_t Double; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} T_t; + +/*** <<< CODE [T] >>> ***/ + +static int +memb_char_1_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_consume_bytes_f *app_errlog, void *app_key) { + const OCTET_STRING_t *st = sptr; + size_t size; + + if(!sptr) { + _ASN_ERRLOG(app_errlog, app_key, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_ERRLOG(app_errlog, app_key, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + + +/*** <<< STAT-DEFS [T] >>> ***/ + +static ber_tlv_tag_t asn_DEF_class_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)) +}; +static asn_TYPE_tag2member_t asn_DEF_class_tag2el[] = { +}; +static uint8_t asn_DEF_class_mmap[(0 + (8 * sizeof(unsigned int)) - 1) / 8] = { + 0 +}; +static asn_SET_specifics_t asn_DEF_class_specs = { + sizeof(struct Class), + offsetof(struct Class, _asn_ctx), + offsetof(struct Class, _presence_map), + asn_DEF_class_tag2el, + 0, /* Count of tags in the map */ + asn_DEF_class_tag2el, /* Same as above */ + 0, /* Count of tags in the CANONICAL-XER map */ + 1, /* Whether extensible */ + (unsigned int *)asn_DEF_class_mmap /* Mandatory elements map */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_class = { + "class", + "class", + SET_free, + SET_print, + SET_constraint, + SET_decode_ber, + SET_encode_der, + 0, /* Not implemented yet */ + SET_encode_xer, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_class_tags, + sizeof(asn_DEF_class_tags) + /sizeof(asn_DEF_class_tags[0]), /* 1 */ + asn_DEF_class_tags, /* Same as above */ + sizeof(asn_DEF_class_tags) + /sizeof(asn_DEF_class_tags[0]), /* 1 */ + 0, 0, /* No members */ + &asn_DEF_class_specs /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_T[] = { + { ATF_NOFLAGS, 0, offsetof(struct T, Int), + .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + .tag_mode = 0, + .type = (void *)&asn_DEF_INTEGER, + .memb_constraints = 0, /* Defer constraints checking to the member type */ + .name = "int" + }, + { ATF_NOFLAGS, 0, offsetof(struct T, Char), + .tag = (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + .tag_mode = 0, + .type = (void *)&asn_DEF_OCTET_STRING, + .memb_constraints = memb_char_1_constraint, + .name = "char" + }, + { ATF_NOFLAGS, 0, offsetof(struct T, Class), + .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), + .tag_mode = 0, + .type = (void *)&asn_DEF_class, + .memb_constraints = 0, /* Defer constraints checking to the member type */ + .name = "class" + }, + { ATF_NOFLAGS, 0, offsetof(struct T, Double), + .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), + .tag_mode = 0, + .type = (void *)&asn_DEF_REAL, + .memb_constraints = 0, /* Defer constraints checking to the member type */ + .name = "double" + }, +}; +static ber_tlv_tag_t asn_DEF_T_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_DEF_T_tag2el[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* int at 15 */ + { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 1, 0, 0 }, /* char at 16 */ + { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 3, 0, 0 }, /* double at 18 */ + { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 2, 0, 0 }, /* class at 17 */ +}; +static asn_SEQUENCE_specifics_t asn_DEF_T_specs = { + sizeof(struct T), + offsetof(struct T, _asn_ctx), + asn_DEF_T_tag2el, + 4, /* Count of tags in the map */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_T = { + "T", + "T", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_T_tags, + sizeof(asn_DEF_T_tags) + /sizeof(asn_DEF_T_tags[0]), /* 1 */ + asn_DEF_T_tags, /* Same as above */ + sizeof(asn_DEF_T_tags) + /sizeof(asn_DEF_T_tags[0]), /* 1 */ + asn_MBR_T, + 4, /* Elements count */ + &asn_DEF_T_specs /* Additional specs */ +}; + -- cgit v1.2.3