diff --git a/tests/97-type-identifier-SW.asn1 b/tests/97-type-identifier-SW.asn1 new file mode 100644 index 00000000..eaa2e296 --- /dev/null +++ b/tests/97-type-identifier-SW.asn1 @@ -0,0 +1,43 @@ + +-- OK: Everything is fine + +-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1) +-- .spelio.software.asn1c.test (9363.1.5.1) +-- .97 + +ModuleTypeIdentifier1 + { iso org(3) dod(6) internet (1) private(4) enterprise(1) + spelio(9363) software(1) asn1c(5) test(1) 97 1 } + DEFINITIONS ::= +BEGIN + + /* + * TYPE-IDENTIFIER is resolved to a clause below. + */ + T1 ::= SEQUENCE { + id TYPE-IDENTIFIER.&id2, + type TYPE-IDENTIFIER.&Type + } + + TYPE-IDENTIFIER ::= CLASS { + &id2 OBJECT IDENTIFIER UNIQUE, + &Type + } + +END + +ModuleTypeIdentifier2 + { iso org(3) dod(6) internet (1) private(4) enterprise(1) + spelio(9363) software(1) asn1c(5) test(1) 97 2 } + DEFINITIONS ::= +BEGIN + + /* + * TYPE-IDENTIFIER is resolved to a default TYPE-IDENTIFIER class. + */ + T2 ::= SEQUENCE { + id TYPE-IDENTIFIER.&id, + type TYPE-IDENTIFIER.&Type + } + +END diff --git a/tests/98-attribute-class-OK.asn1 b/tests/98-attribute-class-OK.asn1 new file mode 100644 index 00000000..08844272 --- /dev/null +++ b/tests/98-attribute-class-OK.asn1 @@ -0,0 +1,33 @@ + +-- OK: Everything is fine + +-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1) +-- .spelio.software.asn1c.test (9363.1.5.1) +-- .98 + +ModuleAttributeClass + { iso org(3) dod(6) internet (1) private(4) enterprise(1) + spelio(9363) software(1) asn1c(5) test(1) 98 } + DEFINITIONS ::= +BEGIN + + ATTRIBUTE ::= CLASS { + &id RELATIVE-OID UNIQUE + } WITH SYNTAX { ID &id } + + Attribute ::= SEQUENCE { + identifier ATTRIBUTE.&id ({Attributes}), + siAttributeValue IA5String + } + + Attributes ATTRIBUTE ::= { Names } + + Names ATTRIBUTE ::= { rafService | rcfService } + + rafService ATTRIBUTE ::= { ID raf } + rcfService ATTRIBUTE ::= { ID rcf } + + raf RELATIVE-OID ::= {3 2 1} + rcf RELATIVE-OID ::= {3 2 2} + +END diff --git a/tests/98-attribute-class-OK.asn1.-P b/tests/98-attribute-class-OK.asn1.-P new file mode 100644 index 00000000..c018f87c --- /dev/null +++ b/tests/98-attribute-class-OK.asn1.-P @@ -0,0 +1,105 @@ + +/*** <<< INCLUDES [Attribute] >>> ***/ + +#include +#include +#include + +/*** <<< TYPE-DECLS [Attribute] >>> ***/ + +typedef struct Attribute { + RELATIVE_OID_t identifier; + IA5String_t siAttributeValue; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Attribute_t; + +/*** <<< FUNC-DECLS [Attribute] >>> ***/ + +extern asn_TYPE_descriptor_t asn_DEF_Attribute; + +/*** <<< CODE [Attribute] >>> ***/ + +static int +memb_identifier_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_consume_bytes_f *app_errlog, void *app_key) { + + if(!sptr) { + _ASN_ERRLOG(app_errlog, app_key, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->check_constraints(td, sptr, app_errlog, app_key); +} + + +/*** <<< STAT-DEFS [Attribute] >>> ***/ + +static asn_TYPE_member_t asn_MBR_Attribute_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Attribute, identifier), + .tag = (ASN_TAG_CLASS_UNIVERSAL | (13 << 2)), + .tag_mode = 0, + .type = &asn_DEF_RELATIVE_OID, + .memb_constraints = memb_identifier_constraint_1, + .per_constraints = 0, /* PER is not compiled, use -gen-PER */ + .default_value = 0, + .name = "identifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct Attribute, siAttributeValue), + .tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)), + .tag_mode = 0, + .type = &asn_DEF_IA5String, + .memb_constraints = 0, /* Defer constraints checking to the member type */ + .per_constraints = 0, /* PER is not compiled, use -gen-PER */ + .default_value = 0, + .name = "siAttributeValue" + }, +}; +static ber_tlv_tag_t asn_DEF_Attribute_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_Attribute_tag2el_1[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (13 << 2)), 0, 0, 0 }, /* identifier at 19 */ + { (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)), 1, 0, 0 } /* siAttributeValue at 20 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Attribute_specs_1 = { + sizeof(struct Attribute), + offsetof(struct Attribute, _asn_ctx), + asn_MAP_Attribute_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_Attribute = { + "Attribute", + "Attribute", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + 0, /* No PER decoder, -gen-PER to enable */ + 0, /* Use generic outmost tag fetcher */ + asn_DEF_Attribute_tags_1, + sizeof(asn_DEF_Attribute_tags_1) + /sizeof(asn_DEF_Attribute_tags_1[0]), /* 1 */ + asn_DEF_Attribute_tags_1, /* Same as above */ + sizeof(asn_DEF_Attribute_tags_1) + /sizeof(asn_DEF_Attribute_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_Attribute_1, + 2, /* Elements count */ + &asn_SPC_Attribute_specs_1 /* Additional specs */ +}; +