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 ขนาดเริ่มต้นสูงสุด 1 ขนาด (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
- จำนวนไบต์ที่จะใช้จากห่วงโซ่ปัจจุบัน
การคืนสินค้า
บัฟเฟอร์แรกจากห่วงโซ่ปัจจุบันที่มีข้อมูลเหลืออยู่ หากไม่มีข้อมูลเหลืออยู่ ระบบจะแสดงผลค่าว่าง

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
- ส่วนหัวของบัฟเฟอร์เชนที่มีบัฟเฟอร์ปัจจุบันอยู่ อาจเป็นค่าว่างหากบัฟเฟอร์ปัจจุบันคือส่วนหัวของบัฟเฟอร์เชน

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 ขนาดเริ่มต้นสูงสุด 1 ขนาด (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
- บัฟเฟอร์หรือบัฟเฟอร์เชน
การคืนสินค้า
บัฟเฟอร์แพ็กเก็ตใหม่หรือบัฟเฟอร์เดิม