OpenDDS::DCPS::RtpsTransportHeader Struct Reference

Adapt the TransportReceiveStrategy for RTPS's "transport" (message) Header. More...

#include <RtpsTransportHeader.h>

Collaboration diagram for OpenDDS::DCPS::RtpsTransportHeader:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 RtpsTransportHeader ()
 RtpsTransportHeader (ACE_Message_Block &mb)
RtpsTransportHeaderoperator= (ACE_Message_Block &mb)
bool valid () const
bool last_fragment ()
void last_fragment (bool frag)
const SequenceNumbersequence ()
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_

Detailed Description

Adapt the TransportReceiveStrategy for RTPS's "transport" (message) Header.

Definition at line 25 of file RtpsTransportHeader.h.


Constructor & Destructor Documentation

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]

Definition at line 35 of file RtpsTransportHeader.inl.

References init().

00036   : length_(0)
00037   , valid_(false)
00038 {
00039   init(mb);
00040 }

Here is the call graph for this function:


Member Function Documentation

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

ACE_INLINE void OpenDDS::DCPS::RtpsTransportHeader::last_fragment ( bool  frag  ) 

Definition at line 76 of file RtpsTransportHeader.inl.

00077 {
00078 }

ACE_INLINE bool OpenDDS::DCPS::RtpsTransportHeader::last_fragment (  ) 

Definition at line 70 of file RtpsTransportHeader.inl.

00071 {
00072   return false;
00073 }

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 }

Here is the caller graph for this function:

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 }

Here is the call graph for this function:

const SequenceNumber & OpenDDS::DCPS::RtpsTransportHeader::sequence (  ) 

Definition at line 51 of file RtpsTransportHeader.cpp.

00052 {
00053   return dummy;
00054 }

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 }

Here is the caller graph for this function:


Member Data Documentation

Definition at line 42 of file RtpsTransportHeader.h.

Referenced by init().

Definition at line 44 of file RtpsTransportHeader.h.

Referenced by init(), and valid().


The documentation for this struct was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1