package me.xcoding.opencdc.mysql.protocol; import java.lang.reflect.Field; import java.util.Arrays; import me.xcoding.opencdc.utils.IOUtils; public class HandshakeV10 { private int protocal_version = 0; private String server_version; private int connectin_id = 0; private byte[] auth_plugin_data_part_1; // byte[] private int filer = 0; private int capability_flags_1 = 0; private int character_set; private int status_flags; private int capability_flags_2; private int auth_plugin_data_len; // private String auth_plugin_data; private byte[] auth_plugin_data_part_2; // byte[] private String auth_plugin_name; public final byte[] auth_plugin_data_part; private int capabilities = 0; public HandshakeV10(ReadablePacket packet) { protocal_version = packet.readFixedIntT1(); server_version = packet.readStringNull(); // version connectin_id = packet.readFixedIntT4(); // connection_id auth_plugin_data_part_1 = packet.readBytesVarLen(8); // author scramble filer = packet.readFixedIntT1(); // filer_1 // always set [00] capability_flags_1 = packet.readFixedIntT2(); // capability_flag_1 character_set = packet.readFixedIntT1(); // charset_set status_flags = packet.readFixedIntT2(); // status_flags capability_flags_2 = packet.readFixedIntT2(); // capabillity_flag_2 auth_plugin_data_len = packet.readFixedIntT1(); // for test capabilities = (capability_flags_1 & 0x0000FFFF) | ((capability_flags_2 & 0x0000FFFF) << 16); System.out.println("HandshakeV10.HandshakeV10()" + ((capabilities & 0x00080000) == auth_plugin_data_len)); packet.skip(10); int length = Math.max(13, auth_plugin_data_len - 8); if((capabilities & CapabilityFlags.CLIENT_SECURE_CONNECTION) != 0) { auth_plugin_data_part_2 = packet.readBytesNull(); // author scramble } if((capabilities & CapabilityFlags.CLIENT_SECURE_CONNECTION) != 0) { auth_plugin_name = packet.readStringNull(); } auth_plugin_data_part = IOUtils.add(auth_plugin_data_part_1, auth_plugin_data_part_2); } @Override public String toString() { StringBuffer sb = new StringBuffer(super.toString()).append("{"); Class<?> c = this.getClass(); Field fs[] = c.getDeclaredFields(); System.out.println(fs.length); Field.setAccessible(fs, true); try { for(Field f : fs) { sb.append(f.getName()).append(" = "); if(f.getType().isArray()) { sb.append(Arrays.toString((byte[])f.get(this))).append(", \n"); } else { sb.append(f.get(this)).append(", \n"); } } } catch (Exception e) { e.printStackTrace(); } return sb.toString(); } public int getProtocal_version() { return protocal_version; } public void setProtocal_version(int protocal_version) { this.protocal_version = protocal_version; } public String getServer_version() { return server_version; } public void setServer_version(String server_version) { this.server_version = server_version; } public int getConnectin_id() { return connectin_id; } public void setConnectin_id(int connectin_id) { this.connectin_id = connectin_id; } public int getFiler() { return filer; } public void setFiler(int filer) { this.filer = filer; } public int getCapability_flags_1() { return capability_flags_1; } public void setCapability_flag_1(int capability_flag_1) { this.capability_flags_1 = capability_flag_1; } public int getCharacter_set() { return character_set; } public void setCharacter_set(int character_set) { this.character_set = character_set; } public int getStatus_flags() { return status_flags; } public void setStatus_flags(int status_flags) { this.status_flags = status_flags; } public int getCapability_flags_2() { return capability_flags_2; } public void setCapability_flags_2(int capability_flags_2) { this.capability_flags_2 = capability_flags_2; } public int getAuth_plugin_data_len() { return auth_plugin_data_len; } public void setAuth_plugin_data_len(int auth_plugin_data_len) { this.auth_plugin_data_len = auth_plugin_data_len; } public String getAuth_plugin_name() { return auth_plugin_name; } public void setAuth_plugin_name(String auth_plugin_name) { this.auth_plugin_name = auth_plugin_name; } public int getCapabilities() { return capabilities; } }