Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.
Trang này được dịch bởi Cloud Translation API.
Switch to English

nl :: Dệt :: Hệ thống :: PacketBuffer

#include <src/system/SystemPacketBuffer.h>

Lớp đệm gói là cấu trúc cốt lõi được sử dụng để thao tác với các gói dữ liệu được tuần tự hóa octet, thường là trong bối cảnh của mạng truyền thông dữ liệu, như Bluetooth hoặc giao thức Internet.

Tóm lược

Trong môi trường dựa trên LwIP, lớp này được xây dựng dựa trên cấu trúc pbuf được định nghĩa trong thư viện đó. Trong trường hợp không có LwIP, Weave cung cấp triển khai dựa trên malloc hoặc triển khai dựa trên nhóm gần đúng với các thách thức bộ nhớ của các thiết bị nhúng sâu.

Lớp PacketBuffer , giống như nhiều cấu trúc tương tự được sử dụng trong các ngăn xếp mạng phân lớp, cung cấp một cơ chế để dành không gian cho các tiêu đề giao thức tại mỗi lớp của một ngăn xếp truyền thông có thể định cấu hình. Để biết chi tiết, hãy xem PacketBuffer::New() cũng như tài liệu LwIP.

Các đối tượng PacketBuffer được tính là tham chiếu và chế độ sử dụng phổ biến trong Weave là "cháy và quên". Khi gói tin (và đối tượng PacketBuffer cơ bản của nó) được gửi qua các lớp giao thức khác nhau, cuộc gọi lên hoặc xuống giữa các lớp ngụ ý chuyển quyền sở hữu và callee chịu trách nhiệm giải phóng bộ đệm. Khi không thực hiện được cuộc gọi nhiều lớp, trách nhiệm giải phóng bộ đệm thuộc về người gọi.

Các đối tượng mới của lớp PacketBuffer được khởi tạo khi bắt đầu phân bổ bộ nhớ thu được từ môi trường bên dưới, ví dụ từ các nhóm đích LwIP pbuf, từ đống thư viện C chuẩn, từ một nhóm đệm nội bộ. Trong trường hợp đơn giản, kích thước của bộ đệm dữ liệu là WEAVE_SYSTEM_PACKETBUFFER_SIZE . Một trình soạn nhạc được cung cấp cho phép sử dụng các bộ đệm dữ liệu có kích thước khác.

Các đối tượng PacketBuffer có thể được xâu chuỗi để chứa các trọng tải lớn hơn. Tuy nhiên, chuỗi không minh bạch và người dùng của lớp phải quyết định rõ ràng để hỗ trợ chuỗi. Ví dụ về các lớp được viết với hỗ trợ chuỗi như sau:

@ref nl::Weave::WeaveTLVReader
@ref nl::Weave::WeaveTLVWriter

Di sản

Kế thừa từ: pbuf

Chức năng công cộng

AddRef (void)
void
Tăng số lượng tham chiếu của bộ đệm hiện tại.
AddToEnd ( PacketBuffer *aPacket)
void
Thêm bộ đệm gói đã cho vào cuối chuỗi đệm, điều chỉnh tổng chiều dài của mỗi bộ đệm trong chuỗi cho phù hợp.
AlignPayload (uint16_t aAlignBytes)
bool
Căn chỉnh trọng tải bộ đệm trên ranh giới byte được chỉ định.
AllocSize (void) const
size_t
Trả về kích thước của phân bổ bao gồm không gian dữ liệu dành riêng và tải trọng nhưng không bao gồm không gian được phân bổ cho cấu trúc PacketBuffer .
AvailableDataLength (void) const
uint16_t
Nhận số byte dữ liệu có thể được thêm vào bộ đệm hiện tại với vị trí bắt đầu hiện tại và độ dài dữ liệu.
CompactHead (void)
void
Di chuyển dữ liệu từ các bộ đệm tiếp theo trong chuỗi vào bộ đệm hiện tại cho đến khi đầy.
Consume (uint16_t aConsumeLength)
Sử dụng dữ liệu trong một chuỗi bộ đệm.
ConsumeHead (uint16_t aConsumeLength)
void
Điều chỉnh bộ đệm hiện tại để cho biết lượng dữ liệu được tiêu thụ.
DataLength (void) const
uint16_t
Nhận độ dài, tính bằng byte, của dữ liệu trong bộ đệm gói.
DetachTail (void)
Tách bộ đệm hiện tại khỏi chuỗi của nó và trả về một con trỏ đến các bộ đệm còn lại.
EnsureReservedSize (uint16_t aReservedSize)
bool
Đảm bảo bộ đệm có ít nhất lượng không gian dành riêng được chỉ định.
MaxDataLength (void) const
uint16_t
Nhận lượng dữ liệu tối đa, tính bằng byte, sẽ phù hợp với bộ đệm cho vị trí bắt đầu hiện tại và kích thước bộ đệm.
Next (void) const
Nhận con trỏ đến vùng đệm tiếp theo trong chuỗi.
ReservedSize (void) const
uint16_t
Nhận số byte trong bộ đệm hiện tại giữa vị trí bắt đầu bộ đệm và vị trí bắt đầu dữ liệu hiện tại.
SetDataLength (uint16_t aNewLen, PacketBuffer *aChainHead)
void
Đặt độ dài, tính bằng byte, của dữ liệu trong bộ đệm, điều chỉnh tổng độ dài cho phù hợp.
SetStart (uint8_t *aNewStart)
void
Đặt dữ liệu bắt đầu trong bộ đệm, điều chỉnh độ dài và tổng độ dài cho phù hợp.
Start (void) const
uint8_t *
Nhận con trỏ để bắt đầu dữ liệu trong bộ đệm.
TotalLength (void) const
uint16_t
Nhận tổng độ dài của dữ liệu gói trong chuỗi bộ đệm.

Chức năng tĩnh công khai

Free ( PacketBuffer *aPacket)
void
Giải phóng tất cả các bộ đệm gói trong một chuỗi.
FreeHead ( PacketBuffer *aPacket)
Giải phóng bộ đệm đầu tiên trong chuỗi, trả về một con trỏ đến các bộ đệm còn lại.
New (void)
Phân bổ một đơn PacketBuffer kích thước tối đa mặc định ( WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX ) với mặc định kích thước bảo lưu ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE ) trong payload.
New (uint16_t aReservedSize)
Phân bổ một PacketBuffer duy nhất có tổng kích thước tối đa với kích thước dự trữ tiêu đề cụ thể.
NewWithAvailableSize (size_t aAvailableSize)
Phân bổ một PacketBuffer với kích thước mặc định bảo lưu ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE ) trong payload cho tiêu đề, và ít nhất aAllocSize byte không gian cho dữ liệu bổ sung sau khi con trỏ trỏ ban đầu.
NewWithAvailableSize (uint16_t aReservedSize, size_t aAvailableSize)
Phân bổ một đối tượng PacketBuffer với ít nhất byte aReservedSize dành riêng trong tải trọng cho tiêu đề và ít nhất aAllocSize byte không gian cho dữ liệu bổ sung sau con trỏ con trỏ ban đầu.
RightSize ( PacketBuffer *aPacket)
Sao chép bộ đệm đã cho vào bộ đệm có kích thước phù hợp nếu có.

Chức năng công cộng

AddRef

void AddRef(
  void
)

Tăng số lượng tham chiếu của bộ đệm hiện tại.

AddToEnd

void AddToEnd(
  PacketBuffer *aPacket
)

Thêm bộ đệm gói đã cho vào cuối chuỗi đệm, điều chỉnh tổng chiều dài của mỗi bộ đệm trong chuỗi cho phù hợp.

Chi tiết
Thông số
[in] aPacket
- bộ đệm gói được thêm vào cuối chuỗi hiện tại.

AlignPayload

bool AlignPayload(
  uint16_t aAlignBytes
)

Căn chỉnh trọng tải bộ đệm trên ranh giới byte được chỉ định.

Di chuyển trọng tải trong bộ đệm về phía trước nếu cần.

Chi tiết
Thông số
[in] aAlignBytes
- chỉ định số byte căn chỉnh cho con trỏ bắt đầu tải trọng.
Lợi nhuận
true nếu căn chỉnh thành công, false nếu không có đủ chỗ trong bộ đệm.

AllocSize

size_t AllocSize(
  void
) const 

Trả về kích thước của phân bổ bao gồm không gian dữ liệu dành riêng và tải trọng nhưng không bao gồm không gian được phân bổ cho cấu trúc PacketBuffer .

Chi tiết
Lợi nhuận
quy mô phân bổ

Có sẵnDataLength

uint16_t AvailableDataLength(
  void
) const 

Nhận số byte dữ liệu có thể được thêm vào bộ đệm hiện tại với vị trí bắt đầu hiện tại và độ dài dữ liệu.

Chi tiết
Lợi nhuận
độ dài, tính bằng byte, của dữ liệu sẽ phù hợp với bộ đệm hiện tại với vị trí bắt đầu hiện tại và độ dài dữ liệu.

CompactHead

void CompactHead(
  void
)

Di chuyển dữ liệu từ các bộ đệm tiếp theo trong chuỗi vào bộ đệm hiện tại cho đến khi đầy.

Chỉ bộ đệm hiện tại được nén lại: dữ liệu bên trong bộ đệm hiện tại được chuyển đến phía trước bộ đệm, loại bỏ bất kỳ không gian dự trữ nào. Không gian khả dụng còn lại được lấp đầy với dữ liệu được di chuyển từ các bộ đệm tiếp theo trong chuỗi, cho đến khi bộ đệm hiện tại đầy. Nếu một bộ đệm tiếp theo trong chuỗi được chuyển toàn bộ vào bộ đệm hiện tại, nó sẽ bị xóa khỏi chuỗi và được giải phóng. Phương thức không nhận tham số, không trả về kết quả và không thể bị lỗi.

Tiêu thụ

PacketBuffer * Consume(
  uint16_t aConsumeLength
)

Sử dụng dữ liệu trong một chuỗi bộ đệm.

Sử dụng dữ liệu trong một chuỗi bộ đệm bắt đầu với bộ đệm hiện tại và tiếp tục qua các bộ đệm còn lại trong chuỗi. Mỗi bộ đệm được sử dụng hết sẽ được giải phóng và hàm trả về bộ đệm đầu tiên (nếu có) chứa dữ liệu còn lại. Bộ đệm hiện tại phải là phần đầu của chuỗi bộ đệm.

Chi tiết
Thông số
[in] aConsumeLength
- số byte cần sử dụng từ chuỗi hiện tại.
Lợi nhuận
bộ đệm đầu tiên từ chuỗi hiện tại chứa mọi dữ liệu còn lại. Nếu không có dữ liệu nào còn lại, một NULL được trả về.

ConsumeHead

void ConsumeHead(
  uint16_t aConsumeLength
)

Điều chỉnh bộ đệm hiện tại để cho biết lượng dữ liệu được tiêu thụ.

Nâng cao vị trí bắt đầu dữ liệu trong bộ đệm hiện tại bằng số lượng được chỉ định, tính bằng byte, lên đến độ dài của dữ liệu trong bộ đệm. Giảm chiều dài và tổng chiều dài theo số lượng tiêu thụ.

Chi tiết
Thông số
[in] aConsumeLen
- số byte cần sử dụng từ bộ đệm hiện tại.

DataLength

uint16_t DataLength(
  void
) const 

Nhận độ dài, tính bằng byte, của dữ liệu trong bộ đệm gói.

Chi tiết
Lợi nhuận
chiều dài, tính bằng byte (chiều dài tải trọng hiện tại).

DetachTail

PacketBuffer * DetachTail(
  void
)

Tách bộ đệm hiện tại khỏi chuỗi của nó và trả về một con trỏ đến các bộ đệm còn lại.

Bộ đệm hiện tại phải là đầu của chuỗi.

Chi tiết
Lợi nhuận
đuôi của chuỗi bộ đệm hiện tại hoặc NULL nếu bộ đệm hiện tại là bộ đệm duy nhất trong chuỗi.

EnsureReservedSize

bool EnsureReservedSize(
  uint16_t aReservedSize
)

Đảm bảo bộ đệm có ít nhất lượng không gian dành riêng được chỉ định.

Đảm bảo bộ đệm có ít nhất lượng không gian dành riêng được chỉ định di chuyển dữ liệu trong bộ đệm về phía trước để tạo chỗ nếu cần thiết.

Chi tiết
Thông số
[in] aReservedSize
- số byte mong muốn cho tiêu đề.
Lợi nhuận
true nếu kích thước đặt trước được yêu cầu có sẵn, false nếu không có đủ chỗ trong bộ đệm.

MaxDataLength

uint16_t MaxDataLength(
  void
) const 

Nhận lượng dữ liệu tối đa, tính bằng byte, sẽ phù hợp với bộ đệm cho vị trí bắt đầu hiện tại và kích thước bộ đệm.

Chi tiết
Lợi nhuận
số byte phù hợp với bộ đệm cho vị trí bắt đầu hiện tại.

Kế tiếp

PacketBuffer * Next(
  void
) const 

Nhận con trỏ đến vùng đệm tiếp theo trong chuỗi.

Chi tiết
Lợi nhuận
một con trỏ đến vùng đệm tiếp theo trong chuỗi. NULL được trả về khi không có bộ đệm trong chuỗi.

ReservedSize

uint16_t ReservedSize(
  void
) const 

Nhận số byte trong bộ đệm hiện tại giữa vị trí bắt đầu bộ đệm và vị trí bắt đầu dữ liệu hiện tại.

Chi tiết
Lợi nhuận
lượng, tính bằng byte, không gian giữa vị trí bắt đầu của bộ đệm và vị trí bắt đầu dữ liệu hiện tại.

SetDataLength

void SetDataLength(
  uint16_t aNewLen,
  PacketBuffer *aChainHead
)

Đặt độ dài, tính bằng byte, của dữ liệu trong bộ đệm, điều chỉnh tổng độ dài cho phù hợp.

Hàm đặt độ dài, tính bằng byte, của dữ liệu trong bộ đệm, điều chỉnh tổng độ dài một cách thích hợp. Khi bộ đệm không phải là phần đầu của chuỗi bộ đệm (trường hợp phổ biến: người gọi thêm dữ liệu vào bộ đệm cuối cùng trong chuỗi PacketBuffer trước khi gọi các lớp cao hơn), aChainHead phải được chuyển vào để điều chỉnh đúng tổng độ dài của mỗi bộ đệm phía trước của bộ đệm hiện tại.

Chi tiết
Thông số
[in] aNewLen
- độ dài mới, tính bằng byte, của vùng đệm này.
[in,out] aChainHead
- phần đầu của chuỗi bộ đệm mà bộ đệm hiện tại thuộc về. Có thể là NULL nếu bộ đệm hiện tại là phần đầu của chuỗi bộ đệm.

SetStart

void SetStart(
  uint8_t *aNewStart
)

Đặt dữ liệu bắt đầu trong bộ đệm, điều chỉnh độ dài và tổng độ dài cho phù hợp.

Chi tiết
Thông số
[in] aNewStart
- Một con trỏ đến nơi tải trọng mới sẽ bắt đầu. newStart sẽ được điều chỉnh nội bộ để nằm trong ranh giới của vùng đệm đầu tiên trong chuỗi PacketBuffer .

Khởi đầu

uint8_t * Start(
  void
) const 

Nhận con trỏ để bắt đầu dữ liệu trong bộ đệm.

Chi tiết
Lợi nhuận
con trỏ đến đầu dữ liệu.

Tổng chiều dài

uint16_t TotalLength(
  void
) const 

Nhận tổng độ dài của dữ liệu gói trong chuỗi bộ đệm.

Chi tiết
Lợi nhuận
tổng chiều dài, tính bằng octet.

Chức năng tĩnh công khai

Miễn phí

void Free(
  PacketBuffer *aPacket
)

Giải phóng tất cả các bộ đệm gói trong một chuỗi.

Giảm số lượng tham chiếu cho tất cả các bộ đệm trong chuỗi hiện tại. Nếu số lượng tham chiếu đạt đến 0, các bộ đệm tương ứng sẽ được giải phóng hoặc trả về các nhóm phân bổ nếu thích hợp. Theo quy tắc, người dùng nên coi phương thức này như một hàm tương đương với hàm free() và không sử dụng đối số sau lời gọi.

Chi tiết
Thông số
[in] aPacket
- bộ đệm gói được giải phóng.

FreeHead

PacketBuffer * FreeHead(
  PacketBuffer *aPacket
)

Giải phóng bộ đệm đầu tiên trong một chuỗi, trả về một con trỏ đến các bộ đệm còn lại.

* @note When the buffer chain is referenced by multiple callers, FreeHead () `sẽ tách phần đầu ra, nhưng sẽ không buộc phải giải quyết phần đệm đầu.

Chi tiết
Thông số
[in] aPacket
- chuỗi đệm.
Lợi nhuận
chuỗi bộ đệm gói bao gồm phần đuôi của bộ đệm đầu vào (có thể là NULL ).

Mới

PacketBuffer * New(
  void
)

Phân bổ một đơn PacketBuffer kích thước tối đa mặc định ( WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX ) với mặc định kích thước bảo lưu ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE ) trong payload.

Kích thước dành riêng ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE ) đủ lớn để chứa các tiêu đề lớp truyền tải cũng như các tiêu đề theo yêu cầu của WeaveMessageLayerWeaveExchangeLayer .

Mới

PacketBuffer * New(
  uint16_t aReservedSize
)

Phân bổ một PacketBuffer duy nhất có tổng kích thước tối đa với kích thước dự trữ tiêu đề cụ thể.

Tham số được truyền vào là kích thước được dành trước khi tải trọng để chứa các tiêu đề gói từ các lớp ngăn xếp khác nhau, không phải là kích thước tổng thể của bộ đệm để phân bổ. Kích thước của bộ đệm WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX và không, được chỉ định trong cuộc gọi.

  • PacketBuffer::New(0) : khi được gọi theo kiểu này, bộ đệm sẽ được trả về mà không có bất kỳ tiêu đề nào dành riêng, do đó toàn bộ tải trọng có thể được sử dụng bởi người gọi. Mô hình này đặc biệt hữu ích ở các lớp thấp hơn của ngăn xếp mạng, trong trường hợp người dùng biết trọng tải sẽ được sao chép vào thông báo cuối cùng với phần dự trữ tiêu đề thích hợp hoặc trong việc tạo PacketBuffer được nối vào chuỗi PacketBuffer thông qua PacketBuffer::AddToEnd() . Thông số
    [in] aReservedSize
    lượng không gian tiêu đề cần đặt trước.
    Lợi nhuận
    Khi thành công, một con trỏ đến PacketBuffer , khi thất bại NULL .

NewWithAvailableSize

PacketBuffer * NewWithAvailableSize(
  size_t aAvailableSize
)

Phân bổ một PacketBuffer với kích thước mặc định bảo lưu ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE ) trong payload cho tiêu đề, và ít nhất aAllocSize byte không gian cho dữ liệu bổ sung sau khi con trỏ trỏ ban đầu.

Cách sử dụng này là thích hợp nhất khi cấp phát PacketBuffer cho một thông báo lớp ứng dụng.

Chi tiết
Thông số
[in] aAvailableSize
Số octet cần cấp phát sau con trỏ.
Lợi nhuận
Khi thành công, một con trỏ đến PacketBuffer trong khối được cấp phát. Không thành công, NULL . *

NewWithAvailableSize

PacketBuffer * NewWithAvailableSize(
  uint16_t aReservedSize,
  size_t aAvailableSize
)

Phân bổ một đối tượng PacketBuffer với ít nhất byte aReservedSize dành riêng trong tải trọng cho tiêu đề và ít nhất aAllocSize byte không gian cho dữ liệu bổ sung sau con trỏ con trỏ ban đầu.

Chi tiết
Thông số
[in] aReservedSize
Số octet cần đặt phía sau con trỏ.
[in] aAvailableSize
Số octet cần cấp phát sau con trỏ.
Lợi nhuận
Khi thành công, một con trỏ đến PacketBuffer trong khối được cấp phát. Không thành công, NULL .

RightSize

PacketBuffer * RightSize(
  PacketBuffer *aPacket
)

Sao chép bộ đệm đã cho vào bộ đệm có kích thước phù hợp nếu có.

Chức năng này không phù hợp với ổ cắm.

Chi tiết
Thông số
[in] aPacket
- bộ đệm hoặc chuỗi đệm.
Lợi nhuận
bộ đệm gói mới hoặc bộ đệm ban đầu