summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-10-04 16:06:05 +0000
committerGordon Sim <gsim@apache.org>2007-10-04 16:06:05 +0000
commit03f1df9ff7894a6d910120c82bba49e6193178ee (patch)
treee27792701ea80e1aa83d1c5730da71502374d25d /cpp/src/qpid/broker
parentc848c1a4e6be50176f10170c6422c5e4d5385770 (diff)
downloadqpid-python-03f1df9ff7894a6d910120c82bba49e6193178ee.tar.gz
Additional tests and fixes
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@581957 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker')
-rw-r--r--cpp/src/qpid/broker/MessageHandlerImpl.cpp3
-rw-r--r--cpp/src/qpid/broker/SemanticHandler.cpp14
-rw-r--r--cpp/src/qpid/broker/SemanticHandler.h5
3 files changed, 13 insertions, 9 deletions
diff --git a/cpp/src/qpid/broker/MessageHandlerImpl.cpp b/cpp/src/qpid/broker/MessageHandlerImpl.cpp
index b3880d86e5..e6c7b28a49 100644
--- a/cpp/src/qpid/broker/MessageHandlerImpl.cpp
+++ b/cpp/src/qpid/broker/MessageHandlerImpl.cpp
@@ -198,7 +198,8 @@ void MessageHandlerImpl::acquire(const SequenceNumberSet& transfers, u_int8_t /*
//TODO: implement mode
SequenceNumberSet results;
- transfers.processRanges(boost::bind(&SemanticState::acquire, &state, _1, _2, results));
+ RangedOperation op = boost::bind(&SemanticState::acquire, &state, _1, _2, results);
+ transfers.processRanges(op);
results = results.condense();
getProxy().getMessage().acquired(results);
}
diff --git a/cpp/src/qpid/broker/SemanticHandler.cpp b/cpp/src/qpid/broker/SemanticHandler.cpp
index 9cacb4ccf7..dc5407be99 100644
--- a/cpp/src/qpid/broker/SemanticHandler.cpp
+++ b/cpp/src/qpid/broker/SemanticHandler.cpp
@@ -31,12 +31,16 @@
#include "qpid/framing/InvocationVisitor.h"
#include <boost/format.hpp>
+#include <boost/bind.hpp>
using namespace qpid::broker;
using namespace qpid::framing;
using namespace qpid::sys;
-SemanticHandler::SemanticHandler(SessionState& s) : state(*this,s), session(s) {}
+SemanticHandler::SemanticHandler(SessionState& s) :
+ state(*this,s), session(s),
+ ackOp(boost::bind(&SemanticState::ackRange, &state, _1, _2))
+ {}
void SemanticHandler::handle(framing::AMQFrame& frame)
{
@@ -81,13 +85,7 @@ void SemanticHandler::complete(uint32_t cumulative, const SequenceNumberSet& ran
//ack messages:
state.ackCumulative(mark.getValue());
}
- if (range.size() % 2) { //must be even number
- throw ConnectionException(530, "Received odd number of elements in ranged mark");
- } else {
- for (SequenceNumberSet::const_iterator i = range.begin(); i != range.end(); i++) {
- state.ackRange(*i, *(++i));
- }
- }
+ range.processRanges(ackOp);
}
void SemanticHandler::sendCompletion()
diff --git a/cpp/src/qpid/broker/SemanticHandler.h b/cpp/src/qpid/broker/SemanticHandler.h
index dc7f21ac34..9380708ec5 100644
--- a/cpp/src/qpid/broker/SemanticHandler.h
+++ b/cpp/src/qpid/broker/SemanticHandler.h
@@ -33,6 +33,8 @@
#include "qpid/framing/FrameHandler.h"
#include "qpid/framing/SequenceNumber.h"
+#include <boost/function.hpp>
+
namespace qpid {
namespace framing {
@@ -51,6 +53,8 @@ class SemanticHandler : public DeliveryAdapter,
public framing::AMQP_ServerOperations::ExecutionHandler
{
+ typedef boost::function<void(DeliveryId, DeliveryId)> RangedOperation;
+
SemanticState state;
SessionState& session;
// FIXME aconway 2007-09-20: Why are these on the handler rather than the
@@ -59,6 +63,7 @@ class SemanticHandler : public DeliveryAdapter,
framing::Window outgoing;
sys::Mutex outLock;
MessageBuilder msgBuilder;
+ RangedOperation ackOp;
enum TrackId {EXECUTION_CONTROL_TRACK, MODEL_COMMAND_TRACK, MODEL_CONTENT_TRACK};
TrackId getTrack(const framing::AMQFrame& frame);