Source
159
159
# include <openssl/rand.h>
160
160
#endif
161
161
162
162
typedef struct
163
163
{
164
164
#if defined(HAVE_GNUTLS)
165
165
gnutls_session_t ctx;
166
166
gnutls_psk_client_credentials_t psk_client_creds;
167
167
gnutls_psk_server_credentials_t psk_server_creds;
168
168
unsigned char psk_buf[HOST_TLS_PSK_LEN / 2];
169
+
unsigned char close_notify_received;
169
170
#elif defined(HAVE_OPENSSL)
170
171
SSL *ctx;
171
172
#if defined(HAVE_OPENSSL_WITH_PSK)
172
173
char psk_buf[HOST_TLS_PSK_LEN / 2];
173
174
int psk_len;
174
175
size_t identity_len;
175
176
#endif
176
177
#endif
177
178
} zbx_tls_context_t;
178
179
#endif
299
300
#define zbx_tcp_recv(s) SUCCEED_OR_FAIL(zbx_tcp_recv_ext(s, 0, 0))
300
301
#define zbx_tcp_recv_large(s) SUCCEED_OR_FAIL(zbx_tcp_recv_ext(s, 0, ZBX_TCP_LARGE))
301
302
#define zbx_tcp_recv_to(s, timeout) SUCCEED_OR_FAIL(zbx_tcp_recv_ext(s, timeout, 0))
302
303
#define zbx_tcp_recv_raw(s) SUCCEED_OR_FAIL(zbx_tcp_recv_raw_ext(s, 0))
303
304
304
305
ssize_t zbx_tcp_read(zbx_socket_t *s, char *buf, size_t len, short *events);
305
306
ssize_t zbx_tcp_write(zbx_socket_t *s, const char *buf, size_t len, short *event);
306
307
ssize_t zbx_tcp_recv_ext(zbx_socket_t *s, int timeout, unsigned char flags);
307
308
ssize_t zbx_tcp_recv_raw_ext(zbx_socket_t *s, int timeout);
308
309
const char *zbx_tcp_recv_line(zbx_socket_t *s);
310
+
int zbx_tcp_read_close_notify(zbx_socket_t *s, int timeout, short *events);
309
311
310
312
void zbx_tcp_recv_context_init(zbx_socket_t *s, zbx_tcp_recv_context_t *tcp_recv_context, unsigned char flags);
311
313
ssize_t zbx_tcp_recv_context(zbx_socket_t *s, zbx_tcp_recv_context_t *context, unsigned char flags, short *events);
312
314
ssize_t zbx_tcp_recv_context_raw(zbx_socket_t *s, zbx_tcp_recv_context_t *context, short *events, int once);
313
315
const char *zbx_tcp_recv_context_line(zbx_socket_t *s, zbx_tcp_recv_context_t *context, short *events);
314
316
315
317
316
318
void zbx_socket_set_deadline(zbx_socket_t *s, int timeout);
317
319
int zbx_socket_check_deadline(zbx_socket_t *s);
318
320
440
442
typedef struct
441
443
{
442
444
unsigned int connection_type;
443
445
const char *psk_identity;
444
446
size_t psk_identity_len;
445
447
char issuer[HOST_TLS_ISSUER_LEN_MAX];
446
448
char subject[HOST_TLS_SUBJECT_LEN_MAX];
447
449
}
448
450
zbx_tls_conn_attr_t;
449
451
452
+
int zbx_tls_used(const zbx_socket_t *s);
450
453
int zbx_tls_get_attr_cert(const zbx_socket_t *s, zbx_tls_conn_attr_t *attr);
451
454
int zbx_tls_get_attr_psk(const zbx_socket_t *s, zbx_tls_conn_attr_t *attr);
452
455
int zbx_tls_get_attr(const zbx_socket_t *sock, zbx_tls_conn_attr_t *attr, char **error);
453
456
int zbx_tls_validate_attr(const zbx_tls_conn_attr_t *attr, const char *tls_issuer, const char *tls_subject,
454
457
const char *tls_psk_identity, const char **msg);
455
458
int zbx_check_server_issuer_subject(const zbx_socket_t *sock, const char *allowed_issuer,
456
459
const char *allowed_subject, char **error);
457
460
unsigned int zbx_tls_get_psk_usage(void);
458
461
459
462
/* TLS BLOCK END */