1 /*- 2 * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved. 3 * Redistribution and modifications are permitted subject to BSD license. 4 */ 5 #ifndef ASN_CODECS_PRIM_H 6 #define ASN_CODECS_PRIM_H 7 8 #include "asn1/asn1c/asn_application.h" 9 10 #ifdef __cplusplus 11 extern "C" { 12 #endif 13 14 typedef struct ASN__PRIMITIVE_TYPE_s { 15 uint8_t *buf; /* Buffer with consecutive primitive encoding bytes */ 16 size_t size; /* Size of the buffer */ 17 } ASN__PRIMITIVE_TYPE_t; /* Do not use this type directly! */ 18 19 asn_struct_free_f ASN__PRIMITIVE_TYPE_free; 20 ber_type_decoder_f ber_decode_primitive; 21 der_type_encoder_f der_encode_primitive; 22 23 /* 24 * A callback specification for the xer_decode_primitive() function below. 25 */ 26 enum xer_pbd_rval { 27 XPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */ 28 XPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */ 29 XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */ 30 XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */ 31 XPBD_BODY_CONSUMED /* Body is recognized and consumed */ 32 }; 33 typedef enum xer_pbd_rval(xer_primitive_body_decoder_f)( 34 const asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf, 35 size_t chunk_size); 36 37 /* 38 * Specific function to decode simple primitive types. 39 * Also see xer_decode_general() in xer_decoder.h 40 */ 41 asn_dec_rval_t xer_decode_primitive( 42 const asn_codec_ctx_t *opt_codec_ctx, 43 const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, 44 size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size, 45 xer_primitive_body_decoder_f *prim_body_decoder); 46 47 #ifdef __cplusplus 48 } 49 #endif 50 51 #endif /* ASN_CODECS_PRIM_H */ 52