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_TYPE_ANY_H
6 #define ASN_TYPE_ANY_H
7 
8 #include "asn1/asn1c/OCTET_STRING.h"	/* Implemented via OCTET STRING type */
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 typedef struct ANY {
15 	uint8_t *buf;	/* BER-encoded ANY contents */
16 	int size;	/* Size of the above buffer */
17 
18 	asn_struct_ctx_t _asn_ctx;	/* Parsing across buffer boundaries */
19 } ANY_t;
20 
21 extern asn_TYPE_descriptor_t asn_DEF_ANY;
22 extern asn_TYPE_operation_t asn_OP_ANY;
23 extern asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs;
24 
25 asn_struct_free_f ANY_free;
26 asn_struct_print_f ANY_print;
27 ber_type_decoder_f ANY_decode_ber;
28 der_type_encoder_f ANY_encode_der;
29 xer_type_encoder_f ANY_encode_xer;
30 per_type_decoder_f ANY_decode_uper;
31 per_type_encoder_f ANY_encode_uper;
32 
33 #define ANY_free         OCTET_STRING_free
34 #define ANY_print        OCTET_STRING_print
35 #define ANY_compare      OCTET_STRING_compare
36 #define ANY_constraint   asn_generic_no_constraint
37 #define ANY_decode_ber   OCTET_STRING_decode_ber
38 #define ANY_encode_der   OCTET_STRING_encode_der
39 #define ANY_decode_xer   OCTET_STRING_decode_xer_hex
40 
41 /******************************
42  * Handy conversion routines. *
43  ******************************/
44 
45 /* Convert another ASN.1 type into the ANY. This implies DER encoding. */
46 int ANY_fromType(ANY_t *, asn_TYPE_descriptor_t *td, void *struct_ptr);
47 ANY_t *ANY_new_fromType(asn_TYPE_descriptor_t *td, void *struct_ptr);
48 
49 /* Convert the contents of the ANY type into the specified type. */
50 int ANY_to_type(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr);
51 
52 #define	ANY_fromBuf(s, buf, size)	OCTET_STRING_fromBuf((s), (buf), (size))
53 #define	ANY_new_fromBuf(buf, size)	OCTET_STRING_new_fromBuf(	\
54 						&asn_DEF_ANY, (buf), (size))
55 
56 #ifdef __cplusplus
57 }
58 #endif
59 
60 #endif	/* ASN_TYPE_ANY_H */
61