TCP 추상화

이 모듈에는 기본 TCP API를 기반으로 사용하기 쉬운 추상화가 포함되어 있습니다.

요약

열거

anonymous enum enum
otTcpCircularSendBufferWrite에 전달된 플래그를 정의합니다.

Typedef

otTcpCircularSendBuffer typedef
TCP 엔드포인트와 함께 사용하기 위한 순환 전송 버퍼를 나타냅니다.
otTcpEndpointAndCircularSendBuffer typedef
mbedtls_ssl_set_bio와 함께 사용할 컨텍스트 구조입니다.

함수

otTcpCircularSendBufferDeinitialize(otTcpCircularSendBuffer *aSendBuffer)
TCP 순환 전송 버퍼의 초기화를 해제하고 연결된 경우 분리합니다.
otTcpCircularSendBufferForceDiscardAll(otTcpCircularSendBuffer *aSendBuffer)
void
순환 전송 버퍼의 모든 데이터를 강제로 삭제합니다.
otTcpCircularSendBufferGetFreeSpace(const otTcpCircularSendBuffer *aSendBuffer)
size_t
TCP 순환 전송 버퍼의 여유 공간을 반환합니다.
otTcpCircularSendBufferHandleForwardProgress(otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer)
void
otTcpForwardProgress 콜백에서 순환 전송 버퍼별 처리를 실행합니다.
otTcpCircularSendBufferInitialize(otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity)
void
TCP 순환 전송 버퍼를 초기화합니다.
otTcpCircularSendBufferWrite(otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags)
제공된 TCP 순환 전송 버퍼를 사용하여 버퍼링을 관리하여 TCP 엔드포인트에서 데이터를 전송합니다.
otTcpMbedTlsSslRecvCallback(void *aCtx, unsigned char *aBuf, size_t aLen)
int
mbedtls_ssl_set_bio에 전달할 비 블로킹 수신 콜백입니다.
otTcpMbedTlsSslSendCallback(void *aCtx, const unsigned char *aBuf, size_t aLen)
int
mbedtls_ssl_set_bio에 전달할 비블로킹 전송 콜백입니다.

구조체

otTcpCircularSendBuffer

TCP 엔드포인트와 함께 사용하기 위한 순환 전송 버퍼를 나타냅니다.

otTcpEndpointAndCircularSendBuffer

mbedtls_ssl_set_bio와 함께 사용할 컨텍스트 구조입니다.

열거형

익명의 enum

 anonymous enum

otTcpCircularSendBufferWrite에 전달된 플래그를 정의합니다.

Typedef

otTcpCircularSendBuffer

struct otTcpCircularSendBuffer otTcpCircularSendBuffer

TCP 엔드포인트와 함께 사용하기 위한 순환 전송 버퍼를 나타냅니다.

순환 전송 버퍼 사용은 선택사항입니다. 애플리케이션은 TCP 엔드포인트를 사용하여 otLinkedBuffers를 직접 관리함으로써 데이터를 전송할 수 있습니다. 하지만 일부 애플리케이션에서는 순환 전송 버퍼를 사용하는 것이 더 편리할 수 있습니다. 이러한 애플리케이션은 otTcpCircularSendBufferWrite()를 호출하여 순환 전송 버퍼를 TCP 엔드포인트에 '연결'하고 이 TCP 엔드포인트의 데이터를 전송하며, 순환 전송 버퍼를 사용해 기본 otLinkedBuffers를 관리합니다.

otTcpCircularSendBufferotTcpEndpoint에서 제공하는 otLinkedBuffer 기반 API 위에 구현됩니다. 일단 otTcpEndpoint에 연결되면 otTcpCircularSendBuffer가 연결의 otLinkedBuffers를 관리하는 모든 작업을 실행합니다. 즉, otTcpCircularSendBufferotTcpEndpoint에 연결되면 애플리케이션이 해당 otTcpEndpoint에서 otTcpSendByReference() 또는 otTcpSendByExtension()을 호출해서는 안 됩니다. 대신 애플리케이션은 otTcpCircularSendBufferWrite()를 사용하여 전송 버퍼에 데이터를 추가해야 합니다.

otTcpForwardProgress() 콜백은 순환 전송 버퍼에서 공간을 사용할 수 있는 시점을 사용자가 알 수 있도록 만들어졌습니다. otTcpCircularSendBuffer가 연결된 otTcpEndpoint에서 애플리케이션은 otTcpForwardProgress() 콜백을 설치하고 콜백 함수 시작 시 연결된 otTcpCircularSendBuffer에서 otTcpCircularSendBufferHandleForwardProgress()를 호출해야 합니다(MUST). otLinkedBuffers의 모든 관리는 순환 전송 버퍼에서 처리하므로 사용자가 otTcpSendDone() 콜백을 설치하지 않는 것이 좋습니다.

애플리케이션은 이 구조의 필드를 직접 검사해서는 안 됩니다. 애플리케이션은 서명이 이 파일에 제공된 TCP Circular Send Buffer API 함수를 통해서만 상호작용해야 합니다.

otTcpEndpointAndCircularSendBuffer

struct otTcpEndpointAndCircularSendBuffer otTcpEndpointAndCircularSendBuffer

mbedtls_ssl_set_bio와 함께 사용할 컨텍스트 구조입니다.

함수

otTcpCircularSendBufferDeinitialize

otError otTcpCircularSendBufferDeinitialize(
  otTcpCircularSendBuffer *aSendBuffer
)

TCP 순환 전송 버퍼의 초기화를 해제하고 연결된 경우 분리합니다.

TCP 순환 전송 버퍼가 비어 있지 않으면 이 작업은 실패합니다.

세부정보
매개변수
[in] aSendBuffer
초기화 해제할 TCP 순환 전송 버퍼입니다.
반환 값
OT_ERROR_NONE
TCP 순환 전송 버퍼의 초기화를 성공적으로 해제합니다.
OT_ERROR_BUSY
원형 버퍼에 데이터가 포함되어 있으며 초기화 해제할 수 없습니다.

otTcpCircularSendBufferForceDiscardAll

void otTcpCircularSendBufferForceDiscardAll(
  otTcpCircularSendBuffer *aSendBuffer
)

순환 전송 버퍼의 모든 데이터를 강제로 삭제합니다.

TCP 연결이 의도치 않게 종료될 때 (예: 애플리케이션이 otTcpEndpointAbort()를 호출하거나 otTcpConnectionLost() 콜백을 통해 연결 재설정 알림을 받은 경우) 애플리케이션이 이 함수를 호출해야 합니다.

TCP 엔드포인트에 연결된 비어 있지 않은 TCP 순환 전송 버퍼에서 이 함수를 호출하면 정의되지 않은 동작이 발생합니다.

세부정보
매개변수
[in] aSendBuffer
데이터를 삭제할 TCP 순환 전송 버퍼.

otTcpCircularSendBufferGetFreeSpace

size_t otTcpCircularSendBufferGetFreeSpace(
  const otTcpCircularSendBuffer *aSendBuffer
)

TCP 순환 전송 버퍼의 여유 공간을 반환합니다.

이 작업은 항상 성공합니다.

세부정보
매개변수
[in] aSendBuffer
여유 공간이 반환되는 TCP 순환 전송 버퍼에 대한 포인터입니다.
반환
전송 버퍼의 여유 공간 크기

otTcpCircularSendBufferHandleForwardProgress

void otTcpCircularSendBufferHandleForwardProgress(
  otTcpCircularSendBuffer *aSendBuffer,
  size_t aInSendBuffer
)

otTcpForwardProgress 콜백에서 순환 전송 버퍼별 처리를 실행합니다.

애플리케이션은 otTcpEndpointotTcpForwardProgress() 콜백을 설치하고 순환 전송 버퍼 관련 처리를 위해 콜백 함수 시작 시 이 함수를 호출해야 합니다.

콜백 함수에서 애플리케이션은 otTcpCircularSendBufferFreeSpace()를 호출하거나 otTcpCircularSendBufferInitialize()를 호출할 때 사용자가 선택한 전송 버퍼의 용량과 aInSendBuffer를 비교하여 순환 전송 버퍼의 여유 공간 크기를 확인할 수 있습니다.

세부정보
매개변수
[in] aSendBuffer
otTcpForwardProgress()가 호출된 엔드포인트의 TCP 순환 전송 버퍼에 대한 포인터입니다.
[in] aInSendBuffer
otTcpForwardProgress() 콜백에 전달된 aInSendBuffer

otTcpCircularSendBufferInitialize

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

TCP 순환 전송 버퍼를 초기화합니다.

세부정보
매개변수
[in] aSendBuffer
초기화할 TCP 순환 전송 버퍼에 대한 포인터입니다.
[in] aDataBuffer
TCP 순환 전송 버퍼에 데이터를 저장하는 데 사용할 메모리에 대한 포인터입니다.
[in] aCapacity
TCP 순환 전송 버퍼의 용량(바이트)으로, aDataBuffer에서 가리키는 메모리의 크기와 동일해야 합니다 .

otTcpCircularSendBufferWrite

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

제공된 TCP 순환 전송 버퍼를 사용하여 버퍼링을 관리하여 TCP 엔드포인트에서 데이터를 전송합니다.

이 함수가 호출되면 aSendBufferaEndpoint가 서로 '연결된' 것으로 간주됩니다. 연결되어 있는 동안 aEndpoint의 모든 전송 작업은 aSendBuffer를 사용하여 실행해야 하며 aSendBuffer의 모든 작업은 aEndpoint와 연결해야 합니다 .

TCP 순환 전송 버퍼와 TCP 엔드포인트를 '분리'하는 유일한 방법은 전송 버퍼가 완전히 비워질 때까지 기다리는 것입니다. 이는 두 가지 방식으로 발생할 수 있습니다. (1) 전송 버퍼의 모든 데이터가 TCP 프로토콜 작업 중에 전송되고 확인되거나, (2) 연결이 종료됩니다.

TCP 엔드포인트에서 단일 TCP 순환 전송 버퍼를 사용하고, 연결된 TCP 순환 버퍼를 통해서만 이 TCP 엔드포인트에서 데이터를 전송하는 것이 좋습니다. 이 권장 사용 패턴은 항상 TCP 엔드포인트와 TCP 순환 전송 버퍼를 함께 사용하여 위에서 설명한 문제를 회피합니다.

순환 전송 버퍼가 용량에 도달하면 제공된 데이터의 접두사만 순환 전송 버퍼에 복사됩니다.

세부정보
매개변수
[in] aEndpoint
데이터를 전송할 TCP 엔드포인트입니다.
[in] aSendBuffer
데이터를 복사할 TCP 순환 전송 버퍼.
[in] aData
TCP 순환 전송 버퍼에 복사할 데이터에 대한 포인터입니다.
[in] aLength
TCP 순환 전송 버퍼로 복사하기 위해 aData가 가리키는 데이터의 길이입니다.
[out] aWritten
전송 버퍼에 복사된 데이터의 양으로 채워집니다. 전송 버퍼가 용량에 도달하면 aLength보다 적을 수 있습니다.
[in] aFlags
이 작업의 옵션을 지정하는 플래그입니다 (위의 열거형 참고).
반환 값
OT_ERROR_NONE
데이터를 전송 버퍼에 복사해 TCP 엔드포인트로 전송했습니다.
OT_ERROR_FAILED
TCP 엔드포인트에서 데이터를 전송할 수 없습니다.

otTcpMbedTlsSslRecvCallback

int otTcpMbedTlsSslRecvCallback(
  void *aCtx,
  unsigned char *aBuf,
  size_t aLen
)

mbedtls_ssl_set_bio에 전달할 비 블로킹 수신 콜백입니다.

세부정보
매개변수
[in] aCtx
otTcpEndpointAndCircularSendBuffer에 대한 포인터입니다.
[out] aBuf
데이터를 수신할 버퍼입니다.
[in] aLen
수신할 수 있는 최대 데이터 양입니다.
반환
수신된 바이트 수 또는 mbedtls 오류 코드입니다.

otTcpMbedTlsSslSendCallback

int otTcpMbedTlsSslSendCallback(
  void *aCtx,
  const unsigned char *aBuf,
  size_t aLen
)

mbedtls_ssl_set_bio에 전달할 비블로킹 전송 콜백입니다.

세부정보
매개변수
[in] aCtx
otTcpEndpointAndCircularSendBuffer에 대한 포인터입니다.
[in] aBuf
전송 버퍼에 추가할 데이터입니다.
[in] aLen
전송 버퍼에 추가할 데이터의 양입니다.
반환
전송된 바이트 수 또는 mbedtls 오류 코드입니다.

자료

OpenThread API 참조 주제는 GitHub에서 제공되는 소스 코드에서 비롯됩니다. 자세한 내용을 알아보거나 문서에 참여하려면 리소스를 참고하세요.