You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2014/12/17 15:29:31 UTC
svn commit: r1646258 - in /qpid/trunk/qpid/cpp/src/qpid: broker/Protocol.cpp
broker/Protocol.h broker/amqp/Domain.cpp broker/amqp/ProtocolPlugin.cpp
sys/AsynchIOHandler.cpp sys/ConnectionCodec.h
Author: gsim
Date: Wed Dec 17 14:29:31 2014
New Revision: 1646258
URL: http://svn.apache.org/r1646258
Log:
QPID-6167: ensure broker responds with a header for an enabled protocol
Modified:
qpid/trunk/qpid/cpp/src/qpid/broker/Protocol.cpp
qpid/trunk/qpid/cpp/src/qpid/broker/Protocol.h
qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Domain.cpp
qpid/trunk/qpid/cpp/src/qpid/broker/amqp/ProtocolPlugin.cpp
qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIOHandler.cpp
qpid/trunk/qpid/cpp/src/qpid/sys/ConnectionCodec.h
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Protocol.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/Protocol.cpp?rev=1646258&r1=1646257&r2=1646258&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/Protocol.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/Protocol.cpp Wed Dec 17 14:29:31 2014
@@ -35,8 +35,10 @@ ProtocolRegistry::ProtocolRegistry(const
qpid::sys::ConnectionCodec* ProtocolRegistry::create(const qpid::framing::ProtocolVersion& v, qpid::sys::OutputControl& o, const std::string& id, const qpid::sys::SecuritySettings& s)
{
- if (v == qpid::framing::ProtocolVersion(0, 10) && isEnabled(AMQP_0_10)) {
- return create_0_10(o, id, s, false);
+ if (v == qpid::framing::ProtocolVersion(0, 10)) {
+ if (isEnabled(AMQP_0_10)) {
+ return create_0_10(o, id, s, false);
+ }
}
qpid::sys::ConnectionCodec* codec = 0;
for (Protocols::const_iterator i = protocols.begin(); !codec && i != protocols.end(); ++i) {
@@ -51,7 +53,22 @@ qpid::sys::ConnectionCodec* ProtocolRegi
return create_0_10(o, id, s, true);
}
-bool ProtocolRegistry::isEnabled(const std::string& name)
+qpid::framing::ProtocolVersion ProtocolRegistry::supportedVersion() const
+{
+ if (isEnabled(AMQP_0_10)) {
+ return qpid::framing::ProtocolVersion(0,10);
+ } else {
+ for (Protocols::const_iterator i = protocols.begin(); i != protocols.end(); ++i) {
+ if (isEnabled(i->first)) {
+ return i->second->supportedVersion();
+ }
+ }
+ }
+ QPID_LOG(error, "No enabled protocols!");
+ return qpid::framing::ProtocolVersion(0,0);
+}
+
+bool ProtocolRegistry::isEnabled(const std::string& name) const
{
return enabled.empty()/*if nothing is explicitly enabled, assume everything is*/ || enabled.find(name) != enabled.end();
}
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Protocol.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/Protocol.h?rev=1646258&r1=1646257&r2=1646258&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/Protocol.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/Protocol.h Wed Dec 17 14:29:31 2014
@@ -61,6 +61,7 @@ class Protocol
virtual qpid::sys::ConnectionCodec* create(const qpid::framing::ProtocolVersion&, qpid::sys::OutputControl&, const std::string&, const qpid::sys::SecuritySettings&) = 0;
virtual boost::intrusive_ptr<const qpid::broker::amqp_0_10::MessageTransfer> translate(const Message&) = 0;
virtual boost::shared_ptr<RecoverableMessage> recover(qpid::framing::Buffer&) = 0;
+ virtual qpid::framing::ProtocolVersion supportedVersion() const = 0;
private:
};
@@ -70,6 +71,7 @@ class ProtocolRegistry : public Protocol
public:
QPID_BROKER_EXTERN qpid::sys::ConnectionCodec* create(const qpid::framing::ProtocolVersion&, qpid::sys::OutputControl&, const std::string&, const qpid::sys::SecuritySettings&);
QPID_BROKER_EXTERN qpid::sys::ConnectionCodec* create(qpid::sys::OutputControl&, const std::string&, const qpid::sys::SecuritySettings&);
+ QPID_BROKER_EXTERN qpid::framing::ProtocolVersion supportedVersion() const;
QPID_BROKER_EXTERN boost::intrusive_ptr<const qpid::broker::amqp_0_10::MessageTransfer> translate(const Message&);
QPID_BROKER_EXTERN boost::shared_ptr<RecoverableMessage> recover(qpid::framing::Buffer&);
QPID_BROKER_EXTERN Message decode(qpid::framing::Buffer&);
@@ -86,7 +88,7 @@ class ProtocolRegistry : public Protocol
Broker* broker;
qpid::sys::ConnectionCodec* create_0_10(qpid::sys::OutputControl&, const std::string&, const qpid::sys::SecuritySettings&, bool);
- bool isEnabled(const std::string&);
+ bool isEnabled(const std::string&) const;
};
}} // namespace qpid::broker
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Domain.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Domain.cpp?rev=1646258&r1=1646257&r2=1646258&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Domain.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Domain.cpp Wed Dec 17 14:29:31 2014
@@ -140,6 +140,10 @@ class InterconnectFactory : public Broke
boost::shared_ptr<Domain>, BrokerContext&, boost::shared_ptr<Relay>);
qpid::sys::ConnectionCodec* create(const framing::ProtocolVersion&, qpid::sys::OutputControl&, const std::string&, const qpid::sys::SecuritySettings&);
qpid::sys::ConnectionCodec* create(qpid::sys::OutputControl&, const std::string&, const qpid::sys::SecuritySettings&);
+ qpid::framing::ProtocolVersion supportedVersion() const
+ {
+ return qpid::framing::ProtocolVersion(1, 0);
+ }
bool connect();
void failed(int, std::string);
private:
Modified: qpid/trunk/qpid/cpp/src/qpid/broker/amqp/ProtocolPlugin.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp/ProtocolPlugin.cpp?rev=1646258&r1=1646257&r2=1646258&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/ProtocolPlugin.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/ProtocolPlugin.cpp Wed Dec 17 14:29:31 2014
@@ -73,6 +73,7 @@ class ProtocolImpl : public BrokerContex
qpid::sys::ConnectionCodec* create(const qpid::framing::ProtocolVersion&, qpid::sys::OutputControl&, const std::string&, const qpid::sys::SecuritySettings&);
boost::intrusive_ptr<const qpid::broker::amqp_0_10::MessageTransfer> translate(const qpid::broker::Message&);
boost::shared_ptr<RecoverableMessage> recover(qpid::framing::Buffer&);
+ qpid::framing::ProtocolVersion supportedVersion() const;
private:
};
@@ -158,5 +159,10 @@ boost::shared_ptr<RecoverableMessage> Pr
}
}
+qpid::framing::ProtocolVersion ProtocolImpl::supportedVersion() const
+{
+ return qpid::framing::ProtocolVersion(1,0);
+}
+
}}} // namespace qpid::broker::amqp
Modified: qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIOHandler.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIOHandler.cpp?rev=1646258&r1=1646257&r2=1646258&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIOHandler.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/AsynchIOHandler.cpp Wed Dec 17 14:29:31 2014
@@ -150,7 +150,7 @@ void AsynchIOHandler::readbuff(AsynchIO&
if (!codec) {
//TODO: may still want to revise this...
//send valid version header & close connection.
- write(framing::ProtocolInitiation(framing::highestProtocolVersion));
+ write(framing::ProtocolInitiation(factory->supportedVersion()));
readError = true;
aio->queueWriteClose();
} else {
Modified: qpid/trunk/qpid/cpp/src/qpid/sys/ConnectionCodec.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/ConnectionCodec.h?rev=1646258&r1=1646257&r2=1646258&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/ConnectionCodec.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/ConnectionCodec.h Wed Dec 17 14:29:31 2014
@@ -60,6 +60,8 @@ class ConnectionCodec : public Codec {
virtual ConnectionCodec* create(
OutputControl&, const std::string& id, const SecuritySettings&
) = 0;
+
+ virtual framing::ProtocolVersion supportedVersion() const = 0;
};
};
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org