30 #include <ibrcommon/thread/MutexLock.h>
64 RetransmissionData data(meta, peer);
70 ibrcommon::MutexLock l(_mutex);
73 const RetransmissionData &data = _queue.front();
75 if ( data.getTimestamp() <= time.getTimestamp() )
91 }
catch (
const ibrcommon::Exception&) {
94 }
catch (
const ibrcommon::Exception&) {
108 RetransmissionData data(aborted.getBundleID(), aborted.getPeer());
114 const RetransmissionData data(requeue.getBundle(), requeue.getPeer(), requeue.getProtocol());
116 ibrcommon::MutexLock l(_mutex);
117 std::set<RetransmissionData>::const_iterator iter = _set.find(data);
119 if (iter != _set.end())
122 RetransmissionData data2 = (*iter);
128 if (data2.getCount() <= 8)
150 ibrcommon::MutexLock l(_mutex);
155 const RetransmissionData &data = _queue.front();
170 bool RetransmissionExtension::RetransmissionData::operator!=(
const RetransmissionData &obj)
175 if (id1 != id2)
return true;
176 if (obj.destination != destination)
return true;
181 bool RetransmissionExtension::RetransmissionData::operator==(
const RetransmissionData &obj)
186 if (id1 != id2)
return false;
187 if (obj.destination != destination)
return false;
192 dtn::data::Size RetransmissionExtension::RetransmissionData::getCount()
const
202 RetransmissionExtension::RetransmissionData& RetransmissionExtension::RetransmissionData::operator++(
int)
206 float backoff = ::pow((
float)retry, (
int)_count -1);
212 RetransmissionExtension::RetransmissionData& RetransmissionExtension::RetransmissionData::operator++()
216 float backoff = ::pow((
float)retry, (
int)_count -1);
223 : dtn::data::
BundleID(id), destination(d), protocol(p), _timestamp(0), _count(0), retry(r)
228 RetransmissionExtension::RetransmissionData::~RetransmissionData()
static void add(EventReceiver< E > *receiver)
static void raise(const dtn::data::EID &peer, const dtn::data::BundleID &id, const AbortReason reason=REASON_UNDEFINED)
RetransmissionExtension()
static void remove(const EventReceiver< E > *receiver)
dtn::net::ConnectionManager & getConnectionManager()
virtual dtn::data::MetaBundle info(const dtn::data::BundleID &id)=0
void queue(dtn::net::BundleTransfer &job)
virtual void eventTransferCompleted(const dtn::data::EID &peer, const dtn::data::MetaBundle &meta)
static dtn::data::Timestamp getTime()
virtual ~RetransmissionExtension()
void raiseEvent(const dtn::net::TransferAbortedEvent &evt)
void abort(const TransferAbortedEvent::AbortReason reason)
dtn::storage::BundleStorage & getStorage()
static BundleCore & getInstance()