Mô hình trừu tượng của TCP
Mô-đun này bao gồm các mô-đun trừu tượng dễ sử dụng trên API TCP cơ sở.
Tóm tắt
Bảng liệt kê |
|
---|---|
anonymous enum
|
enum Xác định cờ được truyền đến otTcpCircularSendBufferWrite . |
Typedef |
|
---|---|
otTcpCircularSendBuffer
|
typedefstruct otTcpCircularSendBuffer
Biểu thị vùng đệm gửi tròn để sử dụng với điểm cuối TCP. |
otTcpEndpointAndCircularSendBuffer
|
typedef Cấu trúc ngữ cảnh để sử dụng với mbedtls_SSL_set_bio. |
Hàm |
|
---|---|
otTcpCircularSendBufferDeinitialize(otTcpCircularSendBuffer *aSendBuffer)
|
Huỷ khởi động vùng đệm gửi vòng tròn TCP, tách vùng đệm này nếu được đính kèm.
|
otTcpCircularSendBufferForceDiscardAll(otTcpCircularSendBuffer *aSendBuffer)
|
void
Buộc loại bỏ tất cả dữ liệu trong vùng đệm gửi vòng tròn.
|
otTcpCircularSendBufferGetFreeSpace(const otTcpCircularSendBuffer *aSendBuffer)
|
size_t
Trả về dung lượng trống trong vùng đệm gửi vòng tròn TCP.
|
otTcpCircularSendBufferHandleForwardProgress(otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer)
|
void
Thực hiện xử lý cụ thể theo vòng tròn-gửi-bộ đệm trong lệnh gọi lại otTcpForwardProgress.
|
otTcpCircularSendBufferInitialize(otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity)
|
void
Khởi động vùng đệm gửi vòng tròn TCP.
|
otTcpCircularSendBufferWrite(otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags)
|
Gửi dữ liệu trên điểm cuối TCP, sử dụng bộ đệm gửi vòng tròn TCP được cung cấp để quản lý việc lưu vào bộ đệm.
|
otTcpMbedTlsSslRecvCallback(void *aCtx, unsigned char *aBuf, size_t aLen)
|
int
Phương thức không chặn nhận lệnh gọi lại để truyền tới mbedtls_SSL_set_bio.
|
otTcpMbedTlsSslSendCallback(void *aCtx, const unsigned char *aBuf, size_t aLen)
|
int
Phương thức không chặn lệnh gọi lại để truyền tới mbedtls_SSL_set_bio.
|
Cấu trúc |
|
---|---|
otTcpCircularSendBuffer |
Biểu thị vùng đệm gửi tròn để sử dụng với điểm cuối TCP. |
otTcpEndpointAndCircularSendBuffer |
Cấu trúc ngữ cảnh để sử dụng với mbedtls_SSL_set_bio. |
Bảng liệt kê
enum ẩn danh
anonymous enum
Xác định cờ được truyền đến otTcpCircularSendBufferWrite
.
Typedef
otTcpCircularSendBuffer
struct otTcpCircularSendBuffer otTcpCircularSendBuffer
Biểu thị vùng đệm gửi tròn để sử dụng với điểm cuối TCP.
Không bắt buộc phải sử dụng vùng đệm gửi vòng tròn. Các ứng dụng có thể dùng điểm cuối TCP để gửi dữ liệu bằng cách quản lý trực tiếp otLinkedBuffers. Tuy nhiên, một số ứng dụng có thể thấy thuận tiện hơn khi có vùng đệm gửi vòng tròn; các ứng dụng như vậy có thể gọi otTcpCircularSendBufferWrite() để "đính kèm" bộ đệm gửi vòng tròn đến điểm cuối TCP và gửi dữ liệu trên điểm cuối TCP đó, dựa vào vùng đệm gửi tròn để quản lý otLinkedBuffers cơ bản.
otTcpCircularSendBuffer được triển khai trên API dựa trên otLinkedBuffer do otTcpEndpoint cung cấp. Sau khi được đính kèm vào một otTcpEndpoint, một otTcpCircularSendBuffer sẽ thực hiện tất cả công việc quản lý otLinkedBuffers cho kết nối. Điều này có nghĩa là sau khi một otTcpCircularSendBuffer được đính kèm vào một otTcpEndpoint, ứng dụng không được gọi otTcpSendByReference() hoặc otTcpSendByExtension() trên otTcpEndpoint đó. Thay vào đó, ứng dụng phải sử dụng otTcpCircularSendBufferWrite() để thêm dữ liệu vào bộ đệm gửi.
Lệnh gọi lại otTcpForwardProgress() là cách thức để người dùng tìm hiểu thời điểm có dung lượng trong vùng đệm gửi vòng tròn. Trên một otTcpEndpoint được đính kèm otTcpCircularSendBuffer, ứng dụng PHẢI cài đặt lệnh gọi lại otTcpForwardProgress() và gọi otTcpCircularSendBufferHandleForwardProgress() đính kèm trên otTcpCircularSendBuffer ở đầu hàm callback. Người dùng KHÔNG nên cài đặt lệnh gọi lại otTcpSendDone(), vì mọi hoạt động quản lý otLinkedBuffers đều được xử lý bằng vùng đệm gửi tròn.
Ứng dụng không được kiểm tra trực tiếp các trường của cấu trúc này; ứng dụng chỉ nên tương tác với ứng dụng thông qua các hàm TCP Circular Send Buffer API có chữ ký được cung cấp trong tệp này.
otTcpEndpointAndCircularSendBuffer
struct otTcpEndpointAndCircularSendBuffer otTcpEndpointAndCircularSendBuffer
Cấu trúc ngữ cảnh để sử dụng với mbedtls_SSL_set_bio.
Hàm
otTcpCircularSendBufferDeinitialize
otError otTcpCircularSendBufferDeinitialize( otTcpCircularSendBuffer *aSendBuffer )
Huỷ khởi động vùng đệm gửi vòng tròn TCP, tách vùng đệm này nếu được đính kèm.
Nếu bộ đệm gửi vòng tròn TCP không trống, thì thao tác này sẽ không thành công.
Thông tin chi tiết | |||||
---|---|---|---|---|---|
Thông số |
|
||||
Giá trị trả về |
|
otTcpCircularSendBufferForceDiscardAll
void otTcpCircularSendBufferForceDiscardAll( otTcpCircularSendBuffer *aSendBuffer )
Buộc loại bỏ tất cả dữ liệu trong vùng đệm gửi vòng tròn.
Ứng dụng dự kiến sẽ gọi chức năng này khi kết nối TCP bị chấm dứt một cách không đáng kể (ví dụ: nếu ứng dụng gọi otTcpEndpointUnsubscribe() hoặc được thông báo về kết nối đặt lại qua lệnh gọi lại otTcpConnectionSaved()).
Việc gọi hàm này trên bộ đệm gửi vòng tròn TCP không trống được đính kèm với điểm cuối TCP sẽ dẫn đến hành vi không xác định.
Thông tin chi tiết | |||
---|---|---|---|
Thông số |
|
otTcpCircularSendBufferGetFreeSpace
size_t otTcpCircularSendBufferGetFreeSpace( const otTcpCircularSendBuffer *aSendBuffer )
Trả về dung lượng trống trong vùng đệm gửi vòng tròn TCP.
Thao tác này sẽ luôn thành công.
Thông tin chi tiết | |||
---|---|---|---|
Thông số |
|
||
Trả về |
Dung lượng trống trong vùng đệm gửi.
|
otTcpCircularSendBufferHandleForwardProgress
void otTcpCircularSendBufferHandleForwardProgress( otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer )
Thực hiện xử lý cụ thể theo vòng tròn-gửi-bộ đệm trong lệnh gọi lại otTcpForwardProgress.
Ứng dụng dự kiến sẽ cài đặt lệnh gọi lại otTcpForwardProgress() trên otTcpEndpoint và gọi hàm này khi bắt đầu hàm callback để xử lý một vòng tròn-send-buffer- cụ thể.
Trong hàm callback, ứng dụng có thể xác định dung lượng trống trong vùng đệm gửi tròn bằng cách gọi otTcpCircularSendBufferFreeSpace() hoặc bằng cách so sánh aInSendBuffer
với dung lượng của bộ đệm gửi mà người dùng chọn khi gọi otTcpCircularSendBufferInitialize().
Thông tin chi tiết | |||||
---|---|---|---|---|---|
Thông số |
|
otTcpCircularSendBufferInitialize
void otTcpCircularSendBufferInitialize( otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity )
Khởi động vùng đệm gửi vòng tròn TCP.
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Thông số |
|
otTcpCircularSendBufferWrite
otError otTcpCircularSendBufferWrite( otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags )
Gửi dữ liệu trên điểm cuối TCP, sử dụng bộ đệm gửi vòng tròn TCP được cung cấp để quản lý việc lưu vào bộ đệm.
Sau khi hàm này được gọi, aSendBuffer
và aEndpoint
được coi là "đính kèm" với nhau. Khi được đính kèm, TẤT CẢ thao tác gửi cho aEndpoint
phải được thực hiện bằng aSendBuffer
và TẤT CẢ thao tác trên aSendBuffer
phải được liên kết với aEndpoint
.
Cách duy nhất để "tách" vùng đệm gửi vòng tròn TCP và điểm cuối TCP là đợi bộ đệm gửi hoàn toàn trống. Điều này có thể xảy ra theo 2 cách: (1) tất cả dữ liệu trong vùng đệm gửi được gửi đi và xác nhận trong tiến trình thông thường của giao thức TCP, hoặc (2) kết nối bị chấm dứt.
Mô hình sử dụng đề xuất là sử dụng một vùng đệm gửi vòng tròn TCP với điểm cuối TCP và chỉ gửi dữ liệu về điểm cuối TCP đó qua vùng đệm tròn TCP đã liên kết. Mô hình sử dụng được đề xuất này sẽ giúp bỏ qua các vấn đề được mô tả ở trên bằng cách luôn sử dụng điểm cuối TCP và bộ đệm gửi vòng tròn TCP cùng nhau.
Nếu vùng đệm gửi vòng đạt dung lượng, chỉ một tiền tố của dữ liệu đã cung cấp được sao chép vào vùng đệm gửi vòng.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Thông số |
|
||||||||||||
Giá trị trả về |
|
otTcpMbedTlsSslRecvCallback
int otTcpMbedTlsSslRecvCallback( void *aCtx, unsigned char *aBuf, size_t aLen )
Phương thức không chặn nhận lệnh gọi lại để truyền tới mbedtls_SSL_set_bio.
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Thông số |
|
||||||
Trả về |
Số byte nhận được hoặc mã lỗi mbedtls.
|
otTcpMbedTlsSslSendCallback
int otTcpMbedTlsSslSendCallback( void *aCtx, const unsigned char *aBuf, size_t aLen )
Phương thức không chặn lệnh gọi lại để truyền tới mbedtls_SSL_set_bio.
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Thông số |
|
||||||
Trả về |
Số byte đã gửi hoặc mã lỗi mbedtls.
|
Tài nguyên
Các chủ đề tham khảo API OpenThread bắt nguồn từ mã nguồn, có trên GitHub. Để biết thêm thông tin hoặc để đóng góp cho tài liệu của chúng tôi, hãy tham khảo Tài nguyên.