nl::Weave::System::PacketBuffer

#include <src/system/SystemPacketBuffer.h>

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

สรุป

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

คลาส PacketBuffer เช่น โครงสร้างที่คล้ายกันจํานวนมากซึ่งใช้ในสแต็กเครือข่ายแบบเลเยอร์ มีกลไกในการจองพื้นที่สําหรับส่วนหัวของโปรโตคอลที่แต่ละเลเยอร์ของสแต็กการสื่อสารที่กําหนดค่าได้ โปรดดูรายละเอียดในเอกสารของ PacketBuffer::New() และเอกสารประกอบเกี่ยวกับ LwIP

ระบบจะนับออบเจ็กต์ PacketBuffer และโหมดการใช้งานทั่วไปใน Weave คือ "fire-and-forget" เนื่องจากระบบส่งแพ็กเก็ต (และออบเจ็กต์ PacketBuffer ที่เกี่ยวข้อง) ผ่านเลเยอร์โปรโตคอลต่างๆ การเรียกใช้หรือการโทรหารายชื่อติดต่อระหว่างเลเยอร์จึงแสดงถึงการโอนสิทธิ์การเป็นเจ้าของ และผู้โทรจะมีหน้าที่ยกเลิกการบัฟเฟอร์ หากไม่ใช้การโทรข้ามชั้น คุณมีหน้าที่รับผิดชอบในการระงับบัฟเฟอร์ให้กับผู้โทร

ออบเจ็กต์ใหม่ของคลาส PacketBuffer จะเริ่มต้นในช่วงต้นของการจัดสรรหน่วยความจําที่ได้รับจากสภาพแวดล้อมที่สําคัญ เช่น จากพูลเป้าหมาย LwIP pbuf จากฮีปไลบรารี C มาตรฐานจากพูลบัฟเฟอร์ภายใน ในกรณีง่ายๆ ขนาดของบัฟเฟอร์ข้อมูลคือ WEhave_SYSTEM_PACPACKAGEBUFFER_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 ขนาดมาตรฐานเริ่มต้นรายการเดียว (WEhave_SYSTEM_CONFIG_PACPACKAGEBUFFER_CAPACITY_MAX) ด้วยขนาดที่สงวนไว้เริ่มต้น (WEhave_SYSTEM_CONFIG_DELIMITER_RESERVE_SIZE) ในเพย์โหลด
New(uint16_t aReservedSize)
จัดสรร PacketBuffer รายการเดียวทั้งหมดของขนาดโดยรวมด้วยขนาดการจองส่วนหัวที่เฉพาะเจาะจง
NewWithAvailableSize(size_t aAvailableSize)
จัดสรร PacketBuffer ด้วยขนาดที่สงวนไว้เริ่มต้น (WEhave_SYSTEM_CONFIG_DELIMITER_RESERVE_SIZE) ในเพย์โหลดสําหรับส่วนหัว และมีพื้นที่อย่างน้อย aAllocSize ไบต์สําหรับข้อมูลเพิ่มเติมหลังจากเคอร์เซอร์เคอร์เซอร์เริ่มต้น
NewWithAvailableSize(uint16_t aReservedSize, size_t aAvailableSize)
จัดสรรออบเจ็กต์ PacketBuffer ที่มีการจองอย่างน้อย aReservedSize ไบต์ในเพย์โหลดสําหรับส่วนหัว และมีเว้นวรรคอย่างน้อย aAllocSize ไบต์สําหรับข้อมูลเพิ่มเติมหลังจากเคอร์เซอร์เคอร์เซอร์เริ่มต้น
RightSize(PacketBuffer *aPacket)
คัดลอกบัฟเฟอร์ที่ระบุไปยังบัฟเฟอร์ขนาดที่เหมาะสม (หากมี)

ฟังก์ชันสาธารณะ

เพิ่มการอ้างอิง

void AddRef(
  void
)

เพิ่มหมายเลขอ้างอิงของบัฟเฟอร์ปัจจุบัน

เพิ่มปลายทาง

void AddToEnd(
  PacketBuffer *aPacket
)

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

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

จัดเพย์โหลด

bool AlignPayload(
  uint16_t aAlignBytes
)

จัดตําแหน่งเพย์โหลดบัฟเฟอร์ในขอบเขตไบต์ที่ระบุ

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

รายละเอียด
พารามิเตอร์
[in] aAlignBytes
- ระบุจํานวนไบต์ของไบต์สําหรับตัวชี้การเริ่มต้นเพย์โหลด
การคืนสินค้า
true หากปรับแนวสําเร็จ false หากมีที่ว่างในบัฟเฟอร์ไม่เพียงพอ

ขนาดโลหะ

size_t AllocSize(
  void
) const 

แสดงขนาดของการจัดสรร รวมถึงพื้นที่ข้อมูลที่จองไว้และเพย์โหลด แต่ไม่รวมพื้นที่ที่จัดสรรสําหรับโครงสร้าง PacketBuffer

รายละเอียด
การคืนสินค้า
ขนาดของการจัดสรร

ความยาวของข้อมูลที่ใช้ได้

uint16_t AvailableDataLength(
  void
) const 

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

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

หัวกะทัดรัด

void CompactHead(
  void
)

ย้ายข้อมูลจากบัฟเฟอร์ที่ตามมาในห่วงโซ่ปัจจุบันไปยังบัฟเฟอร์ปัจจุบันจนกว่าจะเต็ม

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

การบริโภค

PacketBuffer * Consume(
  uint16_t aConsumeLength
)

ใช้อินเทอร์เน็ตในบัฟเฟอร์เชน

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

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

หัวการบริโภค

void ConsumeHead(
  uint16_t aConsumeLength
)

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

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

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

ความยาวของข้อมูล

uint16_t DataLength(
  void
) const 

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

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

ลิ้นแฟ้ม

PacketBuffer * DetachTail(
  void
)

ปลดบัฟเฟอร์ปัจจุบันออกจากเชนแล้วนําตัวชี้กลับมาที่บัฟเฟอร์ที่เหลืออยู่

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

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

ตรวจสอบว่าขนาดที่สงวนไว้

bool EnsureReservedSize(
  uint16_t aReservedSize
)

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

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

รายละเอียด
พารามิเตอร์
[in] aReservedSize
- จํานวนไบต์ที่ต้องการสําหรับส่วนหัว
การคืนสินค้า
true หากมีขนาดที่จองไว้ที่จองไว้ false หากมีพื้นที่ในบัฟเฟอร์ไม่เพียงพอ

ความยาวสูงสุดของข้อมูล

uint16_t MaxDataLength(
  void
) const 

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

รายละเอียด
การคืนสินค้า
จํานวนไบต์ที่พอดีกับบัฟเฟอร์ตามตําแหน่งเริ่มต้นปัจจุบัน

ถัดไป

PacketBuffer * Next(
  void
) const 

รับตัวชี้ไปยังบัฟเฟอร์ถัดไปในห่วงโซ่

รายละเอียด
การคืนสินค้า
ตัวชี้ไปยังบัฟเฟอร์ถัดไปในเชน ระบบจะแสดงผล NULL เมื่อไม่มีบัฟเฟอร์ในเชน

ขนาดที่สงวนไว้

uint16_t ReservedSize(
  void
) const 

ดูจํานวนไบต์ภายในบัฟเฟอร์ปัจจุบันระหว่างจุดเริ่มต้นของบัฟเฟอร์และตําแหน่งเริ่มต้นของข้อมูลปัจจุบัน

รายละเอียด
การคืนสินค้า
ปริมาณหน่วยเป็นไบต์ระหว่างจุดเริ่มต้นของบัฟเฟอร์และตําแหน่งเริ่มต้นของข้อมูล

ความยาวของข้อมูล

void SetDataLength(
  uint16_t aNewLen,
  PacketBuffer *aChainHead
)

กําหนดความยาวเป็นไบต์ของข้อมูลในบัฟเฟอร์ รวมทั้งปรับความยาวให้สอดคล้องกัน

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

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

ตั้งค่าเริ่มต้น

void SetStart(
  uint8_t *aNewStart
)

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

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

เริ่ม

uint8_t * Start(
  void
) const 

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

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

ความยาวรวม

uint16_t TotalLength(
  void
) const 

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

รายละเอียด
การคืนสินค้า
ความยาวรวมในอ็อกเท็ต

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

ฟรี

void Free(
  PacketBuffer *aPacket
)

เพิ่มพื้นที่ว่างบัฟเฟอร์ในเชนทั้งหมด

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

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

แบบ Free Head

PacketBuffer * FreeHead(
  PacketBuffer *aPacket
)

ทําให้บัฟเฟอร์แรกในห่วงโซ่ว่าง และนําตัวชี้ไปยังบัฟเฟอร์ที่เหลืออยู่

* @note When the buffer chain is referenced by multiple callers,FreeHead()` จะถอดศีรษะ แต่ไม่บังคับให้บัฟเฟอร์บัฟเฟอร์

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

ใหม่

PacketBuffer * New(
  void
)

จัดสรร PacketBuffer ขนาดมาตรฐานเริ่มต้นรายการเดียว (WEhave_SYSTEM_CONFIG_PACPACKAGEBUFFER_CAPACITY_MAX) ด้วยขนาดที่สงวนไว้เริ่มต้น (WEhave_SYSTEM_CONFIG_DELIMITER_RESERVE_SIZE) ในเพย์โหลด

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

ใหม่

PacketBuffer * New(
  uint16_t aReservedSize
)

จัดสรร PacketBuffer รายการเดียวทั้งหมดของขนาดโดยรวมด้วยขนาดการจองส่วนหัวที่เฉพาะเจาะจง

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

  • PacketBuffer::New(0) : เมื่อเรียกใช้ในรูปแบบนี้ บัฟเฟอร์จะแสดงผลโดยไม่มีส่วนหัวใดๆ ที่สํารองไว้ ดังนั้นเพย์โหลดทั้งหมดจึงใช้งานโดยผู้โทรได้ รูปแบบนี้มีประโยชน์อย่างยิ่งในสแต็กเครือข่ายในระดับล่างๆ ในกรณีที่ผู้ใช้ทราบว่าเพย์โหลดจะคัดลอกไปยังข้อความสุดท้ายที่มีการจองส่วนหัวที่เหมาะสมหรือสร้าง PacketBuffer ต่อท้ายเชน PacketBuffer ผ่าน PacketBuffer::AddToEnd() พารามิเตอร์
    [in] aReservedSize
    จํานวนพื้นที่ส่วนหัวที่จะจอง
    การคืนสินค้า
    สําเร็จเมื่อชี้ไปที่ PacketBuffer เมื่อล้มเหลว NULL

NewSizeAvailabilitySize

PacketBuffer * NewWithAvailableSize(
  size_t aAvailableSize
)

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

การใช้งานนี้จะเหมาะสมที่สุดเมื่อจัดสรร PacketBuffer สําหรับข้อความเลเยอร์แอปพลิเคชัน

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

NewSizeAvailabilitySize

PacketBuffer * NewWithAvailableSize(
  uint16_t aReservedSize,
  size_t aAvailableSize
)

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

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

ขนาดด้านขวา

PacketBuffer * RightSize(
  PacketBuffer *aPacket
)

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

ฟังก์ชันนี้เป็น โดยปกติแล้วจะไม่ใช่ซ็อกเก็ต

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