IBR-DTNSuite 0.6

daemon/src/routing/StaticRoutingExtension.h

Go to the documentation of this file.
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 &regex, 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_ */