PebbleOS
Loading...
Searching...
No Matches
Data Structures | Enumerations | Functions
Contact addresses

(De)serialization of attribute lists together with contact addresses. More...

Data Structures

struct  Address
 Contact address. More...
 
struct  AddressList
 List of addresses. More...
 

Enumerations

enum  AddressType { AddressTypeInvalid , AddressTypePhoneNumber , AddressTypeEmail }
 Address type. More...
 

Functions

bool attributes_address_parse_serial_data (uint8_t num_attributes, uint8_t num_addresses, const uint8_t *data, size_t data_size, size_t *string_alloc_size_out, uint8_t *attributes_per_address_out)
 Parse serialized attributes and addresses to size the deserialization buffer.
 
size_t attributes_address_get_buffer_size (uint8_t num_attributes, uint8_t num_addresses, const uint8_t *attributes_per_address, size_t required_size_for_strings)
 Get the buffer size needed to store attributes, addresses and their strings.
 
void attributes_address_init (AttributeList *attr_list, AddressList *addr_list, uint8_t **buffer, uint8_t num_attributes, uint8_t num_addresses, const uint8_t *attributes_per_address)
 Lay out an attribute list and an address list in a buffer.
 
bool attributes_address_deserialize (AttributeList *attr_list, AddressList *addr_list, uint8_t *buffer, uint8_t *buf_end, const uint8_t *payload, size_t payload_size)
 Fill an attribute list and an address list from serialized data.
 
size_t attributes_address_get_serialized_payload_size (AttributeList *list, AddressList *addr_list)
 Get the serialized size of an attribute list and an address list.
 
size_t attributes_address_serialize_payload (AttributeList *attr_list, AddressList *addr_list, uint8_t *buffer, size_t buffer_size)
 Serialize an attribute list and an address list.
 

Detailed Description

(De)serialization of attribute lists together with contact addresses.

Deserializing is a two-pass process: parse the payload to size the buffer, then lay out the lists in the buffer and fill them.

size_t str_size;
uint8_t attrs_per_addr[num_addresses];
if (!attributes_address_parse_serial_data(num_attributes, num_addresses, data, size,
&str_size, attrs_per_addr)) {
return false;
}
size_t buf_size = attributes_address_get_buffer_size(num_attributes, num_addresses,
attrs_per_addr, str_size);
uint8_t *buf = kernel_malloc_check(buf_size);
uint8_t *cursor = buf;
attributes_address_init(&attr_list, &addr_list, &cursor, num_attributes, num_addresses,
attrs_per_addr);
bool ok = attributes_address_deserialize(&attr_list, &addr_list, cursor, buf + buf_size,
data, size);
void attributes_address_init(AttributeList *attr_list, AddressList *addr_list, uint8_t **buffer, uint8_t num_attributes, uint8_t num_addresses, const uint8_t *attributes_per_address)
Lay out an attribute list and an address list in a buffer.
size_t attributes_address_get_buffer_size(uint8_t num_attributes, uint8_t num_addresses, const uint8_t *attributes_per_address, size_t required_size_for_strings)
Get the buffer size needed to store attributes, addresses and their strings.
bool attributes_address_deserialize(AttributeList *attr_list, AddressList *addr_list, uint8_t *buffer, uint8_t *buf_end, const uint8_t *payload, size_t payload_size)
Fill an attribute list and an address list from serialized data.
bool attributes_address_parse_serial_data(uint8_t num_attributes, uint8_t num_addresses, const uint8_t *data, size_t data_size, size_t *string_alloc_size_out, uint8_t *attributes_per_address_out)
Parse serialized attributes and addresses to size the deserialization buffer.

Data Structure Documentation

◆ Address

struct Address

Contact address.

Data Fields
AttributeList attr_list Address attributes (the address itself, label, ...).
Uuid id Address UUID.
AddressType type Address type.

◆ AddressList

struct AddressList

List of addresses.

Data Fields
Address * addresses Addresses.
uint8_t num_addresses Number of entries in addresses.

Enumeration Type Documentation

◆ AddressType

Address type.

Enumerator
AddressTypeInvalid 

Invalid address.

AddressTypePhoneNumber 

Phone number.

AddressTypeEmail 

Email address.

Function Documentation

◆ attributes_address_deserialize()

bool attributes_address_deserialize ( AttributeList *  attr_list,
AddressList *  addr_list,
uint8_t *  buffer,
uint8_t *  buf_end,
const uint8_t *  payload,
size_t  payload_size 
)

Fill an attribute list and an address list from serialized data.

The lists must have been set up with attributes_address_init().

Parameters
[in,out]attr_listAttribute list to fill.
[in,out]addr_listAddress list to fill.
bufferSpace for strings, as left by attributes_address_init().
buf_endEnd of the buffer.
payloadSerialized attributes followed by serialized addresses.
payload_sizeSize of payload in bytes.
Returns
true on success.

◆ attributes_address_get_buffer_size()

size_t attributes_address_get_buffer_size ( uint8_t  num_attributes,
uint8_t  num_addresses,
const uint8_t *  attributes_per_address,
size_t  required_size_for_strings 
)

Get the buffer size needed to store attributes, addresses and their strings.

Parameters
num_attributesNumber of attributes not belonging to an address.
num_addressesNumber of addresses.
attributes_per_addressNumber of attributes of each address, in address order.
required_size_for_stringsTotal size of all attribute strings.
Returns
Required buffer size in bytes.

◆ attributes_address_get_serialized_payload_size()

size_t attributes_address_get_serialized_payload_size ( AttributeList *  list,
AddressList *  addr_list 
)

Get the serialized size of an attribute list and an address list.

Parameters
listAttribute list.
addr_listAddress list.
Returns
Size in bytes needed by attributes_address_serialize_payload().

◆ attributes_address_init()

void attributes_address_init ( AttributeList *  attr_list,
AddressList *  addr_list,
uint8_t **  buffer,
uint8_t  num_attributes,
uint8_t  num_addresses,
const uint8_t *  attributes_per_address 
)

Lay out an attribute list and an address list in a buffer.

Parameters
[out]attr_listAttribute list to initialize.
[out]addr_listAddress list to initialize.
[in,out]bufferCursor into the buffer; advanced past the attribute and address arrays, leaving it at the space for strings.
num_attributesNumber of attributes not belonging to an address.
num_addressesNumber of addresses.
attributes_per_addressNumber of attributes of each address, in address order.

◆ attributes_address_parse_serial_data()

bool attributes_address_parse_serial_data ( uint8_t  num_attributes,
uint8_t  num_addresses,
const uint8_t *  data,
size_t  data_size,
size_t *  string_alloc_size_out,
uint8_t *  attributes_per_address_out 
)

Parse serialized attributes and addresses to size the deserialization buffer.

Parameters
num_attributesNumber of attributes not belonging to an address.
num_addressesNumber of addresses.
dataSerialized attributes followed by serialized addresses.
data_sizeSize of data in bytes.
[out]string_alloc_size_outSize needed for all attribute strings.
[out]attributes_per_address_outNumber of attributes of each address, in address order; num_addresses entries.
Returns
true if the data was parsed successfully.

◆ attributes_address_serialize_payload()

size_t attributes_address_serialize_payload ( AttributeList *  attr_list,
AddressList *  addr_list,
uint8_t *  buffer,
size_t  buffer_size 
)

Serialize an attribute list and an address list.

Parameters
attr_listAttribute list.
addr_listAddress list.
[out]bufferOutput buffer.
buffer_sizeSize of buffer in bytes.
Returns
Number of bytes written.