diff options
| author | Kim van der Riet <kpvdr@apache.org> | 2009-09-25 18:04:59 +0000 |
|---|---|---|
| committer | Kim van der Riet <kpvdr@apache.org> | 2009-09-25 18:04:59 +0000 |
| commit | 6214f62e118a83b4cc593298ceb0658e28662845 (patch) | |
| tree | f4d46eef519ec14cc1de6c3f3600c2ca36de6acd /cpp/src/qpid/broker/Exchange.cpp | |
| parent | 85be7c43c229fa30e76aaf3acfed3c67d6f1eff6 (diff) | |
| download | qpid-python-6214f62e118a83b4cc593298ceb0658e28662845.tar.gz | |
Exchange route() refactorization that eliminates common code in each of the Exchange subclass route() methods.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@818935 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/Exchange.cpp')
| -rw-r--r-- | cpp/src/qpid/broker/Exchange.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/cpp/src/qpid/broker/Exchange.cpp b/cpp/src/qpid/broker/Exchange.cpp index 90d81b81c6..9852f84f5b 100644 --- a/cpp/src/qpid/broker/Exchange.cpp +++ b/cpp/src/qpid/broker/Exchange.cpp @@ -76,6 +76,36 @@ Exchange::PreRoute::~PreRoute(){ } } +void Exchange::doRoute(Deliverable& msg, ConstBindingList b) +{ + int count = 0; + + if (b.get()) { + for(std::vector<Binding::shared_ptr>::const_iterator i = b->begin(); i != b->end(); i++, count++) { + msg.deliverTo((*i)->queue); + if ((*i)->mgmtBinding != 0) + (*i)->mgmtBinding->inc_msgMatched(); + } + } + + if (mgmtExchange != 0) + { + mgmtExchange->inc_msgReceives (); + mgmtExchange->inc_byteReceives (msg.contentSize ()); + if (count == 0) + { + //QPID_LOG(warning, "Exchange " << getName() << " could not route message; no matching binding found"); + mgmtExchange->inc_msgDrops (); + mgmtExchange->inc_byteDrops (msg.contentSize ()); + } + else + { + mgmtExchange->inc_msgRoutes (count); + mgmtExchange->inc_byteRoutes (count * msg.contentSize ()); + } + } +} + void Exchange::routeIVE(){ if (ive && lastMsg.get()){ DeliverableMessage dmsg(lastMsg); |
