OpenDDS::DCPS::BestEffortSession Class Reference

#include <BestEffortSession.h>

Inheritance diagram for OpenDDS::DCPS::BestEffortSession:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::DCPS::BestEffortSession:
Collaboration graph
[legend]

List of all members.

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_

Detailed Description

Definition at line 20 of file BestEffortSession.h.


Constructor & Destructor Documentation

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 }


Member Function Documentation

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 }

Here is the call graph for this function:

Here is the caller graph for this function:

virtual bool OpenDDS::DCPS::BestEffortSession::is_reliable (  )  [inline, virtual]

Reimplemented from OpenDDS::DCPS::MulticastSession.

Definition at line 35 of file BestEffortSession.h.

00035 { return false;}

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:

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 }

Here is the call graph for this function:


Member Data Documentation

Definition at line 38 of file BestEffortSession.h.

Referenced by check_header(), and ready_to_deliver().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1