टीसीपी ऐब्स्ट्रैक्शन
इस मॉड्यूल में, बेस टीसीपी एपीआई के ऊपर मौजूद ऐब्स्ट्रैक्शन को इस्तेमाल करना आसान है.
खास जानकारी
गिनती |
|
---|---|
anonymous enum
|
enumotTcpCircularSendBufferWrite को भेजे गए फ़्लैग के बारे में बताता है. |
टाइपडीफ़ |
|
---|---|
otTcpCircularSendBuffer
|
typedefstruct otTcpCircularSendBuffer
टीसीपी एंडपॉइंट के साथ इस्तेमाल करने के लिए, सर्कुलर से भेजने का बफ़र दिखाता है. |
otTcpEndpointAndCircularSendBuffer
|
typedef mbedtls_एसएसएल_set_bio के साथ इस्तेमाल करने के लिए कॉन्टेक्स्ट स्ट्रक्चर. |
फ़ंक्शन |
|
---|---|
otTcpCircularSendBufferDeinitialize(otTcpCircularSendBuffer *aSendBuffer)
|
टीसीपी से भरे जाने वाले मैसेज के बफ़र को शुरू नहीं करता. अगर वह अटैच हो जाता है, तो वह बफ़र हो जाता है.
|
otTcpCircularSendBufferForceDiscardAll(otTcpCircularSendBuffer *aSendBuffer)
|
void
यह सर्कुलर से भेजे जाने वाले बफ़र का सारा डेटा हमेशा के लिए खारिज कर देता है.
|
otTcpCircularSendBufferGetFreeSpace(const otTcpCircularSendBuffer *aSendBuffer)
|
size_t
टीसीपी से भेजे जाने वाले सर्कुलर भेजने के बफ़र में खाली जगह की संख्या दिखाता है.
|
otTcpCircularSendBufferHandleForwardProgress(otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer)
|
void
otTcpForwardPrograd कॉलबैक में, सर्कुलर-send-buffer के हिसाब से हैंडलिंग करता है.
|
otTcpCircularSendBufferInitialize(otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity)
|
void
टीसीपी सर्कुलर भेजने के बफ़र को शुरू करता है.
|
otTcpCircularSendBufferWrite(otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags)
|
बफ़रिंग को मैनेज करने के लिए, दिए गए टीसीपी सर्कुलर सेन बफ़र का इस्तेमाल करके, टीसीपी एंडपॉइंट पर डेटा भेजता है.
|
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_एसएसएल_set_bio को पास करने के लिए कॉलबैक भेजा जाता है.
|
संरचना |
|
---|---|
otTcpCircularSendBuffer |
टीसीपी एंडपॉइंट के साथ इस्तेमाल करने के लिए, सर्कुलर से भेजने का बफ़र दिखाता है. |
otTcpEndpointAndCircularSendBuffer |
mbedtls_एसएसएल_set_bio के साथ इस्तेमाल करने के लिए कॉन्टेक्स्ट स्ट्रक्चर. |
गिनती
अनाम Enum
anonymous enum
otTcpCircularSendBufferWrite
को भेजे गए फ़्लैग के बारे में बताता है.
टाइपडीफ़
otTcpCircularSendBuffer
struct otTcpCircularSendBuffer otTcpCircularSendBuffer
टीसीपी एंडपॉइंट के साथ इस्तेमाल करने के लिए, सर्कुलर से भेजने का बफ़र दिखाता है.
ईमेल भेजने के लिए सर्कुलर बफ़र का इस्तेमाल करना ज़रूरी नहीं है. ऐप्लिकेशन, टीसीपी एंडपॉइंट का इस्तेमाल करके सीधे otLinkedBuffers को मैनेज करके डेटा भेज सकते हैं. हालांकि, कुछ ऐप्लिकेशन को सर्कुलर सेन बफ़र का इस्तेमाल करना ज़्यादा सुविधाजनक लग सकता है. ऐसे ऐप्लिकेशन otTcpCircularSendBufferWrite() को कॉल कर सकते हैं, ताकि टीसीपी एंडपॉइंट में सर्कुलर सेन बफ़र को "अटैचमेंट" किया जा सके और उस टीसीपी एंडपॉइंट पर डेटा भेजा जा सके. इस दौरान, दिए गए otLinkedBuffers को मैनेज करने के लिए सर्कुलर सेन बफ़र का इस्तेमाल किया जा सकता है.
otTcpCircularSendBuffer को otTcpEndpoint की ओर से दिए गए otLinkedBuffer-आधारित एपीआई के ऊपर लागू किया जाता है. otTcpEndpoint से जुड़ने के बाद, otTcpCircularSendBuffer कनेक्शन के लिए otLinkedBuffers को मैनेज करने का पूरा काम करता है. इसका मतलब यह है कि किसी otTcpEndpoint से otTcpCircularSendBuffer के अटैच होने के बाद, ऐप्लिकेशन को उस otTcpEndpoint पर otTcpSendByReference() या otTcpSendByExtension() को कॉल नहीं करना चाहिए. इसके बजाय, ऐप्लिकेशन को भेजें बफ़र में डेटा जोड़ने के लिए otTcpCircularSendBufferWrite() का इस्तेमाल करना चाहिए.
otTcpForwardProgress() कॉलबैक की मदद से, उपयोगकर्ताओं को यह जानकारी मिलती है कि सर्कुलर भेजने के बफ़र में स्पेस कब उपलब्ध होता है. जिस otTcpEndpoint से otTcpCircularSendBuffer को अटैच किया गया है उस पर, ऐप्लिकेशन को otTcpForwardProgress() कॉलबैक इंस्टॉल करना ज़रूरी है. साथ ही, कॉलबैक फ़ंक्शन की शुरुआत में, अटैच किए गए otTcpCircularSendBuffer बटन पर otTcpCircularSendBufferHandleForwardProgress() को कॉल करना ज़रूरी है. यह सुझाव दिया जाता है कि उपयोगकर्ता, otTcpSendDone() कॉलबैक इंस्टॉल न करें, क्योंकि otLinkedBuffers का पूरा मैनेजमेंट, सर्कुलर सेंड बफ़र से मैनेज किया जाता है.
ऐप्लिकेशन को सीधे इस स्ट्रक्चर के फ़ील्ड की जांच नहीं करनी चाहिए; इसे इसके साथ सिर्फ़ उन टीसीपी सर्कुलर सेंड बफ़र एपीआई के फ़ंक्शन के ज़रिए इंटरैक्ट करना चाहिए जिनके हस्ताक्षर इस फ़ाइल में दिए गए हैं.
otTcpEndpointAndCircularSendBuffer
struct otTcpEndpointAndCircularSendBuffer otTcpEndpointAndCircularSendBuffer
mbedtls_एसएसएल_set_bio के साथ इस्तेमाल करने के लिए कॉन्टेक्स्ट स्ट्रक्चर.
फ़ंक्शन
otTcpCircularSendBufferDeinitialize
otError otTcpCircularSendBufferDeinitialize( otTcpCircularSendBuffer *aSendBuffer )
टीसीपी से भरे जाने वाले मैसेज के बफ़र को शुरू नहीं करता. अगर वह अटैच हो जाता है, तो वह बफ़र हो जाता है.
अगर टीसीपी सर्कुलर भेजने का बफ़र खाली नहीं है, तो यह कार्रवाई नहीं की जा सकेगी.
जानकारी | |||||
---|---|---|---|---|---|
पैरामीटर |
|
||||
रिटर्न वैल्यू |
|
otTcpCircularSendBufferForceDiscardAll
void otTcpCircularSendBufferForceDiscardAll( otTcpCircularSendBuffer *aSendBuffer )
यह सर्कुलर से भेजे जाने वाले बफ़र का सारा डेटा हमेशा के लिए खारिज कर देता है.
जब टीसीपी कनेक्शन को गलती से खत्म कर दिया जाता है, तब ऐप्लिकेशन इस फ़ंक्शन को कॉल कर सकता है (उदाहरण के लिए, अगर ऐप्लिकेशन otTcpEndpointAbort() को कॉल करता है या otTcpConnectionLost() कॉलबैक के ज़रिए, रीसेट किए जाने की सूचना मिलती है).
इस फ़ंक्शन को ऐसे गैर-ज़रूरी टीसीपी सर्कुलर पर कॉल करने से बफ़र होता है जो टीसीपी एंडपॉइंट से जुड़े होते हैं और तय नहीं की गई होती है.
जानकारी | |||
---|---|---|---|
पैरामीटर |
|
otTcpCircularSendBufferGetFreeSpace
size_t otTcpCircularSendBufferGetFreeSpace( const otTcpCircularSendBuffer *aSendBuffer )
टीसीपी से भेजे जाने वाले सर्कुलर भेजने के बफ़र में खाली जगह की संख्या दिखाता है.
यह कार्रवाई हमेशा सफल होगी.
जानकारी | |||
---|---|---|---|
पैरामीटर |
|
||
लौटाए गए सामान |
भेजें बफ़र में खाली जगह की संख्या.
|
otTcpCircularSendBufferHandleForwardProgress
void otTcpCircularSendBufferHandleForwardProgress( otTcpCircularSendBuffer *aSendBuffer, size_t aInSendBuffer )
otTcpForwardPrograd कॉलबैक में, सर्कुलर-send-buffer के हिसाब से हैंडलिंग करता है.
इस ऐप्लिकेशन से otTcpEndpoint पर otTcpForwardProgress() कॉलबैक इंस्टॉल करने और सर्कुलर-send-buffer की खास प्रोसेस के लिए, कॉलबैक फ़ंक्शन की शुरुआत में इस फ़ंक्शन को कॉल करने की उम्मीद है.
कॉलबैक फ़ंक्शन में, ऐप्लिकेशन otTcpCircularSendBufferFreeSpace() को कॉल करके या aInSendBuffer
की तुलना भेजें बफ़र की क्षमता से करके या otTcpCircularSendBufferInitialize() को कॉल करते समय चुने गए मैसेज के बफ़र में, सर्कुलर भेजे जाने वाले बफ़र में खाली जगह की मात्रा तय कर सकता है.
जानकारी | |||||
---|---|---|---|---|---|
पैरामीटर |
|
otTcpCircularSendBufferInitialize
void otTcpCircularSendBufferInitialize( otTcpCircularSendBuffer *aSendBuffer, void *aDataBuffer, size_t aCapacity )
टीसीपी सर्कुलर भेजने के बफ़र को शुरू करता है.
जानकारी | |||||||
---|---|---|---|---|---|---|---|
पैरामीटर |
|
otTcpCircularSendBufferWrite
otError otTcpCircularSendBufferWrite( otTcpEndpoint *aEndpoint, otTcpCircularSendBuffer *aSendBuffer, const void *aData, size_t aLength, size_t *aWritten, uint32_t aFlags )
बफ़रिंग को मैनेज करने के लिए, दिए गए टीसीपी सर्कुलर सेन बफ़र का इस्तेमाल करके, टीसीपी एंडपॉइंट पर डेटा भेजता है.
इस फ़ंक्शन को कॉल करने के बाद, aSendBuffer
और aEndpoint
को एक-दूसरे से "अटैचमेंट" माना जाता है. इन बदलावों के अटैच होने के दौरान, aEndpoint
के लिए भेजी गई सभी कार्रवाइयां aSendBuffer
का इस्तेमाल करके की जानी चाहिए. साथ ही, aSendBuffer
पर की गई सभी कार्रवाइयां aEndpoint
से जुड़ी होनी चाहिए.
टीसीपी से गोल आकार में भेजे गए मैसेज के बफ़र और टीसीपी एंडपॉइंट को "अलग" करने का सिर्फ़ यही एक तरीका है कि भेजे जाने वाले बफ़र के पूरी तरह खाली होने तक इंतज़ार करें. ऐसा दो तरीकों से हो सकता है: (1) भेजें बफ़र में मौजूद सारा डेटा टीसीपी प्रोटोकॉल ऑपरेशन के सामान्य तरीके में भेजा जाता है और स्वीकार किया जाता है या (2) कनेक्शन खत्म कर दिया जाता है.
हमारा सुझाव है कि इस्तेमाल के पैटर्न के हिसाब से, टीसीपी एंडपॉइंट के साथ सिंगल टीसीपी सर्कुलर सेंड बफ़र का इस्तेमाल करें. साथ ही, उस टीसीपी एंडपॉइंट पर सिर्फ़ इससे जुड़े टीसीपी सर्कुलर बफ़र के ज़रिए डेटा भेजें. इस्तेमाल का यह पैटर्न, ऊपर बताई गई समस्याओं को हल करता है. इसके लिए टीसीपी एंडपॉइंट और टीसीपी सर्कुलर सेन बफ़र का साथ-साथ इस्तेमाल किया जाता है.
अगर गोल आकार में भेजने का बफ़र तय सीमा तक पहुंच जाता है, तो दिए गए डेटा का सिर्फ़ एक प्रीफ़िक्स, सर्कुलर भेजने के बफ़र में कॉपी किया जाता है.
जानकारी | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||||||||
रिटर्न वैल्यू |
|
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_एसएसएल_set_bio को पास करने के लिए कॉलबैक भेजा जाता है.
जानकारी | |||||||
---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||
लौटाए गए सामान |
भेजी गई बाइट की संख्या या कोई mbedtls गड़बड़ी कोड.
|
संसाधन
OpenThread API के रेफ़रंस के विषय, सोर्स कोड से मिलते हैं. यह सोर्स GitHub पर उपलब्ध है. ज़्यादा जानकारी या हमारे दस्तावेज़ में योगदान देने के लिए, संसाधन देखें.