• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

daemon/src/routing/epidemic/EpidemicRoutingExtension.h

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

Generated on Wed Mar 30 2011 11:11:49 for IBR-DTNSuite by  doxygen 1.7.1