2
Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.
4
This program is free software; you can redistribute it and/or
5
modify it under the terms of the GNU General Public License as
6
published by the Free Software Foundation; version 2 of the
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
GNU General Public License for more details.
14
You should have received a copy of the GNU General Public License
15
along with this program; if not, write to the Free Software
16
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
23
#include "network-mysqld-masterinfo.h"
25
#define C(x) x, sizeof(x) - 1
26
#define S(x) x->str, x->len
28
network_mysqld_masterinfo_t * network_mysqld_masterinfo_new(void) {
29
network_mysqld_masterinfo_t *info;
31
info = g_new0(network_mysqld_masterinfo_t, 1);
33
info->master_log_file = g_string_new(NULL);
34
info->master_host = g_string_new(NULL);
35
info->master_user = g_string_new(NULL);
36
info->master_password = g_string_new(NULL);
38
info->master_ssl_ca = g_string_new(NULL);
39
info->master_ssl_capath = g_string_new(NULL);
40
info->master_ssl_cert = g_string_new(NULL);
41
info->master_ssl_cipher = g_string_new(NULL);
42
info->master_ssl_key = g_string_new(NULL);
47
void network_mysqld_masterinfo_free(network_mysqld_masterinfo_t *info) {
50
g_string_free(info->master_log_file, TRUE);
51
g_string_free(info->master_host, TRUE);
52
g_string_free(info->master_user, TRUE);
53
g_string_free(info->master_password, TRUE);
55
g_string_free(info->master_ssl_ca, TRUE);
56
g_string_free(info->master_ssl_capath, TRUE);
57
g_string_free(info->master_ssl_cert, TRUE);
58
g_string_free(info->master_ssl_cipher, TRUE);
59
g_string_free(info->master_ssl_key, TRUE);
65
* get \n terminated strings
68
static int network_mysqld_masterinfo_get_string(network_packet *packet, GString *str) {
71
g_return_val_if_fail(packet, -1);
72
g_return_val_if_fail(str, -1);
74
for (i = packet->offset; i < packet->data->len; i++) {
75
const char c = packet->data->str[i];
80
if (packet->data->str[i] == '\n') {
81
g_string_assign_len(str, packet->data->str + packet->offset, i - packet->offset);
83
packet->offset = i + 1; /* start the next string after our \n */
91
static int network_mysqld_masterinfo_get_int32(network_packet *packet, guint32 *_i) {
95
s = g_string_new(NULL);
96
err = err || network_mysqld_masterinfo_get_string(packet, s);
101
i = strtoul(s->str, &errptr, 0);
103
err = err || (*errptr != '\0');
108
g_string_free(s, TRUE);
114
* get the master-info structure from the internal representation
116
int network_mysqld_masterinfo_get(network_packet *packet, network_mysqld_masterinfo_t *info) {
119
g_return_val_if_fail(info, -1);
120
g_return_val_if_fail(packet, -1);
122
/*err = err || network_mysqld_masterinfo_get_int32(packet, &lines);*/
123
/*info->master_lines = lines;*/
124
err = err || network_mysqld_masterinfo_get_int32(packet, &(info->master_lines));
125
err = err || network_mysqld_masterinfo_get_string(packet, info->master_log_file);
126
err = err || network_mysqld_masterinfo_get_int32(packet, &(info->master_log_pos));
127
err = err || network_mysqld_masterinfo_get_string(packet, info->master_host);
128
err = err || network_mysqld_masterinfo_get_string(packet, info->master_user);
129
err = err || network_mysqld_masterinfo_get_string(packet, info->master_password);
130
err = err || network_mysqld_masterinfo_get_int32(packet, &(info->master_port));
131
err = err || network_mysqld_masterinfo_get_int32(packet, &(info->master_connect_retry));
132
err = err || network_mysqld_masterinfo_get_int32(packet, &(info->master_ssl));
133
err = err || network_mysqld_masterinfo_get_string(packet, info->master_ssl_ca);
134
err = err || network_mysqld_masterinfo_get_string(packet, info->master_ssl_capath);
135
err = err || network_mysqld_masterinfo_get_string(packet, info->master_ssl_cert);
136
err = err || network_mysqld_masterinfo_get_string(packet, info->master_ssl_cipher);
137
err = err || network_mysqld_masterinfo_get_string(packet, info->master_ssl_key);
138
if (info->master_lines >= 15) {
139
err = err || network_mysqld_masterinfo_get_int32(packet, &(info->master_ssl_verify_server_cert));
144
static int network_mysqld_masterinfo_append_string(GString *packet, GString *s) {
145
g_string_append_len(packet, S(s));
146
g_string_append_c(packet, '\n');
151
static int network_mysqld_masterinfo_append_int32(GString *packet, guint32 i) {
152
g_string_append_printf(packet, "%"G_GUINT32_FORMAT"\n", i);
158
int network_mysqld_masterinfo_append(GString *packet, network_mysqld_masterinfo_t *info) {
161
g_return_val_if_fail(info, -1);
162
g_return_val_if_fail(packet, -1);
164
err = err || network_mysqld_masterinfo_append_int32(packet, info->master_lines);
165
err = err || network_mysqld_masterinfo_append_string(packet, info->master_log_file);
166
err = err || network_mysqld_masterinfo_append_int32(packet, info->master_log_pos);
167
err = err || network_mysqld_masterinfo_append_string(packet, info->master_host);
168
err = err || network_mysqld_masterinfo_append_string(packet, info->master_user);
169
err = err || network_mysqld_masterinfo_append_string(packet, info->master_password);
170
err = err || network_mysqld_masterinfo_append_int32(packet, info->master_port);
171
err = err || network_mysqld_masterinfo_append_int32(packet, info->master_connect_retry);
172
err = err || network_mysqld_masterinfo_append_int32(packet, info->master_ssl);
173
err = err || network_mysqld_masterinfo_append_string(packet, info->master_ssl_ca);
174
err = err || network_mysqld_masterinfo_append_string(packet, info->master_ssl_capath);
175
err = err || network_mysqld_masterinfo_append_string(packet, info->master_ssl_cert);
176
err = err || network_mysqld_masterinfo_append_string(packet, info->master_ssl_cipher);
177
err = err || network_mysqld_masterinfo_append_string(packet, info->master_ssl_key);
178
if (info->master_lines >= 15) {
179
err = err || network_mysqld_masterinfo_append_int32(packet, info->master_ssl_verify_server_cert);