00001 /* 00002 * NeighborDatabase.h 00003 * 00004 * Created on: 23.07.2010 00005 * Author: morgenro 00006 */ 00007 00008 #ifndef NEIGHBORDATABASE_H_ 00009 #define NEIGHBORDATABASE_H_ 00010 00011 #include <ibrdtn/data/EID.h> 00012 #include <ibrdtn/data/BundleID.h> 00013 #include <ibrcommon/data/BloomFilter.h> 00014 #include <ibrcommon/Exceptions.h> 00015 #include <map> 00016 00017 namespace dtn 00018 { 00019 namespace routing 00020 { 00026 class NeighborDatabase 00027 { 00028 public: 00029 class BloomfilterNotAvailableException : public ibrcommon::Exception 00030 { 00031 public: 00032 BloomfilterNotAvailableException(const dtn::data::EID &host) 00033 : ibrcommon::Exception("Bloom filter is not available for this node."), eid(host) { }; 00034 00035 virtual ~BloomfilterNotAvailableException() throw () { }; 00036 00037 const dtn::data::EID eid; 00038 }; 00039 00040 class NeighborEntry 00041 { 00042 public: 00043 NeighborEntry(); 00044 NeighborEntry(const dtn::data::EID &eid); 00045 ~NeighborEntry(); 00046 00047 void updateLastSeen(); 00048 void updateBundles(const ibrcommon::BloomFilter &bf); 00049 00050 dtn::data::EID _eid; 00051 ibrcommon::BloomFilter _filter; 00052 size_t _filter_age; 00053 size_t _lastseen; 00054 bool _available; 00055 }; 00056 00057 NeighborDatabase(); 00058 virtual ~NeighborDatabase(); 00059 00060 void updateLastSeen(const dtn::data::EID &eid); 00061 void updateBundles(const dtn::data::EID &eid, const ibrcommon::BloomFilter &bf); 00062 00070 bool knowBundle(const dtn::data::EID &eid, const dtn::data::BundleID &bundle) throw (BloomfilterNotAvailableException); 00071 00072 void setAvailable(const dtn::data::EID &eid); 00073 void setUnavailable(const dtn::data::EID &eid); 00074 00075 std::set<dtn::data::EID> getAvailable() const; 00076 00077 NeighborDatabase::NeighborEntry& get(const dtn::data::EID &eid); 00078 00079 private: 00080 std::map<dtn::data::EID, NeighborDatabase::NeighborEntry> _entries; 00081 }; 00082 } 00083 } 00084 00085 #endif /* NEIGHBORDATABASE_H_ */
1.6.3