blob: 4981e222089aef681ec2e72df551210e76e19db6 [file] [log] [blame]
Lev Walkin5bbff1e2004-06-28 21:13:22 +00001
Lev Walkinb47ddce2004-08-11 05:25:47 +00002/*** <<< INCLUDES [PrimitiveType] >>> ***/
Lev Walkin5bbff1e2004-06-28 21:13:22 +00003
4#include <OCTET_STRING.h>
5
6/*** <<< TYPE-DECLS [PrimitiveType] >>> ***/
7
8
9typedef OCTET_STRING_t PrimitiveType_t;
10
Lev Walkin5bbff1e2004-06-28 21:13:22 +000011/*** <<< FUNC-DECLS [PrimitiveType] >>> ***/
12
Lev Walkin154aa182004-09-26 13:12:56 +000013/* This type is equivalent to OCTET_STRING */
14#define asn1_DEF_PrimitiveType asn1_DEF_OCTET_STRING
Lev Walkin5bbff1e2004-06-28 21:13:22 +000015
Lev Walkin2e3055d2004-08-20 13:36:32 +000016/*** <<< CODE [PrimitiveType] >>> ***/
17
Lev Walkin154aa182004-09-26 13:12:56 +000018/* This type is equivalent to OCTET_STRING */
Lev Walkin5bbff1e2004-06-28 21:13:22 +000019
Lev Walkin5bbff1e2004-06-28 21:13:22 +000020
Lev Walkinb47ddce2004-08-11 05:25:47 +000021/*** <<< INCLUDES [ConstructedType] >>> ***/
Lev Walkin5bbff1e2004-06-28 21:13:22 +000022
Lev Walkin5bbff1e2004-06-28 21:13:22 +000023#include <PrimitiveType.h>
Lev Walkin5bbff1e2004-06-28 21:13:22 +000024#include <constr_SEQUENCE.h>
25
Lev Walkinb47ddce2004-08-11 05:25:47 +000026/*** <<< DEPS [ConstructedType] >>> ***/
27
Lev Walkin5bbff1e2004-06-28 21:13:22 +000028extern asn1_TYPE_descriptor_t asn1_DEF_ConstructedType;
29
30/*** <<< TYPE-DECLS [ConstructedType] >>> ***/
31
32
33typedef struct ConstructedType {
34 PrimitiveType_t field;
35
36 /* Context for parsing across buffer boundaries */
37 ber_dec_ctx_t _ber_dec_ctx;
38} ConstructedType_t;
39
40/*** <<< STAT-DEFS [ConstructedType] >>> ***/
41
Lev Walkin2e3055d2004-08-20 13:36:32 +000042static asn1_TYPE_member_t asn1_MBR_ConstructedType[] = {
Lev Walkincc93b0f2004-09-10 09:18:20 +000043 { ATF_NOFLAGS, 0, offsetof(struct ConstructedType, field),
Lev Walkin2e3055d2004-08-20 13:36:32 +000044 .tag = (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
45 .tag_mode = -1, /* IMPLICIT tag at current level */
46 .type = (void *)&asn1_DEF_PrimitiveType,
47 .memb_constraints = 0, /* Defer to actual type */
48 .name = "field"
Lev Walkin5bbff1e2004-06-28 21:13:22 +000049 },
50};
51static ber_tlv_tag_t asn1_DEF_ConstructedType_tags[] = {
52 (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
53};
54static asn1_TYPE_tag2member_t asn1_DEF_ConstructedType_tag2el[] = {
55 { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 0, 0, 0 }, /* field at 18 */
56};
57static asn1_SEQUENCE_specifics_t asn1_DEF_ConstructedType_specs = {
58 sizeof(struct ConstructedType),
59 offsetof(struct ConstructedType, _ber_dec_ctx),
Lev Walkin5bbff1e2004-06-28 21:13:22 +000060 asn1_DEF_ConstructedType_tag2el,
61 1, /* Count of tags in the map */
62 -1, /* Start extensions */
63 -1 /* Stop extensions */
64};
65asn1_TYPE_descriptor_t asn1_DEF_ConstructedType = {
66 "ConstructedType",
Lev Walkina9cc46e2004-09-22 16:06:28 +000067 SEQUENCE_free,
68 SEQUENCE_print,
Lev Walkin5bbff1e2004-06-28 21:13:22 +000069 SEQUENCE_constraint,
70 SEQUENCE_decode_ber,
71 SEQUENCE_encode_der,
Lev Walkina9cc46e2004-09-22 16:06:28 +000072 0, /* Not implemented yet */
73 SEQUENCE_encode_xer,
Lev Walkin5bbff1e2004-06-28 21:13:22 +000074 0, /* Use generic outmost tag fetcher */
75 asn1_DEF_ConstructedType_tags,
76 sizeof(asn1_DEF_ConstructedType_tags)
Lev Walkin64399722004-08-11 07:17:22 +000077 /sizeof(asn1_DEF_ConstructedType_tags[0]), /* 1 */
Lev Walkin188ed2c2004-09-13 08:31:01 +000078 asn1_DEF_ConstructedType_tags, /* Same as above */
79 sizeof(asn1_DEF_ConstructedType_tags)
80 /sizeof(asn1_DEF_ConstructedType_tags[0]), /* 1 */
Lev Walkin2e3055d2004-08-20 13:36:32 +000081 asn1_MBR_ConstructedType,
82 1, /* Elements count */
Lev Walkin5bbff1e2004-06-28 21:13:22 +000083 &asn1_DEF_ConstructedType_specs /* Additional specs */
84};
85
86
Lev Walkinb47ddce2004-08-11 05:25:47 +000087/*** <<< INCLUDES [T] >>> ***/
Lev Walkin5bbff1e2004-06-28 21:13:22 +000088
89#include <ConstructedType.h>
90
91/*** <<< TYPE-DECLS [T] >>> ***/
92
93
94typedef ConstructedType_t T_t;
95
Lev Walkin5bbff1e2004-06-28 21:13:22 +000096/*** <<< FUNC-DECLS [T] >>> ***/
97
98extern asn1_TYPE_descriptor_t asn1_DEF_T;
Lev Walkina9cc46e2004-09-22 16:06:28 +000099asn_struct_free_f T_free;
100asn_struct_print_f T_print;
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000101asn_constr_check_f T_constraint;
102ber_type_decoder_f T_decode_ber;
103der_type_encoder_f T_encode_der;
Lev Walkina9cc46e2004-09-22 16:06:28 +0000104xer_type_encoder_f T_encode_xer;
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000105
Lev Walkin2e3055d2004-08-20 13:36:32 +0000106/*** <<< CODE [T] >>> ***/
107
108int
109T_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
110 asn_app_consume_bytes_f *app_errlog, void *app_key) {
Lev Walkin154aa182004-09-26 13:12:56 +0000111 /* Replace with underlying type checker */
Lev Walkin2e3055d2004-08-20 13:36:32 +0000112 td->check_constraints = asn1_DEF_ConstructedType.check_constraints;
Lev Walkin154aa182004-09-26 13:12:56 +0000113 return td->check_constraints(td, sptr, app_errlog, app_key);
Lev Walkin2e3055d2004-08-20 13:36:32 +0000114}
115
116/*
117 * This type is implemented using ConstructedType,
Lev Walkinc3808c12004-09-23 22:14:58 +0000118 * so here we adjust the DEF accordingly.
Lev Walkin2e3055d2004-08-20 13:36:32 +0000119 */
120static void
121T_inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
Lev Walkin2e3055d2004-08-20 13:36:32 +0000122 td->free_struct = asn1_DEF_ConstructedType.free_struct;
123 td->print_struct = asn1_DEF_ConstructedType.print_struct;
Lev Walkina9cc46e2004-09-22 16:06:28 +0000124 td->ber_decoder = asn1_DEF_ConstructedType.ber_decoder;
125 td->der_encoder = asn1_DEF_ConstructedType.der_encoder;
126 td->xer_decoder = asn1_DEF_ConstructedType.xer_decoder;
127 td->xer_encoder = asn1_DEF_ConstructedType.xer_encoder;
Lev Walkin2e3055d2004-08-20 13:36:32 +0000128 td->elements = asn1_DEF_ConstructedType.elements;
129 td->elements_count = asn1_DEF_ConstructedType.elements_count;
130 td->specifics = asn1_DEF_ConstructedType.specifics;
131}
132
Lev Walkina9cc46e2004-09-22 16:06:28 +0000133void
134T_free(asn1_TYPE_descriptor_t *td,
135 void *struct_ptr, int contents_only) {
Lev Walkin2e3055d2004-08-20 13:36:32 +0000136 T_inherit_TYPE_descriptor(td);
Lev Walkina9cc46e2004-09-22 16:06:28 +0000137 td->free_struct(td, struct_ptr, contents_only);
Lev Walkin2e3055d2004-08-20 13:36:32 +0000138}
139
140int
141T_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
142 int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
143 T_inherit_TYPE_descriptor(td);
144 return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
145}
146
Lev Walkina9cc46e2004-09-22 16:06:28 +0000147ber_dec_rval_t
148T_decode_ber(asn1_TYPE_descriptor_t *td,
149 void **structure, void *bufptr, size_t size, int tag_mode) {
Lev Walkin2e3055d2004-08-20 13:36:32 +0000150 T_inherit_TYPE_descriptor(td);
Lev Walkina9cc46e2004-09-22 16:06:28 +0000151 return td->ber_decoder(td, structure, bufptr, size, tag_mode);
152}
153
154asn_enc_rval_t
155T_encode_der(asn1_TYPE_descriptor_t *td,
156 void *structure, int tag_mode, ber_tlv_tag_t tag,
157 asn_app_consume_bytes_f *cb, void *app_key) {
158 T_inherit_TYPE_descriptor(td);
159 return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
160}
161
162asn_enc_rval_t
163T_encode_xer(asn1_TYPE_descriptor_t *td, void *structure,
164 int ilevel, enum xer_encoder_flags_e flags,
165 asn_app_consume_bytes_f *cb, void *app_key) {
166 T_inherit_TYPE_descriptor(td);
167 return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
Lev Walkin2e3055d2004-08-20 13:36:32 +0000168}
169
170
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000171/*** <<< STAT-DEFS [T] >>> ***/
172
173static ber_tlv_tag_t asn1_DEF_T_tags[] = {
Lev Walkin188ed2c2004-09-13 08:31:01 +0000174 (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
175 (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000176};
177asn1_TYPE_descriptor_t asn1_DEF_T = {
178 "T",
Lev Walkina9cc46e2004-09-22 16:06:28 +0000179 T_free,
180 T_print,
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000181 T_constraint,
182 T_decode_ber,
183 T_encode_der,
Lev Walkina9cc46e2004-09-22 16:06:28 +0000184 0, /* Not implemented yet */
185 T_encode_xer,
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000186 0, /* Use generic outmost tag fetcher */
187 asn1_DEF_T_tags,
188 sizeof(asn1_DEF_T_tags)
Lev Walkin188ed2c2004-09-13 08:31:01 +0000189 /sizeof(asn1_DEF_T_tags[0]) - 1, /* 1 */
190 asn1_DEF_T_tags, /* Same as above */
191 sizeof(asn1_DEF_T_tags)
192 /sizeof(asn1_DEF_T_tags[0]), /* 2 */
Lev Walkin2e3055d2004-08-20 13:36:32 +0000193 0, 0, /* Defined elsewhere */
Lev Walkin5bbff1e2004-06-28 21:13:22 +0000194 0 /* No specifics */
195};
196