透過集合功能整理內容 你可以依據偏好儲存及分類內容。

TCP 抽象化

這個模組包含基本 TCP API 的簡易抽象層。

摘要

列舉

anonymous enum 列舉
這個列舉定義了傳送至 otTcpCircularSendBufferWrite 的旗標。

Typedefs

otTcpCircularSendBuffer typedef
這個結構代表與 TCP 端點搭配使用的環狀傳送緩衝區。
otTcpEndpointAndCircularSendBuffer typedef
與 mbedtls_ssl_set_bio 搭配使用的結構定義結構。

Functions

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 搭配使用的結構定義結構。

列舉

匿名列舉

 anonymous enum

這個列舉定義了傳送至 otTcpCircularSendBufferWrite 的旗標。

Typedefs

OTTcpCircularSendBuffer

struct otTcpCircularSendBuffer otTcpCircularSendBuffer

這個結構代表與 TCP 端點搭配使用的環狀傳送緩衝區。

您可以選擇使用循環傳送緩衝區。應用程式可以使用 TCP 端點直接傳送 otLinkedBuffers 資料來傳送資料。但是,有些應用程式覺得使用環形傳送緩衝區可能比較方便;這類應用程式可以呼叫 otTcpCircularSendBufferWrite(),將圓形傳送緩衝區「附加」到 TCP 端點,然後透過循環傳送緩衝區管理資料 otLinkedBuffers。

otTcpCircularSendBuffer 是在 otTcpEndpoint 提供的 otLinkedBuffer 式 API 之上實作。附加至 otTcpEndpoint 之後,otTcpCircularSendBuffer 會執行所有管理連線的 otLinkedBuffers 作業。這表示當您的 otTcpCircularSendBuffer 連接至 otTcpEndpoint 時,應用程式就不應在該 otTcpEndpoint 上呼叫 otTcpSendByReference()otTcpSendByExtension()。因此,應用程式應使用 otTcpCircularSendBufferWrite() 將資料新增至傳送緩衝區。

使用者可以透過 otTcpForwardProgress() 回呼在學習環狀傳送緩衝區中,有足夠空間時瞭解該空間。在附加 otTcpCircularSendBufferotTcpEndpoint 上,應用程式「必須」安裝 otTcpForwardProgress() 回呼,並呼叫回呼函式開始時所附加 otTcpCircularSendBufferotTcpCircularSendBufferHandleForwardProgress()。建議您使用 otTcpSendDone() 回呼,因為所有 otLinkedBuffers 的管理作業都是由環狀傳送緩衝區處理。

應用程式不應直接檢查這個結構的欄位,而應該僅透過此檔案中提供的簽章的 TCP Circular Send Buffer API 函式來與其互動。

otTcpEndpointAndCircularSendBuffer

struct otTcpEndpointAndCircularSendBuffer otTcpEndpointAndCircularSendBuffer

與 mbedtls_ssl_set_bio 搭配使用的結構定義結構。

Functions

otTcpCircularSendBufferDeInitial

otError otTcpCircularSendBufferDeinitialize(
  otTcpCircularSendBuffer *aSendBuffer
)

初始化 TCP 圓形傳送緩衝區,並在附加時卸離該緩衝區。

如果 TCP 循環傳送緩衝區沒有內容,則作業會失敗。

詳細資料
參數
[in] aSendBuffer
要初始化的 TCP 循環傳送緩衝區。
回傳值
OT_ERROR_NONE
成功初始化 TCP 循環傳送緩衝區。
OT_ERROR_BUSY
循環緩衝區包含資料,且無法初始化。

otTcpCircularSendBufferForceDropAll 全部

void otTcpCircularSendBufferForceDiscardAll(
  otTcpCircularSendBuffer *aSendBuffer
)

強制捨棄循環傳送緩衝區中的所有資料。

當 TCP 連線無預警終止時 (例如,應用程式呼叫 otTcpEndpointAbort() 或透過 otTcpConnection Loss() 回呼通知重設連線),應用程式應呼叫此函式。

在附加至 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 回呼中執行循環傳送傳送緩衝區專屬處理。

應用程式應在 otTcpEndpoint 上安裝 otTcpForwardProgress() 回呼,並在回呼函式的開始時呼叫此函式,以執行循環傳送特定緩衝區處理程序。

在回呼函式中,應用程式可透過呼叫 otTcpCircularSendBufferFreeSpace() 或比較 aInSendBuffer 和傳送緩衝區容量 (在呼叫 otTcpCircularSendBufferInitialize() 時選擇),決定循環傳送緩衝區中的可用空間大小。

詳細資料
參數
[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
aData 指向的資料,以複製到 TCP 圓形傳送緩衝區。
[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
[out] aBuf
用來接收資料的緩衝區。
[in] aLen
可接收的資料量上限。
傳回
收到的位元組數量或 mbedtls 錯誤代碼。

otTcpMbedTlsSslSendCallback

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

非阻塞式傳送回呼以傳遞至 mbedtls_ssl_set_bio。

詳細資料
參數
[in] aCtx
[in] aBuf
要新增到傳送緩衝區的資料。
[in] aLen
要新增到傳送緩衝區的資料量。
傳回
傳送的位元組數,或 mbedtls 錯誤代碼。

資源

OpenThread API 參考資料主題來自原始碼,可在 GitHub 取得。如需詳細資訊或為說明文件貢獻一己之力,請參閱資源