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 typedef
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
[in] aSendBuffer
Bufor wysyłania cyklicznego TCP do deinicjowania.
Zwracane wartości
OT_ERROR_NONE
Usunięto zainicjowanie bufora wysyłania cyklicznego TCP.
OT_ERROR_BUSY
Bufor kołowy zawiera dane i nie można go deinicjować.

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
[in] aSendBuffer
Bufor wysyłania cyklicznego TCP, którego dane mają zostać odrzucone.

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
[in] aSendBuffer
Wskaźnik do bufora wysyłania cyklicznego TCP, którego ilość wolnego miejsca zostanie zwrócona.
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
[in] aSendBuffer
Wskaźnik do bufora wysyłania cyklicznego TCP w punkcie końcowym, dla którego wywołano funkcję otTcpForwardProgress().
[in] aInSendBuffer
Wartość aInSendBuffer przekazana do wywołania zwrotnego otTcpForwardProgress().

otTcpCircularSendBufferInitialize

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

Inicjuje bufor wysyłania cyklicznego TCP.

Szczegóły
Parametry
[in] aSendBuffer
Wskaźnik do zainicjowanego bufora wysyłania cyklicznego TCP.
[in] aDataBuffer
Wskaźnik do pamięci, która ma być używana do przechowywania danych w buforze wysyłania cyklicznego TCP.
[in] aCapacity
Pojemność (w bajtach) bufora wysyłania cyklicznego TCP, który musi być równy rozmiarowi pamięci, na którą wskazuje aDataBuffer .

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
[in] aEndpoint
Punkt końcowy TCP, z którego mają być wysyłane dane.
[in] aSendBuffer
Bufor wysyłania cyklicznego TCP, do którego mają być kopiowane dane.
[in] aData
Wskaźnik do danych do skopiowania do bufora wysyłania cyklicznego TCP.
[in] aLength
Długość danych wskazywanych przez aData, które mają zostać skopiowane do bufora wysyłania cyklicznego TCP.
[out] aWritten
Wartość wypełniona ilością danych skopiowanych do bufora wysyłania, która może być mniejsza niż aLength, jeśli bufor wysyłania się zużyje.
[in] aFlags
Flagi określające opcje tej operacji (patrz wyliczenie powyżej).
Zwracane wartości
OT_ERROR_NONE
Dane zostały skopiowane do bufora wysyłania i wysłane przez punkt końcowy TCP.
OT_ERROR_FAILED
Nie udało się wysłać danych w punkcie końcowym TCP.

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
[in] aCtx
[out] aBuf
Bufor, do którego mają być przesyłane dane.
[in] aLen
Maksymalna ilość danych, które można odebrać.
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
[in] aCtx
[in] aBuf
Dane do dodania do bufora wysyłania.
[in] aLen
Ilość danych, które mają zostać dodane do bufora wysyłania.
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.