summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/Message.cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2008-10-10 16:54:54 +0000
committerGordon Sim <gsim@apache.org>2008-10-10 16:54:54 +0000
commit634d62c308b4896047810cf4a7e87f8238190891 (patch)
tree2554882a568d2b1c0a367dd5281abc6729c471f3 /cpp/src/qpid/broker/Message.cpp
parent8f3273a7ae8923444cbf878ecb6cd5b175809b96 (diff)
downloadqpid-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.cpp26
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();
+}