Abstraksi TCP

Modul ini mencakup abstraksi yang mudah digunakan selain TCP API dasar.

Ringkasan

Enumerasi

anonymous enum enum
Menentukan flag yang diteruskan ke otTcpCircularSendBufferWrite.

Typedef

otTcpCircularSendBuffer typedef
Mewakili buffering pengiriman sirkular untuk digunakan dengan endpoint TCP.
otTcpEndpointAndCircularSendBuffer typedef
Struktur konteks yang akan digunakan dengan mbedtls_ssl_set_bio.

Fungsi

otTcpCircularSendBufferDeinitialize(otTcpCircularSendBuffer *aSendBuffer)
Mendeinisialisasi buffering pengiriman sirkular TCP, melepaskannya jika terpasang.
otTcpCircularSendBufferForceDiscardAll(otTcpCircularSendBuffer *aSendBuffer)
void
Menghapus semua data secara paksa dalam buffering pengiriman sirkular.
otTcpCircularSendBufferGetFreeSpace(const otTcpCircularSendBuffer *aSendBuffer)
size_t
Menampilkan jumlah ruang kosong di buffering pengiriman sirkular TCP.
otTcpCircularSendBufferHandleForwardProgress(otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer)
void
Melakukan penanganan khusus circular-send-buffer di callback otTcpForwardProgress.
otTcpCircularSendBufferInitialize(otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity)
void
Menginisialisasi buffering pengiriman sirkular TCP.
otTcpCircularSendBufferWrite(otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags)
Mengirim data di endpoint TCP, menggunakan buffering pengiriman sirkular TCP yang disediakan untuk mengelola buffering.
otTcpMbedTlsSslRecvCallback(void *aCtx, unsigned char *aBuf, size_t aLen)
int
Penerimaan callback yang tidak memblokir untuk meneruskan ke mbedtls_ssl_set_bio.
otTcpMbedTlsSslSendCallback(void *aCtx, const unsigned char *aBuf, size_t aLen)
int
Callback pengiriman yang tidak memblokir untuk meneruskan ke mbedtls_ssl_set_bio.

Struct

otTcpCircularSendBuffer

Mewakili buffering pengiriman sirkular untuk digunakan dengan endpoint TCP.

otTcpEndpointAndCircularSendBuffer

Struktur konteks yang akan digunakan dengan mbedtls_ssl_set_bio.

Enumerasi

enum anonim

 anonymous enum

Menentukan flag yang diteruskan ke otTcpCircularSendBufferWrite.

Typedef

otTcpCircularSendBuffer

struct otTcpCircularSendBuffer otTcpCircularSendBuffer

Mewakili buffering pengiriman sirkular untuk digunakan dengan endpoint TCP.

Menggunakan buffer pengiriman sirkular bersifat opsional. Aplikasi dapat menggunakan endpoint TCP untuk mengirim data dengan mengelola otLinkedBuffer secara langsung. Namun, beberapa aplikasi mungkin merasa lebih nyaman memiliki buffer pengiriman sirkular; aplikasi tersebut dapat memanggil otTcpCircularSendBufferWrite() untuk "melampirkan" buffering pengiriman melingkar ke endpoint TCP dan mengirim data di endpoint TCP tersebut, dengan mengandalkan buffer pengiriman sirkular untuk mengelola otLinkedBuffers yang mendasarinya.

otTcpCircularSendBuffer diimplementasikan di atas API berbasis otLinkedBuffer yang disediakan oleh otTcpEndpoint. Setelah terhubung ke otTcpEndpoint, otTcpCircularSendBuffer akan melakukan semua tugas pengelolaan otLinkedBuffers untuk koneksi. Artinya, setelah otTcpCircularSendBuffer dilampirkan ke otTcpEndpoint, aplikasi tidak boleh memanggil otTcpSendByReference() atau otTcpSendByExtension() pada otTcpEndpoint tersebut. Sebagai gantinya, aplikasi harus menggunakan otTcpCircularSendBufferWrite() untuk menambahkan data ke buffering pengiriman.

Callback otTcpForwardProgress() adalah cara yang ditujukan bagi pengguna untuk mengetahui kapan ruang tersedia di buffer pengiriman sirkular. Pada otTcpEndpoint yang terkait dengan otTcpCircularSendBuffer yang dilampirkan, aplikasi HARUS menginstal callback otTcpForwardProgress() dan memanggil otTcpCircularSendBufferHandleForwardProgress() pada otTcpCircularSendBuffer yang dilampirkan di awal fungsi callback. Sebaiknya pengguna TIDAK menginstal callback otTcpSendDone() karena semua pengelolaan otLinkedBuffers ditangani oleh buffering pengiriman sirkular.

Aplikasi tidak boleh memeriksa kolom struktur ini secara langsung; aplikasi hanya boleh berinteraksi dengannya melalui fungsi TCP Circular Send Buffer API yang tanda tangannya disediakan dalam file ini.

otTcpEndpointAndCircularSendBuffer

struct otTcpEndpointAndCircularSendBuffer otTcpEndpointAndCircularSendBuffer

Struktur konteks yang akan digunakan dengan mbedtls_ssl_set_bio.

Fungsi

otTcpCircularSendBufferDeinitialize

otError otTcpCircularSendBufferDeinitialize(
  otTcpCircularSendBuffer *aSendBuffer
)

Mendeinisialisasi buffering pengiriman sirkular TCP, melepaskannya jika terpasang.

Jika buffering pengiriman sirkular TCP tidak kosong, operasi ini akan gagal.

Detail
Parameter
[in] aSendBuffer
Buffering pengiriman sirkular TCP yang akan dideinisialisasi.
Nilai Pengembalian
OT_ERROR_NONE
Berhasil membatalkan inisialisasi buffering pengiriman sirkular TCP.
OT_ERROR_BUSY
Buffering sirkular berisi data dan tidak dapat diinisialisasi.

otTcpCircularSendBufferForceDiscardAll

void otTcpCircularSendBufferForceDiscardAll(
  otTcpCircularSendBuffer *aSendBuffer
)

Menghapus semua data secara paksa dalam buffering pengiriman sirkular.

Aplikasi diharapkan memanggil fungsi ini saat koneksi TCP dihentikan secara tiba-tiba (misalnya, jika aplikasi memanggil otTcpEndpointAbort() atau diberi tahu tentang koneksi reset melalui callback otTcpConnectionLost()).

Memanggil fungsi ini pada buffering pengiriman sirkular TCP yang tidak kosong yang dipasang ke endpoint TCP akan menghasilkan perilaku yang tidak terdefinisi.

Detail
Parameter
[in] aSendBuffer
Buffering pengiriman sirkuler TCP yang datanya akan dihapus.

otTcpCircularSendBufferGetFreeSpace

size_t otTcpCircularSendBufferGetFreeSpace(
  const otTcpCircularSendBuffer *aSendBuffer
)

Menampilkan jumlah ruang kosong di buffering pengiriman sirkular TCP.

Operasi ini akan selalu berhasil.

Detail
Parameter
[in] aSendBuffer
Pointer ke buffer pengiriman sirkular TCP yang jumlah ruang kosongnya akan dikembalikan.
Hasil
Jumlah ruang kosong di buffer pengiriman.

otTcpCircularSendBufferHandleForwardProgress

void otTcpCircularSendBufferHandleForwardProgress(
  otTcpCircularSendBuffer *aSendBuffer,
  size_t aInSendBuffer
)

Melakukan penanganan khusus circular-send-buffer di callback otTcpForwardProgress.

Aplikasi diharapkan menginstal callback otTcpForwardProgress() pada otTcpEndpoint, dan memanggil fungsi ini di awal fungsi callback untuk pemrosesan khusus circular-send-buffer.

Dalam fungsi callback, aplikasi dapat menentukan jumlah ruang kosong dalam buffer pengiriman sirkular dengan memanggil otTcpCircularSendBufferFreeSpace(), atau dengan membandingkan aInSendBuffer dengan kapasitas buffer pengiriman, yang dipilih oleh pengguna saat memanggil otTcpCircularSendBufferInitialize().

Detail
Parameter
[in] aSendBuffer
Pointer ke buffering pengiriman sirkular TCP untuk endpoint tempat otTcpForwardProgress() dipanggil.
[in] aInSendBuffer
Nilai aInSendBuffer diteruskan ke callback otTcpForwardProgress().

otTcpCircularSendBufferInitialize

void otTcpCircularSendBufferInitialize(
  otTcpCircularSendBuffer *aSendBuffer,
  void *aDataBuffer,
  size_t aCapacity
)

Menginisialisasi buffering pengiriman sirkular TCP.

Detail
Parameter
[in] aSendBuffer
Pointer ke buffering pengiriman sirkular TCP yang akan diinisialisasi.
[in] aDataBuffer
Pointer ke memori yang akan digunakan untuk menyimpan data dalam buffer pengiriman sirkular TCP.
[in] aCapacity
Kapasitas, dalam byte, buffer pengiriman sirkular TCP, yang harus sama dengan ukuran memori yang ditunjuk oleh aDataBuffer .

otTcpCircularSendBufferWrite

otError otTcpCircularSendBufferWrite(
  otTcpEndpoint *aEndpoint,
  otTcpCircularSendBuffer *aSendBuffer,
  const void *aData,
  size_t aLength,
  size_t *aWritten,
  uint32_t aFlags
)

Mengirim data di endpoint TCP, menggunakan buffering pengiriman sirkular TCP yang disediakan untuk mengelola buffering.

Setelah fungsi ini dipanggil, aSendBuffer dan aEndpoint dianggap "terlampir" satu sama lain. Saat terlampir, SEMUA operasi pengiriman untuk aEndpoint harus dilakukan menggunakan aSendBuffer dan SEMUA operasi di aSendBuffer harus dikaitkan dengan aEndpoint .

Satu-satunya cara untuk "melepas" buffering pengiriman sirkular TCP dan titik akhir TCP adalah menunggu buffer pengiriman menjadi kosong benar-benar kosong. Hal ini dapat terjadi dengan dua cara: (1) semua data dalam buffer pengiriman dikirim dan diakui dalam operasi protokol TCP normal, atau (2) koneksi dihentikan.

Pola penggunaan yang direkomendasikan adalah menggunakan buffer pengiriman sirkular TCP tunggal dengan endpoint TCP, dan mengirim data pada endpoint TCP tersebut hanya melalui buffer sirkular TCP terkait. Pola penggunaan yang direkomendasikan ini menggantikan masalah yang dijelaskan di atas dengan selalu menggunakan endpoint TCP dan buffering pengiriman sirkular TCP secara bersamaan.

Jika buffer pengiriman sirkular mencapai kapasitas, hanya awalan data yang disediakan yang akan disalin ke dalam buffer pengiriman sirkular.

Detail
Parameter
[in] aEndpoint
Titik akhir TCP tempat mengirim data.
[in] aSendBuffer
Buffering pengiriman sirkular TCP yang menjadi tujuan penyalinan data.
[in] aData
Pointer ke data yang akan disalin ke buffer pengiriman sirkular TCP.
[in] aLength
Panjang data yang ditunjuk oleh aData untuk disalin ke dalam buffer pengiriman sirkular TCP.
[out] aWritten
Diisi dengan jumlah data yang disalin ke buffering pengiriman, yang mungkin kurang dari aLength jika buffer pengiriman mencapai kapasitas.
[in] aFlags
Flag yang menentukan opsi untuk operasi ini (lihat enumerasi di atas).
Nilai Pengembalian
OT_ERROR_NONE
Berhasil menyalin data ke dalam buffer pengiriman dan mengirimkannya ke endpoint TCP.
OT_ERROR_FAILED
Gagal mengirimkan data di endpoint TCP.

otTcpMbedTlsSslRecvCallback

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

Penerimaan callback yang tidak memblokir untuk meneruskan ke mbedtls_ssl_set_bio.

Detail
Parameter
[in] aCtx
[out] aBuf
Buffering tempat menerima data.
[in] aLen
Jumlah maksimum data yang dapat diterima.
Hasil
Jumlah byte yang diterima, atau kode error mbedtls.

otTcpMbedTlsSslSendCallback

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

Callback pengiriman yang tidak memblokir untuk meneruskan ke mbedtls_ssl_set_bio.

Detail
Parameter
[in] aCtx
[in] aBuf
Data yang akan ditambahkan ke buffer pengiriman.
[in] aLen
Jumlah data yang akan ditambahkan ke buffering pengiriman.
Hasil
Jumlah byte yang dikirim, atau kode error mbedtls.

Referensi

Topik Referensi OpenThread API berasal dari kode sumber yang tersedia di GitHub. Untuk informasi selengkapnya, atau untuk berkontribusi pada dokumentasi kami, lihat Referensi.