Commit 2e3055da authored by Lev Walkin's avatar Lev Walkin

new meaning of life

parent 5253da42
......@@ -25,6 +25,7 @@ BEGIN
Name ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::= SET SIZE (1..MAX) OF IA5String
RelativeDistinguishedName ::= SET SIZE (1..MAX) OF
IA5String (FROM("A".."Z"|"a".."z"|"0-9"|",-."))
END
......@@ -29,46 +29,54 @@ typedef struct T {
/*** <<< STAT-DEFS [T] >>> ***/
static asn1_SET_OF_element_t asn1_DEF_collection_elements[] = {
{ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
(void *)&asn1_DEF_T2 },
};
static ber_tlv_tag_t asn1_DEF_collection_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn1_SET_OF_specifics_t asn1_DEF_collection_specs = {
sizeof(struct collection),
offsetof(struct collection, _ber_dec_ctx),
asn1_DEF_collection_elements
};
asn1_TYPE_descriptor_t asn1_DEF_collection = {
"collection",
SEQUENCE_OF_constraint,
SEQUENCE_OF_decode_ber,
SEQUENCE_OF_encode_der,
SEQUENCE_OF_print,
SEQUENCE_OF_free,
0, /* Use generic outmost tag fetcher */
asn1_DEF_collection_tags,
sizeof(asn1_DEF_collection_tags)
/sizeof(asn1_DEF_collection_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
&asn1_DEF_collection_specs /* Additional specs */
};
static asn1_SEQUENCE_element_t asn1_DEF_T_elements[] = {
{ offsetof(struct T, int), 0,
(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
0,
(void *)&asn1_DEF_INTEGER,
"int"
static asn1_TYPE_member_t asn1_MBR_collection[] = {
{ 0, 0,
.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_T2,
.memb_constraints = 0, /* Defer to actual type */
.name = ""
},
{ offsetof(struct T, collection), 0,
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
0,
(void *)&asn1_DEF_collection,
"collection"
};
static ber_tlv_tag_t asn1_DEF_collection_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn1_SET_OF_specifics_t asn1_DEF_collection_specs = {
sizeof(struct collection),
offsetof(struct collection, _ber_dec_ctx),
};
asn1_TYPE_descriptor_t asn1_DEF_collection = {
"collection",
SEQUENCE_OF_constraint,
SEQUENCE_OF_decode_ber,
SEQUENCE_OF_encode_der,
SEQUENCE_OF_print,
SEQUENCE_OF_free,
0, /* Use generic outmost tag fetcher */
asn1_DEF_collection_tags,
sizeof(asn1_DEF_collection_tags)
/sizeof(asn1_DEF_collection_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_collection,
1, /* Single element */
&asn1_DEF_collection_specs /* Additional specs */
};
static asn1_TYPE_member_t asn1_MBR_T[] = {
{ 0, offsetof(struct T, int),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_INTEGER,
.memb_constraints = 0, /* Defer to actual type */
.name = "int"
},
{ 0, offsetof(struct T, collection),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_collection,
.memb_constraints = 0, /* Defer to actual type */
.name = "collection"
},
};
static ber_tlv_tag_t asn1_DEF_T_tags[] = {
......@@ -81,8 +89,6 @@ static asn1_TYPE_tag2member_t asn1_DEF_T_tag2el[] = {
static asn1_SEQUENCE_specifics_t asn1_DEF_T_specs = {
sizeof(struct T),
offsetof(struct T, _ber_dec_ctx),
asn1_DEF_T_elements,
2, /* Elements count */
asn1_DEF_T_tag2el,
2, /* Count of tags in the map */
-1, /* Start extensions */
......@@ -101,6 +107,8 @@ asn1_TYPE_descriptor_t asn1_DEF_T = {
/sizeof(asn1_DEF_T_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_T,
2, /* Elements count */
&asn1_DEF_T_specs /* Additional specs */
};
......@@ -128,18 +136,20 @@ typedef struct T2 {
/*** <<< STAT-DEFS [T2] >>> ***/
static asn1_SEQUENCE_element_t asn1_DEF_T2_elements[] = {
{ offsetof(struct T2, flag), 0,
(ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
0,
(void *)&asn1_DEF_BOOLEAN,
"flag"
static asn1_TYPE_member_t asn1_MBR_T2[] = {
{ 0, offsetof(struct T2, flag),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_BOOLEAN,
.memb_constraints = 0, /* Defer to actual type */
.name = "flag"
},
{ offsetof(struct T2, str), 0,
(ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
0,
(void *)&asn1_DEF_UTF8String,
"str"
{ 0, offsetof(struct T2, str),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_UTF8String,
.memb_constraints = 0, /* Defer to actual type */
.name = "str"
},
};
static ber_tlv_tag_t asn1_DEF_T2_tags[] = {
......@@ -152,8 +162,6 @@ static asn1_TYPE_tag2member_t asn1_DEF_T2_tag2el[] = {
static asn1_SEQUENCE_specifics_t asn1_DEF_T2_specs = {
sizeof(struct T2),
offsetof(struct T2, _ber_dec_ctx),
asn1_DEF_T2_elements,
2, /* Elements count */
asn1_DEF_T2_tag2el,
2, /* Count of tags in the map */
-1, /* Start extensions */
......@@ -172,6 +180,8 @@ asn1_TYPE_descriptor_t asn1_DEF_T2 = {
/sizeof(asn1_DEF_T2_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_T2,
2, /* Elements count */
&asn1_DEF_T2_specs /* Additional specs */
};
......@@ -21,7 +21,7 @@ BEGIN
*/
LogLine ::= SEQUENCE {
line-digest IA5String, -- Log line normal form
varsets SEQUENCE (1..MAX) OF VariablePartSet
varsets SEQUENCE SIZE(1..MAX) OF VariablePartSet
}
/*
......@@ -30,7 +30,7 @@ BEGIN
* or a range between two samples.
*/
VariablePartSet ::= SEQUENCE {
vparts SEQUENCE (0..MAX) OF VariablePart, -- {123,321}
vparts SEQUENCE SIZE(0..MAX) OF VariablePart, -- {123,321}
resolution ActionItem
}
......@@ -39,7 +39,7 @@ BEGIN
*/
VariablePart ::= CHOICE {
-- A set of acceptable values
vset SET (1..MAX) OF VisibleString,
vset SET SIZE(1..MAX) OF VisibleString,
-- A range of acceptable values
vrange SEQUENCE {
from VisibleString,
......
......@@ -7,18 +7,18 @@ BEGIN
LogLine ::= SEQUENCE {
line-digest IA5String,
varsets SEQUENCE OF VariablePartSet,
varsets SEQUENCE SIZE(1..MAX) OF VariablePartSet,
...
}
VariablePartSet ::= SEQUENCE {
vparts SEQUENCE OF VariablePart,
vparts SEQUENCE SIZE(0..MAX) OF VariablePart,
resolution ActionItem,
...
}
VariablePart ::= CHOICE {
vset SET OF VisibleString,
vset SET SIZE(1..MAX) OF VisibleString,
vrange SEQUENCE {
from VisibleString,
to VisibleString,
......
This diff is collapsed.
This diff is collapsed.
......@@ -18,26 +18,7 @@ der_type_encoder_f PrimitiveType_encode_der;
asn_struct_print_f PrimitiveType_print;
asn_struct_free_f PrimitiveType_free;
/*** <<< STAT-DEFS [PrimitiveType] >>> ***/
static ber_tlv_tag_t asn1_DEF_PrimitiveType_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
};
asn1_TYPE_descriptor_t asn1_DEF_PrimitiveType = {
"PrimitiveType",
PrimitiveType_constraint,
PrimitiveType_decode_ber,
PrimitiveType_encode_der,
PrimitiveType_print,
PrimitiveType_free,
0, /* Use generic outmost tag fetcher */
asn1_DEF_PrimitiveType_tags,
sizeof(asn1_DEF_PrimitiveType_tags)
/sizeof(asn1_DEF_PrimitiveType_tags[0]), /* 1 */
1, /* Tags to skip */
-0, /* Unknown yet */
0 /* No specifics */
};
/*** <<< CODE [PrimitiveType] >>> ***/
int
PrimitiveType_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
......@@ -54,19 +35,21 @@ PrimitiveType_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
* so adjust the DEF appropriately.
*/
static void
inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
td->ber_decoder = asn1_DEF_OCTET_STRING.ber_decoder;
td->der_encoder = asn1_DEF_OCTET_STRING.der_encoder;
td->free_struct = asn1_DEF_OCTET_STRING.free_struct;
td->print_struct = asn1_DEF_OCTET_STRING.print_struct;
td->last_tag_form = asn1_DEF_OCTET_STRING.last_tag_form;
td->specifics = asn1_DEF_OCTET_STRING.specifics;
PrimitiveType_inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
td->ber_decoder = asn1_DEF_OCTET_STRING.ber_decoder;
td->der_encoder = asn1_DEF_OCTET_STRING.der_encoder;
td->free_struct = asn1_DEF_OCTET_STRING.free_struct;
td->print_struct = asn1_DEF_OCTET_STRING.print_struct;
td->last_tag_form = asn1_DEF_OCTET_STRING.last_tag_form;
td->elements = asn1_DEF_OCTET_STRING.elements;
td->elements_count = asn1_DEF_OCTET_STRING.elements_count;
td->specifics = asn1_DEF_OCTET_STRING.specifics;
}
ber_dec_rval_t
PrimitiveType_decode_ber(asn1_TYPE_descriptor_t *td,
void **structure, void *bufptr, size_t size, int tag_mode) {
inherit_TYPE_descriptor(td);
PrimitiveType_inherit_TYPE_descriptor(td);
return td->ber_decoder(td, structure,
bufptr, size, tag_mode);
}
......@@ -75,25 +58,48 @@ der_enc_rval_t
PrimitiveType_encode_der(asn1_TYPE_descriptor_t *td,
void *structure, int tag_mode, ber_tlv_tag_t tag,
asn_app_consume_bytes_f *cb, void *app_key) {
inherit_TYPE_descriptor(td);
PrimitiveType_inherit_TYPE_descriptor(td);
return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
}
int
PrimitiveType_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
inherit_TYPE_descriptor(td);
PrimitiveType_inherit_TYPE_descriptor(td);
return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
}
void
PrimitiveType_free(asn1_TYPE_descriptor_t *td,
void *struct_ptr, int contents_only) {
inherit_TYPE_descriptor(td);
PrimitiveType_inherit_TYPE_descriptor(td);
td->free_struct(td, struct_ptr, contents_only);
}
/*** <<< STAT-DEFS [PrimitiveType] >>> ***/
static ber_tlv_tag_t asn1_DEF_PrimitiveType_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
};
asn1_TYPE_descriptor_t asn1_DEF_PrimitiveType = {
"PrimitiveType",
PrimitiveType_constraint,
PrimitiveType_decode_ber,
PrimitiveType_encode_der,
PrimitiveType_print,
PrimitiveType_free,
0, /* Use generic outmost tag fetcher */
asn1_DEF_PrimitiveType_tags,
sizeof(asn1_DEF_PrimitiveType_tags)
/sizeof(asn1_DEF_PrimitiveType_tags[0]), /* 1 */
1, /* Tags to skip */
-0, /* Unknown yet */
0, 0, /* No members */
0 /* No specifics */
};
/*** <<< INCLUDES [ConstructedType] >>> ***/
#include <PrimitiveType.h>
......@@ -115,12 +121,13 @@ typedef struct ConstructedType {
/*** <<< STAT-DEFS [ConstructedType] >>> ***/
static asn1_SEQUENCE_element_t asn1_DEF_ConstructedType_elements[] = {
{ offsetof(struct ConstructedType, field), 0,
(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
-1, /* IMPLICIT tag at current level */
(void *)&asn1_DEF_PrimitiveType,
"field"
static asn1_TYPE_member_t asn1_MBR_ConstructedType[] = {
{ 0, offsetof(struct ConstructedType, field),
.tag = (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
.tag_mode = -1, /* IMPLICIT tag at current level */
.type = (void *)&asn1_DEF_PrimitiveType,
.memb_constraints = 0, /* Defer to actual type */
.name = "field"
},
};
static ber_tlv_tag_t asn1_DEF_ConstructedType_tags[] = {
......@@ -132,8 +139,6 @@ static asn1_TYPE_tag2member_t asn1_DEF_ConstructedType_tag2el[] = {
static asn1_SEQUENCE_specifics_t asn1_DEF_ConstructedType_specs = {
sizeof(struct ConstructedType),
offsetof(struct ConstructedType, _ber_dec_ctx),
asn1_DEF_ConstructedType_elements,
1, /* Elements count */
asn1_DEF_ConstructedType_tag2el,
1, /* Count of tags in the map */
-1, /* Start extensions */
......@@ -152,6 +157,8 @@ asn1_TYPE_descriptor_t asn1_DEF_ConstructedType = {
/sizeof(asn1_DEF_ConstructedType_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_ConstructedType,
1, /* Elements count */
&asn1_DEF_ConstructedType_specs /* Additional specs */
};
......@@ -175,26 +182,7 @@ der_type_encoder_f T_encode_der;
asn_struct_print_f T_print;
asn_struct_free_f T_free;
/*** <<< STAT-DEFS [T] >>> ***/
static ber_tlv_tag_t asn1_DEF_T_tags[] = {
(ASN_TAG_CLASS_CONTEXT | (3 << 2))
};
asn1_TYPE_descriptor_t asn1_DEF_T = {
"T",
T_constraint,
T_decode_ber,
T_encode_der,
T_print,
T_free,
0, /* Use generic outmost tag fetcher */
asn1_DEF_T_tags,
sizeof(asn1_DEF_T_tags)
/sizeof(asn1_DEF_T_tags[0]), /* 1 */
1, /* Tags to skip */
-0, /* Unknown yet */
0 /* No specifics */
};
/*** <<< CODE [T] >>> ***/
int
T_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
......@@ -211,19 +199,21 @@ T_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
* so adjust the DEF appropriately.
*/
static void
inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
td->ber_decoder = asn1_DEF_ConstructedType.ber_decoder;
td->der_encoder = asn1_DEF_ConstructedType.der_encoder;
td->free_struct = asn1_DEF_ConstructedType.free_struct;
td->print_struct = asn1_DEF_ConstructedType.print_struct;
td->last_tag_form = asn1_DEF_ConstructedType.last_tag_form;
td->specifics = asn1_DEF_ConstructedType.specifics;
T_inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
td->ber_decoder = asn1_DEF_ConstructedType.ber_decoder;
td->der_encoder = asn1_DEF_ConstructedType.der_encoder;
td->free_struct = asn1_DEF_ConstructedType.free_struct;
td->print_struct = asn1_DEF_ConstructedType.print_struct;
td->last_tag_form = asn1_DEF_ConstructedType.last_tag_form;
td->elements = asn1_DEF_ConstructedType.elements;
td->elements_count = asn1_DEF_ConstructedType.elements_count;
td->specifics = asn1_DEF_ConstructedType.specifics;
}
ber_dec_rval_t
T_decode_ber(asn1_TYPE_descriptor_t *td,
void **structure, void *bufptr, size_t size, int tag_mode) {
inherit_TYPE_descriptor(td);
T_inherit_TYPE_descriptor(td);
return td->ber_decoder(td, structure,
bufptr, size, tag_mode);
}
......@@ -232,21 +222,44 @@ der_enc_rval_t
T_encode_der(asn1_TYPE_descriptor_t *td,
void *structure, int tag_mode, ber_tlv_tag_t tag,
asn_app_consume_bytes_f *cb, void *app_key) {
inherit_TYPE_descriptor(td);
T_inherit_TYPE_descriptor(td);
return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
}
int
T_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
inherit_TYPE_descriptor(td);
T_inherit_TYPE_descriptor(td);
return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
}
void
T_free(asn1_TYPE_descriptor_t *td,
void *struct_ptr, int contents_only) {
inherit_TYPE_descriptor(td);
T_inherit_TYPE_descriptor(td);
td->free_struct(td, struct_ptr, contents_only);
}
/*** <<< STAT-DEFS [T] >>> ***/
static ber_tlv_tag_t asn1_DEF_T_tags[] = {
(ASN_TAG_CLASS_CONTEXT | (3 << 2))
};
asn1_TYPE_descriptor_t asn1_DEF_T = {
"T",
T_constraint,
T_decode_ber,
T_encode_der,
T_print,
T_free,
0, /* Use generic outmost tag fetcher */
asn1_DEF_T_tags,
sizeof(asn1_DEF_T_tags)
/sizeof(asn1_DEF_T_tags[0]), /* 1 */
1, /* Tags to skip */
-0, /* Unknown yet */
0, 0, /* Defined elsewhere */
0 /* No specifics */
};
......@@ -35,12 +35,13 @@ typedef struct T1 {
/*** <<< STAT-DEFS [T1] >>> ***/
static asn1_SET_element_t asn1_DEF_T1_elements[] = {
{ offsetof(struct T1, i), 0,
(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
0,
(void *)&asn1_DEF_INTEGER,
"i"
static asn1_TYPE_member_t asn1_MBR_T1[] = {
{ 0, offsetof(struct T1, i),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_INTEGER,
.memb_constraints = 0, /* Defer to actual type */
.name = "i"
},
};
static ber_tlv_tag_t asn1_DEF_T1_tags[] = {
......@@ -56,8 +57,6 @@ static asn1_SET_specifics_t asn1_DEF_T1_specs = {
sizeof(struct T1),
offsetof(struct T1, _ber_dec_ctx),
offsetof(struct T1, _presence_map),
asn1_DEF_T1_elements,
1, /* Elements count */
asn1_DEF_T1_tag2el,
1, /* Count of tags in the map */
1, /* Whether extensible */
......@@ -76,6 +75,8 @@ asn1_TYPE_descriptor_t asn1_DEF_T1 = {
/sizeof(asn1_DEF_T1_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_T1,
1, /* Elements count */
&asn1_DEF_T1_specs /* Additional specs */
};
......@@ -116,12 +117,13 @@ typedef struct T2 {
/*** <<< STAT-DEFS [T2] >>> ***/
static asn1_SET_element_t asn1_DEF_T2_elements[] = {
{ offsetof(struct T2, i), 0,
(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
0,
(void *)&asn1_DEF_INTEGER,
"i"
static asn1_TYPE_member_t asn1_MBR_T2[] = {
{ 0, offsetof(struct T2, i),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_INTEGER,
.memb_constraints = 0, /* Defer to actual type */
.name = "i"
},
};
static ber_tlv_tag_t asn1_DEF_T2_tags[] = {
......@@ -137,8 +139,6 @@ static asn1_SET_specifics_t asn1_DEF_T2_specs = {
sizeof(struct T2),
offsetof(struct T2, _ber_dec_ctx),
offsetof(struct T2, _presence_map),
asn1_DEF_T2_elements,
1, /* Elements count */
asn1_DEF_T2_tag2el,
1, /* Count of tags in the map */
1, /* Whether extensible */
......@@ -157,6 +157,8 @@ asn1_TYPE_descriptor_t asn1_DEF_T2 = {
/sizeof(asn1_DEF_T2_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_T2,
1, /* Elements count */
&asn1_DEF_T2_specs /* Additional specs */
};
......@@ -194,12 +196,13 @@ typedef struct T3 {
/*** <<< STAT-DEFS [T3] >>> ***/
static asn1_CHOICE_element_t asn1_DEF_T3_elements[] = {
{ offsetof(struct T3, choice.i), 0,
(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
0,
(void *)&asn1_DEF_INTEGER,
"i"
static asn1_TYPE_member_t asn1_MBR_T3[] = {
{ 0, offsetof(struct T3, choice.i),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_INTEGER,
.memb_constraints = 0, /* Defer to actual type */
.name = "i"
},
};
static asn1_TYPE_tag2member_t asn1_DEF_T3_tag2el[] = {
......@@ -210,8 +213,6 @@ static asn1_CHOICE_specifics_t asn1_DEF_T3_specs = {
offsetof(struct T3, _ber_dec_ctx),
offsetof(struct T3, present),
sizeof(((struct T3 *)0)->present),
asn1_DEF_T3_elements,
1, /* Elements count */
asn1_DEF_T3_tag2el,
1, /* Count of tags in the map */
1 /* Whether extensible */
......@@ -228,6 +229,8 @@ asn1_TYPE_descriptor_t asn1_DEF_T3 = {
0, /* No explicit tags (count) */
0, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_T3,
1, /* Elements count */
&asn1_DEF_T3_specs /* Additional specs */
};
......@@ -265,12 +268,13 @@ typedef struct T4 {
/*** <<< STAT-DEFS [T4] >>> ***/
static asn1_CHOICE_element_t asn1_DEF_T4_elements[] = {
{ offsetof(struct T4, choice.i), 0,
(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
0,
(void *)&asn1_DEF_INTEGER,
"i"
static asn1_TYPE_member_t asn1_MBR_T4[] = {
{ 0, offsetof(struct T4, choice.i),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_INTEGER,
.memb_constraints = 0, /* Defer to actual type */
.name = "i"
},
};
static asn1_TYPE_tag2member_t asn1_DEF_T4_tag2el[] = {
......@@ -281,8 +285,6 @@ static asn1_CHOICE_specifics_t asn1_DEF_T4_specs = {
offsetof(struct T4, _ber_dec_ctx),
offsetof(struct T4, present),
sizeof(((struct T4 *)0)->present),
asn1_DEF_T4_elements,
1, /* Elements count */
asn1_DEF_T4_tag2el,
1, /* Count of tags in the map */
1 /* Whether extensible */
......@@ -299,6 +301,8 @@ asn1_TYPE_descriptor_t asn1_DEF_T4 = {
0, /* No explicit tags (count) */
0, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_T4,
1, /* Elements count */
&asn1_DEF_T4_specs /* Additional specs */
};
......@@ -39,4 +39,8 @@ BEGIN
SIZE-and-FROM ::= PER-Visible (SIZE(1..4) ^ FROM("ABCD"))
Neither-SIZE-nor-FROM ::= PER-Visible (SIZE(1..4) | FROM("ABCD",...))
Utf8-3 ::= Utf8-2 (FROM("A".."Z"|"a".."z"))
Utf8-2 ::= Utf8-1 (SIZE(1..2))
Utf8-1 ::= UTF8String
END
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment