IBR-DTNSuite
0.8
|
00001 /* 00002 * FileConvergenceLayer.h 00003 * 00004 * Created on: 20.09.2011 00005 * Author: morgenro 00006 */ 00007 00008 #include "Component.h" 00009 #include "net/ConvergenceLayer.h" 00010 #include "core/Node.h" 00011 #include "core/EventReceiver.h" 00012 #include <ibrdtn/data/BundleList.h> 00013 #include <ibrcommon/thread/Mutex.h> 00014 #include <ibrcommon/thread/Queue.h> 00015 00016 #ifndef FILECONVERGENCELAYER_H_ 00017 #define FILECONVERGENCELAYER_H_ 00018 00019 namespace dtn 00020 { 00021 namespace net 00022 { 00023 00024 class FileConvergenceLayer : public dtn::net::ConvergenceLayer, public dtn::daemon::IndependentComponent, public dtn::core::EventReceiver 00025 { 00026 public: 00027 FileConvergenceLayer(); 00028 virtual ~FileConvergenceLayer(); 00029 00030 void raiseEvent(const dtn::core::Event *evt); 00031 00032 dtn::core::Node::Protocol getDiscoveryProtocol() const; 00033 00034 void open(const dtn::core::Node&); 00035 void queue(const dtn::core::Node &n, const ConvergenceLayer::Job &job); 00036 00037 const std::string getName() const; 00038 00039 protected: 00040 void componentUp(); 00041 void componentRun(); 00042 void componentDown(); 00043 00044 void __cancellation(); 00045 00046 private: 00047 class Task 00048 { 00049 public: 00050 enum Action 00051 { 00052 TASK_LOAD, 00053 TASK_STORE 00054 }; 00055 00056 Task(Action a, const dtn::core::Node &n); 00057 virtual ~Task(); 00058 00059 const Action action; 00060 const dtn::core::Node node; 00061 }; 00062 00063 class StoreBundleTask : public Task 00064 { 00065 public: 00066 StoreBundleTask(const dtn::core::Node &n, const ConvergenceLayer::Job &j); 00067 virtual ~StoreBundleTask(); 00068 00069 const ConvergenceLayer::Job job; 00070 }; 00071 00072 void replyHandshake(const dtn::data::Bundle &bundle, std::list<dtn::data::MetaBundle>&); 00073 00074 ibrcommon::Mutex _blacklist_mutex; 00075 dtn::data::BundleList _blacklist; 00076 ibrcommon::Queue<Task*> _tasks; 00077 00078 static ibrcommon::File getPath(const dtn::core::Node&); 00079 static std::list<dtn::data::MetaBundle> scan(const ibrcommon::File &path); 00080 static void load(const dtn::core::Node&); 00081 00082 }; 00083 00084 } /* namespace net */ 00085 } /* namespace dtn */ 00086 #endif /* FILECONVERGENCELAYER_H_ */