Google is committed to advancing racial equity for Black communities. See how.
Эта страница переведена с помощью Cloud Translation API.
Switch to English

nl :: Плетение :: TLV :: TLVReader

#include <src/lib/core/WeaveTLV.h>

Предоставляет эффективный анализатор памяти для данных, закодированных в формате Weave TLV .

Резюме

TLVReader реализует синтаксический анализатор «только для пересылки» для данных Weave TLV . ОбъектTLVReader работает как курсор, который можно использовать для перебора последовательности элементов TLV и интерпретации их содержимого. При размещении на элементе приложения могут вызывать методы читателя Get () для запроса типа и тега текущего элемента, а также для извлечения любого связанного значения. Метод читателя Next () используется для перехода от элемента к элементу.

ОбъектTLVReader всегда располагается до, после или после элемента TLV . При первой инициализацииTLVReader располагается непосредственно перед первым элементом кодировки. Чтобы начать чтение, приложение должно выполнить первоначальный вызов метода Next (), чтобы расположить средство чтения на первом элементе. Когда встречается элемент контейнера, переопределите структуру, массив или путь, методы OpenContainer () или EnterContainer () могут использоваться для перебора содержимого контейнера.

Когда считыватель достигает конца кодировки TLV или последнего элемента в контейнере, он сигнализирует приложению, возвращая ошибку WEAVE_END_OF_TLV из метода Next () . Читатель будет продолжать возвращать WEAVE_END_OF_TLV до тех пор, пока он не будет повторно инициализирован, или пока текущий контейнер не будет закрыт ( через CloseContainer () / ExitContainer () ).

ОбъектTLVReader может анализировать данные непосредственно из фиксированного входного буфера или из цепочки из одного или нескольких PacketBuffers. Кроме того, приложения могут предоставлять функцию GetNextBuffer для передачи данных в считыватель из произвольного источника, например сокета или последовательного порта.

Наследование

Прямые известные подклассы:
  nl :: Weave :: Profiles :: DataManagement_Current :: CircularEventReader
  nl :: Weave :: TLV :: CircularTLVReader

Публичные типы

GetNextBufferFunct )(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen) WEAVE_ERROR (*
Функция, которая может использоваться для получения дополнительных данных TLV для анализа.

Публичные атрибуты

AppData
void *
Поле указателя, которое можно использовать для данных приложения.
GetNextBuffer
Указатель на функцию, которая будет производить входные данные для объектаTLVReader .
ImplicitProfileId
uint32_t
Идентификатор профиля, который будет использоваться для тегов профиля, закодированных в неявной форме.

Защищенные атрибуты

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 *

Публичные функции

CloseContainer (TLVReader & containerReader)
Завершает чтение контейнера TLV после вызова OpenContainer () .
DupBytes (uint8_t *& buf, uint32_t & dataLen)
Выделяет и возвращает буфер, содержащий значение текущего байта или строки UTF8.
DupString (char *& buf)
Выделяет и возвращает буфер, содержащий значение с завершающим нулем текущего байта или строки UTF8.
EnterContainer ( TLVType & outerContainerType)
Подготавливает объектTLVReader для чтения членов элемента контейнера TLV .
ExitContainer ( TLVType outerContainerType)
Завершает чтение контейнера TLV и подготавливает объектTLVReader для чтения элементов после контейнера.
Get (bool & v)
Получить значение текущего элемента как тип bool.
Get (int8_t & v)
Получить значение текущего элемента как 8-битовое целое число со знаком.
Get (int16_t & v)
Получить значение текущего элемента как 16-битовое целое число со знаком.
Get (int32_t & v)
Получить значение текущего элемента как 32-разрядное целое число со знаком.
Get (int64_t & v)
Получить значение текущего элемента как 64-битное целое число со знаком.
Get (uint8_t & v)
Получить значение текущего элемента как 8-битовое целое число без знака.
Get (uint16_t & v)
Получить значение текущего элемента как 16-разрядное целое число без знака.
Get (uint32_t & v)
Получить значение текущего элемента как 32-разрядное целое число без знака.
Get (uint64_t & v)
Получить значение текущего элемента как 64-битное целое число без знака.
Get (float & v)
Get (double & v)
Получить значение текущего элемента как число двойной точности с плавающей запятой.
GetBufHandle (void) const
uintptr_t
GetBytes (uint8_t *buf, uint32_t bufSize)
Получить значение текущего байта или строкового элемента UTF8.
GetContainerType (void) const
Возвращает тип контейнера, в которомTLVReader в настоящее время читает.
GetControlByte (void) const
uint16_t
Возвращает контрольный байт, связанный с текущим элементом TLV .
GetDataPtr (const uint8_t *& data)
Получить указатель на начальный закодированный байт байта TLV или строкового элемента UTF8.
GetLength (void) const
uint32_t
Возвращает длину данных, связанных с текущим элементом TLV .
GetLengthRead (void) const
uint32_t
Возвращает общее количество байтов, прочитанных с момента инициализации средства чтения.
GetReadPoint (void) const
const uint8_t *
Получает точку в нижележащем буфере ввода, которая соответствует текущей позиции читателя.
GetRemainingLength (void) const
uint32_t
Возвращает общее количество байтов, которые могут быть прочитаны, пока не будет достигнута максимальная длина чтения.
GetString (char *buf, uint32_t bufSize)
Получить значение текущего байта или строкового элемента UTF8 в виде строки с завершающим нулем.
GetTag (void) const
uint64_t
Возвращает тег, связанный с текущим элементом TLV .
GetType (void) const
Возвращает тип текущего элемента TLV .
Init (constTLVReader & aReader)
void
Инициализирует объектTLVReader из другого объектаTLVReader .
Init (const uint8_t *data, uint32_t dataLen)
void
Инициализирует объектTLVReader для чтения из единственного входного буфера.
Init ( PacketBuffer *buf, uint32_t maxLen)
void
Инициализирует объектTLVReader для чтения из одного PacketBuffer.
Init ( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
Инициализирует объектTLVReader для чтения из одного или нескольких PacketBuffers.
Next (void)
Перемещает объектTLVReader к следующему элементу TLV для чтения.
Next ( TLVType expectedType, uint64_t expectedTag)
Перемещает объектTLVReader к следующему элементу TLV для чтения, утверждая тип и тег нового элемента.
OpenContainer (TLVReader & containerReader)
Инициализирует новый объектTLVReader для чтения членов элемента контейнера TLV .
Skip (void)
Перемещает объектTLVReader сразу после текущего элемента TLV .
VerifyEndOfContainer (void)
Проверяет, что объект TVLReader находится в конце контейнера TLV .

Защищенные функции

ClearElementState (void)
void
Очистить состояниеTLVReader .
ElementType (void) const
TLVElementType
Это частный метод, который возвращает TLVElementType из mControlByte.
EnsureData ( WEAVE_ERROR noDataErr)
GetElementHeadLength (uint8_t & elemHeadBytes) const
Это частный метод, используемый для вычисления длины заголовка элемента 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)
Пропустить любые данные, содержащиеся в текущем TLV , прочитав их без целевого буфера.
SkipToEndOfContainer (void)
VerifyElement (void)

Защищенные статические функции

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)

Публичные типы

GetNextBufferFunct

WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)

Функция, которая может использоваться для получения дополнительных данных TLV для анализа.

Функции этого типа используются для передачи входных данных вTLVReader . Ожидается, что при вызове функция будет выдавать дополнительные данные для анализа или сигнализировать читателю о том, что данных больше нет.

Подробности
Параметры
[in] reader
Ссылка на объектTLVReader , запрашивающий входные данные.
[in,out] bufHandle
Ссылка на значение uintptr_t, которое функция может использовать для хранения данных контекста между вызовами. Это значение инициализируется 0 перед первым вызовом.
[in,out] bufStart
Ссылка на указатель данных. При входе в функцию bufStart указывает на один байт после последнего байта данных TLV, потребленного считывателем. Ожидается, что при выходе bufStart будет указывать на первый байт новых данных TLV для анализа. Новое значение указателя может находиться в том же буфере, что и ранее использованные данные, или может указывать на совершенно новый буфер.
[out] bufLen
Ссылка на целое число без знака, которое функция должна установить равным количеству возвращаемых байтов данных TLV . Если достигнут конец входных данных TLV , функция должна установить это значение на 0.
Возвращаемые значения
WEAVE_NO_ERROR
Если функция успешно произвела больше данных TLV или был достигнут конец входных данных (в этом случае bufLen должен быть установлен в 0).
other
Другие коды ошибок Weave или платформы, указывающие на то, что произошла ошибка, не позволяющая функции произвести запрошенные данные.

Публичные атрибуты

Данные приложения

void * AppData

Поле указателя, которое можно использовать для данных приложения.

GetNextBuffer

GetNextBufferFunct GetNextBuffer

Указатель на функцию, которая будет производить входные данные для объектаTLVReader .

Если установлено значение NULL (значение по умолчанию), читатель будет предполагать, что дальнейшие входные данные недоступны.

GetNextBuffer может быть установлен приложением в любое время, но обычно устанавливается при инициализации средства чтения.

См. Определение типа GetNextBufferFunct для получения дополнительной информации о реализации функции GetNextBuffer.

ImplicitProfileId

uint32_t ImplicitProfileId

Идентификатор профиля, который будет использоваться для тегов профиля, закодированных в неявной форме.

Когда средство чтения встречает тег, зависящий от профиля, который был закодирован в неявной форме, он использует значение свойства ImplicitProfileId как предполагаемый идентификатор профиля для тега.

По умолчанию для свойства ImplicitProfileId установлено значение kProfileIdNotSpecified. При декодировании TLV, который содержит неявно закодированные теги, приложения должны установить ImplicitProfileId до чтения любых элементов TLV, имеющих такие теги. Соответствующий идентификатор профиля обычно зависит от контекста используемого приложения или протокола.

Если обнаружен неявно закодированный тег, когда для ImplicitProfileId задано значение kProfileIdNotSpecified, средство чтения вернет ошибку WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG .

Защищенные атрибуты

mBufEnd

const uint8_t * mBufEnd

mBufHandle

uintptr_t mBufHandle

mContainerType

TLVType mContainerType

mControlByte

uint16_t mControlByte

МЕЛЕМЛЕНОРВАЛ

uint64_t mElemLenOrVal

mElemTag

uint64_t mElemTag

mLenЧитать

uint32_t mLenRead

mMaxLen

uint32_t mMaxLen

mReadPoint

const uint8_t * mReadPoint

Публичные функции

CloseContainer

WEAVE_ERROR CloseContainer(
  TLVReader & containerReader
)

Завершает чтение контейнера TLV после вызова OpenContainer () .

Метод CloseContainer () восстанавливает состояние родительского объектаTLVReader после вызова OpenContainer () . Для каждого вызова OpenContainer () приложения должны выполнять соответствующий вызов CloseContainer () , передавая ссылку на одно и то же средство чтения контейнера обоим методам.

Когда CloseContainer () возвращается, родительский модуль чтения располагается непосредственно перед первым элементом, следующим за контейнером. С этого момента приложение может использовать метод Next () для продвижения по любым оставшимся элементам.

Приложения могут вызывать close CloseContainer () для родительского средства чтения в любой момент времени, независимо от того, были ли прочитаны все элементы в базовом контейнере. После вызова CloseContainer () приложение должно считать, что средство чтения контейнера деинициализировано, и не должно использовать его в дальнейшем без повторной инициализации.

Подробности
Параметры
[in] containerReader
Ссылка на объектTLVReader , предоставленный методу OpenContainer () .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_INCORRECT_STATE
Если OpenContainer () не был вызван для считывателя, или если считыватель контейнера не соответствует тому, который передан методу OpenContainer () .
WEAVE_ERROR_TLV_UNDERRUN
Если базовое кодирование TLV закончилось преждевременно.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Если читатель обнаружил недопустимый или неподдерживаемый тип элемента TLV .
WEAVE_ERROR_INVALID_TLV_TAG
Если читатель обнаружил тег TLV в недопустимом контексте.
other
Другие коды ошибок Weave или платформы, возвращаемые настроенной функцией GetNextBuffer () . Возможно, только если GetNextBuffer не равно NULL.

DupBytes

WEAVE_ERROR DupBytes(
  uint8_t *& buf,
  uint32_t & dataLen
)

Выделяет и возвращает буфер, содержащий значение текущего байта или строки UTF8.

Этот метод создает буфер для и возвращает копию данных, связанных с байтом или строковым элементом UTF-8 в текущей позиции. Память для буфера получается с помощью malloc () и должна быть освобождена вызывающей функцией с помощью free (), когда она больше не нужна.

Подробности
Параметры
[out] buf
Ссылка на указатель, которому в случае dataLen будет назначен буфер байтов dataLen выделенный в dataLen .
[out] dataLen
Ссылка на хранение на размер, в байтах, buf на успех.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если текущий элемент не является байтом TLV или строкой UTF8, или средство чтения не расположено на элементе.
WEAVE_ERROR_NO_MEMORY
Если не удалось выделить память для выходного буфера.
WEAVE_ERROR_TLV_UNDERRUN
Если базовое кодирование TLV закончилось преждевременно.
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
Если целевая платформа не поддерживает malloc () и free ().
other
Другие коды ошибок Weave или платформы, возвращаемые настроенной функцией GetNextBuffer () . Возможно, только если GetNextBuffer не равно NULL.

DupString

WEAVE_ERROR DupString(
  char *& buf
)

Выделяет и возвращает буфер, содержащий значение с завершающим нулем текущего байта или строки UTF8.

Этот метод создает буфер для и возвращает копию с завершающим нулем данных, связанных с байтом или строковым элементом UTF-8 в текущей позиции. Память для буфера получается с помощью malloc () и должна быть освобождена вызывающей функцией с помощью free (), когда она больше не нужна.

Подробности
Параметры
[out] buf
Ссылка на указатель, которому в случае успеха будет назначен буфер, выделенный кучей.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если текущий элемент не является байтом TLV или строкой UTF8, или средство чтения не расположено на элементе.
WEAVE_ERROR_NO_MEMORY
Если не удалось выделить память для выходного буфера.
WEAVE_ERROR_TLV_UNDERRUN
Если базовое кодирование TLV закончилось преждевременно.
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
Если целевая платформа не поддерживает malloc () и free ().
other
Другие коды ошибок Weave или платформы, возвращаемые настроенной функцией GetNextBuffer () . Возможно, только если GetNextBuffer не равно NULL.

EnterContainer

WEAVE_ERROR EnterContainer(
  TLVType & outerContainerType
)

Подготавливает объектTLVReader для чтения членов элемента контейнера TLV .

Метод EnterContainer () подготавливает текущий объектTLVReader к началу чтения элементов-членов контейнера TLV (структуры, массива или пути). Для каждого вызова EnterContainer () приложения должны делать соответствующий вызов ExitContainer () .

Когда вызывается EnterContainer (), объектTLVReader должен располагаться на элементе контейнера для чтения. Метод принимает в качестве аргумента ссылку на значение TLVType, которое будет использоваться для сохранения контекста средства чтения во время чтения контейнера.

Когда метод EnterContainer () возвращается, считыватель располагается непосредственно перед первым членом контейнера. Повторный вызов Next () будет продвигать читателя по членам коллекции до тех пор, пока не будет достигнут конец, после чего читатель вернет WEAVE_END_OF_TLV.

Как только приложение завершит чтение контейнера, оно может продолжить чтение элементов после контейнера, вызвав метод ExitContainer () .

Подробности
Параметры
[out] outerContainerType
Ссылка на значение TLVType, которое получит контекст читателя.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_INCORRECT_STATE
Если текущий элемент не расположен на элементе контейнера.

ExitContainer

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

Завершает чтение контейнера TLV и подготавливает объектTLVReader для чтения элементов после контейнера.

Метод ExitContainer () восстанавливает состояние объектаTLVReader после вызова EnterContainer () . Для каждого вызова EnterContainer () приложения должны выполнять соответствующий вызов ExitContainer () , передавая значение контекста, возвращаемое методом EnterContainer () .

Когда ExitContainer () возвращается, считыватель располагается непосредственно перед первым элементом, следующим за контейнером. С этого момента приложение может использовать метод Next () для продвижения по любым оставшимся элементам.

После вызова EnterContainer () приложения могут вызывать ExitContainer () на считывателе в любой момент времени, независимо от того, были ли прочитаны все элементы в базовом контейнере.

Подробности
Параметры
[in] outerContainerType
Значение TLVType, возвращенное методом EnterContainer () .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_INCORRECT_STATE
Если OpenContainer () не был вызван для считывателя, или если считыватель контейнера не соответствует тому, который передан методу OpenContainer () .
WEAVE_ERROR_TLV_UNDERRUN
Если базовое кодирование TLV закончилось преждевременно.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Если читатель обнаружил недопустимый или неподдерживаемый тип элемента TLV .
WEAVE_ERROR_INVALID_TLV_TAG
Если читатель обнаружил тег TLV в недопустимом контексте.
other
Другие коды ошибок Weave или платформы, возвращаемые настроенной функцией GetNextBuffer () . Возможно, только если GetNextBuffer не равно NULL.

Получать

WEAVE_ERROR Get(
  bool & v
)

Получить значение текущего элемента как тип bool.

Подробности
Параметры
[out] v
Получает значение, связанное с текущим элементом TLV .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если текущий элемент не является логическим типом TLV или читатель не расположен на элементе.

Получать

WEAVE_ERROR Get(
  int8_t & v
)

Получить значение текущего элемента как 8-битовое целое число со знаком.

Если закодированное целочисленное значение больше, чем тип выходных данных, результирующее значение будет усечено.

Подробности
Параметры
[out] v
Получает значение, связанное с текущим элементом TLV .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если текущий элемент не является целочисленным типом TLV (подписанный или беззнаковый), или средство чтения не расположено на элементе.

Получать

WEAVE_ERROR Get(
  int16_t & v
)

Получить значение текущего элемента как 16-битовое целое число со знаком.

Если закодированное целочисленное значение больше, чем тип выходных данных, результирующее значение будет усечено.

Подробности
Параметры
[out] v
Получает значение, связанное с текущим элементом TLV .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если текущий элемент не является целочисленным типом TLV (подписанный или беззнаковый), или средство чтения не расположено на элементе.

Получать

WEAVE_ERROR Get(
  int32_t & v
)

Получить значение текущего элемента как 32-разрядное целое число со знаком.

Если закодированное целочисленное значение больше, чем тип выходных данных, результирующее значение будет усечено.

Подробности
Параметры
[out] v
Получает значение, связанное с текущим элементом TLV .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если текущий элемент не является целочисленным типом TLV (подписанный или беззнаковый), или средство чтения не расположено на элементе.

Получать

WEAVE_ERROR Get(
  int64_t & v
)

Получить значение текущего элемента как 64-битное целое число со знаком.

Если закодированное целочисленное значение больше, чем тип выходных данных, результирующее значение будет усечено.

Подробности
Параметры
[out] v
Получает значение, связанное с текущим элементом TLV .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если текущий элемент не является целочисленным типом TLV (подписанный или беззнаковый), или средство чтения не расположено на элементе.

Получать

WEAVE_ERROR Get(
  uint8_t & v
)

Получить значение текущего элемента как 8-битовое целое число без знака.

Если закодированное целочисленное значение больше, чем тип выходных данных, результирующее значение будет усечено. Точно так же, если закодированное целочисленное значение отрицательное, значение будет преобразовано в беззнаковое.

Подробности
Параметры
[out] v
Получает значение, связанное с текущим элементом TLV .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если текущий элемент не является целочисленным типом TLV (подписанный или беззнаковый), или средство чтения не расположено на элементе.

Получать

WEAVE_ERROR Get(
  uint16_t & v
)

Получить значение текущего элемента как 16-разрядное целое число без знака.

Если закодированное целочисленное значение больше, чем тип выходных данных, результирующее значение будет усечено. Точно так же, если закодированное целочисленное значение отрицательное, значение будет преобразовано в беззнаковое.

Подробности
Параметры
[out] v
Получает значение, связанное с текущим элементом TLV .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если текущий элемент не является целочисленным типом TLV (подписанный или беззнаковый), или средство чтения не расположено на элементе.

Получать

WEAVE_ERROR Get(
  uint32_t & v
)

Получить значение текущего элемента как 32-разрядное целое число без знака.

Если закодированное целочисленное значение больше, чем тип выходных данных, результирующее значение будет усечено. Точно так же, если закодированное целочисленное значение отрицательное, значение будет преобразовано в беззнаковое.

Подробности
Параметры
[out] v
Получает значение, связанное с текущим элементом TLV .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если текущий элемент не является целочисленным типом TLV (подписанный или беззнаковый), или средство чтения не расположено на элементе.

Получать

WEAVE_ERROR Get(
  uint64_t & v
)

Получить значение текущего элемента как 64-битное целое число без знака.

Если закодированное целочисленное значение отрицательное, значение будет преобразовано в беззнаковое.

Подробности
Параметры
[out] v
Получает значение, связанное с текущим элементом TLV .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если текущий элемент не является целочисленным типом TLV (подписанный или беззнаковый), или средство чтения не расположено на элементе.

Получать

WEAVE_ERROR Get(
  float & v
)

Получать

WEAVE_ERROR Get(
  double & v
)

Получить значение текущего элемента как число с плавающей запятой двойной точности.

Подробности
Параметры
[out] v
Получает значение, связанное с текущим элементом TLV .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если текущий элемент не является типом TLV с плавающей запятой или средство чтения не расположено на элементе.

GetBufHandle

uintptr_t GetBufHandle(
  void
) const 

GetBytes

WEAVE_ERROR GetBytes(
  uint8_t *buf,
  uint32_t bufSize
)

Получить значение текущего байта или строкового элемента UTF8.

Чтобы определить требуемый размер входного буфера, вызовите метод GetLength () перед вызовом GetBytes () .

Подробности
Параметры
[in] buf
Указатель на буфер для получения строковых данных.
[in] bufSize
Размер в байтах буфера, на который указывает buf .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если текущий элемент не является байтом TLV или строкой UTF8, или средство чтения не расположено на элементе.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если предоставленный буфер слишком мал для хранения данных, связанных с текущим элементом.
WEAVE_ERROR_TLV_UNDERRUN
Если базовое кодирование TLV закончилось преждевременно.
other
Другие коды ошибок Weave или платформы, возвращаемые настроенной функцией GetNextBuffer () . Возможно, только если GetNextBuffer не равно NULL.

GetContainerType

TLVType GetContainerType(
  void
) const 

Возвращает тип контейнера, в которомTLVReader в настоящее время читает.

Метод GetContainerType () возвращает тип контейнера TLV, в которомвыполняется чтениеTLVReader . ЕслиTLVReader расположен на самом внешнем уровне кодирования TLV (то есть до, после или после самого внешнего элемента TLV ), метод вернет kTLVType_NotSpecified.

Подробности
Возврат
TLVType текущего контейнера или kTLVType_NotSpecified, еслиTLVReader не расположен внутри контейнера.

GetControlByte

uint16_t GetControlByte(
  void
) const 

Возвращает контрольный байт, связанный с текущим элементом TLV .

В идеале никому не нужно знать об управляющем байте, и только внутренняя реализация TLV должна иметь к нему доступ. Но, тем не менее, наличие доступа к управляющему байту полезно для целей отладки с помощью утилит отладки TLV (которые пытаются декодировать байт управления тегом при правильной печати содержимого буфера TLV ).

Подробности
Возврат
Целое число без знака, содержащее контрольный байт, связанный с текущим элементом TLV . kTLVControlByte_NotSpecified возвращается, если считыватель не расположен на элементе.

GetDataPtr

WEAVE_ERROR GetDataPtr(
  const uint8_t *& data
)

Получить указатель на начальный закодированный байт байта TLV или строкового элемента UTF8.

Этот метод возвращает прямой указатель на закодированное строковое значение в базовом входном буфере. Чтобы добиться успеха, метод требует, чтобы строковое значение полностью присутствовало в одном буфере. В противном случае метод возвращает WEAVE_ERROR_TLV_UNDERRUN . Это ограничивает использование метода при чтении данных из нескольких несмежных буферов.

Подробности
Параметры
[out] data
Ссылка на константный указатель, который получит указатель на базовые строковые данные.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если текущий элемент не является байтом TLV или строкой UTF8, или средство чтения не расположено на элементе.
WEAVE_ERROR_TLV_UNDERRUN
Если базовое кодирование TLV закончилось преждевременно или значение текущего строкового элемента не содержится в одном непрерывном буфере.
other
Другие коды ошибок Weave или платформы, возвращаемые настроенной функцией GetNextBuffer () . Возможно, только если GetNextBuffer не равно NULL.

GetLength

uint32_t GetLength(
  void
) const 

Возвращает длину данных, связанных с текущим элементом TLV .

Длина данных применяется только к элементам типа строка UTF8 или строка байтов. Для строк UTF8 возвращаемое значение - это количество байтов в строке, а не количество символов.

Подробности
Возврат
Длина (в байтах) данных, связанных с текущим элементом TLV , или 0, если текущий элемент не является строкой UTF8 или байтовой строкой, или если устройство чтения не расположено на элементе.

GetLengthRead

uint32_t GetLengthRead(
  void
) const 

Возвращает общее количество байтов, прочитанных с момента инициализации средства чтения.

Подробности
Возврат
Общее количество байтов, прочитанных с момента инициализации устройства чтения.

GetReadPoint

const uint8_t * GetReadPoint(
  void
) const 

Получает точку в нижележащем буфере ввода, которая соответствует текущей позиции читателя.

Подробности
Возврат
Указатель на нижележащий буфер ввода, который соответствует текущей позиции читателя.

GetRemainingLength

uint32_t GetRemainingLength(
  void
) const 

Возвращает общее количество байтов, которые могут быть прочитаны, пока не будет достигнута максимальная длина чтения.

Подробности
Возврат
Общее количество байтов, которые могут быть прочитаны, пока не будет достигнута максимальная длина чтения.

GetString

WEAVE_ERROR GetString(
  char *buf,
  uint32_t bufSize
)

Получить значение текущего байта или строкового элемента UTF8 в виде строки с завершающим нулем.

Чтобы определить требуемый размер входного буфера, вызовите метод GetLength () перед вызовом GetBytes () . Входной буфер должен быть как минимум на один байт больше, чем длина строки, чтобы вместить нулевой символ.

Подробности
Параметры
[in] buf
Указатель на буфер для получения данных байтовой строки.
[in] bufSize
Размер в байтах буфера, на который указывает buf .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_WRONG_TLV_TYPE
Если текущий элемент не является байтом TLV или строкой UTF8, или средство чтения не расположено на элементе.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если предоставленный буфер слишком мал для хранения данных, связанных с текущим элементом.
WEAVE_ERROR_TLV_UNDERRUN
Если базовое кодирование TLV закончилось преждевременно.
other
Другие коды ошибок Weave или платформы, возвращаемые настроенной функцией GetNextBuffer () . Возможно, только если GetNextBuffer не равно NULL.

GetTag

uint64_t GetTag(
  void
) const 

Возвращает тег, связанный с текущим элементом TLV .

Значение, возвращаемое GetTag (), можно использовать с вспомогательными функциями тега ( IsProfileTag () , IsContextTag () , ProfileIdFromTag () и т. Д.) Для определения типа тега и извлечения различных значений полей тега.

Подробности
Возврат
Целое число без знака, содержащее информацию о теге, связанном с текущим элементом TLV .

GetType

TLVType GetType(
  void
) const 

Возвращает тип текущего элемента TLV .

Подробности
Возврат
Значение TLVType, описывающее тип данных текущего элемента TLV . Если считыватель не расположен на элементе TLV , возвращаемое значение будет kTLVType_NotSpecified.

В этом

void Init(
  const TLVReader & aReader
)

Инициализирует объектTLVReader из другого объектаTLVReader .

Подробности
Параметры
[in] aReader
Ссылка только длячтения наTLVReader, из которого он инициализируется.

В этом

void Init(
  const uint8_t *data,
  uint32_t dataLen
)

Инициализирует объектTLVReader для чтения из единственного входного буфера.

Подробности
Параметры
[in] data
Указатель на буфер, содержащий данные TLV для анализа.
[in] dataLen
Длина анализируемых данных TLV .

В этом

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

Инициализирует объектTLVReader для чтения из одного PacketBuffer.

Анализ начинается с начальной позиции буфера (buf-> DataStart ()) и продолжается до конца данных в буфере (как обозначено buf-> Datalen ()) или до тех пор, пока не будут проанализированы байты maxLen.

Подробности
Параметры
[in] buf
Указатель на PacketBuffer, содержащий данные TLV для анализа.
[in] maxLen
Максимальное количество байтов для анализа. По умолчанию это количество данных во входном буфере.

В этом

void Init(
  PacketBuffer *buf,
  uint32_t maxLen,
  bool allowDiscontiguousBuffers
)

Инициализирует объектTLVReader для чтения из одного или нескольких PacketBuffers.

Анализ начинается с начальной позиции буфера (buf-> DataStart ()). Если allowDiscontiguousBuffers истинно, читатель будет перемещаться по цепочке буферов, связанных указателями Next () . Анализ продолжается до тех пор, пока все данные в цепочке буферов не будут использованы (как обозначено buf-> Datalen ()) или пока байты maxLen не будут проанализированы.

Подробности
Параметры
[in] buf
Указатель на PacketBuffer, содержащий данные TLV для анализа.
[in] maxLen
Максимальное количество байтов для анализа. По умолчанию используется общий объем данных в цепочке входных буферов.
[in] allowDiscontiguousBuffers
Если true, переход к следующему буферу в цепочке после того, как все данные в текущем буфере будут израсходованы. Если false, прекратить синтаксический анализ в конце начального буфера.

Следующий

WEAVE_ERROR Next(
  void
)

Перемещает объектTLVReader к следующему элементу TLV для чтения.

Метод Next () размещает объект чтения на следующем элементе в кодировке TLV, который находится в том же контексте включения. В частности, если считыватель расположен на самом внешнем уровне кодирования TLV , вызов Next () переместит считыватель к следующему, самому верхнему элементу. Если считыватель расположен внутри элемента контейнера TLV (структуры, массива или пути), вызов Next () переместит считыватель к следующему элементу-члену контейнера.

Поскольку Next () ограничивает движение считывателя текущим контекстом включения, вызов Next (), когда считыватель позиционируется на элементе контейнера, будет перемещаться по контейнеру, пропуская его элементы-члены (и элементы любых вложенных контейнеров), пока не достигнет первого элемент после контейнера.

Если в конкретном контексте включения нет других элементов, метод Next () вернет ошибку WEAVE_END_OF_TLV, и положение считывателя останется неизменным.

Подробности
Возвращаемые значения
WEAVE_NO_ERROR
Если считыватель был успешно размещен на новом элементе.
WEAVE_END_OF_TLV
Если другие элементы недоступны.
WEAVE_ERROR_TLV_UNDERRUN
Если базовое кодирование TLV закончилось преждевременно.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Если читатель обнаружил недопустимый или неподдерживаемый тип элемента TLV .
WEAVE_ERROR_INVALID_TLV_TAG
Если читатель обнаружил тег TLV в недопустимом контексте.
WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG
Если читатель обнаружил неявно закодированный тег TLV, для которого неизвестен соответствующий идентификатор профиля.
other
Другие коды ошибок Weave или платформы, возвращаемые настроенной функцией GetNextBuffer () . Возможно, только если GetNextBuffer не равно NULL.

Следующий

WEAVE_ERROR Next(
  TLVType expectedType,
  uint64_t expectedTag
)

Перемещает объектTLVReader к следующему элементу TLV для чтения, утверждая тип и тег нового элемента.

Метод Next (TLVType expectedType, uint64_t expectedTag) - это удобный метод, который имеет то же поведение, что и Next () , но также проверяет соответствие типа и тега нового элемента TLV предоставленным аргументам.

Подробности
Параметры
[in] expectedType
Ожидаемый тип данных для следующего элемента.
[in] expectedTag
Ожидаемый тег для следующего элемента.
Возвращаемые значения
WEAVE_NO_ERROR
Если считыватель был успешно размещен на новом элементе.
WEAVE_END_OF_TLV
Если другие элементы недоступны.
WEAVE_ERROR_WRONG_TLV_TYPE
Если тип нового элемента не соответствует значению аргумента expectedType .
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
Если тег, связанный с новым элементом, не соответствует значению аргумента expectedTag .
WEAVE_ERROR_TLV_UNDERRUN
Если базовое кодирование TLV закончилось преждевременно.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Если читатель обнаружил недопустимый или неподдерживаемый тип элемента TLV .
WEAVE_ERROR_INVALID_TLV_TAG
Если читатель обнаружил тег TLV в недопустимом контексте.
other
Другие коды ошибок Weave или платформы, возвращаемые настроенной функцией GetNextBuffer () . Возможно, только если GetNextBuffer не равно NULL.

OpenContainer

WEAVE_ERROR OpenContainer(
  TLVReader & containerReader
)

Инициализирует новый объектTLVReader для чтения членов элемента контейнера TLV .

Метод OpenContainer () инициализирует новый объектTLVReader для чтения элементов-членов контейнера TLV (структуры, массива или пути). Когда вызывается OpenContainer () , текущий объектTLVReader должен быть расположен на элементе контейнера для чтения. Метод принимает в качестве единственного аргумента ссылку на новый модуль чтения, который будет инициализирован для чтения контейнера. Этот считыватель известен как считыватель контейнера, в то время как считыватель, для которого вызывается OpenContainer () , известен как родительский считыватель .

Когда метод OpenContainer () возвращается, средство чтения контейнера располагается непосредственно перед первым членом контейнера. Вызов Next () в средстве чтения контейнера будет продвигаться по членам коллекции до тех пор, пока не будет достигнут конец, после чего средство чтения вернет WEAVE_END_OF_TLV.

Пока средство чтения контейнера открыто, приложения не должны выполнять вызовы или иным образом изменять состояние родительского средства чтения. После того, как приложение завершило использование средства чтения контейнера, оно должно закрыть его, вызвав CloseContainer () для родительского средства чтения, передав средство чтения контейнера в качестве аргумента. Приложения могут закрыть средство чтения контейнера в любой момент, с или без чтения всех элементов, содержащихся в базовом контейнере. После закрытия средства чтения контейнера приложения могут продолжить использование родительского средства чтения.

Средство чтения контейнера наследует различные свойства конфигурации от родительского средства чтения. Эти:

  • Неявный идентификатор профиля (ImplicitProfileId)
  • Указатель данных приложения (AppData)
  • Указатель на функцию GetNextBuffer

Подробности
Параметры
[out] containerReader
Ссылка на объектTLVReader, который будет инициализирован для чтения членов текущего элемента контейнера. Любые данные, связанные с предоставленным объектом, перезаписываются.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_INCORRECT_STATE
Если текущий элемент не расположен на элементе контейнера.

Пропускать

WEAVE_ERROR Skip(
  void
)

Перемещает объектTLVReader сразу после текущего элемента TLV .

Метод Skip () позиционирует объект чтения сразу после текущего элемента TLV , так что последующий вызов Next () переместит средство чтения к следующему элементу. Как и в случае с Next () , если считыватель находится на элементе контейнера во время вызова, элементы контейнера будут пропущены. Если считыватель не расположен ни на одном элементе, его положение остается неизменным.

Подробности
Возвращаемые значения
WEAVE_NO_ERROR
Если считыватель был успешно размещен на новом элементе.
WEAVE_END_OF_TLV
Если другие элементы недоступны.
WEAVE_ERROR_TLV_UNDERRUN
Если базовое кодирование TLV закончилось преждевременно.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Если читатель обнаружил недопустимый или неподдерживаемый тип элемента TLV .
WEAVE_ERROR_INVALID_TLV_TAG
If the reader encountered a TLV tag in an invalid context.
other
Other Weave or platform error codes returned by the configured GetNextBuffer() function. Only possible when GetNextBuffer is non-NULL.

VerifyEndOfContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)

Verifies that the TVLReader object is at the end of a TLV container.

The VerifyEndOfContainer() method verifies that there are no further TLV elements to be read within the current TLV container. This is a convenience method that is equivalent to calling Next() and checking for a return value of WEAVE_END_OF_TLV.

Подробности
Возвращаемые значения
WEAVE_NO_ERROR
If there are no further TLV elements to be read.
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
If another TLV element was found in the collection.
WEAVE_ERROR_TLV_UNDERRUN
If the underlying TLV encoding ended prematurely.
WEAVE_ERROR_INVALID_TLV_ELEMENT
If the reader encountered an invalid or unsupported TLV element type.
WEAVE_ERROR_INVALID_TLV_TAG
If the reader encountered a TLV tag in an invalid context.
other
Other Weave or platform error codes returned by the configured GetNextBuffer() function. Only possible when GetNextBuffer is non-NULL.

Защищенные функции

ClearElementState

void ClearElementState(
  void
)

Clear the state of theTLVReader .

This method is used to position the reader before the first TLV , between TLVs or after the last TLV .

ElementType

TLVElementType ElementType(
  void
) const 

This is a private method that returns the TLVElementType from mControlByte.

EnsureData

WEAVE_ERROR EnsureData(
  WEAVE_ERROR noDataErr
)

GetElementHeadLength

WEAVE_ERROR GetElementHeadLength(
  uint8_t & elemHeadBytes
) const 

This is a private method used to compute the length of a TLV element head.

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
)

Skip any data contained in the current TLV by reading over it without a destination buffer.

Подробности
Возвращаемые значения
WEAVE_NO_ERROR
If the reader was successfully positioned at the end of the data.
other
Other Weave or platform error codes returned by the configured GetNextBuffer() function. Only possible when GetNextBuffer is non-NULL.

SkipToEndOfContainer

WEAVE_ERROR SkipToEndOfContainer(
  void
)

VerifyElement

WEAVE_ERROR VerifyElement(
  void
)

Protected static functions

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
)