00001 /* 00002 * 00003 * 00004 * Distributed under the OpenDDS License. 00005 * See: http://www.opendds.org/license.html 00006 */ 00007 00008 #ifndef OPENDDS_DCPS_TRANSPORTSENDLISTENER_H 00009 #define OPENDDS_DCPS_TRANSPORTSENDLISTENER_H 00010 00011 #include "dds/DCPS/dcps_export.h" 00012 #include "dds/DCPS/RcHandle_T.h" 00013 #include "dds/DdsDcpsInfoUtilsC.h" 00014 #include "dds/DCPS/Message_Block_Ptr.h" 00015 #include "TransportDefs.h" 00016 #include "dds/DCPS/RcObject.h" 00017 #include "dds/DCPS/PoolAllocator.h" 00018 00019 ACE_BEGIN_VERSIONED_NAMESPACE_DECL 00020 class ACE_Message_Block; 00021 ACE_END_VERSIONED_NAMESPACE_DECL 00022 00023 OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL 00024 00025 namespace OpenDDS { 00026 namespace DCPS { 00027 00028 class DataSampleElement; 00029 struct DataSampleHeader; 00030 typedef ACE_Message_Block DataSample; 00031 00032 class DataLinkSet; 00033 typedef RcHandle<DataLinkSet> DataLinkSet_rch; 00034 00035 class ReaderIdSeq; 00036 00037 class OpenDDS_Dcps_Export TransportSendListener 00038 : public virtual RcObject { 00039 public: 00040 00041 virtual ~TransportSendListener(); 00042 00043 virtual void data_delivered(const DataSampleElement* sample); 00044 virtual void data_dropped(const DataSampleElement* sample, 00045 bool dropped_by_transport); 00046 00047 virtual void control_delivered(const Message_Block_Ptr& sample); 00048 virtual void control_dropped(const Message_Block_Ptr& sample, 00049 bool dropped_by_transport); 00050 00051 virtual void notify_publication_disconnected(const ReaderIdSeq& subids) = 0; 00052 virtual void notify_publication_reconnected(const ReaderIdSeq& subids) = 0; 00053 virtual void notify_publication_lost(const ReaderIdSeq& subids) = 0; 00054 00055 virtual void remove_associations(const ReaderIdSeq& subids, bool notify) = 0; 00056 00057 /// Hook for the listener to override a normal control message with 00058 /// customized messages to different DataLinks. 00059 virtual SendControlStatus send_control_customized( 00060 const DataLinkSet_rch& links, 00061 const DataSampleHeader& header, 00062 ACE_Message_Block* msg, 00063 void* extra); 00064 00065 struct InlineQosData { 00066 DDS::PublisherQos pub_qos; 00067 DDS::DataWriterQos dw_qos; 00068 OPENDDS_STRING topic_name; 00069 }; 00070 00071 virtual void retrieve_inline_qos_data(InlineQosData& qos_data) const; 00072 00073 protected: 00074 00075 TransportSendListener(); 00076 }; 00077 00078 typedef RcHandle<TransportSendListener> TransportSendListener_rch; 00079 00080 } // namespace DCPS 00081 } // namespace OpenDDS 00082 00083 OPENDDS_END_VERSIONED_NAMESPACE_DECL 00084 00085 #endif /* OPENDDS_DCPS_TRANSPORTSENDLISTENER_H */