00001 /* 00002 * NeighborRoutingExtension.h 00003 * 00004 * Created on: 16.02.2010 00005 * Author: morgenro 00006 */ 00007 00008 #ifndef NEIGHBORROUTINGEXTENSION_H_ 00009 #define NEIGHBORROUTINGEXTENSION_H_ 00010 00011 #include "routing/BaseRouter.h" 00012 #include <ibrdtn/data/MetaBundle.h> 00013 #include "ibrdtn/data/EID.h" 00014 #include "core/Node.h" 00015 #include <ibrcommon/thread/Queue.h> 00016 #include <list> 00017 #include <map> 00018 #include <queue> 00019 00020 namespace dtn 00021 { 00022 namespace routing 00023 { 00024 class NeighborRoutingExtension : public BaseRouter::ThreadedExtension 00025 { 00026 public: 00027 NeighborRoutingExtension(); 00028 ~NeighborRoutingExtension(); 00029 00030 void notify(const dtn::core::Event *evt); 00031 00032 virtual void stopExtension(); 00033 00034 protected: 00035 void run(); 00036 bool __cancellation(); 00037 00038 private: 00045 bool isNeighbor(const dtn::data::EID &eid) const; 00046 00053 void remove(const dtn::data::BundleID &id); 00054 00055 void route(const dtn::data::MetaBundle &meta); 00056 00057 std::list<dtn::core::Node> _neighbors; 00058 00059 ibrcommon::Mutex _stored_bundles_lock; 00060 std::map<dtn::data::EID, std::queue<dtn::data::BundleID> > _stored_bundles; 00061 ibrcommon::Queue<dtn::data::EID> _available; 00062 }; 00063 } 00064 } 00065 00066 #endif /* NEIGHBORROUTINGEXTENSION_H_ */
1.7.1