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
|
typedefstruct otTcpCircularSendBuffer
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 |
|
||||
Nilai Pengembalian |
|
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 |
|
otTcpCircularSendBufferGetFreeSpace
size_t otTcpCircularSendBufferGetFreeSpace( const otTcpCircularSendBuffer *aSendBuffer )
Menampilkan jumlah ruang kosong di buffering pengiriman sirkular TCP.
Operasi ini akan selalu berhasil.
Detail | |||
---|---|---|---|
Parameter |
|
||
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 |
|
otTcpCircularSendBufferInitialize
void otTcpCircularSendBufferInitialize( otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity )
Menginisialisasi buffering pengiriman sirkular TCP.
Detail | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
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 |
|
||||||||||||
Nilai Pengembalian |
|
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 |
|
||||||
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 |
|
||||||
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.