OpenDDS  Snapshot(2023/04/28-20:55)
BestEffortSession.cpp
Go to the documentation of this file.
1 /*
2  *
3  *
4  * Distributed under the OpenDDS License.
5  * See: http://www.opendds.org/license.html
6  */
7 
8 #include "BestEffortSession.h"
9 
11 
12 namespace OpenDDS {
13 namespace DCPS {
14 
16  MulticastDataLink* link,
17  MulticastPeer remote_peer)
18  : MulticastSession(interceptor, link, remote_peer)
20 {}
21 
22 bool
24 {
25  if (header.sequence_ != this->expected_ &&
28  ACE_TEXT("(%P|%t) WARNING: BestEffortSession::check_header ")
29  ACE_TEXT("expected %q received %q\n"),
30  this->expected_.getValue(), header.sequence_.getValue()), 2);
31  if (header.sequence_ > this->expected_) {
32  FragmentRange range(this->expected_.getValue(), header.sequence_.previous().getValue());
33  this->reassembly_.data_unavailable(range);
34  }
35  }
36 
37  this->expected_ = header.sequence_;
38  ++this->expected_;
39 
40  // Assume header is valid; this does not prevent duplicate
41  // delivery of datagrams:
42  return true;
43 }
44 
45 void
47 {
48  if (this->remote_peer_ != header.source_) return;
49 
50  check_header(header);
51 }
52 
53 bool
55  const ReceivedDataSample& /*data*/)
56 {
58  && header.sequence_ == expected_.previous()) {
59  return true;
60  }
61  return false;
62 }
63 
64 bool
65 BestEffortSession::start(bool active, bool /*acked*/)
66 {
68  guard,
69  this->start_lock_,
70  false);
71 
72  if (this->started_) return true; // already started
73 
74  this->active_ = active;
75  set_acked();
76 
77  return this->started_ = true;
78 }
79 
80 
81 } // namespace DCPS
82 } // namespace OpenDDS
83 
ACE_INT64 MulticastPeer
#define ACE_SYNCH_MUTEX
SequenceNumber previous() const
virtual bool ready_to_deliver(const TransportHeader &header, const ReceivedDataSample &data)
virtual void record_header_received(const TransportHeader &header)
void data_unavailable(const FragmentRange &transportSeqDropped)
std::pair< FragmentNumber, FragmentNumber > FragmentRange
Christopher Diggins *renamed files *fixing compilation errors *adding Visual C project file *removed make Max Lybbert *removed references to missing and unused header
Definition: CHANGELOG.txt:8
Holds a data sample received by the transport.
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
Defines class that represents a transport packet header.
LM_WARNING
BestEffortSession(RcHandle< ReactorInterceptor > interceptor, MulticastDataLink *link, MulticastPeer remote_peer)
ACE_TEXT("TCP_Factory")
const SequenceNumber_t SEQUENCENUMBER_UNKNOWN
Definition: MessageTypes.h:50
virtual bool start(bool active, bool acked)
Sequence number abstraction. Only allows positive 64 bit values.
static SequenceNumber SEQUENCENUMBER_UNKNOWN()
#define VDBG_LVL(DBG_ARGS, LEVEL)
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
virtual bool check_header(const TransportHeader &header)
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28