コード例 #1
0
ファイル: sml_value_test.c プロジェクト: ConorOG/openwrt-misc
TEST(sml_value, parse_optional) {
	hex2binary("01", sml_buf_get_current_buf(buf));
	sml_value *v = sml_value_parse(buf);

	TEST_ASSERT_NULL(v);
	TEST_ASSERT_EQUAL(1, buf->cursor);
}
コード例 #2
0
static void * sml_value_entry_parse_(sml_buffer *buf) {
	sml_value_entry *entry = sml_value_entry_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;
	}

	entry->value = sml_value_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;
	entry->value_signature = sml_signature_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	return entry;

error:
	buf->error = 1;
	sml_value_entry_free(entry);
	return 0;
}
コード例 #3
0
ファイル: sml_value_test.c プロジェクト: ConorOG/openwrt-misc
TEST(sml_value, parse_integer64_fewer_bytes) {
	hex2binary("58FFFFFFFFFFFF0F", sml_buf_get_current_buf(buf));
	sml_value *v = sml_value_parse(buf);

	TEST_ASSERT_EQUAL(-241, *(v->data.int64));
	TEST_ASSERT_EQUAL((SML_TYPE_INTEGER | SML_TYPE_NUMBER_64), v->type);
}
コード例 #4
0
ファイル: sml_value_test.c プロジェクト: ConorOG/openwrt-misc
TEST(sml_value, parse_boolean) {
	hex2binary("4200", sml_buf_get_current_buf(buf));
	sml_value *v = sml_value_parse(buf);

	TEST_ASSERT_NOT_NULL(v);
	TEST_ASSERT_EQUAL(SML_TYPE_BOOLEAN, v->type);
	TEST_ASSERT_FALSE(*(v->data.boolean));
}
コード例 #5
0
ファイル: sml_value_test.c プロジェクト: ConorOG/openwrt-misc
TEST(sml_value, parse_octet_string) {
	hex2binary("0648616C6C6F", sml_buf_get_current_buf(buf));
	sml_value *v = sml_value_parse(buf);

	TEST_ASSERT_NOT_NULL(v);
	TEST_ASSERT_EQUAL(SML_TYPE_OCTET_STRING, v->type);
	expected_octet_string(v->data.bytes, "Hallo", 5);
}
コード例 #6
0
ファイル: sml_value_test.c プロジェクト: ConorOG/openwrt-misc
TEST(sml_value, parse_unsigned32) {
	hex2binary("6500000001", sml_buf_get_current_buf(buf));
	sml_value *v = sml_value_parse(buf);

	TEST_ASSERT_NOT_NULL(v);
	TEST_ASSERT_EQUAL(1, *(v->data.uint32));
	TEST_ASSERT_EQUAL((SML_TYPE_UNSIGNED | SML_TYPE_NUMBER_32), v->type);
	TEST_ASSERT_EQUAL(5, buf->cursor);

}
コード例 #7
0
ファイル: sml_tree.c プロジェクト: ConorOG/openwrt-misc
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;
}
コード例 #8
0
ファイル: sml_tree.c プロジェクト: ConorOG/openwrt-misc
sml_period_entry *sml_period_entry_parse(sml_buffer *buf) {
	if (sml_buf_optional_is_skipped(buf)) {
		return 0;
	}

	sml_period_entry *period = sml_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) != 5) {
		buf->error = 1;
		goto error;
	}

	period->obj_name = sml_octet_string_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	period->unit = sml_unit_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	period->scaler = sml_i8_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	period->value = sml_value_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	period->value_signature = sml_octet_string_parse(buf);
	if (sml_buf_has_errors(buf)) goto error;

	return period;

error:
	sml_period_entry_free(period);
	return 0;
}