From 4deb3b4fd425aecd74c8c00983a199dd139df858 Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Wed, 13 Feb 2008 15:39:59 +0000 Subject: Broker::connect - connect to URL, return ConnectionInputHandler. M src/qpid/broker/Broker.cpp M src/qpid/broker/Broker.h M src/qpid/sys/Acceptor.h M src/qpid/sys/AsynchIOAcceptor.cpp AMQBody::match - test for matching frames. M src/qpid/framing/AMQBody.cpp M src/qpid/framing/AMQBody.h Url::throwIfEmpty() - test for empty URL. M src/qpid/Url.cpp M src/qpid/Url.h git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@627484 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/framing/AMQBody.cpp | 37 ++++++++++++++++++++++++++++++++++--- cpp/src/qpid/framing/AMQBody.h | 3 +++ 2 files changed, 37 insertions(+), 3 deletions(-) (limited to 'cpp/src/qpid/framing') diff --git a/cpp/src/qpid/framing/AMQBody.cpp b/cpp/src/qpid/framing/AMQBody.cpp index a64d224a86..b3eeae0615 100644 --- a/cpp/src/qpid/framing/AMQBody.cpp +++ b/cpp/src/qpid/framing/AMQBody.cpp @@ -19,15 +19,46 @@ * */ -#include "AMQBody.h" +#include "qpid/framing/AMQBody.h" +#include "qpid/framing/AMQMethodBody.h" +#include "qpid/framing/AMQHeaderBody.h" +#include "qpid/framing/AMQContentBody.h" +#include "qpid/framing/AMQHeartbeatBody.h" #include -std::ostream& qpid::framing::operator<<(std::ostream& out, const qpid::framing::AMQBody& body) +namespace qpid { +namespace framing { + +std::ostream& operator<<(std::ostream& out, const AMQBody& body) { body.print(out); return out; } -qpid::framing::AMQBody::~AMQBody() {} +AMQBody::~AMQBody() {} + +namespace { +struct MatchBodies : public AMQBodyConstVisitor { + const AMQBody& body; + bool match; + + MatchBodies(const AMQBody& b) : body(b), match(false) {} + virtual ~MatchBodies() {} + + virtual void visit(const AMQHeaderBody&) { match=dynamic_cast(&body); } + virtual void visit(const AMQContentBody&) { match=dynamic_cast(&body); } + virtual void visit(const AMQHeartbeatBody&) { match=dynamic_cast(&body); } + virtual void visit(const AMQMethodBody& x) { + const AMQMethodBody* y=dynamic_cast(&body); + match = (y && y->amqpMethodId() == x.amqpMethodId() && y->amqpClassId() == x.amqpClassId()); + } +}; +} +bool AMQBody::match(const AMQBody& a, const AMQBody& b) { + MatchBodies matcher(a); + b.accept(matcher); + return matcher.match; +} +}} // namespace diff --git a/cpp/src/qpid/framing/AMQBody.h b/cpp/src/qpid/framing/AMQBody.h index b05301bd05..f3bf65470c 100644 --- a/cpp/src/qpid/framing/AMQBody.h +++ b/cpp/src/qpid/framing/AMQBody.h @@ -59,6 +59,9 @@ class AMQBody virtual AMQMethodBody* getMethod() { return 0; } virtual const AMQMethodBody* getMethod() const { return 0; } + + /** Match if same type and same class/method ID for methods */ + static bool match(const AMQBody& , const AMQBody& ); }; std::ostream& operator<<(std::ostream& out, const AMQBody& body) ; -- cgit v1.2.1