Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기
이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

nl :: 짜다:: 체계:: PacketBuffer

#include <src/system/SystemPacketBuffer.h>

패킷 버퍼 클래스는 일반적으로 Bluetooth 또는 인터넷 프로토콜과 같은 데이터 통신 네트워크의 컨텍스트에서 옥텟 직렬화 된 데이터의 패킷을 조작하는 데 사용되는 핵심 구조입니다.

요약

LwIP 기반 환경에서이 클래스는 해당 라이브러리에 정의 된 pbuf 구조 위에 빌드됩니다. LwIP가없는 경우 Weave는 malloc 기반 구현 또는 딥 임베디드 장치의 메모리 문제에 근접한 풀 기반 구현을 제공합니다.

PacketBuffer 클래스는 계층화 된 네트워크 스택에서 사용되는 많은 유사한 구조와 마찬가지로 구성 가능한 통신 스택의 각 계층에서 프로토콜 헤더를위한 공간을 예약하는 메커니즘을 제공합니다. 자세한 내용은 PacketBuffer::New() 및 LwIP 설명서를 참조하십시오.

PacketBuffer 객체는 참조 횟수가 계산되며 Weave 내에서 널리 사용되는 사용 모드는 "fire-and-forget"입니다. 패킷 (및 기본 PacketBuffer 객체)이 다양한 프로토콜 계층을 통해 발송되므로 계층 간의 성공적인 상향 호출 또는 하향 호출은 소유권 이전을 의미하며 수신자는 버퍼를 해제해야합니다. 계층 간 호출이 실패하면 버퍼를 해제하는 책임은 호출자에게 있습니다.

PacketBuffer 클래스의 새 개체는 내부 버퍼 풀에서 표준 C 라이브러리 힙의 LwIP pbuf 대상 풀과 같은 기본 환경에서 얻은 메모리 할당의 시작 부분에 초기화됩니다. 간단한 경우 데이터 버퍼의 크기는 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)
페이로드에 기본 예약 크기 ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE )를 사용하여 기본 최대 크기 ( WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX )의 단일 PacketBuffer 를 할당합니다.
New (uint16_t aReservedSize)
특정 헤더 예약 크기로 최대 총 크기의 단일 PacketBuffer 를 할당합니다.
NewWithAvailableSize (size_t aAvailableSize)
헤더의 페이로드에 기본 예약 크기 ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE )로 PacketBuffer 를 할당하고 초기 커서 포인터 이후의 추가 데이터를 위해 최소 aAllocSize 바이트 공간을 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 

버퍼의 데이터 시작 포인터를 가져옵니다.

세부
보고
데이터 시작을 가리키는 포인터.

총 길이

uint16_t TotalLength(
  void
) const 

버퍼 체인에있는 패킷 데이터의 총 길이를 가져옵니다.

세부
보고
총 길이 (옥텟).

공개 정적 함수

비어 있는

void Free(
  PacketBuffer *aPacket
)

체인의 모든 패킷 버퍼를 해제합니다.

현재 체인의 모든 버퍼에 대한 참조 횟수를 줄입니다. 참조 횟수가 0에 도달하면 각 버퍼가 해제되거나 적절하게 할당 풀로 반환됩니다. 일반적으로 사용자는이 메서드를 free() 함수와 동일하게 취급해야하며 호출 후 인수를 사용하지 않아야합니다.

세부
매개 변수
[in] aPacket
-해제 할 패킷 버퍼.

프리 헤드

PacketBuffer * FreeHead(
  PacketBuffer *aPacket
)

체인의 첫 번째 버퍼를 해제하고 나머지 버퍼에 대한 포인터를 반환합니다.

* @note When the buffer chain is referenced by multiple callers, FreeHead () `는 헤드를 분리하지만 헤드 버퍼를 강제로 할당 해제하지는 않습니다.

세부
매개 변수
[in] aPacket
-버퍼 체인.
보고
입력 버퍼의 꼬리로 구성된 패킷 버퍼 체인 ( NULL 일 수 있음).

새로운

PacketBuffer * New(
  void
)

페이로드에 기본 예약 크기 ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE )를 사용하여 기본 최대 크기 ( WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX )의 단일 PacketBuffer 를 할당합니다.

예약 된 크기 ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE )는 WeaveMessageLayerWeaveExchangeLayer 필요한 헤더뿐만 아니라 전송 계층 헤더를 보유하기에 충분히 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
)

헤더의 페이로드에 기본 예약 크기 ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE )로 PacketBuffer 를 할당하고 초기 커서 포인터 이후의 추가 데이터에 대해 최소 aAllocSize 바이트 공간을 aAllocSize 합니다.

이 사용법은 애플리케이션 계층 메시지에 대한 PacketBuffer 를 할당 할 때 가장 적합합니다.

세부
매개 변수
[in] aAvailableSize
커서 뒤에 할당 할 옥텟 수입니다.
보고
성공시 할당 된 블록의 PacketBuffer 에 대한 포인터. 실패시 NULL . *

NewWithAvailableSize

PacketBuffer * NewWithAvailableSize(
  uint16_t aReservedSize,
  size_t aAvailableSize
)

를 할당은 PacketBuffer의 이상과 목적 aReservedSize 헤더의 페이로드에 예약하고, 적어도 바이트 aAllocSize 초기 커서 포인터 후 추가 데이터 공간의 바이트.

세부
매개 변수
[in] aReservedSize
커서 뒤에 예약 할 옥텟 수입니다.
[in] aAvailableSize
커서 뒤에 할당 할 옥텟 수입니다.
보고
성공시 할당 된 블록의 PacketBuffer 에 대한 포인터. 실패시 NULL .

맞는 치수

PacketBuffer * RightSize(
  PacketBuffer *aPacket
)

해당되는 경우 주어진 버퍼를 올바른 크기의 버퍼에 복사합니다.

이 함수는 소켓에 대해 작동하지 않습니다.

세부
매개 변수
[in] aPacket
-버퍼 또는 버퍼 체인.
보고
새 패킷 버퍼 또는 원래 버퍼