mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-28 19:20:54 +00:00
att_db: pass att operation mode read/write to att_validate_security
This commit is contained in:
parent
e22a261227
commit
9d622fde0d
@ -47,6 +47,11 @@
|
||||
#include "btstack_debug.h"
|
||||
#include "btstack_util.h"
|
||||
|
||||
typedef enum {
|
||||
ATT_READ,
|
||||
ATT_WRITE,
|
||||
} att_operation_t;
|
||||
|
||||
// Buetooth Base UUID 00000000-0000-1000-8000-00805F9B34FB in little endian
|
||||
static const uint8_t bluetooth_base_uuid[] = { 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
@ -276,7 +281,8 @@ static inline uint16_t setup_error_invalid_offset(uint8_t * response_buffer, uin
|
||||
return setup_error(response_buffer, request, handle, ATT_ERROR_INVALID_OFFSET);
|
||||
}
|
||||
|
||||
static uint8_t att_validate_security(att_connection_t * att_connection, att_iterator_t * it){
|
||||
static uint8_t att_validate_security(att_connection_t * att_connection, att_operation_t operation, att_iterator_t * it){
|
||||
UNUSED(operation);
|
||||
int required_encryption_size = it->flags >> 12;
|
||||
if (required_encryption_size) required_encryption_size++; // store -1 to fit into 4 bit
|
||||
log_debug("att_validate_security. flags 0x%04x - req enc size %u, authorized %u, authenticated %u, encryption_key_size %u",
|
||||
@ -518,7 +524,7 @@ static uint16_t handle_read_by_type_request2(att_connection_t * att_connection,
|
||||
|
||||
// check security requirements
|
||||
if ((it.flags & ATT_DB_FLAGS_READ_WITHOUT_AUTHENTICATION) == 0){
|
||||
error_code = att_validate_security(att_connection, &it);
|
||||
error_code = att_validate_security(att_connection, ATT_READ, &it);
|
||||
if (error_code) break;
|
||||
}
|
||||
|
||||
@ -616,7 +622,7 @@ static uint16_t handle_read_request2(att_connection_t * att_connection, uint8_t
|
||||
|
||||
// check security requirements
|
||||
if ((it.flags & ATT_DB_FLAGS_READ_WITHOUT_AUTHENTICATION) == 0){
|
||||
uint8_t error_code = att_validate_security(att_connection, &it);
|
||||
uint8_t error_code = att_validate_security(att_connection, ATT_READ, &it);
|
||||
if (error_code) {
|
||||
return setup_error(response_buffer, request_type, handle, error_code);
|
||||
}
|
||||
@ -668,7 +674,7 @@ static uint16_t handle_read_blob_request2(att_connection_t * att_connection, uin
|
||||
|
||||
// check security requirements
|
||||
if ((it.flags & ATT_DB_FLAGS_READ_WITHOUT_AUTHENTICATION) == 0){
|
||||
uint8_t error_code = att_validate_security(att_connection, &it);
|
||||
uint8_t error_code = att_validate_security(att_connection, ATT_READ, &it);
|
||||
if (error_code) {
|
||||
return setup_error(response_buffer, request_type, handle, error_code);
|
||||
}
|
||||
@ -748,7 +754,7 @@ static uint16_t handle_read_multiple_request2(att_connection_t * att_connection,
|
||||
|
||||
// check security requirements
|
||||
if ((it.flags & ATT_DB_FLAGS_READ_WITHOUT_AUTHENTICATION) == 0){
|
||||
error_code = att_validate_security(att_connection, &it);
|
||||
error_code = att_validate_security(att_connection, ATT_READ, &it);
|
||||
if (error_code) break;
|
||||
}
|
||||
att_update_value_len(&it, att_connection->con_handle);
|
||||
@ -928,7 +934,7 @@ static uint16_t handle_write_request(att_connection_t * att_connection, uint8_t
|
||||
return setup_error_write_not_permitted(response_buffer, request_type, handle);
|
||||
}
|
||||
// check security requirements
|
||||
uint8_t error_code = att_validate_security(att_connection, &it);
|
||||
uint8_t error_code = att_validate_security(att_connection, ATT_WRITE, &it);
|
||||
if (error_code) {
|
||||
return setup_error(response_buffer, request_type, handle, error_code);
|
||||
}
|
||||
@ -967,7 +973,7 @@ static uint16_t handle_prepare_write_request(att_connection_t * att_connection,
|
||||
return setup_error_write_not_permitted(response_buffer, request_type, handle);
|
||||
}
|
||||
// check security requirements
|
||||
uint8_t error_code = att_validate_security(att_connection, &it);
|
||||
uint8_t error_code = att_validate_security(att_connection, ATT_WRITE, &it);
|
||||
if (error_code) {
|
||||
return setup_error(response_buffer, request_type, handle, error_code);
|
||||
}
|
||||
@ -1045,7 +1051,7 @@ static void handle_write_command(att_connection_t * att_connection, uint8_t * re
|
||||
if (!ok) return;
|
||||
if ((it.flags & ATT_PROPERTY_DYNAMIC) == 0) return;
|
||||
if ((it.flags & ATT_PROPERTY_WRITE_WITHOUT_RESPONSE) == 0) return;
|
||||
if (att_validate_security(att_connection, &it)) return;
|
||||
if (att_validate_security(att_connection, ATT_WRITE, &it)) return;
|
||||
att_persistent_ccc_cache(&it);
|
||||
(*att_write_callback)(att_connection->con_handle, handle, ATT_TRANSACTION_MODE_NONE, 0, request_buffer + 3, request_len - 3);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user