mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-30 07:21:20 +00:00
ble/att_db: extract att_validate_security_get_settings
This commit is contained in:
parent
4eb382490a
commit
b6e793c0e2
@ -294,36 +294,46 @@ static inline uint16_t setup_error_invalid_pdu(uint8_t *response_buffer, uint16_
|
||||
return setup_error(response_buffer, request, 0, ATT_ERROR_INVALID_PDU);
|
||||
}
|
||||
|
||||
static uint8_t att_validate_security(att_connection_t * att_connection, att_operation_t operation, att_iterator_t * it){
|
||||
int required_security_level = 0;
|
||||
bool requires_secure_connection = false;
|
||||
struct att_security_settings {
|
||||
uint8_t required_security_level;
|
||||
bool requires_secure_connection;
|
||||
};
|
||||
|
||||
static void att_validate_security_get_settings(struct att_security_settings * security_settings, att_operation_t operation, att_iterator_t *it){
|
||||
security_settings->required_security_level = 0;
|
||||
security_settings->requires_secure_connection = false;
|
||||
switch (operation){
|
||||
case ATT_READ:
|
||||
if ((it->flags & ATT_PROPERTY_READ_PERMISSION_BIT_0) != 0u){
|
||||
required_security_level |= 1;
|
||||
security_settings->required_security_level |= 1;
|
||||
}
|
||||
if ((it->flags & ATT_PROPERTY_READ_PERMISSION_BIT_1) != 0u){
|
||||
required_security_level |= 2;
|
||||
security_settings->required_security_level |= 2;
|
||||
}
|
||||
if ((it->flags & ATT_PROPERTY_READ_PERMISSION_SC) != 0u){
|
||||
requires_secure_connection = true;
|
||||
security_settings->requires_secure_connection = true;
|
||||
}
|
||||
break;
|
||||
case ATT_WRITE:
|
||||
if ((it->flags & ATT_PROPERTY_WRITE_PERMISSION_BIT_0) != 0u){
|
||||
required_security_level |= 1;
|
||||
security_settings->required_security_level |= 1;
|
||||
}
|
||||
if ((it->flags & ATT_PROPERTY_WRITE_PERMISSION_BIT_1) != 0u){
|
||||
required_security_level |= 2;
|
||||
security_settings->required_security_level |= 2;
|
||||
}
|
||||
if ((it->flags & ATT_PROPERTY_WRITE_PERMISSION_SC) != 0u){
|
||||
requires_secure_connection = true;
|
||||
security_settings->requires_secure_connection = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
btstack_assert(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static uint8_t att_validate_security(att_connection_t * att_connection, att_operation_t operation, att_iterator_t * it){
|
||||
struct att_security_settings security_settings;
|
||||
att_validate_security_get_settings(&security_settings, operation, it);
|
||||
|
||||
uint8_t required_encryption_size = it->flags >> 12;
|
||||
if (required_encryption_size != 0) required_encryption_size++; // store -1 to fit into 4 bit
|
||||
@ -331,8 +341,8 @@ static uint8_t att_validate_security(att_connection_t * att_connection, att_oper
|
||||
log_debug("att_validate_security. flags 0x%04x (=> security level %u, key size %u) authorized %u, authenticated %u, encryption_key_size %u, secure connection %u",
|
||||
it->flags, required_security_level, required_encryption_size, att_connection->authorized, att_connection->authenticated, att_connection->encryption_key_size, att_connection->secure_connection);
|
||||
|
||||
bool sc_missing = requires_secure_connection && (att_connection->secure_connection == 0u);
|
||||
switch (required_security_level){
|
||||
bool sc_missing = security_settings.requires_secure_connection && (att_connection->secure_connection == 0u);
|
||||
switch (security_settings.required_security_level){
|
||||
case ATT_SECURITY_AUTHORIZED:
|
||||
if ((att_connection->authorized == 0u) || sc_missing){
|
||||
return ATT_ERROR_INSUFFICIENT_AUTHORIZATION;
|
||||
|
Loading…
x
Reference in New Issue
Block a user