nl:: Weave:: System:: PacketBuffer
#include <src/system/SystemPacketBuffer.h>
पैकेट बफ़र क्लास, वह मुख्य स्ट्रक्चर है जिसका इस्तेमाल ऑक्टेट-सीरियलाइज़्ड डेटा के पैकेट में हेर-फेर करने के लिए किया जाता है. आम तौर पर, इसका इस्तेमाल ब्लूटूथ या इंटरनेट प्रोटोकॉल जैसे डेटा कम्यूनिकेशन नेटवर्क के लिए किया जाता है.
खास जानकारी
LwIP पर आधारित एनवायरमेंट में, इस क्लास को उस लाइब्रेरी में तय किए गए pbuf स्ट्रक्चर पर बनाया जाता है. LwIP के न होने पर, Weave मैलक-आधारित या पूल-आधारित लागू करने की सुविधा देता है, जो बहुत ज़्यादा एम्बेड किए गए डिवाइसों की मेमोरी से जुड़ी चुनौतियों का करीब से अनुमान लगाता है.
लेयर वाले नेटवर्क स्टैक में इस्तेमाल होने वाले मिलते-जुलते स्ट्रक्चर की तरह, PacketBuffer क्लास, कॉन्फ़िगर किए जा सकने वाले कम्यूनिकेशन स्टैक की हर लेयर पर, प्रोटोकॉल हेडर के लिए जगह बुक करने का तरीका उपलब्ध कराती है. ज़्यादा जानकारी के लिए, PacketBuffer::New()
और LwIP दस्तावेज़ देखें.
PacketBuffer ऑब्जेक्ट को रेफ़रंस के तौर पर गिना जाता है और Weave में "फ़ायर-ऐंड-फ़ॉर्ज" इस्तेमाल करने का मौजूदा मोड इस्तेमाल होता है. पैकेट (और इसके मौजूदा PacketBuffer ऑब्जेक्ट) को अलग-अलग प्रोटोकॉल लेयर की मदद से भेजा जाता है, इसलिए लेयर के बीच अपकॉल या डाउनकॉल होने पर, मालिकाना हक ट्रांसफ़र किया जाता है. साथ ही, बफ़र को खाली करने की ज़िम्मेदारी कॉल पाने वाले (कॉलर) की होती है. क्रॉस-लेयर कॉल पूरे न हो पाने पर, बफ़र खाली करने की ज़िम्मेदारी कॉलर की होती है.
PacketBuffer क्लास के नए ऑब्जेक्ट, मौजूदा एनवायरमेंट से मिली मेमोरी के बंटवारे की शुरुआत में शुरू होते हैं, जैसे कि इंटरनल बफ़र पूल की स्टैंडर्ड C लाइब्रेरी हीप से, LwIP pbuf टारगेट पूल से लिया गया. आसान मामले में, डेटा बफ़र का साइज़ WEAVE_SYSTEM_PACKETBUFFER_SIZE है. एक कंपोज़र दिया जाता है, जो अन्य साइज़ के डेटा बफ़र के इस्तेमाल की अनुमति देता है.
बड़े पेलोड को साथ रखने के लिए PacketBuffer ऑब्जेक्ट को चेन में जोड़ा जा सकता है. चेन बनाना, हालांकि, पारदर्शी नहीं है और क्लास के उपयोगकर्ताओं को साफ़ तौर पर चेनिंग का समर्थन करने का फ़ैसला लेना होगा. चेनिंग सपोर्ट के साथ लिखी गई क्लास के उदाहरण यहां दिए गए हैं:
@ref nl::Weave::WeaveTLVReader @ref nl::Weave::WeaveTLVWriter
इनहेरिटेंस
इससे इनहेरिट किया जाता है: pbuf
सार्वजनिक फ़ंक्शन |
|
---|---|
AddRef(void)
|
void
मौजूदा बफ़र की रेफ़रंस संख्या बढ़ाएं.
|
AddToEnd(PacketBuffer *aPacket)
|
void
दिए गए पैकेट बफ़र को बफ़र चेन के आखिर में जोड़ें. इसके बाद, चेन में हर बफ़र की कुल लंबाई को उसके हिसाब से अडजस्ट करें.
|
AlignPayload(uint16_t aAlignBytes)
|
bool
बफ़र पेलोड को दी गई बाइट सीमा पर अलाइन करें.
|
AllocSize(void) const
|
size_t
असाइन किए गए डेटा का साइज़ दिखाएं. इसमें, रिज़र्व और पेलोड डेटा स्पेस शामिल हैं. हालांकि, PacketBuffer के लिए तय की गई जगह के साइज़ को शामिल न करना.
|
AvailableDataLength(void) const
|
uint16_t
शुरू होने की मौजूदा जगह और डेटा की लंबाई के आधार पर, मौजूदा बफ़र में जोड़े जा सकने वाले डेटा के बाइट पाएं.
|
CompactHead(void)
|
void
चेन में बाद के बफ़र में मौजूद डेटा को तब तक मौजूदा बफ़र में ले जाएं, जब तक वह भर न जाए.
|
Consume(uint16_t aConsumeLength)
|
बफ़र की चेन में डेटा का इस्तेमाल करता है.
|
ConsumeHead(uint16_t aConsumeLength)
|
void
इस्तेमाल किए गए डेटा की मात्रा दिखाने के लिए, मौजूदा बफ़र को अडजस्ट करें.
|
DataLength(void) const
|
uint16_t
पैकेट बफ़र में डेटा की लंबाई, बाइट में पाएं.
|
DetachTail(void)
|
मौजूदा बफ़र को उसकी चेन से अलग करें और बचे हुए बफ़र पर पॉइंटर दिखाएं.
|
EnsureReservedSize(uint16_t aReservedSize)
|
bool
पक्का करें कि बफ़र में कम से कम तय की गई जगह हो.
|
MaxDataLength(void) const
|
uint16_t
शुरू होने की मौजूदा जगह और बफ़र साइज़ के आधार पर, बफ़र में फ़िट होने वाले डेटा की ज़्यादा से ज़्यादा संख्या बाइट में पाएं.
|
Next(void) const
|
चेन में अगले बफ़र के लिए पॉइंटर पाएं.
|
ReservedSize(void) const
|
uint16_t
बफ़र की शुरुआत और डेटा के शुरू होने की मौजूदा स्थिति के बीच, मौजूदा बफ़र में बाइट की संख्या पाएं.
|
SetDataLength(uint16_t aNewLen, PacketBuffer *aChainHead)
|
void
बफ़र में डेटा की लंबाई, बाइट में सेट करें और उसके हिसाब से कुल लंबाई को अडजस्ट करें.
|
SetStart(uint8_t *aNewStart)
|
void
इसके अनुसार लंबाई और कुल लंबाई को अडजस्ट करके, शुरुआती डेटा को बफ़र में सेट करें.
|
Start(void) const
|
uint8_t *
बफ़र में डेटा की शुरुआत के लिए पॉइंटर पाएं.
|
TotalLength(void) const
|
uint16_t
बफ़र चेन में पैकेट डेटा की कुल लंबाई पाएं.
|
सार्वजनिक स्टैटिक फ़ंक्शन |
|
---|---|
Free(PacketBuffer *aPacket)
|
void
एक चेन में सभी पैकेट बफ़र को खाली करें.
|
FreeHead(PacketBuffer *aPacket)
|
चेन में पहला बफ़र खाली करें और बाकी बफ़र के लिए पॉइंटर दिखाएं.
|
New(void)
|
यह पेलोड में, रिज़र्व किए गए डिफ़ॉल्ट साइज़ (WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE) के साथ डिफ़ॉल्ट साइज़ (WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX) का एक PacketBuffer असाइन करता है.
|
New(uint16_t aReservedSize)
|
यह तय किए गए हेडर रिज़र्व साइज़ के साथ, ज़्यादा से ज़्यादा साइज़ वाला एक PacketBuffer असाइन करता है.
|
NewWithAvailableSize(size_t aAvailableSize)
|
हेडर के पेलोड में डिफ़ॉल्ट रिज़र्व साइज़ (WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE) के साथ PacketBuffer को तय करता है और अतिरिक्त कर्सर के लिए शुरुआती डेटा के लिए कम से कम
aAllocSize बाइट के बाद खाली जगह देता है. |
NewWithAvailableSize(uint16_t aReservedSize, size_t aAvailableSize)
|
यह ऐसे PacketBuffer ऑब्जेक्ट को असाइन करता है जिसमें हेडर के लिए पेलोड में कम से कम
aReservedSize बाइट रिज़र्व किए गए हों. साथ ही, शुरुआती कर्सर पॉइंटर के बाद, अतिरिक्त डेटा के लिए कम से कम aAllocSize बाइट की जगह असाइन करता है. |
RightSize(PacketBuffer *aPacket)
|
अगर लागू हो, तो दिए गए बफ़र को सही साइज़ के बफ़र में कॉपी करें.
|
सार्वजनिक फ़ंक्शन
AddRef
void AddRef( void )
मौजूदा बफ़र की रेफ़रंस संख्या बढ़ाएं.
AddToEnd
void AddToEnd( PacketBuffer *aPacket )
दिए गए पैकेट बफ़र को बफ़र चेन के आखिर में जोड़ें. इसके बाद, चेन में हर बफ़र की कुल लंबाई को उसके हिसाब से अडजस्ट करें.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
AlignPayload
bool AlignPayload( uint16_t aAlignBytes )
बफ़र पेलोड को दी गई बाइट सीमा पर अलाइन करें.
अगर ज़रूरी हो, तो बफ़र में पेलोड को आगे ले जाएं.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
||
लौटाए जाने वाले प्रॉडक्ट |
अलाइनमेंट पूरा होने पर
true , अगर बफ़र में ज़रूरत के मुताबिक जगह नहीं है, तो false . |
AllocSize
size_t AllocSize( void ) const
असाइन किए गए डेटा का साइज़ दिखाएं. इसमें, रिज़र्व और पेलोड डेटा स्पेस शामिल हैं. हालांकि, PacketBuffer के लिए तय की गई जगह के साइज़ को शामिल न करना.
ब्यौरा | |
---|---|
लौटाए जाने वाले प्रॉडक्ट |
असाइन किए गए बजट का साइज़
|
AvailableDataLength
uint16_t AvailableDataLength( void ) const
शुरू होने की मौजूदा जगह और डेटा की लंबाई के आधार पर, मौजूदा बफ़र में जोड़े जा सकने वाले डेटा के बाइट पाएं.
ब्यौरा | |
---|---|
लौटाए जाने वाले प्रॉडक्ट |
डेटा की लंबाई (बाइट में), जो मौजूदा बफ़र में फ़िट होगी. यह बफ़र, शुरू होने की मौजूदा जगह और डेटा की लंबाई के आधार पर तय किया जाएगा.
|
CompactHead
void CompactHead( void )
चेन के बाद के बफ़र से डेटा को तब तक मौजूदा बफ़र में ले जाएं, जब तक कि डेटा पूरा भर न जाए.
सिर्फ़ मौजूदा बफ़र को छोटा किया जाता है: मौजूदा बफ़र में मौजूद डेटा को बफ़र के सामने ले जाया जाता है, ताकि कोई खाली जगह न हो. बची हुई जगह को बाद के बफ़र में भेजे गए डेटा से भरा जाता है. ऐसा तब तक होता है, जब तक मौजूदा बफ़र पूरा नहीं हो जाता. अगर चेन में इसके बाद के बफ़र को पूरी तरह से मौजूदा बफ़र में ले जाया जाता है, तो इसे चेन से हटाकर खाली कर दिया जाता है. यह तरीका कोई पैरामीटर नहीं लेता, न कोई नतीजा दिखाता है, और न ही उसे पूरा करता है.
उपभोग करें
PacketBuffer * Consume( uint16_t aConsumeLength )
बफ़र की चेन में डेटा का इस्तेमाल करता है.
बफ़र की चेन में डेटा का इस्तेमाल करें, जो मौजूदा बफ़र से शुरू होता है और चेन में बाकी बफ़र में आगे बढ़ता है. पूरी तरह से इस्तेमाल किया गया हर बफ़र खाली कर दिया जाता है. साथ ही, फ़ंक्शन पहला बफ़र (अगर कोई हो) दिखाता है, जिसमें बचा हुआ डेटा होता है. मौजूदा बफ़र, बफ़र चेन का हिस्सा होना चाहिए.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
||
लौटाए जाने वाले प्रॉडक्ट |
मौजूदा चेन का पहला बफ़र, जिसमें बचा हुआ डेटा मौजूद होता है. अगर कोई डेटा नहीं बचा, तो शून्य दिखाया जाता है.
|
ConsumeHead
void ConsumeHead( uint16_t aConsumeLength )
इस्तेमाल किए गए डेटा की मात्रा दिखाने के लिए, मौजूदा बफ़र को अडजस्ट करें.
मौजूदा बफ़र में डेटा शुरू होने की जगह को तय की गई रकम के हिसाब से, बाइट में आगे बढ़ाएं. उसे बफ़र में डेटा की अवधि के हिसाब से तय करना होगा. वीडियो की लंबाई और कुल लंबाई को, वीडियो में इस्तेमाल की गई मात्रा के हिसाब से घटाएं.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
DataLength
uint16_t DataLength( void ) const
पैकेट बफ़र में डेटा की लंबाई, बाइट में पाएं.
ब्यौरा | |
---|---|
लौटाए जाने वाले प्रॉडक्ट |
लंबाई, बाइट में (मौजूदा पेलोड की लंबाई).
|
DetachTail
PacketBuffer * DetachTail( void )
मौजूदा बफ़र को उसकी चेन से अलग करें और बचे हुए बफ़र पर पॉइंटर दिखाएं.
मौजूदा बफ़र, चेन का सबसे ऊपर होना चाहिए.
ब्यौरा | |
---|---|
लौटाए जाने वाले प्रॉडक्ट |
अगर मौजूदा बफ़र चेन में सिर्फ़ एक बफ़र है, तो मौजूदा बफ़र चेन का टेल या शून्य (शून्य) वैल्यू.
|
EnsureReservedSize
bool EnsureReservedSize( uint16_t aReservedSize )
पक्का करें कि बफ़र में कम से कम तय की गई जगह हो.
पक्का करें कि बफ़र में कम से कम तय की गई जगह हो, ताकि बफ़र में डेटा को ज़रूरत के मुताबिक जगह दी जा सके.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
||
लौटाए जाने वाले प्रॉडक्ट |
true , अगर अनुरोध किया गया रिज़र्व साइज़ उपलब्ध है, तो बफ़र में ज़रूरत के मुताबिक जगह न होने पर false . |
MaxDataLength
uint16_t MaxDataLength( void ) const
शुरू होने की मौजूदा जगह और बफ़र साइज़ के आधार पर, बफ़र में फ़िट होने वाले डेटा की ज़्यादा से ज़्यादा संख्या बाइट में पाएं.
ब्यौरा | |
---|---|
लौटाए जाने वाले प्रॉडक्ट |
मौजूदा स्टार्ट पोज़िशन के हिसाब से बफ़र में फ़िट होने वाली बाइट की संख्या.
|
अगला
PacketBuffer * Next( void ) const
चेन में अगले बफ़र के लिए पॉइंटर पाएं.
ब्यौरा | |
---|---|
लौटाए जाने वाले प्रॉडक्ट |
चेन में अगले बफ़र का पॉइंटर. चेन में कोई बफ़र न होने पर
NULL लौटाया जाता है. |
ReservedSize
uint16_t ReservedSize( void ) const
बफ़र की शुरुआत और डेटा के शुरू होने की मौजूदा स्थिति के बीच, मौजूदा बफ़र में बाइट की संख्या पाएं.
ब्यौरा | |
---|---|
लौटाए जाने वाले प्रॉडक्ट |
बफ़र की शुरुआत और मौजूदा डेटा के शुरू होने की जगह के बीच की खाली जगह, बाइट में.
|
SetDataLength
void SetDataLength( uint16_t aNewLen, PacketBuffer *aChainHead )
बफ़र में डेटा की लंबाई, बाइट में सेट करें और उसके हिसाब से कुल लंबाई को अडजस्ट करें.
फ़ंक्शन, बफ़र में डेटा की लंबाई बाइट में सेट करता है और कुल लंबाई को सही तरीके से अडजस्ट करता है. जब बफ़र, बफ़र चेन का हेड नहीं होता है (सामान्य मामले: कॉलर, ऊंची लेयर को कॉल करने से पहले, PacketBuffer चेन में आखिरी बफ़र में डेटा जोड़ता है), तो मौजूदा बफ़र से पहले हर बफ़र की कुल लंबाई को ठीक से अडजस्ट करने के लिए, aChainकिन को पास करना ज़रूरी है.
ब्यौरा | |||||
---|---|---|---|---|---|
पैरामीटर |
|
SetStart
void SetStart( uint8_t *aNewStart )
इसके अनुसार लंबाई और कुल लंबाई को अडजस्ट करके, शुरुआती डेटा को बफ़र में सेट करें.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
शुरू करें
uint8_t * Start( void ) const
बफ़र में डेटा की शुरुआत के लिए पॉइंटर पाएं.
ब्यौरा | |
---|---|
लौटाए जाने वाले प्रॉडक्ट |
पॉइंटर को डेटा की शुरुआत में ले जाएं.
|
TotalLength
uint16_t TotalLength( void ) const
बफ़र चेन में पैकेट डेटा की कुल लंबाई पाएं.
ब्यौरा | |
---|---|
लौटाए जाने वाले प्रॉडक्ट |
कुल लंबाई, ऑक्टेट में.
|
सार्वजनिक स्टैटिक फ़ंक्शन
मुफ़्त
void Free( PacketBuffer *aPacket )
एक चेन में सभी पैकेट बफ़र को खाली करें.
मौजूदा चेन में सभी बफ़र के लिए रेफ़रंस की संख्या कम करें. अगर पहचान फ़ाइलों की संख्या 0 हो जाती है, तो बफ़र को खाली कर दिया जाता है या ऐलोकेशन पूल में लौटा दिया जाता है. नियम के मुताबिक, उपयोगकर्ताओं को इस तरीके को free()
फ़ंक्शन के बराबर मानना चाहिए और कॉल के बाद तर्क का इस्तेमाल नहीं करना चाहिए.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
FreeHead
PacketBuffer * FreeHead( PacketBuffer *aPacket )
चेन में पहला बफ़र खाली करें और बाकी बफ़र के लिए पॉइंटर दिखाएं.
* @note When the buffer chain is referenced by multiple callers,
FreeHead()` से हेड को अलग किया जाएगा, लेकिन हेड बफ़र को जबरन हटाया नहीं जाएगा.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
||
लौटाए जाने वाले प्रॉडक्ट |
इनपुट बफ़र की टेल वाली पैकेट बफ़र चेन (यह
NULL हो सकती है). |
नए दर्शक
PacketBuffer * New( void )
यह पेलोड में, रिज़र्व किए गए डिफ़ॉल्ट साइज़ (WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE) के साथ डिफ़ॉल्ट साइज़ (WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX) का एक PacketBuffer असाइन करता है.
रिज़र्व किया गया साइज़ (WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE) इतना बड़ा है कि इसमें ट्रांसपोर्ट लेयर हेडर के साथ-साथ, WeaveMessageLayer
और WeaveExchangeLayer
के लिए ज़रूरी हेडर भी शामिल किए जा सकते हैं.
नए दर्शक
PacketBuffer * New( uint16_t aReservedSize )
यह तय किए गए हेडर रिज़र्व साइज़ के साथ, ज़्यादा से ज़्यादा साइज़ वाला एक PacketBuffer असाइन करता है.
पास किया गया पैरामीटर वह साइज़ है जो पेलोड से पहले रिज़र्व किया गया है, ताकि अलग-अलग स्टैक लेयर से पैकेट हेडर को शामिल किया जा सके. असाइन किए जाने वाले बफ़र का कुल साइज़ न है. बफ़र WEAVE_SYSTEM_CONFIG_PACKETBUFFER_CAPACITY_MAX का साइज़, और इसके अलावा, कॉल में बताया गया.
PacketBuffer::New(0)
: इस तरह कॉल करने पर, बिना किसी तय हेडर के बफ़र कर दिया जाएगा. इसके बाद, पूरा पेलोड कॉलर के पास इस्तेमाल करने के लिए उपलब्ध हो जाएगा. यह पैटर्न खास तौर पर नेटवर्किंग स्टैक की निचली लेयर के लिए काम का है. ऐसा उन मामलों में होता है जहां उपयोगकर्ता को पता हो कि पेलोड को सही हेडर रिज़र्व के साथ फ़ाइनल मैसेज में कॉपी किया जाएगा याPacketBuffer::AddToEnd()
के ज़रिए PacketBuffer की चेन में PacketBuffer बनाने के लिए यह पैटर्न कॉपी किया जाएगा. पैरामीटर[in] aReservedSize
हेडर के लिए खाली जगह है.सफल होने पर, PacketBuffer की ओर पॉइंटर, गड़बड़ीNULL
पर.
NewWithAvailableSize
PacketBuffer * NewWithAvailableSize( size_t aAvailableSize )
हेडर के पेलोड में डिफ़ॉल्ट रिज़र्व साइज़ (WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE) के साथ PacketBuffer को तय करता है और अतिरिक्त कर्सर के लिए शुरुआती डेटा के लिए कम से कम aAllocSize
बाइट के बाद खाली जगह देता है.
किसी ऐप्लिकेशन-लेयर मैसेज के लिए PacketBuffer असाइन करते समय, इसका इस्तेमाल सबसे सही होता है.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
||
लौटाए जाने वाले प्रॉडक्ट |
सफलता मिलने पर, असाइन किए गए ब्लॉक में PacketBuffer के लिए पॉइंटर. विफल होने पर,
NULL . * |
NewWithAvailableSize
PacketBuffer * NewWithAvailableSize( uint16_t aReservedSize, size_t aAvailableSize )
यह ऐसे PacketBuffer ऑब्जेक्ट को असाइन करता है जिसमें हेडर के लिए पेलोड में कम से कम aReservedSize
बाइट रिज़र्व किए गए हों. साथ ही, शुरुआती कर्सर पॉइंटर के बाद, अतिरिक्त डेटा के लिए कम से कम aAllocSize
बाइट की जगह असाइन करता है.
ब्यौरा | |||||
---|---|---|---|---|---|
पैरामीटर |
|
||||
लौटाए जाने वाले प्रॉडक्ट |
सफलता मिलने पर, असाइन किए गए ब्लॉक में PacketBuffer के लिए पॉइंटर. विफल होने पर,
NULL . |
RightSize
PacketBuffer * RightSize( PacketBuffer *aPacket )
अगर लागू हो, तो दिए गए बफ़र को सही साइज़ के बफ़र में कॉपी करें.
यह फ़ंक्शन सॉकेट के लिए नो-ऑप है.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
||
लौटाए जाने वाले प्रॉडक्ट |
नया पैकेट बफ़र या ओरिजनल बफ़र
|