INET Framework for OMNeT++/OMNEST
inet::tcp::TCPByteStreamRcvQueue::Region Class Reference

#include <TCPByteStreamRcvQueue.h>

Inheritance diagram for inet::tcp::TCPByteStreamRcvQueue::Region:
inet::tcp::TCPVirtualDataRcvQueue::Region

Public Member Functions

 Region (uint32 _begin, uint32 _end)
 
 Region (uint32 _begin, uint32 _end, ByteArray _data)
 
virtual ~Region ()
 
virtual bool merge (const TCPVirtualDataRcvQueue::Region *other) override
 Merge other to self. More...
 
virtual void copyTo (cPacket *msg) const override
 Copy self to msg. More...
 
virtual TCPByteStreamRcvQueue::Regionsplit (uint32 seq) override
 Returns an allocated new Region object with filled with begin..seq and set self to seq..end. More...
 
- Public Member Functions inherited from inet::tcp::TCPVirtualDataRcvQueue::Region
 Region (uint32 _begin, uint32 _end)
 
uint32 getBegin () const
 
uint32 getEnd () const
 
unsigned long getLength () const
 
unsigned long getLengthTo (uint32 seq) const
 
CompareStatus compare (const TCPVirtualDataRcvQueue::Region &other) const
 Compare self and other. More...
 

Protected Attributes

ByteArray data
 
- Protected Attributes inherited from inet::tcp::TCPVirtualDataRcvQueue::Region
uint32 begin
 
uint32 end
 

Additional Inherited Members

- Public Types inherited from inet::tcp::TCPVirtualDataRcvQueue::Region
enum  CompareStatus {
  BEFORE = 1, BEFORE_TOUCH, OVERLAP, AFTER_TOUCH,
  AFTER
}
 

Constructor & Destructor Documentation

inet::tcp::TCPByteStreamRcvQueue::Region::Region ( uint32  _begin,
uint32  _end 
)
inline

Referenced by inet::tcp::TCPByteStreamRcvQueue::createRegionFromSegment(), and split().

49 : TCPVirtualDataRcvQueue::Region(_begin, _end) {};
inet::tcp::TCPByteStreamRcvQueue::Region::Region ( uint32  _begin,
uint32  _end,
ByteArray  _data 
)
inline
51  : TCPVirtualDataRcvQueue::Region(_begin, _end), data(_data) {};
ByteArray data
Definition: TCPByteStreamRcvQueue.h:46
virtual inet::tcp::TCPByteStreamRcvQueue::Region::~Region ( )
inlinevirtual

Reimplemented from inet::tcp::TCPVirtualDataRcvQueue::Region.

53 {};

Member Function Documentation

void inet::tcp::TCPByteStreamRcvQueue::Region::copyTo ( cPacket *  msg) const
overridevirtual

Copy self to msg.

Reimplemented from inet::tcp::TCPVirtualDataRcvQueue::Region.

77 {
78  ASSERT(getLength() == data.getDataArraySize());
79 
80  RawPacket *msg = check_and_cast<RawPacket *>(msg_);
82  msg->setByteArray(data);
83 }
virtual unsigned int getDataArraySize() const
unsigned long getLength() const
Definition: TCPVirtualDataRcvQueue.h:55
virtual void copyTo(cPacket *msg) const
Copy self to msg.
Definition: TCPVirtualDataRcvQueue.cc:60
ByteArray data
Definition: TCPByteStreamRcvQueue.h:46
bool inet::tcp::TCPByteStreamRcvQueue::Region::merge ( const TCPVirtualDataRcvQueue::Region other)
overridevirtual

Merge other to self.

Reimplemented from inet::tcp::TCPVirtualDataRcvQueue::Region.

34 {
35  const Region *other = dynamic_cast<const Region *>(_other);
36 
37  if (!other)
38  throw cRuntimeError("merge(): cannot cast (TCPVirtualDataRcvQueue::Region *) to type 'TCPDataStreamRcvQueue::Region *'");
39 
40  if (seqLess(end, other->begin) || seqLess(other->end, begin))
41  return false;
42 
43  uint32 nbegin = seqMin(begin, other->begin);
44  uint32 nend = seqMax(end, other->end);
45 
46  if (nbegin != begin || nend != end) {
47  char *buff = new char[nend - nbegin];
48 
49  if (nbegin != begin)
50  other->data.copyDataToBuffer(buff, begin - nbegin);
51 
52  data.copyDataToBuffer(buff + begin - nbegin, end - begin);
53 
54  if (nend != end)
55  other->data.copyDataToBuffer(buff + end - nbegin, nend - end);
56 
57  begin = nbegin;
58  end = nend;
59  data.assignBuffer(buff, end - begin);
60  }
61 
62  return true;
63 }
uint32 seqMin(uint32 a, uint32 b)
Definition: TCPSegment.h:36
virtual unsigned int copyDataToBuffer(void *ptr, unsigned int length, unsigned int srcOffs=0) const
Copy data content to buffer.
Definition: ByteArray.cc:72
bool seqLess(uint32 a, uint32 b)
Definition: TCPSegment.h:32
Region(uint32 _begin, uint32 _end)
Definition: TCPByteStreamRcvQueue.h:49
uint32 end
Definition: TCPVirtualDataRcvQueue.h:47
uint32_t uint32
Definition: Compat.h:30
uint32 begin
Definition: TCPVirtualDataRcvQueue.h:46
virtual void assignBuffer(void *ptr, unsigned int length)
Set buffer pointer and buffer length.
Definition: ByteArray.cc:83
ByteArray data
Definition: TCPByteStreamRcvQueue.h:46
uint32 seqMax(uint32 a, uint32 b)
Definition: TCPSegment.h:37
TCPByteStreamRcvQueue::Region * inet::tcp::TCPByteStreamRcvQueue::Region::split ( uint32  seq)
overridevirtual

Returns an allocated new Region object with filled with begin..seq and set self to seq..end.

Reimplemented from inet::tcp::TCPVirtualDataRcvQueue::Region.

66 {
67  ASSERT(seqGreater(seq, begin) && seqLess(seq, end));
68 
69  Region *reg = new Region(begin, seq);
70  reg->data.setDataFromByteArray(data, 0, seq - begin);
71  data.truncateData(seq - begin, 0);
72  begin = seq;
73  return reg;
74 }
bool seqLess(uint32 a, uint32 b)
Definition: TCPSegment.h:32
virtual void truncateData(unsigned int truncleft, unsigned int truncright)
Truncate data content.
Definition: ByteArray.cc:90
Region(uint32 _begin, uint32 _end)
Definition: TCPByteStreamRcvQueue.h:49
uint32 end
Definition: TCPVirtualDataRcvQueue.h:47
uint32 begin
Definition: TCPVirtualDataRcvQueue.h:46
bool seqGreater(uint32 a, uint32 b)
Definition: TCPSegment.h:34
ByteArray data
Definition: TCPByteStreamRcvQueue.h:46

Member Data Documentation

ByteArray inet::tcp::TCPByteStreamRcvQueue::Region::data
protected

Referenced by copyTo(), merge(), and split().


The documentation for this class was generated from the following files: