Abstracciones de TCP
En este módulo, se incluyen abstracciones fáciles de usar además de la API de TCP básica.
Resumen
Enumeraciones |
|
---|---|
anonymous enum
|
enum Define las marcas que se pasan a otTcpCircularSendBufferWrite . |
Typedefs |
|
---|---|
otTcpCircularSendBuffer
|
typedefstruct otTcpCircularSendBuffer
Representa un búfer de envío circular para usar con un extremo de TCP. |
otTcpEndpointAndCircularSendBuffer
|
typedef Estructura de contexto para usar con mbedtls_ssl_set_bio. |
remotas |
|
---|---|
otTcpCircularSendBufferDeinitialize(otTcpCircularSendBuffer *aSendBuffer)
|
Anula la inicialización de un búfer de envío circular TCP y lo desconecta si está conectado.
|
otTcpCircularSendBufferForceDiscardAll(otTcpCircularSendBuffer *aSendBuffer)
|
void
Descarta a la fuerza 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 de TCP.
|
otTcpCircularSendBufferHandleForwardProgress(otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer)
|
void
Realiza el control específico de 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 de TCP mediante el búfer de envío circular de TCP proporcionado para administrar el almacenamiento en búfer.
|
otTcpMbedTlsSslRecvCallback(void *aCtx, unsigned char *aBuf, size_t aLen)
|
int
Sin bloqueo, reciben una devolución de llamada para pasar a mbedtls_ssl_set_bio.
|
otTcpMbedTlsSslSendCallback(void *aCtx, const unsigned char *aBuf, size_t aLen)
|
int
Envía una devolución de llamada sin bloqueo para pasar a mbedtls_ssl_set_bio.
|
Structs |
|
---|---|
otTcpCircularSendBuffer |
Representa un búfer de envío circular para usar con un extremo de TCP. |
otTcpEndpointAndCircularSendBuffer |
Estructura de contexto para usar con mbedtls_ssl_set_bio. |
Enumeraciones
enumeración anónima
anonymous enum
Define las marcas que se pasan a otTcpCircularSendBufferWrite
.
Typedefs
otTcpCircularSendBuffer
struct otTcpCircularSendBuffer otTcpCircularSendBuffer
Representa un búfer de envío circular para usar con un extremo de TCP.
El uso de 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, a 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 en función del búfer de envío circular para administrar el otLinkedBuffers subyacentes.
otTcpCircularSendBuffer se implementa sobre la API basada en otLinkedBuffer proporcionada por un otTcpEndpoint. Una vez que se conecta a un otTcpEndpoint, un otTcpCircularSendBuffer realiza todo el trabajo de administración de 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 su lugar, la aplicación debe usar otTcpCircularSendBufferWrite() para agregar datos al búfer de envío.
La devolución de llamada otTcpForwardProgress() es la manera 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 adjunta un otTcpCircularSendBuffer, la aplicación DEBE instalar una devolución de llamada otTcpForwardProgress() y llamar a otTcpCircularSendBufferHandleForwardProgress() en el otTcpCircularSendBuffer adjunto 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 toda la administración de otLinkedBuffers se controla a través del búfer de envío circular.
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 TCP Circular Send Buffer cuya firma se proporciona en este archivo.
otTcpEndpointAndCircularSendBuffer
struct otTcpEndpointAndCircularSendBuffer otTcpEndpointAndCircularSendBuffer
Estructura de contexto para usar con mbedtls_ssl_set_bio.
remotas
otTcpCircularSendBufferDeinitialize
otError otTcpCircularSendBufferDeinitialize( otTcpCircularSendBuffer *aSendBuffer )
Anula la inicialización de un búfer de envío circular TCP y lo desconecta si está conectado.
Si el búfer de envío circular TCP no está vacío, fallará esta operación.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores que se muestran |
|
otTcpCircularSendBufferForceDiscardAll
void otTcpCircularSendBufferForceDiscardAll( otTcpCircularSendBuffer *aSendBuffer )
Descarta a la fuerza todos los datos del búfer de envío circular.
Se espera que la aplicación llame a esta función cuando se finaliza una conexión TCP de manera inceremoniosa (p.ej., si la aplicación llama a otTcpEndpointAbort() o se le informa de una conexión de restablecimiento a través de la devolución de llamada otTcpConnectionLost()).
Llamar a esta función en un búfer de envío circular 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 de TCP.
Esta operación siempre se realizará de forma correcta.
Detalles | |||
---|---|---|---|
Parámetros |
|
||
Qué muestra |
Es la cantidad de espacio libre en el búfer de envío.
|
otTcpCircularSendBufferHandleForwardProgress
void otTcpCircularSendBufferHandleForwardProgress( otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer )
Realiza el control específico de 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 que llame a esta función al comienzo de la función de devolución de llamada para 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 del búfer de envío que eligió el usuario cuando llama 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 de TCP mediante el búfer de envío circular de TCP proporcionado para administrar el almacenamiento en búfer.
Una vez que se llama a esta función, aSendBuffer
y aEndpoint
se consideran "vinculados" 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 “desconectar” 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 ocurrir 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 finaliza.
El patrón de uso recomendado es utilizar un único búfer de envío circular de TCP con un extremo de TCP y enviar datos en ese extremo de TCP solo a través de su búfer circular de TCP asociado. Este patrón de uso recomendado evita los problemas descritos anteriormente, ya que siempre se usa un extremo de TCP y un búfer de envío circular TCP juntos.
Si el búfer de envío circular alcanza su capacidad, solo se copia en él un prefijo de los datos proporcionados.
Detalles | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||||||
Valores que se muestran |
|
otTcpMbedTlsSslRecvCallback
int otTcpMbedTlsSslRecvCallback( void *aCtx, unsigned char *aBuf, size_t aLen )
Sin bloqueo, reciben una devolución de llamada para pasar a mbedtls_ssl_set_bio.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
||||||
Qué muestra |
La cantidad de bytes recibidos o un código de error mbedtls.
|
otTcpMbedTlsSslSendCallback
int otTcpMbedTlsSslSendCallback( void *aCtx, const unsigned char *aBuf, size_t aLen )
Envía una devolución de llamada sin bloqueo para pasar a mbedtls_ssl_set_bio.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
||||||
Qué muestra |
La cantidad de bytes enviados o un código de error mbedtls.
|
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 a nuestra documentación, consulta Recursos.