diff options
Diffstat (limited to 'qpid/cpp')
| -rw-r--r-- | qpid/cpp/include/qpid/framing/ProtocolVersion.h | 11 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/framing/ProtocolInitiation.cpp | 31 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/framing/ProtocolVersion.cpp | 8 |
3 files changed, 40 insertions, 10 deletions
diff --git a/qpid/cpp/include/qpid/framing/ProtocolVersion.h b/qpid/cpp/include/qpid/framing/ProtocolVersion.h index 26d628e41c..309e543516 100644 --- a/qpid/cpp/include/qpid/framing/ProtocolVersion.h +++ b/qpid/cpp/include/qpid/framing/ProtocolVersion.h @@ -36,21 +36,28 @@ class QPID_COMMON_CLASS_EXTERN ProtocolVersion 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 diff --git a/qpid/cpp/src/qpid/framing/ProtocolInitiation.cpp b/qpid/cpp/src/qpid/framing/ProtocolInitiation.cpp index 00ddb55a3b..19cb3f0e3d 100644 --- a/qpid/cpp/src/qpid/framing/ProtocolInitiation.cpp +++ b/qpid/cpp/src/qpid/framing/ProtocolInitiation.cpp @@ -38,10 +38,17 @@ void ProtocolInitiation::encode(Buffer& buffer) const { 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){ 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; diff --git a/qpid/cpp/src/qpid/framing/ProtocolVersion.cpp b/qpid/cpp/src/qpid/framing/ProtocolVersion.cpp index c63cddb4cc..174fc3e65b 100644 --- a/qpid/cpp/src/qpid/framing/ProtocolVersion.cpp +++ b/qpid/cpp/src/qpid/framing/ProtocolVersion.cpp @@ -27,6 +27,10 @@ const std::string ProtocolVersion::toString() const { 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==(ProtocolVersion p) const 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); |
