|
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 #include <ibrdtn/data/BundleList.h> 00021 00022 #include <ibrcommon/thread/Queue.h> 00023 00024 #include <list> 00025 #include <queue> 00026 00027 namespace dtn 00028 { 00029 namespace routing 00030 { 00031 class FloodRoutingExtension : public BaseRouter::ThreadedExtension 00032 { 00033 public: 00034 FloodRoutingExtension(); 00035 virtual ~FloodRoutingExtension(); 00036 00037 void notify(const dtn::core::Event *evt); 00038 00039 virtual void stopExtension(); 00040 00041 protected: 00042 void run(); 00043 bool __cancellation(); 00044 00045 private: 00046 class Task 00047 { 00048 public: 00049 virtual ~Task() {}; 00050 virtual std::string toString() = 0; 00051 }; 00052 00053 class SearchNextBundleTask : public Task 00054 { 00055 public: 00056 SearchNextBundleTask(const dtn::data::EID &eid); 00057 virtual ~SearchNextBundleTask(); 00058 00059 virtual std::string toString(); 00060 00061 const dtn::data::EID eid; 00062 }; 00063 00064 class ProcessBundleTask : public Task 00065 { 00066 public: 00067 ProcessBundleTask(const dtn::data::MetaBundle &meta, const dtn::data::EID &origin); 00068 virtual ~ProcessBundleTask(); 00069 00070 virtual std::string toString(); 00071 00072 const dtn::data::MetaBundle bundle; 00073 const dtn::data::EID origin; 00074 }; 00075 00079 ibrcommon::Queue<FloodRoutingExtension::Task* > _taskqueue; 00080 }; 00081 } 00082 } 00083 00084 #endif /* EPIDEMICROUTINGEXTENSION_H_ */