OpenDDS  Snapshot(2023/04/07-19:43)
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | List of all members
OpenDDS::DCPS::TransportHeader Struct Reference

Defines class that represents a transport packet header. More...

#include <TransportHeader.h>

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

Public Types

enum  { BYTE_ORDER_FLAG, FIRST_FRAGMENT_FLAG, LAST_FRAGMENT_FLAG }
 

Public Member Functions

 TransportHeader ()
 Default constructor. More...
 
 TransportHeader (ACE_Message_Block &buffer)
 Construct with values extracted from a buffer. More...
 
TransportHeaderoperator= (ACE_Message_Block &buffer)
 Assignment from an ACE_Message_Block. More...
 
void incomplete (ACE_Message_Block &)
 
bool swap_bytes () const
 Determine if the serializer should swap bytes. More...
 
bool valid () const
 Determine if this is a valid packet header. More...
 
bool init (ACE_Message_Block *buffer)
 Demarshal transport packet from ACE_Message_Block. More...
 
bool first_fragment ()
 
bool last_fragment ()
 
void last_fragment (bool frag)
 
const SequenceNumbersequence ()
 

Static Public Member Functions

static size_t get_max_serialized_size ()
 Similar to IDL compiler generated methods. More...
 
static ACE_UINT32 get_length (const char *marshaled_transport_header)
 

Public Attributes

ACE_CDR::Octet protocol_ [6]
 The protocol of the packet being transmitted. More...
 
bool byte_order_
 Flags: marshaled as a single byte (ACE_CDR::Octet) More...
 
bool first_fragment_
 
bool last_fragment_
 
ACE_CDR::Octet reserved_
 Reserved for future use (provides padding for preamble). More...
 
ACE_UINT32 length_
 
SequenceNumber sequence_
 
ACE_INT64 source_
 

Static Public Attributes

static const ACE_CDR::Octet DCPS_PROTOCOL [6]
 

Detailed Description

Defines class that represents a transport packet header.

The TransportHeader is the transport packet header. Each packet sent by the transport will always start with a transport packet header, followed by one or more data samples (all belonging to the same transport packet).

Definition at line 36 of file TransportHeader.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum

Constants for bit masking the marshaled flags byte. This needs to match the 'Flags' above.

Enumerator
BYTE_ORDER_FLAG 
FIRST_FRAGMENT_FLAG 
LAST_FRAGMENT_FLAG 

Definition at line 66 of file TransportHeader.h.

Constructor & Destructor Documentation

◆ TransportHeader() [1/2]

ACE_INLINE OpenDDS::DCPS::TransportHeader::TransportHeader ( )

Default constructor.

Definition at line 19 of file TransportHeader.inl.

References ACE_CDR_BYTE_ORDER, ACE_INLINE, DBG_ENTRY_LVL, DCPS_PROTOCOL, and protocol_.

20  : byte_order_(ACE_CDR_BYTE_ORDER)
21  , first_fragment_(false)
22  , last_fragment_(false)
23  , reserved_(0)
24  , length_(0)
25  , sequence_()
26  , source_(0)
27 {
28  DBG_ENTRY_LVL("TransportHeader","TransportHeader",6);
29 
30  std::copy(&DCPS_PROTOCOL[0], &DCPS_PROTOCOL[6], this->protocol_);
31 }
ACE_CDR::Octet reserved_
Reserved for future use (provides padding for preamble).
ACE_CDR::Octet protocol_[6]
The protocol of the packet being transmitted.
bool byte_order_
Flags: marshaled as a single byte (ACE_CDR::Octet)
static const ACE_CDR::Octet DCPS_PROTOCOL[6]
#define DBG_ENTRY_LVL(CNAME, MNAME, DBG_LVL)
Definition: EntryExit.h:68

◆ TransportHeader() [2/2]

ACE_INLINE OpenDDS::DCPS::TransportHeader::TransportHeader ( ACE_Message_Block buffer)
explicit

Construct with values extracted from a buffer.

Definition at line 34 of file TransportHeader.inl.

References ACE_CDR_BYTE_ORDER, ACE_INLINE, DBG_ENTRY_LVL, and init().

35  : byte_order_(ACE_CDR_BYTE_ORDER)
36  , first_fragment_(false)
37  , last_fragment_(false)
38  , reserved_(0)
39  , length_(0)
40  , sequence_()
41  , source_(0)
42 {
43  DBG_ENTRY_LVL("TransportHeader","TransportHeader",6);
44  this->init(&buffer);
45 }
ACE_CDR::Octet reserved_
Reserved for future use (provides padding for preamble).
bool byte_order_
Flags: marshaled as a single byte (ACE_CDR::Octet)
bool init(ACE_Message_Block *buffer)
Demarshal transport packet from ACE_Message_Block.
#define DBG_ENTRY_LVL(CNAME, MNAME, DBG_LVL)
Definition: EntryExit.h:68

Member Function Documentation

◆ first_fragment()

bool OpenDDS::DCPS::TransportHeader::first_fragment ( )
inline

Definition at line 90 of file TransportHeader.h.

90 { return this->first_fragment_; }

◆ get_length()

ACE_UINT32 OpenDDS::DCPS::TransportHeader::get_length ( const char *  marshaled_transport_header)
static

Definition at line 49 of file TransportHeader.cpp.

References OPENDDS_END_VERSIONED_NAMESPACE_DECL, protocol_, and reserved_.

Referenced by OpenDDS::DCPS::ShmemReceiveStrategy::receive_bytes().

50 {
51  const TransportHeader* hdr = 0;
52  static const unsigned int OFFSET = sizeof(hdr->protocol_) +
53  1 /*flags*/ +
54  sizeof(hdr->reserved_);
55  return *reinterpret_cast<const ACE_UINT32*>(marshaled_header + OFFSET);
56 }
TransportHeader()
Default constructor.

◆ get_max_serialized_size()

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

Similar to IDL compiler generated methods.

Definition at line 57 of file TransportHeader.inl.

References ACE_INLINE, length_, protocol_, reserved_, sequence_, and source_.

Referenced by OpenDDS::DCPS::UdpDataLink::open(), and OpenDDS::DCPS::TransportSendStrategy::TransportSendStrategy().

58 {
59  // Representation takes no extra space for encoding.
60  const TransportHeader* hdr = 0;
61  return sizeof(hdr->protocol_) +
62  1 /*flags*/ +
63  sizeof(hdr->reserved_) +
64  sizeof(hdr->length_) +
65  sizeof(hdr->sequence_) +
66  sizeof(hdr->source_);
67 }
TransportHeader()
Default constructor.

◆ incomplete()

void OpenDDS::DCPS::TransportHeader::incomplete ( ACE_Message_Block )
inline

Definition at line 48 of file TransportHeader.h.

48 {}

◆ init()

ACE_INLINE bool OpenDDS::DCPS::TransportHeader::init ( ACE_Message_Block buffer)

Demarshal transport packet from ACE_Message_Block.

Definition at line 91 of file TransportHeader.inl.

References byte_order_, BYTE_ORDER_FLAG, DBG_ENTRY_LVL, first_fragment_, FIRST_FRAGMENT_FLAG, OpenDDS::DCPS::Encoding::KIND_UNALIGNED_CDR, last_fragment_, LAST_FRAGMENT_FLAG, length_, OPENDDS_END_VERSIONED_NAMESPACE_DECL, OpenDDS::DCPS::Serializer::read_octet_array(), reserved_, sequence_, source_, swap_bytes(), and OpenDDS::DCPS::Serializer::swap_bytes().

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

92 {
93  DBG_ENTRY_LVL("TransportHeader","init",6);
94 
95  Serializer reader(buffer, Encoding::KIND_UNALIGNED_CDR);
96 
97  if (!reader.read_octet_array(this->protocol_, sizeof(this->protocol_)))
98  return false;
99 
100  ACE_CDR::Octet flags;
101  if (!(reader >> ACE_InputCDR::to_octet(flags)))
102  return false;
103 
104  this->byte_order_= flags & (1 << BYTE_ORDER_FLAG);
105  this->first_fragment_ = flags & (1 << FIRST_FRAGMENT_FLAG);
106  this->last_fragment_ = flags & (1 << LAST_FRAGMENT_FLAG);
107 
108  if (!(reader >> ACE_InputCDR::to_octet(this->reserved_)))
109  return false;
110 
111  reader.swap_bytes(swap_bytes());
112 
113  return (reader >> this->length_) &&
114  (reader >> this->sequence_) &&
115  (reader >> this->source_);
116 }
ACE_Byte Octet
ACE_CDR::Octet reserved_
Reserved for future use (provides padding for preamble).
bool byte_order_
Flags: marshaled as a single byte (ACE_CDR::Octet)
#define DBG_ENTRY_LVL(CNAME, MNAME, DBG_LVL)
Definition: EntryExit.h:68
bool swap_bytes() const
Determine if the serializer should swap bytes.

◆ last_fragment() [1/2]

bool OpenDDS::DCPS::TransportHeader::last_fragment ( )
inline

Definition at line 91 of file TransportHeader.h.

91 { return this->last_fragment_; }

◆ last_fragment() [2/2]

void OpenDDS::DCPS::TransportHeader::last_fragment ( bool  frag)
inline

Definition at line 92 of file TransportHeader.h.

92 { this->last_fragment_ = frag; }

◆ operator=()

ACE_INLINE TransportHeader & OpenDDS::DCPS::TransportHeader::operator= ( ACE_Message_Block buffer)

Assignment from an ACE_Message_Block.

Definition at line 49 of file TransportHeader.inl.

References ACE_INLINE, DBG_ENTRY_LVL, and init().

50 {
51  DBG_ENTRY_LVL("TransportHeader","operator=",6);
52  this->init(&buffer);
53  return *this;
54 }
bool init(ACE_Message_Block *buffer)
Demarshal transport packet from ACE_Message_Block.
#define DBG_ENTRY_LVL(CNAME, MNAME, DBG_LVL)
Definition: EntryExit.h:68

◆ sequence()

const SequenceNumber& OpenDDS::DCPS::TransportHeader::sequence ( )
inline

◆ swap_bytes()

ACE_INLINE bool OpenDDS::DCPS::TransportHeader::swap_bytes ( ) const

Determine if the serializer should swap bytes.

Definition at line 71 of file TransportHeader.inl.

References ACE_CDR_BYTE_ORDER, ACE_INLINE, byte_order_, and DBG_ENTRY_LVL.

Referenced by init(), OpenDDS::DCPS::ReliableSession::nak_received(), OpenDDS::DCPS::ReliableSession::nakack_received(), OpenDDS::DCPS::MulticastDataLink::sample_received(), OpenDDS::DCPS::MulticastSession::syn_received(), and OpenDDS::DCPS::MulticastSession::synack_received().

72 {
73  DBG_ENTRY_LVL("TransportHeader","swap_bytes",6);
74 
75  return this->byte_order_ != ACE_CDR_BYTE_ORDER;
76 }
#define ACE_CDR_BYTE_ORDER
bool byte_order_
Flags: marshaled as a single byte (ACE_CDR::Octet)
#define DBG_ENTRY_LVL(CNAME, MNAME, DBG_LVL)
Definition: EntryExit.h:68

◆ valid()

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

Determine if this is a valid packet header.

Definition at line 80 of file TransportHeader.inl.

References ACE_INLINE, DBG_ENTRY_LVL, DCPS_PROTOCOL, and protocol_.

81 {
82  DBG_ENTRY_LVL("TransportHeader","valid",6);
83 
84  // Currently we do not support compatibility with other
85  // versions of the protocol:
86  return std::equal(&DCPS_PROTOCOL[0], &DCPS_PROTOCOL[6], this->protocol_);
87 }
ACE_CDR::Octet protocol_[6]
The protocol of the packet being transmitted.
static const ACE_CDR::Octet DCPS_PROTOCOL[6]
#define DBG_ENTRY_LVL(CNAME, MNAME, DBG_LVL)
Definition: EntryExit.h:68

Member Data Documentation

◆ byte_order_

bool OpenDDS::DCPS::TransportHeader::byte_order_

Flags: marshaled as a single byte (ACE_CDR::Octet)

Definition at line 60 of file TransportHeader.h.

Referenced by init(), OpenDDS::DCPS::operator<<(), and swap_bytes().

◆ DCPS_PROTOCOL

const ACE_CDR::Octet OpenDDS::DCPS::TransportHeader::DCPS_PROTOCOL
static
Initial value:
=
{ 0x44, 0x43, 0x50, 0x53, 0x02, 0x00 }

Definition at line 37 of file TransportHeader.h.

Referenced by OpenDDS::DCPS::ShmemSendStrategy::send_bytes_i(), TransportHeader(), and valid().

◆ first_fragment_

bool OpenDDS::DCPS::TransportHeader::first_fragment_

◆ last_fragment_

bool OpenDDS::DCPS::TransportHeader::last_fragment_

◆ length_

ACE_UINT32 OpenDDS::DCPS::TransportHeader::length_

◆ protocol_

ACE_CDR::Octet OpenDDS::DCPS::TransportHeader::protocol_[6]

The protocol of the packet being transmitted.

Definition at line 57 of file TransportHeader.h.

Referenced by get_length(), get_max_serialized_size(), OpenDDS::DCPS::operator<<(), TransportHeader(), and valid().

◆ reserved_

ACE_CDR::Octet OpenDDS::DCPS::TransportHeader::reserved_

Reserved for future use (provides padding for preamble).

Definition at line 69 of file TransportHeader.h.

Referenced by get_length(), get_max_serialized_size(), init(), and OpenDDS::DCPS::operator<<().

◆ sequence_

SequenceNumber OpenDDS::DCPS::TransportHeader::sequence_

◆ source_

ACE_INT64 OpenDDS::DCPS::TransportHeader::source_

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