diff options
author | Gordon Sim <gsim@apache.org> | 2010-03-29 18:15:42 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2010-03-29 18:15:42 +0000 |
commit | adfea171e68298b9b0ced9fe54c2232b963e077e (patch) | |
tree | cc51faebbf79d6b1ac84360e2ad6526939912563 /cpp/src/qpid | |
parent | c2b13417889ca05c880736e49bba91fb1ba4bd5d (diff) | |
download | qpid-python-adfea171e68298b9b0ced9fe54c2232b963e077e.tar.gz |
QPID-2406: a more explicit solution for durations in the messaging api
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@928855 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid')
-rw-r--r-- | cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp | 3 | ||||
-rw-r--r-- | cpp/src/qpid/client/amqp0_10/OutgoingMessage.cpp | 2 | ||||
-rw-r--r-- | cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp | 3 | ||||
-rw-r--r-- | cpp/src/qpid/client/amqp0_10/SessionImpl.cpp | 5 | ||||
-rw-r--r-- | cpp/src/qpid/messaging/Duration.cpp | 45 | ||||
-rw-r--r-- | cpp/src/qpid/messaging/Message.cpp | 4 |
6 files changed, 55 insertions, 7 deletions
diff --git a/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp b/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp index 8e501511e4..3f5cccfedb 100644 --- a/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp +++ b/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp @@ -26,6 +26,7 @@ #include "qpid/client/SessionBase_0_10Access.h" #include "qpid/log/Statement.h" #include "qpid/messaging/Address.h" +#include "qpid/messaging/Duration.h" #include "qpid/messaging/Message.h" #include "qpid/messaging/MessageImpl.h" #include "qpid/types/Variant.h" @@ -276,7 +277,7 @@ void populateHeaders(qpid::messaging::Message& message, const MessageProperties* messageProperties) { if (deliveryProperties) { - message.setTtl(deliveryProperties->getTtl()); + message.setTtl(qpid::messaging::Duration(deliveryProperties->getTtl())); message.setDurable(deliveryProperties->getDeliveryMode() == DELIVERY_MODE_PERSISTENT); MessageImplAccess::get(message).redelivered = deliveryProperties->getRedelivered(); } diff --git a/cpp/src/qpid/client/amqp0_10/OutgoingMessage.cpp b/cpp/src/qpid/client/amqp0_10/OutgoingMessage.cpp index e75368cda7..d0d945b934 100644 --- a/cpp/src/qpid/client/amqp0_10/OutgoingMessage.cpp +++ b/cpp/src/qpid/client/amqp0_10/OutgoingMessage.cpp @@ -47,7 +47,7 @@ void OutgoingMessage::convert(const qpid::messaging::Message& from) message.getMessageProperties().setReplyTo(AddressResolution::convert(address)); } translate(from.getHeaders(), message.getMessageProperties().getApplicationHeaders()); - message.getDeliveryProperties().setTtl(from.getTtl()); + message.getDeliveryProperties().setTtl(from.getTtl().getMilliseconds()); if (from.getDurable()) { message.getDeliveryProperties().setDeliveryMode(DELIVERY_MODE_PERSISTENT); } diff --git a/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp b/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp index 2f52efbceb..c3367f8ab4 100644 --- a/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp +++ b/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp @@ -30,6 +30,7 @@ namespace client { namespace amqp0_10 { using qpid::messaging::Receiver; +using qpid::messaging::Duration; void ReceiverImpl::received(qpid::messaging::Message&) { @@ -163,7 +164,7 @@ bool ReceiverImpl::fetchImpl(qpid::messaging::Message& message, qpid::messaging: } else { sync(session).messageFlush(destination); startFlow();//reallocate credit - return getImpl(message, 0); + return getImpl(message, Duration::IMMEDIATE); } } diff --git a/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp b/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp index 245ec878be..209ab93909 100644 --- a/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp +++ b/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp @@ -267,8 +267,9 @@ bool SessionImpl::accept(ReceiverImpl* receiver, qpid::sys::Duration adjust(qpid::messaging::Duration timeout) { - if (timeout < (uint64_t) (qpid::sys::TIME_INFINITE/qpid::sys::TIME_MSEC)) { - return timeout * qpid::sys::TIME_MSEC; + uint64_t ms = timeout.getMilliseconds(); + if (ms < (uint64_t) (qpid::sys::TIME_INFINITE/qpid::sys::TIME_MSEC)) { + return ms * qpid::sys::TIME_MSEC; } else { return qpid::sys::TIME_INFINITE; } diff --git a/cpp/src/qpid/messaging/Duration.cpp b/cpp/src/qpid/messaging/Duration.cpp new file mode 100644 index 0000000000..c415b70fbe --- /dev/null +++ b/cpp/src/qpid/messaging/Duration.cpp @@ -0,0 +1,45 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +#include "qpid/messaging/Duration.h" +#include <limits> + +namespace qpid { +namespace messaging { + +Duration::Duration(uint64_t ms) : milliseconds(ms) {} +uint64_t Duration::getMilliseconds() const { return milliseconds; } + +Duration operator*(const Duration& duration, uint64_t multiplier) +{ + return Duration(duration.getMilliseconds() * multiplier); +} + +Duration operator*(uint64_t multiplier, const Duration& duration) +{ + return Duration(duration.getMilliseconds() * multiplier); +} + +const Duration Duration::INFINITE(std::numeric_limits<uint64_t>::max()); +const Duration Duration::IMMEDIATE(0); +const Duration Duration::SECOND(1000); +const Duration Duration::MINUTE(SECOND * 60); + +}} // namespace qpid::messaging diff --git a/cpp/src/qpid/messaging/Message.cpp b/cpp/src/qpid/messaging/Message.cpp index d953b3ff75..822659f6ef 100644 --- a/cpp/src/qpid/messaging/Message.cpp +++ b/cpp/src/qpid/messaging/Message.cpp @@ -52,8 +52,8 @@ const std::string& Message::getUserId() const { return impl->userId; } void Message::setCorrelationId(const std::string& id) { impl->correlationId = id; } const std::string& Message::getCorrelationId() const { return impl->correlationId; } -void Message::setTtl(Duration ttl) { impl->ttl = ttl; } -Duration Message::getTtl() const { return impl->ttl; } +void Message::setTtl(Duration ttl) { impl->ttl = ttl.getMilliseconds(); } +Duration Message::getTtl() const { return Duration(impl->ttl); } void Message::setDurable(bool durable) { impl->durable = durable; } bool Message::getDurable() const { return impl->durable; } |