OBJECT_IDENTIFIER.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
3  * Redistribution and modifications are permitted subject to BSD license.
4  */
5 #ifndef _OBJECT_IDENTIFIER_H_
6 #define _OBJECT_IDENTIFIER_H_
7 
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 typedef uint32_t asn_oid_arc_t;
17 #define ASN_OID_ARC_MAX (~((asn_oid_arc_t)0))
18 
20 
23 
26  void *app_key);
27 
28 #define OBJECT_IDENTIFIER_free ASN__PRIMITIVE_TYPE_free
29 
30 #if !defined(ASN_DISABLE_PRINT_SUPPORT)
32 #endif /* !defined(ASN_DISABLE_PRINT_SUPPORT) */
33 
34 #define OBJECT_IDENTIFIER_compare OCTET_STRING_compare
35 #define OBJECT_IDENTIFIER_copy OCTET_STRING_copy
36 
38 
39 #if !defined(ASN_DISABLE_BER_SUPPORT)
40 #define OBJECT_IDENTIFIER_decode_ber ber_decode_primitive
41 #define OBJECT_IDENTIFIER_encode_der der_encode_primitive
42 #endif /* !defined(ASN_DISABLE_BER_SUPPORT) */
43 
44 #if !defined(ASN_DISABLE_XER_SUPPORT)
45 xer_type_decoder_f OBJECT_IDENTIFIER_decode_xer;
46 xer_type_encoder_f OBJECT_IDENTIFIER_encode_xer;
47 #endif /* !defined(ASN_DISABLE_XER_SUPPORT) */
48 
49 #if !defined(ASN_DISABLE_JER_SUPPORT)
52 #endif /* !defined(ASN_DISABLE_JER_SUPPORT) */
53 
54 #if !defined(ASN_DISABLE_OER_SUPPORT)
55 #define OBJECT_IDENTIFIER_decode_oer oer_decode_primitive
56 #define OBJECT_IDENTIFIER_encode_oer oer_encode_primitive
57 #endif /* !defined(ASN_DISABLE_OER_SUPPORT) */
58 
59 #if !defined(ASN_DISABLE_UPER_SUPPORT)
60 #define OBJECT_IDENTIFIER_decode_uper OCTET_STRING_decode_uper
61 #define OBJECT_IDENTIFIER_encode_uper OCTET_STRING_encode_uper
62 #endif /* !defined(ASN_DISABLE_UPER_SUPPORT) */
63 #if !defined(ASN_DISABLE_APER_SUPPORT)
64 #define OBJECT_IDENTIFIER_decode_aper OCTET_STRING_decode_aper
65 #define OBJECT_IDENTIFIER_encode_aper OCTET_STRING_encode_aper
66 #endif /* !defined(ASN_DISABLE_APER_SUPPORT) */
67 
68 #if !defined(ASN_DISABLE_RFILL_SUPPORT)
70 #endif /* !defined(ASN_DISABLE_RFILL_SUPPORT) */
71 
72 /**********************************
73  * Some handy conversion routines *
74  **********************************/
75 
76 /*
77  * This function fills an (arcs) array with OBJECT IDENTIFIER arcs
78  * up to specified (arc_slots) elements.
79  *
80  * EXAMPLE:
81  * void print_arcs(OBJECT_IDENTIFIER_t *oid) {
82  * asn_oid_arc_t fixed_arcs[10]; // Try with fixed space first
83  * asn_oid_arc_t *arcs = fixed_arcs;
84  * size_t arc_slots = sizeof(fixed_arcs)/sizeof(fixed_arcs[0]); // 10
85  * ssize_t count; // Real number of arcs.
86  * int i;
87  *
88  * count = OBJECT_IDENTIFIER_get_arcs(oid, arcs, arc_slots);
89  * // If necessary, reallocate arcs array and try again.
90  * if(count > arc_slots) {
91  * arc_slots = count;
92  * arcs = malloc(sizeof(asn_oid_arc_t) * arc_slots);
93  * if(!arcs) return;
94  * count = OBJECT_IDENTIFIER_get_arcs(oid, arcs, arc_slots);
95  * assert(count == arc_slots);
96  * }
97  *
98  * // Print the contents of the arcs array.
99  * for(i = 0; i < count; i++)
100  * printf("%"PRIu32"\n", arcs[i]);
101  *
102  * // Avoid memory leak.
103  * if(arcs != fixed_arcs) free(arcs);
104  * }
105  *
106  * RETURN VALUES:
107  * -1/EINVAL: Invalid arguments (oid is missing)
108  * -1/ERANGE: One or more arcs have value out of array cell type range.
109  * >=0: Number of arcs contained in the OBJECT IDENTIFIER
110  *
111  * WARNING: The function always returns the actual number of arcs,
112  * even if there is no sufficient (arc_slots) provided.
113  */
115  asn_oid_arc_t *arcs, size_t arc_slots);
116 
117 /*
118  * This functions initializes the OBJECT IDENTIFIER object with
119  * the given set of arcs.
120  * The minimum of two arcs must be present; some restrictions apply.
121  * RETURN VALUES:
122  * -1/EINVAL: Invalid arguments
123  * -1/ERANGE: The first two arcs do not conform to ASN.1 restrictions.
124  * -1/ENOMEM: Memory allocation failed
125  * 0: The object was initialized with new arcs.
126  */
128  const asn_oid_arc_t *arcs, size_t arcs_count);
129 
130 
131 /*
132  * Parse the OBJECT IDENTIFIER textual representation ("1.3.6.1.4.1.9363").
133  * No arc can exceed the (0..ASN_OID_ARC_MAX, which is the same as UINT32_MAX).
134  * This function is not specific to OBJECT IDENTIFIER, it may be used to parse
135  * the RELATIVE-OID data, or any other data consisting of dot-separated
136  * series of numeric values.
137  *
138  * If (oid_txt_length == -1), the strlen() will be invoked to determine the
139  * size of the (oid_text) string.
140  *
141  * After return, the optional (opt_oid_text_end) is set to the character after
142  * the last parsed one. (opt_oid_text_end) is never less than (oid_text).
143  *
144  * RETURN VALUES:
145  * -1: Parse error.
146  * >= 0: Number of arcs contained in the OBJECT IDENTIFIER.
147  *
148  * WARNING: The function always returns the real number of arcs,
149  * even if there is no sufficient (arc_slots) provided.
150  * This is useful for (arc_slots) value estimation.
151  */
152 ssize_t OBJECT_IDENTIFIER_parse_arcs(const char *oid_text,
153  ssize_t oid_txt_length,
154  asn_oid_arc_t *arcs, size_t arcs_count,
155  const char **opt_oid_text_end);
156 
157 /*
158  * Internal functions.
159  * Used by RELATIVE-OID implementation in particular.
160  */
161 
162 /*
163  * Retrieve a single arc of size from the (arcbuf) buffer.
164  * RETURN VALUES:
165  * -1: Failed to retrieve the value from the (arcbuf).
166  * >0: Number of bytes consumed from the (arcbuf), <= (arcbuf_len).
167  */
168 ssize_t OBJECT_IDENTIFIER_get_single_arc(const uint8_t *arcbuf,
169  size_t arcbuf_len,
170  asn_oid_arc_t *ret_value);
171 
172 /*
173  * Write the unterminated arc value into the (arcbuf) which has the size at
174  * least (arcbuf_len).
175  * RETURN VALUES:
176  * -1: (arcbuf_len) size is not sufficient to write the value.
177  * <n>: Number of bytes appended to the arcbuf (<= arcbuf_len).
178  */
179 ssize_t OBJECT_IDENTIFIER_set_single_arc(uint8_t *arcbuf, size_t arcbuf_len,
180  asn_oid_arc_t arc_value);
181 
182 #ifdef __cplusplus
183 }
184 #endif
185 
186 #endif /* _OBJECT_IDENTIFIER_H_ */
OBJECT_IDENTIFIER_decode_jer
jer_type_decoder_f OBJECT_IDENTIFIER_decode_jer
Definition: OBJECT_IDENTIFIER.h:50
OBJECT_IDENTIFIER_set_arcs
int OBJECT_IDENTIFIER_set_arcs(OBJECT_IDENTIFIER_t *oid, const asn_oid_arc_t *arcs, size_t arcs_count)
Definition: OBJECT_IDENTIFIER.c:333
ASN__PRIMITIVE_TYPE_s
Definition: asn_codecs_prim.h:14
asn_TYPE_operation_s
Definition: constr_TYPE.h:184
OBJECT_IDENTIFIER_random_fill
asn_random_fill_f OBJECT_IDENTIFIER_random_fill
Definition: OBJECT_IDENTIFIER.h:69
asn_struct_print_f
int() asn_struct_print_f(const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, int level, asn_app_consume_bytes_f *callback, void *app_key)
Definition: constr_TYPE.h:129
OBJECT_IDENTIFIER_constraint
asn_constr_check_f OBJECT_IDENTIFIER_constraint
Definition: OBJECT_IDENTIFIER.h:37
OBJECT_IDENTIFIER_parse_arcs
ssize_t OBJECT_IDENTIFIER_parse_arcs(const char *oid_text, ssize_t oid_txt_length, asn_oid_arc_t *arcs, size_t arcs_count, const char **opt_oid_text_end)
Definition: OBJECT_IDENTIFIER.c:421
asn_random_fill_f
asn_random_fill_result_t() asn_random_fill_f(const struct asn_TYPE_descriptor_s *td, void **struct_ptr, const struct asn_encoding_constraints_s *memb_constraints, size_t max_length)
Definition: asn_random_fill.h:32
OBJECT_IDENTIFIER_set_single_arc
ssize_t OBJECT_IDENTIFIER_set_single_arc(uint8_t *arcbuf, size_t arcbuf_len, asn_oid_arc_t arc_value)
Definition: OBJECT_IDENTIFIER.c:301
asn_oid_arc_t
uint32_t asn_oid_arc_t
Definition: OBJECT_IDENTIFIER.h:16
OBJECT_IDENTIFIER_print
asn_struct_print_f OBJECT_IDENTIFIER_print
Definition: OBJECT_IDENTIFIER.h:31
asn_codecs_prim.h
asn_TYPE_descriptor_s
Definition: constr_TYPE.h:224
jer_type_encoder_f
asn_enc_rval_t() jer_type_encoder_f(const struct asn_TYPE_descriptor_s *type_descriptor, const asn_jer_constraints_t *constraints, const void *struct_ptr, int ilevel, enum jer_encoder_flags_e jer_flags, asn_app_consume_bytes_f *consume_bytes_cb, void *app_key)
Definition: jer_encoder.h:73
OBJECT_IDENTIFIER_t
ASN__PRIMITIVE_TYPE_t OBJECT_IDENTIFIER_t
Definition: OBJECT_IDENTIFIER.h:19
jer_type_decoder_f
asn_dec_rval_t() jer_type_decoder_f(const asn_codec_ctx_t *opt_codec_ctx, const struct asn_TYPE_descriptor_s *type_descriptor, const asn_jer_constraints_t *constraints, void **struct_ptr, const void *buf_ptr, size_t size)
Definition: jer_decoder.h:32
asn_OP_OBJECT_IDENTIFIER
asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER
Definition: OBJECT_IDENTIFIER.c:19
OBJECT_IDENTIFIER_get_arcs
ssize_t OBJECT_IDENTIFIER_get_arcs(const OBJECT_IDENTIFIER_t *oid, asn_oid_arc_t *arcs, size_t arc_slots)
Definition: OBJECT_IDENTIFIER.c:241
asn_constr_check_f
int() asn_constr_check_f(const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, asn_app_constraint_failed_f *optional_callback, void *optional_app_key)
Definition: constraints.h:41
OBJECT_IDENTIFIER_decode_xer
xer_type_decoder_f OBJECT_IDENTIFIER_decode_xer
Definition: OBJECT_IDENTIFIER.h:45
asn_app_consume_bytes_f
int() asn_app_consume_bytes_f(const void *buffer, size_t size, void *application_specific_key)
Definition: asn_application.h:124
OBJECT_IDENTIFIER__dump_body
ssize_t OBJECT_IDENTIFIER__dump_body(const OBJECT_IDENTIFIER_t *st, asn_app_consume_bytes_f *cb, void *app_key)
Definition: OBJECT_IDENTIFIER.c:188
asn_application.h
OBJECT_IDENTIFIER_encode_jer
jer_type_encoder_f OBJECT_IDENTIFIER_encode_jer
Definition: OBJECT_IDENTIFIER.h:51
OBJECT_IDENTIFIER_encode_xer
xer_type_encoder_f OBJECT_IDENTIFIER_encode_xer
Definition: OBJECT_IDENTIFIER.h:46
asn_DEF_OBJECT_IDENTIFIER
asn_TYPE_descriptor_t asn_DEF_OBJECT_IDENTIFIER
Definition: OBJECT_IDENTIFIER.c:77
OBJECT_IDENTIFIER_get_single_arc
ssize_t OBJECT_IDENTIFIER_get_single_arc(const uint8_t *arcbuf, size_t arcbuf_len, asn_oid_arc_t *ret_value)
Definition: OBJECT_IDENTIFIER.c:150
OCTET_STRING.h


etsi_its_cpm_ts_coding
Author(s): Jean-Pierre Busch , Guido Küppers , Lennart Reiher
autogenerated on Sun May 18 2025 02:22:38