nl::Weave::System::PacketBuffer

#include <src/system/SystemPacketBuffer.h>

คลาสบัฟเฟอร์ของแพ็กเก็ตเป็นโครงสร้างหลักที่ใช้สำหรับจัดการแพ็กเก็ตของข้อมูลซีเรียลออคเต็ต ซึ่งโดยปกติจะใช้ในบริบทของเครือข่ายการสื่อสารข้อมูล เช่น บลูทูธหรือโปรโตคอลอินเทอร์เน็ต

สรุป

ในสภาพแวดล้อมที่ใช้ LwIP คลาสนี้สร้างขึ้นจากโครงสร้าง pbuf ที่กำหนดไว้ในไลบรารีนั้น เมื่อไม่มี LwIP แล้ว Weave ก็จัดให้มีการติดตั้งใช้งานแบบ Malloc หรือการใช้งานแบบพูลที่ตอบสนองต่อปัญหาด้านหน่วยความจำของอุปกรณ์ที่ฝังอยู่ในเชิงลึกได้ใกล้เคียงเป็นอย่างมาก

คลาส 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
)

เพิ่มบัฟเฟอร์แพ็กเก็ตที่ให้ไว้ที่ส่วนท้ายของห่วงโซ่บัฟเฟอร์ แล้วปรับความยาวรวมของบัฟเฟอร์แต่ละชุดในเชนให้สอดคล้องกัน

รายละเอียด
พารามิเตอร์
[in] aPacket
- บัฟเฟอร์แพ็กเก็ตที่จะเพิ่มไปยังตอนท้ายของห่วงโซ่ปัจจุบัน

AlignPayload

bool AlignPayload(
  uint16_t aAlignBytes
)

ปรับเพย์โหลดบัฟเฟอร์ในขอบเขตไบต์ที่ระบุ

การย้ายเพย์โหลดในบัฟเฟอร์ไปข้างหน้าหากจำเป็น

รายละเอียด
พารามิเตอร์
[in] 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
)

ใช้ข้อมูลในเชนบัฟเฟอร์

ใช้ข้อมูลในเชนบัฟเฟอร์โดยเริ่มจากบัฟเฟอร์ปัจจุบัน และดำเนินการผ่านบัฟเฟอร์ที่เหลืออยู่ในเชน บัฟเฟอร์แต่ละบัฟเฟอร์ที่ใช้ไปแล้วจะถูกปลดออกและฟังก์ชันจะแสดงผลบัฟเฟอร์แรก (หากมี) ที่มีข้อมูลที่เหลืออยู่ บัฟเฟอร์ปัจจุบันต้องเป็นส่วนหัวของห่วงโซ่บัฟเฟอร์

รายละเอียด
พารามิเตอร์
[in] aConsumeLength
- จำนวนไบต์ที่จะใช้จากห่วงโซ่ปัจจุบัน
การส่งคืน
บัฟเฟอร์แรกจากเชนปัจจุบันที่มีข้อมูลที่เหลืออยู่ หากไม่มีข้อมูลเหลืออยู่ ระบบจะแสดงผล NULL

ConsumeHead

void ConsumeHead(
  uint16_t aConsumeLength
)

ปรับบัฟเฟอร์ปัจจุบันเพื่อระบุปริมาณข้อมูลที่ใช้

เลื่อนตำแหน่งเริ่มต้นของข้อมูลในบัฟเฟอร์ปัจจุบันตามจำนวนที่ระบุเป็นไบต์จนถึงความยาวของข้อมูลในบัฟเฟอร์ ลดความยาวและความยาวรวมตามปริมาณที่ใช้

รายละเอียด
พารามิเตอร์
[in] aConsumeLen
- จำนวนไบต์ที่จะใช้จากบัฟเฟอร์ปัจจุบัน

DataLength

uint16_t DataLength(
  void
) const 

รับความยาวของข้อมูลในบัฟเฟอร์แพ็กเก็ตเป็นไบต์

รายละเอียด
การส่งคืน
ความยาวในหน่วยไบต์ (ความยาวเพย์โหลดปัจจุบัน)

DetachTail

PacketBuffer * DetachTail(
  void
)

ถอดบัฟเฟอร์ปัจจุบันออกจากเชนและส่งตัวชี้ไปยังบัฟเฟอร์ที่เหลืออยู่

บัฟเฟอร์ปัจจุบันต้องเป็นส่วนหัวของเชน

รายละเอียด
การส่งคืน
หางของบัฟเฟอร์เชนปัจจุบันหรือ NULL หากบัฟเฟอร์ปัจจุบันเป็นบัฟเฟอร์เดียวในห่วงโซ่

EnsureReservedSize

bool EnsureReservedSize(
  uint16_t aReservedSize
)

ตรวจสอบว่าบัฟเฟอร์มีพื้นที่ที่จองไว้อย่างน้อยเท่ากับจำนวนที่ระบุไว้

ตรวจสอบว่าบัฟเฟอร์มีพื้นที่ที่จองไว้อย่างน้อยเท่ากับจำนวนที่ระบุไว้ซึ่งย้ายข้อมูลในบัฟเฟอร์ไปด้านหน้าเพื่อเพิ่มพื้นที่หากจำเป็น

รายละเอียด
พารามิเตอร์
[in] 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 ต้องเข้ามาเพื่อปรับความยาวรวมของบัฟเฟอร์แต่ละบัฟเฟอร์ก่อนบัฟเฟอร์ปัจจุบันอย่างเหมาะสม

รายละเอียด
พารามิเตอร์
[in] aNewLen
- ความยาวใหม่เป็นไบต์ของบัฟเฟอร์นี้
[in,out] aChainHead
- ส่วนหัวของห่วงโซ่บัฟเฟอร์ที่เป็นของบัฟเฟอร์ปัจจุบัน อาจเป็นค่า NULL หากบัฟเฟอร์ปัจจุบันเป็นส่วนหัวของห่วงโซ่บัฟเฟอร์

SetStart

void SetStart(
  uint8_t *aNewStart
)

กำหนดข้อมูลเริ่มต้นในบัฟเฟอร์ ปรับความยาวและความยาวรวมให้สอดคล้องกัน

รายละเอียด
พารามิเตอร์
[in] aNewStart
- ตัวชี้ไปยังตำแหน่งที่เพย์โหลดใหม่ควรเริ่มต้น ระบบจะปรับ newStart ภายในให้อยู่ภายในขอบเขตของบัฟเฟอร์แรกในห่วงโซ่ PacketBuffer

เริ่ม

uint8_t * Start(
  void
) const 

รับตัวชี้ไปยังจุดเริ่มต้นข้อมูลในบัฟเฟอร์

รายละเอียด
การส่งคืน
ตัวชี้ไปยังจุดเริ่มต้นของข้อมูล

TotalLength

uint16_t TotalLength(
  void
) const 

รับข้อมูลความยาวรวมของข้อมูลแพ็กเก็ตในห่วงโซ่บัฟเฟอร์

รายละเอียด
การส่งคืน
ความยาวรวมเป็นอ็อกเท็ต

ฟังก์ชันแบบคงที่แบบสาธารณะ

ฟรี

void Free(
  PacketBuffer *aPacket
)

ปล่อยบัฟเฟอร์แพ็กเก็ตทั้งหมดในเชน

ลดจำนวนการอ้างอิงเป็นบัฟเฟอร์ทั้งหมดในเชนปัจจุบัน หากจำนวนการอ้างอิงถึง 0 ระบบจะปล่อยบัฟเฟอร์ที่เกี่ยวข้องหรือกลับไปยังพูลที่จัดสรรตามความเหมาะสม ตามกฎ ผู้ใช้ควรถือว่าวิธีการนี้เทียบเท่ากับฟังก์ชัน free() และไม่ใช้อาร์กิวเมนต์หลังการเรียกใช้

รายละเอียด
พารามิเตอร์
[in] aPacket
- บัฟเฟอร์แพ็กเก็ตที่จะต้องว่าง

FreeHead

PacketBuffer * FreeHead(
  PacketBuffer *aPacket
)

ปล่อยบัฟเฟอร์แรกในเชนโดยส่งตัวชี้ไปยังบัฟเฟอร์ที่เหลือ

* @note When the buffer chain is referenced by multiple callers,FreeHead()` จะปลดส่วนหัวออก แต่จะไม่บังคับให้เก็บบัฟเฟอร์ส่วนหัว

รายละเอียด
พารามิเตอร์
[in] aPacket
- ห่วงโซ่บัฟเฟอร์
การส่งคืน
ห่วงโซ่บัฟเฟอร์แพ็กเก็ตที่ประกอบด้วยหางของบัฟเฟอร์อินพุต (อาจเป็น NULL)

ใหม่

PacketBuffer * New(
  void
)

จัดสรร PacketBuffer ของขนาดสูงสุดที่เป็นค่าเริ่มต้น (WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX) ที่มีขนาดเริ่มต้นที่สงวนไว้ (WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE) ในเพย์โหลด

ขนาดที่สงวนไว้ (WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE) นั้นใหญ่พอที่จะรองรับส่วนหัวของเลเยอร์การรับส่งข้อมูล รวมถึงส่วนหัวที่จำเป็นสำหรับ WeaveMessageLayer และ WeaveExchangeLayer

ใหม่

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 สำหรับข้อความในเลเยอร์ของแอปพลิเคชัน

รายละเอียด
พารามิเตอร์
[in] aAvailableSize
จำนวนอ็อกเท็ตที่จะจัดสรรหลังเคอร์เซอร์
การส่งคืน
เมื่อประสบความสำเร็จ ตัวชี้ไปที่ PacketBuffer ในบล็อกที่จัดสรร เมื่อล้มเหลว NULL *

NewWithAvailableSize

PacketBuffer * NewWithAvailableSize(
  uint16_t aReservedSize,
  size_t aAvailableSize
)

จัดสรรออบเจ็กต์ PacketBuffer ที่สงวนไว้อย่างน้อย aReservedSize ไบต์ในเพย์โหลดสำหรับส่วนหัว และมีพื้นที่ว่างอย่างน้อย aAllocSize ไบต์สำหรับข้อมูลเพิ่มเติมหลังจากตัวชี้เคอร์เซอร์เริ่มต้น

รายละเอียด
พารามิเตอร์
[in] aReservedSize
จำนวนอ็อกเท็ตที่จะสำรองไว้หลังเคอร์เซอร์
[in] aAvailableSize
จำนวนอ็อกเท็ตที่จะจัดสรรหลังเคอร์เซอร์
การส่งคืน
เมื่อประสบความสำเร็จ ตัวชี้ไปที่ PacketBuffer ในบล็อกที่จัดสรร เมื่อล้มเหลว NULL

RightSize

PacketBuffer * RightSize(
  PacketBuffer *aPacket
)

คัดลอกบัฟเฟอร์ที่ให้ไว้ไปยังบัฟเฟอร์ที่มีขนาดเหมาะสม (หากมี)

ฟังก์ชันนี้ไม่มีการดำเนินการสำหรับซ็อกเก็ต

รายละเอียด
พารามิเตอร์
[in] aPacket
- บัฟเฟอร์หรือห่วงโซ่บัฟเฟอร์
การส่งคืน
บัฟเฟอร์แพ็กเกตใหม่หรือบัฟเฟอร์เดิม