22 #ifndef REGISTRATION_H_
23 #define REGISTRATION_H_
29 #include <ibrcommon/thread/Queue.h>
30 #include <ibrcommon/thread/Mutex.h>
31 #include <ibrcommon/thread/Timer.h>
41 static const std::string TAG;
161 dtn::data::MetaBundle
receiveMetaBundle() throw (dtn::storage::NoBundleFoundException);
167 void delivered(const dtn::data::MetaBundle &m) const;
214 bool isPersistent() const;
249 class RegistrationQueue : public dtn::storage::BundleResult {
259 virtual ~RegistrationQueue();
278 void expire(const dtn::data::
Timestamp ×tamp) throw ();
283 void abort() throw ();
288 void reset() throw ();
293 bool has(const dtn::data::BundleID &bundle) const throw ();
297 ibrcommon::Mutex _lock;
300 dtn::data::BundleSet _recv_bundles;
303 ibrcommon::Queue<dtn::data::MetaBundle> _queue;
306 const std::
string _handle;
307 dtn::data::EID _default_eid;
309 ibrcommon::Mutex _endpoints_lock;
310 std::set<dtn::data::EID> _endpoints;
311 RegistrationQueue _queue;
313 ibrcommon::Mutex _receive_lock;
314 ibrcommon::Conditional _wait_for_cond;
315 bool _no_more_bundles;
319 static const std::
string gen_handle();
320 static const std::
string& alloc_handle();
321 static const std::
string& alloc_handle(const std::
string &handle);
322 static
void free_handle(const std::
string &handle);
324 static ibrcommon::Mutex _handle_lock;
325 static std::set<std::
string> _handles;
329 ibrcommon::Mutex _attach_lock;
330 ibrcommon::Timer::time_t _expiry;
332 bool _filter_fragments;
void delivered(const dtn::data::MetaBundle &m) const
void setPersistent(ibrcommon::Timer::time_t lifetime)
RegistrationException(string what="")
void subscribe(const dtn::data::EID &endpoint)
const std::string & getHandle() const
NotFoundException(string what="")
bool hasSubscribed(const dtn::data::EID &endpoint)
dtn::data::MetaBundle receiveMetaBundle()
const dtn::data::EID & getDefaultEID() const
void notify(const NOTIFY_CALL)
void unsubscribe(const dtn::data::EID &endpoint)
void setFilterFragments(bool val)
ibrcommon::Timer::time_t getExpireTime() const
dtn::data::Bundle receive()
bool operator<(const Registration &) const
const std::set< dtn::data::EID > getSubscriptions()
void wait_for_bundle(size_t timeout=0)
NotPersistentException(string what="")
bool operator==(const std::string &) const
AlreadyAttachedException(string what="")
static void processIncomingBundle(const dtn::data::EID &source, dtn::data::Bundle &bundle)
dtn::data::SDNV< Size > Timestamp