27 #include <ibrcommon/Logger.h>
34 double Clock::_rating = 1.0;
36 struct timeval Clock::_offset = Clock::__initialize_clock();
37 struct timeval Clock::__clock_reference = Clock::__get_clock_reference();
39 bool Clock::_modify_clock = false;
49 struct timespec Clock::_uptime_reference = Clock::__get_monotonic_ts();
69 IBRCOMMON_LOGGER_DEBUG_TAG(
"Clock", 25) <<
"new clock rating is " << std::setprecision(16) << val << IBRCOMMON_LOGGER_ENDL;
102 return getTime() + seconds_left;
114 return __getExpireTime(timestamp, lifetime);
119 return __getExpireTime(
getTime(), lifetime);
127 return timestamp + lifetime;
159 if (timestamp == 0)
return false;
178 ibrcommon::MonotonicClock::gettime(ts);
184 return Clock::_offset;
194 timeradd(&Clock::_offset, &tv, &Clock::_offset);
195 IBRCOMMON_LOGGER_TAG(
"Clock", info) <<
"new local offset: " <<
Clock::toDouble(_offset) <<
"s" << IBRCOMMON_LOGGER_ENDL;
204 timersub(&now, &tv, &now);
224 __monotonic_gettimeofday(&now);
227 timersub(&now, tv, &Clock::_offset);
235 timersub(&now, tv, &Clock::_offset);
243 IBRCOMMON_LOGGER_TAG(
"Clock", info) <<
"new local offset: " <<
Clock::toDouble(_offset) <<
"s" << IBRCOMMON_LOGGER_ENDL;
251 __monotonic_gettimeofday(tv);
254 timersub(tv, &Clock::_offset, tv);
281 return static_cast<double>(val.tv_sec) + (static_cast<double>(val.tv_usec) / 1000000.0);
287 struct timespec result;
288 ibrcommon::MonotonicClock::gettime(now);
289 ibrcommon::MonotonicClock::diff(_uptime_reference, now, result);
294 struct timespec Clock::__get_monotonic_ts()
299 ibrcommon::MonotonicClock::gettime(ts);
303 struct timeval Clock::__get_clock_reference()
306 struct timeval now, tv;
308 ::gettimeofday(&now, &tz);
309 ibrcommon::MonotonicClock::gettime(tv);
311 timersub(&now, &tv, &now);
316 void Clock::__monotonic_gettimeofday(
struct timeval *tv)
321 ibrcommon::MonotonicClock::gettime(mtv);
324 timeradd(&__clock_reference, &mtv, tv);
327 struct timeval Clock::__initialize_clock()
static void setModifyClock(bool val)
static const dtn::data::Timestamp TIMEVAL_CONVERSION
static void settimeofday(struct timeval *tv)
dtn::data::Timestamp timestamp
dtn::data::Number getSeconds() const
static void gettimeofday(struct timeval *tv)
static dtn::data::Timestamp getExpireTime(const dtn::data::Bundle &b)
static bool shouldModifyClock()
static void setOffset(const struct timeval &tv)
static dtn::data::Timestamp getUptime()
static double toDouble(const timeval &val)
static dtn::data::Timestamp getTime()
static const struct timeval & getOffset()
static double getRating()
static void setRating(double val)
iterator find(block_t blocktype)
static dtn::data::Timestamp getMonotonicTimestamp()
static bool isExpired(const dtn::data::Timestamp ×tamp, const dtn::data::Number &lifetime)
dtn::data::SDNV< Size > Timestamp
static void getdtntimeofday(struct timeval *tv)