nl:: Weave:: System:: PacketBuffer
#include <src/system/SystemPacketBuffer.h>
فئة المخزن المؤقت للحزم هي البنية الأساسية المستخدمة لمعالجة حزم البيانات التسلسلية ثماني بتات، وعادة ما تكون في سياق شبكة اتصالات البيانات، مثل البلوتوث أو بروتوكول الإنترنت.
ملخّص
في البيئات المستندة إلى LwIP، يتم إنشاء هذه الفئة على أساس هيكل pbuf المحدّد في تلك المكتبة. في غياب LwIP، يوفر Weave إما تنفيذًا قائمًا على مركز التسوق أو تنفيذًا قائمًا على التجميع ويقارب بدقة تحديات الذاكرة للأجهزة المضمَّنة بعمق.
توفر فئة PacketBuffer، مثلها في ذلك مثل العديد من البنى المتشابهة المستخدمة في حزم الشبكة المكونة من طبقات، آلية لحجز مساحة لعناوين البروتوكول في كل طبقة من حزم الاتصالات القابلة للتهيئة. لمعرفة التفاصيل، يُرجى الاطّلاع على PacketBuffer::New()
بالإضافة إلى مستندات LwIP.
يتم احتساب كائنات PacketBuffer كمرجع، ووضع الاستخدام السائد في Weave هو "الإطلاق والحذف". بما أن الحزمة (وكائن PacketBuffer الأساسي الخاص بها) يتم إرساله عبر طبقات بروتوكول متعددة، فإن الطلب الناجح من الأعلى أو الاستدعاء لأسفل بين الطبقات يعني نقل الملكية، ويكون الشخص المطلوب مسؤولاً عن تحرير المخزن المؤقت. وفي حال تعذّر الاتصال عبر الطبقات، تقع على عاتق المتصل مسؤولية تحرير المخزن الاحتياطي.
يتم إعداد كائنات جديدة من فئة PacketBuffer في بداية عملية تخصيص الذاكرة التي تم الحصول عليها من البيئة الأساسية، على سبيل المثال من مجموعات هدف LwIP pbuf، من كومة مكتبة C القياسية، من تجمع مخزن مؤقت داخلي. ببساطة، يكون حجم المخزن المؤقت للبيانات WEAVE_SYSTEM_PACKETBUFFER_SIZE. يتم توفير مؤلف يسمح باستخدام المخازن المؤقتة للبيانات بأحجام أخرى.
قد يتم ربط كائنات PacketBuffer بالتسلسل لاستيعاب الحمولات الكبيرة. ومع ذلك، فإن تسلسل الأحداث ليس شفافًا، ويجب أن يقرر مستخدمو الفئة صراحةً إتاحة استخدام التسلسل. في ما يلي أمثلة على الصفوف التي تمت صياغتها باستخدام تسلسل تسلسلي:
@ref nl::Weave::WeaveTLVReader @ref nl::Weave::WeaveTLVWriter
الاكتساب
يكتسب من: pbuf
الدوال العامة |
|
---|---|
AddRef(void)
|
void
زيادة عدد المراجع للمخزن المؤقت الحالي.
|
AddToEnd(PacketBuffer *aPacket)
|
void
أضف المخزن المؤقت المحدد للحزمة إلى نهاية سلسلة المخزن المؤقت، مع ضبط إجمالي طول كل مخزن مؤقت في السلسلة وفقًا لذلك.
|
AlignPayload(uint16_t aAlignBytes)
|
bool
محاذاة حمولة المخزن المؤقت على حدود وحدات البايت المحددة.
|
AllocSize(void) const
|
size_t
عرض حجم التخصيص، بما في ذلك مساحات البيانات المحجوزة ومساحات البيانات الأساسية ولكن بدون تضمين المساحة المخصّصة لبنية PacketBuffer
|
AvailableDataLength(void) const
|
uint16_t
يمكنك الحصول على عدد وحدات بايت البيانات التي يمكن إضافتها إلى المخزن المؤقت الحالي بناءً على موضع البدء الحالي وطول البيانات.
|
CompactHead(void)
|
void
انقل البيانات من الموارد الاحتياطية اللاحقة في السلسلة إلى المخزن المؤقت الحالي حتى تمتلئ.
|
Consume(uint16_t aConsumeLength)
|
تستهلك البيانات في سلسلة من الموارد الاحتياطية.
|
ConsumeHead(uint16_t aConsumeLength)
|
void
ضبط المخزن المؤقت الحالي للإشارة إلى كمية البيانات المستهلكة.
|
DataLength(void) const
|
uint16_t
الحصول على الطول بالبايت من البيانات في المخزن المؤقت للحزمة
|
DetachTail(void)
|
فصل المخزن المؤقت الحالي عن سلسلته وعرض مؤشر إلى الموارد الاحتياطية المتبقية
|
EnsureReservedSize(uint16_t aReservedSize)
|
bool
تأكد من أن المخزن المؤقت يحتوي على الكمية المحددة على الأقل من المساحة المحجوزة.
|
MaxDataLength(void) const
|
uint16_t
احصل على الحد الأقصى من البيانات بالبايت المناسبة للمخزن المؤقت بناءً على موضع البدء الحالي وحجم المخزن المؤقت.
|
Next(void) const
|
الحصول على مؤشر للمخزن المؤقت التالي في السلسلة
|
ReservedSize(void) const
|
uint16_t
يمكنك الحصول على عدد وحدات البايت داخل المخزن المؤقت الحالي بين بداية المخزن المؤقت وموضع بدء البيانات الحالي.
|
SetDataLength(uint16_t aNewLen, PacketBuffer *aChainHead)
|
void
تعيين الطول، بالبايت، للبيانات في المخزن المؤقت، وتعديل إجمالي الطول وفقًا لذلك.
|
SetStart(uint8_t *aNewStart)
|
void
قم بتعيين بيانات البدء في المخزن المؤقت، مع ضبط الطول والطول الإجمالي وفقًا لذلك.
|
Start(void) const
|
uint8_t *
الحصول على مؤشر لبدء البيانات في المخزن المؤقت
|
TotalLength(void) const
|
uint16_t
يمكنك الحصول على إجمالي طول حزم البيانات في سلسلة المخزن المؤقت.
|
الدوال الثابتة العامة |
|
---|---|
Free(PacketBuffer *aPacket)
|
void
تفريغ جميع المخازن المؤقتة للحزم في سلسلة.
|
FreeHead(PacketBuffer *aPacket)
|
حرِّر المورد الاحتياطي الأول في سلسلة، مع عرض مؤشر إلى الموارد الاحتياطية المتبقية.
|
New(void)
|
تُخصِّص PacketBuffer واحدًا من الحد الأقصى التلقائي للحجم (WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX) مع الحجم التلقائي المحجوز (WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE) في الحمولة.
|
New(uint16_t aReservedSize)
|
تخصيص PacketBuffer واحد بالحد الأقصى للحجم الإجمالي مع حجم احتياطي محدّد للعنوان
|
NewWithAvailableSize(size_t aAvailableSize)
|
يُخصِّص PacketBuffer بالحجم التلقائي المحجوز (WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE) في الحمولة للعناوين، وعلى الأقل
aAllocSize بايت من المساحة للبيانات الإضافية بعد المؤشر الأولي. |
NewWithAvailableSize(uint16_t aReservedSize, size_t aAvailableSize)
|
يخصص كائن PacketBuffer مع ما لا يقل عن
aReservedSize بايت محجوز في حمولة العناوين وaAllocSize بايت على الأقل من المساحة للبيانات الإضافية بعد المؤشر الأولي. |
RightSize(PacketBuffer *aPacket)
|
انسخ المورد الاحتياطي المحدد إلى مورد احتياطي بالحجم المناسب إن أمكن.
|
الدوال العامة
AddRef
void AddRef( void )
زيادة عدد المراجع للمخزن المؤقت الحالي.
AddToEnd
void AddToEnd( PacketBuffer *aPacket )
أضف المخزن المؤقت المحدد للحزمة إلى نهاية سلسلة المخزن المؤقت، مع ضبط إجمالي طول كل مخزن مؤقت في السلسلة وفقًا لذلك.
التفاصيل | |||
---|---|---|---|
المَعلمات |
|
AlignPayload
bool AlignPayload( uint16_t aAlignBytes )
محاذاة حمولة المخزن المؤقت على حدود وحدات البايت المحددة.
نقل الحمولة في المورد الاحتياطي للأمام إذا لزم الأمر.
التفاصيل | |||
---|---|---|---|
المَعلمات |
|
||
المرتجعات |
true إذا كانت المحاذاة ناجحة، false إذا لم تكن هناك مساحة كافية في المخزن المؤقت. |
AllocSize
size_t AllocSize( void ) const
عرض حجم التخصيص، بما في ذلك مساحات البيانات المحجوزة ومساحات البيانات الأساسية ولكن بدون تضمين المساحة المخصّصة لبنية PacketBuffer
التفاصيل | |
---|---|
المرتجعات |
حجم التخصيص
|
AvailableDataLength
uint16_t AvailableDataLength( void ) const
يمكنك الحصول على عدد وحدات بايت البيانات التي يمكن إضافتها إلى المخزن المؤقت الحالي بناءً على موضع البدء الحالي وطول البيانات.
التفاصيل | |
---|---|
المرتجعات |
طول البيانات بالبايت والتي تلائم المخزن المؤقت الحالي بناءً على موضع البدء الحالي وطول البيانات.
|
CompactHead
void CompactHead( void )
انقل البيانات من الموارد الاحتياطية اللاحقة في السلسلة إلى المخزن المؤقت الحالي حتى تمتلئ.
يتم ضغط المخزن المؤقت الحالي فقط: يتم نقل البيانات الموجودة داخل المخزن المؤقت الحالي إلى الجزء الأمامي من المخزن المؤقت الحالي، مما يؤدي إلى إزالة أي مساحة محجوزة. تتم تعبئة المساحة المتاحة المتبقية بالبيانات التي تم نقلها من المخازن الاحتياطية اللاحقة في السلسلة حتى امتلأ المخزن المؤقت الحالي. إذا تم نقل مورد احتياطي لاحق في السلسلة إلى المورد الاحتياطي الحالي بالكامل، تتم إزالته من السلسلة وتحريره. لا تأخذ الطريقة أي معلمات، ولا تعرض أي نتائج، ولا يمكن أن تفشل.
استهلاك
PacketBuffer * Consume( uint16_t aConsumeLength )
تستهلك البيانات في سلسلة من الموارد الاحتياطية.
استهلك البيانات في سلسلة من الموارد الاحتياطية بدءًا من المورد الاحتياطي الحالي والمتابعة خلال الموارد الاحتياطية المتبقية في السلسلة. يتم تفريغ كل مورد احتياطي تم استهلاكه بالكامل وتعرض الدالة أول مورد احتياطي (إن وجد) الذي يحتوي على البيانات المتبقية. يجب أن يكون المخزن المؤقت الحالي رأس سلسلة المورد الاحتياطي.
التفاصيل | |||
---|---|---|---|
المَعلمات |
|
||
المرتجعات |
المورد الاحتياطي الأول من السلسلة الحالية التي تحتوي على أي بيانات متبقية. إذا لم تتبقى أي بيانات، فسيتم عرض قيمة فارغة (NULL).
|
ConsumeHead
void ConsumeHead( uint16_t aConsumeLength )
ضبط المخزن المؤقت الحالي للإشارة إلى كمية البيانات المستهلكة.
رفع موضع بدء البيانات في المخزن المؤقت الحالي بمقدار الكمية المحددة بالبايت وصولاً إلى طول البيانات في المخزن المؤقت قلِّل طوله وإجمالي طوله بمقدار استهلاكه.
التفاصيل | |||
---|---|---|---|
المَعلمات |
|
DataLength
uint16_t DataLength( void ) const
الحصول على الطول بالبايت من البيانات في المخزن المؤقت للحزمة
التفاصيل | |
---|---|
المرتجعات |
الطول، بالبايت (طول الحمولة الحالي).
|
DetachTail
PacketBuffer * DetachTail( void )
فصل المخزن المؤقت الحالي عن سلسلته وعرض مؤشر إلى الموارد الاحتياطية المتبقية
يجب أن يكون المخزن المؤقت الحالي رأس السلسلة.
التفاصيل | |
---|---|
المرتجعات |
ذيل سلسلة المخزن المؤقت الحالية أو قيمة فارغة إذا كان المخزن المؤقت الحالي هو المورد الاحتياطي الوحيد في السلسلة.
|
EnsureReservedSize
bool EnsureReservedSize( uint16_t aReservedSize )
تأكد من أن المخزن المؤقت يحتوي على الكمية المحددة على الأقل من المساحة المحجوزة.
تأكد من أن المخزن المؤقت يحتوي على الكمية المحددة على الأقل من المساحة المحجوزة التي تنقل البيانات في المخزن المؤقت للأمام لتوفير مساحة إذا لزم الأمر.
التفاصيل | |||
---|---|---|---|
المَعلمات |
|
||
المرتجعات |
true إذا كان المقاس المحجوز المطلوب متاحًا، وfalse في حال عدم توفّر مساحة كافية في المخزن المؤقت. |
MaxDataLength
uint16_t MaxDataLength( void ) const
احصل على الحد الأقصى من البيانات بالبايت المناسبة للمخزن المؤقت بناءً على موضع البدء الحالي وحجم المخزن المؤقت.
التفاصيل | |
---|---|
المرتجعات |
عدد وحدات البايت التي تتناسب مع المخزن المؤقت بناءً على موضع البدء الحالي.
|
التالي
PacketBuffer * Next( void ) const
الحصول على مؤشر للمخزن المؤقت التالي في السلسلة
التفاصيل | |
---|---|
المرتجعات |
مؤشرًا إلى المورد الاحتياطي التالي في السلسلة. يتم عرض
NULL في حال عدم توفُّر مخازن مؤقتة في السلسلة. |
ReservedSize
uint16_t ReservedSize( void ) const
يمكنك الحصول على عدد وحدات البايت داخل المخزن المؤقت الحالي بين بداية المخزن المؤقت وموضع بدء البيانات الحالي.
التفاصيل | |
---|---|
المرتجعات |
مقدار المسافة بالبايت بين بداية المخزن المؤقت وموضع بدء البيانات الحالي.
|
SetDataLength
void SetDataLength( uint16_t aNewLen, PacketBuffer *aChainHead )
تعيين الطول، بالبايت، للبيانات في المخزن المؤقت، وتعديل إجمالي الطول وفقًا لذلك.
تحدد الدالة طول البيانات بالبايت، مع ضبط إجمالي الطول بشكل مناسب. عندما لا يكون المخزن المؤقت رأس سلسلة المورد الاحتياطي (الحالة الشائعة: يضيف المتصل بيانات إلى آخر مورد احتياطي في سلسلة PacketBuffer قبل طلب طبقات أعلى)، يجب تمرير aChainHead لضبط طول كل مخزن مؤقت بشكل صحيح قبل المورد الاحتياطي الحالي بشكل صحيح.
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
SetStart
void SetStart( uint8_t *aNewStart )
قم بتعيين بيانات البدء في المخزن المؤقت، مع ضبط الطول والطول الإجمالي وفقًا لذلك.
التفاصيل | |||
---|---|---|---|
المَعلمات |
|
بدء
uint8_t * Start( void ) const
الحصول على مؤشر لبدء البيانات في المخزن المؤقت
التفاصيل | |
---|---|
المرتجعات |
المؤشر إلى بداية البيانات.
|
TotalLength
uint16_t TotalLength( void ) const
يمكنك الحصول على إجمالي طول حزم البيانات في سلسلة المخزن المؤقت.
التفاصيل | |
---|---|
المرتجعات |
الطول الإجمالي بالثمانيات.
|
الدوال الثابتة العامة
مجاني
void Free( PacketBuffer *aPacket )
تفريغ جميع المخازن المؤقتة للحزم في سلسلة.
قلِّل عدد المراجع لجميع الموارد الاحتياطية في السلسلة الحالية. وإذا بلغ عدد المراجع 0، يتم تحرير المراجع الاحتياطية المعنيّة أو إعادتها إلى مجموعات التخصيص حسب الاقتضاء. كقاعدة، يجب على المستخدمين التعامل مع هذه الطريقة كدالة مكافئة للدالة free()
وعدم استخدام الوسيطة بعد الاستدعاء.
التفاصيل | |||
---|---|---|---|
المَعلمات |
|
FreeHead
PacketBuffer * FreeHead( PacketBuffer *aPacket )
حرِّر المورد الاحتياطي الأول في سلسلة، مع عرض مؤشر إلى الموارد الاحتياطية المتبقية.
* @note When the buffer chain is referenced by multiple callers,
ستعمل الدالة FreeHead()` على فصل الرأس، ولكن لن يتم فرض تحديد منطقة التخزين المؤقت للرأس.
التفاصيل | |||
---|---|---|---|
المَعلمات |
|
||
المرتجعات |
سلسلة المخزن المؤقت للحزمة التي تتكون من ذيل المخزن المؤقت للإدخال (قد يكون
NULL ) |
New
PacketBuffer * New( void )
تُخصِّص PacketBuffer واحدًا من الحد الأقصى التلقائي للحجم (WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX) مع الحجم التلقائي المحجوز (WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE) في الحمولة.
الحجم المحجوز (WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE) كبير بما يكفي للاحتفاظ بعناوين طبقة النقل بالإضافة إلى العناوين المطلوبة من خلال WeaveMessageLayer
وWeaveExchangeLayer
.
New
PacketBuffer * New( uint16_t aReservedSize )
تخصيص PacketBuffer واحد بالحد الأقصى للحجم الإجمالي مع حجم احتياطي محدّد للعنوان
المعلمة التي تم تمريرها هي الحجم المحجوز قبل حمولة البيانات لاستيعاب رؤوس الحزم من طبقات تكديس مختلفة، وليس الحجم الإجمالي للمخزن المؤقت المراد تخصيصه. حجم المخزن المؤقت WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX وليس محدد في الطلب.
PacketBuffer::New(0)
: عند استدعاء هذه الطريقة، سيتم عرض المخزن المؤقت بدون أي عنوان محجوز، ومن ثم يمكن للمتصل استخدام الحمولة بالكامل. هذا النمط مفيد بشكل خاص في الطبقات السفلى من حزم الشبكات، في الحالات التي يعرف فيها المستخدم أنّ الحمولة سيتم نسخها في الرسالة النهائية مع احتياطيات العنوان المناسبة أو عند إنشاء PacketBuffer الذي يتم إلحاقه بسلسلة من PacketBuffer عبرPacketBuffer::AddToEnd()
. المَعلمات[in] aReservedSize
مقدار مساحة العنوان لحجزها.عند نجاح العملية، يظهر مؤشر إلى PacketBuffer، عند الخطأNULL
.
NewWithAvailableSize
PacketBuffer * NewWithAvailableSize( size_t aAvailableSize )
يُخصِّص PacketBuffer بالحجم التلقائي المحجوز (WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE) في الحمولة للعناوين، وعلى الأقل aAllocSize
بايت من المساحة للبيانات الإضافية بعد المؤشر الأولي.
يكون هذا الاستخدام ملائمًا أكثر عند تخصيص PacketBuffer لرسالة طبقة التطبيق.
التفاصيل | |||
---|---|---|---|
المَعلمات |
|
||
المرتجعات |
عند نجاح هذا الإجراء، يظهر مؤشر إلى PacketBuffer في المجموعة المخصّصة. عند الإخفاق،
NULL . * |
NewWithAvailableSize
PacketBuffer * NewWithAvailableSize( uint16_t aReservedSize, size_t aAvailableSize )
يخصص كائن PacketBuffer مع ما لا يقل عن aReservedSize
بايت محجوز في حمولة العناوين وaAllocSize
بايت على الأقل من المساحة للبيانات الإضافية بعد المؤشر الأولي.
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
||||
المرتجعات |
عند نجاح هذا الإجراء، يظهر مؤشر إلى PacketBuffer في المجموعة المخصّصة. عند الإخفاق،
NULL . |
RightSize
PacketBuffer * RightSize( PacketBuffer *aPacket )
انسخ المورد الاحتياطي المحدد إلى مورد احتياطي بالحجم المناسب إن أمكن.
تعتبر هذه الدالة بيئة مستقلة للمقابس.
التفاصيل | |||
---|---|---|---|
المَعلمات |
|
||
المرتجعات |
المخزن المؤقت الجديد للحزمة أو المخزن المؤقت الأصلي
|