TCP 추상화
이 모듈에는 기본 TCP API를 기반으로 사용하기 쉬운 추상화가 포함되어 있습니다.
요약
열거 |
|
---|---|
anonymous enum
|
enumotTcpCircularSendBufferWrite 에 전달된 플래그를 정의합니다. |
Typedef |
|
---|---|
otTcpCircularSendBuffer
|
typedefstruct otTcpCircularSendBuffer
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를 관리합니다.
otTcpCircularSendBuffer는 otTcpEndpoint에서 제공하는 otLinkedBuffer 기반 API 위에 구현됩니다. 일단 otTcpEndpoint에 연결되면 otTcpCircularSendBuffer가 연결의 otLinkedBuffers를 관리하는 모든 작업을 실행합니다. 즉, otTcpCircularSendBuffer가 otTcpEndpoint에 연결되면 애플리케이션이 해당 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 순환 전송 버퍼가 비어 있지 않으면 이 작업은 실패합니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
||||
반환 값 |
|
otTcpCircularSendBufferForceDiscardAll
void otTcpCircularSendBufferForceDiscardAll( otTcpCircularSendBuffer *aSendBuffer )
순환 전송 버퍼의 모든 데이터를 강제로 삭제합니다.
TCP 연결이 의도치 않게 종료될 때 (예: 애플리케이션이 otTcpEndpointAbort()를 호출하거나 otTcpConnectionLost() 콜백을 통해 연결 재설정 알림을 받은 경우) 애플리케이션이 이 함수를 호출해야 합니다.
TCP 엔드포인트에 연결된 비어 있지 않은 TCP 순환 전송 버퍼에서 이 함수를 호출하면 정의되지 않은 동작이 발생합니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
otTcpCircularSendBufferGetFreeSpace
size_t otTcpCircularSendBufferGetFreeSpace( const otTcpCircularSendBuffer *aSendBuffer )
TCP 순환 전송 버퍼의 여유 공간을 반환합니다.
이 작업은 항상 성공합니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
||
반환 |
전송 버퍼의 여유 공간 크기
|
otTcpCircularSendBufferHandleForwardProgress
void otTcpCircularSendBufferHandleForwardProgress( otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer )
otTcpForwardProgress 콜백에서 순환 전송 버퍼별 처리를 실행합니다.
애플리케이션은 otTcpEndpoint에 otTcpForwardProgress() 콜백을 설치하고 순환 전송 버퍼 관련 처리를 위해 콜백 함수 시작 시 이 함수를 호출해야 합니다.
콜백 함수에서 애플리케이션은 otTcpCircularSendBufferFreeSpace()를 호출하거나 otTcpCircularSendBufferInitialize()를 호출할 때 사용자가 선택한 전송 버퍼의 용량과 aInSendBuffer
를 비교하여 순환 전송 버퍼의 여유 공간 크기를 확인할 수 있습니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
otTcpCircularSendBufferInitialize
void otTcpCircularSendBufferInitialize( otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity )
TCP 순환 전송 버퍼를 초기화합니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
otTcpCircularSendBufferWrite
otError otTcpCircularSendBufferWrite( otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags )
제공된 TCP 순환 전송 버퍼를 사용하여 버퍼링을 관리하여 TCP 엔드포인트에서 데이터를 전송합니다.
이 함수가 호출되면 aSendBuffer
와 aEndpoint
가 서로 '연결된' 것으로 간주됩니다. 연결되어 있는 동안 aEndpoint
의 모든 전송 작업은 aSendBuffer
를 사용하여 실행해야 하며 aSendBuffer
의 모든 작업은 aEndpoint
와 연결해야 합니다 .
TCP 순환 전송 버퍼와 TCP 엔드포인트를 '분리'하는 유일한 방법은 전송 버퍼가 완전히 비워질 때까지 기다리는 것입니다. 이는 두 가지 방식으로 발생할 수 있습니다. (1) 전송 버퍼의 모든 데이터가 TCP 프로토콜 작업 중에 전송되고 확인되거나, (2) 연결이 종료됩니다.
TCP 엔드포인트에서 단일 TCP 순환 전송 버퍼를 사용하고, 연결된 TCP 순환 버퍼를 통해서만 이 TCP 엔드포인트에서 데이터를 전송하는 것이 좋습니다. 이 권장 사용 패턴은 항상 TCP 엔드포인트와 TCP 순환 전송 버퍼를 함께 사용하여 위에서 설명한 문제를 회피합니다.
순환 전송 버퍼가 용량에 도달하면 제공된 데이터의 접두사만 순환 전송 버퍼에 복사됩니다.
세부정보 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||||||
반환 값 |
|
otTcpMbedTlsSslRecvCallback
int otTcpMbedTlsSslRecvCallback( void *aCtx, unsigned char *aBuf, size_t aLen )
mbedtls_ssl_set_bio에 전달할 비 블로킹 수신 콜백입니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 |
수신된 바이트 수 또는 mbedtls 오류 코드입니다.
|
otTcpMbedTlsSslSendCallback
int otTcpMbedTlsSslSendCallback( void *aCtx, const unsigned char *aBuf, size_t aLen )
mbedtls_ssl_set_bio에 전달할 비블로킹 전송 콜백입니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 |
전송된 바이트 수 또는 mbedtls 오류 코드입니다.
|
자료
OpenThread API 참조 주제는 GitHub에서 제공되는 소스 코드에서 비롯됩니다. 자세한 내용을 알아보거나 문서에 참여하려면 리소스를 참고하세요.