summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/BrokerQueue.cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-07-24 14:27:31 +0000
committerGordon Sim <gsim@apache.org>2007-07-24 14:27:31 +0000
commita6303894d7f9a24df4a691af3ce94647c033ebff (patch)
tree943b75df7528c9fbff6b3170c3c4b66758bf22ad /cpp/src/qpid/broker/BrokerQueue.cpp
parent9f120205e0d7a0b2666b9fd21a5296db07e32fd8 (diff)
downloadqpid-python-a6303894d7f9a24df4a691af3ce94647c033ebff.tar.gz
Initial support for latest approved 0-10 xml (with some transitional hacks included).
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@559059 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/BrokerQueue.cpp')
-rw-r--r--cpp/src/qpid/broker/BrokerQueue.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/cpp/src/qpid/broker/BrokerQueue.cpp b/cpp/src/qpid/broker/BrokerQueue.cpp
index cf6beff375..f8bffa01a3 100644
--- a/cpp/src/qpid/broker/BrokerQueue.cpp
+++ b/cpp/src/qpid/broker/BrokerQueue.cpp
@@ -56,8 +56,15 @@ Queue::Queue(const string& _name, bool _autodelete,
Queue::~Queue(){}
void Queue::deliver(Message::shared_ptr& msg){
- enqueue(0, msg);
- process(msg);
+ if (msg->isImmediate() && getConsumerCount() == 0) {
+ if (alternateExchange) {
+ DeliverableMessage deliverable(msg);
+ alternateExchange->route(deliverable, msg->getRoutingKey(), &(msg->getApplicationHeaders()));
+ }
+ } else {
+ enqueue(0, msg);
+ process(msg);
+ }
}
void Queue::recover(Message::shared_ptr& msg){
@@ -255,6 +262,7 @@ void Queue::destroy()
&(msg.getMessage().getApplicationHeaders()));
pop();
}
+ alternateExchange->decAlternateUsers();
}
if (store) {
@@ -318,3 +326,8 @@ void Queue::setAlternateExchange(boost::shared_ptr<Exchange> exchange)
{
alternateExchange = exchange;
}
+
+boost::shared_ptr<Exchange> Queue::getAlternateExchange()
+{
+ return alternateExchange;
+}