Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

nl :: Tejido:: Sistema:: PacketBuffer

#include <src/system/SystemPacketBuffer.h>

La clase de búfer de paquetes es la estructura central utilizada para manipular paquetes de datos serializados en octetos, generalmente en el contexto de una red de comunicaciones de datos, como Bluetooth o el protocolo de Internet.

Resumen

En entornos basados ​​en LwIP, esta clase se construye sobre la estructura pbuf definida en esa biblioteca. En ausencia de LwIP, Weave proporciona una implementación basada en malloc o una implementación basada en pool que se aproxima mucho a los desafíos de memoria de los dispositivos profundamente integrados.

La clase PacketBuffer , como muchas estructuras similares utilizadas en pilas de red en capas, proporciona un mecanismo para reservar espacio para los encabezados de protocolo en cada capa de una pila de comunicación configurable. Para obtener más información, consulte PacketBuffer::New() y la documentación de LwIP.

Los objetos PacketBuffer se cuentan por referencias y el modo de uso predominante dentro de Weave es "disparar y olvidar". A medida que el paquete (y su objeto PacketBuffer subyacente) se envía a través de varias capas de protocolo, la llamada ascendente o descendente exitosa entre capas implica la transferencia de propiedad y el destinatario de la llamada es responsable de liberar el búfer. En caso de falla de una llamada entre capas, la responsabilidad de liberar el búfer recae en la persona que llama.

Los nuevos objetos de la clase PacketBuffer se inicializan al comienzo de una asignación de memoria obtenida del entorno subyacente, por ejemplo, de los grupos de destino LwIP pbuf, del montón de bibliotecas C estándar, de un grupo de búfer interno. En el caso simple, el tamaño del búfer de datos es WEAVE_SYSTEM_PACKETBUFFER_SIZE . Se proporciona un compositor que permite el uso de búferes de datos de otros tamaños.

Los objetos PacketBuffer se pueden encadenar para adaptarse a cargas útiles más grandes. Sin embargo, el encadenamiento no es transparente y los usuarios de la clase deben decidir explícitamente si admiten el encadenamiento. Los ejemplos de clases escritas con soporte de encadenamiento son los siguientes:

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

Herencia

Hereda de: pbuf

Funciones publicas

AddRef (void)
void
Incrementa el recuento de referencia del búfer actual.
AddToEnd ( PacketBuffer *aPacket)
void
Agregue el búfer de paquetes dado al final de la cadena de búfer, ajustando la longitud total de cada búfer en la cadena en consecuencia.
AlignPayload (uint16_t aAlignBytes)
bool
Alinee la carga útil del búfer en el límite de bytes especificado.
AllocSize (void) const
size_t
Devuelve el tamaño de la asignación, incluidos los espacios de datos reservados y de carga útil, pero sin incluir el espacio asignado para la estructura PacketBuffer .
AvailableDataLength (void) const
uint16_t
Obtenga el número de bytes de datos que se pueden agregar al búfer actual dada la posición de inicio actual y la longitud de los datos.
CompactHead (void)
void
Mueva los datos de los búferes posteriores de la cadena al búfer actual hasta que esté lleno.
Consume (uint16_t aConsumeLength)
Consume datos en una cadena de búferes.
ConsumeHead (uint16_t aConsumeLength)
void
Ajuste el búfer actual para indicar la cantidad de datos consumidos.
DataLength (void) const
uint16_t
Obtiene la longitud, en bytes, de los datos en el búfer de paquetes.
DetachTail (void)
Desconecte el búfer actual de su cadena y devuelva un puntero a los búferes restantes.
EnsureReservedSize (uint16_t aReservedSize)
bool
Asegúrese de que el búfer tenga al menos la cantidad especificada de espacio reservado.
MaxDataLength (void) const
uint16_t
Obtenga la cantidad máxima, en bytes, de datos que cabrán en el búfer dada la posición de inicio actual y el tamaño del búfer.
Next (void) const
Obtiene el puntero al siguiente búfer de la cadena.
ReservedSize (void) const
uint16_t
Obtiene el número de bytes dentro del búfer actual entre el inicio del búfer y la posición de inicio de datos actual.
SetDataLength (uint16_t aNewLen, PacketBuffer *aChainHead)
void
Establezca la longitud, en bytes, de los datos en el búfer, ajustando la longitud total en consecuencia.
SetStart (uint8_t *aNewStart)
void
Establezca los datos de inicio en el búfer, ajustando la longitud y la longitud total en consecuencia.
Start (void) const
uint8_t *
Obtiene el puntero al inicio de los datos en el búfer.
TotalLength (void) const
uint16_t
Obtenga la longitud total de los paquetes de datos en la cadena de búfer.

Funciones estáticas públicas

Free ( PacketBuffer *aPacket)
void
Libera todos los búferes de paquetes de una cadena.
FreeHead ( PacketBuffer *aPacket)
Libera el primer búfer de una cadena y devuelve un puntero a los búferes restantes.
New (void)
Asigna un solo PacketBuffer del tamaño máximo predeterminado ( WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX ) con el tamaño reservado predeterminado ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE ) en la carga útil.
New (uint16_t aReservedSize)
Asigna un solo PacketBuffer de tamaño total máximo con un tamaño de reserva de encabezado específico.
NewWithAvailableSize (size_t aAvailableSize)
Asigna un PacketBuffer con un tamaño reservado predeterminado ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE ) en la carga útil para los encabezados y al menos aAllocSize bytes de espacio para datos adicionales después del puntero del cursor inicial.
NewWithAvailableSize (uint16_t aReservedSize, size_t aAvailableSize)
Asigna un objeto PacketBuffer con al menos aReservedSize bytes reservados en la carga útil para los encabezados, y al menos aAllocSize bytes de espacio para datos adicionales después del puntero del cursor inicial.
RightSize ( PacketBuffer *aPacket)
Copie el búfer dado en un búfer de tamaño adecuado si corresponde.

Funciones publicas

AddRef

void AddRef(
  void
)

Incrementa el recuento de referencia del búfer actual.

AddToEnd

void AddToEnd(
  PacketBuffer *aPacket
)

Agregue el búfer de paquetes dado al final de la cadena de búfer, ajustando la longitud total de cada búfer en la cadena en consecuencia.

Detalles
Parámetros
[in] aPacket
- el búfer de paquetes que se agregará al final de la cadena actual.

AlignPayload

bool AlignPayload(
  uint16_t aAlignBytes
)

Alinee la carga útil del búfer en el límite de bytes especificado.

Moviendo la carga útil en el búfer hacia adelante si es necesario.

Detalles
Parámetros
[in] aAlignBytes
- especifica el número de bytes de alineación para el puntero de inicio de la carga útil.
Devoluciones
true si la alineación es exitosa, false si no hay suficiente espacio en el búfer.

AllocSize

size_t AllocSize(
  void
) const 

Devuelve el tamaño de la asignación, incluidos los espacios de datos reservados y de carga útil, pero sin incluir el espacio asignado para la estructura PacketBuffer .

Detalles
Devoluciones
tamaño de la asignación

AvailableDataLength

uint16_t AvailableDataLength(
  void
) const 

Obtenga el número de bytes de datos que se pueden agregar al búfer actual dada la posición de inicio actual y la longitud de los datos.

Detalles
Devoluciones
la longitud, en bytes, de los datos que cabrán en el búfer actual dada la posición de inicio actual y la longitud de los datos.

CompactHead

void CompactHead(
  void
)

Mueva los datos de los búferes posteriores de la cadena al búfer actual hasta que esté lleno.

Solo se compacta el búfer actual: los datos dentro del búfer actual se mueven al frente del búfer, eliminando cualquier espacio reservado. El espacio disponible restante se llena con los datos que se mueven desde los búferes posteriores de la cadena, hasta que se llena el búfer actual. Si un búfer posterior de la cadena se mueve al búfer actual en su totalidad, se elimina de la cadena y se libera. El método no toma parámetros, no devuelve resultados y no puede fallar.

Consumir

PacketBuffer * Consume(
  uint16_t aConsumeLength
)

Consume datos en una cadena de búferes.

Consumir datos en una cadena de búferes comenzando con el búfer actual y siguiendo con los búferes restantes de la cadena. Cada búfer que se consume por completo se libera y la función devuelve el primer búfer (si lo hay) que contiene los datos restantes. El búfer actual debe ser el jefe de la cadena de búfer.

Detalles
Parámetros
[in] aConsumeLength
- número de bytes a consumir de la cadena actual.
Devoluciones
el primer búfer de la cadena actual que contiene los datos restantes. Si no quedan datos, se devuelve un NULL.

ConsumeHead

void ConsumeHead(
  uint16_t aConsumeLength
)

Ajuste el búfer actual para indicar la cantidad de datos consumidos.

Avance la posición de inicio de datos en el búfer actual en la cantidad especificada, en bytes, hasta la longitud de los datos en el búfer. Disminuya la longitud y la longitud total por la cantidad consumida.

Detalles
Parámetros
[in] aConsumeLen
- número de bytes a consumir del búfer actual.

Longitud de datos

uint16_t DataLength(
  void
) const 

Obtiene la longitud, en bytes, de los datos en el búfer de paquetes.

Detalles
Devoluciones
longitud, en bytes (longitud de carga útil actual).

Separar Cola

PacketBuffer * DetachTail(
  void
)

Desconecte el búfer actual de su cadena y devuelva un puntero a los búferes restantes.

El búfer actual debe ser el jefe de la cadena.

Detalles
Devoluciones
la cola de la cadena de búfer actual o NULL si el búfer actual es el único búfer de la cadena.

AsegureReservedSize

bool EnsureReservedSize(
  uint16_t aReservedSize
)

Asegúrese de que el búfer tenga al menos la cantidad especificada de espacio reservado.

Asegúrese de que el búfer tenga al menos la cantidad especificada de espacio reservado moviendo los datos en el búfer hacia adelante para hacer espacio si es necesario.

Detalles
Parámetros
[in] aReservedSize
- número de bytes deseados para los encabezados.
Devoluciones
true si el tamaño reservado solicitado está disponible, false si no hay suficiente espacio en el búfer.

MaxDataLength

uint16_t MaxDataLength(
  void
) const 

Obtenga la cantidad máxima, en bytes, de datos que cabrán en el búfer dada la posición de inicio actual y el tamaño del búfer.

Detalles
Devoluciones
número de bytes que cabe en el búfer dada la posición de inicio actual.

próximo

PacketBuffer * Next(
  void
) const 

Obtiene el puntero al siguiente búfer de la cadena.

Detalles
Devoluciones
un puntero al siguiente búfer de la cadena. Se devuelve NULL cuando no hay búferes en la cadena.

ReservedSize

uint16_t ReservedSize(
  void
) const 

Obtiene el número de bytes dentro del búfer actual entre el inicio del búfer y la posición de inicio de datos actual.

Detalles
Devoluciones
la cantidad, en bytes, de espacio entre el inicio del búfer y la posición actual de inicio de los datos.

SetDataLength

void SetDataLength(
  uint16_t aNewLen,
  PacketBuffer *aChainHead
)

Establezca la longitud, en bytes, de los datos en el búfer, ajustando la longitud total en consecuencia.

La función establece la longitud, en bytes, de los datos en el búfer, ajustando la longitud total apropiadamente. Cuando el búfer no es el encabezado de la cadena de búfer (caso común: la persona que llama agrega datos al último búfer en la cadena PacketBuffer antes de llamar a las capas superiores), se debe pasar aChainHead para ajustar correctamente las longitudes totales de cada búfer adelante del búfer actual.

Detalles
Parámetros
[in] aNewLen
- nueva longitud, en bytes, de este búfer.
[in,out] aChainHead
- la cabecera de la cadena de búfer a la que pertenece el búfer actual. Puede ser NULL si el búfer actual es el encabezado de la cadena de búfer.

Seleccione arranque

void SetStart(
  uint8_t *aNewStart
)

Establezca los datos de inicio en el búfer, ajustando la longitud y la longitud total en consecuencia.

Detalles
Parámetros
[in] aNewStart
- Un puntero al lugar donde debe comenzar la nueva carga útil. newStart se ajustará internamente para caer dentro de los límites del primer búfer en la cadena PacketBuffer .

Comienzo

uint8_t * Start(
  void
) const 

Obtiene el puntero al inicio de los datos en el búfer.

Detalles
Devoluciones
puntero al inicio de los datos.

Largo total

uint16_t TotalLength(
  void
) const 

Obtenga la longitud total de los paquetes de datos en la cadena de búfer.

Detalles
Devoluciones
longitud total, en octetos.

Funciones estáticas públicas

Libre

void Free(
  PacketBuffer *aPacket
)

Libera todos los búferes de paquetes de una cadena.

Disminuya el recuento de referencias a todos los búferes de la cadena actual. Si el recuento de referencias llega a 0, los búferes respectivos se liberan o se devuelven a los grupos de asignación según corresponda. Como regla general, los usuarios deben tratar este método como un equivalente de free() función free() y no usar el argumento después de la llamada.

Detalles
Parámetros
[in] aPacket
- búfer de paquetes a liberar.

FreeHead

PacketBuffer * FreeHead(
  PacketBuffer *aPacket
)

Libera el primer búfer de una cadena y devuelve un puntero a los búferes restantes.

* @note When the buffer chain is referenced by multiple callers, FreeHead () `separará el encabezado, pero no desasignará a la fuerza el búfer de encabezado.

Detalles
Parámetros
[in] aPacket
- cadena tampón.
Devoluciones
cadena de búfer de paquetes que consta de la cola del búfer de entrada (puede ser NULL ).

Nuevo

PacketBuffer * New(
  void
)

Asigna un solo PacketBuffer del tamaño máximo predeterminado ( WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX ) con el tamaño reservado predeterminado ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE ) en la carga útil.

El tamaño reservado ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE ) es lo suficientemente grande para contener los encabezados de la capa de transporte, así como los encabezados requeridos por WeaveMessageLayer y WeaveExchangeLayer .

Nuevo

PacketBuffer * New(
  uint16_t aReservedSize
)

Asigna un solo PacketBuffer de tamaño total máximo con un tamaño de reserva de encabezado específico.

El parámetro pasado es el tamaño reservado antes de la carga útil para acomodar encabezados de paquetes de diferentes capas de pila, no el tamaño total del búfer para asignar. El tamaño del búfer WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX y no, especificado en la llamada.

  • PacketBuffer::New(0) : cuando se llama de esta manera, el búfer se devolverá sin ningún encabezado reservado, por lo que el llamador puede utilizar toda la carga útil. Este patrón es particularmente útil en las capas inferiores de las pilas de redes, en los casos en que el usuario sabe que la carga útil se copiará en el mensaje final con las reservas de encabezado adecuadas o al crear PacketBuffer que se adjunta a una cadena de PacketBuffer a través de PacketBuffer::AddToEnd() . Parámetros
    [in] aReservedSize
    cantidad de espacio de encabezado para reservar.
    Devoluciones
    En caso de éxito, un puntero al PacketBuffer , en caso de error NULL .

NewWithAvailableSize

PacketBuffer * NewWithAvailableSize(
  size_t aAvailableSize
)

Asigna un PacketBuffer con un tamaño reservado predeterminado ( WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE ) en la carga útil para los encabezados y al menos aAllocSize bytes de espacio para datos adicionales después del puntero del cursor inicial.

Este uso es más apropiado cuando se asigna un PacketBuffer para un mensaje de capa de aplicación.

Detalles
Parámetros
[in] aAvailableSize
Número de octetos para asignar después del cursor.
Devoluciones
En caso de éxito, un puntero al PacketBuffer en el bloque asignado. Si falla, NULL . *

NewWithAvailableSize

PacketBuffer * NewWithAvailableSize(
  uint16_t aReservedSize,
  size_t aAvailableSize
)

Asigna un objeto PacketBuffer con al menos aReservedSize bytes reservados en la carga útil para los encabezados, y al menos aAllocSize bytes de espacio para datos adicionales después del puntero del cursor inicial.

Detalles
Parámetros
[in] aReservedSize
Número de octetos para reservar detrás del cursor.
[in] aAvailableSize
Número de octetos para asignar después del cursor.
Devoluciones
En caso de éxito, un puntero al PacketBuffer en el bloque asignado. Si falla, NULL .

Talla correcta

PacketBuffer * RightSize(
  PacketBuffer *aPacket
)

Copie el búfer dado en un búfer de tamaño adecuado si corresponde.

Esta función no es operativa para los enchufes.

Detalles
Parámetros
[in] aPacket
- tampón o cadena tampón.
Devoluciones
nuevo búfer de paquetes o el búfer original