Adapt the TransportReceiveStrategy for RTPS's "transport" (message) Header. More...
#include <RtpsTransportHeader.h>
Public Member Functions | |
RtpsTransportHeader () | |
RtpsTransportHeader (ACE_Message_Block &mb) | |
RtpsTransportHeader & | operator= (ACE_Message_Block &mb) |
bool | valid () const |
bool | last_fragment () |
void | last_fragment (bool frag) |
const SequenceNumber & | sequence () |
void | init (ACE_Message_Block &mb) |
void | incomplete (ACE_Message_Block &mb) |
Static Public Member Functions | |
static size_t | max_marshaled_size () |
Public Attributes | |
size_t | length_ |
OpenDDS::RTPS::Header | header_ |
bool | valid_ |
Adapt the TransportReceiveStrategy for RTPS's "transport" (message) Header.
Definition at line 25 of file RtpsTransportHeader.h.
ACE_INLINE OpenDDS::DCPS::RtpsTransportHeader::RtpsTransportHeader | ( | ) |
Definition at line 22 of file RtpsTransportHeader.inl.
References OpenDDS::RTPS::Header::guidPrefix, header_, OpenDDS::RTPS::Header::prefix, OpenDDS::RTPS::Header::vendorId, and OpenDDS::RTPS::Header::version.
00023 : length_(0) 00024 , valid_(false) 00025 { 00026 for (int i = 0; i < 4; ++i) header_.prefix[i] = 0; 00027 header_.version.major = 0; 00028 header_.version.minor = 0; 00029 header_.vendorId.vendorId[0] = 0; 00030 header_.vendorId.vendorId[1] = 0; 00031 for (int i = 0; i < 12; ++i) header_.guidPrefix[i] = 0; 00032 }
ACE_INLINE OpenDDS::DCPS::RtpsTransportHeader::RtpsTransportHeader | ( | ACE_Message_Block & | mb | ) | [explicit] |
ACE_INLINE void OpenDDS::DCPS::RtpsTransportHeader::incomplete | ( | ACE_Message_Block & | mb | ) |
Definition at line 51 of file RtpsTransportHeader.inl.
References ACE_Message_Block::cont(), len, ACE_Message_Block::length(), ACE_Message_Block::rd_ptr(), and ACE_Message_Block::total_length().
00052 { 00053 // If we get a datagram with an incomplete header, we need to skip 00054 // and consume the received bytes so the transport framework doesn't 00055 // try to give us these bytes again on the next call to handle_input(). 00056 ACE_Message_Block* cur = &mb; 00057 for (size_t len = mb.total_length(); cur && len; cur = cur->cont()) { 00058 len -= cur->length(); 00059 cur->rd_ptr(cur->length()); 00060 } 00061 }
void OpenDDS::DCPS::RtpsTransportHeader::init | ( | ACE_Message_Block & | mb | ) |
Definition at line 29 of file RtpsTransportHeader.cpp.
References OpenDDS::DCPS::Serializer::ALIGN_CDR, header_, length_, max_marshaled_size(), OpenDDS::RTPS::Header::prefix, OpenDDS::RTPS::PROTOCOLVERSION, valid_, and OpenDDS::RTPS::Header::version.
Referenced by operator=(), and RtpsTransportHeader().
00030 { 00031 // Byte order doesn't matter for RTPS::Header, since it's 00032 // exclusively structs/arrays of octet. 00033 Serializer ser(&mb, false, Serializer::ALIGN_CDR); 00034 valid_ = (ser >> header_); 00035 00036 if (valid_) { 00037 00038 // length_ started as the total number of bytes in the datagram's payload. 00039 // When we return to the TransportReceiveStrategy it must be the number 00040 // of bytes remaining after processing this RTPS::Header. 00041 length_ -= max_marshaled_size(); 00042 00043 // RTPS spec v2.1 section 8.3.6.3 00044 valid_ = std::equal(header_.prefix, header_.prefix + sizeof(header_.prefix), 00045 PROTOCOL_RTPS); 00046 valid_ &= (header_.version.major == OpenDDS::RTPS::PROTOCOLVERSION.major); 00047 } 00048 }
ACE_INLINE void OpenDDS::DCPS::RtpsTransportHeader::last_fragment | ( | bool | frag | ) |
Definition at line 76 of file RtpsTransportHeader.inl.
ACE_INLINE bool OpenDDS::DCPS::RtpsTransportHeader::last_fragment | ( | ) |
Definition at line 70 of file RtpsTransportHeader.inl.
ACE_INLINE size_t OpenDDS::DCPS::RtpsTransportHeader::max_marshaled_size | ( | ) | [static] |
Definition at line 16 of file RtpsTransportHeader.inl.
References OpenDDS::RTPS::RTPSHDR_SZ.
Referenced by init().
00017 { 00018 return RTPS::RTPSHDR_SZ; 00019 }
ACE_INLINE RtpsTransportHeader & OpenDDS::DCPS::RtpsTransportHeader::operator= | ( | ACE_Message_Block & | mb | ) |
Definition at line 43 of file RtpsTransportHeader.inl.
References init().
00044 { 00045 // length_ is not updated in a call to operator=() 00046 init(mb); 00047 return *this; 00048 }
const SequenceNumber & OpenDDS::DCPS::RtpsTransportHeader::sequence | ( | ) |
Definition at line 51 of file RtpsTransportHeader.cpp.
ACE_INLINE bool OpenDDS::DCPS::RtpsTransportHeader::valid | ( | void | ) | const |
Definition at line 64 of file RtpsTransportHeader.inl.
References valid_.
Referenced by OpenDDS::DCPS::RtpsUdpReceiveStrategy::check_header().
00065 { 00066 return valid_; 00067 }
Definition at line 43 of file RtpsTransportHeader.h.
Referenced by OpenDDS::DCPS::RtpsUdpReceiveStrategy::check_header(), init(), and RtpsTransportHeader().
Definition at line 42 of file RtpsTransportHeader.h.
Referenced by init().
Definition at line 44 of file RtpsTransportHeader.h.