Beispiel #1
0
    void start_request(const void* data, size_t len)
    {
        tcp::endpoint ep(boost::asio::ip::address_v4::from_string(address_), port_);
        socket_.open(boost::asio::ip::tcp::v4());

        do_timeout_check(connect_timeout_);
        socket_.async_connect(ep, [this,data,len](const boost::system::error_code& ec){

            cancel_timer();
            if(!ec)
            {
                // The connection was successful. Send the request.
                connected_ = true;
                do_timeout_check(request_timeout_);
                boost::asio::async_write(socket_, 
                    boost::asio::buffer(data, len), 
                    [this](const boost::system::error_code& ec, size_t) {
                        handle_write_request(ec);
                });
            }
            else {
                handle_error(ec);
            }
        });

        if(!service_running_)
        {
            service_running_ = true;
            boost::system::error_code ignored_ec;
            io_service_.reset();
            io_service_.run(ignored_ec);
            this->socket_.close(ignored_ec);
            service_running_ = false;
        }
    }
Beispiel #2
0
// MARK: Dispatcher
uint16_t att_handle_request(att_connection_t * att_connection,
                            uint8_t * request_buffer,
                            uint16_t request_len,
                            uint8_t * response_buffer){
    uint16_t response_len = 0;
    uint16_t response_buffer_size = att_connection->mtu;
    
    switch (request_buffer[0]){
        case ATT_EXCHANGE_MTU_REQUEST:
            response_len = handle_exchange_mtu_request(att_connection, request_buffer, request_len, response_buffer);
            break;
        case ATT_FIND_INFORMATION_REQUEST:
            response_len = handle_find_information_request(att_connection, request_buffer, request_len,response_buffer, response_buffer_size);
            break;
        case ATT_FIND_BY_TYPE_VALUE_REQUEST:
            response_len = handle_find_by_type_value_request(att_connection, request_buffer, request_len, response_buffer, response_buffer_size);
            break;
        case ATT_READ_BY_TYPE_REQUEST:  
            response_len = handle_read_by_type_request(att_connection, request_buffer, request_len, response_buffer, response_buffer_size);
            break;
        case ATT_READ_REQUEST:  
            response_len = handle_read_request(att_connection, request_buffer, request_len, response_buffer, response_buffer_size);
            break;
        case ATT_READ_BLOB_REQUEST:  
            response_len = handle_read_blob_request(att_connection, request_buffer, request_len, response_buffer, response_buffer_size);
            break;
        case ATT_READ_MULTIPLE_REQUEST:  
            response_len = handle_read_multiple_request(att_connection, request_buffer, request_len, response_buffer, response_buffer_size);
            break;
        case ATT_READ_BY_GROUP_TYPE_REQUEST:  
            response_len = handle_read_by_group_type_request(att_connection, request_buffer, request_len, response_buffer, response_buffer_size);
            break;
        case ATT_WRITE_REQUEST:
            response_len = handle_write_request(att_connection, request_buffer, request_len, response_buffer, response_buffer_size);
            break;
        case ATT_PREPARE_WRITE_REQUEST:
            response_len = handle_prepare_write_request(att_connection, request_buffer, request_len, response_buffer, response_buffer_size);
            break;
        case ATT_EXECUTE_WRITE_REQUEST:
            response_len = handle_execute_write_request(att_connection, request_buffer, request_len, response_buffer, response_buffer_size);
            break;
        case ATT_WRITE_COMMAND:
            handle_write_command(att_connection, request_buffer, request_len, response_buffer, response_buffer_size);
            break;
        case ATT_SIGNED_WRITE_COMMAND:
            log_info("handle_signed_write_command preprocessed by att_server.c");
            break;
        default:
            log_info("Unhandled ATT Command: %02X, DATA: ", request_buffer[0]);
            hexdump(&request_buffer[9], request_len-9);
            break;
    }
    return response_len;
}