00001 #ifndef CUSTODYMANAGER_H_ 00002 #define CUSTODYMANAGER_H_ 00003 00004 #include "data/Bundle.h" 00005 #include "data/CustodySignalBlock.h" 00006 #include "core/CustodyTimer.h" 00007 #include "core/EventReceiver.h" 00008 00009 #include "utils/Service.h" 00010 #include "utils/Mutex.h" 00011 #include "utils/Conditional.h" 00012 #include <list> 00013 00014 using namespace dtn::utils; 00015 00016 namespace dtn 00017 { 00018 namespace core 00019 { 00020 class CustodyManager : public Service, public EventReceiver 00021 { 00022 public: 00023 CustodyManager(); 00024 00025 virtual ~CustodyManager(); 00026 00027 void tick(); 00028 00029 virtual void setTimer(const Bundle &bundle, unsigned int time, unsigned int attempt); 00030 virtual const Bundle removeTimer(const CustodySignalBlock &block); 00031 00032 virtual void acceptCustody(const Bundle &bundle); 00033 virtual void rejectCustody(const Bundle &bundle); 00034 00035 void raiseEvent(const Event *evt); 00036 00037 protected: 00038 void terminate(); 00039 00040 private: 00041 void retransmitBundle(const Bundle &bundle); 00042 void checkCustodyTimer(); 00043 00044 Mutex m_custodylock; 00045 unsigned int m_nextcustodytimer; 00046 list<CustodyTimer> m_custodytimer; 00047 Conditional m_breakwait; 00048 }; 00049 } 00050 } 00051 00052 #endif /*CUSTODYMANAGER_H_*/
1.5.6