Masking: Add error handling

When receiving an error packet, we just abort whatever we were doing.
This commit is contained in:
Johan Wikman
2017-01-12 13:59:43 +02:00
parent 9a85b8eb06
commit e1a43c15c5

View File

@ -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())