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