00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 #ifndef DCPS_MULTICASTRECEIVESTRATEGY_H
00009 #define DCPS_MULTICASTRECEIVESTRATEGY_H
00010 
00011 #include "Multicast_Export.h"
00012 
00013 #include "ace/Event_Handler.h"
00014 
00015 #include "dds/DCPS/transport/framework/TransportReceiveStrategy_T.h"
00016 
00017 namespace OpenDDS {
00018 namespace DCPS {
00019 
00020 class MulticastDataLink;
00021 
00022 class OpenDDS_Multicast_Export MulticastReceiveStrategy
00023   : public TransportReceiveStrategy<>,
00024     public ACE_Event_Handler {
00025 public:
00026   explicit MulticastReceiveStrategy(MulticastDataLink* link);
00027 
00028   virtual ACE_HANDLE get_handle() const;
00029   virtual int handle_input(ACE_HANDLE fd);
00030 
00031 protected:
00032   virtual ssize_t receive_bytes(iovec iov[],
00033                                 int n,
00034                                 ACE_INET_Addr& remote_address,
00035                                 ACE_HANDLE fd);
00036 
00037   virtual bool check_header(const TransportHeader& header);
00038   virtual bool check_header(const DataSampleHeader& header);
00039 
00040   virtual void deliver_sample(ReceivedDataSample& sample,
00041                               const ACE_INET_Addr& remote_address);
00042 
00043   virtual int start_i();
00044   virtual void stop_i();
00045 
00046   virtual bool reassemble(ReceivedDataSample& data);
00047 
00048 private:
00049   MulticastDataLink* link_;
00050 };
00051 
00052 } 
00053 } 
00054 
00055 #endif