|
IBR-DTNSuite 0.6
|
00001 /* 00002 * EpidemicRoutingExtension.h 00003 * 00004 * Created on: 18.02.2010 00005 * Author: morgenro 00006 */ 00007 00008 #ifndef FLOODROUTINGEXTENSION_H_ 00009 #define FLOODROUTINGEXTENSION_H_ 00010 00011 #include "core/Node.h" 00012 00013 #include "routing/SummaryVector.h" 00014 #include "routing/BaseRouter.h" 00015 #include "routing/NeighborDatabase.h" 00016 00017 #include <ibrdtn/data/Block.h> 00018 #include <ibrdtn/data/SDNV.h> 00019 #include <ibrdtn/data/BundleString.h> 00020 00021 #include <ibrcommon/thread/Queue.h> 00022 00023 #include <list> 00024 #include <queue> 00025 00026 namespace dtn 00027 { 00028 namespace routing 00029 { 00030 class FloodRoutingExtension : public BaseRouter::ThreadedExtension 00031 { 00032 public: 00033 FloodRoutingExtension(); 00034 virtual ~FloodRoutingExtension(); 00035 00036 void notify(const dtn::core::Event *evt); 00037 00038 virtual void stopExtension(); 00039 00040 protected: 00041 void run(); 00042 bool __cancellation(); 00043 00044 private: 00045 class Task 00046 { 00047 public: 00048 virtual ~Task() {}; 00049 virtual std::string toString() = 0; 00050 }; 00051 00052 class SearchNextBundleTask : public Task 00053 { 00054 public: 00055 SearchNextBundleTask(const dtn::data::EID &eid); 00056 virtual ~SearchNextBundleTask(); 00057 00058 virtual std::string toString(); 00059 00060 const dtn::data::EID eid; 00061 }; 00062 00063 class ProcessBundleTask : public Task 00064 { 00065 public: 00066 ProcessBundleTask(const dtn::data::MetaBundle &meta, const dtn::data::EID &origin); 00067 virtual ~ProcessBundleTask(); 00068 00069 virtual std::string toString(); 00070 00071 const dtn::data::MetaBundle bundle; 00072 const dtn::data::EID origin; 00073 }; 00074 00078 ibrcommon::Queue<FloodRoutingExtension::Task* > _taskqueue; 00079 }; 00080 } 00081 } 00082 00083 #endif /* EPIDEMICROUTINGEXTENSION_H_ */