OpenDDS  Snapshot(2023/04/28-20:55)
Public Member Functions | Private Attributes | List of all members
OpenDDS::RTPS::MessageParser Class Reference

#include <MessageParser.h>

Collaboration diagram for OpenDDS::RTPS::MessageParser:
Collaboration graph
[legend]

Public Member Functions

 MessageParser (const ACE_Message_Block &in)
 
 MessageParser (const DDS::OctetSeq &in)
 
bool parseHeader ()
 
bool parseSubmessageHeader ()
 
bool hasNextSubmessage () const
 
bool skipToNextSubmessage ()
 
bool skipSubmessageContent ()
 
const Headerheader () const
 
SubmessageHeader submessageHeader () const
 
size_t remaining () const
 
const char * current () const
 
DCPS::Serializerserializer ()
 
template<typename T >
bool operator>> (T &rhs)
 

Private Attributes

ACE_Message_Block fromSeq_
 
DCPS::Message_Block_Ptr in_
 
DCPS::Serializer ser_
 
Header header_
 
SubmessageHeader sub_
 
size_t smContentStart_
 

Detailed Description

Utility for iterating through a contiguous buffer (either really contiguous or virtually contiguous using message block chaining) of RTPS Submessages optionally prefixed by the RTPS Header

Definition at line 22 of file MessageParser.h.

Constructor & Destructor Documentation

◆ MessageParser() [1/2]

OpenDDS::RTPS::MessageParser::MessageParser ( const ACE_Message_Block in)
explicit

Definition at line 19 of file MessageParser.cpp.

20  : in_(in.duplicate())
21  , ser_(in_.get(), encoding_plain_native)
22  , header_()
23  , sub_()
24  , smContentStart_(0)
25 {}
virtual ACE_Message_Block * duplicate(void) const
DCPS::Message_Block_Ptr in_
Definition: MessageParser.h:45

◆ MessageParser() [2/2]

OpenDDS::RTPS::MessageParser::MessageParser ( const DDS::OctetSeq in)
explicit

Definition at line 27 of file MessageParser.cpp.

References fromSeq_, ACE_Message_Block::size(), and ACE_Message_Block::wr_ptr().

28  : fromSeq_(reinterpret_cast<const char*>(in.get_buffer()), in.length())
29  , ser_(&fromSeq_, encoding_plain_native)
30  , header_()
31  , sub_()
32  , smContentStart_(0)
33 {
35 }
ACE_Message_Block fromSeq_
Definition: MessageParser.h:44
size_t size(void) const
char * wr_ptr(void) const

Member Function Documentation

◆ current()

const char* OpenDDS::RTPS::MessageParser::current ( void  ) const
inline

◆ hasNextSubmessage()

bool OpenDDS::RTPS::MessageParser::hasNextSubmessage ( ) const

◆ header()

const Header& OpenDDS::RTPS::MessageParser::header ( void  ) const
inline

Definition at line 33 of file MessageParser.h.

33 { return header_; }

◆ operator>>()

template<typename T >
bool OpenDDS::RTPS::MessageParser::operator>> ( T &  rhs)
inline

Definition at line 41 of file MessageParser.h.

41 { return ser_ >> rhs; }

◆ parseHeader()

bool OpenDDS::RTPS::MessageParser::parseHeader ( )

◆ parseSubmessageHeader()

bool OpenDDS::RTPS::MessageParser::parseSubmessageHeader ( )

Definition at line 42 of file MessageParser.cpp.

References ACE_CDR_BYTE_ORDER, OpenDDS::RTPS::FLAG_E, OpenDDS::RTPS::SubmessageHeader::flags, OpenDDS::DCPS::Serializer::length(), ser_, smContentStart_, sub_, OpenDDS::RTPS::SubmessageHeader::submessageId, OpenDDS::RTPS::SubmessageHeader::submessageLength, and OpenDDS::DCPS::Serializer::swap_bytes().

Referenced by OpenDDS::Security::CryptoBuiltInImpl::authtag(), OpenDDS::Security::CryptoBuiltInImpl::decode_rtps_message(), and OpenDDS::DCPS::RtpsUdpSendStrategy::encode_submessages().

43 {
46  return false;
47  }
48 
49  ser_.swap_bytes(ACE_CDR_BYTE_ORDER != (sub_.flags & FLAG_E));
50  if(!(ser_ >> sub_.submessageLength)) {
51  return false;
52  }
54  return sub_.submessageLength <= ser_.length();
55 }
const octet FLAG_E
Definition: RtpsCore.idl:521
size_t length() const
Number of bytes left to read in message block chain.
Definition: Serializer.inl:437
void swap_bytes(bool do_swap)
Definition: Serializer.inl:403

◆ remaining()

size_t OpenDDS::RTPS::MessageParser::remaining ( ) const
inline

◆ serializer()

DCPS::Serializer& OpenDDS::RTPS::MessageParser::serializer ( )
inline

◆ skipSubmessageContent()

bool OpenDDS::RTPS::MessageParser::skipSubmessageContent ( )

Definition at line 74 of file MessageParser.cpp.

References OpenDDS::RTPS::INFO_TS, OpenDDS::DCPS::Serializer::length(), OPENDDS_END_VERSIONED_NAMESPACE_DECL, OpenDDS::RTPS::PAD, read(), ser_, OpenDDS::DCPS::Serializer::skip(), smContentStart_, sub_, OpenDDS::RTPS::SubmessageHeader::submessageId, and OpenDDS::RTPS::SubmessageHeader::submessageLength.

75 {
77  const size_t read = smContentStart_ - ser_.length();
78  return ser_.skip(static_cast<unsigned short>(sub_.submessageLength - read));
79  } else if (sub_.submessageId == PAD || sub_.submessageId == INFO_TS) {
80  return true;
81  } else {
82  return ser_.skip(static_cast<unsigned short>(ser_.length()));
83  }
84 }
bool skip(size_t n, int size=1)
Definition: Serializer.inl:443
size_t length() const
Number of bytes left to read in message block chain.
Definition: Serializer.inl:437
ssize_t read(ACE_HANDLE handle, void *buf, size_t len)

◆ skipToNextSubmessage()

bool OpenDDS::RTPS::MessageParser::skipToNextSubmessage ( )

Definition at line 68 of file MessageParser.cpp.

References OpenDDS::DCPS::Serializer::length(), read(), ser_, OpenDDS::DCPS::Serializer::skip(), smContentStart_, sub_, and OpenDDS::RTPS::SubmessageHeader::submessageLength.

Referenced by OpenDDS::Security::CryptoBuiltInImpl::authtag(), OpenDDS::Security::CryptoBuiltInImpl::decode_rtps_message(), and OpenDDS::DCPS::RtpsUdpSendStrategy::encode_submessages().

69 {
70  const size_t read = smContentStart_ - ser_.length();
71  return ser_.skip(static_cast<unsigned short>(sub_.submessageLength - read));
72 }
bool skip(size_t n, int size=1)
Definition: Serializer.inl:443
size_t length() const
Number of bytes left to read in message block chain.
Definition: Serializer.inl:437
ssize_t read(ACE_HANDLE handle, void *buf, size_t len)

◆ submessageHeader()

SubmessageHeader OpenDDS::RTPS::MessageParser::submessageHeader ( ) const
inline

Member Data Documentation

◆ fromSeq_

ACE_Message_Block OpenDDS::RTPS::MessageParser::fromSeq_
private

Definition at line 44 of file MessageParser.h.

Referenced by MessageParser().

◆ header_

Header OpenDDS::RTPS::MessageParser::header_
private

Definition at line 47 of file MessageParser.h.

Referenced by parseHeader().

◆ in_

DCPS::Message_Block_Ptr OpenDDS::RTPS::MessageParser::in_
private

Definition at line 45 of file MessageParser.h.

◆ ser_

DCPS::Serializer OpenDDS::RTPS::MessageParser::ser_
private

◆ smContentStart_

size_t OpenDDS::RTPS::MessageParser::smContentStart_
private

◆ sub_

SubmessageHeader OpenDDS::RTPS::MessageParser::sub_
private

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