нл:: Переплетение:: ТЛВ:: 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 (const TLVReader & 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 или конкретной платформы, указывающие на то, что произошла ошибка, не позволяющая функции создать запрошенные данные.

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

AppData

void * AppData

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

GetNextBuffer

GetNextBufferFunct GetNextBuffer

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

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

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

Дополнительную информацию о реализации функции GetNextBuffer см. в определении типа GetNextBufferFunct.

Неявныйпрофилеид

uint32_t ImplicitProfileId

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

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

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

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

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

mBufEnd

const uint8_t * mBufEnd

мбуфхандле

uintptr_t mBufHandle

мконтейнертипе

TLVType mContainerType

mControlByte

uint16_t mControlByte

МЭлемЛенОрВал

uint64_t mElemLenOrVal

МелемТаг

uint64_t mElemTag

mLenRead

uint32_t mLenRead

мМаксЛен

uint32_t mMaxLen

mReadPoint

const uint8_t * mReadPoint

Общественные функции

ЗакрытьКонтейнер

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 , выделенный в куче.
[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.

ДупСтрока

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
Если текущий элемент не расположен в элементе контейнера.

ВыходКонтейнер

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.

Получить длину

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()). Если параметрallowDiscontigiousBuffers имеет значение true, читатель будет продвигаться по цепочке буферов, связанных указателями Next() . Анализ продолжается до тех пор, пока все данные в цепочке буферов не будут использованы (как обозначено buf->Datalen()) или пока не будут проанализированы байты maxLen.

Подробности
Параметры
[in] buf
Указатель на PacketBuffer, содержащий данные TLV , подлежащие анализу.
[in] maxLen
Максимальное количество байтов для анализа. По умолчанию соответствует общему объему данных в цепочке входного буфера.
[in] allowDiscontiguousBuffers
Если это правда, переход к следующему буферу в цепочке после того, как все данные в текущем буфере будут использованы. Если 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 ожидаемый тип, uint64_t ожидаемый тег) — это удобный метод, который имеет то же поведение, что и 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.

ОпенКонтейнер

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
Если читатель обнаружил тег TLV в недопустимом контексте.
other
Другие коды ошибок Weave или платформы, возвращаемые настроенной функцией GetNextBuffer() . Возможно только в том случае, если GetNextBuffer не равен NULL.

VerifyendofContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)

Проверяет, что объект TVLreader находится в конце контейнера TLV .

Метод VerifyEndOfContainer () проверяет, что в текущем контейнере TLV нет дополнительных элементов TLV . Это удобный метод, который эквивалентен вызову next () и проверки возврата значения Weave_end_of_tlv.

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

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

ClearElementState

void ClearElementState(
  void
)

Очистить состояние TLVreader .

Этот метод используется для размещения читателя перед первым TLV , между TLV или после последнего TLV .

Elementtype

TLVElementType ElementType(
  void
) const 

Это частный метод, который возвращает tlvementtype из Mcontrolbyte.

Гарантированная

WEAVE_ERROR EnsureData(
  WEAVE_ERROR noDataErr
)

GetElementHeadLength

WEAVE_ERROR GetElementHeadLength(
  uint8_t & elemHeadBytes
) const 

Это частный метод, используемый для вычисления длины головки элемента TLV .

IscontaineRopen

bool IsContainerOpen(
  void
) const 

Риддата

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
)

Скипдата

WEAVE_ERROR SkipData(
  void
)

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

Подробности
Возвращаемые значения
WEAVE_NO_ERROR
Если читатель был успешно расположен в конце данных.
other
Другие коды ошибок плетения или платформы, возвращаемые функцией getNextBuffer () . Возможно только тогда, когда getNextBuffer не ноль.

Skiptoendofcontainer

WEAVE_ERROR SkipToEndOfContainer(
  void
)

Проверка

WEAVE_ERROR VerifyElement(
  void
)

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

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
)