summaryrefslogtreecommitdiff
path: root/qpid/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/cpp')
-rw-r--r--qpid/cpp/include/qpid/framing/ProtocolVersion.h11
-rw-r--r--qpid/cpp/src/qpid/framing/ProtocolInitiation.cpp31
-rw-r--r--qpid/cpp/src/qpid/framing/ProtocolVersion.cpp8
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);