TCP

Questo modulo include funzioni che controllano la comunicazione TCP.

Riepilogo

Enumerazioni

anonymous enum enum
Definisce i flag passati a otTcpConnect().
anonymous enum enum
Definisce i flag passati a otTcpSendByReference.
otTcpDisconnectedReason enum
otTcpIncomingConnectionAction{
  OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT,
  OT_TCP_INCOMING_CONNECTION_ACTION_DEFER,
  OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE
}
enum
Definisce le azioni di connessione in entrata.

Typedef

otLinkedBuffer typedef
Una struttura di buffer collegata da utilizzare con TCP.
otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer) typedef
void(*
Questo callback indica che la connessione TCP è ora pronta per la comunicazione bidirezionale.
otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto) typedef
Questo callback indica che è arrivata una connessione in entrata corrispondente a questo listener TCP.
otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason) typedef
void(*
Questo callback indica che la connessione è stata interrotta e non deve più essere utilizzata o che la connessione è passata allo stato TIME-WAIT.
otTcpDisconnectedReason typedef
enum otTcpDisconnectedReason
otTcpEndpoint typedef
struct otTcpEndpoint
otTcpEndpointInitializeArgs typedef
Contiene argomenti per la funzione otTcpEndpointInitialize().
otTcpEstablished)(otTcpEndpoint *aEndpoint) typedef
void(*
Questo callback informa l'applicazione che l'handshake TCP a 3 vie è stato completato e che la connessione è stata stabilita.
otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog) typedef
void(*
Questo callback informa l'applicazione se il trasferimento dei dati dal buffer di invio al destinatario è stato completato.
otTcpIncomingConnectionAction typedef
Definisce le azioni di connessione in entrata.
otTcpListener typedef
struct otTcpListener
otTcpListenerInitializeArgs typedef
Contiene argomenti per la funzione otTcpListenerInitialize().
otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining) typedef
void(*
Questo callback indica il numero di byte disponibili per l'utilizzo dal buffer di ricezione.
otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData) typedef
void(*
Questo callback informa l'applicazione che i dati nell'elemento aData fornito sono stati confermati dal peer di connessione e che aData e i dati che contiene possono essere recuperati dall'applicazione.

Funzioni

otTcpAbort(otTcpEndpoint *aEndpoint)
Termina forzatamente la connessione TCP associata a questo endpoint TCP.
otTcpBind(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName)
Associa l'endpoint TCP a un indirizzo IP e a una porta.
otTcpCommitReceive(otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
Comunica allo stack TCP che l'applicazione ha terminato l'elaborazione di aNumBytes byte di dati all'inizio del buffer di ricezione e che lo stack TCP non deve continuare a mantenere quei byte nel buffer di ricezione.
otTcpConnect(otTcpEndpoint *aEndpoint, const otSockAddr *aSockName, uint32_t aFlags)
Registra l'host remoto e la porta per questa connessione.
otTcpEndpointDeinitialize(otTcpEndpoint *aEndpoint)
Deinizializza questo endpoint TCP.
otTcpEndpointGetContext(otTcpEndpoint *aEndpoint)
void *
Consente di ottenere il puntatore al contesto associato a aEndpoint al momento dell'inizializzazione.
otTcpEndpointGetInstance(otTcpEndpoint *aEndpoint)
Consente di ottenere l'istanza otInstance associata a aEndpoint al momento dell'inizializzazione.
otTcpEndpointInitialize(otInstance *aInstance, otTcpEndpoint *aEndpoint, const otTcpEndpointInitializeArgs *aArgs)
Inizializza un endpoint TCP.
otTcpGetLocalAddress(const otTcpEndpoint *aEndpoint)
const otSockAddr *
Restituisce un puntatore all'host locale e alla porta di un endpoint TCP.
otTcpGetPeerAddress(const otTcpEndpoint *aEndpoint)
const otSockAddr *
Restituisce un puntatore all'host e alla porta del peer di un endpoint TCP.
otTcpListen(otTcpListener *aListener, const otSockAddr *aSockName)
Consente alle connessioni TCP in entrata che corrispondono all'indirizzo IP e alla porta specificati di attivare i callback di questo listener TCP.
otTcpListenerDeinitialize(otTcpListener *aListener)
Deinizializza questo listener TCP.
otTcpListenerGetContext(otTcpListener *aListener)
void *
Consente di ottenere il puntatore al contesto associato a aListener al momento dell'inizializzazione.
otTcpListenerGetInstance(otTcpListener *aListener)
Consente di ottenere l'istanza otInstance associata a aListener al momento dell'inizializzazione.
otTcpListenerInitialize(otInstance *aInstance, otTcpListener *aListener, const otTcpListenerInitializeArgs *aArgs)
Inizializza un listener TCP.
otTcpReceiveByReference(otTcpEndpoint *aEndpoint, const otLinkedBuffer **aBuffer)
Fornisce all'applicazione una catena di buffer collegata che fa riferimento ai dati attualmente presenti nel buffer di ricezione TCP.
otTcpReceiveContiguify(otTcpEndpoint *aEndpoint)
Riorganizza il buffer di ricezione in modo che sia completamente contiguo in memoria.
otTcpSendByExtension(otTcpEndpoint *aEndpoint, size_t aNumBytes, uint32_t aFlags)
Aggiunge dati al buffer di invio estendendo la lunghezza del otLinkedBuffer finale nel buffer di invio del valore specificato.
otTcpSendByReference(otTcpEndpoint *aEndpoint, otLinkedBuffer *aBuffer, uint32_t aFlags)
Aggiunge al buffer di invio i dati a cui fa riferimento il buffer collegato a cui punta aBuffer.
otTcpSendEndOfStream(otTcpEndpoint *aEndpoint)
Comunica al peer di connessione che questo endpoint TCP non invierà altri dati.
otTcpStopListening(otTcpListener *aListener)
Causa l'interruzione dell'ascolto di connessioni in entrata da parte del listener TCP.

Strutture

otLinkedBuffer

Una struttura di buffer collegata da utilizzare con TCP.

otTcpEndpoint

Rappresenta un endpoint TCP.

otTcpEndpointInitializeArgs

Contiene argomenti per la funzione otTcpEndpointInitialize().

otTcpListener

Rappresenta un listener TCP.

otTcpListenerInitializeArgs

Contiene argomenti per la funzione otTcpListenerInitialize().

Enumerazioni

enum anonimo

 anonymous enum

Definisce i flag passati a otTcpConnect().

enum anonimo

 anonymous enum

Definisce i flag passati a otTcpSendByReference.

otTcpDisconnectedReason

 otTcpDisconnectedReason

otTcpIncomingConnectionAction

 otTcpIncomingConnectionAction

Definisce le azioni di connessione in entrata.

Questo viene utilizzato nel callback otTcpAcceptReady().

Proprietà
OT_TCP_INCOMING_CONNECTION_ACTION_ACCEPT

Accetta la connessione in entrata.

OT_TCP_INCOMING_CONNECTION_ACTION_DEFER

Rimanda (ignorando silenziosamente) la connessione in entrata.

OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE

Rifiutare la connessione in entrata.

Typedef

otLinkedBuffer

struct otLinkedBuffer otLinkedBuffer

Una struttura di buffer collegata da utilizzare con TCP.

Una singola struttura otLinkedBuffer fa riferimento a un array di byte in memoria, tramite mData e mLength. Il campo mNext viene utilizzato per formare una catena di strutture otLinkedBuffer.

otTcpAcceptDone

void(* otTcpAcceptDone)(otTcpListener *aListener, otTcpEndpoint *aEndpoint, const otSockAddr *aPeer)

Questo callback indica che la connessione TCP è ora pronta per la comunicazione bidirezionale.

Nel caso dell'apertura rapida TCP, potrebbe avvenire prima che l'handshake della connessione TCP sia stato effettivamente completato. All'applicazione vengono forniti puntatori di contesto sia per il listener TCP che ha accettato la connessione sia per l'endpoint TCP in cui è stata accettata. Il contesto fornito è quello associato al listener TCP.

Dettagli
Parametri
[in] aListener
Il listener TCP che corrisponde alla connessione in entrata.
[in] aEndpoint
L'endpoint TCP in cui è stata accettata la connessione in entrata.
[in] aPeer
l'host e la porta da cui ha avuto origine la connessione in entrata.

otTcpAcceptReady

otTcpIncomingConnectionAction(* otTcpAcceptReady)(otTcpListener *aListener, const otSockAddr *aPeer, otTcpEndpoint **aAcceptInto)

Questo callback indica che è arrivata una connessione in entrata corrispondente a questo listener TCP.

La risposta tipica è che l'applicazione accetti la connessione in entrata. Per farlo, compila aAcceptInto con un puntatore a otTcpEndpoint in cui accettare la connessione in entrata. Questo otTcpEndpoint deve essere già stato inizializzato utilizzando otTcpEndpointInitialize(). Successivamente, l'applicazione restituisce OT_TCP_INCOMING_CONNECTION_ACTION_);">.

In alternativa, l'applicazione può rifiutare di accettare la connessione in entrata. L'applicazione può farlo in due modi. Innanzitutto, se l'applicazione restituisce OT_TCP_INCOMING_CONNECTION_ACTION_DEFER, OpenThread ignora automaticamente la richiesta di creazione della connessione; è probabile che il peer di connessione ritrasmetta la richiesta, dopodiché il callback verrà richiamato. Ciò è utile se al momento non sono disponibili risorse per accettare la connessione, ma potrebbero esserlo quando il peer di connessione ritrasmette il tentativo di connessione. In secondo luogo, se l'applicazione restituisce OT_TCP_INCOMING_CONNECTION_ACTION_REFUSE, OpenThread invia un messaggio "Connessione rifiutata" all'host che ha tentato di stabilire una connessione. Se l'applicazione rifiuta la connessione in entrata, non è necessario compilare aAcceptInto.

Dettagli
Parametri
[in] aListener
Il listener TCP che corrisponde alla connessione in entrata.
[in] aPeer
L'host e la porta da cui ha origine la connessione in entrata.
[out] aAcceptInto
L'endpoint TCP in cui accettare la connessione in entrata.
Restituisce
Descrizione di come gestire la connessione in entrata.

otTcpDisconnected

void(* otTcpDisconnected)(otTcpEndpoint *aEndpoint, otTcpDisconnectedReason aReason)

Questo callback indica che la connessione è stata interrotta e non deve più essere utilizzata o che la connessione è passata allo stato TIME-WAIT.

Può verificarsi se un tentativo di stabilire una connessione (avviato chiamando otTcpConnect()) non va a buon fine o in qualsiasi momento successivo (ad es. se la connessione scade o viene ricevuto un segmento RST dal peer di connessione). Una volta attivato questo callback, tutte le risorse fornite dall'applicazione per questa connessione (ovvero qualsiasi otLinkedBuffers e memoria a cui fanno riferimento, ma non l'endpoint TCP stesso o lo spazio per i buffer di ricezione) possono essere recuperate. Nel caso in cui una connessione entri nello stato TIME-WAIT, questo callback viene chiamato due volte, una volta all'accesso allo stato TIME-WAIT (con OT_TCP_DISCONNECTED_REASON_TIME_WAIT e una volta alla scadenza dello stato TIME-WAIT (con OT_TCP_DISCONNECTED_REASON_NORMAL).

Dettagli
Parametri
[in] aEndpoint
L'endpoint TCP la cui connessione è stata persa.
[in] aReason
Il motivo per cui la connessione si è interrotta.

otTcpDisconnectedReason

enum otTcpDisconnectedReason otTcpDisconnectedReason

otTcpEndpoint

struct otTcpEndpoint otTcpEndpoint

otTcpEndpointInitializeArgs

struct otTcpEndpointInitializeArgs otTcpEndpointInitializeArgs

Contiene argomenti per la funzione otTcpEndpointInitialize().

otTcpEstablished

void(* otTcpEstablished)(otTcpEndpoint *aEndpoint)

Questo callback informa l'applicazione che l'handshake TCP a 3 vie è stato completato e che la connessione è stata stabilita.

Dettagli
Parametri
[in] aEndpoint
L'endpoint TCP la cui connessione è ora stabilita.

otTcpForwardProgress

void(* otTcpForwardProgress)(otTcpEndpoint *aEndpoint, size_t aInSendBuffer, size_t aBacklog)

Questo callback informa l'applicazione se il trasferimento dei dati dal buffer di invio al destinatario è stato completato.

Questo callback non è necessario per il corretto funzionamento TCP. La maggior parte delle applicazioni può affidarsi al callback otTcpSendDone() per recuperare i buffer collegati una volta che lo stack TCP li utilizza. Lo scopo di questo callback è supportare applicazioni avanzate che beneficiano di informazioni più granulari sul progresso della connessione nel trasferimento dei dati al peer di connessione.

L'operazione di questo callback è strettamente legata al buffer di invio di TCP. Il buffer di invio può essere interpretato come se avesse due regioni. La prima è la regione "in volo" nella parte anteriore del buffer di invio. Corrisponde ai dati che sono stati inviati al destinatario, ma non sono ancora stati confermati. La seconda è la regione "backlog", che consiste in tutti i dati nel buffer di invio che non si trovano nella regione "in-flight". La regione "backlog" corrisponde ai dati in coda per l'invio, ma che non sono stati ancora inviati.

Il callback viene richiamato in risposta a due tipi di eventi. Innanzitutto, la regione "in-flight" del buffer di invio potrebbe ridursi (ad esempio, quando il destinatario riconosce i dati che abbiamo inviato in precedenza). In secondo luogo, la regione "backlog" del buffer di invio potrebbe ridursi (ad esempio, sono stati inviati nuovi dati). Queste due condizioni spesso si verificano contemporaneamente, in risposta a un segmento ACK dal peer di connessione, motivo per cui vengono combinate in un unico callback.

Lo stack TCP utilizza solo i byte aInSendBuffer nella parte posteriore del buffer di invio; quando aInSendBuffer diminuisce di una quantità x, significa che x byte aggiuntivi che in precedenza erano in cima al buffer di invio non fanno più parte del buffer di invio e ora possono essere rivendicati (ossia sovrascritti) dall'applicazione. Tieni presente che la struttura otLinkedBuffer può essere recuperata solo quando tutti i byte a cui fa riferimento non fanno più parte del buffer di invio.

Questo callback prende in considerazione otTcpSendDone() nel seguente senso: le applicazioni possono determinare quando è possibile recuperare i buffer collegati confrontando aInSendBuffer con il numero di byte presenti in ogni buffer collegato. Tuttavia, prevediamo che l'utilizzo di otTcpSendDone(), che comunica direttamente quali otLinkedBuffers può essere rivendicato, sia molto più semplice. Se entrambi i callback sono registrati e vengono attivati dallo stesso evento (ad es. lo stesso segmento ACK ricevuto), viene attivato prima il callback otTcpSendDone(), seguito da questo callback.

Inoltre, questo callback fornisce aBacklog, che indica quanti byte di dati nel buffer di invio non sono ancora in corso di pubblicazione. Per le applicazioni che vogliono aggiungere dati al buffer di invio solo quando si ha la certezza che verranno inviati a breve, potrebbe essere opportuno inviare i dati solo quando aBacklog è adeguatamente piccolo (0 o vicino a 0). Ad esempio, un'applicazione potrebbe utilizzare aBacklog in modo da poter reagire all'accumulo della coda eliminando o aggregando i dati per evitare di creare un backlog di dati.

Dopo una chiamata a otTcpSendByReference() o a otTcpSendByExtension() con un numero positivo di byte, viene garantito il callback otTcpForwardProgress() per indicare quando vengono inviati i byte aggiunti al buffer di invio. La chiamata a otTcpForwardProgress() può essere effettuata immediatamente dopo che i byte sono stati aggiunti al buffer di invio (se alcuni di questi byte vengono inviati immediatamente, riducendo il backlog) o in futuro (quando la connessione invia alcuni o tutti i dati, riducendo il backlog). Con "immediatamente", intendiamo che il callback viene immediatamente programmato per l'esecuzione in un tasklet; per evitare complessità legate al rientro, il callback otTcpForwardProgress() non viene mai chiamato direttamente dalle funzioni otTcpSendByReference() o otTcpSendByExtension().

Dettagli
Parametri
[in] aEndpoint
L'endpoint TCP per la connessione.
[in] aInSendBuffer
Il numero di byte nel buffer di invio (somma delle regioni "in-flight" e "backlog").
[in] aBacklog
Il numero di byte in coda per l'invio, ma non ancora inviati (la regione "backlog").

otTcpIncomingConnectionAction

enum otTcpIncomingConnectionAction otTcpIncomingConnectionAction

Definisce le azioni di connessione in entrata.

Questo viene utilizzato nel callback otTcpAcceptReady().

otTcpListener

struct otTcpListener otTcpListener

otTcpListenerInitializeArgs

struct otTcpListenerInitializeArgs otTcpListenerInitializeArgs

Contiene argomenti per la funzione otTcpListenerInitialize().

otTcpReceiveAvailable

void(* otTcpReceiveAvailable)(otTcpEndpoint *aEndpoint, size_t aBytesAvailable, bool aEndOfStream, size_t aBytesRemaining)

Questo callback indica il numero di byte disponibili per l'utilizzo dal buffer di ricezione.

Viene chiamato ogni volta che vengono aggiunti byte al buffer di ricezione e quando viene raggiunta la fine del flusso. Se è stata raggiunta la fine del flusso (ad esempio, se non saranno disponibili altri dati per la lettura perché il peer della connessione ha chiuso la fine della connessione per la scrittura), aEndOfStream è true. Infine, aBytesRemaining indica la quantità di capacità rimanente nel buffer di ricezione per contenere i dati aggiuntivi in arrivo.

Dettagli
Parametri
[in] aEndpoint
L'endpoint TCP per la connessione.
[in] aBytesAvailable
Il numero di byte nel buffer di ricezione della connessione.
[in] aEndOfStream
Indica se è possibile ricevere ulteriori dati oltre a quelli già presenti nel buffer di ricezione della connessione.
[in] aBytesRemaining
Il numero di byte aggiuntivi che possono essere ricevuti prima che il buffer di ricezione si esaurisca.

otTcpSendDone

void(* otTcpSendDone)(otTcpEndpoint *aEndpoint, otLinkedBuffer *aData)

Questo callback informa l'applicazione che i dati nell'elemento aData fornito sono stati confermati dal peer di connessione e che aData e i dati che contiene possono essere recuperati dall'applicazione.

aData è garantito che siano identici a quelli trasmessi al protocollo TCP tramite otTcpSendByReference(), incluse eventuali estensioni effettuate tramite otTcpSendByExtension().

Dettagli
Parametri
[in] aEndpoint
L'endpoint TCP per la connessione.
[in] aData
Un puntatore all'elemento otLinkedBuffer che può essere rivendicato.

Funzioni

otTcpAbort

otError otTcpAbort(
  otTcpEndpoint *aEndpoint
)

Termina forzatamente la connessione TCP associata a questo endpoint TCP.

In questo modo l'endpoint TCP può essere immediatamente utilizzato per un'altra connessione e i buffer di invio e ricezione vengono svuotati, trasferendo la proprietà di tutti i dati forniti dall'applicazione in otTcpSendByReference() e otTcpSendByExtension() per l'applicazione. I callback e la memoria dell'endpoint TCP per il buffer di ricezione rimangono associati all'endpoint TCP.

Dettagli
Parametri
[in] aEndpoint
Un puntatore alla struttura dell'endpoint TCP che rappresenta l'endpoint TCP da interrompere.
Valori restituiti
OT_ERROR_NONE
La connessione dell'endpoint TCP è stata interrotta.
OT_ERROR_FAILED
Impossibile interrompere la connessione dell'endpoint TCP.

otTcpBind

otError otTcpBind(
  otTcpEndpoint *aEndpoint,
  const otSockAddr *aSockName
)

Associa l'endpoint TCP a un indirizzo IP e a una porta.

Dettagli
Parametri
[in] aEndpoint
Un puntatore alla struttura dell'endpoint TCP da associare.
[in] aSockName
L'indirizzo e la porta a cui associare questo endpoint TCP.
Valori restituiti
OT_ERROR_NONE
Associazione dell'endpoint TCP riuscita.
OT_ERROR_FAILED
Impossibile associare l'endpoint TCP.

otTcpCommitReceive

otError otTcpCommitReceive(
  otTcpEndpoint *aEndpoint,
  size_t aNumBytes,
  uint32_t aFlags
)

Comunica allo stack TCP che l'applicazione ha terminato l'elaborazione di aNumBytes byte di dati all'inizio del buffer di ricezione e che lo stack TCP non deve continuare a mantenere quei byte nel buffer di ricezione.

Dettagli
Parametri
[in] aEndpoint
Un puntatore alla struttura dell'endpoint TCP che rappresenta l'endpoint TCP su cui ricevere i dati.
[in] aNumBytes
Il numero di byte consumati.
[in] aFlags
Flag che specificano le opzioni per questa operazione (ancora nessuno).
Valori restituiti
OT_ERROR_NONE
Operazione di ricezione completata.
OT_ERROR_FAILED
Impossibile completare l'operazione di ricezione.

otTcpConnect

otError otTcpConnect(
  otTcpEndpoint *aEndpoint,
  const otSockAddr *aSockName,
  uint32_t aFlags
)

Registra l'host remoto e la porta per questa connessione.

L'apertura rapida TCP deve essere attivata o disattivata tramite aFlags. Se viene disattivato, viene avviato immediatamente l'handshake della creazione della connessione TCP. Se viene attivata, questa funzione registra soltanto l'host e la porta remoti e l'handshake della creazione della connessione TCP avviene solo durante la prima chiamata a otTcpSendByReference().

Se l'opzione Apertura rapida TCP è disattivata, il chiamante deve attendere il callback otTcpEstablished che indica che è stato eseguito l'handshake della creazione della connessione TCP prima di poter iniziare a inviare dati, ad esempio chiamando il numero otTcpSendByReference().

Dettagli
Parametri
[in] aEndpoint
Un puntatore alla struttura dell'endpoint TCP da connettere.
[in] aSockName
L'indirizzo IP e la porta dell'host a cui connettersi.
[in] aFlags
Flag che specificano le opzioni per questa operazione (vedi l'enumerazione sopra).
Valori restituiti
OT_ERROR_NONE
Operazione completata correttamente.
OT_ERROR_FAILED
Impossibile completare l'operazione.

otTcpEndpointDeinitialize

otError otTcpEndpointDeinitialize(
  otTcpEndpoint *aEndpoint
)

Deinizializza questo endpoint TCP.

Ciò significa che OpenThread non tiene più traccia di questo endpoint TCP e distribuisce tutte le risorse che ha allocato internamente per questo endpoint TCP. L'applicazione può riutilizzare la memoria di supporto dell'endpoint TCP come ritiene opportuno.

Se corrisponde a una connessione TCP in tempo reale, la connessione viene terminata senza cerimonie (come in otTcpAbort()). Tutte le risorse fornite dall'applicazione per questo endpoint TCP (buffer collegati per il buffer di invio, memoria per il buffer di ricezione, la struttura aEndpoint stessa e così via) vengono immediatamente restituite all'applicazione.

Dettagli
Parametri
[in] aEndpoint
Un puntatore alla struttura dell'endpoint TCP da annullare l'inizializzazione.
Valori restituiti
OT_ERROR_NONE
Annullamento dell'inizializzazione dell'endpoint TCP riuscito.
OT_ERROR_FAILED
Impossibile annullare l'inizializzazione dell'endpoint TCP.

otTcpEndpointGetContext

void * otTcpEndpointGetContext(
  otTcpEndpoint *aEndpoint
)

Consente di ottenere il puntatore al contesto associato a aEndpoint al momento dell'inizializzazione.

Dettagli
Parametri
[in] aEndpoint
L'endpoint TCP di cui ottenere il contesto.
Restituisce
Il puntatore di contesto associato a aEndpoint.

otTcpEndpointGetInstance

otInstance * otTcpEndpointGetInstance(
  otTcpEndpoint *aEndpoint
)

Consente di ottenere l'istanza otInstance associata a aEndpoint al momento dell'inizializzazione.

Dettagli
Parametri
[in] aEndpoint
L'endpoint TCP di cui ottenere l'istanza.
Restituisce
Il puntatore otInstance associato a aEndpoint.

otTcpEndpointInitialize

otError otTcpEndpointInitialize(
  otInstance *aInstance,
  otTcpEndpoint *aEndpoint,
  const otTcpEndpointInitializeArgs *aArgs
)

Inizializza un endpoint TCP.

Se chiami questa funzione, OpenThread tiene traccia dell'endpoint TCP e archivia e recupera i dati TCP all'interno di aEndpoint. L'applicazione non deve accedere o modificare direttamente i campi in aEndpoint. Se l'applicazione deve recuperare la memoria di supporto aEndpoint, dovrebbe chiamare otTcpEndpointDeinitialize().

Dettagli
Parametri
[in] aInstance
Un puntatore a un'istanza OpenThread.
[in] aEndpoint
Un puntatore a una struttura di endpoint TCP.
[in] aArgs
Un puntatore a una struttura di argomenti.
Valori restituiti
OT_ERROR_NONE
Apertura dell'endpoint TCP riuscita.
OT_ERROR_FAILED
Impossibile aprire l'endpoint TCP.

otTcpGetLocalAddress

const otSockAddr * otTcpGetLocalAddress(
  const otTcpEndpoint *aEndpoint
)

Restituisce un puntatore all'host locale e alla porta di un endpoint TCP.

I contenuti dell'host e della porta potrebbero non essere aggiornati se il socket non è connesso e non è stato associato dopo l'ultima disconnessione.

Dettagli
Parametri
[in] aEndpoint
L'endpoint TCP di cui ottenere l'host locale e la porta.
Restituisce
L'host e la porta locali di aEndpoint.

otTcpGetPeerAddress

const otSockAddr * otTcpGetPeerAddress(
  const otTcpEndpoint *aEndpoint
)

Restituisce un puntatore all'host e alla porta del peer di un endpoint TCP.

I contenuti dell'host e della porta potrebbero essere inattivi se questo socket non è in stato connesso.

Dettagli
Parametri
[in] aEndpoint
L'endpoint TCP di cui ottenere l'host e la porta del peer.
Restituisce
L'host e la porta del peer di connessione di aEndpoint.

otTcpListen

otError otTcpListen(
  otTcpListener *aListener,
  const otSockAddr *aSockName
)

Consente alle connessioni TCP in entrata che corrispondono all'indirizzo IP e alla porta specificati di attivare i callback di questo listener TCP.

Dettagli
Parametri
[in] aListener
Un puntatore alla struttura listener TCP che deve iniziare l'ascolto.
[in] aSockName
L'indirizzo e la porta su cui rimanere in ascolto per le connessioni in entrata.
Valori restituiti
OT_ERROR_NONE
Ascolto avviato sul listener TCP avviato.
OT_ERROR_FAILED
Impossibile avviare l'ascolto sul listener TCP.

otTcpListenerDeinitialize

otError otTcpListenerDeinitialize(
  otTcpListener *aListener
)

Deinizializza questo listener TCP.

Ciò significa che OpenThread non tiene più traccia di questo listener TCP e distribuisce tutte le risorse che ha allocato internamente per questo listener TCP. L'applicazione può riutilizzare la memoria di supporto del listener TCP come ritiene opportuno.

Se il listener TCP è attualmente in ascolto, smette di ascoltare.

Dettagli
Parametri
[in] aListener
Un puntatore alla struttura listener TCP da annullare l'inizializzazione.
Valori restituiti
OT_ERROR_NONE
Il listener TCP è stato annullato correttamente.
OT_ERROR_FAILED
Impossibile annullare l'inizializzazione del listener TCP.

otTcpListenerGetContext

void * otTcpListenerGetContext(
  otTcpListener *aListener
)

Consente di ottenere il puntatore al contesto associato a aListener al momento dell'inizializzazione.

Dettagli
Parametri
[in] aListener
Il listener TCP di cui ottenere il contesto.
Restituisce
Il puntatore di contesto associato a aListener.

otTcpListenerGetInstance

otInstance * otTcpListenerGetInstance(
  otTcpListener *aListener
)

Consente di ottenere l'istanza otInstance associata a aListener al momento dell'inizializzazione.

Dettagli
Parametri
[in] aListener
Il listener TCP di cui ottenere l'istanza.
Restituisce
Il puntatore otInstance associato a aListener.

otTcpListenerInitialize

otError otTcpListenerInitialize(
  otInstance *aInstance,
  otTcpListener *aListener,
  const otTcpListenerInitializeArgs *aArgs
)

Inizializza un listener TCP.

La chiamata di questa funzione consente a OpenThread di tenere traccia del listener TCP e di archiviare e recuperare i dati TCP all'interno di aListener. L'applicazione non deve accedere o modificare direttamente i campi in aListener. Se l'applicazione deve recuperare la memoria di supporto aListener, dovrebbe chiamare otTcpListenerDeinitialize().

Dettagli
Parametri
[in] aInstance
Un puntatore a un'istanza OpenThread.
[in] aListener
Un puntatore a una struttura di listener TCP.
[in] aArgs
Un puntatore a una struttura di argomenti.
Valori restituiti
OT_ERROR_NONE
Apertura del listener TCP riuscita.
OT_ERROR_FAILED
Impossibile aprire il listener TCP.

otTcpReceiveByReference

otError otTcpReceiveByReference(
  otTcpEndpoint *aEndpoint,
  const otLinkedBuffer **aBuffer
)

Fornisce all'applicazione una catena di buffer collegata che fa riferimento ai dati attualmente presenti nel buffer di ricezione TCP.

La catena di buffer collegata è valida fino alla successiva chiamata del callback "receive ready" o fino alla chiamata successiva a otTcpReceiveContiguify() o otTcpCommitReceive().

Dettagli
Parametri
[in] aEndpoint
Un puntatore alla struttura dell'endpoint TCP che rappresenta l'endpoint TCP su cui ricevere i dati.
[out] aBuffer
Un puntatore alla catena di buffer collegata che fa riferimento ai dati attualmente presenti nel buffer di ricezione.
Valori restituiti
OT_ERROR_NONE
Operazione completata correttamente.
OT_ERROR_FAILED
Impossibile completare l'operazione.

otTcpReceiveContiguify

otError otTcpReceiveContiguify(
  otTcpEndpoint *aEndpoint
)

Riorganizza il buffer di ricezione in modo che sia completamente contiguo in memoria.

Questa operazione è facoltativa: un'applicazione può semplicemente attraversare la catena del buffer collegata ottenuta chiamando otTcpReceiveByReference. Alcune applicazioni potrebbero voler chiamare questa funzione per rendere contiguo il buffer di ricezione in modo da semplificare l'elaborazione dei dati, ma ciò va a scapito del tempo di CPU per riorganizzare i dati nel buffer di ricezione.

Dettagli
Parametri
[in] aEndpoint
Un puntatore all'endpoint TCP di cui riceve il buffer da riorganizzare.
Valori restituiti
OT_ERROR_NONE
Operazione completata correttamente.
OT_ERROR_FAILED
Impossibile completare l'operazione.

otTcpSendByExtension

otError otTcpSendByExtension(
  otTcpEndpoint *aEndpoint,
  size_t aNumBytes,
  uint32_t aFlags
)

Aggiunge dati al buffer di invio estendendo la lunghezza del otLinkedBuffer finale nel buffer di invio del valore specificato.

Se il buffer di invio è vuoto, l'operazione non riesce.

Dettagli
Parametri
[in] aEndpoint
Un puntatore alla struttura dell'endpoint TCP che rappresenta l'endpoint TCP su cui inviare i dati.
[in] aNumBytes
Il numero di byte di cui estendere la lunghezza del buffer finale collegato.
[in] aFlags
Flag che specificano le opzioni per questa operazione (vedi l'enumerazione sopra).
Valori restituiti
OT_ERROR_NONE
Dati aggiunti al buffer di invio.
OT_ERROR_FAILED
Impossibile aggiungere dati al buffer di invio.

otTcpSendByReference

otError otTcpSendByReference(
  otTcpEndpoint *aEndpoint,
  otLinkedBuffer *aBuffer,
  uint32_t aFlags
)

Aggiunge al buffer di invio i dati a cui fa riferimento il buffer collegato a cui punta aBuffer.

Dopo una chiamata a questa funzione riuscita, il buffer collegato e i dati a cui fa riferimento sono di proprietà dello stack TCP; non dovrebbero essere modificati dall'applicazione finché un callback di invio completato non restituisce la proprietà di questi oggetti all'applicazione. È accettabile chiamare questa funzione per aggiungere un altro buffer collegato alla coda di invio, anche se il callback "invio completato" per una chiamata precedente di questa funzione non è ancora stato attivato.

Tieni presente che aBuffer non deve essere concatenato; il relativo campo mNext deve essere NULL. Se vengono aggiunti ulteriori dati subito dopo questa chiamata, è necessario utilizzare il flag OT_TCP_SEND_MORE_TO_COME come suggerimento per l'implementazione TCP.

Dettagli
Parametri
[in] aEndpoint
Un puntatore alla struttura dell'endpoint TCP che rappresenta l'endpoint TCP su cui inviare i dati.
[in] aBuffer
Un puntatore alla catena di buffer collegata che fa riferimento ai dati da aggiungere al buffer di invio.
[in] aFlags
Flag che specificano le opzioni per questa operazione (vedi l'enumerazione sopra).
Valori restituiti
OT_ERROR_NONE
Dati aggiunti al buffer di invio.
OT_ERROR_FAILED
Impossibile aggiungere dati al buffer di invio.

otTcpSendEndOfStream

otError otTcpSendEndOfStream(
  otTcpEndpoint *aEndpoint
)

Comunica al peer di connessione che questo endpoint TCP non invierà altri dati.

Da usare quando l'applicazione non ha altri dati da inviare al peer di connessione. Per questa connessione, le letture future sul peer di connessione genereranno la condizione di "fine del flusso" e le scritture future su questo endpoint di connessione avranno esito negativo.

La condizione di "fine del flusso" si applica solo dopo che i dati precedentemente forniti allo stack TCP da inviare sono stati ricevuti dal peer di connessione.

Dettagli
Parametri
[in] aEndpoint
Un puntatore alla struttura dell'endpoint TCP che rappresenta l'endpoint TCP da arrestare.
Valori restituiti
OT_ERROR_NONE
Condizione di "fine del flusso" messa in coda per la trasmissione.
OT_ERROR_FAILED
Impossibile mettere in coda la condizione di "fine del flusso" per la trasmissione.

otTcpStopListening

otError otTcpStopListening(
  otTcpListener *aListener
)

Causa l'interruzione dell'ascolto di connessioni in entrata da parte del listener TCP.

Dettagli
Parametri
[in] aListener
Un puntatore alla struttura listener TCP che dovrebbe interrompere l'ascolto.
Valori restituiti
OT_ERROR_NONE
Ascolto interrotto correttamente sul listener TCP.
OT_ERROR_FAILED
Impossibile interrompere l'ascolto sul listener TCP.

Macro

OT_TCP_ENDPOINT_TCB_NUM_PTR

 OT_TCP_ENDPOINT_TCB_NUM_PTR 36

OT_TCP_ENDPOINT_TCB_SIZE_BASE

 OT_TCP_ENDPOINT_TCB_SIZE_BASE 392

OT_TCP_ENDPOINT_TCB_SIZE_BASE e OT_TCP_ENDPOINT_TCB_NUM_POINTERS sono scelti in modo tale che il campo mTcb di otTcpEndpoint abbia le stesse dimensioni di struct tcpcb in TCPlp.

Ciò è necessario perché il campo mTcb, sebbene opaco nella sua dichiarazione, viene trattato come struct tcpcb nell'implementazione TCP.

OT_TCP_LISTENER_TCB_NUM_PTR

 OT_TCP_LISTENER_TCB_NUM_PTR 3

OT_TCP_LISTENER_TCB_SIZE_BASE

 OT_TCP_LISTENER_TCB_SIZE_BASE 16

OT_TCP_LISTENER_TCB_SIZE_BASE e OT_TCP_LISTENER_TCB_NUM_POINTERS sono scelti in modo tale che il campo mTcbListener di otTcpListener abbia le stesse dimensioni di struct tcpcb_listen in TCPlp.

Ciò è necessario perché il campo mTcbListen, sebbene opaco nella sua dichiarazione, viene trattato come struct tcpcb nell'implementazione TCP.

OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS

 OT_TCP_RECEIVE_BUFFER_SIZE_FEW_HOPS 2598

Dimensione del buffer consigliata per le connessioni TCP che attraversano circa 3 hop wireless o meno.

Sulle piattaforme in cui la memoria è particolarmente limitata e in situazioni in cui non è necessaria un'elevata larghezza di banda, potrebbe essere preferibile selezionare manualmente una dimensione del buffer inferiore.

OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS

 OT_TCP_RECEIVE_BUFFER_SIZE_MANY_HOPS 4157

Dimensione del buffer consigliata per le connessioni TCP che attraversano molti hop wireless.

Se la connessione TCP attraversa un numero molto elevato di hop (più di 6 circa), potrebbe essere consigliabile selezionare manualmente una dimensione del buffer grande.

Risorse

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