انتزاعات TCP
این ماژول شامل انتزاعات با استفاده آسان در بالای API پایه TCP است.
خلاصه
شمارش ها | |
---|---|
anonymous enum | 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 است.
استفاده از بافر ارسال دایره ای اختیاری است. برنامه ها می توانند با مدیریت مستقیم otLinkedBuffers از یک نقطه پایانی TCP برای ارسال داده استفاده کنند. با این حال، برخی از برنامهها ممکن است داشتن یک بافر ارسال دایرهای را راحتتر بدانند. چنین برنامههایی میتوانند otTcpCircularSendBufferWrite() را فراخوانی کنند تا یک بافر ارسال دایرهای را به یک نقطه پایانی TCP وصل کرده و دادهها را روی آن نقطه پایانی TCP ارسال کنند، با تکیه بر بافر ارسال دایرهای برای مدیریت otLinkedBuffers زیربنایی.
otTcpCircularSendBuffer در بالای API مبتنی بر otLinkedBuffer ارائه شده توسط یک otTcpEndpoint پیاده سازی شده است. هنگامی که به یک otTcpEndpoint متصل شد، یک otTcpCircularSendBuffer تمام کارهای مدیریت otLinkedBuffers برای اتصال را انجام می دهد. این بدان معنی است که وقتی یک otTcpCircularSendBuffer به یک otTcpEndpoint متصل شد، برنامه نباید otTcpSendByReference() یا otTcpSendByExtension() را در آن otTcpEndpoint فراخوانی کند. در عوض، برنامه باید از otTcpCircularSendBufferWrite() برای افزودن داده به بافر ارسال استفاده کند.
فراخوانی ()otTcpForwardProgress روشی است که کاربران می توانند یاد بگیرند که چه زمانی فضا در بافر ارسال دایره ای در دسترس می شود. در یک نقطه otTcpEnd که یک otTcpCircularSendBuffer به آن متصل است، برنامه باید یک callback ()otTcpForwardProgress را نصب کند و otTcpCircularSendBufferHandleForwardProgress() را در otTcpCircularSendBuffer پیوست شده در شروع تابع callback فراخوانی کند. توصیه می شود که کاربر یک callback () 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() را فراخوانی کند یا از طریق تماس ()otTcpConnectionLost از اتصال مجدد مطلع شود.
فراخوانی این تابع در یک بافر ارسال دایره ای غیر خالی TCP متصل به نقطه پایانی TCP منجر به رفتار نامشخص می شود.
جزئیات | |||
---|---|---|---|
مولفه های |
|
otTcpCircularSendBufferGetFreeSpace
size_t otTcpCircularSendBufferGetFreeSpace( const otTcpCircularSendBuffer *aSendBuffer )
مقدار فضای خالی در بافر ارسال دایره ای TCP را برمی گرداند.
این عملیات همیشه موفق خواهد بود.
جزئیات | |||
---|---|---|---|
مولفه های |
| ||
برمی گرداند | مقدار فضای خالی در بافر ارسال. |
otTcpCircularSendBufferHandleForwardProgress
void otTcpCircularSendBufferHandleForwardProgress( otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer )
مدیریت دایره ای-ارسال-بافر خاص را در پاسخ به تماس otTcpForwardProgress انجام می دهد.
انتظار میرود که برنامه یک callback ()otTcpForwardProgress را در otTcpEndpoint نصب کند و این تابع را در شروع تابع callback برای پردازشهای خاص بافر-ارسال دایرهای فراخوانی کند.
در تابع callback، برنامه میتواند با فراخوانی 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 سرچشمه می گیرند. برای اطلاعات بیشتر، یا مشارکت در اسناد ما، به منابع مراجعه کنید.