22 #ifndef NEIGHBORDATABASE_H_
23 #define NEIGHBORDATABASE_H_
30 #include <ibrcommon/data/BloomFilter.h>
31 #include <ibrcommon/Exceptions.h>
32 #include <ibrcommon/thread/ThreadsafeState.h>
52 : ibrcommon::Exception(
"Bloom filter is not available for this node."),
eid(host) { };
173 data_set::const_iterator iter = _datasets.find(item);
175 if (iter == _datasets.end())
throw DatasetNotAvailableException();
178 return dynamic_cast<const T&
>(**iter);
179 }
catch (
const std::bad_cast&) {
180 throw DatasetNotAvailableException();
197 data_set::iterator it = _datasets.find(item);
199 if (it == _datasets.end())
return;
206 std::set<dtn::data::BundleID> _transit_bundles;
209 ibrcommon::BloomFilter _filter;
214 typedef std::set<NeighborDataset> data_set;
217 enum FILTER_REQUEST_STATE
220 FILTER_AVAILABLE = 1,
225 ibrcommon::ThreadsafeState<FILTER_REQUEST_STATE> _filter_state;
240 NeighborDatabase::NeighborEntry&
get(
const dtn::data::EID &eid,
bool noCached =
false)
throw (EntryNotFoundException);
263 typedef std::map<dtn::data::EID, NeighborDatabase::NeighborEntry* > neighbor_map;
264 neighbor_map _entries;
bool isFilterValid() const
bool isExpired(const dtn::data::Timestamp ×tamp) const
virtual ~DatasetNotAvailableException()
void add(const dtn::data::MetaBundle &)
const dtn::data::Timestamp & getLastUpdate() const
BloomfilterNotAvailableException(const dtn::data::EID &host)
bool isTransferThresholdReached() const
void expire(const dtn::data::Timestamp ×tamp)
void update(const ibrcommon::BloomFilter &bf, const dtn::data::Number &lifetime=0)
virtual ~BloomfilterNotAvailableException()
const T & getDataset() const
bool has(const dtn::data::BundleID &, const bool require_bloomfilter=false) const
dtn::data::Size getFreeTransferSlots() const
void acquireTransfer(const dtn::data::BundleID &id)
AlreadyInTransitException()
virtual ~NoRouteKnownException()
void putDataset(NeighborDataset &dset)
DatasetNotAvailableException()
virtual ~AlreadyInTransitException()
virtual ~NoMoreTransfersAvailable()
virtual ~EntryNotFoundException()
void expire(const dtn::data::Timestamp ×tamp)
NeighborDatabase::NeighborEntry & create(const dtn::data::EID &eid)
virtual ~NeighborDatabase()
NoMoreTransfersAvailable()
void releaseTransfer(const dtn::data::BundleID &id)