diff options
| author | Gordon Sim <gsim@apache.org> | 2008-10-10 16:54:54 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2008-10-10 16:54:54 +0000 |
| commit | 634d62c308b4896047810cf4a7e87f8238190891 (patch) | |
| tree | 2554882a568d2b1c0a367dd5281abc6729c471f3 /cpp/src/qpid/broker/Message.cpp | |
| parent | 8f3273a7ae8923444cbf878ecb6cd5b175809b96 (diff) | |
| download | qpid-python-634d62c308b4896047810cf4a7e87f8238190891.tar.gz | |
Handle ttl in messages transfers received by the broker 7 added test for it
Moved Timer instance from DtxManager to Broker so it can be shared
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@703521 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/Message.cpp')
| -rw-r--r-- | cpp/src/qpid/broker/Message.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/cpp/src/qpid/broker/Message.cpp b/cpp/src/qpid/broker/Message.cpp index 7d02fb3d3c..e5a167bd4e 100644 --- a/cpp/src/qpid/broker/Message.cpp +++ b/cpp/src/qpid/broker/Message.cpp @@ -30,15 +30,22 @@ #include "qpid/framing/TypeFilter.h" #include "qpid/log/Statement.h" +#include <time.h> + using boost::intrusive_ptr; using namespace qpid::broker; using namespace qpid::framing; +using qpid::sys::AbsTime; +using qpid::sys::Duration; +using qpid::sys::TIME_MSEC; +using qpid::sys::FAR_FUTURE; using std::string; TransferAdapter Message::TRANSFER; Message::Message(const SequenceNumber& id) : frames(id), persistenceId(0), redelivered(false), loaded(false), -staged(false), forcePersistentPolicy(false), publisher(0), adapter(0) {} + staged(false), forcePersistentPolicy(false), publisher(0), adapter(0), + expiration(FAR_FUTURE) {} Message::~Message() { @@ -297,3 +304,20 @@ void Message::addTraceId(const std::string& id) } } } + +void Message::setTimestamp() +{ + time_t now = ::time(0); + DeliveryProperties* props = getProperties<DeliveryProperties>(); + props->setTimestamp(now); + if (props->getTtl()) { + //set expiration (nb: ttl is in millisecs, time_t is in secs) + props->setExpiration(now + (props->getTtl()/1000)); + expiration = AbsTime(AbsTime::now(), Duration(props->getTtl() * TIME_MSEC)); + } +} + +bool Message::hasExpired() const +{ + return expiration < AbsTime::now(); +} |
