Ejemplo n.º 1
0
TEST(sml_value, write_boolean) {
	sml_value *v = sml_value_init();
	v->type = SML_TYPE_BOOLEAN;
	v->data.boolean = sml_boolean_init(SML_BOOLEAN_FALSE);

	sml_value_write(v, buf);
	expected_buf(buf, "4200", 2);
}
Ejemplo n.º 2
0
TEST(sml_value, write_octet_string) {
	sml_value *v = sml_value_init();
	v->type = SML_TYPE_OCTET_STRING;
	v->data.bytes = sml_octet_string_init((unsigned char *)"Hallo", 5);

	sml_value_write(v, buf);
	expected_buf(buf, "0648616C6C6F", 6);
}
Ejemplo n.º 3
0
TEST(sml_value, write_integer16) {
	sml_value *v = sml_value_init();
	v->type = SML_TYPE_INTEGER | SML_TYPE_NUMBER_16;
	v->data.int16 = sml_i16_init(-5);

	sml_value_write(v, buf);
	expected_buf(buf, "53FFFB", 3);
}
Ejemplo n.º 4
0
TEST(sml_value, write_unsigned32) {
	sml_value *v = sml_value_init();
	v->type = SML_TYPE_UNSIGNED | SML_TYPE_NUMBER_32;
	v->data.uint32 = sml_u32_init(42);

	sml_value_write(v, buf);
	expected_buf(buf, "650000002A", 5);
}
Ejemplo n.º 5
0
TEST(sml_list, write_one_entry) {
	sml_list *l = sml_list_init();
	l->obj_name = sml_octet_string_init((unsigned char *)"Hallo", 5);
	l->value = sml_value_init();
	l->value->type = SML_TYPE_OCTET_STRING;
	l->value->data.bytes = sml_octet_string_init((unsigned char *)"Hallo", 5);

	sml_list_write(l, buf);
	expected_buf(buf, "71770648616C6C6F010101010648616C6C6F01", 19);
}
Ejemplo n.º 6
0
sml_value *sml_value_parse(sml_buffer *buf) {
	if (sml_buf_optional_is_skipped(buf)) {
		return 0;
	}

	int max = 1;
	int type = sml_buf_get_next_type(buf);
	unsigned char byte = sml_buf_get_current_byte(buf);

	sml_value *value = sml_value_init();
	value->type = type;

	switch (type) {
		case SML_TYPE_OCTET_STRING:
			value->data.bytes = sml_octet_string_parse(buf);
			break;
		case SML_TYPE_BOOLEAN:
			value->data.boolean = sml_boolean_parse(buf);
			break;
		case SML_TYPE_UNSIGNED:
		case SML_TYPE_INTEGER:
			// get maximal size, if not all bytes are used (example: only 6 bytes for a u64)
			while (max < ((byte & SML_LENGTH_FIELD) - 1)) {
				max <<= 1;
			}

			value->data.uint8 = sml_number_parse(buf, type, max);
			value->type |= max;
			break;
		default:
			buf->error = 1;
			break;
	}
	if (sml_buf_has_errors(buf)) {
		sml_value_free(value);
		return 0;
	}

	return value;
}
Ejemplo n.º 7
0
TEST(sml_value, init) {
	sml_value *v = sml_value_init();
	TEST_ASSERT_NOT_NULL(v);
	sml_value_free( v );
}