OpenDDS  Snapshot(2023/04/28-20:55)
MulticastTransport.h
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 #ifndef OPENDDS_DCPS_TRANSPORT_MULTICAST_MULTICASTTRANSPORT_H
9 #define OPENDDS_DCPS_TRANSPORT_MULTICAST_MULTICASTTRANSPORT_H
10 
11 #include "Multicast_Export.h"
12 
13 #include "MulticastInst_rch.h"
14 #include "MulticastDataLink_rch.h"
15 #include "MulticastTypes.h"
16 
18 #include "dds/DCPS/PoolAllocator.h"
19 
21 
22 namespace OpenDDS {
23 namespace DCPS {
24 
25 class MulticastSession;
26 typedef RcHandle<MulticastSession> MulticastSession_rch;
27 
29 public:
30  explicit MulticastTransport(const MulticastInst_rch& inst);
32 
33  void passive_connection(MulticastPeer local_peer, MulticastPeer remote_peer);
34 
35  MulticastInst_rch config() const;
36 
37 protected:
38  virtual AcceptConnectResult connect_datalink(const RemoteTransport& remote,
39  const ConnectionAttribs& attribs,
40  const TransportClient_rch& client);
41 
42  virtual AcceptConnectResult accept_datalink(const RemoteTransport& remote,
43  const ConnectionAttribs& attribs,
44  const TransportClient_rch& client);
45 
46  virtual void stop_accepting_or_connecting(const TransportClient_wrch& client,
47  const GUID_t& remote_id,
48  bool disassociate,
49  bool association_failed);
50 
51  bool configure_i(const MulticastInst_rch& config);
52 
53  virtual void shutdown_i();
54 
55  virtual bool connection_info_i(TransportLocator& info, ConnectionInfoFlags flags) const;
56 
57  virtual void release_datalink(DataLink* link);
58 
59  virtual std::string transport_type() const { return "multicast"; }
60 
61  void client_stop(const GUID_t& localId);
62 
63 private:
64 
67 
70 
71  MulticastDataLink_rch make_datalink(const GUID_t& local_id,
72  Priority priority,
73  bool active);
74 
75  MulticastSession_rch start_session(const MulticastDataLink_rch& link,
76  MulticastPeer remote_peer, bool active);
77 
78  ThreadLockType links_lock_;
79  /// link for pubs.
82  /// link for subs.
84 
85  // Used by the passive side to track the virtual "connections" to remote
86  // peers: the pending_connections_ are potential peers that the framework
87  // has already informed us about (in accept_datalink) but have not yet sent
88  // a SYN TRANSPORT_CONTROL message; the connections_ are remote peers that
89  // have already sent the SYN message -- we can consider these "complete"
90  // from the framework's point of view.
91  ThreadLockType connections_lock_;
92  typedef std::vector<DataLink::OnStartCallback> Callbacks;
93  typedef std::pair<MulticastPeer, MulticastPeer> Peers;
94  typedef OPENDDS_MAP(Peers, Callbacks) PendConnMap;
95  PendConnMap pending_connections_;
96  // remote peer to local peer
97  OPENDDS_SET(Peers) connections_;
98 };
99 
100 } // namespace DCPS
101 } // namespace OpenDDS
102 
104 
105 #endif /* DCPS_MULTICASTTRANSPORT_H */
ACE_INT64 MulticastPeer
#define ACE_SYNCH_MUTEX
#define OpenDDS_Multicast_Export
RcHandle< MulticastSession > MulticastSession_rch
ACE_Guard< ThreadLockType > GuardThreadType
std::vector< DataLink::OnStartCallback > Callbacks
ACE_CDR::Long Priority
virtual std::string transport_type() const
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
std::pair< MulticastPeer, MulticastPeer > Peers
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28
typedef OPENDDS_MAP(OPENDDS_STRING, OPENDDS_STRING) ValueMap
Helper types and functions for config file parsing.
typedef OPENDDS_SET(NetworkAddress) AddrSet
size_t ConnectionInfoFlags