static void test_map(void) { { /* serialization */ TEST_ASSERT(cbor_serialize_map(&stream, 2)); TEST_ASSERT(cbor_serialize_int(&stream, 1)); TEST_ASSERT(cbor_serialize_byte_string(&stream, "1")); TEST_ASSERT(cbor_serialize_int(&stream, 2)); TEST_ASSERT(cbor_serialize_byte_string(&stream, "2")); unsigned char data[] = {0xa2, 0x01, 0x41, 0x31, /* kv-pair 1 */ 0x02, 0x41, 0x32, /* kv-pair 2 */ }; CBOR_CHECK_SERIALIZED(stream, data, sizeof(data)); /* deserialization */ size_t map_length; size_t offset = cbor_deserialize_map(&stream, 0, &map_length); TEST_ASSERT_EQUAL_INT(2, map_length); int key; char value[8]; offset += cbor_deserialize_int(&stream, offset, &key); TEST_ASSERT_EQUAL_INT(1, key); offset += cbor_deserialize_byte_string(&stream, offset, value, sizeof(value)); TEST_ASSERT_EQUAL_STRING("1", &(value[0])); offset += cbor_deserialize_int(&stream, offset, &key); TEST_ASSERT_EQUAL_INT(2, key); offset += cbor_deserialize_byte_string(&stream, offset, value, sizeof(value)); TEST_ASSERT_EQUAL_STRING("2", &(value[0])); TEST_ASSERT_EQUAL_INT(sizeof(data), offset); } }
int handleConfig(coap_rw_buffer_t* scratch, const coap_packet_t* inpkt, coap_packet_t* outpkt, uint8_t id_hi, uint8_t id_lo) { (void)scratch; (void)outpkt; (void)id_hi; (void)id_lo; coap_buffer_t payload = inpkt->payload; unsigned char* data = (unsigned char*) payload.p; // create cbor stream cbor_stream_t stream = {data, sizeof(data), 0}; size_t map_length; // read out length of the map size_t offset = cbor_deserialize_map(&stream, 0, &map_length); int key1, key2, key3; char medtemp[8], hightemp[8], windowsize[8]; // read key 1 offset += cbor_deserialize_int(&stream, offset, &key1); // read medtemp offset += cbor_deserialize_byte_string(&stream, offset, medtemp, sizeof(medtemp)); // read key 2 offset += cbor_deserialize_int(&stream, offset, &key2); // read hightemp offset += cbor_deserialize_byte_string(&stream, offset, hightemp, sizeof(hightemp)); // read key 3 offset += cbor_deserialize_int(&stream, offset, &key3); // read windowsize offset += cbor_deserialize_byte_string(&stream, offset, windowsize, sizeof(windowsize)); cbor_destroy(&stream); puts("NEW CONFIGURATION RECEIVED"); YELLOW_TEMP = atoi(medtemp); RED_TEMP = atoi(hightemp); printf("YELLOW_TEMP set to: %d\n", YELLOW_TEMP); printf("RED_TEMP set to: %d\n", RED_TEMP); if (strcmp(windowsize, "-") != 0) { printf("Set windowsize to: %d\n", atoi(windowsize)); setWindowSize(atoi(windowsize)); } return 0; }
static void test_array_indefinite(void) { { /* serialization */ TEST_ASSERT(cbor_serialize_array_indefinite(&stream)); TEST_ASSERT(cbor_serialize_int(&stream, 1)); TEST_ASSERT(cbor_serialize_int(&stream, 2)); TEST_ASSERT(cbor_write_break(&stream)); unsigned char data[] = {0x9f, 0x01, 0x02, 0xff}; CBOR_CHECK_SERIALIZED(stream, data, sizeof(data)); /* deserialization */ size_t offset = cbor_deserialize_array_indefinite(&stream, 0); int count = 0; while (!cbor_at_break(&stream, offset)) { int val; size_t read_bytes = cbor_deserialize_int(&stream, offset, &val); TEST_ASSERT(read_bytes); offset += read_bytes; ++count; } TEST_ASSERT_EQUAL_INT(2, count); TEST_ASSERT(cbor_at_end(&stream, offset)); } }
static void test_int_invalid(void) { { /* check writing to stream that is not large enough */ /* basically tests internal 'encode_int' function */ cbor_stream_t stream; cbor_init(&stream, 0, 0); /* check each possible branch in 'encode_int' */ /* (value in first byte, uint8 follows, uint16 follows, uint64 follows) */ TEST_ASSERT_EQUAL_INT(0, cbor_serialize_int(&stream, 0)); TEST_ASSERT_EQUAL_INT(0, stream.pos); TEST_ASSERT_EQUAL_INT(0, cbor_serialize_int(&stream, 24)); TEST_ASSERT_EQUAL_INT(0, stream.pos); TEST_ASSERT_EQUAL_INT(0, cbor_serialize_int(&stream, 0xff + 1)); TEST_ASSERT_EQUAL_INT(0, stream.pos); TEST_ASSERT_EQUAL_INT(0, cbor_serialize_int(&stream, 0xffff + 1)); TEST_ASSERT_EQUAL_INT(0, stream.pos); } { /* check reading from stream that contains other type of data */ int val_int = 0; TEST_ASSERT_EQUAL_INT(0, cbor_deserialize_int(&invalid_stream, 0, &val_int)); } }
static void test_array(void) { /* uniform types */ { /* serialization */ TEST_ASSERT(cbor_serialize_array(&stream, 2)); TEST_ASSERT(cbor_serialize_int(&stream, 1)); TEST_ASSERT(cbor_serialize_int(&stream, 2)); unsigned char data[] = {0x82, 0x01, 0x02}; CBOR_CHECK_SERIALIZED(stream, data, sizeof(data)); /* deserialization */ size_t array_length; size_t offset = cbor_deserialize_array(&stream, 0, &array_length); TEST_ASSERT_EQUAL_INT(2, array_length); int i; offset += cbor_deserialize_int(&stream, offset, &i); TEST_ASSERT_EQUAL_INT(1, i); offset += cbor_deserialize_int(&stream, offset, &i); TEST_ASSERT_EQUAL_INT(2, i); TEST_ASSERT_EQUAL_INT(sizeof(data), offset); } cbor_clear(&stream); /* mixed types */ { TEST_ASSERT(cbor_serialize_array(&stream, 2)); TEST_ASSERT(cbor_serialize_int(&stream, 1)); TEST_ASSERT(cbor_serialize_byte_string(&stream, "a")); unsigned char data[] = {0x82, 0x01, 0x41, 0x61}; CBOR_CHECK_SERIALIZED(stream, data, sizeof(data)); /* deserialization */ size_t array_length; size_t offset = cbor_deserialize_array(&stream, 0, &array_length); TEST_ASSERT(offset); TEST_ASSERT_EQUAL_INT(2, array_length); int i; offset += cbor_deserialize_int(&stream, offset, &i); TEST_ASSERT_EQUAL_INT(1, i); char buffer[1024]; offset += cbor_deserialize_byte_string(&stream, offset, buffer, sizeof(buffer)); TEST_ASSERT_EQUAL_STRING("a", &(buffer[0])); TEST_ASSERT_EQUAL_INT(sizeof(data), offset); } }
static void test_map_indefinite(void) { { /* serialization */ TEST_ASSERT(cbor_serialize_map_indefinite(&stream)); TEST_ASSERT(cbor_serialize_int(&stream, 1)); TEST_ASSERT(cbor_serialize_byte_string(&stream, "1")); TEST_ASSERT(cbor_serialize_int(&stream, 2)); TEST_ASSERT(cbor_serialize_byte_string(&stream, "2")); TEST_ASSERT(cbor_write_break(&stream)); unsigned char data[] = {0xbf, 0x01, 0x41, 0x31, /* kv-pair 1 */ 0x02, 0x41, 0x32, /* kv-pair 2 */ 0xff }; CBOR_CHECK_SERIALIZED(stream, data, sizeof(data)); /* deserialization */ size_t offset = cbor_deserialize_map_indefinite(&stream, 0); int count = 0; while (!cbor_at_break(&stream, offset)) { int key; char value[16]; size_t read_bytes; offset += read_bytes = cbor_deserialize_int(&stream, offset, &key); TEST_ASSERT(read_bytes); offset += read_bytes = cbor_deserialize_byte_string(&stream, offset, value, sizeof(value)); TEST_ASSERT(read_bytes); ++count; } TEST_ASSERT_EQUAL_INT(2, count); TEST_ASSERT(cbor_at_end(&stream, offset)); } }