Masking: Add error handling
When receiving an error packet, we just abort whatever we were doing.
This commit is contained in:
@ -64,32 +64,41 @@ int MaskingFilterSession::routeQuery(GWBUF* pPacket)
|
|||||||
|
|
||||||
int MaskingFilterSession::clientReply(GWBUF* pPacket)
|
int MaskingFilterSession::clientReply(GWBUF* pPacket)
|
||||||
{
|
{
|
||||||
MXS_NOTICE("clientReply");
|
|
||||||
ss_dassert(GWBUF_IS_CONTIGUOUS(pPacket));
|
ss_dassert(GWBUF_IS_CONTIGUOUS(pPacket));
|
||||||
|
|
||||||
switch (m_state)
|
ComResponse response(pPacket);
|
||||||
|
|
||||||
|
if (response.is_err())
|
||||||
{
|
{
|
||||||
case EXPECTING_NOTHING:
|
// If we get an error response, we just abort what we were doing.
|
||||||
MXS_WARNING("Received data, although expected nothing.");
|
m_state = EXPECTING_NOTHING;
|
||||||
case IGNORING_RESPONSE:
|
}
|
||||||
break;
|
else
|
||||||
|
{
|
||||||
|
switch (m_state)
|
||||||
|
{
|
||||||
|
case EXPECTING_NOTHING:
|
||||||
|
MXS_WARNING("Received data, although expected nothing.");
|
||||||
|
case IGNORING_RESPONSE:
|
||||||
|
break;
|
||||||
|
|
||||||
case EXPECTING_RESPONSE:
|
case EXPECTING_RESPONSE:
|
||||||
handle_response(pPacket);
|
handle_response(pPacket);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EXPECTING_FIELD:
|
case EXPECTING_FIELD:
|
||||||
handle_field(pPacket);
|
handle_field(pPacket);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EXPECTING_ROW:
|
case EXPECTING_ROW:
|
||||||
handle_row(pPacket);
|
handle_row(pPacket);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EXPECTING_FIELD_EOF:
|
case EXPECTING_FIELD_EOF:
|
||||||
case EXPECTING_ROW_EOF:
|
case EXPECTING_ROW_EOF:
|
||||||
handle_eof(pPacket);
|
handle_eof(pPacket);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return FilterSession::clientReply(pPacket);
|
return FilterSession::clientReply(pPacket);
|
||||||
@ -97,14 +106,12 @@ int MaskingFilterSession::clientReply(GWBUF* pPacket)
|
|||||||
|
|
||||||
void MaskingFilterSession::handle_response(GWBUF* pPacket)
|
void MaskingFilterSession::handle_response(GWBUF* pPacket)
|
||||||
{
|
{
|
||||||
MXS_NOTICE("handle_response");
|
|
||||||
ComResponse response(pPacket);
|
ComResponse response(pPacket);
|
||||||
|
|
||||||
switch (response.type())
|
switch (response.type())
|
||||||
{
|
{
|
||||||
case 0x00: // OK
|
case ComPacket::OK_PACKET: // OK
|
||||||
// We'll end up here also in the case of a multi-result.
|
// We'll end up here also in the case of a multi-result.
|
||||||
case 0xff: // ERR
|
|
||||||
case 0xfb: // GET_MORE_CLIENT_DATA/SEND_MORE_CLIENT_DATA
|
case 0xfb: // GET_MORE_CLIENT_DATA/SEND_MORE_CLIENT_DATA
|
||||||
m_state = EXPECTING_NOTHING;
|
m_state = EXPECTING_NOTHING;
|
||||||
break;
|
break;
|
||||||
@ -121,8 +128,6 @@ void MaskingFilterSession::handle_response(GWBUF* pPacket)
|
|||||||
|
|
||||||
void MaskingFilterSession::handle_field(GWBUF* pPacket)
|
void MaskingFilterSession::handle_field(GWBUF* pPacket)
|
||||||
{
|
{
|
||||||
MXS_NOTICE("handle_field");
|
|
||||||
|
|
||||||
ComQueryResponse::ColumnDef column_def(pPacket);
|
ComQueryResponse::ColumnDef column_def(pPacket);
|
||||||
|
|
||||||
const char *zUser = session_get_user(m_pSession);
|
const char *zUser = session_get_user(m_pSession);
|
||||||
@ -149,8 +154,6 @@ void MaskingFilterSession::handle_field(GWBUF* pPacket)
|
|||||||
|
|
||||||
void MaskingFilterSession::handle_eof(GWBUF* pPacket)
|
void MaskingFilterSession::handle_eof(GWBUF* pPacket)
|
||||||
{
|
{
|
||||||
MXS_NOTICE("handle_eof");
|
|
||||||
|
|
||||||
ComResponse response(pPacket);
|
ComResponse response(pPacket);
|
||||||
|
|
||||||
if (response.is_eof())
|
if (response.is_eof())
|
||||||
@ -190,8 +193,6 @@ void warn_of_type_mismatch(const MaskingRules::Rule& rule)
|
|||||||
|
|
||||||
void MaskingFilterSession::handle_row(GWBUF* pPacket)
|
void MaskingFilterSession::handle_row(GWBUF* pPacket)
|
||||||
{
|
{
|
||||||
MXS_NOTICE("handle_row");
|
|
||||||
|
|
||||||
ComResponse response(pPacket);
|
ComResponse response(pPacket);
|
||||||
|
|
||||||
switch (response.type())
|
switch (response.type())
|
||||||
|
Reference in New Issue
Block a user