OpenDDS
Snapshot(2023/04/07-19:43)
|
Holds a data sample received by the transport. More...
#include <ReceivedDataSample.h>
Public Member Functions | |
ReceivedDataSample () | |
ReceivedDataSample (const ACE_Message_Block &payload) | |
bool | has_data () const |
true if at least one Data Block is stored (even if it has 0 useable bytes) More... | |
size_t | data_length () const |
total length of usable bytes (between rd_ptr and wr_ptr) of all Data Blocks More... | |
void | clear () |
ACE_Message_Block * | data (ACE_Allocator *mb_alloc=0) const |
bool | write_data (Serializer &ser) const |
write the data payload to the Serializer More... | |
DDS::OctetSeq | copy_data () const |
copy the data payload into an OctetSeq More... | |
unsigned char | peek (size_t offset) const |
Retreive one byte of data from the payload. More... | |
void | prepend (ReceivedDataSample &prefix) |
Update this ReceivedDataSample's data payload to include the prefix's data payload before any existing bytes. Headers are not modified. More... | |
void | append (ReceivedDataSample &suffix) |
Update this ReceivedDataSample's data payload to include the suffix's data payload after any existing bytes. Headers are not modified. More... | |
void | append (const char *data, size_t size) |
Add passed-in data to payload bytes. More... | |
void | replace (const char *data, size_t size) |
Replace all payload bytes with passed-in data Based on the ACE_Message_Block(const char*, size_t) constructor, doesn't copy data. More... | |
ReceivedDataSample | get_fragment_range (FragmentNumber start_frag, FragmentNumber end_frag=INVALID_FRAGMENT) |
Public Attributes | |
DataSampleHeader | header_ |
The demarshalled sample header. More... | |
ACE_UINT32 | fragment_size_ |
Fragment size used by this sample. More... | |
Private Member Functions | |
OPENDDS_VECTOR (MessageBlock) blocks_ | |
Holds a data sample received by the transport.
This is the type of object that is delivered to the TransportReceiveListener objects by the transport. Note that the data sample header has already been demarshalled by the transport, and the ACE_Message_Block (chain) represents the "data" portion of the sample.
Internally, ReceivedDataSample uses an alternate representation of the ACE_Message_Block with contiguous storage (vector) instead of a linked list to implement the continuation chain.
Definition at line 36 of file ReceivedDataSample.h.
OpenDDS::DCPS::ReceivedDataSample::ReceivedDataSample | ( | ) |
Definition at line 20 of file ReceivedDataSample.cpp.
|
explicit |
Definition at line 25 of file ReceivedDataSample.cpp.
References ACE_Message_Block::cont().
void OpenDDS::DCPS::ReceivedDataSample::append | ( | ReceivedDataSample & | suffix | ) |
Update this ReceivedDataSample's data payload to include the suffix's data payload after any existing bytes. Headers are not modified.
suffix | the source ReceivedDataSample, its data will be removed and taken over by this ReceivedDataSample |
Definition at line 134 of file ReceivedDataSample.cpp.
References OpenDDS::DCPS::back_inserter(), clear(), and OPENDDS_MOVE_OR_COPY.
Referenced by OpenDDS::DCPS::RtpsUdpReceiveStrategy::decode_payload(), OpenDDS::DCPS::TransportReassembly::FragInfo::insert(), and OpenDDS::DCPS::RtpsSampleHeader::into_received_data_sample().
void OpenDDS::DCPS::ReceivedDataSample::append | ( | const char * | data, |
size_t | size | ||
) |
Add passed-in data to payload bytes.
data | start of bytes to add to the payload (makes a copy) |
size | number of bytes to add to the payload |
Definition at line 141 of file ReceivedDataSample.cpp.
References data().
|
inline |
Definition at line 54 of file ReceivedDataSample.h.
References OpenDDS::DCPS::append(), OpenDDS::DCPS::INVALID_FRAGMENT, OPENDDS_END_VERSIONED_NAMESPACE_DECL, and OpenDDS::DCPS::OPENDDS_VECTOR().
Referenced by append(), OpenDDS::DCPS::RtpsUdpReceiveStrategy::decode_payload(), OpenDDS::DCPS::TransportReassembly::FragInfo::insert(), prepend(), OpenDDS::DCPS::TransportReassembly::reassemble_i(), and replace().
DDS::OctetSeq OpenDDS::DCPS::ReceivedDataSample::copy_data | ( | ) | const |
copy the data payload into an OctetSeq
Definition at line 92 of file ReceivedDataSample.cpp.
References data(), data_length(), OpenDDS::DCPS::MessageBlock::len(), and OpenDDS::DCPS::MessageBlock::rd_ptr().
Referenced by OpenDDS::DCPS::RtpsUdpReceiveStrategy::decode_payload().
ACE_Message_Block * OpenDDS::DCPS::ReceivedDataSample::data | ( | ACE_Allocator * | mb_alloc = 0 | ) | const |
Definition at line 59 of file ReceivedDataSample.cpp.
References ACE_Message_Block::cont(), ACE_Message_Block::data_block(), OpenDDS::DCPS::MessageBlock::duplicate_data(), ACE_Message_Block::rd_ptr(), OpenDDS::DCPS::MessageBlock::rd_ptr(), ACE_Message_Block::wr_ptr(), and OpenDDS::DCPS::MessageBlock::wr_ptr().
Referenced by append(), copy_data(), OpenDDS::DCPS::RecorderImpl::data_received(), OpenDDS::DCPS::DataReaderImpl::data_received(), OpenDDS::RTPS::Sedp::Reader::data_received(), OpenDDS::DCPS::DataReaderImpl_T< DynamicSample >::dds_demarshal(), OpenDDS::DCPS::DataReaderImpl_T< DynamicSample >::lookup_instance(), OpenDDS::DCPS::UdpTransport::passive_connection(), OpenDDS::DCPS::MulticastDataLink::sample_received(), OpenDDS::DCPS::TransportReceiveStrategy<>::to_msgblock(), and write_data().
size_t OpenDDS::DCPS::ReceivedDataSample::data_length | ( | void | ) | const |
total length of usable bytes (between rd_ptr and wr_ptr) of all Data Blocks
Definition at line 35 of file ReceivedDataSample.cpp.
References ACE_NEW_MALLOC_RETURN, ACE_Allocator::instance(), and ACE_Allocator::malloc().
Referenced by copy_data(), OpenDDS::DCPS::UdpTransport::passive_connection(), and OpenDDS::DCPS::RtpsUdpReceiveStrategy::sec_submsg_to_octets().
ReceivedDataSample OpenDDS::DCPS::ReceivedDataSample::get_fragment_range | ( | FragmentNumber | start_frag, |
FragmentNumber | end_frag = INVALID_FRAGMENT |
||
) |
Definition at line 155 of file ReceivedDataSample.cpp.
References fragment_size_, header_, OpenDDS::DCPS::INVALID_FRAGMENT, OPENDDS_END_VERSIONED_NAMESPACE_DECL, and OPENDDS_VECTOR().
Referenced by OpenDDS::DCPS::TransportReassembly::FragInfo::insert().
|
inline |
true if at least one Data Block is stored (even if it has 0 useable bytes)
Definition at line 49 of file ReceivedDataSample.h.
Referenced by OpenDDS::DCPS::ReceiveListenerSet::data_received(), OpenDDS::DCPS::TransportReassembly::FragInfo::insert(), OpenDDS::DCPS::RtpsSampleHeader::into_received_data_sample(), and OpenDDS::DCPS::TransportReassembly::reassemble_i().
|
private |
Referenced by get_fragment_range().
unsigned char OpenDDS::DCPS::ReceivedDataSample::peek | ( | size_t | offset | ) | const |
Retreive one byte of data from the payload.
offset | must be in the range [0, data_length()) |
Definition at line 107 of file ReceivedDataSample.cpp.
References OpenDDS::DCPS::MessageBlock::len(), and OpenDDS::DCPS::MessageBlock::rd_ptr().
Referenced by OpenDDS::DCPS::RtpsSampleHeader::payload_byte_order(), and OpenDDS::DCPS::RtpsUdpReceiveStrategy::reassemble_i().
void OpenDDS::DCPS::ReceivedDataSample::prepend | ( | ReceivedDataSample & | prefix | ) |
Update this ReceivedDataSample's data payload to include the prefix's data payload before any existing bytes. Headers are not modified.
prefix | the source ReceivedDataSample, its data will be removed and taken over by this ReceivedDataSample |
Definition at line 127 of file ReceivedDataSample.cpp.
References clear(), and OPENDDS_MOVE_OR_COPY.
Referenced by OpenDDS::DCPS::TransportReassembly::FragInfo::insert().
void OpenDDS::DCPS::ReceivedDataSample::replace | ( | const char * | data, |
size_t | size | ||
) |
Replace all payload bytes with passed-in data Based on the ACE_Message_Block(const char*, size_t) constructor, doesn't copy data.
data | start of bytes to use as the payload |
size | number of bytes to use as the payload |
Definition at line 148 of file ReceivedDataSample.cpp.
References clear().
Referenced by OpenDDS::DCPS::RtpsSampleHeader::into_received_data_sample().
bool OpenDDS::DCPS::ReceivedDataSample::write_data | ( | Serializer & | ser | ) | const |
write the data payload to the Serializer
Definition at line 79 of file ReceivedDataSample.cpp.
References data(), OpenDDS::DCPS::MessageBlock::len(), OpenDDS::DCPS::MessageBlock::rd_ptr(), and OpenDDS::DCPS::Serializer::write_octet_array().
Referenced by OpenDDS::DCPS::RtpsUdpReceiveStrategy::sec_submsg_to_octets().
ACE_UINT32 OpenDDS::DCPS::ReceivedDataSample::fragment_size_ |
Fragment size used by this sample.
Definition at line 46 of file ReceivedDataSample.h.
Referenced by get_fragment_range(), and OpenDDS::DCPS::RtpsUdpReceiveStrategy::reassemble_i().
DataSampleHeader OpenDDS::DCPS::ReceivedDataSample::header_ |
The demarshalled sample header.
Definition at line 43 of file ReceivedDataSample.h.
Referenced by OpenDDS::DCPS::TcpDataLink::ack_received(), OpenDDS::DCPS::DataReaderImpl::check_historic(), OpenDDS::DCPS::RecorderImpl::data_received(), OpenDDS::DCPS::DataReaderImpl::data_received(), OpenDDS::RTPS::Sedp::Reader::data_received(), OpenDDS::DCPS::DataLink::data_received_i(), OpenDDS::RTPS::Sedp::DiscoveryReader::data_received_i(), OpenDDS::RTPS::Sedp::LivelinessReader::data_received_i(), OpenDDS::RTPS::Sedp::SecurityReader::data_received_i(), OpenDDS::RTPS::Sedp::TypeLookupRequestReader::data_received_i(), OpenDDS::RTPS::Sedp::TypeLookupReplyReader::data_received_i(), OpenDDS::DCPS::TransportReassembly::data_unavailable(), OpenDDS::DCPS::DataReaderImpl_T< DynamicSample >::dds_demarshal(), OpenDDS::RTPS::decode_parameter_list(), OpenDDS::DCPS::RtpsUdpReceiveStrategy::decode_payload(), OpenDDS::DCPS::DataReaderImpl::deliver_historic(), OpenDDS::DCPS::ShmemReceiveStrategy::deliver_sample(), OpenDDS::DCPS::UdpReceiveStrategy::deliver_sample(), OpenDDS::DCPS::TcpReceiveStrategy::deliver_sample(), OpenDDS::DCPS::RtpsUdpReceiveStrategy::deliver_sample_i(), OpenDDS::DCPS::DataReaderImpl_T< DynamicSample >::dispose_unregister(), OpenDDS::DCPS::RtpsUdpDataLink::filterBestEffortReaders(), get_fragment_range(), OpenDDS::DCPS::TransportReassembly::FragInfo::insert(), OpenDDS::DCPS::RtpsSampleHeader::into_received_data_sample(), OpenDDS::DCPS::DataSampleHeader::into_received_data_sample(), OpenDDS::DCPS::DataReaderImpl_T< DynamicSample >::lookup_instance(), OpenDDS::RTPS::Sedp::TypeLookupReplyReader::process_get_dependencies_reply(), OpenDDS::DCPS::DataReaderImpl::process_latency(), OpenDDS::RTPS::Sedp::TypeLookupReplyReader::process_type_lookup_reply(), OpenDDS::DCPS::ReliableSession::ready_to_deliver(), OpenDDS::DCPS::TransportReassembly::reassemble_i(), OpenDDS::DCPS::RtpsUdpReceiveStrategy::reassemble_i(), OpenDDS::DCPS::TcpDataLink::request_ack_received(), OpenDDS::DCPS::ShmemDataLink::request_ack_received(), and OpenDDS::DCPS::MulticastDataLink::sample_received().