1/*
2 * librdkafka - Apache Kafka C library
3 *
4 * Copyright (c) 2015, Magnus Edenhill
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright notice,
11 * this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright notice,
13 * this list of conditions and the following disclaimer in the documentation
14 * and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 */
28#ifndef _RDKAFKA_TRANSPORT_INT_H_
29#define _RDKAFKA_TRANSPORT_INT_H_
30
31/* This header file is to be used by .c files needing access to the
32 * rd_kafka_transport_t struct internals. */
33
34#include "rdkafka_sasl.h"
35
36#if WITH_SSL
37#include <openssl/ssl.h>
38#include <openssl/err.h>
39#include <openssl/pkcs12.h>
40#endif
41
42#ifdef _MSC_VER
43#define socket_errno WSAGetLastError()
44#else
45#include <sys/socket.h>
46#include <netinet/tcp.h>
47#define socket_errno errno
48#define SOCKET_ERROR -1
49#endif
50
51struct rd_kafka_transport_s {
52 int rktrans_s;
53 rd_kafka_broker_t *rktrans_rkb;
54
55#if WITH_SSL
56 SSL *rktrans_ssl;
57#endif
58
59 struct {
60 void *state; /* SASL implementation
61 * state handle */
62
63 int complete; /* Auth was completed early
64 * from the client's perspective
65 * (but we might still have to
66 * wait for server reply). */
67
68 /* SASL framing buffers */
69 struct msghdr msg;
70 struct iovec iov[2];
71
72 char *recv_buf;
73 int recv_of; /* Received byte count */
74 int recv_len; /* Expected receive length for
75 * current frame. */
76 } rktrans_sasl;
77
78 rd_kafka_buf_t *rktrans_recv_buf; /* Used with framed_recvmsg */
79
80 /* Two pollable fds:
81 * - TCP socket
82 * - wake-up fd
83 */
84#ifndef _MSC_VER
85 struct pollfd rktrans_pfd[2];
86#else
87 WSAPOLLFD rktrans_pfd[2];
88#endif
89 int rktrans_pfd_cnt;
90
91 size_t rktrans_rcvbuf_size; /**< Socket receive buffer size */
92 size_t rktrans_sndbuf_size; /**< Socket send buffer size */
93};
94
95
96extern RD_TLS rd_kafka_transport_t *rd_kafka_curr_transport;
97
98#endif /* _RDKAFKA_TRANSPORT_INT_H_ */
99