rbdc_mysql/protocol/connect/
ssl_request.rs

1use crate::protocol::Capabilities;
2use rbdc::io::Encode;
3
4// https://dev.mysql.com/doc/dev/mysql-server/8.0.12/page_protocol_connection_phase_packets_protocol_handshake_response.html
5// https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::SSLRequest
6
7#[derive(Debug)]
8pub struct SslRequest {
9    pub max_packet_size: u32,
10    pub collation: u8,
11}
12
13impl Encode<'_, Capabilities> for SslRequest {
14    fn encode_with(&self, buf: &mut Vec<u8>, capabilities: Capabilities) {
15        buf.extend(&(capabilities.bits() as u32).to_le_bytes());
16        buf.extend(&self.max_packet_size.to_le_bytes());
17        buf.push(self.collation);
18
19        // reserved: string<19>
20        buf.extend(&[0_u8; 19]);
21
22        if capabilities.contains(Capabilities::MYSQL) {
23            // reserved: string<4>
24            buf.extend(&[0_u8; 4]);
25        } else {
26            // extended client capabilities (MariaDB-specified): int<4>
27            buf.extend(&((capabilities.bits() >> 32) as u32).to_le_bytes());
28        }
29    }
30}