00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _DeliveryRecord_
00022 #define _DeliveryRecord_
00023
00024 #include <algorithm>
00025 #include <list>
00026 #include "AccumulatedAck.h"
00027 #include "BrokerMessage.h"
00028 #include "Prefetch.h"
00029 #include "BrokerQueue.h"
00030
00031 namespace qpid {
00032 namespace broker {
00033 class Channel;
00034
00038 class DeliveryRecord{
00039 mutable Message::shared_ptr msg;
00040 mutable Queue::shared_ptr queue;
00041 std::string consumerTag;
00042 uint64_t deliveryTag;
00043 bool pull;
00044
00045 public:
00046 DeliveryRecord(Message::shared_ptr msg, Queue::shared_ptr queue, const std::string consumerTag, const uint64_t deliveryTag);
00047 DeliveryRecord(Message::shared_ptr msg, Queue::shared_ptr queue, const uint64_t deliveryTag);
00048
00049 void discard(TransactionContext* ctxt = 0) const;
00050 bool matches(uint64_t tag) const;
00051 bool coveredBy(const AccumulatedAck* const range) const;
00052 void requeue() const;
00053 void redeliver(Channel* const) const;
00054 void addTo(Prefetch* const prefetch) const;
00055 void subtractFrom(Prefetch* const prefetch) const;
00056 };
00057
00058 typedef std::list<DeliveryRecord>::iterator ack_iterator;
00059 }
00060 }
00061
00062
00063 #endif