aboutsummaryrefslogtreecommitdiffstats
path: root/skeletons/oer_decoder.h
blob: 40992e9480ec37b7ffc27cdd2ab74bf4148619f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
 * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
 * Redistribution and modifications are permitted subject to BSD license.
 */
#ifndef	OER_DECODER_H
#define	OER_DECODER_H

#include <asn_application.h>
#include <oer_support.h>

#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 */