MulticastTransport.h

Go to the documentation of this file.
00001 /*
00002  *
00003  *
00004  * Distributed under the OpenDDS License.
00005  * See: http://www.opendds.org/license.html
00006  */
00007 
00008 #ifndef DCPS_MULTICASTTRANSPORT_H
00009 #define DCPS_MULTICASTTRANSPORT_H
00010 
00011 #include "Multicast_Export.h"
00012 
00013 #include "MulticastDataLink_rch.h"
00014 #include "MulticastTypes.h"
00015 
00016 #include "dds/DCPS/transport/framework/TransportImpl.h"
00017 #include "dds/DCPS/PoolAllocator.h"
00018 
00019 OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL
00020 
00021 namespace OpenDDS {
00022 namespace DCPS {
00023 
00024 class MulticastInst;
00025 
00026 class MulticastSession;
00027 typedef RcHandle<MulticastSession> MulticastSession_rch;
00028 
00029 class OpenDDS_Multicast_Export MulticastTransport : public TransportImpl {
00030 public:
00031   explicit MulticastTransport(MulticastInst& inst);
00032   ~MulticastTransport();
00033 
00034   void passive_connection(MulticastPeer local_peer, MulticastPeer remote_peer);
00035 
00036   MulticastInst& config() const;
00037 
00038 protected:
00039   virtual AcceptConnectResult connect_datalink(const RemoteTransport& remote,
00040                                                const ConnectionAttribs& attribs,
00041                                                const TransportClient_rch& client);
00042 
00043   virtual AcceptConnectResult accept_datalink(const RemoteTransport& remote,
00044                                               const ConnectionAttribs& attribs,
00045                                               const TransportClient_rch& client);
00046 
00047   virtual void stop_accepting_or_connecting(const TransportClient_wrch& client,
00048                                             const RepoId& remote_id);
00049 
00050   bool configure_i(MulticastInst& config);
00051 
00052   virtual void shutdown_i();
00053 
00054   virtual bool connection_info_i(TransportLocator& info) const;
00055 
00056   virtual void release_datalink(DataLink* link);
00057 
00058   virtual std::string transport_type() const { return "multicast"; }
00059 
00060 private:
00061 
00062   typedef ACE_SYNCH_MUTEX         LockType;
00063   typedef ACE_Guard<LockType>     GuardType;
00064 
00065   typedef ACE_Thread_Mutex         ThreadLockType;
00066   typedef ACE_Guard<ThreadLockType>     GuardThreadType;
00067 
00068   MulticastDataLink_rch make_datalink(const RepoId& local_id,
00069                                       Priority priority,
00070                                       bool active);
00071 
00072   MulticastSession_rch start_session(const MulticastDataLink_rch& link,
00073                                      MulticastPeer remote_peer, bool active);
00074 
00075   //RcHandle<MulticastInst> config_i_;
00076 
00077   ThreadLockType links_lock_;
00078   /// link for pubs.
00079   typedef OPENDDS_MAP(MulticastPeer, MulticastDataLink_rch) Links;
00080   Links client_links_;
00081   /// link for subs.
00082   Links server_links_;
00083 
00084   // Used by the passive side to track the virtual "connections" to remote
00085   // peers: the pending_connections_ are potential peers that the framework
00086   // has already informed us about (in accept_datalink) but have not yet sent
00087   // a SYN TRANSPORT_CONTROL message; the connections_ are remote peers that
00088   // have already sent the SYN message -- we can consider these "complete"
00089   // from the framework's point of view.
00090   ThreadLockType connections_lock_;
00091   typedef std::vector<DataLink::OnStartCallback> Callbacks;
00092   typedef std::pair<MulticastPeer, MulticastPeer> Peers;
00093   typedef OPENDDS_MAP(Peers, Callbacks) PendConnMap;
00094   PendConnMap pending_connections_;
00095   // remote peer to local peer
00096   OPENDDS_SET(Peers) connections_;
00097 };
00098 
00099 } // namespace DCPS
00100 } // namespace OpenDDS
00101 
00102 OPENDDS_END_VERSIONED_NAMESPACE_DECL
00103 
00104 #endif  /* DCPS_MULTICASTTRANSPORT_H */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1