Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
TEST(sml_number, parse_unsigned8) {
	hex2binary("6201", sml_buf_get_current_buf(buf));
	u8 *n = sml_u8_parse(buf);
	TEST_ASSERT_EQUAL(1, *n);
	TEST_ASSERT_EQUAL(2, buf->cursor);
	sml_u8_free( n );
}
Exemplo n.º 3
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);
    }
}
Exemplo n.º 4
0
sml_message *sml_message_parse(sml_buffer *buf) {
	sml_message *msg = (sml_message *) malloc(sizeof(sml_message));
	memset(msg, 0, sizeof(sml_message));

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

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

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

	msg->group_id = sml_u8_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	msg->abort_on_error = sml_u8_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	msg->message_body = sml_message_body_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	msg->crc = sml_u16_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	if (sml_buf_get_current_byte(buf) == SML_MESSAGE_END) {
		sml_buf_update_bytes_read(buf, 1);
	}
	
	return msg;

error:
	sml_message_free(msg);
	return 0;
}
Exemplo n.º 5
0
sml_proc_par_value *sml_proc_par_value_parse(sml_buffer *buf) {
	if (sml_buf_optional_is_skipped(buf)) {
		return 0;
	}

	sml_proc_par_value *ppv = sml_proc_par_value_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;
	}

	ppv->tag = sml_u8_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	switch (*(ppv->tag)) {
		case SML_PROC_PAR_VALUE_TAG_VALUE:
			ppv->data.value = sml_value_parse(buf);
			break;
		case SML_PROC_PAR_VALUE_TAG_PERIOD_ENTRY:
			ppv->data.period_entry = sml_period_entry_parse(buf);
			break;
		case SML_PROC_PAR_VALUE_TAG_TUPEL_ENTRY:
			ppv->data.tupel_entry = sml_tupel_entry_parse(buf);
			break;
		case SML_PROC_PAR_VALUE_TAG_TIME:
			ppv->data.time = sml_time_parse(buf);
			break;
		default:
			buf->error = 1;
			goto error;
	}

	return ppv;

error:
	sml_proc_par_value_free(ppv);
	return 0;
}
Exemplo n.º 6
0
sml_open_request *sml_open_request_parse(sml_buffer *buf) {
	sml_open_request *msg = sml_open_request_init();

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

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

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

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

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

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

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

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

	msg->sml_version = sml_u8_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	return msg;

error:
	sml_open_request_free(msg);
	return 0;
}