OpenDDS  Snapshot(2023/04/07-19:43)
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
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]

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 get_max_serialized_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

◆ RtpsTransportHeader() [1/2]

ACE_INLINE OpenDDS::DCPS::RtpsTransportHeader::RtpsTransportHeader ( )

Definition at line 22 of file RtpsTransportHeader.inl.

References OpenDDS::RTPS::Header::guidPrefix, header_, OpenDDS::RTPS::ProtocolVersion_t::major, OpenDDS::RTPS::ProtocolVersion_t::minor, OpenDDS::RTPS::Header::prefix, OpenDDS::RTPS::VendorId_t::vendorId, OpenDDS::RTPS::Header::vendorId, and OpenDDS::RTPS::Header::version.

23  : length_(0)
24  , valid_(false)
25 {
26  for (int i = 0; i < 4; ++i) header_.prefix[i] = 0;
27  header_.version.major = 0;
28  header_.version.minor = 0;
29  header_.vendorId.vendorId[0] = 0;
30  header_.vendorId.vendorId[1] = 0;
31  for (int i = 0; i < 12; ++i) header_.guidPrefix[i] = 0;
32 }
ProtocolVersion_t version
Definition: RtpsCore.idl:652
OctetArray4 prefix
Definition: RtpsCore.idl:651
DCPS::GuidPrefix_t guidPrefix
Definition: RtpsCore.idl:654

◆ RtpsTransportHeader() [2/2]

ACE_INLINE OpenDDS::DCPS::RtpsTransportHeader::RtpsTransportHeader ( ACE_Message_Block mb)
explicit

Definition at line 35 of file RtpsTransportHeader.inl.

References ACE_INLINE, and init().

36  : length_(0)
37  , valid_(false)
38 {
39  init(mb);
40 }
void init(ACE_Message_Block &mb)

Member Function Documentation

◆ get_max_serialized_size()

ACE_INLINE size_t OpenDDS::DCPS::RtpsTransportHeader::get_max_serialized_size ( )
static

Definition at line 16 of file RtpsTransportHeader.inl.

References ACE_INLINE, and OpenDDS::RTPS::RTPSHDR_SZ.

Referenced by init().

17 {
18  return RTPS::RTPSHDR_SZ;
19 }
const ACE_CDR::UShort RTPSHDR_SZ
Definition: MessageTypes.h:105

◆ incomplete()

ACE_INLINE void OpenDDS::DCPS::RtpsTransportHeader::incomplete ( ACE_Message_Block mb)

Definition at line 51 of file RtpsTransportHeader.inl.

References ACE_INLINE, ACE_Message_Block::cont(), ACE_Message_Block::length(), ACE_Message_Block::rd_ptr(), and ACE_Message_Block::total_length().

52 {
53  // If we get a datagram with an incomplete header, we need to skip
54  // and consume the received bytes so the transport framework doesn't
55  // try to give us these bytes again on the next call to handle_input().
56  ACE_Message_Block* cur = &mb;
57  for (size_t len = mb.total_length(); cur && len; cur = cur->cont()) {
58  len -= cur->length();
59  cur->rd_ptr(cur->length());
60  }
61 }
size_t length(void) const
char * rd_ptr(void) const
ACE_Message_Block * cont(void) const
size_t total_length(void) const

◆ init()

void OpenDDS::DCPS::RtpsTransportHeader::init ( ACE_Message_Block mb)

Definition at line 27 of file RtpsTransportHeader.cpp.

References get_max_serialized_size(), header_, OpenDDS::DCPS::Encoding::KIND_XCDR1, length_, OpenDDS::RTPS::ProtocolVersion_t::major, OpenDDS::RTPS::Header::prefix, OpenDDS::RTPS::PROTOCOL_RTPS, OpenDDS::RTPS::PROTOCOLVERSION, valid_, and OpenDDS::RTPS::Header::version.

Referenced by operator=(), and RtpsTransportHeader().

28 {
29  // Byte order doesn't matter for RTPS::Header, since it's
30  // exclusively structs/arrays of octet.
31  Serializer ser(&mb, Encoding::KIND_XCDR1);
32  valid_ = (ser >> header_);
33 
34  if (valid_) {
35 
36  // length_ started as the total number of bytes in the datagram's payload.
37  // When we return to the TransportReceiveStrategy it must be the number
38  // of bytes remaining after processing this RTPS::Header.
40 
41  // RTPS spec v2.1 section 8.3.6.3
42  valid_ = std::equal(header_.prefix, header_.prefix + sizeof(header_.prefix),
45  }
46 }
const ProtocolVersion_t PROTOCOLVERSION
Definition: MessageTypes.h:67
ProtocolVersion_t version
Definition: RtpsCore.idl:652
OctetArray4 prefix
Definition: RtpsCore.idl:651
const ACE_CDR::Octet PROTOCOL_RTPS[]
Definition: MessageTypes.h:58

◆ last_fragment() [1/2]

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

Definition at line 70 of file RtpsTransportHeader.inl.

References ACE_INLINE.

Referenced by OpenDDS::DCPS::RtpsUdpReceiveStrategy::handle_input().

71 {
72  return false;
73 }

◆ last_fragment() [2/2]

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

Definition at line 76 of file RtpsTransportHeader.inl.

References OPENDDS_END_VERSIONED_NAMESPACE_DECL.

77 {
78 }

◆ operator=()

ACE_INLINE RtpsTransportHeader & OpenDDS::DCPS::RtpsTransportHeader::operator= ( ACE_Message_Block mb)

Definition at line 43 of file RtpsTransportHeader.inl.

References ACE_INLINE, and init().

44 {
45  // length_ is not updated in a call to operator=()
46  init(mb);
47  return *this;
48 }
void init(ACE_Message_Block &mb)

◆ sequence()

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

Definition at line 49 of file RtpsTransportHeader.cpp.

References OPENDDS_END_VERSIONED_NAMESPACE_DECL.

50 {
51  return dummy;
52 }

◆ valid()

ACE_INLINE bool OpenDDS::DCPS::RtpsTransportHeader::valid ( void  ) const

Member Data Documentation

◆ header_

OpenDDS::RTPS::Header OpenDDS::DCPS::RtpsTransportHeader::header_

◆ length_

size_t OpenDDS::DCPS::RtpsTransportHeader::length_

◆ valid_

bool OpenDDS::DCPS::RtpsTransportHeader::valid_

Definition at line 44 of file RtpsTransportHeader.h.

Referenced by init(), and valid().


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