#include <BestEffortSession.h>
Public Member Functions | |
BestEffortSession (ACE_Reactor *reactor, ACE_thread_t owner, MulticastDataLink *link, MulticastPeer remote_peer) | |
virtual bool | check_header (const TransportHeader &header) |
virtual void | record_header_received (const TransportHeader &header) |
virtual bool | ready_to_deliver (const TransportHeader &header, const ReceivedDataSample &data) |
virtual bool | start (bool active, bool acked) |
virtual bool | is_reliable () |
Private Attributes | |
SequenceNumber | expected_ |
Definition at line 20 of file BestEffortSession.h.
OpenDDS::DCPS::BestEffortSession::BestEffortSession | ( | ACE_Reactor * | reactor, | |
ACE_thread_t | owner, | |||
MulticastDataLink * | link, | |||
MulticastPeer | remote_peer | |||
) |
Definition at line 15 of file BestEffortSession.cpp.
00019 : MulticastSession(reactor, owner, link, remote_peer) 00020 , expected_(SequenceNumber::SEQUENCENUMBER_UNKNOWN()) 00021 { 00022 }
bool OpenDDS::DCPS::BestEffortSession::check_header | ( | const TransportHeader & | header | ) | [virtual] |
Implements OpenDDS::DCPS::MulticastSession.
Definition at line 25 of file BestEffortSession.cpp.
References ACE_TEXT(), OpenDDS::DCPS::TransportReassembly::data_unavailable(), expected_, OpenDDS::DCPS::SequenceNumber::getValue(), LM_WARNING, OpenDDS::DCPS::SequenceNumber::previous(), OpenDDS::DCPS::MulticastSession::reassembly_, OpenDDS::DCPS::TransportHeader::sequence_, OpenDDS::DCPS::SequenceNumber::SEQUENCENUMBER_UNKNOWN(), and VDBG_LVL.
Referenced by record_header_received().
00026 { 00027 if (header.sequence_ != this->expected_ && 00028 expected_ != SequenceNumber::SEQUENCENUMBER_UNKNOWN()) { 00029 VDBG_LVL((LM_WARNING, 00030 ACE_TEXT("(%P|%t) WARNING: BestEffortSession::check_header ") 00031 ACE_TEXT("expected %q received %q\n"), 00032 this->expected_.getValue(), header.sequence_.getValue()), 2); 00033 if (header.sequence_ > this->expected_) { 00034 SequenceRange range(this->expected_, header.sequence_.previous()); 00035 this->reassembly_.data_unavailable(range); 00036 } 00037 } 00038 00039 this->expected_ = header.sequence_; 00040 ++this->expected_; 00041 00042 // Assume header is valid; this does not prevent duplicate 00043 // delivery of datagrams: 00044 return true; 00045 }
virtual bool OpenDDS::DCPS::BestEffortSession::is_reliable | ( | ) | [inline, virtual] |
Reimplemented from OpenDDS::DCPS::MulticastSession.
Definition at line 35 of file BestEffortSession.h.
bool OpenDDS::DCPS::BestEffortSession::ready_to_deliver | ( | const TransportHeader & | header, | |
const ReceivedDataSample & | data | |||
) | [virtual] |
Implements OpenDDS::DCPS::MulticastSession.
Definition at line 56 of file BestEffortSession.cpp.
References expected_, OpenDDS::DCPS::SequenceNumber::previous(), OpenDDS::DCPS::TransportHeader::sequence_, and OpenDDS::DCPS::SequenceNumber::SEQUENCENUMBER_UNKNOWN().
00058 { 00059 if (expected_ != SequenceNumber::SEQUENCENUMBER_UNKNOWN() 00060 && header.sequence_ == expected_.previous()) { 00061 return true; 00062 } 00063 return false; 00064 }
void OpenDDS::DCPS::BestEffortSession::record_header_received | ( | const TransportHeader & | header | ) | [virtual] |
Implements OpenDDS::DCPS::MulticastSession.
Definition at line 48 of file BestEffortSession.cpp.
References check_header(), OpenDDS::DCPS::MulticastSession::remote_peer_, and OpenDDS::DCPS::TransportHeader::source_.
00049 { 00050 if (this->remote_peer_ != header.source_) return; 00051 00052 check_header(header); 00053 }
bool OpenDDS::DCPS::BestEffortSession::start | ( | bool | active, | |
bool | acked | |||
) | [virtual] |
Implements OpenDDS::DCPS::MulticastSession.
Definition at line 67 of file BestEffortSession.cpp.
References ACE_TEXT(), OpenDDS::DCPS::MulticastSession::active_, LM_ERROR, OpenDDS::DCPS::MulticastSession::start_lock_, OpenDDS::DCPS::MulticastSession::start_syn(), and OpenDDS::DCPS::MulticastSession::started_.
00068 { 00069 ACE_GUARD_RETURN(ACE_SYNCH_MUTEX, 00070 guard, 00071 this->start_lock_, 00072 false); 00073 00074 if (this->started_) return true; // already started 00075 00076 this->active_ = active; 00077 00078 if (active && !this->start_syn()) { 00079 ACE_ERROR_RETURN((LM_ERROR, 00080 ACE_TEXT("(%P|%t) ERROR: ") 00081 ACE_TEXT("BestEffortSession::start: ") 00082 ACE_TEXT("failed to schedule SYN watchdog!\n")), 00083 false); 00084 } 00085 00086 return this->started_ = true; 00087 }
Definition at line 38 of file BestEffortSession.h.
Referenced by check_header(), and ready_to_deliver().