Author: gsim
Date: Fri Oct 19 17:15:32 2012
New Revision: 1400175

URL: http://svn.apache.org/viewvc?rev=1400175&view=rev
Log:
QPID-4368: Updated protocol version header handling to recognise 1.0 headers

Modified:
    qpid/trunk/qpid/cpp/include/qpid/framing/ProtocolVersion.h
    qpid/trunk/qpid/cpp/src/qpid/framing/ProtocolInitiation.cpp
    qpid/trunk/qpid/cpp/src/qpid/framing/ProtocolVersion.cpp

Modified: qpid/trunk/qpid/cpp/include/qpid/framing/ProtocolVersion.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/include/qpid/framing/ProtocolVersion.h?rev=1400175&r1=1400174&r2=1400175&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/include/qpid/framing/ProtocolVersion.h (original)
+++ qpid/trunk/qpid/cpp/include/qpid/framing/ProtocolVersion.h Fri Oct 19 
17:15:32 2012
@@ -36,21 +36,28 @@ class QPID_COMMON_CLASS_EXTERN ProtocolV
 private:
     uint8_t major_;
     uint8_t minor_;
+    uint8_t protocol_;
 
 public:
-    explicit ProtocolVersion(uint8_t _major=0, uint8_t _minor=0)
-        : major_(_major), minor_(_minor) {}
+    explicit ProtocolVersion(uint8_t _major=0, uint8_t _minor=0, uint8_t 
_protocol=0)
+        : major_(_major), minor_(_minor), protocol_(_protocol) {}
 
     QPID_COMMON_INLINE_EXTERN uint8_t getMajor() const { return major_; }
     QPID_COMMON_INLINE_EXTERN void setMajor(uint8_t major) { major_ = major; }
     QPID_COMMON_INLINE_EXTERN uint8_t getMinor() const { return minor_; }
     QPID_COMMON_INLINE_EXTERN void setMinor(uint8_t minor) { minor_ = minor; }
+    QPID_COMMON_INLINE_EXTERN uint8_t getProtocol() const { return protocol_; }
+    QPID_COMMON_INLINE_EXTERN void setProtocol(uint8_t protocol) { protocol_ = 
protocol; }
     QPID_COMMON_EXTERN const std::string toString() const;
 
     QPID_COMMON_EXTERN ProtocolVersion& operator=(ProtocolVersion p);
 
     QPID_COMMON_EXTERN bool operator==(ProtocolVersion p) const;
     QPID_COMMON_INLINE_EXTERN bool operator!=(ProtocolVersion p) const { 
return ! (*this == p); }
+    QPID_COMMON_EXTERN static uint8_t AMQP;
+    QPID_COMMON_EXTERN static uint8_t LEGACY_AMQP;
+    QPID_COMMON_EXTERN static uint8_t TLS;
+    QPID_COMMON_EXTERN static uint8_t SASL;
 };
 
 } // namespace framing

Modified: qpid/trunk/qpid/cpp/src/qpid/framing/ProtocolInitiation.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/framing/ProtocolInitiation.cpp?rev=1400175&r1=1400174&r2=1400175&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/framing/ProtocolInitiation.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/framing/ProtocolInitiation.cpp Fri Oct 19 
17:15:32 2012
@@ -38,10 +38,17 @@ void ProtocolInitiation::encode(Buffer& 
     buffer.putOctet('M');
     buffer.putOctet('Q');
     buffer.putOctet('P');
-    buffer.putOctet(1);//class
-    buffer.putOctet(1);//instance
-    buffer.putOctet(version.getMajor());
-    buffer.putOctet(version.getMinor());    
+    if (version.getMajor() == 1) {
+        buffer.putOctet(version.getProtocol());
+        buffer.putOctet(version.getMajor());
+        buffer.putOctet(version.getMinor());
+        buffer.putOctet(0);//revision
+    } else {
+        buffer.putOctet(1);//class
+        buffer.putOctet(1);//instance
+        buffer.putOctet(version.getMajor());
+        buffer.putOctet(version.getMinor());
+    }
 }
 
 bool ProtocolInitiation::decode(Buffer& buffer){
@@ -50,10 +57,18 @@ bool ProtocolInitiation::decode(Buffer& 
        buffer.getOctet();//M
        buffer.getOctet();//Q
        buffer.getOctet();//P
-       buffer.getOctet();//class
-       buffer.getOctet();//instance
-       version.setMajor(buffer.getOctet());
-       version.setMinor(buffer.getOctet());
+       uint8_t protocolClass = buffer.getOctet();//class
+        version.setProtocol(protocolClass);
+        if (protocolClass == 1) {
+            //old (pre-1.0) style
+            buffer.getOctet();//instance
+            version.setMajor(buffer.getOctet());
+            version.setMinor(buffer.getOctet());
+        } else {
+            version.setMajor(buffer.getOctet());
+            version.setMinor(buffer.getOctet());
+            buffer.getOctet();//revision
+        }
        return true;
     }else{
        return false;

Modified: qpid/trunk/qpid/cpp/src/qpid/framing/ProtocolVersion.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/framing/ProtocolVersion.cpp?rev=1400175&r1=1400174&r2=1400175&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/framing/ProtocolVersion.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/framing/ProtocolVersion.cpp Fri Oct 19 
17:15:32 2012
@@ -27,6 +27,10 @@ const std::string ProtocolVersion::toStr
 {
     std::stringstream ss;
     ss << major_ << "-" << minor_;
+    if (major_ == 1) {
+        if (protocol_ == SASL) ss << " (SASL)";
+        else if (protocol_ == TLS) ss << " (TLS)";
+    }
     return ss.str();
 }
 
@@ -42,3 +46,7 @@ bool ProtocolVersion::operator==(Protoco
     return major_ == p.major_ && minor_ == p.minor_;
 }
 
+uint8_t ProtocolVersion::AMQP(0);
+uint8_t ProtocolVersion::LEGACY_AMQP(1);
+uint8_t ProtocolVersion::TLS(2);
+uint8_t ProtocolVersion::SASL(3);



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to