package DBProxy.Plugins.debug;
/*
* Debug plugin
* Output packet debugging information
*/
import DBProxy.Core.Engine;
import DBProxy.MySQL.Protocol.Flags;
import DBProxy.MySQL.Protocol.Packet;
import java.util.ArrayList;
import org.apache.log4j.Logger;
import DBProxy.Plugins.Base;
public class Debug extends Base {
public Logger logger = Logger.getLogger("Plugin.Debug");
public void read_handshake(Engine context) {
this.logger.debug("<- HandshakePacket");
this.logger.debug(" Server Version: "+context.handshake.serverVersion);
this.logger.debug(" Connection Id: "+context.handshake.connectionId);
this.logger.debug(" Server Capability Flags: "
+ Debug.dump_capability_flags(context.handshake.capabilityFlags));
}
public void read_auth(Engine context) {
this.logger.debug("-> AuthResponsePacket");
this.logger.debug(" Max Packet Size: "+context.authReply.maxPacketSize);
this.logger.debug(" User: "+context.authReply.username);
this.logger.debug(" Schema: "+context.authReply.schema);
this.logger.debug(" Client Capability Flags: "
+ Debug.dump_capability_flags(context.authReply.capabilityFlags));
}
public void read_query(Engine context) {
switch (Packet.getType(context.buffer.get(context.buffer.size()-1))) {
case Flags.COM_QUIT:
this.logger.info("-> COM_QUIT");
break;
// Extract out the new default schema
case Flags.COM_INIT_DB:
this.logger.info("-> USE "+context.schema);
break;
// Query
case Flags.COM_QUERY:
this.logger.info("-> "+context.query);
break;
default:
this.logger.debug("Packet is "+Packet.getType(context.buffer.get(context.buffer.size()-1))+" type.");
Debug.dump_buffer(context);
break;
}
context.buffer_result_set();
}
public void read_query_result(Engine context) {
if (!context.bufferResultSet)
return;
switch (Packet.getType(context.buffer.get(context.buffer.size()-1))) {
case Flags.OK:
this.logger.info("<- OK");
break;
case Flags.ERR:
this.logger.info("<- ERR");
break;
default:
this.logger.debug("Result set or Packet is "+Packet.getType(context.buffer.get(context.buffer.size()-1))+" type.");
break;
}
}
public static final void dump_buffer(ArrayList<byte[]> buffer) {
Logger logger = Logger.getLogger("Plugin.Debug");
if (!logger.isTraceEnabled())
return;
for (byte[] packet: buffer) {
Packet.dump(packet);
}
}
public static final void dump_buffer(Engine context) {
Logger logger = Logger.getLogger("Plugin.Debug");
if (!logger.isTraceEnabled())
return;
for (byte[] packet: context.buffer) {
Packet.dump(packet);
}
}
public static final String dump_capability_flags(long capabilityFlags) {
String out = "";
if ((capabilityFlags & Flags.CLIENT_LONG_PASSWORD) != 0)
out += " CLIENT_LONG_PASSWORD";
if ((capabilityFlags & Flags.CLIENT_FOUND_ROWS) != 0)
out += " CLIENT_FOUND_ROWS";
if ((capabilityFlags & Flags.CLIENT_LONG_FLAG) != 0)
out += " CLIENT_LONG_FLAG";
if ((capabilityFlags & Flags.CLIENT_CONNECT_WITH_DB) != 0)
out += " CLIENT_CONNECT_WITH_DB";
if ((capabilityFlags & Flags.CLIENT_NO_SCHEMA) != 0)
out += " CLIENT_NO_SCHEMA";
if ((capabilityFlags & Flags.CLIENT_COMPRESS) != 0)
out += " CLIENT_COMPRESS";
if ((capabilityFlags & Flags.CLIENT_ODBC) != 0)
out += " CLIENT_ODBC";
if ((capabilityFlags & Flags.CLIENT_LOCAL_FILES) != 0)
out += " CLIENT_LOCAL_FILES";
if ((capabilityFlags & Flags.CLIENT_IGNORE_SPACE) != 0)
out += " CLIENT_IGNORE_SPACE";
if ((capabilityFlags & Flags.CLIENT_PROTOCOL_41) != 0)
out += " CLIENT_PROTOCOL_41";
if ((capabilityFlags & Flags.CLIENT_INTERACTIVE) != 0)
out += " CLIENT_INTERACTIVE";
if ((capabilityFlags & Flags.CLIENT_SSL) != 0)
out += " CLIENT_SSL";
if ((capabilityFlags & Flags.CLIENT_IGNORE_SIGPIPE) != 0)
out += " CLIENT_IGNORE_SIGPIPE";
if ((capabilityFlags & Flags.CLIENT_TRANSACTIONS) != 0)
out += " CLIENT_TRANSACTIONS";
if ((capabilityFlags & Flags.CLIENT_RESERVED) != 0)
out += " CLIENT_RESERVED";
if ((capabilityFlags & Flags.CLIENT_SECURE_CONNECTION) != 0)
out += " CLIENT_SECURE_CONNECTION";
return out;
}
public static final String dump_status_flags(long statusFlags) {
String out = "";
if ((statusFlags & Flags.SERVER_STATUS_IN_TRANS) != 0)
out += " SERVER_STATUS_IN_TRANS";
if ((statusFlags & Flags.SERVER_STATUS_AUTOCOMMIT) != 0)
out += " SERVER_STATUS_AUTOCOMMIT";
if ((statusFlags & Flags.SERVER_MORE_RESULTS_EXISTS) != 0)
out += " SERVER_MORE_RESULTS_EXISTS";
if ((statusFlags & Flags.SERVER_STATUS_NO_GOOD_INDEX_USED) != 0)
out += " SERVER_STATUS_NO_GOOD_INDEX_USED";
if ((statusFlags & Flags.SERVER_STATUS_NO_INDEX_USED) != 0)
out += " SERVER_STATUS_NO_INDEX_USED";
if ((statusFlags & Flags.SERVER_STATUS_CURSOR_EXISTS) != 0)
out += " SERVER_STATUS_CURSOR_EXISTS";
if ((statusFlags & Flags.SERVER_STATUS_LAST_ROW_SENT) != 0)
out += " SERVER_STATUS_LAST_ROW_SENT";
if ((statusFlags & Flags.SERVER_STATUS_LAST_ROW_SENT) != 0)
out += " SERVER_STATUS_LAST_ROW_SENT";
if ((statusFlags & Flags.SERVER_STATUS_DB_DROPPED) != 0)
out += " SERVER_STATUS_DB_DROPPED";
if ((statusFlags & Flags.SERVER_STATUS_NO_BACKSLASH_ESCAPES) != 0)
out += " SERVER_STATUS_NO_BACKSLASH_ESCAPES";
if ((statusFlags & Flags.SERVER_STATUS_METADATA_CHANGED) != 0)
out += " SERVER_STATUS_METADATA_CHANGED";
if ((statusFlags & Flags.SERVER_QUERY_WAS_SLOW) != 0)
out += " SERVER_QUERY_WAS_SLOW";
if ((statusFlags & Flags.SERVER_PS_OUT_PARAMS) != 0)
out += " SERVER_PS_OUT_PARAMS";
return out;
}
}