Go to the documentation of this file.00001
00002
00003
00004
00005
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