O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

nl :: Tecer:: Sistema:: PacketBuffer

#include <src/system/SystemPacketBuffer.h>

A classe de buffer de pacote é a estrutura central usada para manipular pacotes de dados serializados por octeto, geralmente no contexto de uma rede de comunicação de dados, como Bluetooth ou o protocolo da Internet.

Resumo

Em ambientes baseados em LwIP, esta classe é construída sobre a estrutura pbuf definida nessa biblioteca. Na ausência de LwIP, o Weave fornece uma implementação baseada em malloc ou uma implementação baseada em pool que se aproxima muito dos desafios de memória de dispositivos profundamente integrados.

O PacketBuffer classe, como muitas estruturas semelhantes utilizadas em pilhas de rede em camadas, fornecer um mecanismo para reservar espaço para os cabeçalhos de protocolo em cada camada de uma pilha de comunicação configurável. Para mais detalhes, consulte PacketBuffer::New() , bem como a documentação lwIP.

PacketBuffer objetos são contados-referência eo modo de utilização predominante dentro Weave é "fogo-e-esqueça". À medida que o pacote (e sua subjacente PacketBuffer objecto) é enviado através de várias camadas de protocolo, o sucesso ou upcall downcall entre camadas implica a transferência de propriedade, e o receptor é responsável pela libertação do tampão. Em caso de falha de uma chamada de camada cruzada, a responsabilidade de liberar o buffer recai sobre o chamador.

Novos objectos de PacketBuffer classe são inicializados no começo de uma alocação de memória obtido a partir do ambiente subjacente, por exemplo a partir de lwIP pBuf pools de destino, a partir da pilha biblioteca C padrão, a partir de um conjunto de memória intermédia interna. No caso simples, o tamanho da memória tampão de dados é WEAVE_SYSTEM_PACKETBUFFER_SIZE . É fornecido um compositor que permite o uso de buffers de dados de outros tamanhos.

PacketBuffer objetos podem ser encadeados para acomodar cargas maiores. O encadeamento, no entanto, não é transparente e os usuários da classe devem decidir explicitamente oferecer suporte ao encadeamento. Exemplos de classes escritas com o encadeamento de apoio são as seguintes:

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

Herança

Herda: pBuf

Funções públicas

AddRef (void)
void
Aumente a contagem de referência do buffer atual.
AddToEnd ( PacketBuffer *aPacket)
void
Adicione o buffer de pacote fornecido ao final da cadeia de buffer, ajustando o comprimento total de cada buffer na cadeia de acordo.
AlignPayload (uint16_t aAlignBytes)
bool
Alinha a carga útil do buffer no limite de bytes especificado.
AllocSize (void) const
size_t
Devolver o tamanho da alocação incluindo os espaços de dados reservados e de carga útil, mas sem incluir o espaço alocado para o PacketBuffer estrutura.
AvailableDataLength (void) const
uint16_t
Obtenha o número de bytes de dados que podem ser adicionados ao buffer atual, considerando a posição inicial atual e o comprimento dos dados.
CompactHead (void)
void
Mova os dados de buffers subsequentes na cadeia para o buffer atual até que esteja cheio.
Consume (uint16_t aConsumeLength)
Consumir dados em uma cadeia de buffers.
ConsumeHead (uint16_t aConsumeLength)
void
Ajuste o buffer atual para indicar a quantidade de dados consumidos.
DataLength (void) const
uint16_t
Obtenha o comprimento, em bytes, dos dados no buffer de pacotes.
DetachTail (void)
Desanexe o buffer atual de sua cadeia e retorne um ponteiro para os buffers restantes.
EnsureReservedSize (uint16_t aReservedSize)
bool
Certifique-se de que o buffer tenha pelo menos a quantidade especificada de espaço reservado.
MaxDataLength (void) const
uint16_t
Obtenha a quantidade máxima, em bytes, de dados que caberão no buffer de acordo com a posição inicial atual e o tamanho do buffer.
Next (void) const
Obtém o ponteiro para o próximo buffer na cadeia.
ReservedSize (void) const
uint16_t
Obtenha o número de bytes dentro do buffer atual entre o início do buffer e a posição inicial dos dados atuais.
SetDataLength (uint16_t aNewLen, PacketBuffer *aChainHead)
void
Defina o comprimento, em bytes, dos dados no buffer, ajustando o comprimento total de acordo.
SetStart (uint8_t *aNewStart)
void
Defina os dados iniciais no buffer, ajustando o comprimento e o comprimento total de acordo.
Start (void) const
uint8_t *
Obtém o ponteiro para o início dos dados no buffer.
TotalLength (void) const
uint16_t
Obtenha o comprimento total dos dados do pacote na cadeia de buffer.

Funções estáticas públicas

Free ( PacketBuffer *aPacket)
void
Libere todos os buffers de pacotes em uma cadeia.
FreeHead ( PacketBuffer *aPacket)
Libere o primeiro buffer em uma cadeia, retornando um ponteiro para os buffers restantes.
New (void)
Aloca um único PacketBuffer de tamanho máximo padrão ( WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX ) com padrão tamanho reservados ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE ) na carga útil.
New (uint16_t aReservedSize)
Atribui um único PacketBuffer de tamanho total máxima com um tamanho de reserva cabeçalho específico.
NewWithAvailableSize (size_t aAvailableSize)
Aloca um PacketBuffer com tamanho padrão reservados ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE ) na carga útil para cabeçalhos, e, pelo menos, aAllocSize bytes de espaço para dados adicionais após o ponteiro inicial do cursor.
NewWithAvailableSize (uint16_t aReservedSize, size_t aAvailableSize)
Aloca um PacketBuffer objecto com pelo menos aReservedSize bytes reservados na carga útil para cabeçalhos, e, pelo menos, aAllocSize bytes de espaço para dados adicionais após o ponteiro inicial do cursor.
RightSize ( PacketBuffer *aPacket)
Copie o buffer fornecido para um buffer de tamanho correto, se aplicável.

Funções públicas

AddRef

void AddRef(
  void
)

Aumente a contagem de referência do buffer atual.

AddToEnd

void AddToEnd(
  PacketBuffer *aPacket
)

Adicione o buffer de pacote fornecido ao final da cadeia de buffer, ajustando o comprimento total de cada buffer na cadeia de acordo.

Detalhes
Parâmetros
[in] aPacket
- o buffer de pacote a ser adicionado ao final da cadeia atual.

AlignPayload

bool AlignPayload(
  uint16_t aAlignBytes
)

Alinha a carga útil do buffer no limite de bytes especificado.

Movendo a carga útil no buffer para frente, se necessário.

Detalhes
Parâmetros
[in] aAlignBytes
- especifica o número de alinhamento de bytes para o ponteiro de início de carga útil.
Devoluções
true se o alinhamento for bem sucedida, false se não há espaço suficiente no buffer.

AllocSize

size_t AllocSize(
  void
) const 

Devolver o tamanho da alocação incluindo os espaços de dados reservados e de carga útil, mas sem incluir o espaço alocado para o PacketBuffer estrutura.

Detalhes
Devoluções
tamanho da alocação

AvailableDataLength

uint16_t AvailableDataLength(
  void
) const 

Obtenha o número de bytes de dados que podem ser adicionados ao buffer atual, considerando a posição inicial atual e o comprimento dos dados.

Detalhes
Devoluções
o comprimento, em bytes, dos dados que caberão no buffer atual, considerando a posição inicial atual e o comprimento dos dados.

CompactHead

void CompactHead(
  void
)

Mova os dados de buffers subsequentes na cadeia para o buffer atual até que esteja cheio.

Apenas o buffer atual é compactado: os dados dentro do buffer atual são movidos para a frente do buffer, eliminando qualquer espaço reservado. O espaço disponível restante é preenchido com dados movidos de buffers subsequentes na cadeia, até que o buffer atual esteja cheio. Se um buffer subsequente na cadeia for movido para o buffer atual em sua totalidade, ele será removido da cadeia e liberado. O método não aceita parâmetros, não retorna resultados e não pode falhar.

Consumir

PacketBuffer * Consume(
  uint16_t aConsumeLength
)

Consumir dados em uma cadeia de buffers.

Consumir dados em uma cadeia de buffers, começando com o buffer atual e continuando pelos buffers restantes na cadeia. Cada buffer que é completamente consumido é liberado e a função retorna o primeiro buffer (se houver) contendo os dados restantes. O buffer atual deve ser o chefe da cadeia de buffer.

Detalhes
Parâmetros
[in] aConsumeLength
- número de bytes a consumir da corrente atual.
Devoluções
o primeiro buffer da cadeia atual que contém todos os dados restantes. Se nenhum dado permanecer, um NULL será retornado.

ConsumeHead

void ConsumeHead(
  uint16_t aConsumeLength
)

Ajuste o buffer atual para indicar a quantidade de dados consumidos.

Avança a posição inicial dos dados no buffer atual pela quantidade especificada, em bytes, até o comprimento dos dados no buffer. Diminua o comprimento e o comprimento total pela quantidade consumida.

Detalhes
Parâmetros
[in] aConsumeLen
- número de bytes a consumir do buffer atual.

DataLength

uint16_t DataLength(
  void
) const 

Obtenha o comprimento, em bytes, dos dados no buffer de pacotes.

Detalhes
Devoluções
comprimento, em bytes (comprimento da carga útil atual).

DetachTail

PacketBuffer * DetachTail(
  void
)

Desanexe o buffer atual de sua cadeia e retorne um ponteiro para os buffers restantes.

O buffer atual deve ser o chefe da cadeia.

Detalhes
Devoluções
o final da cadeia de buffer atual ou NULL se o buffer atual for o único buffer da cadeia.

VerifyReservedSize

bool EnsureReservedSize(
  uint16_t aReservedSize
)

Certifique-se de que o buffer tenha pelo menos a quantidade especificada de espaço reservado.

Certifique-se de que o buffer tenha pelo menos a quantidade especificada de espaço reservado, movendo os dados no buffer para frente para liberar espaço, se necessário.

Detalhes
Parâmetros
[in] aReservedSize
- número de bytes desejados para os cabeçalhos.
Devoluções
true se o tamanho reservado solicitada está disponível, false se não há espaço suficiente no buffer.

MaxDataLength

uint16_t MaxDataLength(
  void
) const 

Obtenha a quantidade máxima, em bytes, de dados que caberão no buffer de acordo com a posição inicial atual e o tamanho do buffer.

Detalhes
Devoluções
número de bytes que cabe no buffer dada a posição inicial atual.

Próximo

PacketBuffer * Next(
  void
) const 

Obtém o ponteiro para o próximo buffer na cadeia.

Detalhes
Devoluções
um ponteiro para o próximo buffer na cadeia. NULL é retornado quando não há nenhum buffers na cadeia.

ReservedSize

uint16_t ReservedSize(
  void
) const 

Obtenha o número de bytes dentro do buffer atual entre o início do buffer e a posição inicial dos dados atuais.

Detalhes
Devoluções
a quantidade, em bytes, de espaço entre o início do buffer e a posição inicial dos dados atuais.

SetDataLength

void SetDataLength(
  uint16_t aNewLen,
  PacketBuffer *aChainHead
)

Defina o comprimento, em bytes, dos dados no buffer, ajustando o comprimento total de acordo.

A função define o comprimento, em bytes, dos dados no buffer, ajustando o comprimento total apropriadamente. Quando a memória intermédia não é a cabeça da cadeia tampão (caso comum: o chamador adiciona dados para o último tampão no PacketBuffer cadeia antes da chamada camadas mais elevadas), o aChainHead deve ser transmitido para ajustar adequadamente os comprimentos totais de cada frente tampão do buffer atual.

Detalhes
Parâmetros
[in] aNewLen
- novo comprimento, em bytes, deste buffer.
[in,out] aChainHead
- o chefe da cadeia de buffer à qual o buffer atual pertence. Pode ser NULL se o buffer atual for o cabeça da cadeia de buffer.

SetStart

void SetStart(
  uint8_t *aNewStart
)

Defina os dados iniciais no buffer, ajustando o comprimento e o comprimento total de acordo.

Detalhes
Parâmetros
[in] aNewStart
- Um indicador de onde a nova carga deve começar. NEWSTART será ajustado internamente para cair dentro dos limites do primeiro tampão no PacketBuffer cadeia.

Começar

uint8_t * Start(
  void
) const 

Obtém o ponteiro para o início dos dados no buffer.

Detalhes
Devoluções
ponteiro para o início dos dados.

Comprimento total

uint16_t TotalLength(
  void
) const 

Obtenha o comprimento total dos dados do pacote na cadeia de buffer.

Detalhes
Devoluções
comprimento total, em octetos.

Funções estáticas públicas

Livre

void Free(
  PacketBuffer *aPacket
)

Libere todos os buffers de pacotes em uma cadeia.

Diminua a contagem de referência para todos os buffers na cadeia atual. Se a contagem de referência chegar a 0, os respectivos buffers serão liberados ou retornados aos pools de alocação, conforme apropriado. Como regra, os usuários devem tratar este método como um equivalente de free() função e não usar o argumento após a chamada.

Detalhes
Parâmetros
[in] aPacket
- buffer de pacote a ser liberado.

FreeHead

PacketBuffer * FreeHead(
  PacketBuffer *aPacket
)

Libere o primeiro buffer em uma cadeia, retornando um ponteiro para os buffers restantes.

* @note When the buffer chain is referenced by multiple callers, FreeHead () `irá separar a cabeça, mas não forçosamente desaloque o tampão de cabeça.

Detalhes
Parâmetros
[in] aPacket
- cadeia de amortecimento.
Devoluções
cadeia tampão de pacote que consiste na cauda do buffer de entrada (pode ser NULL ).

Novo

PacketBuffer * New(
  void
)

Aloca um único PacketBuffer de tamanho máximo padrão ( WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX ) com padrão tamanho reservados ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE ) na carga útil.

O tamanho reservado ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE ) é suficientemente grande para cabeçalhos da camada de transporte de preensão, bem como os cabeçalhos necessários por WeaveMessageLayer e WeaveExchangeLayer .

Novo

PacketBuffer * New(
  uint16_t aReservedSize
)

Atribui um único PacketBuffer de tamanho total máxima com um tamanho de reserva cabeçalho específico.

O parâmetro passado é o tamanho reservado antes que a carga de pacote para acomodar cabeçalhos de diferentes camadas da pilha, não o tamanho total da memória intermédia para alocar. O tamanho do buffer WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX e não, especificado na chamada.

  • PacketBuffer::New(0) : quando chamado desta forma, a reserva será devolvido sem qualquer cabeçalho reservados, consequentemente, toda a carga útil é utilizável pelo chamador. Este padrão é particularmente útil para as camadas inferiores de pilhas de rede, nos casos em que o utilizador conhece a carga vai ser copiada para fora para a mensagem de final com reservas de cabeçalho apropriado ou na criação de PacketBuffer que são acrescentados a uma cadeia de PacketBuffer através PacketBuffer::AddToEnd() . Parâmetros
    [in] aReservedSize
    quantidade de espaço do cabeçalho a ser reservada.
    Devoluções
    Em caso de sucesso, um ponteiro para o PacketBuffer , em caso de falha NULL .

NewWithAvailableSize

PacketBuffer * NewWithAvailableSize(
  size_t aAvailableSize
)

Aloca um PacketBuffer com tamanho padrão reservados ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE ) na carga útil para cabeçalhos, e, pelo menos, aAllocSize bytes de espaço para dados adicionais após o ponteiro inicial do cursor.

Esta utilização é mais apropriado quando a atribuição de uma PacketBuffer para uma mensagem de camada de aplicação.

Detalhes
Parâmetros
[in] aAvailableSize
Número de octetos a serem alocados após o cursor.
Devoluções
Em caso de sucesso, um ponteiro para o PacketBuffer no bloco alocado. No falhar, NULL . *

NewWithAvailableSize

PacketBuffer * NewWithAvailableSize(
  uint16_t aReservedSize,
  size_t aAvailableSize
)

Aloca um PacketBuffer objecto com pelo menos aReservedSize bytes reservados na carga útil para cabeçalhos, e, pelo menos, aAllocSize bytes de espaço para dados adicionais após o ponteiro inicial do cursor.

Detalhes
Parâmetros
[in] aReservedSize
Número de octetos a serem reservados atrás do cursor.
[in] aAvailableSize
Número de octetos a serem alocados após o cursor.
Devoluções
Em caso de sucesso, um ponteiro para o PacketBuffer no bloco alocado. No falhar, NULL .

Tamanho certo

PacketBuffer * RightSize(
  PacketBuffer *aPacket
)

Copie o buffer fornecido para um buffer de tamanho correto, se aplicável.

Esta função é autônoma para sockets.

Detalhes
Parâmetros
[in] aPacket
- buffer ou cadeia de buffer.
Devoluções
novo buffer de pacote ou o buffer original