diff --git a/skeletons/NULL.c b/skeletons/NULL.c index 3b41be2f3932080899a3d643d57ef5e6d70b6359..8cccc66c62cd76243a38b167d1a0758a9305f00d 100644 --- a/skeletons/NULL.c +++ b/skeletons/NULL.c @@ -3,6 +3,7 @@ * Redistribution and modifications are permitted subject to BSD license. */ #include <asn_internal.h> +#include <asn_codecs_prim.h> #include <NULL.h> #include <BOOLEAN.h> /* Implemented in terms of BOOLEAN type */ @@ -20,8 +21,8 @@ asn_TYPE_descriptor_t asn_DEF_NULL = { asn_generic_no_constraint, BOOLEAN_decode_ber, /* Implemented in terms of BOOLEAN */ NULL_encode_der, /* Special handling of DER encoding */ - 0, /* Not implemented yet */ - NULL_encode_xer, /* Special handling of DER encoding */ + NULL_decode_xer, + NULL_encode_xer, 0, /* Use generic outmost tag fetcher */ asn_DEF_NULL_tags, sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]), @@ -65,6 +66,25 @@ NULL_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, return er; } + +static ssize_t +NULL__xer_body_decode(void *sptr, void *chunk_buf, size_t chunk_size) { + (void)sptr; + if(xer_is_whitespace(chunk_buf, chunk_size)) + return chunk_size; + return -1; +} + +asn_dec_rval_t +NULL_decode_xer(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, + void *buf_ptr, size_t size) { + + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(NULL_t), opt_mname, buf_ptr, size, + NULL__xer_body_decode); +} + int NULL_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { diff --git a/skeletons/NULL.h b/skeletons/NULL.h index 1a9f7030afd58bff3c1fada481b1da0388ea1152..bce436bd725135a9edda67d37a5ab50e17c0a636 100644 --- a/skeletons/NULL.h +++ b/skeletons/NULL.h @@ -17,6 +17,7 @@ extern asn_TYPE_descriptor_t asn_DEF_NULL; asn_struct_print_f NULL_print; der_type_encoder_f NULL_encode_der; +xer_type_decoder_f NULL_decode_xer; xer_type_encoder_f NULL_encode_xer; #endif /* NULL_H */