custom_data.c
Go to the documentation of this file.
1 
10 #include "custom_data.h"
11 #include "mcl_core/mcl_memory.h"
13 
14 mcl_error_t mcl_custom_data_initialize(const char *version, mcl_custom_data_t **custom_data)
15 {
16  mcl_error_t code = MCL_OK;
17 
18  MCL_DEBUG_ENTRY("const char version = <%p>, mcl_custom_data_t **custom_data = <%p>", version, custom_data);
19 
20  // Null check.
21  MCL_ASSERT_NOT_NULL(custom_data, code);
22  MCL_ASSERT_NOT_NULL(version, code);
23 
24  // Allocate memory for custom data.
25  if (MCL_NULL != MCL_NEW(*custom_data))
26  {
27  // Set base parameters for custom data.
28  (*custom_data)->item_base.preamble = MCL_ITEM_PREAMBLE;
29  (*custom_data)->item_base.type = MCL_ITEM_TYPE_CUSTOM_DATA;
30  (*custom_data)->item_base.version = 0;
31 
32  // Allocate memory for custom_data payload.
33  MCL_NEW((*custom_data)->payload);
34  }
35 
36  if ((MCL_NULL != (*custom_data)) && (MCL_NULL != (*custom_data)->payload))
37  {
38  (*custom_data)->payload->version = MCL_NULL;
39  code = mcl_string_util_reset(version, &((*custom_data)->payload->version));
40  (*custom_data)->payload->buffer = MCL_NULL;
41  (*custom_data)->payload->content_type = MCL_NULL;
42  (*custom_data)->payload->type = MCL_NULL;
43  (*custom_data)->payload->details = MCL_NULL;
44  (*custom_data)->payload->size = 0;
45  }
46  else
47  {
48  code = MCL_OUT_OF_MEMORY;
49  }
50 
51  if (MCL_OK != code)
52  {
53  mcl_custom_data_destroy(custom_data);
54  }
55 
57  MCL_DEBUG_LEAVE("retVal = <%d>", code);
58  return code;
59 }
60 
62 {
63  mcl_error_t code = MCL_OK;
64 
65  MCL_DEBUG_ENTRY("mcl_custom_data_t *custom_data = <%p>, E_MCL_CUSTOM_DATA_PARAMETER parameter = <%d>, const void *value = <%p>",
66  custom_data, parameter, value);
67 
68  // Null check.
69  MCL_ASSERT_NOT_NULL(custom_data, code);
70  MCL_ASSERT_NOT_NULL(value, code);
71 
72  switch (parameter)
73  {
75  code = mcl_string_util_reset(value, &custom_data->payload->content_type);
76  break;
77 
79  code = mcl_string_util_reset(value, &custom_data->payload->type);
80  break;
81 
83  custom_data->payload->buffer = (const mcl_uint8_t *) value;
84  break;
85 
87  custom_data->payload->size = *(const mcl_size_t *) value;
88  break;
89 
91  mcl_json_util_destroy(&custom_data->payload->details);
92  code = mcl_json_util_duplicate((const mcl_json_t *) value, &custom_data->payload->details);
93  break;
94 
95  default:
96  code = MCL_INVALID_PARAMETER;
97  }
98 
100  MCL_DEBUG_LEAVE("retVal = <%d>", code);
101  return code;
102 }
103 
105 {
106  mcl_error_t code = MCL_OK;
107  custom_data_payload_t *payload = custom_data->payload;
108 
109  MCL_DEBUG_ENTRY("custom_data_t *custom_data = <%p>", custom_data);
110 
111  // Checks whether all mandatory parameters of a custom data are set or not.
112  if ((MCL_NULL == payload->buffer) || (MCL_NULL == payload->content_type) ||
113  (MCL_NULL == payload->type) || (MCL_NULL == payload->version) || (0 == payload->size))
114  {
115  code = MCL_INVALID_PARAMETER;
116  }
117 
118  MCL_DEBUG_LEAVE("retVal = <%d>", code);
119  return code;
120 }
121 
123 {
124  MCL_DEBUG_ENTRY("mcl_custom_data_t **custom_data = <%p>", custom_data);
125 
126  // Destroys the custom data data structure.
127  if ((MCL_NULL != custom_data) && (MCL_NULL != *custom_data))
128  {
129  if (MCL_NULL != (*custom_data)->payload)
130  {
131  // Destroy payload.
132  MCL_FREE((*custom_data)->payload->version);
133  MCL_FREE((*custom_data)->payload->content_type);
134  MCL_FREE((*custom_data)->payload->type);
135  mcl_json_util_destroy(&((*custom_data)->payload->details));
136  MCL_FREE((*custom_data)->payload);
137  }
138 
139  MCL_FREE(*custom_data);
140  }
141 
142  MCL_DEBUG_LEAVE("retVal = void");
143 }
const mcl_uint8_t * buffer
Buffer of custom data.
Definition: custom_data.h:21
#define MCL_FUNCTION_LEAVE_LABEL
Custom data content type parameter as char*.
size_t mcl_size_t
custom_data_payload_t * payload
Payload of custom data.
Definition: custom_data.h:34
Custom data buffer parameter as char*.
Item type custom data.
Definition: item.h:27
MCL_OK
void mcl_json_t
mcl_size_t size
Size of custom data.
Definition: custom_data.h:24
E_MCL_CUSTOM_DATA_PARAMETER
MCL_CORE_EXPORT mcl_error_t mcl_string_util_reset(const void *value, char **target)
mcl_int32_t mcl_error_t
Custom data buffer size parameter as mcl_size_t.
char * version
Version of custom data.
Definition: custom_data.h:20
Custom data details parameter as mcl_json_t* (optional).
#define MCL_DEBUG_ENTRY(...)
MCL_CORE_EXPORT void mcl_json_util_destroy(mcl_json_t **root)
struct mcl_custom_data_t mcl_custom_data_t
#define MCL_NEW(p)
#define MCL_NULL
mcl_error_t mcl_custom_data_initialize(const char *version, mcl_custom_data_t **custom_data)
Definition: custom_data.c:14
Custom data module interface header file.
#define MCL_FREE(p)
uint8_t mcl_uint8_t
mcl_error_t mcl_custom_data_set_parameter(mcl_custom_data_t *custom_data, E_MCL_CUSTOM_DATA_PARAMETER parameter, const void *value)
Definition: custom_data.c:61
#define MCL_ASSERT_NOT_NULL(argument, return_variable)
Custom data type parameter as char*.
void mcl_custom_data_destroy(mcl_custom_data_t **custom_data)
Definition: custom_data.c:122
#define MCL_ITEM_PREAMBLE
Definition: item.h:17
MCL_CORE_EXPORT mcl_error_t mcl_json_util_duplicate(const mcl_json_t *source_json, mcl_json_t **duplicated_json)
Custom data module header file.
mcl_error_t custom_data_validate(custom_data_t *custom_data)
Definition: custom_data.c:104
MCL_OUT_OF_MEMORY
MCL_INVALID_PARAMETER
#define MCL_DEBUG_LEAVE(...)
char * type
Type of custom data.
Definition: custom_data.h:23
char * content_type
Content type of custom data.
Definition: custom_data.h:22