TCP 抽象
這個模組包含基礎 TCP API 上易於使用的抽象化機制。
摘要
列舉 |
|
---|---|
anonymous enum
|
列舉 定義傳遞至 otTcpCircularSendBufferWrite 的旗標。 |
Typedefs |
|
---|---|
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 搭配使用的結構定義結構。 |
列舉
匿名列舉
anonymous enum
定義傳遞至 otTcpCircularSendBufferWrite
的旗標。
Typedefs
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 上,於回呼函式開始時,在附加的 otTcpCircularSendBuffer建議使用者「不要」安裝 otTcpSendDone() 回呼,因為所有 otLinkedBuffers 的管理作業都會由循環傳送緩衝區處理。
應用程式不應直接檢查這個結構的欄位,應只能透過 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(),或經由 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 取得。如要瞭解詳情或對說明文件做出貢獻,請參閱資源。