bool unabto_buffer_test(void) { char * raw_test_string = "asjdhc#21?(!?(92814skzjbcasa"; uint8_t data[7 + 2 + strlen(raw_test_string)]; unabto_buffer buf, raw_string_buf; buffer_write_t w_buf; buffer_read_t r_buf; uint32_t t32; uint16_t t16; uint8_t t8; uint8_t raw_string_data[strlen(raw_test_string) + 1]; buffer_init(&raw_string_buf, (uint8_t*)raw_test_string, strlen(raw_test_string)); buffer_init(&buf, data, sizeof(data)); buffer_write_init(&w_buf, &buf); if (! (buffer_write_uint32(&w_buf, 0x12345678) && buffer_write_uint16(&w_buf, 0x1234) && buffer_write_uint8(&w_buf, 0x12) && buffer_write_raw(&w_buf, &raw_string_buf) ) ) { NABTO_LOG_ERROR(("Buffer write test failed")); return false; } buffer_read_init(&r_buf, &buf); memset(raw_string_data, 0, sizeof(raw_string_data) + 1); buffer_init(&raw_string_buf, raw_string_data, sizeof(raw_string_data)); bool t = false; if (! ( buffer_read_uint32(&r_buf, &t32) && t32 == 0x12345678 && buffer_read_uint16(&r_buf, &t16) && t16 == 0x1234 && buffer_read_uint8(&r_buf, &t8) && t8 == 0x12 && (t = buffer_read_raw(&r_buf, &raw_string_buf)) && buffer_get_size(&raw_string_buf) == strlen(raw_test_string) && 0 == strncmp((char*)buffer_get_data(&raw_string_buf), raw_test_string, strlen(raw_test_string)) )) { NABTO_LOG_ERROR(("Failed read test failed")); return false; } if (buffer_read_uint32(&r_buf, &t32) || buffer_read_uint16(&r_buf, &t16) || buffer_read_uint8(&r_buf, &t8) || buffer_read_raw(&w_buf, &raw_string_buf) || buffer_write_uint32(&w_buf, 0x12345678) || buffer_write_uint16(&w_buf, 0x1234) || buffer_write_uint8(&w_buf, 0x12) || buffer_write_raw(&w_buf, &raw_string_buf) ) { NABTO_LOG_ERROR(("Some function should have returned false but returned true")); return false; } return true; }
buffer_t* get_event_buffer2(size_t maximumLength) { static uint8_t eventBufferData[NABTO_EVENT_CHANNEL_MAX_SIZE]; static buffer_t eventBuffer; if(lastTemperature_ == 0) { return NULL; // application has no data to send to the base station } else { uint8_t body[BODYLENGTH]; const char HEADER[] = "1:L:"; const char TRAILER[] = "\nEOM\n"; const uint16_t OVERHEAD = sizeof (HEADER) + sizeof (TRAILER) + 1; // make room for zero-termination during buffer build process buffer_write_t writeBuffer; sprintf(body, "%d", lastTemperature_); // limit number of bytes to what uNabto indicates it can handle if((BODYLENGTH + OVERHEAD) > maximumLength) { return NULL; } buffer_init(&eventBuffer, eventBufferData, sizeof (eventBufferData)); buffer_write_init(&writeBuffer, &eventBuffer); buffer_write_text(&writeBuffer, HEADER); buffer_write_text(&writeBuffer, body); buffer_write_text(&writeBuffer, TRAILER); // remove zero-termination added by buffer write operations eventBuffer.size = writeBuffer.position; // return data to uNabto return &eventBuffer; } }