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