IBR-DTNSuite  0.8
daemon/src/net/FileConvergenceLayer.h
Go to the documentation of this file.
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_ */