1 /*
2 ** Zabbix
3 ** Copyright (C) 2001-2021 Zabbix SIA
4 **
5 ** This program is free software; you can redistribute it and/or modify
6 ** it under the terms of the GNU General Public License as published by
7 ** the Free Software Foundation; either version 2 of the License, or
8 ** (at your option) any later version.
9 **
10 ** This program is distributed in the hope that it will be useful,
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 ** GNU General Public License for more details.
14 **
15 ** You should have received a copy of the GNU General Public License
16 ** along with this program; if not, write to the Free Software
17 ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 **/
19
20 #include "common.h"
21 #include "zbxserialize.h"
22 #include "db.h"
23
zbx_db_mediatype_clean(DB_MEDIATYPE * mt)24 void zbx_db_mediatype_clean(DB_MEDIATYPE *mt)
25 {
26 zbx_free(mt->smtp_server);
27 zbx_free(mt->smtp_helo);
28 zbx_free(mt->smtp_email);
29 zbx_free(mt->exec_path);
30 zbx_free(mt->gsm_modem);
31 zbx_free(mt->username);
32 zbx_free(mt->passwd);
33 zbx_free(mt->exec_params);
34 zbx_free(mt->attempt_interval);
35 zbx_free(mt->script);
36 zbx_free(mt->timeout);
37 }
38
zbx_serialize_mediatype(unsigned char ** data,zbx_uint32_t * data_alloc,zbx_uint32_t * data_offset,const DB_MEDIATYPE * mt)39 void zbx_serialize_mediatype(unsigned char **data, zbx_uint32_t *data_alloc, zbx_uint32_t *data_offset,
40 const DB_MEDIATYPE *mt)
41 {
42 zbx_uint32_t data_len = 0, smtp_server_len, smtp_helo_len, smtp_email_len, exec_path_len, gsm_modem_len,
43 username_len, passwd_len, exec_params_len, script_len, attempt_interval_len, timeout_len;
44 unsigned char *ptr, type = mt->type;
45
46 zbx_serialize_prepare_value(data_len, mt->mediatypeid);
47 zbx_serialize_prepare_value(data_len, type);
48 zbx_serialize_prepare_str_len(data_len, mt->smtp_server, smtp_server_len);
49 zbx_serialize_prepare_str_len(data_len, mt->smtp_helo, smtp_helo_len);
50 zbx_serialize_prepare_str_len(data_len, mt->smtp_email, smtp_email_len);
51 zbx_serialize_prepare_str_len(data_len, mt->exec_path, exec_path_len);
52 zbx_serialize_prepare_str_len(data_len, mt->gsm_modem, gsm_modem_len);
53 zbx_serialize_prepare_str_len(data_len, mt->username, username_len);
54 zbx_serialize_prepare_str_len(data_len, mt->passwd, passwd_len);
55 zbx_serialize_prepare_value(data_len, mt->smtp_port);
56 zbx_serialize_prepare_value(data_len, mt->smtp_security);
57 zbx_serialize_prepare_value(data_len, mt->smtp_verify_peer);
58 zbx_serialize_prepare_value(data_len, mt->smtp_verify_host);
59 zbx_serialize_prepare_value(data_len, mt->smtp_authentication);
60 zbx_serialize_prepare_str_len(data_len, mt->exec_params, exec_params_len);
61 zbx_serialize_prepare_value(data_len, mt->maxsessions);
62 zbx_serialize_prepare_value(data_len, mt->maxattempts);
63 zbx_serialize_prepare_str_len(data_len, mt->attempt_interval, attempt_interval_len);
64 zbx_serialize_prepare_value(data_len, mt->content_type);
65 zbx_serialize_prepare_str_len(data_len, mt->script, script_len);
66 zbx_serialize_prepare_str_len(data_len, mt->timeout, timeout_len);
67
68 while (data_len > *data_alloc - *data_offset)
69 {
70 *data_alloc *= 2;
71 *data = (unsigned char *)zbx_realloc(*data, *data_alloc);
72 }
73
74 ptr = *data + *data_offset;
75 ptr += zbx_serialize_value(ptr, mt->mediatypeid);
76 ptr += zbx_serialize_value(ptr, type);
77 ptr += zbx_serialize_str(ptr, mt->smtp_server, smtp_server_len);
78 ptr += zbx_serialize_str(ptr, mt->smtp_helo, smtp_helo_len);
79 ptr += zbx_serialize_str(ptr, mt->smtp_email, smtp_email_len);
80 ptr += zbx_serialize_str(ptr, mt->exec_path, exec_path_len);
81 ptr += zbx_serialize_str(ptr, mt->gsm_modem, gsm_modem_len);
82 ptr += zbx_serialize_str(ptr, mt->username, username_len);
83 ptr += zbx_serialize_str(ptr, mt->passwd, passwd_len);
84 ptr += zbx_serialize_value(ptr, mt->smtp_port);
85 ptr += zbx_serialize_value(ptr, mt->smtp_security);
86 ptr += zbx_serialize_value(ptr, mt->smtp_verify_peer);
87 ptr += zbx_serialize_value(ptr, mt->smtp_verify_host);
88 ptr += zbx_serialize_value(ptr, mt->smtp_authentication);
89 ptr += zbx_serialize_str(ptr, mt->exec_params, exec_params_len);
90 ptr += zbx_serialize_value(ptr, mt->maxsessions);
91 ptr += zbx_serialize_value(ptr, mt->maxattempts);
92 ptr += zbx_serialize_str(ptr, mt->attempt_interval, attempt_interval_len);
93 ptr += zbx_serialize_value(ptr, mt->content_type);
94 ptr += zbx_serialize_str(ptr, mt->script, script_len);
95 (void)zbx_serialize_str(ptr, mt->timeout, timeout_len);
96
97 *data_offset += data_len;
98 }
99
zbx_deserialize_mediatype(const unsigned char * data,DB_MEDIATYPE * mt)100 zbx_uint32_t zbx_deserialize_mediatype(const unsigned char *data, DB_MEDIATYPE *mt)
101 {
102 zbx_uint32_t len;
103 const unsigned char *start = data;
104 unsigned char type;
105
106 data += zbx_deserialize_value(data, &mt->mediatypeid);
107 data += zbx_deserialize_value(data, &type);
108 data += zbx_deserialize_str(data, &mt->smtp_server, len);
109 data += zbx_deserialize_str(data, &mt->smtp_helo, len);
110 data += zbx_deserialize_str(data, &mt->smtp_email, len);
111 data += zbx_deserialize_str(data, &mt->exec_path, len);
112 data += zbx_deserialize_str(data, &mt->gsm_modem, len);
113 data += zbx_deserialize_str(data, &mt->username, len);
114 data += zbx_deserialize_str(data, &mt->passwd, len);
115 data += zbx_deserialize_value(data, &mt->smtp_port);
116 data += zbx_deserialize_value(data, &mt->smtp_security);
117 data += zbx_deserialize_value(data, &mt->smtp_verify_peer);
118 data += zbx_deserialize_value(data, &mt->smtp_verify_host);
119 data += zbx_deserialize_value(data, &mt->smtp_authentication);
120 data += zbx_deserialize_str(data, &mt->exec_params, len);
121 data += zbx_deserialize_value(data, &mt->maxsessions);
122 data += zbx_deserialize_value(data, &mt->maxattempts);
123 data += zbx_deserialize_str(data, &mt->attempt_interval, len);
124 data += zbx_deserialize_value(data, &mt->content_type);
125 data += zbx_deserialize_str(data, &mt->script, len);
126 data += zbx_deserialize_str(data, &mt->timeout, len);
127
128 mt->type = type;
129
130 return (zbx_uint32_t)(data - start);
131 }
132