nl:: Weave:: TLV:: TLVReader
#include <src/lib/core/WeaveTLV.h>
Fornisce un parser efficiente in termini di memoria per i dati codificati nel formato Weave TLV.
Riepilogo
TLVReader implementa un parser "pull-style" solo avanti per i dati Weave TLV. L'oggetto TLVReader funziona come un cursore che può essere utilizzato per iterare una sequenza di elementi TLV e interpretarne i contenuti. Se posizionate su un elemento, le applicazioni possono effettuare chiamate ai metodi Get() del lettore per eseguire query sul tipo e sul tag dell'elemento corrente ed estrarre qualsiasi valore associato. Il metodo Next() del lettore viene utilizzato per passare da un elemento all'altro.
Un oggetto TLVReader viene sempre posizionato prima, sopra o dopo un elemento TLV. Alla prima inizializzazione, un TLVReader viene posizionato subito prima del primo elemento della codifica. Per iniziare a leggere, un'applicazione deve effettuare una chiamata iniziale al metodo Next() per posizionare il lettore sul primo elemento. Quando un elemento contenitore viene rilevato in una struttura, un array o un percorso è possibile utilizzare i metodi OpenContainer() o EnterContainer() per iterare i contenuti del contenitore.
Quando il lettore raggiunge la fine di una codifica TLV o l'ultimo elemento all'interno di un container, segnala all'applicazione un errore WEAVE_END_OF_TLV dal metodo Next(). Il lettore continuerà a restituire WEAVE_END_OF_TLV finché non verrà reinizializzato o fino all'uscita del container corrente (tramite CloseContainer() / ExitContainer()).
Un oggetto TLVReader può analizzare i dati direttamente da un buffer di input fisso o da una catena di uno o più PacketBuffer. Inoltre, le applicazioni possono fornire una funzione GetNextBuffer
per fornire dati al lettore da una sorgente arbitraria, ad esempio un socket o una porta seriale.
Eredità
Sottoclassi note dirette:nl::Weave::Profiles::DataManagement_Current::CircularEventReader
nl::Weave::TLV::CircularTLVReader
Tipi pubblici |
|
---|---|
GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
|
WEAVE_ERROR(* Una funzione che può essere utilizzata per recuperare dati TLV aggiuntivi da analizzare. |
Attributi pubblici |
|
---|---|
AppData
|
void *
Un campo puntatore che può essere utilizzato per dati specifici dell'applicazione.
|
GetNextBuffer
|
Un puntatore a una funzione che genererà dati di input per l'oggetto TLVReader.
|
ImplicitProfileId
|
uint32_t
L'ID profilo da utilizzare per i tag profilo codificati in forma implicita.
|
Attributi protetti |
|
---|---|
mBufEnd
|
const uint8_t *
|
mBufHandle
|
uintptr_t
|
mContainerType
|
|
mControlByte
|
uint16_t
|
mElemLenOrVal
|
uint64_t
|
mElemTag
|
uint64_t
|
mLenRead
|
uint32_t
|
mMaxLen
|
uint32_t
|
mReadPoint
|
const uint8_t *
|
Funzioni pubbliche |
|
---|---|
CloseContainer(TLVReader & containerReader)
|
Completa la lettura di un container TLV dopo una chiamata a OpenContainer().
|
DupBytes(uint8_t *& buf, uint32_t & dataLen)
|
Alloca e restituisce un buffer contenente il valore del byte o della stringa UTF8 corrente.
|
DupString(char *& buf)
|
Alloca e restituisce un buffer contenente il valore con terminazione null del byte corrente o della stringa UTF8.
|
EnterContainer(TLVType & outerContainerType)
|
|
ExitContainer(TLVType outerContainerType)
|
|
Get(bool & v)
|
Ottieni il valore dell'elemento corrente come tipo bool.
|
Get(int8_t & v)
|
Ottieni il valore dell'elemento corrente come numero intero con segno a 8 bit.
|
Get(int16_t & v)
|
Ottieni il valore dell'elemento corrente come numero intero a 16 bit con segno.
|
Get(int32_t & v)
|
Ottieni il valore dell'elemento corrente come numero intero con segno a 32 bit.
|
Get(int64_t & v)
|
Ottieni il valore dell'elemento corrente come numero intero con segno a 64 bit.
|
Get(uint8_t & v)
|
Ottieni il valore dell'elemento corrente come numero intero senza segno a 8 bit.
|
Get(uint16_t & v)
|
Ottieni il valore dell'elemento corrente come numero intero senza segno a 16 bit.
|
Get(uint32_t & v)
|
Ottieni il valore dell'elemento corrente come numero intero senza segno a 32 bit.
|
Get(uint64_t & v)
|
Ottieni il valore dell'elemento corrente come numero intero senza segno a 64 bit.
|
Get(float & v)
|
|
Get(double & v)
|
Ottieni il valore dell'elemento corrente come numero in virgola mobile a precisione doppia.
|
GetBufHandle(void) const
|
uintptr_t
|
GetBytes(uint8_t *buf, uint32_t bufSize)
|
Ottieni il valore dell'elemento della stringa UTF8 o byte corrente.
|
GetContainerType(void) const
|
Restituisce il tipo di container all'interno del quale TLVReader sta leggendo attualmente.
|
GetControlByte(void) const
|
uint16_t
Restituisce il byte di controllo associato all'elemento TLV corrente.
|
GetDataPtr(const uint8_t *& data)
|
Ottieni un puntatore al byte codificato iniziale di un byte TLV o di un elemento stringa UTF8.
|
GetLength(void) const
|
uint32_t
Restituisce la lunghezza dei dati associati all'elemento TLV corrente.
|
GetLengthRead(void) const
|
uint32_t
Restituisce il numero totale di byte letti da quando il lettore è stato inizializzato.
|
GetReadPoint(void) const
|
const uint8_t *
Restituisce il punto nel buffer di input sottostante che corrisponde alla posizione corrente del lettore.
|
GetRemainingLength(void) const
|
uint32_t
Restituisce il numero totale di byte che possono essere letti fino al raggiungimento della lunghezza massima di lettura.
|
GetString(char *buf, uint32_t bufSize)
|
Ottieni il valore dell'elemento della stringa UTF8 o byte corrente come stringa terminata con valore null.
|
GetTag(void) const
|
uint64_t
Restituisce il tag associato all'elemento TLV corrente.
|
GetType(void) const
|
Restituisce il tipo dell'elemento TLV corrente.
|
Init(const TLVReader & aReader)
|
void
|
Init(const uint8_t *data, uint32_t dataLen)
|
void
Inizializza un oggetto TLVReader per la lettura da un singolo buffer di input.
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
Inizializza un oggetto TLVReader da leggere da un singolo PacketBuffer.
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
Inizializza un oggetto TLVReader per la lettura da uno o più PacketBuffer.
|
Next(void)
|
|
Next(TLVType expectedType, uint64_t expectedTag)
|
|
OpenContainer(TLVReader & containerReader)
|
|
Skip(void)
|
|
VerifyEndOfContainer(void)
|
Verifica che l'oggetto TVLReader si trovi alla fine di un container TLV.
|
Funzioni protette |
|
---|---|
ClearElementState(void)
|
void
Cancella lo stato di TLVReader.
|
ElementType(void) const
|
TLVElementType
Questo è un metodo privato che restituisce il tipo TLVElementType da mControlByte.
|
EnsureData(WEAVE_ERROR noDataErr)
|
|
GetElementHeadLength(uint8_t & elemHeadBytes) const
|
Si tratta di un metodo privato utilizzato per calcolare la lunghezza di un'intestazione di un elemento TLV.
|
IsContainerOpen(void) const
|
bool
|
ReadData(uint8_t *buf, uint32_t len)
|
|
ReadElement(void)
|
|
ReadTag(TLVTagControl tagControl, const uint8_t *& p)
|
uint64_t
|
SetContainerOpen(bool aContainerOpen)
|
void
|
SkipData(void)
|
Salta eventuali dati contenuti nel TLV corrente eseguendo la lettura senza un buffer di destinazione.
|
SkipToEndOfContainer(void)
|
|
VerifyElement(void)
|
Funzioni statiche protette |
|
---|---|
FailGetNextBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)
|
|
GetNextPacketBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)
|
Tipi pubblici
GetNextBufferFunct
WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
Una funzione che può essere utilizzata per recuperare dati TLV aggiuntivi da analizzare.
Le funzioni di questo tipo vengono utilizzate per inviare i dati di input a un TLVReader. Quando viene chiamata, la funzione dovrebbe produrre dati aggiuntivi che il lettore può analizzare o segnalare che non sono disponibili altri dati.
Dettagli | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parametri |
|
||||||||
Valori restituiti |
|
Attributi pubblici
AppData
void * AppData
Un campo puntatore che può essere utilizzato per dati specifici dell'applicazione.
GetNextBuffer
GetNextBufferFunct GetNextBuffer
Un puntatore a una funzione che genererà dati di input per l'oggetto TLVReader.
Se impostato su NULL (il valore predefinito), il lettore presumerà che non siano disponibili ulteriori dati di input.
GetNextBuffer può essere impostato da un'applicazione in qualsiasi momento, ma in genere viene impostato al momento dell'inizializzazione del lettore.
Consulta la definizione del tipo GetNextBufferFunct per ulteriori informazioni sull'implementazione di una funzione GetNextBuffer.
ImplicitProfileId
uint32_t ImplicitProfileId
L'ID profilo da utilizzare per i tag profilo codificati in forma implicita.
Quando il lettore trova un tag specifico del profilo che è stato codificato in forma implicita, utilizza il valore della proprietà ImplicitProfileId
come ID profilo presunto per il tag.
Per impostazione predefinita, la proprietà ImplicitProfileId
è impostata su kProfileIdNot specifichi. Durante la decodifica di TLV che contiene tag con codifica implicita, le applicazioni devono impostare ImplicitProfileId
prima di leggere qualsiasi elemento TLV contenente questi tag. L'ID profilo appropriato dipende in genere dal contesto dell'applicazione o del protocollo pronunciato.
Se viene rilevato un tag con codifica implicita mentre ImplicitProfileId
è impostato su kProfileIdNotSpecification, il lettore restituirà un errore WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG.
Attributi protetti
mBufEnd
const uint8_t * mBufEnd
mBufHandle
uintptr_t mBufHandle
mContainerType
TLVType mContainerType
mControlByte
uint16_t mControlByte
mElemLenOrVal
uint64_t mElemLenOrVal
mElemTag
uint64_t mElemTag
mLenRead
uint32_t mLenRead
mMaxLen
uint32_t mMaxLen
mReadPoint
const uint8_t * mReadPoint
Funzioni pubbliche
CloseContainer
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
Completa la lettura di un container TLV dopo una chiamata a OpenContainer().
Il metodo CloseContainer() ripristina lo stato di un oggetto TLVReader principale dopo una chiamata a OpenContainer(). Per ogni chiamata alle applicazioni OpenContainer() deve effettuare una chiamata corrispondente a CloseContainer(), passando un riferimento allo stesso lettore di container per entrambi i metodi.
Quando restituisce CloseContainer(), il lettore principale viene posizionato subito prima del primo elemento che segue il contenitore. A questo punto un'applicazione può utilizzare il metodo Next() per passare da un elemento all'altro.
Le applicazioni possono chiamare CloseContainer() su un lettore padre in qualsiasi momento, indipendentemente dal fatto che tutti gli elementi nel contenitore sottostante siano stati letti. Dopo aver chiamato CloseContainer(), l'applicazione deve considerare il lettore di container "de-inizializzato" e non deve utilizzarlo ulteriormente senza reinizializzarlo.
Dettagli | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametri |
|
||||||||||||
Valori restituiti |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
Alloca e restituisce un buffer contenente il valore del byte o della stringa UTF8 corrente.
Questo metodo crea un buffer e restituisce una copia dei dati associati all'elemento della stringa di byte o UTF-8 nella posizione corrente. La memoria per il buffer si ottiene con Malloc() e dovrebbe essere liberata con free() dal chiamante quando non è più necessaria.
Dettagli | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametri |
|
||||||||||||
Valori restituiti |
|
DupString
WEAVE_ERROR DupString( char *& buf )
Alloca e restituisce un buffer contenente il valore con terminazione null del byte corrente o della stringa UTF8.
Questo metodo crea un buffer per e restituisce una copia con terminazione null dei dati associati al byte o all'elemento della stringa UTF-8 nella posizione corrente. La memoria per il buffer si ottiene con Malloc() e dovrebbe essere liberata con free() dal chiamante quando non è più necessaria.
Dettagli | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametri |
|
||||||||||||
Valori restituiti |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
Consente di preparare un oggetto TLVReader per la lettura dei membri dell'elemento container TLV.
Il metodo EnterContainer() prepara l'oggetto TLVReader corrente per iniziare a leggere gli elementi membro di un container TLV (una struttura, un array o un percorso). Per ogni chiamata alle applicazioni EnterContainer() deve effettuare una chiamata corrispondente a ExitContainer().
Quando viene chiamato EnterContainer(), l'oggetto TLVReader deve essere posizionato sull'elemento contenitore da leggere. Il metodo prende come argomento un riferimento a un valore TLVType che verrà utilizzato per salvare il contesto del lettore durante la lettura del container.
Quando viene restituito il metodo EnterContainer(), il lettore viene posizionato immediatamente prima del primo membro del contenitore. Se chiami ripetutamente Next(), il lettore avanza tra i membri della raccolta fino al raggiungimento della fine, dopodiché il lettore restituirà WEAVE_END_OF_TLV.
Quando l'applicazione ha terminato di leggere un container, può continuare a leggere gli elementi dopo il container chiamando il metodo ExitContainer().
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Completa la lettura di un container TLV e prepara un oggetto TLVReader per la lettura degli elementi dopo il container.
Il metodo ExitContainer() ripristina lo stato di un oggetto TLVReader dopo una chiamata a EnterContainer(). Per ogni chiamata alle applicazioni EnterContainer() deve effettuare una chiamata corrispondente a ExitContainer(), passando il valore di contesto restituito dal metodo EnterContainer().
Quando restituisce ExitContainer(), il lettore viene posizionato subito prima del primo elemento che segue il contenitore. A questo punto un'applicazione può utilizzare il metodo Next() per passare da un elemento all'altro.
Una volta chiamata EnterContainer(), le applicazioni possono chiamare ExitContainer() su un lettore in qualsiasi momento, indipendentemente dal fatto che tutti gli elementi nel contenitore sottostante siano stati letti.
Dettagli | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametri |
|
||||||||||||
Valori restituiti |
|
Get
WEAVE_ERROR Get( bool & v )
Ottieni il valore dell'elemento corrente come tipo bool.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
Get
WEAVE_ERROR Get( int8_t & v )
Ottieni il valore dell'elemento corrente come numero intero con segno a 8 bit.
Se il valore intero codificato è maggiore del tipo di dati di output, il valore risultante verrà troncato.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
Get
WEAVE_ERROR Get( int16_t & v )
Ottieni il valore dell'elemento corrente come numero intero a 16 bit con segno.
Se il valore intero codificato è maggiore del tipo di dati di output, il valore risultante verrà troncato.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
Get
WEAVE_ERROR Get( int32_t & v )
Ottieni il valore dell'elemento corrente come numero intero con segno a 32 bit.
Se il valore intero codificato è maggiore del tipo di dati di output, il valore risultante verrà troncato.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
Get
WEAVE_ERROR Get( int64_t & v )
Ottieni il valore dell'elemento corrente come numero intero con segno a 64 bit.
Se il valore intero codificato è maggiore del tipo di dati di output, il valore risultante verrà troncato.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
Get
WEAVE_ERROR Get( uint8_t & v )
Ottieni il valore dell'elemento corrente come numero intero senza segno a 8 bit.
Se il valore intero codificato è maggiore del tipo di dati di output, il valore risultante verrà troncato. Allo stesso modo, se il valore intero codificato è negativo, il valore verrà convertito in senza segno.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
Get
WEAVE_ERROR Get( uint16_t & v )
Ottieni il valore dell'elemento corrente come numero intero senza segno a 16 bit.
Se il valore intero codificato è maggiore del tipo di dati di output, il valore risultante verrà troncato. Allo stesso modo, se il valore intero codificato è negativo, il valore verrà convertito in senza segno.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
Get
WEAVE_ERROR Get( uint32_t & v )
Ottieni il valore dell'elemento corrente come numero intero senza segno a 32 bit.
Se il valore intero codificato è maggiore del tipo di dati di output, il valore risultante verrà troncato. Allo stesso modo, se il valore intero codificato è negativo, il valore verrà convertito in senza segno.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
Get
WEAVE_ERROR Get( uint64_t & v )
Ottieni il valore dell'elemento corrente come numero intero senza segno a 64 bit.
Se il valore intero codificato è negativo, il valore verrà convertito in senza segno.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
Get
WEAVE_ERROR Get( float & v )
Get
WEAVE_ERROR Get( double & v )
Ottieni il valore dell'elemento corrente come numero in virgola mobile a precisione doppia.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
Ottieni il valore dell'elemento della stringa UTF8 o byte corrente.
Per determinare la dimensione del buffer di input richiesta, chiama il metodo GetLength() prima di chiamare GetBytes().
Dettagli | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parametri |
|
||||||||||
Valori restituiti |
|
GetContainerType
TLVType GetContainerType( void ) const
Restituisce il tipo di container all'interno del quale TLVReader sta leggendo attualmente.
Il metodo GetContainerType() restituisce il tipo di container TLV all'interno del quale TLVReader sta leggendo. Se TLVReader è posizionato al livello più esterno di una codifica TLV (ossia prima, sopra o dopo l'elemento TLV più esterno), il metodo restituirà kTLVType_Notcarichi.
Dettagli | |
---|---|
Restituisce |
Il valore TLVType del container corrente o kTLVType_Not specifichi se TLVReader non è posizionato all'interno di un container.
|
GetControlByte
uint16_t GetControlByte( void ) const
Restituisce il byte di controllo associato all'elemento TLV corrente.
Idealmente, nessuno deve mai essere a conoscenza del byte di controllo e solo l'implementazione interna di TLV dovrebbe potervi accedere. Tuttavia, tuttavia, l'accesso al byte di controllo è utile a fini di debug da parte di TLVDebugUtilities (che cercano di decodificare il byte di controllo tag quando si stampano piuttosto i contenuti del buffer TLV).
Dettagli | |
---|---|
Restituisce |
Un numero intero senza segno contenente il byte di controllo associato all'elemento TLV corrente. Viene restituito kTLVControlByte_Not specifichi se il lettore non è posizionato su un elemento.
|
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
Ottieni un puntatore al byte codificato iniziale di un byte TLV o di un elemento stringa UTF8.
Questo metodo restituisce un puntatore diretto al valore della stringa codificato all'interno del buffer di input sottostante. Per avere esito positivo, il metodo richiede che l'intero valore della stringa sia presente in un singolo buffer. In caso contrario, il metodo restituisce WEAVE_ERROR_TLV_UNDERRUN. Ciò rende il metodo di utilizzo limitato durante la lettura di dati da più buffer non adiacenti.
Dettagli | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parametri |
|
||||||||
Valori restituiti |
|
GetLength
uint32_t GetLength( void ) const
Restituisce la lunghezza dei dati associati all'elemento TLV corrente.
La lunghezza dei dati si applica solo agli elementi di tipo stringa UTF8 o stringa di byte. Per le stringhe UTF8, il valore restituito è il numero di byte nella stringa, non il numero di caratteri.
Dettagli | |
---|---|
Restituisce |
La lunghezza (in byte) dei dati associati all'elemento TLV corrente oppure 0 se l'elemento corrente non è una stringa UTF8 o una stringa di byte, oppure se il lettore non è posizionato su un elemento.
|
GetLengthRead
uint32_t GetLengthRead( void ) const
Restituisce il numero totale di byte letti da quando il lettore è stato inizializzato.
Dettagli | |
---|---|
Restituisce |
Numero totale di byte letti dall'inizializzazione del lettore.
|
GetReadPoint
const uint8_t * GetReadPoint( void ) const
Restituisce il punto nel buffer di input sottostante che corrisponde alla posizione corrente del lettore.
Dettagli | |
---|---|
Restituisce |
Un puntatore nel buffer di input sottostante che corrisponde alla posizione corrente del lettore.
|
GetRemainingLength
uint32_t GetRemainingLength( void ) const
Restituisce il numero totale di byte che possono essere letti fino al raggiungimento della lunghezza massima di lettura.
Dettagli | |
---|---|
Restituisce |
Numero totale di byte che possono essere letti fino al raggiungimento della lunghezza massima di lettura.
|
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
Ottieni il valore dell'elemento della stringa UTF8 o byte corrente come stringa terminata con valore null.
Per determinare la dimensione del buffer di input richiesta, chiama il metodo GetLength() prima di chiamare GetBytes(). Il buffer di input deve essere superiore di almeno un byte alla lunghezza della stringa per contenere il carattere null.
Dettagli | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parametri |
|
||||||||||
Valori restituiti |
|
GetTag
uint64_t GetTag( void ) const
Restituisce il tag associato all'elemento TLV corrente.
Il valore restituito da GetTag() può essere utilizzato con le funzioni di utilità tag (IsProfileTag(), IsContextTag(), ProfileIdFromTag() e così via) per determinare il tipo di tag ed estrarre vari valori dei campi tag.
Dettagli | |
---|---|
Restituisce |
Un numero intero senza segno contenente informazioni sul tag associato all'elemento TLV corrente.
|
GetType
TLVType GetType( void ) const
Inizia
void Init( const TLVReader & aReader )
Inizia
void Init( const uint8_t *data, uint32_t dataLen )
Inizia
void Init( PacketBuffer *buf, uint32_t maxLen )
Inizializza un oggetto TLVReader da leggere da un singolo PacketBuffer.
L'analisi inizia dalla posizione iniziale del buffer (buf->DataStart()) e continua fino alla fine dei dati nel buffer (come indicato da buf->Datalen()) o fino all'analisi dei byte maxLen.
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
Inizia
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
Inizializza un oggetto TLVReader per la lettura da uno o più PacketBuffer.
L'analisi inizia dalla posizione iniziale del buffer (buf->DataStart()). Se allowDiscontiguousBuffers è true, il lettore avanza nella catena di buffer collegati dai puntatori Next(). L'analisi continua finché non sono stati utilizzati tutti i dati nella catena del buffer (come indicato da buf->Datalen()) o fino a quando non vengono analizzati i byte maxLen.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
Avanti
WEAVE_ERROR Next( void )
Consente di far avanzare l'oggetto TLVReader all'elemento TLV successivo da leggere.
Il metodo Next() posiziona l'oggetto reader sull'elemento successivo in una codifica TLV che risiede nello stesso contesto di contenimento. In particolare, se il lettore è posizionato al livello più esterno di una codifica TLV, chiamando Next() il lettore passerà all'elemento più in alto successivo. Se il lettore è posizionato all'interno di un elemento contenitore TLV (una struttura, un array o un percorso), chiamando Next() il lettore verrà avanzato all'elemento membro successivo del container.
Poiché Next() vincola il movimento del lettore al contesto di contenimento corrente, chiamando Next() quando il lettore è posizionato su un elemento contenitore, avanzerà sopra il container, saltando i relativi elementi membro (e i membri di qualsiasi contenitore nidificato) fino a raggiungere il primo elemento dopo il container.
Quando non ci sono altri elementi all'interno di un determinato contesto di contenimento, il metodo Next() restituirà un errore WEAVE_END_OF_TLV e la posizione del lettore rimarrà invariata.
Dettagli | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Valori restituiti |
|
Avanti
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
Sposta l'oggetto TLVReader sull'elemento TLV successivo da leggere, dichiarando il tipo e il tag del nuovo elemento.
Il metodo Next(TLVTypeexpectedType, uint64_texpectedTag) è un metodo di convenienza che ha lo stesso comportamento di Next(), ma verifica anche che il tipo e il tag del nuovo elemento TLV corrispondano agli argomenti forniti.
Dettagli | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametri |
|
||||||||||||||||
Valori restituiti |
|
OpenContainer
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
Inizializza un nuovo oggetto TLVReader per la lettura dei membri di un elemento contenitore TLV.
Il metodo OpenContainer() inizializza un nuovo oggetto TLVReader per la lettura degli elementi membro di un container TLV (una struttura, un array o un percorso). Quando viene richiamato OpenContainer(), l'oggetto TLVReader corrente deve essere posizionato sull'elemento contenitore da leggere. Il metodo prende come unico argomento un riferimento a un nuovo lettore che verrà inizializzato per la lettura del container. Questo lettore è noto come lettore container, mentre quello su cui viene chiamato OpenContainer() è noto come lettore principale.
Quando viene restituito il metodo OpenContainer(), il lettore di container viene posizionato subito prima del primo membro del container. La chiamata a Next() nel lettore di container avanza tra i membri della raccolta fino al raggiungimento della fine, dopodiché il lettore restituirà WEAVE_END_OF_TLV.
Quando il lettore di container è aperto, le applicazioni non devono effettuare chiamate o alterare in altro modo lo stato del lettore principale. Quando un'applicazione ha finito di utilizzare il lettore di container, deve chiuderla chiamando CloseContainer() sul lettore padre, passando il lettore container come argomento. Le applicazioni possono chiudere il lettore di container in qualsiasi momento, con o senza la lettura di tutti gli elementi contenuti nel container sottostante. Dopo la chiusura del lettore di contenitori, le applicazioni possono continuare a utilizzare il lettore principale.
Il lettore di contenitori eredita varie proprietà di configurazione dal lettore principale. Le tre aree sono:
- ID profilo implicito (ImplicitProfileId)
- Il puntatore ai dati dell'applicazione (VPC)
- Puntatore della funzione GetNextBuffer
Dettagli | |||||
---|---|---|---|---|---|
Parametri |
|
||||
Valori restituiti |
|
Salta
WEAVE_ERROR Skip( void )
Sposta l'oggetto TLVReader immediatamente dopo l'elemento TLV corrente.
Il metodo Skip() posiziona l'oggetto reader immediatamente dopo l'elemento TLV corrente, in modo che una chiamata successiva a Next() faccia avanzare il lettore all'elemento seguente. Come Next(), se il lettore è posizionato su un elemento contenitore al momento della chiamata, i membri del contenitore verranno ignorati. Se il lettore non è posizionato su nessun elemento, la sua posizione rimane invariata.
Dettagli | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Valori restituiti |
|
VerifyEndOfContainer
WEAVE_ERROR VerifyEndOfContainer( void )
Verifica che l'oggetto TVLReader si trovi alla fine di un container TLV.
Il metodo VerifyEndOfContainer() verifica che non ci siano altri elementi TLV da leggere all'interno del container TLV corrente. Si tratta di un metodo pratico che equivale a chiamare Next() e a verificare il valore restituito da WEAVE_END_OF_TLV.
Dettagli | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Valori restituiti |
|
Funzioni protette
ClearElementState
void ClearElementState( void )
ElementType
TLVElementType ElementType( void ) const
Questo è un metodo privato che restituisce il tipo TLVElementType da mControlByte.
EnsureData
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeadLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
Si tratta di un metodo privato utilizzato per calcolare la lunghezza di un'intestazione di un elemento TLV.
IsContainerOpen
bool IsContainerOpen( void ) const
ReadData
WEAVE_ERROR ReadData( uint8_t *buf, uint32_t len )
ReadElement
WEAVE_ERROR ReadElement( void )
ReadTag
uint64_t ReadTag( TLVTagControl tagControl, const uint8_t *& p )
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
SkipData
WEAVE_ERROR SkipData( void )
Salta eventuali dati contenuti nel TLV corrente eseguendo la lettura senza un buffer di destinazione.
Dettagli | |||||
---|---|---|---|---|---|
Valori restituiti |
|
SkipToEndOfContainer
WEAVE_ERROR SkipToEndOfContainer( void )
VerifyElement
WEAVE_ERROR VerifyElement( void )
Funzioni statiche protette
FailGetNextBuffer
WEAVE_ERROR FailGetNextBuffer( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen )
GetNextPacketBuffer
WEAVE_ERROR GetNextPacketBuffer( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen )