TCP-Abstraktionen
Dieses Modul enthält zusätzlich zur TCP API einfach zu verwendende Abstraktionen.
Zusammenfassung
Aufzählungen |
|
---|---|
anonymous enum
|
enum Definiert an otTcpCircularSendBufferWrite übergebene Flags. |
Typedefs |
|
---|---|
otTcpCircularSendBuffer
|
typedefstruct otTcpCircularSendBuffer
Stellt einen zirkulären Sendepuffer zur Verwendung mit einem TCP-Endpunkt dar. |
otTcpEndpointAndCircularSendBuffer
|
typedef Kontextstruktur zur Verwendung mit mbedtls_ssl_set_bio. |
Funktionen |
|
---|---|
otTcpCircularSendBufferDeinitialize(otTcpCircularSendBuffer *aSendBuffer)
|
Deinitialisiert einen kreisförmigen TCP-Sendezwischenspeicher und trennt ihn, falls er angehängt ist.
|
otTcpCircularSendBufferForceDiscardAll(otTcpCircularSendBuffer *aSendBuffer)
|
void
Verwirft alle Daten im zirkulären Sendepuffer.
|
otTcpCircularSendBufferGetFreeSpace(const otTcpCircularSendBuffer *aSendBuffer)
|
size_t
Gibt den freien Speicherplatz im kreisförmigen TCP-Sendepuffer zurück.
|
otTcpCircularSendBufferHandleForwardProgress(otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer)
|
void
Führt eine zirkuläre Sendezwischenspeicher-spezifische Verarbeitung im otTcpForwardProgress-Callback durch.
|
otTcpCircularSendBufferInitialize(otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity)
|
void
Initialisiert einen kreisförmigen TCP-Sendezwischenspeicher.
|
otTcpCircularSendBufferWrite(otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags)
|
Sendet Daten über einen TCP-Endpunkt unter Verwendung des bereitgestellten kreisförmigen TCP-Sendepuffers, um die Zwischenspeicherung zu verwalten.
|
otTcpMbedTlsSslRecvCallback(void *aCtx, unsigned char *aBuf, size_t aLen)
|
int
Nicht blockierender Callback beim Empfang an mbedtls_ssl_set_bio.
|
otTcpMbedTlsSslSendCallback(void *aCtx, const unsigned char *aBuf, size_t aLen)
|
int
Nicht blockierender Callback wird an mbedtls_ssl_set_bio gesendet.
|
Strukturen |
|
---|---|
otTcpCircularSendBuffer |
Stellt einen zirkulären Sendepuffer zur Verwendung mit einem TCP-Endpunkt dar. |
otTcpEndpointAndCircularSendBuffer |
Kontextstruktur zur Verwendung mit mbedtls_ssl_set_bio. |
Aufzählungen
Anonyme Aufzählung
anonymous enum
Definiert an otTcpCircularSendBufferWrite
übergebene Flags.
Typedefs
otTcpCircularSendBuffer
struct otTcpCircularSendBuffer otTcpCircularSendBuffer
Stellt einen zirkulären Sendepuffer zur Verwendung mit einem TCP-Endpunkt dar.
Die Verwendung eines zirkulären Sendepuffers ist optional. Anwendungen können einen TCP-Endpunkt zum Senden von Daten verwenden, indem otLinkedBuffers direkt verwaltet wird. Für einige Anwendungen ist jedoch ein zirkulärer Sendepuffer möglicherweise praktischer. Solche Anwendungen können otTcpCircularSendBufferWrite() aufrufen, um einen zirkulären Sendepuffer an einen TCP-Endpunkt anzuhängen und Daten an diesen TCP-Endpunkt zu senden. Dabei wird der zirkuläre Sendepuffer zur Verwaltung der zugrunde liegenden otLinkedBuffers genutzt.
otTcpCircularSendBuffer wird zusätzlich zur auf otLinkedBuffer basierenden API implementiert, die von einem otTcpEndpoint bereitgestellt wird. Nach der Verknüpfung mit einem otTcpEndpoint übernimmt ein otTcpCircularSendBuffer die gesamte Verwaltung von otLinkedBuffers für die Verbindung. Wenn also ein otTcpCircularSendBuffer an einen otTcpEndpoint angehängt wurde, sollte die Anwendung otTcpSendByReference() oder otTcpSendByExtension() für diesen otTcpEndpoint nicht mehr aufrufen. Stattdessen sollte die Anwendung otTcpCircularSendBufferWrite() verwenden, um Daten in den Sendepuffer aufzunehmen.
Anhand des Callbacks otTcpForwardProgress() können Nutzer erfahren, wenn im zirkulären Sendepuffer Speicherplatz frei wird. Auf einem otTcpEndpoint, an den ein otTcpCircularSendBuffer angehängt ist, MUSS die Anwendung einen otTcpForwardProgress()-Callback installieren und otTcpCircularSendBufferHandleForwardProgress() für den angehängten otTcpCircularSendBuffer zu Beginn der Rückruffunktion aufrufen. Der Nutzer sollte NICHT einen otTcpSendDone()-Callback installieren, da die gesamte Verwaltung von otLinkedBuffers über den zirkulären Sendepuffer abgewickelt wird.
Die Anwendung sollte die Felder dieser Struktur nicht direkt prüfen, sondern nur über die TCP Circular Send Buffer API-Funktionen mit ihr interagieren, deren Signatur in dieser Datei bereitgestellt wird.
otTcpEndpointAndCircularSendBuffer
struct otTcpEndpointAndCircularSendBuffer otTcpEndpointAndCircularSendBuffer
Kontextstruktur zur Verwendung mit mbedtls_ssl_set_bio.
Funktionen
otTcpCircularSendBufferDeinitialize
otError otTcpCircularSendBufferDeinitialize( otTcpCircularSendBuffer *aSendBuffer )
Deinitialisiert einen kreisförmigen TCP-Sendezwischenspeicher und trennt ihn, falls er angehängt ist.
Wenn der zirkuläre TCP-Sendezwischenspeicher nicht leer ist, schlägt dieser Vorgang fehl.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Rückgabewerte |
|
otTcpCircularSendBufferForceDiscardAll
void otTcpCircularSendBufferForceDiscardAll( otTcpCircularSendBuffer *aSendBuffer )
Verwirft alle Daten im zirkulären Sendepuffer.
Es wird erwartet, dass die Anwendung diese Funktion aufruft, wenn eine TCP-Verbindung zu einem anderen Zeitpunkt beendet wird (z.B. wenn die Anwendung otTcpEndpointAbort() aufruft oder über den Rückruf „otTcpConnectionLost()“ über eine zurückgesetzte Verbindung informiert wird).
Der Aufruf dieser Funktion für einen nicht leeren, an einen TCP-Endpunkt angehängten, zirkulären TCP-Sendepuffer führt zu nicht definiertem Verhalten.
Details | |||
---|---|---|---|
Parameter |
|
otTcpCircularSendBufferGetFreeSpace
size_t otTcpCircularSendBufferGetFreeSpace( const otTcpCircularSendBuffer *aSendBuffer )
Gibt den freien Speicherplatz im kreisförmigen TCP-Sendepuffer zurück.
Dieser Vorgang ist immer erfolgreich.
Details | |||
---|---|---|---|
Parameter |
|
||
Rückgabe |
Der kostenlose Speicherplatz im Sendepuffer.
|
otTcpCircularSendBufferHandleForwardProgress
void otTcpCircularSendBufferHandleForwardProgress( otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer )
Führt eine zirkuläre Sendezwischenspeicher-spezifische Verarbeitung im otTcpForwardProgress-Callback durch.
Es wird erwartet, dass die Anwendung einen otTcpForwardProgress()-Callback auf otTcpEndpoint installiert und diese Funktion zu Beginn der Callback-Funktion für eine zirkuläre „send-buffer“-spezifische Verarbeitung aufruft.
In der Callback-Funktion kann die Anwendung den freien Speicherplatz im zirkulären Sendepuffer durch Aufrufen von otTcpCircularSendBufferFreeSpace() oder durch Vergleichen von aInSendBuffer
mit der Kapazität des Sendepuffers bestimmen, die vom Nutzer beim Aufrufen von otTcpCircularSendBufferInitialize() ausgewählt wurde.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
otTcpCircularSendBufferInitialize
void otTcpCircularSendBufferInitialize( otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity )
Initialisiert einen kreisförmigen TCP-Sendezwischenspeicher.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
otTcpCircularSendBufferWrite
otError otTcpCircularSendBufferWrite( otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags )
Sendet Daten über einen TCP-Endpunkt unter Verwendung des bereitgestellten kreisförmigen TCP-Sendepuffers, um die Zwischenspeicherung zu verwalten.
Sobald diese Funktion aufgerufen wird, gelten aSendBuffer
und aEndpoint
als „verbunden“. Während sie angehängt sind, müssen ALLE Sendevorgänge für aEndpoint
mit aSendBuffer
erfolgen und ALLE Vorgänge in aSendBuffer
müssen mit aEndpoint
verknüpft sein .
Die einzige Möglichkeit, einen kreisförmigen TCP-Sendezwischenspeicher und einen TCP-Endpunkt zu "trennen", besteht darin, darauf zu warten, dass der Sendepuffer vollständig leer ist. Dies kann auf zwei Arten geschehen: (1) Alle Daten im Sendepuffer werden im normalen Verlauf des TCP-Protokollvorgangs gesendet und bestätigt oder (2) die Verbindung wird beendet.
Das empfohlene Nutzungsmuster ist die Verwendung eines einzelnen kreisförmigen TCP-Sendepuffers mit einem TCP-Endpunkt und das Senden von Daten an diesem TCP-Endpunkt nur über den zugehörigen kreisförmigen TCP-Zwischenspeicher. Bei diesem empfohlenen Nutzungsmuster werden die oben beschriebenen Probleme umgangen, da ein TCP-Endpunkt und ein kreislaufförmiger TCP-Sendezwischenspeicher immer zusammen verwendet werden.
Wenn der zirkuläre Sendepuffer die Kapazität erreicht, wird nur ein Präfix der bereitgestellten Daten in den zirkulären Sendepuffer kopiert.
Details | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||||
Rückgabewerte |
|
otTcpMbedTlsSslRecvCallback
int otTcpMbedTlsSslRecvCallback( void *aCtx, unsigned char *aBuf, size_t aLen )
Nicht blockierender Callback beim Empfang an mbedtls_ssl_set_bio.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabe |
Die Anzahl der empfangenen Byte oder ein mbedtls-Fehlercode.
|
otTcpMbedTlsSslSendCallback
int otTcpMbedTlsSslSendCallback( void *aCtx, const unsigned char *aBuf, size_t aLen )
Nicht blockierender Callback wird an mbedtls_ssl_set_bio gesendet.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabe |
Die Anzahl der gesendeten Byte oder ein mbedtls-Fehlercode.
|
Ressourcen
OpenThread API-Referenzthemen stammen aus dem Quellcode, der auf GitHub verfügbar ist. Weitere Informationen finden Sie unter Ressourcen. Dort können Sie auch einen Beitrag zu unserer Dokumentation leisten.