nl:: Weave:: TLV:: TLVReader
#include <src/lib/core/WeaveTLV.h>
Szybki parser zapewniający dużą ilość pamięci dla danych kodowanych w formacie TLV Weave.
Podsumowanie
W przypadku danych TLV Weave element TLVReader implementuje dostępny tylko do przodu parser w stylu „pull”. Obiekt TLVReader działa jak kursor, którego można używać do iteracji nad sekwencją elementów TLV i interpretowania ich zawartości. Gdy jest umieszczona w elemencie, może wykonywać wywołania metod Get() czytnika w celu wysłania zapytania o typ i tag bieżącego elementu oraz pobranie dowolnej powiązanej wartości. Metoda Next() użytkownika jest wykorzystywana do przechodzenia między elementami.
Obiekt TLVReader jest zawsze umieszczony przed elementem TLV, na nim lub po nim. Po pierwszym zainicjowaniu tag TLVReader jest umieszczany bezpośrednio przed pierwszym elementem kodowania. Aby rozpocząć odczytywanie, aplikacja musi wywołać wstępne wywołanie metody Next(), aby umieścić czytnik na pierwszym elemencie. Jeśli element kontenera zostanie napotkany w postaci struktury, metoda OpenContainer() lub EnterContainer() może posłużyć do iteracji zawartości kontenera za pomocą tablicy lub ścieżki.
Gdy czytnik osiągnie koniec kodowania TLV lub ostatni element w kontenerze, sygnalizuje aplikację, zwracając błąd WEAVE_END_OF_TLV z metody Next(). Czytnik będzie zwracać kod WEAVE_END_OF_TLV, dopóki nie zostanie ponownie zainicjowany lub dopóki bieżący kontener nie zostanie zamknięty (za pomocą funkcji CloseContainer() / ExitContainer()).
Obiekt TLVReader może analizować dane bezpośrednio ze stałego bufora wejściowego lub z łańcucha co najmniej jednego bufora pakietów. Dodatkowo aplikacje mogą dostarczać funkcję GetNextBuffer
do przekazywania danych do czytnika z dowolnego źródła, np. z gniazda lub portu szeregowego.
Dziedziczenie
Bezpośrednie znane podklasy:nl::Weave::Profiles::DataManagement_Current::CircularEventReader
nl::Weave::TLV::CircularTLVReader
Typy publiczne |
|
---|---|
GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
|
WEAVE_ERROR(* Funkcja, która umożliwia pobieranie dodatkowych danych TLV do analizy. |
Atrybuty publiczne |
|
---|---|
AppData
|
void *
Pole wskaźnika, którego można używać w przypadku danych specyficznych dla aplikacji.
|
GetNextBuffer
|
Wskaźnik funkcji, która wygeneruje dane wejściowe dla obiektu TLVReader.
|
ImplicitProfileId
|
uint32_t
Identyfikator profilu, który ma być używany dla tagów profilu zakodowanego w postaci niejawnej.
|
Atrybuty chronione |
|
---|---|
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 *
|
Funkcje publiczne |
|
---|---|
CloseContainer(TLVReader & containerReader)
|
Kończy odczyt kontenera TLV po wywołaniu funkcji OpenContainer().
|
DupBytes(uint8_t *& buf, uint32_t & dataLen)
|
Przydziela i zwraca bufor zawierający wartość bieżącego ciągu bajtowego lub ciągu UTF8.
|
DupString(char *& buf)
|
Przydziela i zwraca bufor zawierający zakończenie wartości null bieżącego bajta lub ciągu UTF8.
|
EnterContainer(TLVType & outerContainerType)
|
|
ExitContainer(TLVType outerContainerType)
|
|
Get(bool & v)
|
Pobierz wartość bieżącego elementu jako typ wartości logicznej.
|
Get(int8_t & v)
|
Pobierz wartość bieżącego elementu w postaci 8-bitowej liczby całkowitej ze znakiem.
|
Get(int16_t & v)
|
Pobierz wartość bieżącego elementu w postaci 16-bitowej liczby całkowitej ze znakiem.
|
Get(int32_t & v)
|
Pobierz wartość bieżącego elementu w postaci 32-bitowej liczby całkowitej ze znakiem.
|
Get(int64_t & v)
|
Pobierz wartość bieżącego elementu w postaci 64-bitowej liczby całkowitej ze znakiem.
|
Get(uint8_t & v)
|
Pobierz wartość bieżącego elementu w postaci 8-bitowej bez znaku liczby całkowitej.
|
Get(uint16_t & v)
|
Pobierz wartość bieżącego elementu w postaci 16-bitowej nieoznaczonej liczby całkowitej.
|
Get(uint32_t & v)
|
Pobierz wartość bieżącego elementu w postaci 32-bitowej bez znaku liczby całkowitej.
|
Get(uint64_t & v)
|
Pobierz wartość bieżącego elementu w postaci 64-bitowej nieoznaczonej liczby całkowitej.
|
Get(float & v)
|
|
Get(double & v)
|
Pobierz wartość bieżącego elementu w postaci liczby zmiennoprzecinkowej o podwójnej precyzji.
|
GetBufHandle(void) const
|
uintptr_t
|
GetBytes(uint8_t *buf, uint32_t bufSize)
|
Pobierz wartość bieżącego elementu ciągu znaków UTF-8 lub bajtów.
|
GetContainerType(void) const
|
Zwraca typ kontenera, w którym aktualnie odczytuje kod TLVReader.
|
GetControlByte(void) const
|
uint16_t
Zwraca bajt kontrolny powiązany z bieżącym elementem TLV.
|
GetDataPtr(const uint8_t *& data)
|
Uzyskiwanie wskaźnika do początkowego zakodowanego bajtu elementu ciągu TLV lub ciągu znaków UTF8.
|
GetLength(void) const
|
uint32_t
Zwraca długość danych powiązanych z bieżącym elementem TLV.
|
GetLengthRead(void) const
|
uint32_t
Zwraca łączną liczbę bajtów odczytanych od chwili zainicjowania czytnika.
|
GetReadPoint(void) const
|
const uint8_t *
Pobiera punkt w bazowym buforze danych wejściowych, który odpowiada bieżącej pozycji czytelnika.
|
GetRemainingLength(void) const
|
uint32_t
Zwraca łączną liczbę bajtów, które można odczytać do osiągnięcia maksymalnej długości odczytu.
|
GetString(char *buf, uint32_t bufSize)
|
Pobierz wartość bieżącego elementu ciągu znaków UTF-8 lub bajtów jako ciąg znaków zakończony wartością null.
|
GetTag(void) const
|
uint64_t
Zwraca tag powiązany z bieżącym elementem TLV.
|
GetType(void) const
|
Zwraca typ bieżącego elementu TLV.
|
Init(const TLVReader & aReader)
|
void
|
Init(const uint8_t *data, uint32_t dataLen)
|
void
Inicjuje obiekt TLVReader do odczytu z pojedynczego bufora wejściowego.
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
Inicjuje obiekt TLVReader do odczytu z pojedynczego bufora pakietów.
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
Inicjuje obiekt TLVReader do odczytu z co najmniej jednego PacketBuffer.
|
Next(void)
|
|
Next(TLVType expectedType, uint64_t expectedTag)
|
|
OpenContainer(TLVReader & containerReader)
|
|
Skip(void)
|
|
VerifyEndOfContainer(void)
|
Sprawdza, czy obiekt TVLReader znajduje się na końcu kontenera TLV.
|
Funkcje chronione |
|
---|---|
ClearElementState(void)
|
void
Wyczyść stan klasy TLVReader.
|
ElementType(void) const
|
TLVElementType
Jest to prywatna metoda, która zwraca wartość TLVElementType z mControlByte.
|
EnsureData(WEAVE_ERROR noDataErr)
|
|
GetElementHeadLength(uint8_t & elemHeadBytes) const
|
Jest to prywatna metoda obliczania długości nagłówka elementu 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)
|
Pomiń wszystkie dane zawarte w bieżącym TLV, odczytując je bez bufora docelowego.
|
SkipToEndOfContainer(void)
|
|
VerifyElement(void)
|
Chronione funkcje statyczne |
|
---|---|
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)
|
Typy publiczne
GetNextBufferFunct
WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
Funkcja, która umożliwia pobieranie dodatkowych danych TLV do analizy.
Funkcje tego typu służą do przesyłania danych wejściowych do czytnika TLVReader. Po wywołaniu funkcja powinna wygenerować dodatkowe dane, które czytelnik może przeanalizować lub zasygnalizować, że nie ma więcej danych.
Szczegóły | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||
Zwracane wartości |
|
Atrybuty publiczne
AppData
void * AppData
Pole wskaźnika, którego można używać w przypadku danych specyficznych dla aplikacji.
GetNextBuffer
GetNextBufferFunct GetNextBuffer
Wskaźnik funkcji, która wygeneruje dane wejściowe dla obiektu TLVReader.
Jeśli ustawisz wartość NULL (wartość domyślną), czytelnik przyjmie, że nie są dostępne żadne dalsze dane wejściowe.
Funkcję GetNextBuffer można ustawić przez aplikację w dowolnym momencie, ale zwykle jest ona ustawiana po zainicjowaniu czytnika.
Dodatkowe informacje na temat wdrażania funkcji GetNextBuffer można znaleźć w definicji typu GetNextBufferFunct.
ImplicitProfileId
uint32_t ImplicitProfileId
Identyfikator profilu, który ma być używany dla tagów profilu zakodowanego w postaci niejawnej.
Gdy czytelnik napotka tag powiązany z profilem, który został zakodowany w formie niejawnej, użyje wartości właściwości ImplicitProfileId
jako zakładanego identyfikatora profilu tego tagu.
Domyślnie właściwość ImplicitProfileId
ma wartość kProfileIdNotSpecified. Podczas dekodowania TLV, które zawiera niejawnie zakodowane tagi, aplikacje muszą ustawić ImplicitProfileId
przed odczytaniem elementów TLV zawierających takie tagi. Odpowiedni identyfikator profilu zwykle zależy od kontekstu aplikacji lub używanego protokołu.
Jeśli napotka tag zakodowany niejawnie, a zasada ImplicitProfileId
ma wartość kProfileIdNotSpecified, czytnik zwróci błąd WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG.
Atrybuty chronione
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
Funkcje publiczne
CloseContainer
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
Kończy odczyt kontenera TLV po wywołaniu funkcji OpenContainer().
Metoda CloseContainer() przywraca stan nadrzędnego obiektu TLVReader po wywołaniu funkcji OpenContainer(). Każde wywołanie aplikacji OpenContainer() musi wywoływać odpowiadające jej wywołanie funkcji CloseContainer(), przekazując do obu metod ten sam czytnik kontenerów.
Po zwróceniu metody CloseContainer() czytnik nadrzędny znajduje się bezpośrednio przed pierwszym elementem, który występuje za kontenerem. Od tego momentu aplikacja może używać metody Next() do przechodzenia między pozostałymi elementami.
Aplikacje mogą w każdej chwili wywołać metodę Zamknij CloseContainer() na czytniku nadrzędnym niezależnie od tego, czy wszystkie elementy w kontenerze zostały odczytane. Po wywołaniu metody CloseContainer() aplikacja powinna uznać, że czytnik kontenerów jest „deinicjowany” i nie może dalej go używać bez ponownego zainicjowania.
Szczegóły | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||||
Zwracane wartości |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
Przydziela i zwraca bufor zawierający wartość bieżącego ciągu bajtowego lub ciągu UTF8.
Ta metoda tworzy bufor i zwraca kopię danych powiązanych z elementem ciągu znaków UTF-8 w bieżącej pozycji. Pamięć bufora jest odczytywana za pomocą metody Malloc() i powinna zostać zwolniona za pomocą funkcji free() przez element wywołujący, gdy nie jest już potrzebna.
Szczegóły | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||||
Zwracane wartości |
|
DupString
WEAVE_ERROR DupString( char *& buf )
Przydziela i zwraca bufor zawierający zakończenie wartości null bieżącego bajta lub ciągu UTF8.
Ta metoda tworzy bufor dla i zwraca kopię danych o wartości null o wartości null powiązanej z elementem ciągu znaków UTF-8 w bieżącej pozycji. Pamięć bufora jest odczytywana za pomocą metody Malloc() i powinna zostać zwolniona za pomocą funkcji free() przez element wywołujący, gdy nie jest już potrzebna.
Szczegóły | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||||
Zwracane wartości |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
Przygotowuje obiekt TLVReader do odczytu elementów kontenera TLV.
Metoda EnterContainer() przygotowuje bieżący obiekt TLVReader do rozpoczynania odczytu elementów składowych kontenera TLV (struktury, tablicy lub ścieżki). Każde wywołanie aplikacji EnterContainer() musi odpowiadać wywołaniu ExitContainer().
Po wywołaniu metody EnterContainer() obiekt TLVReader musi być umieszczony w elemencie kontenera, aby można go było odczytać. Ta metoda przyjmuje jako argument odwołanie do wartości TLVType, która zostanie użyta do zapisania kontekstu czytnika podczas odczytu kontenera.
Po zwróceniu metody EnterContainer() czytnik znajduje się bezpośrednio przed pierwszym elementem kontenera. Powtarzające się wywoływanie funkcji Next() powoduje, że czytnik przechodzi przez elementy kolekcji aż do osiągnięcia końca zbioru. Gdy to nastąpi, czytnik zwróci wartość WEAVE_END_OF_TLV.
Gdy aplikacja skończy odczytywać kontener, może kontynuować odczytywanie elementów, które znajdują się za kontenerem, wywołując metodę ExitContainer().
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Kończy odczyt kontenera TLV i przygotowuje obiekt TLVReader do odczytu elementów po kontenerze.
Metoda ExitContainer() przywraca stan obiektu TLVReader po wywołaniu metody EnterContainer(). Każde wywołanie aplikacji EnterContainer() musi wykonać odpowiednie wywołanie funkcji ExitContainer(), przekazując wartość kontekstu zwracaną przez metodę EnterContainer().
Gdy ExitContainer() zwróci, czytelnik zostanie umieszczony bezpośrednio przed pierwszym elementem, który jest za kontenerem. Od tego momentu aplikacja może używać metody Next() do przechodzenia między pozostałymi elementami.
Po wywołaniu metody EnterContainer() aplikacje mogą w dowolnym momencie wywołać metodę ExitContainer() na czytniku, niezależnie od tego, czy wszystkie elementy w kontenerze zostały odczytane.
Szczegóły | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( bool & v )
Pobierz wartość bieżącego elementu jako typ wartości logicznej.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( int8_t & v )
Pobierz wartość bieżącego elementu w postaci 8-bitowej liczby całkowitej ze znakiem.
Jeśli zakodowana liczba całkowita jest większa niż typ danych wyjściowych, wynikowa wartość zostanie obcięta.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( int16_t & v )
Pobierz wartość bieżącego elementu w postaci 16-bitowej liczby całkowitej ze znakiem.
Jeśli zakodowana liczba całkowita jest większa niż typ danych wyjściowych, wynikowa wartość zostanie obcięta.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( int32_t & v )
Pobierz wartość bieżącego elementu w postaci 32-bitowej liczby całkowitej ze znakiem.
Jeśli zakodowana liczba całkowita jest większa niż typ danych wyjściowych, wynikowa wartość zostanie obcięta.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( int64_t & v )
Pobierz wartość bieżącego elementu w postaci 64-bitowej liczby całkowitej ze znakiem.
Jeśli zakodowana liczba całkowita jest większa niż typ danych wyjściowych, wynikowa wartość zostanie obcięta.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( uint8_t & v )
Pobierz wartość bieżącego elementu w postaci 8-bitowej bez znaku liczby całkowitej.
Jeśli zakodowana liczba całkowita jest większa niż typ danych wyjściowych, wynikowa wartość zostanie obcięta. Podobnie, jeśli zakodowana liczba całkowita jest ujemna, wartość zostanie przekonwertowana na wartość bez znaku.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( uint16_t & v )
Pobierz wartość bieżącego elementu w postaci 16-bitowej nieoznaczonej liczby całkowitej.
Jeśli zakodowana liczba całkowita jest większa niż typ danych wyjściowych, wynikowa wartość zostanie obcięta. Podobnie, jeśli zakodowana liczba całkowita jest ujemna, wartość zostanie przekonwertowana na wartość bez znaku.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( uint32_t & v )
Pobierz wartość bieżącego elementu w postaci 32-bitowej bez znaku liczby całkowitej.
Jeśli zakodowana liczba całkowita jest większa niż typ danych wyjściowych, wynikowa wartość zostanie obcięta. Podobnie, jeśli zakodowana liczba całkowita jest ujemna, wartość zostanie przekonwertowana na wartość bez znaku.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( uint64_t & v )
Pobierz wartość bieżącego elementu w postaci 64-bitowej nieoznaczonej liczby całkowitej.
Jeśli zakodowana liczba całkowita jest ujemna, wartość zostanie przekonwertowana na wartość bez znaku.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pobierz
WEAVE_ERROR Get( float & v )
Pobierz
WEAVE_ERROR Get( double & v )
Pobierz wartość bieżącego elementu w postaci liczby zmiennoprzecinkowej o podwójnej precyzji.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
Pobierz wartość bieżącego elementu ciągu znaków UTF-8 lub bajtów.
Aby określić wymagany rozmiar bufora wejściowego, wywołaj metodę GetLength() przed wywołaniem funkcji GetBytes().
Szczegóły | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||
Zwracane wartości |
|
GetContainerType
TLVType GetContainerType( void ) const
Zwraca typ kontenera, w którym aktualnie odczytuje kod TLVReader.
Metoda GetContainerType() zwraca typ kontenera TLV, w którym odczytuje obiekt TLVReader. Jeśli tag TLVReader znajduje się na najbardziej zewnętrznym poziomie kodowania TLV (czyli przed, w najbardziej zewnętrznym elemencie TLV lub po nim), metoda zwraca wartość kTLVType_NotSpecified.
Szczegóły | |
---|---|
Zwroty |
Wartość TLVType bieżącego kontenera lub wartość kTLVType_NotSpecified, jeśli obiekt TLVReader nie znajduje się w kontenerze.
|
GetControlByte
uint16_t GetControlByte( void ) const
Zwraca bajt kontrolny powiązany z bieżącym elementem TLV.
W idealnej sytuacji nikt nie musi wiedzieć o bajcie kontrolnym i tylko wewnętrzna implementacja TLV powinna mieć do niego dostęp. Dostęp do bajtu kontrolnego jest jednak przydatny przy debugowaniu za pomocą narzędzi TLVDebugnarzędzia (które próbują zdekodować bajt kontrolny tagu podczas drukowania zawartości bufora TLV).
Szczegóły | |
---|---|
Zwroty |
Nieoznaczona liczba całkowita zawierająca bajt kontrolny powiązany z bieżącym elementem TLV. Wartość kTLVControlByte_NotSpecified jest zwracana, jeśli czytnik nie znajduje się na elemencie.
|
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
Uzyskiwanie wskaźnika do początkowego zakodowanego bajtu elementu ciągu TLV lub ciągu znaków UTF8.
Ta metoda zwraca bezpośredni wskaźnik zakodowanej wartości ciągu znaków w podstawowym buforze wejściowym. Aby metoda się powiodła, metoda wymaga, aby cała wartość ciągu znajdowała się w jednym buforze. W przeciwnym razie zwraca błąd WEAVE_ERROR_TLV_UNDERRUN. To sprawia, że jest to metoda ograniczonego użycia podczas odczytywania danych z wielu nieprzylegających do siebie buforów.
Szczegóły | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||
Zwracane wartości |
|
GetLength
uint32_t GetLength( void ) const
Zwraca długość danych powiązanych z bieżącym elementem TLV.
Długość danych dotyczy tylko elementów typu ciąg znaków UTF8 lub ciąg bajtów. W przypadku ciągów znaków UTF8 zwracaną wartością jest liczba bajtów w ciągu, a nie liczba znaków.
Szczegóły | |
---|---|
Zwroty |
Długość (w bajtach) danych powiązanych z bieżącym elementem TLV lub 0 , jeśli bieżący element nie jest ciągiem znaków UTF8 ani ciągiem bajtów albo jeśli czytnik nie znajduje się w elemencie.
|
GetLengthRead
uint32_t GetLengthRead( void ) const
Zwraca łączną liczbę bajtów odczytanych od chwili zainicjowania czytnika.
Szczegóły | |
---|---|
Zwroty |
Łączna liczba bajtów odczytanych od momentu zainicjowania czytnika.
|
GetReadPoint
const uint8_t * GetReadPoint( void ) const
Pobiera punkt w bazowym buforze danych wejściowych, który odpowiada bieżącej pozycji czytelnika.
Szczegóły | |
---|---|
Zwroty |
Wskaźnik do bazowego bufora danych wejściowych odpowiadający bieżącej pozycji czytelnika.
|
GetRemainingLength
uint32_t GetRemainingLength( void ) const
Zwraca łączną liczbę bajtów, które można odczytać do osiągnięcia maksymalnej długości odczytu.
Szczegóły | |
---|---|
Zwroty |
Łączna liczba bajtów, które można odczytać do osiągnięcia maksymalnej długości odczytu.
|
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
Pobierz wartość bieżącego elementu ciągu znaków UTF-8 lub bajtów jako ciąg znaków zakończony wartością null.
Aby określić wymagany rozmiar bufora wejściowego, wywołaj metodę GetLength() przed wywołaniem funkcji GetBytes(). Bufor wejściowy powinien być co najmniej o 1 bajt większy od długości ciągu znaków, aby zmieścić pusty znak.
Szczegóły | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||
Zwracane wartości |
|
GetTag
uint64_t GetTag( void ) const
Zwraca tag powiązany z bieżącym elementem TLV.
Wartości zwróconej przez funkcję GetTag() można użyć za pomocą funkcji narzędziowych tagu (IsProfileTag(), IsContextTag(), ProfileIdFromTag() itp.), aby określić typ tagu i wyodrębnić różne wartości pól tagu.
Szczegóły | |
---|---|
Zwroty |
Nieoznaczona liczba całkowita zawierająca informacje o tagu powiązanym z bieżącym elementem TLV.
|
GetType
TLVType GetType( void ) const
Zainicjuj
void Init( const TLVReader & aReader )
Zainicjuj
void Init( const uint8_t *data, uint32_t dataLen )
Zainicjuj
void Init( PacketBuffer *buf, uint32_t maxLen )
Inicjuje obiekt TLVReader do odczytu z pojedynczego bufora pakietów.
Analiza rozpoczyna się w pozycji początkowej bufora (buf->DataStart()) i trwa do końca danych w buforze (oznaczonym przez buf->Datalen()) lub do przeanalizowania bajtów maxLen.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
Zainicjuj
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
Inicjuje obiekt TLVReader do odczytu z co najmniej jednego PacketBuffer.
Analiza rozpoczyna się od początkowej pozycji bufora (buf->DataStart()). Jeśli parametr allowDiscontiguousBuffers ma wartość prawda, czytelnik przechodzi przez łańcuch buforów połączonych wskaźnikami Next(). Analizowanie jest kontynuowane do momentu wykorzystania wszystkich danych w łańcuchu bufora (zgodnie z oznaczeniem buf->Datalen()) lub przeanalizowania maksymalnej liczby bajtów.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
Dalej
WEAVE_ERROR Next( void )
Przenosi obiekt TLVReader do następnego elementu TLV do odczytania.
Metoda Next() umieszcza obiekt czytnika w następnym elemencie w kodowaniu TLV, które znajduje się w tym samym kontekście izolacji. Jeśli czytnik znajduje się na najwyższym zewnętrznym poziomie kodowania TLV, wywołanie metody Next() spowoduje przeniesienie go do następnego elementu najwyższego poziomu. Jeśli czytnik znajduje się w elemencie kontenera TLV (strukturze, tablicy lub ścieżce), wywołanie metody Next() przeniesie go do następnego elementu kontenera.
Funkcja Next() ogranicza ruch czytnika do bieżącego kontekstu izolacji, dlatego wywołanie metody Next(), gdy czytnik znajduje się w elemencie kontenera, powoduje przejście nad kontenera, pomijanie jego elementów składowych (i elementów zagnieżdżonych kontenerów), aż dotrze do pierwszego elementu za kontenerem.
Gdy w konkretnym kontekście izolacji nie ma więcej elementów, metoda Next() zwraca błąd WEAVE_END_OF_TLV, a położenie czytnika się nie zmienia.
Szczegóły | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Zwracane wartości |
|
Dalej
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
Przenosi obiekt TLVReader do następnego elementu TLV do odczytania, podając typ i tag nowego elementu.
Metoda Next(TLVTypeExpectType, uint64_texpectedTag) to wygodna metoda, która działa tak samo jak Next(), ale sprawdza, czy typ i tag nowego elementu TLV są zgodne z podanymi argumentami.
Szczegóły | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||||||||
Zwracane wartości |
|
OpenContainer
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
Inicjuje nowy obiekt TLVReader do odczytu elementów kontenera TLV.
Metoda OpenContainer() inicjuje nowy obiekt TLVReader do odczytu elementów składowych kontenera TLV (struktury, tablicy lub ścieżki). Po wywołaniu metody OpenContainer() bieżący obiekt TLVReader musi być umieszczony w elemencie kontenera, aby można go było odczytać. Metoda wykorzystuje jako jedyny argument odwołanie do nowego czytnika, który zostanie zainicjowany w celu odczytania kontenera. Ten czytnik jest nazywany czytnikiem kontenerów, a czytnik, który wywołuje funkcję OpenContainer(), jest nazywany czytnikiem nadrzędnym.
Po zwróceniu metody OpenContainer() czytnik kontenerów znajduje się bezpośrednio przed pierwszym elementem kontenera. Wywołanie Next() w czytniku kontenera powoduje przejście między elementami zbioru aż do osiągnięcia końca kolekcji. Gdy to nastąpi, czytnik zwróci wartość WEAVE_END_OF_TLV.
Gdy czytnik kontenera jest otwarty, aplikacje nie mogą wykonywać wywołań ani w inny sposób zmieniać stanu czytnika nadrzędnego. Gdy aplikacja skończy korzystać z czytnika kontenerów, musi ją zamknąć, wywołując w czytniku nadrzędnym metodę CloseContainer(), która przekazuje czytnik kontenerów jako argument. Aplikacje mogą zamknąć czytnik kontenerów w dowolnym momencie, zarówno wraz z odczytu, jak i bez odczytywania wszystkich elementów znajdujących się w kontenerze. Po zamknięciu czytnika kontenera aplikacje mogą nadal korzystać z czytnika nadrzędnego.
Czytnik kontenerów dziedziczy różne właściwości konfiguracji po czytniku nadrzędnym. Dostępne symbole:
- Identyfikator profilu domyślnego (ImplicitProfileId)
- Wskaźnik danych aplikacji (AppData)
- Wskaźnik funkcji GetNextBuffer
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
Pomiń
WEAVE_ERROR Skip( void )
Przesuwa obiekt TLVReader tak, aby był bezpośrednio po bieżącym elemencie TLV.
Metoda Pomiń() umieszcza obiekt czytnika tuż po bieżącym elemencie TLV, tak aby kolejne wywołanie funkcji Next() przekierowało użytkownika do kolejnego elementu. Podobnie jak w przypadku funkcji Next(), jeśli w momencie wywołania czytnik znajduje się na elemencie kontenera, jego elementy są pomijane. Jeśli czytnik nie znajduje się na żadnym elemencie, jego położenie pozostaje bez zmian.
Szczegóły | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Zwracane wartości |
|
VerifyEndOfContainer
WEAVE_ERROR VerifyEndOfContainer( void )
Sprawdza, czy obiekt TVLReader znajduje się na końcu kontenera TLV.
Metoda VerifyEndOfContainer() sprawdza, czy w bieżącym kontenerze TLV nie ma więcej elementów TLV do odczytu. Jest to wygodna metoda, która jest odpowiednikiem wywoływania funkcji Next() i sprawdzania zwracanej wartości WEAVE_END_OF_TLV.
Szczegóły | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Zwracane wartości |
|
Funkcje chronione
ClearElementState
void ClearElementState( void )
ElementType
TLVElementType ElementType( void ) const
Jest to prywatna metoda, która zwraca wartość TLVElementType z mControlByte.
EnsureData
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeadLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
Jest to prywatna metoda obliczania długości nagłówka elementu 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 )
Pomiń wszystkie dane zawarte w bieżącym TLV, odczytując je bez bufora docelowego.
Szczegóły | |||||
---|---|---|---|---|---|
Zwracane wartości |
|
SkipToEndOfContainer
WEAVE_ERROR SkipToEndOfContainer( void )
VerifyElement
WEAVE_ERROR VerifyElement( void )
Chronione funkcje statyczne
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 )