انتزاعات TCP

این ماژول شامل انتزاعات با استفاده آسان در بالای API پایه TCP است.

خلاصه

شمارش ها

anonymous enum enum
پرچم های ارسال شده به otTcpCircularSendBufferWrite را تعریف می کند.

Typedefs

otTcpCircularSendBuffer typedef
نشان دهنده یک بافر ارسال دایره ای برای استفاده با نقطه پایانی 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 خالی نباشد، این عملیات با شکست مواجه می شود.

جزئیات
مولفه های
[in] aSendBuffer
دایره‌ای TCP بافر را برای اصالت‌زدایی ارسال می‌کند.
ارزش های بازگشتی
OT_ERROR_NONE
بافر ارسال دایره ای TCP را با موفقیت از مقدار اولیه اولیه خارج کنید.
OT_ERROR_BUSY
بافر دایره‌ای حاوی داده‌ها است و نمی‌توان آن را از مقدار اولیه خارج کرد.

otTcpCircularSendBufferForceDiscardAll

void otTcpCircularSendBufferForceDiscardAll(
  otTcpCircularSendBuffer *aSendBuffer
)

تمام داده‌های موجود در بافر ارسال دایره‌ای را به زور دور می‌اندازد.

زمانی که یک اتصال TCP بدون تشریفات قطع می‌شود، انتظار می‌رود که برنامه این تابع را فراخوانی کند (به عنوان مثال، اگر برنامه otTcpEndpointAbort() را فراخوانی کند یا از طریق تماس ()otTcpConnectionLost از اتصال مجدد مطلع شود.

فراخوانی این تابع در یک بافر ارسال دایره ای غیر خالی 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 انجام می دهد.

انتظار می‌رود که برنامه یک callback ()otTcpForwardProgress را در otTcpEndpoint نصب کند و این تابع را در شروع تابع callback برای پردازش‌های خاص بافر-ارسال دایره‌ای فراخوانی کند.

در تابع callback، برنامه می‌تواند با فراخوانی otTcpCircularSendBufferFreeSpace()، یا با مقایسه aInSendBuffer با ظرفیت بافر ارسال، که توسط کاربر هنگام فراخوانی otTcpCircularSendBufferInitialize() انتخاب می‌شود، مقدار فضای خالی در بافر ارسال دایره‌ای را تعیین کند.

جزئیات
مولفه های
[in] aSendBuffer
یک اشاره گر به بافر ارسال دایره ای TCP برای نقطه پایانی که برای آن ()otTcpForwardProgress فراخوانی شده است.
[in] aInSendBuffer
مقدار aInSendBuffer به فراخوانی ()otTcpForwardProgress ارسال شد.

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 ارسال می کند.

هنگامی که این تابع فراخوانی می شود، aSendBuffer و aEndpoint به یکدیگر متصل در نظر گرفته می شوند. در حالی که آنها پیوست هستند، همه عملیات ارسال برای 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
اشاره گر به otTcpEndpointAndCircularSendBuffer .
[out] aBuf
بافری که در آن داده ها دریافت می شود.
[in] aLen
حداکثر مقدار داده ای که می توان دریافت کرد.
برمی گرداند
تعداد بایت های دریافتی یا کد خطای mbedtls.

otTcpMbedTlsSslSendCallback

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

ارسال تماس غیر مسدود برای ارسال به mbedtls_ssl_set_bio.

جزئیات
مولفه های
[in] aCtx
اشاره گر به otTcpEndpointAndCircularSendBuffer .
[in] aBuf
داده هایی که باید به بافر ارسال اضافه شود.
[in] aLen
مقدار داده ای که باید به بافر ارسال اضافه شود.
برمی گرداند
تعداد بایت های ارسال شده یا کد خطای mbedtls.

منابع

موضوعات مرجع OpenThread API از کد منبع موجود در GitHub سرچشمه می گیرند. برای اطلاعات بیشتر، یا مشارکت در اسناد ما، به منابع مراجعه کنید.