clear buffer on forced disconnect, fatal disconnect on bad frame end, store tuning parameters
This commit is contained in:
parent
182b493119
commit
1d3f53ba60
|
|
@ -22,6 +22,9 @@ ClientPrivate::ClientPrivate(Client *q)
|
||||||
socket(0),
|
socket(0),
|
||||||
closed(false),
|
closed(false),
|
||||||
connected(false),
|
connected(false),
|
||||||
|
channelMax(0),
|
||||||
|
heartbeatDelay(0),
|
||||||
|
frameMax(0),
|
||||||
error(Client::NoError),
|
error(Client::NoError),
|
||||||
q_ptr(q)
|
q_ptr(q)
|
||||||
{
|
{
|
||||||
|
|
@ -90,6 +93,7 @@ void ClientPrivate::_q_disconnect()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buffer.clear();
|
||||||
close(200, "client disconnect");
|
close(200, "client disconnect");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -150,8 +154,11 @@ void ClientPrivate::_q_readyRead()
|
||||||
const char *bufferData = buffer.constData();
|
const char *bufferData = buffer.constData();
|
||||||
const quint8 type = *(quint8*)&bufferData[0];
|
const quint8 type = *(quint8*)&bufferData[0];
|
||||||
const quint8 magic = *(quint8*)&bufferData[Frame::HEADER_SIZE + payloadSize];
|
const quint8 magic = *(quint8*)&bufferData[Frame::HEADER_SIZE + payloadSize];
|
||||||
if (magic != Frame::FRAME_END)
|
if (magic != Frame::FRAME_END) {
|
||||||
qWarning() << "Wrong end frame";
|
qAmqpDebug() << Q_FUNC_INFO << "FATAL: wrong end of frame";
|
||||||
|
_q_disconnect();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
QDataStream streamB(&buffer, QIODevice::ReadOnly);
|
QDataStream streamB(&buffer, QIODevice::ReadOnly);
|
||||||
switch(Frame::Type(type)) {
|
switch(Frame::Type(type)) {
|
||||||
|
|
@ -288,20 +295,16 @@ void ClientPrivate::tune(const Frame::Method &frame)
|
||||||
QByteArray data = frame.arguments();
|
QByteArray data = frame.arguments();
|
||||||
QDataStream stream(&data, QIODevice::ReadOnly);
|
QDataStream stream(&data, QIODevice::ReadOnly);
|
||||||
|
|
||||||
qint16 channel_max = 0,
|
stream >> channelMax;
|
||||||
heartbeat = 0;
|
stream >> frameMax;
|
||||||
qint32 frame_max = 0;
|
stream >> heartbeatDelay;
|
||||||
|
|
||||||
stream >> channel_max;
|
qAmqpDebug(">> channel_max: %d", channelMax);
|
||||||
stream >> frame_max;
|
qAmqpDebug(">> frame_max: %d", frameMax);
|
||||||
stream >> heartbeat;
|
qAmqpDebug(">> heartbeat: %d", heartbeatDelay);
|
||||||
|
|
||||||
qAmqpDebug(">> channel_max: %d", channel_max);
|
|
||||||
qAmqpDebug(">> frame_max: %d", frame_max);
|
|
||||||
qAmqpDebug(">> heartbeat: %d", heartbeat);
|
|
||||||
|
|
||||||
if (heartbeatTimer) {
|
if (heartbeatTimer) {
|
||||||
heartbeatTimer->setInterval(heartbeat * 1000);
|
heartbeatTimer->setInterval(heartbeatDelay * 1000);
|
||||||
if (heartbeatTimer->interval())
|
if (heartbeatTimer->interval())
|
||||||
heartbeatTimer->start();
|
heartbeatTimer->start();
|
||||||
else
|
else
|
||||||
|
|
@ -390,9 +393,9 @@ void ClientPrivate::tuneOk()
|
||||||
QByteArray arguments;
|
QByteArray arguments;
|
||||||
QDataStream stream(&arguments, QIODevice::WriteOnly);
|
QDataStream stream(&arguments, QIODevice::WriteOnly);
|
||||||
|
|
||||||
stream << qint16(0); //channel_max
|
stream << qint16(channelMax);
|
||||||
stream << qint32(FRAME_MAX); //frame_max
|
stream << qint32(frameMax);
|
||||||
stream << qint16(heartbeatTimer->interval() / 1000); //heartbeat
|
stream << qint16(heartbeatTimer->interval() / 1000);
|
||||||
|
|
||||||
frame.setArguments(arguments);
|
frame.setArguments(arguments);
|
||||||
sendFrame(frame);
|
sendFrame(frame);
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,9 @@ public:
|
||||||
bool connected;
|
bool connected;
|
||||||
QPointer<QTimer> heartbeatTimer;
|
QPointer<QTimer> heartbeatTimer;
|
||||||
Frame::TableField customProperties;
|
Frame::TableField customProperties;
|
||||||
|
qint16 channelMax;
|
||||||
|
qint16 heartbeatDelay;
|
||||||
|
qint32 frameMax;
|
||||||
|
|
||||||
Client::ConnectionError error;
|
Client::ConnectionError error;
|
||||||
QString errorString;
|
QString errorString;
|
||||||
|
|
|
||||||
|
|
@ -235,4 +235,3 @@ void Exchange::publish(const QString &key, const QByteArray &message,
|
||||||
d->sendFrame(body);
|
d->sendFrame(body);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue