|
IBR-DTNSuite 0.6
|
00001 /* 00002 * RetransmissionExtension.h 00003 * 00004 * Created on: 09.03.2010 00005 * Author: morgenro 00006 */ 00007 00008 #ifndef RETRANSMISSIONEXTENSION_H_ 00009 #define RETRANSMISSIONEXTENSION_H_ 00010 00011 #include "routing/BaseRouter.h" 00012 #include "ibrdtn/data/BundleID.h" 00013 #include "ibrdtn/data/EID.h" 00014 #include <queue> 00015 #include <set> 00016 00017 namespace dtn 00018 { 00019 namespace routing 00020 { 00021 class RetransmissionExtension : public BaseRouter::Extension 00022 { 00023 public: 00024 RetransmissionExtension(); 00025 virtual ~RetransmissionExtension(); 00026 00027 void notify(const dtn::core::Event *evt); 00028 00029 private: 00030 class RetransmissionData : public dtn::data::BundleID 00031 { 00032 public: 00033 RetransmissionData(const dtn::data::BundleID &id, dtn::data::EID destination, size_t retry = 2); 00034 virtual ~RetransmissionData(); 00035 00036 00037 const dtn::data::EID destination; 00038 00039 size_t getTimestamp() const; 00040 size_t getCount() const; 00041 00042 RetransmissionData& operator++(); 00043 RetransmissionData& operator++(int); 00044 00045 bool operator!=(const RetransmissionData &obj); 00046 bool operator==(const RetransmissionData &obj); 00047 00048 private: 00049 size_t _timestamp; 00050 size_t _count; 00051 const size_t retry; 00052 }; 00053 00054 std::queue<RetransmissionData> _queue; 00055 std::set<RetransmissionData> _set; 00056 }; 00057 } 00058 } 00059 00060 #endif /* RETRANSMISSIONEXTENSION_H_ */