static void * sml_prof_obj_period_entry_parse_(sml_buffer *buf) {
	sml_prof_obj_period_entry *entry = sml_prof_obj_period_entry_init();

	if (sml_buf_get_next_type(buf) != SML_TYPE_LIST) {
		buf->error = 1;
		goto error;
	}

	if (sml_buf_get_next_length(buf) != 4) {
		buf->error = 1;
		goto error;
	}


	entry->val_time = sml_time_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;
	entry->status = sml_u64_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;
	entry->value_list = sml_sequence_parse(buf, sml_value_entry_parse_, sml_value_entry_free_);
	if (sml_buf_has_errors(buf)) goto error;
	entry->period_signature = sml_signature_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	return entry;

error:
	buf->error = 1;
	sml_prof_obj_period_entry_free(entry);
	return 0;
}
Ejemplo n.º 2
0
TEST(sml_sequence, parse_octet_string) {
	hex2binary("720648616C6C6F0648616C6C6F", sml_buf_get_current_buf(buf));

	sml_sequence *seq = sml_sequence_parse(buf, (void *) &sml_octet_string_parse, (void (*)(void *))&sml_octet_string_free);
	TEST_ASSERT_NOT_NULL(seq);
	TEST_ASSERT_EQUAL(2, seq->elems_len);
}
sml_get_profile_pack_response *sml_get_profile_pack_response_parse(sml_buffer *buf){
	sml_get_profile_pack_response *msg = sml_get_profile_pack_response_init();

	if (sml_buf_get_next_type(buf) != SML_TYPE_LIST) {
		buf->error = 1;
		goto error;
	}

	if (sml_buf_get_next_length(buf) != 8) {
		buf->error = 1;
		goto error;
	}

	msg->server_id = sml_octet_string_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	msg->act_time = sml_time_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	msg->reg_period = sml_u32_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	msg->parameter_tree_path = sml_tree_path_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	msg->header_list = sml_sequence_parse(buf, sml_prof_obj_header_entry_parse_, sml_prof_obj_header_entry_free_);
	if (sml_buf_has_errors(buf)) goto error;

	msg->period_list = sml_sequence_parse(buf, sml_prof_obj_period_entry_parse_, sml_prof_obj_period_entry_free_);
	if (sml_buf_has_errors(buf)) goto error;

	msg->rawdata = sml_octet_string_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	msg->profile_signature = sml_signature_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	return msg;

error:
	buf->error = 1;
	sml_get_profile_pack_response_free(msg);
	return 0;
}