mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-10 06:44:32 +00:00
sdp_util: add de_get_len_safe, use uint32_t for length functions
This commit is contained in:
parent
cbdfe9f7d6
commit
3558d8841d
@ -78,7 +78,7 @@ de_type_t de_get_element_type(const uint8_t *header){
|
||||
return (de_type_t) (header[0] >> 3);
|
||||
}
|
||||
|
||||
int de_get_header_size(const uint8_t * header){
|
||||
uint32_t de_get_header_size(const uint8_t * header){
|
||||
de_size_t de_size = de_get_size_type(header);
|
||||
if (de_size <= DE_SIZE_128) {
|
||||
return 1;
|
||||
@ -86,7 +86,7 @@ int de_get_header_size(const uint8_t * header){
|
||||
return 1 + (1 << (de_size-DE_SIZE_VAR_8));
|
||||
}
|
||||
|
||||
int de_get_data_size(const uint8_t * header){
|
||||
uint32_t de_get_data_size(const uint8_t * header){
|
||||
uint32_t result = 0;
|
||||
de_type_t de_type = de_get_element_type(header);
|
||||
de_size_t de_size = de_get_size_type(header);
|
||||
@ -116,6 +116,18 @@ int de_get_len(const uint8_t *header){
|
||||
return de_get_header_size(header) + de_get_data_size(header);
|
||||
}
|
||||
|
||||
// returns data element length if data element fits in size
|
||||
uint32_t de_get_len_safe(const uint8_t * header, uint32_t size){
|
||||
if (1 > size) return 0;
|
||||
uint32_t header_size = de_get_header_size(header);
|
||||
if (header_size > size) return 0;
|
||||
uint32_t data_size = de_get_data_size(header);
|
||||
if (data_size > size) return 0;
|
||||
uint32_t de_len = header_size + data_size;
|
||||
if (de_len > size) return 0;
|
||||
return de_len;
|
||||
}
|
||||
|
||||
// @returns OK, if UINT16 value was read
|
||||
int de_element_get_uint16(const uint8_t * element, uint16_t * value){
|
||||
if (de_get_size_type(element) != DE_SIZE_16) return 0;
|
||||
|
@ -76,11 +76,13 @@ typedef enum {
|
||||
// MARK: DateElement
|
||||
void de_dump_data_element(const uint8_t * record);
|
||||
int de_get_len(const uint8_t * header);
|
||||
|
||||
|
||||
de_size_t de_get_size_type(const uint8_t * header);
|
||||
de_type_t de_get_element_type(const uint8_t * header);
|
||||
int de_get_header_size(const uint8_t * header);
|
||||
uint32_t de_get_header_size(const uint8_t * header);
|
||||
int de_element_get_uint16(const uint8_t * element, uint16_t * value);
|
||||
int de_get_data_size(const uint8_t * header);
|
||||
uint32_t de_get_data_size(const uint8_t * header);
|
||||
uint32_t de_get_uuid32(const uint8_t * element);
|
||||
int de_get_normalized_uuid(uint8_t *uuid128, const uint8_t *element);
|
||||
|
||||
@ -93,6 +95,9 @@ void de_add_data( uint8_t *seq, de_type_t type, uint16_t size, uint8_t *dat
|
||||
|
||||
void de_add_uuid128(uint8_t * seq, uint8_t * uuid);
|
||||
|
||||
// returns data element len if date element is smaller than size
|
||||
uint32_t de_get_len_safe(const uint8_t * header, uint32_t size);
|
||||
|
||||
// MARK: DES iterator
|
||||
typedef struct {
|
||||
uint8_t * element;
|
||||
|
Loading…
x
Reference in New Issue
Block a user