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
)

दिए गए पैकेट बफ़र को बफ़र चेन के आखिर में जोड़ें. इसके लिए, चेन में हर बफ़र की कुल लंबाई को ज़रूरत के मुताबिक अडजस्ट करें.

जानकारी
पैरामीटर
[in] aPacket
- मौजूदा चेन के आखिर में जोड़ा जाने वाला पैकेट बफ़र.

AlignPayload

bool AlignPayload(
  uint16_t aAlignBytes
)

बफ़र पेलोड को तय बाइट सीमा पर अलाइन करें.

अगर ज़रूरी हो, तो पेलोड को बफ़र में आगे ले जाएं.

जानकारी
पैरामीटर
[in] 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
)

बफ़र की चेन में डेटा का इस्तेमाल करें.

मौजूदा बफ़र से शुरू होने वाले और चेन में बाकी के बफ़र के ज़रिए आगे बढ़ाकर, बफ़र की किसी चेन में डेटा का इस्तेमाल करें. पूरी तरह इस्तेमाल किए गए हर बफ़र को खाली कर दिया जाता है. इसके बाद, फ़ंक्शन बाकी डेटा वाला पहला बफ़र (अगर कोई है) दिखाता है. मौजूदा बफ़र, बफ़र चेन का सबसे ऊपर होना चाहिए.

जानकारी
पैरामीटर
[in] aConsumeLength
- मौजूदा चेन में इस्तेमाल होने वाले बाइट की संख्या.
लौटाए गए सामान
मौजूदा चेन का पहला बफ़र, जिसमें बचा हुआ डेटा शामिल है. अगर कोई डेटा नहीं दिखता, तो NULL देता है.

ConsumeHead

void ConsumeHead(
  uint16_t aConsumeLength
)

इस्तेमाल किए गए डेटा की मात्रा बताने के लिए मौजूदा बफ़र में बदलाव करें.

मौजूदा बफ़र में डेटा के शुरू होने की जगह को, तय की गई संख्या तक बाइट में बढ़ाएं. ऐसा बफ़र में मौजूद डेटा की लंबाई तक बढ़ाएं. लंबाई और कुल लंबाई को खपत की गई मात्रा से घटाएं.

जानकारी
पैरामीटर
[in] aConsumeLen
- मौजूदा बफ़र से इस्तेमाल किए जाने वाले बाइट की संख्या.

DataLength

uint16_t DataLength(
  void
) const 

पैकेट बफ़र में डेटा की लंबाई बाइट में देखें.

जानकारी
लौटाए गए सामान
लंबाई, बाइट में (मौजूदा पेलोड लंबाई).

DetachTail

PacketBuffer * DetachTail(
  void
)

मौजूदा बफ़र को इसकी चेन से अलग करें और बाकी के बफ़र के लिए पॉइंटर वापस करें.

मौजूदा बफ़र, चेन का सबसे ऊपर होना चाहिए.

जानकारी
लौटाए गए सामान
मौजूदा बफ़र चेन का टेल या तब, जब चेन में मौजूदा बफ़र ही बफ़र हो.

EnsureReservedSize

bool EnsureReservedSize(
  uint16_t aReservedSize
)

पक्का करें कि बफ़र में रिज़र्व की गई जगह के लिए कम से कम तय की गई जगह हो.

पक्का करें कि बफ़र में कम से कम तय की गई जगह हो, ताकि ज़रूरत के हिसाब से जगह बनाने के लिए बफ़र में डेटा को आगे बढ़ाया जा सके.

जानकारी
पैरामीटर
[in] 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 चेन के आखिरी बफ़र में डेटा जोड़ता है), तो मौजूदा बफ़र से आगे हर बफ़र की कुल लंबाई को सही तरीके से अडजस्ट करने के लिए, aChainHEAD को पास किया जाना ज़रूरी है.

जानकारी
पैरामीटर
[in] aNewLen
- इस बफ़र की नई लंबाई बाइट में.
[in,out] aChainHead
- उस बफ़र चेन का हेड जिससे मौजूदा बफ़र जुड़ा है. अगर मौजूदा बफ़र, बफ़र चेन का हेड है, तो वैल्यू शून्य हो सकती है.

SetStart

void SetStart(
  uint8_t *aNewStart
)

लम्बाई और कुल लंबाई को उसके मुताबिक एडजस्ट करते हुए, स्टार्ट डेटा को बफ़र में सेट करें.

जानकारी
पैरामीटर
[in] aNewStart
- वह पॉइंटर जहां नया पेलोड शुरू होना चाहिए. newStart, अंदरूनी तौर पर इस तरह से अडजस्ट किया जाएगा कि वह PacketBuffer चेन के पहले बफ़र की सीमाओं में रह सके.

शुरू करें

uint8_t * Start(
  void
) const 

बफ़र में डेटा शुरू करने के लिए पॉइंटर पाएं.

जानकारी
लौटाए गए सामान
पॉइंटर की मदद से डेटा की शुरुआत करें.

TotalLength

uint16_t TotalLength(
  void
) const 

बफ़र चेन में पैकेट डेटा की कुल अवधि देखें.

जानकारी
लौटाए गए सामान
ऑक्टेट में कुल लंबाई.

सार्वजनिक स्टैटिक फ़ंक्शन

बिना किसी शुल्क के आज़माएं

void Free(
  PacketBuffer *aPacket
)

चेन में सभी पैकेट बफ़र्स को मुफ़्त में आज़माएं.

मौजूदा चेन के सभी बफ़र के लिए पहचान फ़ाइलों की संख्या कम करें. अगर पहचान फ़ाइलों की संख्या 0 हो जाती है, तो उससे जुड़े बफ़र फ़्री कर दिए जाते हैं या ज़रूरत के मुताबिक ऐलोकेशन पूल में लौटा दिए जाते हैं. नियम के तौर पर, उपयोगकर्ताओं को इस तरीके को free() फ़ंक्शन के बराबर मानना चाहिए और कॉल के बाद आर्ग्युमेंट का इस्तेमाल नहीं करना चाहिए.

जानकारी
पैरामीटर
[in] aPacket
- पैकेट बफ़र को खाली करना होगा.

FreeHead

PacketBuffer * FreeHead(
  PacketBuffer *aPacket
)

किसी चेन का पहला बफ़र फ़्री करें. इससे, बाकी के बफ़र के लिए पॉइंटर वापस लाए जा सकेंगे.

* @note When the buffer chain is referenced by multiple callers,FreeHead()`, सिर को अलग कर देगा, लेकिन हेड बफ़र को ज़बरदस्ती नहीं हटाएगा.

जानकारी
पैरामीटर
[in] aPacket
- बफ़र चेन.
लौटाए गए सामान
पैकेट बफ़र चेन, जिसमें इनपुट बफ़र का टेल टेल होता है. यह 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 बनाने में भी किया जा सकता है जिसे PacketBuffer::AddToEnd() से, PacketBuffer की चेन से जोड़ा जाता है. पैरामीटर
    [in] aReservedSize
    हेडर स्पेस को रिज़र्व करने के लिए.
    लौटाए गए सामान
    सफल होने पर, NULL न होने पर PacketBuffer के लिए पॉइंटर.

NewWithAvailableSize

PacketBuffer * NewWithAvailableSize(
  size_t aAvailableSize
)

हेडर के लिए पेलोड में, डिफ़ॉल्ट रिज़र्व साइज़ (WEAVE_SYSTEM_CONFIG_HEADER_RESERVE_SIZE) वाला PacketBuffer और शुरुआती कर्सर पॉइंटर के बाद, अतिरिक्त डेटा के लिए कम से कम aAllocSize बाइट की जगह तय करता है.

यह तरीका, ऐप्लिकेशन-लेयर मैसेज के लिए PacketBuffer को असाइन करते समय सबसे सही होता है.

जानकारी
पैरामीटर
[in] aAvailableSize
कर्सर के बाद आवंटित करने के लिए ऑक्टेट की संख्या.
लौटाए गए सामान
सफल होने पर, असाइन किए गए ब्लॉक में PacketBuffer के लिए पॉइंटर. विफल होने पर, NULL. *

NewWithAvailableSize

PacketBuffer * NewWithAvailableSize(
  uint16_t aReservedSize,
  size_t aAvailableSize
)

यह PacketBuffer ऑब्जेक्ट के लिए, हेडर के पेलोड में कम से कम aReservedSize बाइट रिज़र्व करता है. साथ ही, शुरुआती कर्सर पॉइंटर के बाद, अतिरिक्त डेटा के लिए कम से कम aAllocSize बाइट की जगह देता है.

जानकारी
पैरामीटर
[in] aReservedSize
कर्सर के पीछे रिज़र्व करने के लिए ऑक्टेट की संख्या.
[in] aAvailableSize
कर्सर के बाद आवंटित करने के लिए ऑक्टेट की संख्या.
लौटाए गए सामान
सफल होने पर, असाइन किए गए ब्लॉक में PacketBuffer के लिए पॉइंटर. विफल होने पर, NULL.

RightSize

PacketBuffer * RightSize(
  PacketBuffer *aPacket
)

अगर लागू हो, तो दिए गए बफ़र को दाएं आकार के बफ़र में कॉपी करें.

यह फ़ंक्शन, सॉकेट के लिए इस्तेमाल नहीं करता.

जानकारी
पैरामीटर
[in] aPacket
- बफ़र या बफ़र चेन.
लौटाए गए सामान
नया पैकेट बफ़र या ओरिजनल बफ़र