MulticastDataLink.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_MULTICASTDATALINK_H
00009 #define DCPS_MULTICASTDATALINK_H
00010 
00011 #include "Multicast_Export.h"
00012 
00013 #include "MulticastInst.h"
00014 #include "MulticastSendStrategy.h"
00015 #include "MulticastSendStrategy_rch.h"
00016 #include "MulticastReceiveStrategy.h"
00017 #include "MulticastReceiveStrategy_rch.h"
00018 #include "MulticastSession_rch.h"
00019 #include "MulticastSessionFactory.h"
00020 #include "MulticastSessionFactory_rch.h"
00021 #include "MulticastTransport.h"
00022 #include "MulticastTypes.h"
00023 
00024 #include "dds/DCPS/DisjointSequence.h"
00025 #include "dds/DCPS/PoolAllocator.h"
00026 
00027 #include "dds/DCPS/transport/framework/DataLink.h"
00028 #include "dds/DCPS/transport/framework/TransportReactorTask.h"
00029 #include "dds/DCPS/transport/framework/TransportSendBuffer.h"
00030 
00031 #include "ace/SOCK_Dgram_Mcast.h"
00032 #include "ace/Synch_Traits.h"
00033 
00034 OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL
00035 
00036 namespace OpenDDS {
00037 namespace DCPS {
00038 
00039 class MulticastTransport;
00040 typedef RcHandle<MulticastTransport> MulticastTransport_rch;
00041 
00042 class OpenDDS_Multicast_Export MulticastDataLink
00043   : public DataLink {
00044 public:
00045   MulticastDataLink(MulticastTransport& transport,
00046                     const MulticastSessionFactory_rch& session_factory,
00047                     MulticastPeer local_peer,
00048                     MulticastInst& config,
00049                     TransportReactorTask* reactor_task,
00050                     bool is_active);
00051   virtual ~MulticastDataLink();
00052 
00053   MulticastTransport& transport();
00054 
00055   MulticastPeer local_peer() const;
00056 
00057   MulticastSendStrategy* send_strategy();
00058 
00059   MulticastReceiveStrategy* receive_strategy();
00060 
00061   SingleSendBuffer* send_buffer();
00062 
00063   MulticastInst& config();
00064 
00065   TransportReactorTask* reactor_task();
00066   ACE_Reactor* get_reactor();
00067   ACE_Proactor* get_proactor();
00068 
00069   ACE_SOCK_Dgram_Mcast& socket();
00070 
00071   bool join(const ACE_INET_Addr& group_address);
00072 
00073   MulticastSession_rch find_or_create_session(MulticastPeer remote_peer);
00074   MulticastSession_rch find_session(MulticastPeer remote_peer);
00075 
00076   bool check_header(const TransportHeader& header);
00077   bool check_header(const DataSampleHeader& header);
00078   void sample_received(ReceivedDataSample& sample);
00079 
00080   bool reassemble(ReceivedDataSample& data, const TransportHeader& header);
00081 
00082 private:
00083 
00084   MulticastSessionFactory_rch session_factory_;
00085 
00086   MulticastPeer local_peer_;
00087 
00088   TransportReactorTask* reactor_task_;
00089 
00090   MulticastSendStrategy_rch send_strategy_;
00091   MulticastReceiveStrategy_rch recv_strategy_;
00092 
00093   unique_ptr<SingleSendBuffer> send_buffer_;
00094 
00095   ACE_SOCK_Dgram_Mcast socket_;
00096 
00097   ACE_SYNCH_RECURSIVE_MUTEX session_lock_;
00098 
00099   typedef OPENDDS_MAP(MulticastPeer, MulticastSession_rch) MulticastSessionMap;
00100   MulticastSessionMap sessions_;
00101 
00102   virtual void stop_i();
00103 
00104   void syn_received_no_session(MulticastPeer source, const Message_Block_Ptr& data,
00105                                bool swap_bytes);
00106 
00107   void release_remote_i(const RepoId& remote);
00108   RepoIdSet readers_selected_, readers_withheld_;
00109   bool ready_to_deliver(const ReceivedDataSample& data);
00110 };
00111 
00112 } // namespace DCPS
00113 } // namespace OpenDDS
00114 
00115 OPENDDS_END_VERSIONED_NAMESPACE_DECL
00116 
00117 #ifdef __ACE_INLINE__
00118 # include "MulticastDataLink.inl"
00119 #endif  /* __ACE_INLINE__ */
00120 
00121 #endif  /* DCPS_MULTICASTDATALINK_H */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1