2
* Copyright (c) 2003, 2005 Lev Walkin <vlm@lionet.info>. All rights reserved.
3
* Redistribution and modifications are permitted subject to BSD license.
5
#include <asn_internal.h>
6
#include <asn_codecs_prim.h>
8
#include <BOOLEAN.h> /* Implemented in terms of BOOLEAN type */
11
* NULL basic type description.
13
static ber_tlv_tag_t asn_DEF_NULL_tags[] = {
14
(ASN_TAG_CLASS_UNIVERSAL | (5 << 2))
16
asn_TYPE_descriptor_t asn_DEF_NULL = {
21
asn_generic_no_constraint,
22
BOOLEAN_decode_ber, /* Implemented in terms of BOOLEAN */
23
NULL_encode_der, /* Special handling of DER encoding */
26
NULL_decode_uper, /* Unaligned PER decoder */
27
NULL_encode_uper, /* Unaligned PER encoder */
28
0, /* Use generic outmost tag fetcher */
30
sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]),
31
asn_DEF_NULL_tags, /* Same as above */
32
sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]),
33
0, /* No PER visible constraints */
34
0, 0, /* No members */
39
NULL_encode_der(asn_TYPE_descriptor_t *td, void *ptr,
40
int tag_mode, ber_tlv_tag_t tag,
41
asn_app_consume_bytes_f *cb, void *app_key) {
44
erval.encoded = der_write_tags(td, 0, tag_mode, 0, tag, cb, app_key);
45
if(erval.encoded == -1) {
46
erval.failed_type = td;
47
erval.structure_ptr = ptr;
50
_ASN_ENCODED_OK(erval);
54
NULL_encode_xer(asn_TYPE_descriptor_t *td, void *sptr,
55
int ilevel, enum xer_encoder_flags_e flags,
56
asn_app_consume_bytes_f *cb, void *app_key) {
66
/* XMLNullValue is empty */
72
static enum xer_pbd_rval
73
NULL__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) {
77
if(xer_is_whitespace(chunk_buf, chunk_size))
78
return XPBD_BODY_CONSUMED;
80
return XPBD_BROKEN_ENCODING;
84
NULL_decode_xer(asn_codec_ctx_t *opt_codec_ctx,
85
asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname,
86
const void *buf_ptr, size_t size) {
88
return xer_decode_primitive(opt_codec_ctx, td,
89
sptr, sizeof(NULL_t), opt_mname, buf_ptr, size,
90
NULL__xer_body_decode);
94
NULL_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
95
asn_app_consume_bytes_f *cb, void *app_key) {
97
(void)td; /* Unused argument */
98
(void)ilevel; /* Unused argument */
101
return (cb("<present>", 9, app_key) < 0) ? -1 : 0;
103
return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
108
NULL_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
109
asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
118
*sptr = MALLOC(sizeof(NULL_t));
120
*(NULL_t *)*sptr = 0;
127
* NULL type does not have content octets.
136
NULL_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints,
137
void *sptr, asn_per_outp_t *po) {