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)
|
|
ExitContainer(TLVType outerContainerType)
|
|
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
|
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)
|
|
Next(TLVType expectedType, uint64_t expectedTag)
|
|
OpenContainer(TLVReader & containerReader)
|
|
Skip(void)
|
|
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. عند استدعائها، من المتوقع أن تنتج عن الدالة بيانات إضافية للقارئ لتحليلها أو إرسال إشارة بها إلى القارئ بأنه لا تتوفر المزيد من البيانات.
التفاصيل | |||||||||
---|---|---|---|---|---|---|---|---|---|
المعلمات |
|
||||||||
قيم الإرجاع |
|
السمات العامة
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" ويجب عدم استخدامها أكثر من ذلك بدون إعادة إعدادها.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلمات |
|
||||||||||||
قيم الإرجاع |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
لتخصيص وعرض مخزن مؤقت يحتوي على قيمة سلسلة البايت أو UTF8 الحالية.
تنشئ هذه الطريقة مخزنًا مؤقتًا للبيانات المرتبطة بعنصر سلسلة البايت أو UTF-8 في الموضع الحالي وترجعها. يتم الحصول على ذاكرة المخزن المؤقت باستخدام mailoc() ويجب تحريرها باستخدام Free() بواسطة المتصل عند عدم الحاجة إليه.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلمات |
|
||||||||||||
قيم الإرجاع |
|
DupString
WEAVE_ERROR DupString( char *& buf )
لتخصيص وعرض مخزن مؤقت يحتوي على قيمة منتهية فارغة للبايت الحالي أو سلسلة UTF8.
تنشئ هذه الطريقة مخزنًا مؤقتًا للبيانات وترجع نسخة منتهية الصلاحية من البيانات المرتبطة بعنصر سلسلة البايت أو UTF-8 في الموضع الحالي. يتم الحصول على ذاكرة المخزن المؤقت باستخدام mailoc() ويجب تحريرها باستخدام Free() بواسطة المتصل عند عدم الحاجة إليه.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلمات |
|
||||||||||||
قيم الإرجاع |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
لإعداد كائن TLVReader لقراءة أعضاء عنصر الحاوية TLV.
تعمل طريقة EnterContainer() على إعداد الكائن TLVReader الحالي لبدء قراءة العناصر الفرعية في حاوية TLV (بنية أو مصفوفة أو مسار). بالنسبة إلى كل استدعاء لتطبيقات EnterContainer()، يجب إجراء استدعاء مطابق إلى ExitContainer().
عندما يتم استدعاء EnterContainer() كائن TLVReader، يجب وضع عنصر على عنصر الحاوية المطلوب قراءته. تستخدم الطريقة كوسيطة كمرجع لقيمة TLVType التي سيتم استخدامها لحفظ سياق القارئ أثناء قراءة الحاوية.
عند إرجاع الطريقة EnterContainer()، يتم وضع القارئ مباشرةً قبل العضو الأول في الحاوية. يؤدي استدعاء Next() بشكل متكرر إلى تقدم القارئ عبر أعضاء المجموعة حتى الوصول إلى النهاية، وعندها سيعيد القارئ WEAVE_END_OF_TLV.
بعد أن ينتهي التطبيق من قراءة الحاوية، يمكنه مواصلة قراءة العناصر بعد الحاوية عن طريق استدعاء طريقة ExitContainer().
التفاصيل | |||||
---|---|---|---|---|---|
المعلمات |
|
||||
قيم الإرجاع |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
يُكمل هذا الإجراء قراءة حاوية TLV ويُعِدّ كائن TLVReader لقراءة العناصر بعد الحاوية.
تستعيد طريقة ExitContainer() حالة كائن TLVReader بعد استدعاء EnterContainer(). بالنسبة إلى كل استدعاء لتطبيقات EnterContainer()، يجب إجراء استدعاء مطابق إلى ExitContainer()، مع تمرير قيمة السياق التي تعرضها طريقة EnterContainer().
عند رجوع ExitContainer()، يتم وضع القارئ مباشرةً قبل العنصر الأول الذي يلي الحاوية. من الآن فصاعدًا، يمكن لأي تطبيق استخدام الطريقة Next() للتقدّم خلال أي عناصر متبقية.
بعد استدعاء EnterContainer()، يمكن للتطبيقات استدعاء ExitContainer() على قارئ في أي وقت، بغض النظر عمّا إذا تمت قراءة جميع العناصر في الحاوية الأساسية أم لا.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلمات |
|
||||||||||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( bool & v )
جلب
WEAVE_ERROR Get( int8_t & v )
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح بعلامة 8 بت.
في حال كانت قيمة العدد الصحيح المرمّز أكبر من نوع بيانات الإخراج، سيتم اقتطاع القيمة الناتجة.
التفاصيل | |||||
---|---|---|---|---|---|
المعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( int16_t & v )
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح بعلامة 16 بت.
في حال كانت قيمة العدد الصحيح المرمّز أكبر من نوع بيانات الإخراج، سيتم اقتطاع القيمة الناتجة.
التفاصيل | |||||
---|---|---|---|---|---|
المعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( int32_t & v )
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح بعلامة 32 بت.
في حال كانت قيمة العدد الصحيح المرمّز أكبر من نوع بيانات الإخراج، سيتم اقتطاع القيمة الناتجة.
التفاصيل | |||||
---|---|---|---|---|---|
المعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( int64_t & v )
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح بعلامة 64 بت.
في حال كانت قيمة العدد الصحيح المرمّز أكبر من نوع بيانات الإخراج، سيتم اقتطاع القيمة الناتجة.
التفاصيل | |||||
---|---|---|---|---|---|
المعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( uint8_t & v )
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح 8 بت غير موقَّع.
في حال كانت قيمة العدد الصحيح المرمّز أكبر من نوع بيانات الإخراج، سيتم اقتطاع القيمة الناتجة. وبالمثل، إذا كانت قيمة العدد الصحيح المشفّر سالبة، سيتم تحويل القيمة إلى قيمة غير موقَّعة.
التفاصيل | |||||
---|---|---|---|---|---|
المعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( uint16_t & v )
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح غير موقَّع مكون من 16 بت.
في حال كانت قيمة العدد الصحيح المرمّز أكبر من نوع بيانات الإخراج، سيتم اقتطاع القيمة الناتجة. وبالمثل، إذا كانت قيمة العدد الصحيح المشفّر سالبة، سيتم تحويل القيمة إلى قيمة غير موقَّعة.
التفاصيل | |||||
---|---|---|---|---|---|
المعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( uint32_t & v )
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح 32 بت غير موقَّع.
في حال كانت قيمة العدد الصحيح المرمّز أكبر من نوع بيانات الإخراج، سيتم اقتطاع القيمة الناتجة. وبالمثل، إذا كانت قيمة العدد الصحيح المشفّر سالبة، سيتم تحويل القيمة إلى قيمة غير موقَّعة.
التفاصيل | |||||
---|---|---|---|---|---|
المعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( uint64_t & v )
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح 64 بت غير موقَّع.
إذا كانت قيمة العدد الصحيح المشفّر سالبة، سيتم تحويل القيمة إلى قيمة غير موقَّعة.
التفاصيل | |||||
---|---|---|---|---|---|
المعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( float & v )
جلب
WEAVE_ERROR Get( double & v )
GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
يمكنك الحصول على قيمة عنصر سلسلة UTF8 أو البايت الحالي.
لتحديد الحجم المطلوب للمخزن المؤقت للإدخال، عليك استدعاء طريقة GetLength() () قبل استدعاء GetBytes().
التفاصيل | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
المعلمات |
|
||||||||||
قيم الإرجاع |
|
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. وهذا يجعل طريقة الاستخدام المحدود عند قراءة البيانات من مخازن مؤقتة متعددة متجاورة.
التفاصيل | |||||||||
---|---|---|---|---|---|---|---|---|---|
المعلمات |
|
||||||||
قيم الإرجاع |
|
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(). يجب أن يكون المخزن المؤقت للإدخال أكبر من طول السلسلة بمقدار بايت واحد على الأقل لاستيعاب الحرف الفارغ.
التفاصيل | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
المعلمات |
|
||||||||||
قيم الإرجاع |
|
GetTag
uint64_t GetTag( void ) const
تعرض العلامة المرتبطة بعنصر TLV الحالي.
يمكن استخدام القيمة التي يعرضها GetTag() مع دوال أداة المساعدة (IsProfileTag() وIsContextTag() وProfileIdFromTag() وما إلى ذلك) لتحديد نوع العلامة واستخراج القيم المختلفة لحقول العلامات.
التفاصيل | |
---|---|
المرتجعات |
عدد صحيح غير موقَّع يحتوي على معلومات حول العلامة المرتبطة بعنصر TLV الحالي.
|
GetType
TLVType GetType( void ) const
Init
void Init( const TLVReader & aReader )
Init
void Init( const uint8_t *data, uint32_t dataLen )
Init
void Init( PacketBuffer *buf, uint32_t maxLen )
يؤدي إلى إعداد كائن TLVReader لقراءته من خلال PacketBuffer واحد.
يبدأ التحليل من موضع بدء المخزن المؤقت (buf->DataStart()) ويستمر حتى نهاية البيانات في المخزن المؤقت (كما يُرمز له بالرمز buf->Datalen())، أو أنه تم تحليل وحدات البايت maxLen.
التفاصيل | |||||
---|---|---|---|---|---|
المعلمات |
|
Init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
يؤدي هذا الخيار إلى إعداد كائن TLVReader لقراءته من خلال عنصر PacketBuffers واحد أو أكثر.
يبدأ التحليل من موضع بدء المخزن المؤقت الأولي (buf->DataStart()). في حال كانت قيمة AllowDiscontiguousBuffers صحيحة، سينتقل القارئ عبر سلسلة المخازن المؤقتة المرتبطة بمؤشرات Next() الخاصة به. يستمر التحليل حتى يتم استهلاك جميع البيانات في سلسلة المخزن المؤقت (كما هو موضح بواسطة buf->Datalen())، أو يتم تحليل وحدات بايت maxLen.
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المعلمات |
|
التالي
WEAVE_ERROR Next( void )
تعمل على نقل الكائن TLVReader إلى عنصر TLV التالي المطلوب قراءته.
تضع الطريقة Next() كائن القارئ على العنصر التالي في ترميز TLV المتوفّر في سياق الاحتواء نفسه. وعلى وجه التحديد، إذا تم وضع القارئ في أقصى مستوى خارجي لترميز TLV، سيؤدي استدعاء Next() إلى نقل القارئ إلى العنصر التالي في الأعلى. إذا تم وضع القارئ داخل عنصر حاوية TLV (بنية أو مصفوفة أو مسار)، سيؤدي استدعاء Next() إلى نقل القارئ إلى عنصر العضو التالي في الحاوية.
بما أنّ Next() يقيّد حركة القارئ على سياق الاحتواء الحالي، سيؤدي استدعاء Next() عند وضع القارئ في عنصر الحاوية فوق الحاوية، مع تخطي العناصر الفرعية (وأعضاء أي حاويات مضمّنة) حتى يصل إلى العنصر الأول بعد الحاوية.
في حال عدم وجود عناصر أخرى ضمن سياق احتواء معيّن، ستعرض طريقة Next() خطأ WEAVE_END_OF_TLV وسيظلّ موضع القارئ بدون تغيير.
التفاصيل | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
قيم الإرجاع |
|
التالي
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
يعمل على تطوير الكائن TLVReader إلى العنصر TLV التالي المطلوب قراءته، مع تأكيد نوع العنصر الجديد وعلامته.
الطريقة Next(TLVType requiredType, uint64_t expectedTag) هي طريقة ملائمة لها نفس سلوك Next()، ولكنها تتحقق أيضًا من تطابق نوع العنصر TLV وعلامة عنصر TLV الجديد مع الوسيطات المقدّمة.
التفاصيل | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلمات |
|
||||||||||||||||
قيم الإرجاع |
|
OpenContainer
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
إعداد كائن TLVReader جديد لقراءة أعضاء عنصر الحاوية TLV.
تعمل الطريقة OpenContainer() على إعداد كائن TLVReader جديد لقراءة العناصر الفرعية في حاوية TLV (بنية أو مصفوفة أو مسار). عند استدعاء الدالة OpenContainer()، يجب وضع الكائن TLVReader الحالي في عنصر الحاوية المطلوب قراءته. تأخذ الطريقة كوسيطة وحيدة لها مرجعًا لقارئ جديد سيتم إعداده لقراءة الحاوية. يُعرف هذا القارئ باسم قارئ الحاوية، بينما يُعرف القارئ الذي يتم فيه استدعاء OpenContainer() باسم القارئ الرئيسي.
عند إرجاع الطريقة OpenContainer()، يتم وضع قارئ الحاوية مباشرةً قبل العضو الأول للحاوية. سيؤدي استدعاء Next() في قارئ الحاوية إلى الانتقال عبر أعضاء المجموعة حتى الوصول إلى النهاية، وعندها سيعرض القارئ WEAVE_END_OF_TLV.
أثناء فتح قارئ الحاوية، يجب ألا تُجري التطبيقات مكالمات على القارئ الأصلي أو تغيّر حالته. بعد الانتهاء من استخدام قارئ الحاوية، يجب أن يغلقه التطبيق عن طريق استدعاء CloseContainer() على القارئ الرئيسي، مع تمرير قارئ الحاوية كوسيطة. يمكن للتطبيقات إغلاق قارئ الحاوية في أي وقت، مع قراءة جميع العناصر المضمّنة في الحاوية الأساسية أو بدونها. بعد إغلاق قارئ الحاوية، قد تستمر التطبيقات في استخدامها للقارئ الأصلي.
يكتسب قارئ الحاوية خصائص إعداد مختلفة من القارئ الرئيسي. وهي كما يلي:
- معرّف الملف الشخصي الضمني (ImplicitProfileId)
- مؤشر بيانات التطبيق (AppData)
- مؤشر دالة GetNextBuffer
التفاصيل | |||||
---|---|---|---|---|---|
المعلمات |
|
||||
قيم الإرجاع |
|
التخطّي
WEAVE_ERROR Skip( void )
يعمل على تطوير الكائن TLVReader بعد عنصر TLV الحالي مباشرةً.
تضع الطريقة تخطي() كائن القارئ بعد عنصر TLV الحالي، لكي يؤدي الاستدعاء اللاحق إلى Next() إلى نقل القارئ إلى العنصر التالي. كما هو الحال مع Next()، إذا تم وضع القارئ على عنصر حاوية في وقت الاستدعاء، سيتم تخطّي أعضاء الحاوية. إذا لم يتم وضع القارئ على أي عنصر، سيظل موضعه بدون تغيير.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
قيم الإرجاع |
|
VerifyEndOfContainer
WEAVE_ERROR VerifyEndOfContainer( void )
للتحقّق من وجود كائن TVLReader في نهاية حاوية TLV.
تتحقق الطريقة VerifyEndOfContainer() من عدم وجود عناصر TLV أخرى يمكن قراءتها داخل حاوية TLV الحالية. هذه إحدى الطرق الملائمة تعادل استدعاء الدالة Next() والتحقق من وجود قيمة معروضة بقيمة WEAVE_END_OF_TLV.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
قيم الإرجاع |
|
الدوال المحمية
ClearElementState
void ClearElementState( void )
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 الحالي من خلال القراءة فوقها بدون توفُّر مساحة تخزين مؤقت للوجهة.
التفاصيل | |||||
---|---|---|---|---|---|
قيم الإرجاع |
|
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 )