00001 /* 00002 * EpidemicRoutingExtension.h 00003 * 00004 * Created on: 18.02.2010 00005 * Author: morgenro 00006 */ 00007 00008 #ifndef EPIDEMICROUTINGEXTENSION_H_ 00009 #define EPIDEMICROUTINGEXTENSION_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 #include <ibrdtn/data/ExtensionBlock.h> 00022 00023 #include <ibrcommon/thread/Queue.h> 00024 00025 #include <list> 00026 #include <queue> 00027 00028 namespace dtn 00029 { 00030 namespace routing 00031 { 00032 class EpidemicRoutingExtension : public BaseRouter::ThreadedExtension 00033 { 00034 public: 00035 EpidemicRoutingExtension(); 00036 virtual ~EpidemicRoutingExtension(); 00037 00038 void notify(const dtn::core::Event *evt); 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 ExecutableTask : public Task 00054 { 00055 public: 00056 virtual ~ExecutableTask() {}; 00057 virtual std::string toString() = 0; 00058 virtual void execute() const = 0; 00059 }; 00060 00061 class ExpireTask : public Task 00062 { 00063 public: 00064 ExpireTask(const size_t timestamp); 00065 virtual ~ExpireTask(); 00066 00067 virtual std::string toString(); 00068 00069 const size_t timestamp; 00070 }; 00071 00072 class SearchNextBundleTask : public Task 00073 { 00074 public: 00075 SearchNextBundleTask(const dtn::data::EID &eid); 00076 virtual ~SearchNextBundleTask(); 00077 00078 virtual std::string toString(); 00079 00080 const dtn::data::EID eid; 00081 }; 00082 00083 class ProcessBundleTask : public Task 00084 { 00085 public: 00086 ProcessBundleTask(const dtn::data::MetaBundle &meta, const dtn::data::EID &origin); 00087 virtual ~ProcessBundleTask(); 00088 00089 virtual std::string toString(); 00090 00091 const dtn::data::MetaBundle bundle; 00092 const dtn::data::EID origin; 00093 }; 00094 00095 class QuerySummaryVectorTask : public ExecutableTask 00096 { 00097 public: 00098 QuerySummaryVectorTask(const dtn::data::EID &origin); 00099 virtual ~QuerySummaryVectorTask(); 00100 00101 virtual std::string toString(); 00102 virtual void execute() const; 00103 00104 const dtn::data::EID origin; 00105 }; 00106 00107 class TransferCompletedTask : public Task 00108 { 00109 public: 00110 TransferCompletedTask(const dtn::data::EID &eid, const dtn::data::MetaBundle &meta); 00111 virtual ~TransferCompletedTask(); 00112 00113 virtual std::string toString(); 00114 00115 const dtn::data::EID peer; 00116 const dtn::data::MetaBundle meta; 00117 }; 00118 00125 void processECM(const dtn::data::EID &origin, const dtn::data::Bundle &b); 00126 00130 dtn::routing::BundleSummary _purge_vector; 00131 00135 ibrcommon::Queue<EpidemicRoutingExtension::Task* > _taskqueue; 00136 }; 00137 } 00138 } 00139 00140 #endif /* EPIDEMICROUTINGEXTENSION_H_ */
1.7.1