Enhanced SIM for E2AP v1 for TS UC
[sim/e2-interface.git] / e2sim / e2apv1sim / ASN1c / OCTET_STRING.h
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 _OCTET_STRING_H_
6 #define _OCTET_STRING_H_
7
8 #include <asn_application.h>
9
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13
14 typedef struct OCTET_STRING {
15         uint8_t *buf;   /* Buffer with consecutive OCTET_STRING bits */
16         size_t size;    /* Size of the buffer */
17
18         asn_struct_ctx_t _asn_ctx;      /* Parsing across buffer boundaries */
19 } OCTET_STRING_t;
20
21 extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING;
22 extern asn_TYPE_operation_t asn_OP_OCTET_STRING;
23
24 asn_struct_free_f OCTET_STRING_free;
25 asn_struct_print_f OCTET_STRING_print;
26 asn_struct_print_f OCTET_STRING_print_utf8;
27 asn_struct_compare_f OCTET_STRING_compare;
28 ber_type_decoder_f OCTET_STRING_decode_ber;
29 der_type_encoder_f OCTET_STRING_encode_der;
30 xer_type_decoder_f OCTET_STRING_decode_xer_hex;         /* Hexadecimal */
31 xer_type_decoder_f OCTET_STRING_decode_xer_binary;      /* 01010111010 */
32 xer_type_decoder_f OCTET_STRING_decode_xer_utf8;        /* ASCII/UTF-8 */
33 xer_type_encoder_f OCTET_STRING_encode_xer;
34 xer_type_encoder_f OCTET_STRING_encode_xer_utf8;
35 oer_type_decoder_f OCTET_STRING_decode_oer;
36 oer_type_encoder_f OCTET_STRING_encode_oer;
37 per_type_decoder_f OCTET_STRING_decode_uper;
38 per_type_encoder_f OCTET_STRING_encode_uper;
39 per_type_decoder_f OCTET_STRING_decode_aper;
40 per_type_encoder_f OCTET_STRING_encode_aper;
41 asn_random_fill_f  OCTET_STRING_random_fill;
42
43 #define OCTET_STRING_constraint  asn_generic_no_constraint
44 #define OCTET_STRING_decode_xer  OCTET_STRING_decode_xer_hex
45
46 /******************************
47  * Handy conversion routines. *
48  ******************************/
49
50 /*
51  * This function clears the previous value of the OCTET STRING (if any)
52  * and then allocates a new memory with the specified content (str/size).
53  * If size = -1, the size of the original string will be determined
54  * using strlen(str).
55  * If str equals to NULL, the function will silently clear the
56  * current contents of the OCTET STRING.
57  * Returns 0 if it was possible to perform operation, -1 otherwise.
58  */
59 int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size);
60
61 /* Handy conversion from the C string into the OCTET STRING. */
62 #define OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1)
63
64 /*
65  * Allocate and fill the new OCTET STRING and return a pointer to the newly
66  * allocated object. NULL is permitted in str: the function will just allocate
67  * empty OCTET STRING.
68  */
69 OCTET_STRING_t *OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td,
70                                          const char *str, int size);
71
72 /****************************
73  * Internally useful stuff. *
74  ****************************/
75
76 typedef struct asn_OCTET_STRING_specifics_s {
77     /*
78      * Target structure description.
79      */
80     unsigned struct_size;   /* Size of the structure */
81     unsigned ctx_offset;    /* Offset of the asn_struct_ctx_t member */
82
83     enum asn_OS_Subvariant {
84         ASN_OSUBV_ANY, /* The open type (ANY) */
85         ASN_OSUBV_BIT, /* BIT STRING */
86         ASN_OSUBV_STR, /* String types, not {BMP,Universal}String  */
87         ASN_OSUBV_U16, /* 16-bit character (BMPString) */
88         ASN_OSUBV_U32  /* 32-bit character (UniversalString) */
89     } subvariant;
90 } asn_OCTET_STRING_specifics_t;
91
92 extern asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs;
93
94 size_t OCTET_STRING_random_length_constrained(
95     const asn_TYPE_descriptor_t *, const asn_encoding_constraints_t *,
96     size_t max_length);
97
98 #ifdef __cplusplus
99 }
100 #endif
101
102 #endif  /* _OCTET_STRING_H_ */