143 lines
2.9 KiB
C++
143 lines
2.9 KiB
C++
/**
|
|
* Class describing an AMQP protocol header frame
|
|
*
|
|
* @copyright 2014 Copernica BV
|
|
*/
|
|
|
|
/**
|
|
* Set up header
|
|
*/
|
|
namespace AMQP {
|
|
|
|
/**
|
|
* Clas definition
|
|
*/
|
|
class ProtocolHeaderFrame : public Frame
|
|
{
|
|
private:
|
|
/**
|
|
* Protocol name (should be null-ended string "AMQP")
|
|
* @var char*
|
|
*/
|
|
const char *_protocol;
|
|
|
|
/**
|
|
* The protocol major version, should be 0
|
|
* @var uint8_t
|
|
*/
|
|
uint8_t _protocolIDMajor;
|
|
|
|
/**
|
|
* The protocol minor version, should be 9
|
|
* @var uint8_t
|
|
*/
|
|
uint8_t _protocolIDMinor;
|
|
|
|
/**
|
|
* the protocol revision, should be 1
|
|
* @var uint8_t
|
|
*/
|
|
uint8_t _revision;
|
|
|
|
/**
|
|
* Encode a frame on a stringbuffer
|
|
*
|
|
* @param buffer buffer to encode frame to
|
|
*/
|
|
virtual void fill(OutBuffer& buffer) const override
|
|
{
|
|
// there is no base, add fields
|
|
buffer.add(_protocol, 5);
|
|
buffer.add(_protocolIDMajor);
|
|
buffer.add(_protocolIDMinor);
|
|
buffer.add(_revision);
|
|
}
|
|
|
|
public:
|
|
/**
|
|
* Construct based on incoming frame
|
|
*
|
|
* @param frame received frame to decode
|
|
*/
|
|
ProtocolHeaderFrame(ReceivedFrame& frame) :
|
|
_protocol(frame.nextData(5)),
|
|
_protocolIDMajor(frame.nextUint8()),
|
|
_protocolIDMinor(frame.nextUint8()),
|
|
_revision(frame.nextUint8())
|
|
{}
|
|
|
|
/**
|
|
* Construct a new ProtocolHeaderFrame object
|
|
*
|
|
* @param protocolIDMajor protocol major version, should be 0
|
|
* @param protocolIDMinor protocol minor version, should be 9
|
|
* @param revision revision of version, should be 1
|
|
*/
|
|
ProtocolHeaderFrame(uint8_t protocolIDMajor = 0,uint8_t protocolIDMinor = 9,uint8_t revision = 1) :
|
|
_protocol("AMQP"),
|
|
_protocolIDMajor(protocolIDMajor),
|
|
_protocolIDMinor(protocolIDMinor),
|
|
_revision(revision)
|
|
{}
|
|
|
|
/**
|
|
* Destructor
|
|
*/
|
|
virtual ~ProtocolHeaderFrame()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* return the total size of the frame
|
|
* @return uint32_t
|
|
*/
|
|
virtual uint32_t totalSize() const override
|
|
{
|
|
// include one byte for end of frame delimiter
|
|
return 8;
|
|
}
|
|
|
|
/**
|
|
* return the protocol major version, should be 0
|
|
* @return uint8_t
|
|
*/
|
|
uint8_t protocolIDMajor() const
|
|
{
|
|
return _protocolIDMajor;
|
|
}
|
|
|
|
/**
|
|
* return the protocol minor version, should be 9
|
|
* @return uint8_t
|
|
*/
|
|
uint8_t protocolIDMinor() const
|
|
{
|
|
return _protocolIDMinor;
|
|
}
|
|
|
|
/**
|
|
* return the protocol revision, should be 1
|
|
* @return uint8_t
|
|
*/
|
|
uint8_t revision() const
|
|
{
|
|
return _revision;
|
|
}
|
|
|
|
/**
|
|
* Is this a frame that is part of the connection setup?
|
|
* @return bool
|
|
*/
|
|
virtual bool partOfHandshake() const override
|
|
{
|
|
return true;
|
|
}
|
|
|
|
};
|
|
|
|
/**
|
|
* End of namespace
|
|
*/
|
|
}
|
|
|