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