• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

daemon/src/routing/NeighborDatabase.h

Go to the documentation of this file.
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 NoMoreTransfersAvailable : public ibrcommon::Exception
00041                         {
00042                         public:
00043                                 NoMoreTransfersAvailable() : ibrcommon::Exception("No more transfers allowed.") { };
00044                                 virtual ~NoMoreTransfersAvailable() throw () { };
00045                         };
00046 
00047                         class NeighborEntry
00048                         {
00049                         public:
00050                                 NeighborEntry();
00051                                 NeighborEntry(const dtn::data::EID &eid);
00052                                 ~NeighborEntry();
00053 
00054                                 void updateLastSeen();
00055                                 void updateBundles(const ibrcommon::BloomFilter &bf);
00056 
00057                                 dtn::data::EID _eid;
00058                                 ibrcommon::BloomFilter _filter;
00059                                 size_t _filter_age;
00060                                 size_t _lastseen;
00061                                 size_t _lastupdate;
00062                                 bool _available;
00063 
00064                                 void acquireTransfer() throw (NoMoreTransfersAvailable);
00065                                 void releaseTransfer();
00066 
00067                         private:
00068                                 ibrcommon::Mutex _transfer_lock;
00069                                 size_t _transfer_semaphore;
00070                                 size_t _transfer_max;
00071                         };
00072 
00073                         NeighborDatabase();
00074                         virtual ~NeighborDatabase();
00075 
00076                         void updateBundles(const dtn::data::EID &eid, const ibrcommon::BloomFilter &bf);
00077 
00085                         bool knowBundle(const dtn::data::EID &eid, const dtn::data::BundleID &bundle) throw (BloomfilterNotAvailableException);
00086 
00087                         void setAvailable(const dtn::data::EID &eid);
00088                         void setUnavailable(const dtn::data::EID &eid);
00089 
00090                         const std::set<dtn::data::EID> getAvailable() const;
00091 
00092                         NeighborDatabase::NeighborEntry& get(const dtn::data::EID &eid);
00093 
00094                 private:
00095                         std::map<dtn::data::EID, NeighborDatabase::NeighborEntry> _entries;
00096                 };
00097         }
00098 }
00099 
00100 #endif /* NEIGHBORDATABASE_H_ */

Generated on Thu Nov 11 2010 09:49:47 for IBR-DTNSuite by  doxygen 1.7.1