OpenDDS
Snapshot(2023/04/07-19:43)
|
#include <TransportReassembly.h>
Classes | |
struct | FragInfo |
struct | FragSample |
Public Member Functions | |
TransportReassembly (const TimeDuration &timeout=TimeDuration(300)) | |
bool | reassemble (const SequenceNumber &transportSeq, bool firstFrag, ReceivedDataSample &data, ACE_UINT32 total_frags=0) |
bool | reassemble (const FragmentRange &fragRange, ReceivedDataSample &data, ACE_UINT32 total_frags=0) |
void | data_unavailable (const FragmentRange &transportSeqDropped) |
void | data_unavailable (const SequenceNumber &dataSampleSeq, const GUID_t &pub_id) |
void | clear_completed (const GUID_t &pub_id) |
bool | has_frags (const SequenceNumber &seq, const GUID_t &pub_id) const |
bool | has_frags (const SequenceNumber &seq, const GUID_t &pub_id, ACE_UINT32 &total_frags) const |
CORBA::ULong | get_gaps (const SequenceNumber &msg_seq, const GUID_t &pub_id, CORBA::Long bitmap[], CORBA::ULong length, CORBA::ULong &numBits) const |
![]() | |
virtual | ~RcObject () |
virtual void | _add_ref () |
virtual void | _remove_ref () |
long | ref_count () const |
WeakObject * | _get_weak_object () const |
Private Types | |
typedef std::pair< MonotonicTimePoint, FragKey > | ElementType |
Private Member Functions | |
bool | reassemble_i (const FragmentRange &fragRange, bool firstFrag, ReceivedDataSample &data, ACE_UINT32 total_frags) |
typedef | OPENDDS_MAP (FragKey, FragInfo) FragInfoMap |
typedef | OPENDDS_LIST (ElementType) ExpirationQueue |
typedef | OPENDDS_MAP_CMP (GUID_t, DisjointSequence, GUID_tKeyLessThan) CompletedMap |
void | check_expirations (const MonotonicTimePoint &now) |
Private Attributes | |
ACE_Thread_Mutex | mutex_ |
FragInfoMap | fragments_ |
ExpirationQueue | expiration_queue_ |
CompletedMap | completed_ |
TimeDuration | timeout_ |
Additional Inherited Members | |
![]() | |
RcObject () | |
Definition at line 65 of file TransportReassembly.h.
|
private |
Definition at line 157 of file TransportReassembly.h.
|
explicit |
Definition at line 36 of file TransportReassembly.cpp.
|
private |
Definition at line 291 of file TransportReassembly.cpp.
References ACE_DEBUG, expiration_queue_, fragments_, LM_DEBUG, OpenDDS::DCPS::TransportDebug::log_fragment_storage, OpenDDS::DCPS::transport_debug, and OpenDDS::DCPS::Transport_debug_level.
Referenced by reassemble_i().
void OpenDDS::DCPS::TransportReassembly::clear_completed | ( | const GUID_t & | pub_id | ) |
Clears out "completed" sequence numbers in order to allow resends for new associations to the same (given) publication id
Definition at line 56 of file TransportReassembly.cpp.
References completed_, and mutex_.
Referenced by OpenDDS::DCPS::RtpsUdpReceiveStrategy::clear_completed_fragments().
void OpenDDS::DCPS::TransportReassembly::data_unavailable | ( | const FragmentRange & | transportSeqDropped | ) |
Called by TransportReceiveStrategy to indicate that we can stop tracking partially-reassembled messages when we know the remaining fragments are not expected to arrive.
Definition at line 228 of file TransportReassembly.cpp.
References OpenDDS::DCPS::FragKey::data_sample_seq_, OpenDDS::DCPS::TransportReassembly::FragSample::frag_range_, fragments_, OpenDDS::DCPS::TransportReassembly::FragInfo::have_first_, OpenDDS::DCPS::ReceivedDataSample::header_, OpenDDS::DCPS::TransportReassembly::FragInfo::insert(), LM_DEBUG, OpenDDS::DCPS::DataSampleHeader::more_fragments_, mutex_, OPENDDS_LIST(), OpenDDS::DCPS::TransportReassembly::FragInfo::sample_list_, OpenDDS::DCPS::DataSampleHeader::sequence_, and VDBG.
Referenced by OpenDDS::DCPS::BestEffortSession::check_header(), OpenDDS::DCPS::ReliableSession::expire_naks(), OpenDDS::DCPS::ReliableSession::nakack_received(), and OpenDDS::DCPS::RtpsUdpReceiveStrategy::remove_fragments().
void OpenDDS::DCPS::TransportReassembly::data_unavailable | ( | const SequenceNumber & | dataSampleSeq, |
const GUID_t & | pub_id | ||
) |
Definition at line 280 of file TransportReassembly.cpp.
References ACE_DEBUG, fragments_, LM_DEBUG, OpenDDS::DCPS::TransportDebug::log_fragment_storage, mutex_, OpenDDS::DCPS::transport_debug, and OpenDDS::DCPS::Transport_debug_level.
CORBA::ULong OpenDDS::DCPS::TransportReassembly::get_gaps | ( | const SequenceNumber & | msg_seq, |
const GUID_t & | pub_id, | ||
CORBA::Long | bitmap[], | ||
CORBA::ULong | length, | ||
CORBA::ULong & | numBits | ||
) | const |
Populates bitmap for missing fragment sequence numbers and set numBits for the given message sequence and publisher ID.
Definition at line 63 of file TransportReassembly.cpp.
References OpenDDS::DCPS::DisjointSequence::fill_bitmap_range(), fragments_, mutex_, and OPENDDS_LIST().
Referenced by OpenDDS::DCPS::RtpsUdpReceiveStrategy::has_fragments().
|
inline |
Returns true if this object is storing fragments for the given DataSampleHeader sequence number from the given publication.
Definition at line 91 of file TransportReassembly.h.
Referenced by OpenDDS::DCPS::RtpsUdpReceiveStrategy::has_fragments(), and OpenDDS::DCPS::RtpsUdpReceiveStrategy::remove_frags_from_bitmap().
bool OpenDDS::DCPS::TransportReassembly::has_frags | ( | const SequenceNumber & | seq, |
const GUID_t & | pub_id, | ||
ACE_UINT32 & | total_frags | ||
) | const |
Returns true if this object is storing fragments for the given DataSampleHeader sequence number from the given publication.
Definition at line 42 of file TransportReassembly.cpp.
References fragments_, and mutex_.
|
private |
Referenced by data_unavailable(), and get_gaps().
|
private |
bool OpenDDS::DCPS::TransportReassembly::reassemble | ( | const SequenceNumber & | transportSeq, |
bool | firstFrag, | ||
ReceivedDataSample & | data, | ||
ACE_UINT32 | total_frags = 0 |
||
) |
Called by TransportReceiveStrategy if the fragmentation header flag is set. Returns true/false to indicate if data should be delivered to the datalink. The 'data' argument may be modified by this method.
Definition at line 140 of file TransportReassembly.cpp.
References OpenDDS::DCPS::SequenceNumber::getValue(), mutex_, and reassemble_i().
Referenced by OpenDDS::DCPS::MulticastSession::reassemble(), and OpenDDS::DCPS::RtpsUdpReceiveStrategy::reassemble_i().
bool OpenDDS::DCPS::TransportReassembly::reassemble | ( | const FragmentRange & | fragRange, |
ReceivedDataSample & | data, | ||
ACE_UINT32 | total_frags = 0 |
||
) |
Definition at line 131 of file TransportReassembly.cpp.
References mutex_, and reassemble_i().
|
private |
Definition at line 151 of file TransportReassembly.cpp.
References ACE_DEBUG, OpenDDS::DCPS::LogGuid::c_str(), check_expirations(), OpenDDS::DCPS::ReceivedDataSample::clear(), completed_, OpenDDS::DCPS::FragKey::data_sample_seq_, expiration_queue_, fragments_, OpenDDS::DCPS::SequenceNumber::getValue(), OpenDDS::DCPS::ReceivedDataSample::has_data(), OpenDDS::DCPS::ReceivedDataSample::header_, OpenDDS::DCPS::TransportReassembly::FragInfo::insert(), LM_DEBUG, OpenDDS::DCPS::TransportDebug::log_fragment_storage, OpenDDS::DCPS::TimePoint_T< MonotonicClock >::now(), OpenDDS::DCPS::FragKey::publication_, OpenDDS::DCPS::DataSampleHeader::publication_id_, OpenDDS::DCPS::DataSampleHeader::sequence_, OpenDDS::DCPS::swap(), timeout_, OpenDDS::DCPS::transport_debug, OpenDDS::DCPS::Transport_debug_level, and VDBG.
Referenced by reassemble().
|
private |
Definition at line 162 of file TransportReassembly.h.
Referenced by clear_completed(), and reassemble_i().
|
private |
Definition at line 159 of file TransportReassembly.h.
Referenced by check_expirations(), and reassemble_i().
|
private |
Definition at line 155 of file TransportReassembly.h.
Referenced by check_expirations(), data_unavailable(), get_gaps(), has_frags(), and reassemble_i().
|
mutableprivate |
Definition at line 148 of file TransportReassembly.h.
Referenced by clear_completed(), data_unavailable(), get_gaps(), has_frags(), and reassemble().
|
private |
Definition at line 164 of file TransportReassembly.h.
Referenced by reassemble_i().