TCP 抽象化
這個模組包含基本 TCP API 的簡易抽象層。
摘要
列舉 |
|
---|---|
anonymous enum
|
列舉 這個列舉定義了傳送至 otTcpCircularSendBufferWrite 的旗標。 |
Typedefs |
|
---|---|
otTcpCircularSendBuffer
|
typedefstruct otTcpCircularSendBuffer
這個結構代表與 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() 回呼在學習環狀傳送緩衝區中,有足夠空間時瞭解該空間。在附加 otTcpCircularSendBuffer 的 otTcpEndpoint 上,應用程式「必須」安裝 otTcpForwardProgress() 回呼,並呼叫回呼函式開始時所附加 otTcpCircularSendBuffer 的 otTcpCircularSendBufferHandleForwardProgress()。建議您使用 otTcpSendDone() 回呼,因為所有 otLinkedBuffers 的管理作業都是由環狀傳送緩衝區處理。
應用程式不應直接檢查這個結構的欄位,而應該僅透過此檔案中提供的簽章的 TCP Circular Send Buffer API 函式來與其互動。
otTcpEndpointAndCircularSendBuffer
struct otTcpEndpointAndCircularSendBuffer otTcpEndpointAndCircularSendBuffer
與 mbedtls_ssl_set_bio 搭配使用的結構定義結構。
Functions
otTcpCircularSendBufferDeInitial
otError otTcpCircularSendBufferDeinitialize( otTcpCircularSendBuffer *aSendBuffer )
初始化 TCP 圓形傳送緩衝區,並在附加時卸離該緩衝區。
如果 TCP 循環傳送緩衝區沒有內容,則作業會失敗。
詳細資料 | |||||
---|---|---|---|---|---|
參數 |
|
||||
回傳值 |
|
otTcpCircularSendBufferForceDropAll 全部
void otTcpCircularSendBufferForceDiscardAll( otTcpCircularSendBuffer *aSendBuffer )
強制捨棄循環傳送緩衝區中的所有資料。
當 TCP 連線無預警終止時 (例如,應用程式呼叫 otTcpEndpointAbort() 或透過 otTcpConnection Loss() 回呼通知重設連線),應用程式應呼叫此函式。
在附加至 TCP 端點的非空白 TCP 環狀傳送緩衝區上呼叫此函式,會導致未定義的行為。
詳細資料 | |||
---|---|---|---|
參數 |
|
otTcpCircularSendBufferGetFreeSpace
size_t otTcpCircularSendBufferGetFreeSpace( const otTcpCircularSendBuffer *aSendBuffer )
傳回 TCP 圓形傳送緩衝區中的可用空間大小。
這項作業將一律成功。
詳細資料 | |||
---|---|---|---|
參數 |
|
||
傳回 |
傳送緩衝區中的可用空間大小。
|
otTcpCircularSendBufferHandleForwardProgress
void otTcpCircularSendBufferHandleForwardProgress( otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer )
在 otTcpforwardProgress 回呼中執行循環傳送傳送緩衝區專屬處理。
應用程式應在 otTcpEndpoint 上安裝 otTcpForwardProgress() 回呼,並在回呼函式的開始時呼叫此函式,以執行循環傳送特定緩衝區處理程序。
在回呼函式中,應用程式可透過呼叫 otTcpCircularSendBufferFreeSpace() 或比較 aInSendBuffer
和傳送緩衝區容量 (在呼叫 otTcpCircularSendBufferInitialize() 時選擇),決定循環傳送緩衝區中的可用空間大小。
詳細資料 | |||||
---|---|---|---|---|---|
參數 |
|
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 取得。如需詳細資訊或為說明文件貢獻一己之力,請參閱資源。