Пример #1
0
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;
    }
}