From 816b56837d862980e9086fe8ed02b84ca764eb1f Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Fri, 28 Sep 2007 09:27:03 +0000 Subject: Honour sync bit when processing L4 method git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@580266 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/SemanticHandler.cpp | 10 ++++++++-- cpp/src/qpid/framing/AMQMethodBody.h | 2 ++ cpp/src/qpid/framing/ModelMethod.h | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) (limited to 'cpp/src') diff --git a/cpp/src/qpid/broker/SemanticHandler.cpp b/cpp/src/qpid/broker/SemanticHandler.cpp index 0bb813ebfd..048c73c4b0 100644 --- a/cpp/src/qpid/broker/SemanticHandler.cpp +++ b/cpp/src/qpid/broker/SemanticHandler.cpp @@ -132,7 +132,10 @@ void SemanticHandler::handleCommand(framing::AMQMethodBody* method) } else if (v.hasResult()) { session.getProxy().getExecution().result(id.getValue(), v.getResult()); } - //TODO: if (method->isSync()) { incoming.synch(id); sendCompletion(); } + if (method->isSync()) { + incoming.sync(id); + sendCompletion(); + } //TODO: if window gets too large send unsolicited completion } @@ -156,7 +159,10 @@ void SemanticHandler::handleContent(AMQFrame& frame) state.handle(msg); msgBuilder.end(); incoming.track(msg); - //TODO: if (msg.getMethod().isSync()) { incoming.synch(msg.getCommandId()); sendCompletion(); } + if (msg->getFrames().getMethod()->isSync()) { + incoming.sync(msg->getCommandId()); + sendCompletion(); + } } } diff --git a/cpp/src/qpid/framing/AMQMethodBody.h b/cpp/src/qpid/framing/AMQMethodBody.h index f0043d9d3b..e195142221 100644 --- a/cpp/src/qpid/framing/AMQMethodBody.h +++ b/cpp/src/qpid/framing/AMQMethodBody.h @@ -63,6 +63,8 @@ class AMQMethodBody : public AMQBody { virtual uint32_t size() const = 0; virtual uint8_t type() const { return METHOD_BODY; } + virtual bool isSync() const { return false; /*only ModelMethods can have the sync flag set*/ } + AMQMethodBody* getMethod() { return this; } const AMQMethodBody* getMethod() const { return this; } void accept(AMQBodyConstVisitor& v) const { v.visit(*this); } diff --git a/cpp/src/qpid/framing/ModelMethod.h b/cpp/src/qpid/framing/ModelMethod.h index 6861295194..8e2fafb019 100644 --- a/cpp/src/qpid/framing/ModelMethod.h +++ b/cpp/src/qpid/framing/ModelMethod.h @@ -36,7 +36,7 @@ public: virtual void encode(Buffer& buffer) const { header.encode(buffer); } virtual void decode(Buffer& buffer, uint32_t size=0) { header.decode(buffer, size); } virtual uint32_t size() const { return header.size(); } - + virtual bool isSync() const { return header.getSync(); } ExecutionHeader& getHeader() { return header; } const ExecutionHeader& getHeader() const { return header; } }; -- cgit v1.2.1