Abstrações TCP
Este módulo inclui abstrações fáceis de usar sobre a API TCP de base.
Resumo
Enumerações |
|
---|---|
anonymous enum
|
enum Define as sinalizações transmitidas para o otTcpCircularSendBufferWrite . |
Typedefs |
|
---|---|
otTcpCircularSendBuffer
|
typedefstruct otTcpCircularSendBuffer
Representa um buffer de envio circular para uso com um endpoint TCP. |
otTcpEndpointAndCircularSendBuffer
|
typedef Estrutura de contexto a ser usada com mbedtls_ssl_set_bio. |
remotas |
|
---|---|
otTcpCircularSendBufferDeinitialize(otTcpCircularSendBuffer *aSendBuffer)
|
Desinicializa um buffer de envio circular TCP, removendo-o se anexado.
|
otTcpCircularSendBufferForceDiscardAll(otTcpCircularSendBuffer *aSendBuffer)
|
void
Descarta à força todos os dados no buffer de envio circular.
|
otTcpCircularSendBufferGetFreeSpace(const otTcpCircularSendBuffer *aSendBuffer)
|
size_t
Retorna a quantidade de espaço livre no buffer de envio circular TCP.
|
otTcpCircularSendBufferHandleForwardProgress(otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer)
|
void
Executa o tratamento específico do buffer de envio circular no callback otTcpForwardProgress.
|
otTcpCircularSendBufferInitialize(otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity)
|
void
Inicializa um buffer de envio circular TCP.
|
otTcpCircularSendBufferWrite(otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags)
|
Envia dados em um endpoint TCP, usando o buffer de envio circular TCP fornecido para gerenciar o armazenamento em buffer.
|
otTcpMbedTlsSslRecvCallback(void *aCtx, unsigned char *aBuf, size_t aLen)
|
int
Callback sem bloqueio de recebimento para passar para mbedtls_ssl_set_bio.
|
otTcpMbedTlsSslSendCallback(void *aCtx, const unsigned char *aBuf, size_t aLen)
|
int
Callback de envio sem bloqueio a ser transmitido para mbedtls_ssl_set_bio.
|
Estruturas |
|
---|---|
otTcpCircularSendBuffer |
Representa um buffer de envio circular para uso com um endpoint TCP. |
otTcpEndpointAndCircularSendBuffer |
Estrutura de contexto a ser usada com mbedtls_ssl_set_bio. |
Enumerações
enumeração anônima
anonymous enum
Define as sinalizações transmitidas para o otTcpCircularSendBufferWrite
.
Typedefs
otTcpCircularSendBuffer
struct otTcpCircularSendBuffer otTcpCircularSendBuffer
Representa um buffer de envio circular para uso com um endpoint TCP.
O uso de um buffer de envio circular é opcional. Os aplicativos podem usar um endpoint TCP para enviar dados gerenciando otLinkedBuffers diretamente. No entanto, alguns aplicativos podem achar mais conveniente ter um buffer de envio circular. Esses aplicativos podem chamar otTcpCircularSendBufferWrite() para "anexar" um buffer de envio circular a um endpoint TCP e enviar dados nesse endpoint TCP, contando com o buffer de envio circular para gerenciar os otLinkedBuffers subjacentes.
O otTcpCircularSendBuffer é implementado com base na API baseada em otLinkedBuffer fornecida por um otTcpEndpoint. Depois de anexado a um otTcpEndpoint, um otTcpCircularSendBuffer executa todo o trabalho de gerenciamento de otLinkedBuffers para a conexão. Isso significa que, quando um otTcpCircularSendBuffer estiver anexado a um otTcpEndpoint, o aplicativo não poderá chamar otTcpSendByReference() ou otTcpSendByExtension() nesse otTcpEndpoint. Em vez disso, o aplicativo precisa usar otTcpCircularSendBufferWrite() para adicionar dados ao buffer de envio.
O callback otTcpForwardProgress() é a forma que os usuários usam para saber quando há espaço disponível no buffer de envio circular. Em um otTcpEndpoint a que um otTcpCircularSendBuffer está anexado, o aplicativo PRECISA instalar um callback otTcpForwardProgress() e chamar otTcpCircularSendBufferHandleForwardProgress() no otTcpCircularSendBuffer anexado no início da função de callback. É recomendável que o usuário NÃO instale um callback otTcpSendDone(), porque todo o gerenciamento de otLinkedBuffers é feito pelo buffer de envio circular.
O aplicativo não deve inspecionar diretamente os campos dessa estrutura; ele só deve interagir com ela por meio das funções da API TCP Circular Enviar Buffer cuja assinatura é fornecida neste arquivo.
otTcpEndpointAndCircularSendBuffer
struct otTcpEndpointAndCircularSendBuffer otTcpEndpointAndCircularSendBuffer
Estrutura de contexto a ser usada com mbedtls_ssl_set_bio.
remotas
otTcpCircularSendBufferDeinitialize
otError otTcpCircularSendBufferDeinitialize( otTcpCircularSendBuffer *aSendBuffer )
Desinicializa um buffer de envio circular TCP, removendo-o se anexado.
Se o buffer de envio circular TCP não estiver vazio, a operação falhará.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
||||
Valores de retorno |
|
otTcpCircularSendBufferForceDiscardAll
void otTcpCircularSendBufferForceDiscardAll( otTcpCircularSendBuffer *aSendBuffer )
Descarta à força todos os dados no buffer de envio circular.
Espera-se que o aplicativo chame essa função quando uma conexão TCP for encerrada sem cerimônia (por exemplo, se o aplicativo chamar otTcpEndpointAbort() ou for informado de uma conexão redefinida pelo callback otTcpConnectionLost()).
Chamar essa função em um buffer de envio circular TCP não vazio anexado a um endpoint TCP resulta em comportamento indefinido.
Detalhes | |||
---|---|---|---|
Parâmetros |
|
otTcpCircularSendBufferGetFreeSpace
size_t otTcpCircularSendBufferGetFreeSpace( const otTcpCircularSendBuffer *aSendBuffer )
Retorna a quantidade de espaço livre no buffer de envio circular TCP.
Essa operação sempre será bem-sucedida.
Detalhes | |||
---|---|---|---|
Parâmetros |
|
||
Retorna |
A quantidade de espaço livre no buffer de envio.
|
otTcpCircularSendBufferHandleForwardProgress
void otTcpCircularSendBufferHandleForwardProgress( otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer )
Executa o tratamento específico do buffer de envio circular no callback otTcpForwardProgress.
Espera-se que o aplicativo instale um callback otTcpForwardProgress() no otTcpEndpoint e chame essa função no início da função de callback para processamento específico do buffer de envio circular.
Na função de callback, o aplicativo pode determinar a quantidade de espaço livre no buffer de envio circular chamando otTcpCircularSendBufferFreeSpace() ou comparando aInSendBuffer
com a capacidade do buffer de envio, escolhida pelo usuário ao chamar otTcpCircularSendBufferInitialize().
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
otTcpCircularSendBufferInitialize
void otTcpCircularSendBufferInitialize( otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity )
Inicializa um buffer de envio circular TCP.
Detalhes | |||||||
---|---|---|---|---|---|---|---|
Parâmetros |
|
otTcpCircularSendBufferWrite
otError otTcpCircularSendBufferWrite( otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags )
Envia dados em um endpoint TCP, usando o buffer de envio circular TCP fornecido para gerenciar o armazenamento em buffer.
Depois que essa função é chamada, aSendBuffer
e aEndpoint
são considerados "anexados" um ao outro. Enquanto estiverem anexadas, TODAS as operações de envio de aEndpoint
precisam ser feitas usando aSendBuffer
e TODAS as operações em aSendBuffer
precisam ser associadas a aEndpoint
.
A única maneira de "remover" um buffer de envio TCP e um endpoint TCP é esperar que o buffer de envio fique completamente vazio. Isso pode acontecer de duas maneiras: (1) todos os dados no buffer de envio são enviados e confirmados no curso normal da operação do protocolo TCP ou (2) a conexão é encerrada.
O padrão de uso recomendado é usar um único buffer de envio circular TCP com um ponto de extremidade TCP e enviar dados nesse ponto final TCP somente por meio do buffer circular TCP associado. Esse padrão de uso recomendado evita os problemas descritos acima, sempre usando um endpoint TCP e buffer de envio TCP circular juntos.
Se o buffer de envio circular atingir a capacidade, somente um prefixo dos dados fornecidos será copiado nele.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Valores de retorno |
|
otTcpMbedTlsSslRecvCallback
int otTcpMbedTlsSslRecvCallback( void *aCtx, unsigned char *aBuf, size_t aLen )
Callback sem bloqueio de recebimento para passar para mbedtls_ssl_set_bio.
Detalhes | |||||||
---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||
Retorna |
O número de bytes recebidos ou um código de erro mbedtls.
|
otTcpMbedTlsSslSendCallback
int otTcpMbedTlsSslSendCallback( void *aCtx, const unsigned char *aBuf, size_t aLen )
Callback de envio sem bloqueio a ser transmitido para mbedtls_ssl_set_bio.
Detalhes | |||||||
---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||
Retorna |
O número de bytes enviados ou um código de erro mbedtls.
|
Recursos
Os tópicos de Referência da API OpenThread são originados do código-fonte, disponível no GitHub. Para mais informações ou para contribuir com nossa documentação, consulte Recursos.