ISSUES-4006 split connection packets

This commit is contained in:
zhang2014 2020-08-13 17:38:00 +08:00
parent c0d42b764e
commit 57c772e3aa
3 changed files with 22 additions and 18 deletions

View File

@ -13,6 +13,19 @@ namespace DB
namespace MySQLProtocol
{
enum Capability
{
CLIENT_CONNECT_WITH_DB = 0x00000008,
CLIENT_PROTOCOL_41 = 0x00000200,
CLIENT_SSL = 0x00000800,
CLIENT_TRANSACTIONS = 0x00002000, // TODO
CLIENT_SESSION_TRACK = 0x00800000, // TODO
CLIENT_SECURE_CONNECTION = 0x00008000,
CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA = 0x00200000,
CLIENT_PLUGIN_AUTH = 0x00080000,
CLIENT_DEPRECATE_EOF = 0x01000000,
};
class SSLRequest : public IMySQLReadPacket
{
public:

View File

@ -1,5 +1,7 @@
#include <Core/MySQL/PacketsConnection.h>
#include <Core/MySQLProtocol.h>
#include <IO/ReadHelpers.h>
#include <IO/WriteHelpers.h>
#include <Core/MySQL/MySQLPackets.h>
namespace DB
{
@ -10,6 +12,9 @@ namespace MySQLProtocol
namespace ConnectionPhase
{
static const size_t SCRAMBLE_LENGTH = 20;
static const size_t AUTH_PLUGIN_DATA_PART_1_LENGTH = 8;
Handshake::Handshake() : connection_id(0x00), capability_flags(0x00), character_set(0x00), status_flags(0x00)
{
}
@ -44,7 +49,7 @@ void Handshake::readPayloadImpl(ReadBuffer & payload)
payload.readStrict((reinterpret_cast<char *>(&capability_flags)) + 2, 2);
UInt8 auth_plugin_data_length = 0;
if (capability_flags & MySQLProtocol::CLIENT_PLUGIN_AUTH)
if (capability_flags & Capability::CLIENT_PLUGIN_AUTH)
{
payload.readStrict(reinterpret_cast<char *>(&auth_plugin_data_length), 1);
}
@ -54,7 +59,7 @@ void Handshake::readPayloadImpl(ReadBuffer & payload)
}
payload.ignore(10);
if (capability_flags & MySQLProtocol::CLIENT_SECURE_CONNECTION)
if (capability_flags & Capability::CLIENT_SECURE_CONNECTION)
{
UInt8 part2_length = (SCRAMBLE_LENGTH - AUTH_PLUGIN_DATA_PART_1_LENGTH);
auth_plugin_data.resize(SCRAMBLE_LENGTH);
@ -62,7 +67,7 @@ void Handshake::readPayloadImpl(ReadBuffer & payload)
payload.ignore(1);
}
if (capability_flags & MySQLProtocol::CLIENT_PLUGIN_AUTH)
if (capability_flags & Capability::CLIENT_PLUGIN_AUTH)
{
readNullTerminated(auth_plugin_name, payload);
}

View File

@ -57,7 +57,6 @@ namespace MySQLProtocol
//const size_t MAX_PACKET_LENGTH = (1 << 24) - 1; // 16 mb
const size_t SCRAMBLE_LENGTH = 20;
const size_t AUTH_PLUGIN_DATA_PART_1_LENGTH = 8;
const size_t MYSQL_ERRMSG_SIZE = 512;
const size_t PACKET_HEADER_SIZE = 4;
const size_t SSL_REQUEST_PAYLOAD_SIZE = 32;
@ -67,19 +66,6 @@ enum StatusFlags
SERVER_SESSION_STATE_CHANGED = 0x4000
};
enum Capability
{
CLIENT_CONNECT_WITH_DB = 0x00000008,
CLIENT_PROTOCOL_41 = 0x00000200,
CLIENT_SSL = 0x00000800,
CLIENT_TRANSACTIONS = 0x00002000, // TODO
CLIENT_SESSION_TRACK = 0x00800000, // TODO
CLIENT_SECURE_CONNECTION = 0x00008000,
CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA = 0x00200000,
CLIENT_PLUGIN_AUTH = 0x00080000,
CLIENT_DEPRECATE_EOF = 0x01000000,
};
enum Command
{
COM_SLEEP = 0x0,