nl::Weave::Sistema::PacketBuffer

#include <src/system/SystemPacketBuffer.h>

La classe del buffer di pacchetto è la struttura principale utilizzata per manipolare i pacchetti di dati serializzati da ottetti, di solito nel contesto di una rete di comunicazione di dati, come il Bluetooth o il protocollo Internet.

Riepilogo

In ambienti basati su LwIP, questa classe si basa sulla struttura pbuf definita in quella libreria. In assenza di LwIP, Weave fornisce un'implementazione basata su Malloc o un'implementazione basata su pool che assomiglia molto alle sfide della memoria dei dispositivi profondamente incorporati.

La classe PacketBuffer, come molte strutture simili utilizzate negli stack di rete a strati, offre un meccanismo per riservare spazio per le intestazioni di protocollo a ogni livello di uno stack di comunicazione configurabile. Per i dettagli, consulta la PacketBuffer::New() e la documentazione di LwIP.

Gli oggetti PacketBuffer sono conteggiati come riferimento e la modalità di utilizzo prevalente in Weave è "fire-and-forget". Poiché il pacchetto (e il relativo oggetto PacketBuffer sottostante) viene inviato tramite vari livelli di protocollo, la richiesta positiva o negativa tra i livelli implica il trasferimento della proprietà e il chiamante ha la responsabilità di liberare il buffer. In caso di errore di una chiamata tra più livelli, la responsabilità di liberare il buffer spetta al chiamante.

I nuovi oggetti della classe PacketBuffer vengono inizializzati all'inizio di un'allocazione della memoria ottenuta dall'ambiente sottostante, ad esempio dai pool di destinazione LwIP pbuf, dall'heap della libreria C standard, da un pool del buffer interno. Nel caso semplice, la dimensione del buffer di dati è WEAVE_SYSTEM_PACKETBUFFER_SIZE. Viene fornito un compositore che consente l'utilizzo di buffer di dati di altre dimensioni.

Gli oggetti PacketBuffer possono essere concatenati per supportare payload più grandi. Tuttavia, la concatenazione non è trasparente e gli utenti della classe devono decidere esplicitamente di supportare il concatenamento. Ecco alcuni esempi di corsi che supportano il concatenamento dell'assistenza:

@ref nl::Weave::WeaveTLVReader
@ref nl::Weave::WeaveTLVWriter

Eredità

Eredita da: pbuf

Funzioni pubbliche

AddRef(void)
void
Incrementa il conteggio dei riferimenti del buffer corrente.
AddToEnd(PacketBuffer *aPacket)
void
Aggiungi il buffer di pacchetto specificato alla fine della catena di buffer, regolando di conseguenza la lunghezza totale di ogni buffer.
AlignPayload(uint16_t aAlignBytes)
bool
Allinea il payload del buffer al limite di byte specificato.
AllocSize(void) const
size_t
Restituisce le dimensioni dell'allocazione inclusi gli spazi dei dati riservati e di payload, ma non lo spazio assegnato per la struttura di PacketBuffer.
AvailableDataLength(void) const
uint16_t
Recupera il numero di byte di dati che possono essere aggiunti al buffer corrente, data la posizione iniziale e la lunghezza dei dati correnti.
CompactHead(void)
void
Spostare i dati dai buffer successivi della catena al buffer corrente fino a quando non è pieno.
Consume(uint16_t aConsumeLength)
Consumo di dati in una catena di buffer.
ConsumeHead(uint16_t aConsumeLength)
void
Regola il buffer corrente per indicare la quantità di dati utilizzati.
DataLength(void) const
uint16_t
Ottieni la lunghezza in byte dei dati nel buffer di pacchetto.
DetachTail(void)
Scollega il buffer corrente dalla catena e restituisce un puntatore ai buffer rimanenti.
EnsureReservedSize(uint16_t aReservedSize)
bool
Assicurati che il buffer abbia almeno la quantità specificata di spazio riservato.
MaxDataLength(void) const
uint16_t
Ottieni la quantità massima, in byte, di dati che rientra nel buffer in base alla posizione di partenza e alla dimensione del buffer correnti.
Next(void) const
Ottieni il puntatore del buffer successivo nella catena.
ReservedSize(void) const
uint16_t
Ottenere il numero di byte all'interno del buffer corrente tra l'inizio del buffer e la posizione iniziale dei dati.
SetDataLength(uint16_t aNewLen, PacketBuffer *aChainHead)
void
Imposta la lunghezza in byte dei dati nel buffer e regola la lunghezza totale di conseguenza.
SetStart(uint8_t *aNewStart)
void
Imposta i dati di avvio nel buffer, regolando la lunghezza e la lunghezza totale di conseguenza.
Start(void) const
uint8_t *
Recupero del puntatore per iniziare i dati nel buffer.
TotalLength(void) const
uint16_t
Ottieni la lunghezza totale dei dati del pacchetto nella catena di buffer.

Funzioni pubbliche pubbliche

Free(PacketBuffer *aPacket)
void
Libera tutti i buffer di pacchetto in una catena.
FreeHead(PacketBuffer *aPacket)
Libera il primo buffer di una catena, restituendo un puntatore ai buffer rimanenti.
New(void)
Alloca un singolo PacketBuffer di dimensione massima predefinita (WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX) con dimensione riservata predefinita (WEAVE_SYSTEM_CONFIG_header_RESERVE_SIZE) nel payload.
New(uint16_t aReservedSize)
Alloca un singolo PacketBuffer della dimensione totale massima con una dimensione specifica della riserva di intestazione.
NewWithAvailableSize(size_t aAvailableSize)
Alloca un PacketBuffer con dimensione riservata predefinita (WEAVE_SYSTEM_CONFIG_header_RESERVE_SIZE) nel payload per le intestazioni e almeno aAllocSize byte di spazio per ulteriori dati dopo il puntatore cursore iniziale.
NewWithAvailableSize(uint16_t aReservedSize, size_t aAvailableSize)
Alloca un oggetto PacketBuffer con almeno aReservedSize byte riservati nel payload per le intestazioni e almeno aAllocSize byte di spazio per dati aggiuntivi dopo il puntatore del cursore iniziale.
RightSize(PacketBuffer *aPacket)
Copia il buffer specificato in un buffer di dimensioni giuste, se applicabile.

Funzioni pubbliche

Aggiungi riferimento

void AddRef(
  void
)

Incrementa il conteggio dei riferimenti del buffer corrente.

Aggiunta

void AddToEnd(
  PacketBuffer *aPacket
)

Aggiungi il buffer di pacchetto specificato alla fine della catena di buffer, regolando di conseguenza la lunghezza totale di ogni buffer.

Dettagli
Parametri
[in] aPacket
- il buffer del pacchetto da aggiungere alla fine della catena corrente.

Allinea PayPay

bool AlignPayload(
  uint16_t aAlignBytes
)

Allinea il payload del buffer al limite di byte specificato.

Se necessario, sposta il payload in avanti.

Dettagli
Parametri
[in] aAlignBytes
- specifica il numero di byte allineati per il puntatore di avvio del payload.
Restituisce
true se l'allineamento va a buon fine, false se lo spazio non è sufficiente nel buffer.

Dimensioni Alloc

size_t AllocSize(
  void
) const 

Restituisce le dimensioni dell'allocazione inclusi gli spazi dei dati riservati e di payload, ma non lo spazio assegnato per la struttura di PacketBuffer.

Dettagli
Restituisce
la dimensione dell'allocazione

Lunghezza dati disponibile

uint16_t AvailableDataLength(
  void
) const 

Recupera il numero di byte di dati che possono essere aggiunti al buffer corrente, data la posizione iniziale e la lunghezza dei dati correnti.

Dettagli
Restituisce
la lunghezza in byte dei dati che rientra nel buffer corrente, in base alla posizione iniziale e alla lunghezza dei dati correnti.

Compatto

void CompactHead(
  void
)

Spostare i dati dai buffer successivi della catena al buffer corrente fino a quando non è pieno.

Solo il buffer corrente viene compatta: i dati all'interno del buffer vengono spostati all'inizio del buffer, eliminando tutto lo spazio riservato. Lo spazio disponibile rimanente viene riempito con i dati spostati dai buffer successivi nella catena fino all'esaurimento del buffer corrente. Se un buffer successivo nella catena viene spostato interamente nel buffer, viene rimosso dalla catena e liberato. Il metodo non accetta parametri, non restituisce risultati e può restituire errori.

Consuma

PacketBuffer * Consume(
  uint16_t aConsumeLength
)

Consumo di dati in una catena di buffer.

Consumare dati in una catena di buffer a partire dal buffer corrente e proseguire attraverso i buffer rimanenti nella catena. Ogni buffer completamente consumato viene liberato e la funzione restituisce il primo buffer (se presente) contenente i dati rimanenti. L'attuale buffer deve essere l'intestazione della catena di buffer.

Dettagli
Parametri
[in] aConsumeLength
- numero di byte da consumare dalla catena corrente.
Restituisce
il primo buffer della catena corrente che contiene i dati rimanenti. Se i dati non sono rimasti, viene restituito un NULL.

ConsumeHead

void ConsumeHead(
  uint16_t aConsumeLength
)

Regola il buffer corrente per indicare la quantità di dati utilizzati.

Avanza la posizione iniziale dei dati nel buffer corrente in base alla quantità specificata, in byte, fino alla lunghezza dei dati nel buffer. Riduci la lunghezza e la lunghezza totale per l'importo utilizzato.

Dettagli
Parametri
[in] aConsumeLen
- numero di byte da consumare dal buffer corrente.

Lunghezza dati

uint16_t DataLength(
  void
) const 

Ottieni la lunghezza in byte dei dati nel buffer di pacchetto.

Dettagli
Restituisce
lunghezza, in byte (lunghezza del payload corrente).

Scollega

PacketBuffer * DetachTail(
  void
)

Scollega il buffer corrente dalla catena e restituisce un puntatore ai buffer rimanenti.

Il buffer corrente deve essere l'intestazione della catena.

Dettagli
Restituisce
la coda dell'attuale catena di buffer o NULL se il buffer corrente è l'unico buffer della catena.

Assicurazione per dimensioni

bool EnsureReservedSize(
  uint16_t aReservedSize
)

Assicurati che il buffer abbia almeno la quantità specificata di spazio riservato.

Assicurati che il buffer abbia almeno la quantità specificata di spazio riservato che sposta i dati nel buffer in avanti per liberare spazio, se necessario.

Dettagli
Parametri
[in] aReservedSize
- il numero di byte desiderati per le intestazioni.
Restituisce
true se le dimensioni riservate richieste sono disponibili, false se lo spazio non è sufficiente nel buffer.

Lunghezza massima dati

uint16_t MaxDataLength(
  void
) const 

Ottieni la quantità massima, in byte, di dati che rientra nel buffer in base alla posizione di partenza e alla dimensione del buffer correnti.

Dettagli
Restituisce
numero di byte che rientra nel buffer data la posizione di avvio corrente.

Avanti

PacketBuffer * Next(
  void
) const 

Ottieni il puntatore del buffer successivo nella catena.

Dettagli
Restituisce
un puntatore al buffer successivo della catena. NULL viene restituito quando non sono presenti buffer nella catena.

Riservato

uint16_t ReservedSize(
  void
) const 

Ottenere il numero di byte all'interno del buffer corrente tra l'inizio del buffer e la posizione iniziale dei dati.

Dettagli
Restituisce
La quantità di spazio in byte tra l'inizio del buffer e la posizione attuale dei dati.

SetDataLength

void SetDataLength(
  uint16_t aNewLen,
  PacketBuffer *aChainHead
)

Imposta la lunghezza in byte dei dati nel buffer e regola la lunghezza totale di conseguenza.

La funzione imposta la lunghezza in byte dei dati nel buffer, regolando la lunghezza totale in modo appropriato. Quando il buffer non è l'intestazione della catena di buffer (caso comune: il chiamante aggiunge i dati all'ultimo buffer della catena PacketBuffer prima di chiamare i livelli più alti), è necessario trasferire aaHead per regolare correttamente la lunghezza totale di ogni buffer prima del buffer.

Dettagli
Parametri
[in] aNewLen
- nuova lunghezza, in byte, del buffer.
[in,out] aChainHead
- la testa del buffer a cui appartiene l'attuale buffer. Può essere NULL se il buffer corrente è l'intestazione della catena di buffer.

SetSet

void SetStart(
  uint8_t *aNewStart
)

Imposta i dati di avvio nel buffer, regolando la lunghezza e la lunghezza totale di conseguenza.

Dettagli
Parametri
[in] aNewStart
- Un suggerimento su dove deve iniziare il nuovo payload. L'elemento newStart verrà regolato internamente in modo da rientrare nei limiti del primo buffer della catena PacketBuffer.

Inizia

uint8_t * Start(
  void
) const 

Recupero del puntatore per iniziare i dati nel buffer.

Dettagli
Restituisce
all'inizio dei dati.

Lunghezza totale

uint16_t TotalLength(
  void
) const 

Ottieni la lunghezza totale dei dati del pacchetto nella catena di buffer.

Dettagli
Restituisce
lunghezza totale, in ottetti.

Funzioni pubbliche pubbliche

Nessun costo

void Free(
  PacketBuffer *aPacket
)

Libera tutti i buffer di pacchetto in una catena.

Consente di diminuire il conteggio dei riferimenti a tutti i buffer della catena corrente. Se il numero di riferimento raggiunge lo 0, i rispettivi buffer vengono liberati o restituiti ai pool di allocazione in base alle esigenze. Come regola, gli utenti dovrebbero considerare questo metodo come una funzione free() equivalente e non utilizzare l'argomento dopo la chiamata.

Dettagli
Parametri
[in] aPacket
- buffer di pacchetto da liberare.

Testa libera

PacketBuffer * FreeHead(
  PacketBuffer *aPacket
)

Libera il primo buffer di una catena, restituendo un puntatore ai buffer rimanenti.

* @note When the buffer chain is referenced by multiple callers,FreeHead()` unirà la testa, ma non fornirà forzatamente il buffer della testa.

Dettagli
Parametri
[in] aPacket
- Catena di buffer.
Restituisce
catena di buffer di pacchetti costituita dalla coda del buffer di input (può essere NULL).

Nuovo

PacketBuffer * New(
  void
)

Alloca un singolo PacketBuffer di dimensione massima predefinita (WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX) con dimensione riservata predefinita (WEAVE_SYSTEM_CONFIG_header_RESERVE_SIZE) nel payload.

Le dimensioni riservate (WEAVE_SYSTEM_CONFIG_header_RESERVE_SIZE) sono sufficienti per contenere le intestazioni dei livelli di trasporto e le intestazioni richieste da WeaveMessageLayer e WeaveExchangeLayer.

Nuovo

PacketBuffer * New(
  uint16_t aReservedSize
)

Alloca un singolo PacketBuffer della dimensione totale massima con una dimensione specifica della riserva di intestazione.

Il parametro trasmesso è la dimensione riservata prima del payload per ospitare le intestazioni dei pacchetti da diversi livelli di stack, non la dimensione complessiva del buffer da allocare. Le dimensioni del buffer WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX e non specificate nella chiamata.

  • PacketBuffer::New(0) : in questo caso, il buffer viene restituito senza alcuna intestazione riservata, di conseguenza l'intero payload può essere utilizzato dal chiamante. Questo pattern è particolarmente utile nei livelli inferiori di stack di rete, nei casi in cui l'utente sappia che il payload verrà copiato nel messaggio finale con le appropriate intestazioni delle intestazioni o nella creazione di PacketBuffer da aggiungere a una catena di PacketBuffer tramite PacketBuffer::AddToEnd(). Parametri
    [in] aReservedSize
    quantità di spazio di intestazione da prenotare.
    Restituisce
    Al completamento, un puntatore a PacketBuffer, in caso di errore NULL.

NewWithAvailableSize

PacketBuffer * NewWithAvailableSize(
  size_t aAvailableSize
)

Alloca un PacketBuffer con dimensione riservata predefinita (WEAVE_SYSTEM_CONFIG_header_RESERVE_SIZE) nel payload per le intestazioni e almeno aAllocSize byte di spazio per ulteriori dati dopo il puntatore cursore iniziale.

L'utilizzo è più appropriato durante l'assegnazione di un PacketBuffer per un messaggio a livello di applicazione.

Dettagli
Parametri
[in] aAvailableSize
Numero di ottetti da assegnare dopo il cursore.
Restituisce
Quando l'operazione ha esito positivo, un puntatore al PacketBuffer nel blocco allocato. In caso di errore, NULL. *

NewWithAvailableSize

PacketBuffer * NewWithAvailableSize(
  uint16_t aReservedSize,
  size_t aAvailableSize
)

Alloca un oggetto PacketBuffer con almeno aReservedSize byte riservati nel payload per le intestazioni e almeno aAllocSize byte di spazio per dati aggiuntivi dopo il puntatore del cursore iniziale.

Dettagli
Parametri
[in] aReservedSize
Numero di ottetti da prenotare dietro il cursore.
[in] aAvailableSize
Numero di ottetti da assegnare dopo il cursore.
Restituisce
Quando l'operazione ha esito positivo, un puntatore al PacketBuffer nel blocco allocato. In caso di errore, NULL.

Dimensione destra

PacketBuffer * RightSize(
  PacketBuffer *aPacket
)

Copia il buffer specificato in un buffer di dimensioni giuste, se applicabile.

Questa funzione è autonoma per i socket.

Dettagli
Parametri
[in] aPacket
- Buffer o buffer chain.
Restituisce
nuovo buffer di pacchetto o buffer originale