IVA/app/external/qamqp/qamqpframe_p.h

172 lines
3.6 KiB
C
Raw Normal View History

#ifndef QAMQPFRAME_P_H
#define QAMQPFRAME_P_H
#include <QDataStream>
#include <QReadWriteLock>
#include <QHash>
#include <QVariant>
#include "qamqpglobal.h"
#include "qamqpmessage.h"
class QAmqpFramePrivate;
class QAmqpFrame
{
public:
static const qint64 HEADER_SIZE = 7;
static const qint64 FRAME_END_SIZE = 1;
static const quint8 FRAME_END = 0xCE;
enum FrameType
{
Method = 1,
Header = 2,
Body = 3,
Heartbeat = 8
};
enum MethodClass
{
Connection = 10,
Channel = 20,
Exchange = 40,
Queue = 50,
Basic = 60,
Confirm = 85,
Tx = 90
};
virtual ~QAmqpFrame();
FrameType type() const;
quint16 channel() const;
void setChannel(quint16 channel);
static int writeTimeout();
static void setWriteTimeout(int msecs);
virtual qint32 size() const;
static QVariant readAmqpField(QDataStream &s, QAmqpMetaType::ValueType type);
static void writeAmqpField(QDataStream &s, QAmqpMetaType::ValueType type, const QVariant &value);
protected:
explicit QAmqpFrame(FrameType type);
virtual void writePayload(QDataStream &stream) const = 0;
virtual void readPayload(QDataStream &stream) = 0;
qint32 size_;
private:
qint8 type_;
quint16 channel_;
static QReadWriteLock lock_;
static int writeTimeout_;
friend QDataStream &operator<<(QDataStream &stream, const QAmqpFrame &frame);
friend QDataStream &operator>>(QDataStream &stream, QAmqpFrame &frame);
};
QDataStream &operator<<(QDataStream &, const QAmqpFrame &frame);
QDataStream &operator>>(QDataStream &, QAmqpFrame &frame);
class QAMQP_EXPORT QAmqpMethodFrame : public QAmqpFrame
{
public:
QAmqpMethodFrame();
QAmqpMethodFrame(MethodClass methodClass, qint16 id);
qint16 id() const;
MethodClass methodClass() const;
virtual qint32 size() const;
QByteArray arguments() const;
void setArguments(const QByteArray &data);
private:
void writePayload(QDataStream &stream) const;
void readPayload(QDataStream &stream);
short methodClass_;
qint16 id_;
QByteArray arguments_;
};
class QAmqpContentFrame : public QAmqpFrame
{
public:
QAmqpContentFrame();
QAmqpContentFrame(MethodClass methodClass);
MethodClass methodClass() const;
virtual qint32 size() const;
QVariant property(QAmqpMessage::Property prop) const;
void setProperty(QAmqpMessage::Property prop, const QVariant &value);
qlonglong bodySize() const;
void setBodySize(qlonglong size);
private:
void writePayload(QDataStream &stream) const;
void readPayload(QDataStream &stream);
friend class QAmqpQueuePrivate;
short methodClass_;
qint16 id_;
mutable QByteArray buffer_;
QAmqpMessage::PropertyHash properties_;
qlonglong bodySize_;
};
class QAmqpContentBodyFrame : public QAmqpFrame
{
public:
QAmqpContentBodyFrame();
void setBody(const QByteArray &data);
QByteArray body() const;
virtual qint32 size() const;
private:
void writePayload(QDataStream &stream) const;
void readPayload(QDataStream &stream);
QByteArray body_;
};
class QAmqpHeartbeatFrame : public QAmqpFrame
{
public:
QAmqpHeartbeatFrame();
private:
void writePayload(QDataStream &stream) const;
void readPayload(QDataStream &stream);
};
class QAmqpMethodFrameHandler
{
public:
virtual bool _q_method(const QAmqpMethodFrame &frame) = 0;
};
class QAmqpContentFrameHandler
{
public:
virtual void _q_content(const QAmqpContentFrame &frame) = 0;
};
class QAmqpContentBodyFrameHandler
{
public:
virtual void _q_body(const QAmqpContentBodyFrame &frame) = 0;
};
#endif // QAMQPFRAME_P_H