Ejemplo n.º 1
0
void sml_time_free(sml_time *tme) {
    if (tme) {
		sml_number_free(tme->tag);
		sml_number_free(tme->data.timestamp);
        free(tme);
    }
}
Ejemplo n.º 2
0
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);
    }
}
Ejemplo n.º 3
0
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);
	}
}
Ejemplo n.º 4
0
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);
	}
}
Ejemplo n.º 6
0
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);
	}
}
Ejemplo n.º 7
0
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);
	}
}
Ejemplo n.º 8
0
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);
	}
}
Ejemplo n.º 10
0
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);
	}
}
Ejemplo n.º 11
0
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);
	}
}
Ejemplo n.º 12
0
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);
	}
}
Ejemplo n.º 13
0
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);
	}
}