Abstracciones de TCP
Este módulo incluye abstracciones fáciles de usar sobre la API de TCP base.
Resumen
Enumeraciones |
|
---|---|
anonymous enum
|
Enum Esta enumeración define las marcas que se pasan a otTcpCircularSendBufferWrite . |
Typedefs |
|
---|---|
otTcpCircularSendBuffer
|
typedefstruct otTcpCircularSendBuffer
Esta estructura representa un búfer de envío circular para usar con un extremo TCP. |
Funciones |
|
---|---|
otTcpCircularSendBufferDeinitialize(otTcpCircularSendBuffer *aSendBuffer)
|
Anula la inicialización de un búfer de envío circular TCP, desvinculándolo si está conectado.
|
otTcpCircularSendBufferForceDiscardAll(otTcpCircularSendBuffer *aSendBuffer)
|
void
Se fuerza la eliminación de todos los datos del búfer de envío circular.
|
otTcpCircularSendBufferGetFreeSpace(const otTcpCircularSendBuffer *aSendBuffer)
|
size_t
Muestra la cantidad de espacio libre en el búfer de envío circular TCP.
|
otTcpCircularSendBufferHandleForwardProgress(otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer)
|
void
Realiza el manejo específico del búfer de envío circular en la devolución de llamada otTcpForwardProgress.
|
otTcpCircularSendBufferInitialize(otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity)
|
void
Inicializa un búfer de envío circular TCP.
|
otTcpCircularSendBufferWrite(otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags)
|
Envía datos en un extremo TCP, mediante el búfer de envío circular TCP proporcionado para administrar el almacenamiento en búfer.
|
Structs |
|
---|---|
otTcpCircularSendBuffer |
Esta estructura representa un búfer de envío circular para usar con un extremo TCP. |
Enumeraciones
enumeración anónima
anonymous enum
Esta enumeración define las marcas que se pasan a otTcpCircularSendBufferWrite
.
Typedefs
otTcpCircularSendBuffer
struct otTcpCircularSendBuffer otTcpCircularSendBuffer
Esta estructura representa un búfer de envío circular para usar con un extremo TCP.
Usar un búfer de envío circular es opcional. Las aplicaciones pueden usar un extremo TCP para enviar datos mediante la administración directa de otLinkedBuffers. Sin embargo, para algunas aplicaciones puede resultar más conveniente tener un búfer de envío circular. Esas aplicaciones pueden llamar a otTcpCircularSendBufferWrite() para & adjuntar un búfer de envío circular a un extremo de TCP y enviar datos en ese extremo de TCP, que dependen del búfer de envío circular para administrar los otLinkedBuffers subyacentes.
otTcpCircularSendBuffer se implementa sobre la API basada en otLinkedBuffer que proporciona un otTcpEndpoint. Una vez conectado a un otTcpEndpoint, un otTcpCircularSendBuffer realiza todo el trabajo de administrar otLinkedBuffers para la conexión. Esto significa que, una vez que se adjunta un otTcpCircularSendBuffer a un otTcpEndpoint, la aplicación no debe llamar a otTcpSendByReference() ni a otTcpSendByExtension() en ese otTcpEndpoint. En cambio, la aplicación debe usar otTcpCircularSendBufferWrite() para agregar datos al búfer de envío.
La devolución de llamada otTcpForwardProgress() es la forma prevista para que los usuarios sepan cuándo hay espacio disponible en el búfer de envío circular. En un otTcpEndpoint al que se adjuntó un otTcpCircularSendBuffer, la aplicación DEBE instalar una devolución de llamada otTcpForwardProgress() y llamar a otTcpCircularSendBufferHandleForwardProgress() en el otTcpCircularSendBuffer al inicio de la función de devolución de llamada. Se recomienda que el usuario NO instale una devolución de llamada otTcpSendDone(), ya que el búfer de envío circular maneja la administración de otLinkedBuffers.
La aplicación no debe inspeccionar los campos de esta estructura directamente; solo debe interactuar con ella a través de las funciones de la API de búfer de envío circular de TCP cuya firma se proporciona en este archivo.
Funciones
otTcpCircularSendBufferDeinitialize
otError otTcpCircularSendBufferDeinitialize( otTcpCircularSendBuffer *aSendBuffer )
Anula la inicialización de un búfer de envío circular TCP, desvinculándolo si está conectado.
Si el búfer de envío circular de TCP no está vacío, esta operación fallará.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores de retorno |
|
otTcpCircularSendBufferForceDescartarTodos
void otTcpCircularSendBufferForceDiscardAll( otTcpCircularSendBuffer *aSendBuffer )
Se fuerza la eliminación de todos los datos del búfer de envío circular.
Se espera que la aplicación llame a esta función cuando una conexión TCP se cierre de forma involuntaria (p.ej., si la aplicación llama a otTcpEndpointAbort() o se le informa de un restablecimiento a través de la devolución de llamada otTcpConnectionLost()).
Llamar a esta función en un búfer de envío circular de TCP no vacío conectado a un extremo de TCP da como resultado un comportamiento indefinido.
Detalles | |||
---|---|---|---|
Parámetros |
|
otTcpCircularSendBufferGetFreeSpace
size_t otTcpCircularSendBufferGetFreeSpace( const otTcpCircularSendBuffer *aSendBuffer )
Muestra la cantidad de espacio libre en el búfer de envío circular TCP.
Esta operación siempre tendrá éxito.
Detalles | |||
---|---|---|---|
Parámetros |
|
||
Qué muestra |
La cantidad de espacio libre en el búfer de envío.
|
otTcpCircularSendBufferHandleForwardProgress
void otTcpCircularSendBufferHandleForwardProgress( otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer )
Realiza el manejo específico del búfer de envío circular en la devolución de llamada otTcpForwardProgress.
Se espera que la aplicación instale una devolución de llamada otTcpForwardProgress() en el otTcpEndpoint y llame a esta función al comienzo de la función de devolución de llamada para el procesamiento específico del búfer de envío circular.
En la función de devolución de llamada, la aplicación puede determinar la cantidad de espacio libre en el búfer de envío circular llamando a otTcpCircularSendBufferFreeSpace(), o comparando aInSendBuffer
con la capacidad de búfer de envío, elegida por el usuario al llamar a otTcpCircularSendBufferInitialize().
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
otTcpCircularSendBufferInitialize
void otTcpCircularSendBufferInitialize( otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity )
Inicializa un búfer de envío circular TCP.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
otTcpCircularSendBufferWrite
otError otTcpCircularSendBufferWrite( otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags )
Envía datos en un extremo TCP, mediante el búfer de envío circular TCP proporcionado para administrar el almacenamiento en búfer.
Una vez que se llama a esta función, aSendBuffer
y aEndpoint
se consideran vinculadas entre sí. Mientras estén adjuntos, TODAS las operaciones de envío de aEndpoint
deben realizarse con aSendBuffer
, y TODAS las operaciones de aSendBuffer
deben asociarse con aEndpoint
.
La única forma de &separar un búfer de envío circular de TCP y un extremo de TCP es esperar a que el búfer de envío se vacíe por completo. Esto puede suceder de dos maneras: (1) todos los datos en el búfer de envío se envían y se confirman en el curso normal del funcionamiento del protocolo TCP, o (2) la conexión se termina.
El patrón de uso recomendado es usar un solo búfer de envío circular TCP con un extremo TCP y enviar datos en ese extremo TCP solo a través de su búfer circular TCP asociado. Este patrón de uso recomendado evita los problemas descritos anteriormente, ya que siempre usa un extremo de TCP y un búfer de envío circular de TCP juntos.
Si el búfer de envío circular alcanza la capacidad, solo un prefijo de los datos proporcionados se copia en el búfer de envío circular.
Detalles | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||||||
Qué muestra |
OT_ERROR_NONE Se copiaron correctamente los datos en el búfer de envío y se enviaron al extremo TCP.
|
||||||||||||
Qué muestra |
OT_ERROR_FAILED No se pudieron enviar los datos en el extremo TCP.
|
Recursos
Los temas de referencia de la API de OpenThread se originan a partir del código fuente, disponible en GitHub. Para obtener más información o contribuir con nuestra documentación, consulta Recursos.