Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Astrazioni TCP

Questo modulo include astrazioni di facile utilizzo sopra l'API TCP di base.

Riepilogo

Enumerazioni

anonymous enum enum
Questa enumerazione definisce i flag passati a otTcpCircularSendBufferWrite.

Defin

otTcpCircularSendBuffer Typedef
Questa struttura rappresenta un buffer di invio circolare da utilizzare con un endpoint TCP.

Functions

otTcpCircularSendBufferDeinitialize(otTcpCircularSendBuffer *aSendBuffer)
Deinizializza un buffer di invio circolare TCP, scollegandolo se collegato.
otTcpCircularSendBufferForceDiscardAll(otTcpCircularSendBuffer *aSendBuffer)
void
Ignora forzatamente tutti i dati nel buffer di invio circolare.
otTcpCircularSendBufferGetFreeSpace(const otTcpCircularSendBuffer *aSendBuffer)
size_t
Restituisce la quantità di spazio libero nel buffer di invio circolare TCP.
otTcpCircularSendBufferHandleForwardProgress(otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer)
void
Esegue una gestione circolare specifica dell'invio nel buffer nel callback otTcpForwardProgress.
otTcpCircularSendBufferInitialize(otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity)
void
Inizializza un buffer di invio circolare TCP.
otTcpCircularSendBufferWrite(otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags)
Invia i dati su un endpoint TCP, utilizzando il buffer di invio circolare TCP fornito per gestire il buffering.

Struttura

otTcpCircularSendBuffer

Questa struttura rappresenta un buffer di invio circolare da utilizzare con un endpoint TCP.

Enumerazioni

enumerazione anonima

 anonymous enum

Questa enumerazione definisce i flag passati a otTcpCircularSendBufferWrite.

Defin

otTcpCircularSendBuffer

struct otTcpCircularSendBuffer otTcpCircularSendBuffer

Questa struttura rappresenta un buffer di invio circolare da utilizzare con un endpoint TCP.

L'utilizzo di un buffer di invio circolare è facoltativo. Le applicazioni possono utilizzare un endpoint TCP per inviare i dati gestendo direttamente otLinkedBuffers. Tuttavia, alcune applicazioni potrebbero trovare più pratico avere un buffer di invio circolare; tali applicazioni possono chiamare otTcpCircularSendBufferWrite() per "allegare" un buffer di invio circolare a un endpoint TCP e inviare dati su quell'endpoint TCP, facendo affidamento sul buffer di invio circolare per gestire gli otLinkedBuffer sottostanti.

otTcpCircularSendBuffer viene implementato sopra l'API otLinkedBuffer basata su otTcpEndpoint. Una volta collegato a otTcpEndpoint, un otTcpCircularSendBuffer esegue tutto il lavoro di gestione di otLinkedBuffers per la connessione. Ciò significa che, una volta che un otTcpCircularSendBuffer è collegato a un otTcpEndpoint, l'applicazione non deve chiamare otTcpSendBy Reference() o otTcpSendByExtension() su tale otTcpEndpoint. Per aggiungere i dati al buffer di invio, l'applicazione dovrebbe utilizzare otTcpCircularSendBufferWrite().

Il callback otTcpForwardProgress() consente agli utenti di sapere quando lo spazio diventa disponibile nel buffer di invio circolare. Su un otTcpEndpoint a cui è collegato un otTcpCircularSendBuffer, l'applicazione DEVE installare un callback otTcpForwardProgress() e chiamare otTcpCircularSendBufferHandleForwardProgress() sull'ttcpCircularSendBuffer collegato all'inizio della funzione di callback. Raccomandiamo all'utente di NON installare un callback otTcpSendDone() perché tutta la gestione di otLinkedBuffers viene gestita dal buffer di invio circolare.

L'applicazione non deve ispezionare direttamente i campi di questa struttura, ma deve soltanto interagire tramite le funzioni dell'API TCP Buffer di invio TCP la cui firma è fornita in questo file.

Functions

otTcpCircularSendBufferDeinizializza

otError otTcpCircularSendBufferDeinitialize(
  otTcpCircularSendBuffer *aSendBuffer
)

Deinizializza un buffer di invio circolare TCP, scollegandolo se collegato.

Se il buffer di invio circolare TCP non è vuoto, questa operazione non andrà a buon fine.

Dettagli
Parametri
[in] aSendBuffer
Il buffer di invio circolare TCP per inizializzare.
Valori restituiti
OT_ERROR_NONE
Annullamento iniziale del buffer di invio circolare TCP riuscito.
OT_ERROR_BUSY
Il buffer circolare contiene dati e non può essere inizializzato.

otTcpCircularSendBufferForceIgnoraAll

void otTcpCircularSendBufferForceDiscardAll(
  otTcpCircularSendBuffer *aSendBuffer
)

Ignora forzatamente tutti i dati nel buffer di invio circolare.

L'applicazione dovrebbe chiamare questa funzione quando una connessione TCP viene terminata senza esitazione (ad es. se l'applicazione chiama otTcpEndpointAbort() o è informata di una connessione di reimpostazione tramite il callback otTcpConnectionLost()).

Chiamare questa funzione su un buffer di invio circolare TCP non vuoto collegato a un endpoint TCP genera un comportamento non definito.

Dettagli
Parametri
[in] aSendBuffer
Il buffer di invio circolare TCP i cui dati devono essere ignorati.

otTcpCircularSendBufferGetFreeSpace

size_t otTcpCircularSendBufferGetFreeSpace(
  const otTcpCircularSendBuffer *aSendBuffer
)

Restituisce la quantità di spazio libero nel buffer di invio circolare TCP.

Questa operazione avrà sempre esito positivo.

Dettagli
Parametri
[in] aSendBuffer
Un puntatore al buffer di invio circolare TCP di cui restituire la quantità di spazio libero.
Restituisce
La quantità di spazio libero nel buffer di invio.

otTcpCircularSendBufferHandleForwardProgress

void otTcpCircularSendBufferHandleForwardProgress(
  otTcpCircularSendBuffer *aSendBuffer,
  size_t aInSendBuffer
)

Esegue una gestione circolare specifica dell'invio nel buffer nel callback otTcpForwardProgress.

L'applicazione dovrebbe installare un callback otTcpForwardProgress() sull'otTcpEndpoint e chiamare questa funzione all'inizio della funzione di callback per l'elaborazione specifica dell'invio circolare.

Nella funzione di callback, l'applicazione può determinare la quantità di spazio libero nel buffer di invio circolare chiamando otTcpCircularSendBufferFreeSpace() o confrontando aInSendBuffer con la capacità del buffer di invio, scelta dall'utente quando chiama otTcpCircularSendBufferInitialize().

Dettagli
Parametri
[in] aSendBuffer
Un puntatore al buffer di invio circolare TCP per l'endpoint per cui è stato richiamato otTcpForwardProgress().
[in] aInSendBuffer
Valore di aInSendBuffer passato al callback otTcpForwardProgress().

otTcpCircularSendBufferInitialize

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

Inizializza un buffer di invio circolare TCP.

Dettagli
Parametri
[in] aSendBuffer
Un puntatore al buffer di invio circolare TCP per l'inizializzazione.
[in] aDataBuffer
Un puntatore alla memoria da utilizzare per archiviare i dati nel buffer di invio circolare TCP.
[in] aCapacity
La capacità, in byte, del buffer di invio circolare TCP, che deve essere uguale alla dimensione della memoria a cui è puntato da aDataBuffer .

otTcpCircularSendBufferWrite

otError otTcpCircularSendBufferWrite(
  otTcpEndpoint *aEndpoint,
  otTcpCircularSendBuffer *aSendBuffer,
  const void *aData,
  size_t aLength,
  size_t *aWritten,
  uint32_t aFlags
)

Invia i dati su un endpoint TCP, utilizzando il buffer di invio circolare TCP fornito per gestire il buffering.

Una volta richiamata questa funzione, aSendBuffer e aEndpoint vengono considerati "associati" tra loro. Mentre sono in allegato, TUTTE le operazioni di invio per aEndpoint devono essere effettuate utilizzando aSendBuffer e TUTTE le operazioni su aSendBuffer devono essere associate a aEndpoint.

L'unico modo per "scollegare" un buffer di invio circolare TCP e un endpoint TCP è attendere che il buffer di invio diventi completamente vuoto. Ciò può verificarsi in due modi: (1) tutti i dati nel buffer di invio vengono inviati e riconosciuti nel normale funzionamento del protocollo TCP o (2) la connessione viene terminata.

Si consiglia di utilizzare un singolo buffer di invio circolare TCP con un endpoint TCP e di inviare dati su tale endpoint solo tramite il buffer circolare TCP associato. Questo pattern di utilizzo consigliato evita i problemi descritti sopra utilizzando sempre un endpoint TCP e un buffer di invio circolare TCP insieme.

Se il buffer di invio circolare raggiunge la capacità, nel buffer di invio circolare viene copiato solo un prefisso dei dati forniti.

Dettagli
Parametri
[in] aEndpoint
L'endpoint TCP su cui inviare i dati.
[in] aSendBuffer
Il buffer di invio circolare TCP in cui copiare i dati.
[in] aData
Un puntatore ai dati da copiare nel buffer di invio circolare TCP.
[in] aLength
La lunghezza dei dati punti a aData da copiare nel buffer di invio circolare TCP.
[out] aWritten
Completato con la quantità di dati copiati nel buffer di invio, che potrebbe essere inferiore a aLength se il buffer di invio raggiunge la capacità.
[in] aFlags
Flag che specificano le opzioni per questa operazione (vedi l'enumerazione sopra).
Restituisce
OT_ERROR_NONE I dati sono stati copiati correttamente nel buffer di invio e inviati all'endpoint TCP.
Restituisce
OT_ERROR_FAILED Impossibile inviare dati sull'endpoint TCP.

Risorse

Gli argomenti di riferimento dell'API OpenThread provengono dal codice sorgente, disponibile su GitHub. Per scoprire di più o per contribuire alla nostra documentazione, consulta le Risorse.