/* * Copyright (c) 2017 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef OER_DECODER_H #define OER_DECODER_H #include #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ struct asn_codec_ctx_s; /* Forward declaration */ /* * The Octet Encoding Rules (OER, X.696 08/2015) decoder for any given type. * This function may be invoked directly by the application. * Parses CANONICAL-OER and BASIC-OER. */ asn_dec_rval_t oer_decode(const struct asn_codec_ctx_s *opt_codec_ctx, const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, /* Pointer to a target structure's pointer */ const void *buffer, /* Data to be decoded */ size_t size /* Size of that buffer */ ); /* * Type of generic function which decodes the byte stream into the structure. */ typedef asn_dec_rval_t(oer_type_decoder_f)( const struct asn_codec_ctx_s *opt_codec_ctx, const struct asn_TYPE_descriptor_s *type_descriptor, const asn_oer_constraints_t *constraints, void **struct_ptr, const void *buf_ptr, size_t size); /* * Swallow the Open Type (X.696 (08/2015), #30) into /dev/null. * RETURN VALUES: * -1: Fatal error deciphering length. * 0: More data expected than bufptr contains. * >0: Number of bytes used from bufptr. */ ssize_t oer_open_type_skip(const void *bufptr, size_t size); /* * Read the Open Type (X.696 (08/2015), #30). * RETURN VALUES: * 0: More data expected than bufptr contains. * -1: Fatal error deciphering length. * >0: Number of bytes used from bufptr. */ ssize_t oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx, const struct asn_TYPE_descriptor_s *td, const asn_oer_constraints_t *constraints, void **struct_ptr, const void *bufptr, size_t size); /* * Length-prefixed buffer decoding for primitive types. */ oer_type_decoder_f oer_decode_primitive; #ifdef __cplusplus } #endif #endif /* OER_DECODER_H */