|
IBR-DTNSuite 0.6
|
00001 /* 00002 * StaticRoutingExension.h 00003 * 00004 * Created on: 15.02.2010 00005 * Author: morgenro 00006 */ 00007 00008 #ifndef STATICROUTINGEXTENSION_H_ 00009 #define STATICROUTINGEXTENSION_H_ 00010 00011 #include "routing/BaseRouter.h" 00012 #include <ibrdtn/data/MetaBundle.h> 00013 #include <ibrcommon/thread/Queue.h> 00014 #include <regex.h> 00015 00016 namespace dtn 00017 { 00018 namespace routing 00019 { 00020 class StaticRoutingExtension : public BaseRouter::ThreadedExtension 00021 { 00022 public: 00023 class StaticRoute 00024 { 00025 public: 00026 StaticRoute(const std::string ®ex, const std::string &dest); 00027 virtual ~StaticRoute(); 00028 00029 bool match(const dtn::data::EID &eid) const; 00030 const dtn::data::EID& getDestination() const; 00031 00037 StaticRoute(const StaticRoute &obj); 00038 StaticRoute& operator=(const StaticRoute &obj); 00039 00040 private: 00041 dtn::data::EID _dest; 00042 std::string _regex_str; 00043 regex_t _regex; 00044 bool _invalid; 00045 }; 00046 00047 StaticRoutingExtension(const std::list<StaticRoutingExtension::StaticRoute> &routes); 00048 virtual ~StaticRoutingExtension(); 00049 00050 void notify(const dtn::core::Event *evt); 00051 00052 virtual void stopExtension(); 00053 00054 protected: 00055 void run(); 00056 bool __cancellation(); 00057 00058 private: 00059 class Task 00060 { 00061 public: 00062 virtual ~Task() {}; 00063 virtual std::string toString() = 0; 00064 }; 00065 00066 class SearchNextBundleTask : public Task 00067 { 00068 public: 00069 SearchNextBundleTask(const dtn::data::EID &eid); 00070 virtual ~SearchNextBundleTask(); 00071 00072 virtual std::string toString(); 00073 00074 const dtn::data::EID eid; 00075 }; 00076 00077 class ProcessBundleTask : public Task 00078 { 00079 public: 00080 ProcessBundleTask(const dtn::data::MetaBundle &meta, const dtn::data::EID &origin); 00081 virtual ~ProcessBundleTask(); 00082 00083 virtual std::string toString(); 00084 00085 const dtn::data::MetaBundle bundle; 00086 const dtn::data::EID origin; 00087 }; 00088 00092 ibrcommon::Queue<StaticRoutingExtension::Task* > _taskqueue; 00093 00097 const std::list<StaticRoutingExtension::StaticRoute> _routes; 00098 }; 00099 } 00100 } 00101 00102 #endif /* STATICROUTINGEXTENSION_H_ */