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 typedef
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
[in] aSendBuffer
O buffer de envio circular TCP a ser desinicializado.
Valores de retorno
OT_ERROR_NONE
O buffer de envio circular TCP foi desinicializado.
OT_ERROR_BUSY
O buffer circular contém dados e não pode ser desinicializado.

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
[in] aSendBuffer
O buffer de envio circular TCP cujos dados devem ser descartados.

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
[in] aSendBuffer
Um ponteiro para o buffer de envio circular TCP com uma quantidade de espaço livre para retornar.
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
[in] aSendBuffer
Um ponteiro para o buffer de envio circular TCP referente ao endpoint para o qual otTcpForwardProgress() foi invocado.
[in] aInSendBuffer
Valor de aInSendBuffer transmitido para o callback otTcpForwardProgress().

otTcpCircularSendBufferInitialize

void otTcpCircularSendBufferInitialize(
  otTcpCircularSendBuffer *aSendBuffer,
  void *aDataBuffer,
  size_t aCapacity
)

Inicializa um buffer de envio circular TCP.

Detalhes
Parâmetros
[in] aSendBuffer
Um ponteiro para o buffer de envio circular TCP a ser inicializado.
[in] aDataBuffer
Um ponteiro para a memória a ser usado para armazenar dados no buffer de envio circular TCP.
[in] aCapacity
A capacidade, em bytes, do buffer de envio circular TCP, que precisa ser igual ao tamanho da memória apontada por aDataBuffer .

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
[in] aEndpoint
O endpoint TCP em que os dados serão enviados.
[in] aSendBuffer
O buffer de envio circular TCP em que os dados serão copiados.
[in] aData
Um ponteiro para os dados a serem copiados no buffer de envio circular TCP.
[in] aLength
O comprimento dos dados apontados por aData para cópia no buffer de envio circular TCP.
[out] aWritten
Preenchido com a quantidade de dados copiados no buffer de envio, que poderá ser menor que aLength se o buffer de envio atingir a capacidade.
[in] aFlags
Sinalizações que especificam opções para essa operação. Consulte a enumeração acima.
Valores de retorno
OT_ERROR_NONE
Os dados foram copiados para o buffer de envio e enviados no endpoint TCP.
OT_ERROR_FAILED
Falha ao enviar dados no endpoint TCP.

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
[in] aCtx
[out] aBuf
O buffer em que os dados serão recebidos.
[in] aLen
A quantidade máxima de dados que pode ser recebida.
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
[in] aCtx
[in] aBuf
Os dados a serem adicionados ao buffer de envio.
[in] aLen
A quantidade de dados a serem adicionados ao buffer de envio.
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.