void sml_time_free(sml_time *tme) { if (tme) { sml_number_free(tme->tag); sml_number_free(tme->data.timestamp); free(tme); } }
sml_time *sml_time_init() { sml_time *t = (sml_time *) malloc(sizeof(sml_time)); *t = ( sml_time ) { .tag = NULL, .data.sec_index = NULL }; return t; } sml_time *sml_time_parse(sml_buffer *buf) { if (sml_buf_optional_is_skipped(buf)) { return 0; } sml_time *tme = sml_time_init(); if (sml_buf_get_next_type(buf) != SML_TYPE_LIST) { buf->error = 1; goto error; } if (sml_buf_get_next_length(buf) != 2) { buf->error = 1; goto error; } tme->tag = sml_u8_parse(buf); if (sml_buf_has_errors(buf)) goto error; tme->data.timestamp = sml_u32_parse(buf); if (sml_buf_has_errors(buf)) goto error; return tme; error: sml_time_free(tme); return 0; } void sml_time_write(sml_time *t, sml_buffer *buf) { if (t == 0) { sml_buf_optional_write(buf); return; } sml_buf_set_type_and_length(buf, SML_TYPE_LIST, 2); sml_u8_write(t->tag, buf); sml_u32_write(t->data.timestamp, buf); } void sml_time_free(sml_time *tme) { if (tme) { sml_number_free(tme->tag); sml_number_free(tme->data.timestamp); free(tme); } }
void sml_message_free(sml_message *msg) { if (msg) { sml_octet_string_free(msg->transaction_id); sml_number_free(msg->group_id); sml_number_free(msg->abort_on_error); sml_message_body_free(msg->message_body); sml_number_free(msg->crc); free(msg); } }
void sml_proc_par_value_free(sml_proc_par_value *ppv) { if (ppv) { if (ppv->tag) { switch (*(ppv->tag)) { case SML_PROC_PAR_VALUE_TAG_VALUE: sml_value_free(ppv->data.value); break; case SML_PROC_PAR_VALUE_TAG_PERIOD_ENTRY: sml_period_entry_free(ppv->data.period_entry); break; case SML_PROC_PAR_VALUE_TAG_TUPEL_ENTRY: sml_tupel_entry_free(ppv->data.tupel_entry); break; case SML_PROC_PAR_VALUE_TAG_TIME: sml_time_free(ppv->data.time); break; default: if (ppv->data.value) { free(ppv->data.value); } } sml_number_free(ppv->tag); } else { // Without the tag, there might be a memory leak. if (ppv->data.value) { free(ppv->data.value); } } free(ppv); } }
static void sml_prof_obj_header_entry_free_( void * p ) { sml_prof_obj_header_entry * entry = p; if (entry) { sml_octet_string_free(entry->obj_name); sml_unit_free(entry->unit); sml_number_free(entry->scaler); free(entry); } }
void sml_period_entry_free(sml_period_entry *period) { if (period) { sml_octet_string_free(period->obj_name); sml_unit_free(period->unit); sml_number_free(period->scaler); sml_value_free(period->value); sml_octet_string_free(period->value_signature); free(period); } }
void sml_message_body_free(sml_message_body *message_body) { if (message_body) { switch (*(message_body->tag)) { case SML_MESSAGE_OPEN_REQUEST: sml_open_request_free((sml_open_request *) message_body->data); break; case SML_MESSAGE_OPEN_RESPONSE: sml_open_response_free((sml_open_response *) message_body->data); break; case SML_MESSAGE_CLOSE_REQUEST: sml_close_request_free((sml_close_request *) message_body->data); break; case SML_MESSAGE_CLOSE_RESPONSE: sml_close_response_free((sml_close_response *) message_body->data); break; case SML_MESSAGE_GET_PROFILE_PACK_REQUEST: sml_get_profile_pack_request_free((sml_get_profile_pack_request *) message_body->data); break; case SML_MESSAGE_GET_PROFILE_PACK_RESPONSE: sml_get_profile_pack_response_free((sml_get_profile_pack_response *) message_body->data); break; case SML_MESSAGE_GET_PROFILE_LIST_REQUEST: sml_get_profile_list_request_free((sml_get_profile_list_request *) message_body->data); break; case SML_MESSAGE_GET_PROFILE_LIST_RESPONSE: sml_get_profile_list_response_free((sml_get_profile_list_response *) message_body->data); break; case SML_MESSAGE_GET_PROC_PARAMETER_REQUEST: sml_get_proc_parameter_request_free((sml_get_proc_parameter_request *) message_body->data); break; case SML_MESSAGE_GET_PROC_PARAMETER_RESPONSE: sml_get_proc_parameter_response_free((sml_get_proc_parameter_response *) message_body->data); break; case SML_MESSAGE_SET_PROC_PARAMETER_REQUEST: sml_set_proc_parameter_request_free((sml_set_proc_parameter_request *) message_body->data); break; case SML_MESSAGE_GET_LIST_REQUEST: sml_get_list_request_free((sml_get_list_request *) message_body->data); break; case SML_MESSAGE_GET_LIST_RESPONSE: sml_get_list_response_free((sml_get_list_response *) message_body->data); break; case SML_MESSAGE_ATTENTION_RESPONSE: sml_attention_response_free((sml_attention_response *) message_body->data); break; default: printf("NYI: %s for message type %04X\n", __FUNCTION__, *(message_body->tag)); break; } sml_number_free(message_body->tag); free(message_body); } }
void sml_open_response_free(sml_open_response *msg) { if (msg) { sml_octet_string_free(msg->codepage); sml_octet_string_free(msg->client_id); sml_octet_string_free(msg->req_file_id); sml_octet_string_free(msg->server_id); sml_time_free(msg->ref_time); sml_number_free(msg->sml_version); free(msg); } }
static void sml_prof_obj_period_entry_free_( void * p ) { sml_prof_obj_period_entry * entry = p; if (entry) { sml_time_free(entry->val_time); sml_number_free(entry->status); sml_sequence_free(entry->value_list); sml_signature_free(entry->period_signature); free(entry); } }
void sml_open_request_free(sml_open_request *msg) { if (msg) { sml_octet_string_free(msg->codepage); sml_octet_string_free(msg->client_id); sml_octet_string_free(msg->req_file_id); sml_octet_string_free(msg->server_id); sml_octet_string_free(msg->username); sml_octet_string_free(msg->password); sml_number_free(msg->sml_version); free(msg); } }
void sml_get_profile_pack_response_free(sml_get_profile_pack_response *msg){ if (msg) { sml_octet_string_free(msg->server_id); sml_time_free(msg->act_time); sml_number_free(msg->reg_period); sml_tree_path_free(msg->parameter_tree_path); sml_sequence_free(msg->header_list); sml_sequence_free(msg->period_list); sml_octet_string_free(msg->rawdata); sml_signature_free(msg->profile_signature); free(msg); } }
void sml_value_free(sml_value *value) { if (value) { switch (value->type) { case SML_TYPE_OCTET_STRING: sml_octet_string_free(value->data.bytes); break; case SML_TYPE_BOOLEAN: sml_boolean_free(value->data.boolean); break; default: sml_number_free(value->data.int8); break; } free(value); } }
void sml_tupel_entry_free(sml_tupel_entry *tupel) { if (tupel) { sml_octet_string_free(tupel->server_id); sml_time_free(tupel->sec_index); sml_number_free(tupel->status); sml_unit_free(tupel->unit_pA); sml_number_free(tupel->scaler_pA); sml_number_free(tupel->value_pA); sml_unit_free(tupel->unit_R1); sml_number_free(tupel->scaler_R1); sml_number_free(tupel->value_R1); sml_unit_free(tupel->unit_R4); sml_number_free(tupel->scaler_R4); sml_number_free(tupel->value_R4); sml_octet_string_free(tupel->signature_pA_R1_R4); sml_unit_free(tupel->unit_mA); sml_number_free(tupel->scaler_mA); sml_number_free(tupel->value_mA); sml_unit_free(tupel->unit_R2); sml_number_free(tupel->scaler_R2); sml_number_free(tupel->value_R2); sml_unit_free(tupel->unit_R3); sml_number_free(tupel->scaler_R3); sml_number_free(tupel->value_R3); sml_octet_string_free(tupel->signature_mA_R2_R3); free(tupel); } }