Abstrakcje TCP
Ten moduł zawiera łatwe w użyciu abstrakcje oprócz podstawowego interfejsu API TCP.
Podsumowanie
Wyliczenia |
|
---|---|
anonymous enum
|
enum | typ wyliczeniowy Definiuje flagi przekazane do otTcpCircularSendBufferWrite . |
Definicje typów |
|
---|---|
otTcpCircularSendBuffer
|
typedefstruct otTcpCircularSendBuffer
Reprezentuje okrągły bufor wysyłania do użycia z punktem końcowym TCP. |
otTcpEndpointAndCircularSendBuffer
|
typedef Struktura kontekstu do użycia z mbedtls_ssl_set_bio. |
Funkcje |
|
---|---|
otTcpCircularSendBufferDeinitialize(otTcpCircularSendBuffer *aSendBuffer)
|
Deinicjuje bufor cyklicznego wysyłania TCP, odłączając go, jeśli jest podłączony.
|
otTcpCircularSendBufferForceDiscardAll(otTcpCircularSendBuffer *aSendBuffer)
|
void
Powoduje wymuszenie odrzucenia wszystkich danych w okrągłym buforze wysyłania.
|
otTcpCircularSendBufferGetFreeSpace(const otTcpCircularSendBuffer *aSendBuffer)
|
size_t
Zwraca ilość wolnego miejsca w buforze wysyłania cyklicznego TCP.
|
otTcpCircularSendBufferHandleForwardProgress(otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer)
|
void
Wykonuje obsługę specyficznego dla bufora wysyłania cyklicznego w wywołaniu zwrotnym otTcpForwardprogress.
|
otTcpCircularSendBufferInitialize(otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity)
|
void
Inicjuje bufor wysyłania cyklicznego TCP.
|
otTcpCircularSendBufferWrite(otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags)
|
Wysyła dane w punkcie końcowym TCP przy użyciu udostępnionego bufora wysyłania cyklicznego TCP do zarządzania buforowaniem.
|
otTcpMbedTlsSslRecvCallback(void *aCtx, unsigned char *aBuf, size_t aLen)
|
int
Nieblokujące wywołanie zwrotne przekazywane do mbedtls_ssl_set_bio.
|
otTcpMbedTlsSslSendCallback(void *aCtx, const unsigned char *aBuf, size_t aLen)
|
int
Nieblokujące: wyślij wywołanie zwrotne do parametru mbedtls_ssl_set_bio.
|
Konstrukcja |
|
---|---|
otTcpCircularSendBuffer |
Reprezentuje okrągły bufor wysyłania do użycia z punktem końcowym TCP. |
otTcpEndpointAndCircularSendBuffer |
Struktura kontekstu do użycia z mbedtls_ssl_set_bio. |
Wyliczenia
anonimowe wyliczenie
anonymous enum
Definiuje flagi przekazane do otTcpCircularSendBufferWrite
.
Definicje typów
otTcpCircularSendBuffer
struct otTcpCircularSendBuffer otTcpCircularSendBuffer
Reprezentuje okrągły bufor wysyłania do użycia z punktem końcowym TCP.
Korzystanie z okrągłego bufora wysyłania jest opcjonalne. Aplikacje mogą używać punktu końcowego TCP do wysyłania danych, bezpośrednio zarządzając obiektem otLinkedBuffers. W niektórych aplikacjach wygodniej jest jednak korzystać z cyklicznego bufora wysyłania. Mogą one wywołać metodę otTcpCircularSendBufferWrite(), aby „podłączyć” okrągły bufor wysyłania do punktu końcowego TCP i wysłać dane przez ten punkt końcowy TCP, bazując na buforze wysyłania do zarządzania bazowymi elementami otLinkedBuffer.
Metoda otTcpCircularSendBuffer jest zaimplementowany w połączeniu z opartym na otLinkedBuffer interfejsem API otTcpEndpoint. Po podłączeniu do punktu otTcpEndpoint otTcpCircularSendBuffer wykonuje wszystkie działania związane z zarządzaniem połączeniem otLinkedBuffers. Oznacza to, że gdy parametr otTcpCircularSendBuffer jest podłączony do obiektu otTcpEndpoint, aplikacja nie powinna wywoływać funkcji otTcpSendByReference() ani otTcpSendByExtension() na tym obiekcie otTcpEndpoint. Zamiast tego aplikacja powinna używać metody otTcpCircularSendBufferWrite(), aby dodać dane do bufora wysyłania.
Wywołanie zwrotne otTcpForwardProgress() wskazuje użytkownikom, kiedy w cyklicznym buforze wysyłania pojawia się wolne miejsce. W punkcie otTcpEndpoint, do którego przyłączony jest moduł otTcpCircularSendBuffer, aplikacja MUSI zainstalować wywołanie zwrotne otTcpForwardProgress() i wywołać otTcpCircularSendBufferHandleForwardProgress() na załączonym otTcpCircularSendBuffer na początku funkcji wywołania zwrotnego. Nie zaleca się instalowania wywołania zwrotnego otTcpSendDone(), ponieważ całe zarządzanie otLinkedBuffers jest obsługiwane przez okrągły bufor wysyłania.
Aplikacja nie powinna bezpośrednio badać pól tej struktury. powinna wchodzić z nią w interakcję wyłącznie za pomocą funkcji TCP Circular Send Buffer API, których podpis znajduje się w tym pliku.
otTcpEndpointAndCircularSendBuffer
struct otTcpEndpointAndCircularSendBuffer otTcpEndpointAndCircularSendBuffer
Struktura kontekstu do użycia z mbedtls_ssl_set_bio.
Funkcje
otTcpCircularSendBufferDeinitialize
otError otTcpCircularSendBufferDeinitialize( otTcpCircularSendBuffer *aSendBuffer )
Deinicjuje bufor cyklicznego wysyłania TCP, odłączając go, jeśli jest podłączony.
Jeśli bufor wysyłania cyklicznego TCP nie jest pusty, operacja się nie powiedzie.
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
||||
Zwracane wartości |
|
otTcpCircularSendBufferForceDiscardAll
void otTcpCircularSendBufferForceDiscardAll( otTcpCircularSendBuffer *aSendBuffer )
Powoduje wymuszenie odrzucenia wszystkich danych w okrągłym buforze wysyłania.
Aplikacja powinna wywoływać tę funkcję w przypadku bezmyślnego zakończenia połączenia TCP (np. jeśli aplikacja wywoła funkcję otTcpEndpointAbort() lub zostanie poinformowana o zresetowaniu połączenia przez wywołanie zwrotne otTcpConnectionLost()).
Wywołanie tej funkcji w niepustym, okrągłym buforze wysyłania TCP podłączonym do punktu końcowego TCP powoduje niezdefiniowane zachowanie.
Szczegóły | |||
---|---|---|---|
Parametry |
|
otTcpCircularSendBufferGetFreeSpace
size_t otTcpCircularSendBufferGetFreeSpace( const otTcpCircularSendBuffer *aSendBuffer )
Zwraca ilość wolnego miejsca w buforze wysyłania cyklicznego TCP.
Ta operacja zawsze kończy się powodzeniem.
Szczegóły | |||
---|---|---|---|
Parametry |
|
||
Zwroty |
Ilość wolnego miejsca w buforze wysyłania.
|
otTcpCircularSendBufferHandleForwardProgress
void otTcpCircularSendBufferHandleForwardProgress( otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer )
Wykonuje obsługę specyficznego dla bufora wysyłania cyklicznego w wywołaniu zwrotnym otTcpForwardprogress.
Aplikacja powinna zainstalować wywołanie zwrotne otTcpForwardProgress() w punkcie otTcpEndpoint i wywołać tę funkcję na początku tej funkcji w celu przetwarzania charakterystycznego dla przepływu pracy.
W ramach funkcji wywołania zwrotnego aplikacja może określić ilość wolnego miejsca w cyklicznym buforze wysyłania, wywołując funkcję otTcpCircularSendBufferFreeSpace() lub porównując wartość aInSendBuffer
z pojemnością bufora wysyłania wybraną przez użytkownika podczas wywoływania funkcji otTcpCircularSendBufferInitialize().
Szczegóły | |||||
---|---|---|---|---|---|
Parametry |
|
otTcpCircularSendBufferInitialize
void otTcpCircularSendBufferInitialize( otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity )
Inicjuje bufor wysyłania cyklicznego TCP.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
otTcpCircularSendBufferWrite
otError otTcpCircularSendBufferWrite( otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags )
Wysyła dane w punkcie końcowym TCP przy użyciu udostępnionego bufora wysyłania cyklicznego TCP do zarządzania buforowaniem.
Po wywołaniu tej funkcji funkcje aSendBuffer
i aEndpoint
są ze sobą uważane za połączone. Gdy są podłączone, WSZYSTKIE operacje wysyłania dla aEndpoint
muszą być wykonywane przy użyciu aSendBuffer
, a WSZYSTKIE operacje na aSendBuffer
muszą być powiązane z aEndpoint
.
Jedynym sposobem „odłączenia” bufora wysyłania cyklicznego TCP i punktu końcowego TCP jest zaczekanie, aż bufor wysyłania zostanie całkowicie pusty. Może się to zdarzyć na 2 sposoby: (1) wszystkie dane w buforze wysyłania są wysyłane i akceptowane w toku normalnego działania protokołu TCP lub (2) połączenie jest zakończone.
Zalecanym wzorcem wykorzystania jest użycie jednego bufora wysyłania cyklicznego TCP z punktem końcowym TCP oraz wysyłanie danych w tym punkcie końcowym tylko przez powiązany bufor cykliczny TCP. Ten zalecany wzorzec użytkowania eliminuje opisane powyżej problemy, zawsze używając jednocześnie punktu końcowego TCP i bufora wysyłania cyklicznego TCP razem.
Gdy powrót do bufora wysyłania osiągnie limit, tylko prefiks dostarczonych danych jest kopiowany do bufora wysyłania.
Szczegóły | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||||
Zwracane wartości |
|
otTcpMbedTlsSslRecvCallback
int otTcpMbedTlsSslRecvCallback( void *aCtx, unsigned char *aBuf, size_t aLen )
Nieblokujące wywołanie zwrotne przekazywane do mbedtls_ssl_set_bio.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
||||||
Zwroty |
Liczba odebranych bajtów lub kod błędu mbedtls.
|
otTcpMbedTlsSslSendCallback
int otTcpMbedTlsSslSendCallback( void *aCtx, const unsigned char *aBuf, size_t aLen )
Nieblokujące: wyślij wywołanie zwrotne do parametru mbedtls_ssl_set_bio.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
||||||
Zwroty |
Liczba wysłanych bajtów lub kod błędu mbedtls.
|
Zasoby
Tematy referencyjne interfejsu OpenThread API pochodzą z kodu źródłowego dostępnego w GitHub. Aby dowiedzieć się więcej lub dołączyć do naszej dokumentacji, skorzystaj z sekcji Zasoby.