nl::Weave::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 من طريقة التالي(). سيستمر القارئ في عرض 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)
الحصول على قيمة العنصر الحالي كنوع قيمة منطقية.
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 من خلال أحد التطبيقات في أي وقت، ولكن يتم ضبطه عادةً عند تهيئة القارئ.

راجع تعريف نوع 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

mElemLenOrVal

uint64_t mElemLenOrVal

mElemTag

uint64_t mElemTag

mLenRead

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()، من المفترض أن يعتبر التطبيق قارئ الحاوية "de-activateized" ويجب عدم استخدامها أكثر من ذلك بدون إعادة إعدادها.

التفاصيل
المعلمات
[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 غير فارغة.

DupBytes

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

لتخصيص وعرض مخزن مؤقت يحتوي على قيمة سلسلة البايت أو UTF8 الحالية.

تنشئ هذه الطريقة مخزنًا مؤقتًا للبيانات المرتبطة بعنصر سلسلة البايت أو UTF-8 في الموضع الحالي وترجعها. يتم الحصول على ذاكرة المخزن المؤقت باستخدام mailoc() ويجب تحريرها باستخدام 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
إذا كانت المنصة المستهدفة لا تتوافق مع mailoc() وfree().
other
رموز خطأ Weave أو النظام الأساسي الأخرى التي تعرضها دالة GetNextBuffer() التي تم إعدادها. لا يمكن تنفيذ هذا الإجراء إلا عندما تكون قيمة GetNextBuffer غير فارغة.

DupString

WEAVE_ERROR DupString(
  char *& buf
)

لتخصيص وعرض مخزن مؤقت يحتوي على قيمة منتهية فارغة للبايت الحالي أو سلسلة UTF8.

تنشئ هذه الطريقة مخزنًا مؤقتًا للبيانات وترجع نسخة منتهية الصلاحية من البيانات المرتبطة بعنصر سلسلة البايت أو UTF-8 في الموضع الحالي. يتم الحصول على ذاكرة المخزن المؤقت باستخدام mailoc() ويجب تحريرها باستخدام 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
إذا كانت المنصة المستهدفة لا تتوافق مع mailoc() وfree().
other
رموز خطأ Weave أو النظام الأساسي الأخرى التي تعرضها دالة GetNextBuffer() التي تم إعدادها. لا يمكن تنفيذ هذا الإجراء إلا عندما تكون قيمة GetNextBuffer غير فارغة.

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 غير فارغة.

جلب

WEAVE_ERROR Get(
  bool & v
)

الحصول على قيمة العنصر الحالي كنوع قيمة منطقية.

التفاصيل
المعلمات
[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 غير فارغة.

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 غير فارغة.

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 غير فارغة.

GetTag

uint64_t GetTag(
  void
) const 

تعرض العلامة المرتبطة بعنصر TLV الحالي.

يمكن استخدام القيمة التي يعرضها GetTag() مع دوال أداة المساعدة (IsProfileTag() وIsContextTag() وProfileIdFromTag() وما إلى ذلك) لتحديد نوع العلامة واستخراج القيم المختلفة لحقول العلامات.

التفاصيل
المرتجعات
عدد صحيح غير موقَّع يحتوي على معلومات حول العلامة المرتبطة بعنصر TLV الحالي.

GetType

TLVType GetType(
  void
) const 

تعرض نوع عنصر TLV الحالي.

التفاصيل
المرتجعات
قيمة TLVType تصف نوع البيانات لعنصر TLV الحالي. إذا لم يتم وضع القارئ على عنصر TLV، ستكون القيمة المعروضة kTLVType_NotSpecified.

Init

void Init(
  const TLVReader & aReader
)

إعداد كائن TLVReader من كائن TLVReader آخر.

التفاصيل
المعلمات
[in] aReader
مرجع للقراءة فقط إلى TLVReader لإعداد هذا منه.

Init

void Init(
  const uint8_t *data,
  uint32_t dataLen
)

يتم إعداد كائن TLVReader للقراءة من مخزن مؤقت واحد للإدخال.

التفاصيل
المعلمات
[in] data
يشير ذلك إلى مؤشر للمخزن المؤقت الذي يحتوي على بيانات TLV المطلوب تحليلها.
[in] dataLen
طول بيانات TLV المطلوب تحليلها.

Init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

يؤدي إلى إعداد كائن TLVReader لقراءته من خلال PacketBuffer واحد.

يبدأ التحليل من موضع بدء المخزن المؤقت (buf->DataStart()) ويستمر حتى نهاية البيانات في المخزن المؤقت (كما يُرمز له بالرمز buf->Datalen())، أو أنه تم تحليل وحدات البايت maxLen.

التفاصيل
المعلمات
[in] buf
يشير ذلك إلى مؤشر إلى PacketBuffer الذي يحتوي على بيانات TLV المطلوب تحليلها.
[in] maxLen
الحد الأقصى لوحدات البايت المراد تحليلها. يتم ضبط القيمة التلقائية على كمية البيانات في المخزن المؤقت للإدخال.

Init

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 غير فارغة.

التالي

WEAVE_ERROR Next(
  TLVType expectedType,
  uint64_t expectedTag
)

يعمل على تطوير الكائن TLVReader إلى العنصر TLV التالي المطلوب قراءته، مع تأكيد نوع العنصر الجديد وعلامته.

الطريقة Next(TLVType requiredType, uint64_t expectedTag) هي طريقة ملائمة لها نفس سلوك Next()، ولكنها تتحقق أيضًا من تطابق نوع العنصر TLV وعلامة عنصر 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 غير فارغة.

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 الحالي مباشرةً.

تضع الطريقة تخطي() كائن القارئ بعد عنصر 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 غير فارغة.

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
رموز خطأ Weave أو النظام الأساسي الأخرى التي تعرضها دالة GetNextBuffer() التي تم إعدادها. لا يمكن تنفيذ هذا الإجراء إلا عندما تكون قيمة GetNextBuffer غير فارغة.

الدوال المحمية

ClearElementState

void ClearElementState(
  void
)

محو حالة TLVReader.

تُستخدم هذه الطريقة لوضع القارئ قبل أول TLV أو بين TLV أو بعد آخر TLV.

ElementType

TLVElementType ElementType(
  void
) const 

هذه طريقة خاصة تعرض TLVElementType من mControlByte.

EnsureData

WEAVE_ERROR EnsureData(
  WEAVE_ERROR noDataErr
)

GetElementHeadLength

WEAVE_ERROR GetElementHeadLength(
  uint8_t & elemHeadBytes
) const 

وهذه طريقة خاصة تُستخدَم لحساب طول رأس عنصر 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
)

يمكنك تخطّي أي بيانات مضمّنة في ملف TLV الحالي من خلال القراءة فوقها بدون توفُّر مساحة تخزين مؤقت للوجهة.

التفاصيل
قيم الإرجاع
WEAVE_NO_ERROR
ما إذا تم وضع القارئ بنجاح في نهاية البيانات.
other
رموز خطأ Weave أو النظام الأساسي الأخرى التي تعرضها دالة GetNextBuffer() التي تم إعدادها. لا يمكن تنفيذ هذا الإجراء إلا عندما تكون قيمة GetNextBuffer غير فارغة.

SkipToEndOfContainer

WEAVE_ERROR SkipToEndOfContainer(
  void
)

VerifyElement

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
)