redis-client 0.2.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -0
  3. data/Gemfile +1 -2
  4. data/Gemfile.lock +2 -3
  5. data/README.md +71 -8
  6. data/Rakefile +43 -23
  7. data/lib/redis_client/command_builder.rb +91 -0
  8. data/lib/redis_client/config.rb +19 -50
  9. data/lib/redis_client/connection_mixin.rb +40 -0
  10. data/lib/redis_client/decorator.rb +84 -0
  11. data/lib/redis_client/pooled.rb +38 -30
  12. data/lib/redis_client/ruby_connection/buffered_io.rb +153 -0
  13. data/lib/redis_client/{resp3.rb → ruby_connection/resp3.rb} +0 -26
  14. data/lib/redis_client/{connection.rb → ruby_connection.rb} +26 -31
  15. data/lib/redis_client/version.rb +1 -1
  16. data/lib/redis_client.rb +183 -36
  17. data/redis-client.gemspec +2 -4
  18. metadata +12 -59
  19. data/.rubocop.yml +0 -190
  20. data/ext/redis_client/hiredis/export.clang +0 -2
  21. data/ext/redis_client/hiredis/export.gcc +0 -7
  22. data/ext/redis_client/hiredis/extconf.rb +0 -61
  23. data/ext/redis_client/hiredis/hiredis_connection.c +0 -708
  24. data/ext/redis_client/hiredis/vendor/.gitignore +0 -9
  25. data/ext/redis_client/hiredis/vendor/.travis.yml +0 -131
  26. data/ext/redis_client/hiredis/vendor/CHANGELOG.md +0 -364
  27. data/ext/redis_client/hiredis/vendor/CMakeLists.txt +0 -165
  28. data/ext/redis_client/hiredis/vendor/COPYING +0 -29
  29. data/ext/redis_client/hiredis/vendor/Makefile +0 -308
  30. data/ext/redis_client/hiredis/vendor/README.md +0 -664
  31. data/ext/redis_client/hiredis/vendor/adapters/ae.h +0 -130
  32. data/ext/redis_client/hiredis/vendor/adapters/glib.h +0 -156
  33. data/ext/redis_client/hiredis/vendor/adapters/ivykis.h +0 -84
  34. data/ext/redis_client/hiredis/vendor/adapters/libev.h +0 -179
  35. data/ext/redis_client/hiredis/vendor/adapters/libevent.h +0 -175
  36. data/ext/redis_client/hiredis/vendor/adapters/libuv.h +0 -117
  37. data/ext/redis_client/hiredis/vendor/adapters/macosx.h +0 -115
  38. data/ext/redis_client/hiredis/vendor/adapters/qt.h +0 -135
  39. data/ext/redis_client/hiredis/vendor/alloc.c +0 -86
  40. data/ext/redis_client/hiredis/vendor/alloc.h +0 -91
  41. data/ext/redis_client/hiredis/vendor/appveyor.yml +0 -24
  42. data/ext/redis_client/hiredis/vendor/async.c +0 -887
  43. data/ext/redis_client/hiredis/vendor/async.h +0 -147
  44. data/ext/redis_client/hiredis/vendor/async_private.h +0 -75
  45. data/ext/redis_client/hiredis/vendor/dict.c +0 -352
  46. data/ext/redis_client/hiredis/vendor/dict.h +0 -126
  47. data/ext/redis_client/hiredis/vendor/fmacros.h +0 -12
  48. data/ext/redis_client/hiredis/vendor/hiredis-config.cmake.in +0 -13
  49. data/ext/redis_client/hiredis/vendor/hiredis.c +0 -1174
  50. data/ext/redis_client/hiredis/vendor/hiredis.h +0 -336
  51. data/ext/redis_client/hiredis/vendor/hiredis.pc.in +0 -12
  52. data/ext/redis_client/hiredis/vendor/hiredis_ssl-config.cmake.in +0 -13
  53. data/ext/redis_client/hiredis/vendor/hiredis_ssl.h +0 -157
  54. data/ext/redis_client/hiredis/vendor/hiredis_ssl.pc.in +0 -12
  55. data/ext/redis_client/hiredis/vendor/net.c +0 -612
  56. data/ext/redis_client/hiredis/vendor/net.h +0 -56
  57. data/ext/redis_client/hiredis/vendor/read.c +0 -739
  58. data/ext/redis_client/hiredis/vendor/read.h +0 -129
  59. data/ext/redis_client/hiredis/vendor/sds.c +0 -1289
  60. data/ext/redis_client/hiredis/vendor/sds.h +0 -278
  61. data/ext/redis_client/hiredis/vendor/sdsalloc.h +0 -44
  62. data/ext/redis_client/hiredis/vendor/sockcompat.c +0 -248
  63. data/ext/redis_client/hiredis/vendor/sockcompat.h +0 -92
  64. data/ext/redis_client/hiredis/vendor/ssl.c +0 -544
  65. data/ext/redis_client/hiredis/vendor/test.c +0 -1401
  66. data/ext/redis_client/hiredis/vendor/test.sh +0 -78
  67. data/ext/redis_client/hiredis/vendor/win32.h +0 -56
  68. data/lib/redis_client/buffered_io.rb +0 -151
  69. data/lib/redis_client/hiredis_connection.rb +0 -80
@@ -1,336 +0,0 @@
1
- /*
2
- * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>
3
- * Copyright (c) 2010-2014, Pieter Noordhuis <pcnoordhuis at gmail dot com>
4
- * Copyright (c) 2015, Matt Stancliff <matt at genges dot com>,
5
- * Jan-Erik Rediger <janerik at fnordig dot com>
6
- *
7
- * All rights reserved.
8
- *
9
- * Redistribution and use in source and binary forms, with or without
10
- * modification, are permitted provided that the following conditions are met:
11
- *
12
- * * Redistributions of source code must retain the above copyright notice,
13
- * this list of conditions and the following disclaimer.
14
- * * Redistributions in binary form must reproduce the above copyright
15
- * notice, this list of conditions and the following disclaimer in the
16
- * documentation and/or other materials provided with the distribution.
17
- * * Neither the name of Redis nor the names of its contributors may be used
18
- * to endorse or promote products derived from this software without
19
- * specific prior written permission.
20
- *
21
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
- * POSSIBILITY OF SUCH DAMAGE.
32
- */
33
-
34
- #ifndef __HIREDIS_H
35
- #define __HIREDIS_H
36
- #include "read.h"
37
- #include <stdarg.h> /* for va_list */
38
- #ifndef _MSC_VER
39
- #include <sys/time.h> /* for struct timeval */
40
- #else
41
- struct timeval; /* forward declaration */
42
- typedef long long ssize_t;
43
- #endif
44
- #include <stdint.h> /* uintXX_t, etc */
45
- #include "sds.h" /* for sds */
46
- #include "alloc.h" /* for allocation wrappers */
47
-
48
- #define HIREDIS_MAJOR 1
49
- #define HIREDIS_MINOR 0
50
- #define HIREDIS_PATCH 2
51
- #define HIREDIS_SONAME 1.0.0
52
-
53
- /* Connection type can be blocking or non-blocking and is set in the
54
- * least significant bit of the flags field in redisContext. */
55
- #define REDIS_BLOCK 0x1
56
-
57
- /* Connection may be disconnected before being free'd. The second bit
58
- * in the flags field is set when the context is connected. */
59
- #define REDIS_CONNECTED 0x2
60
-
61
- /* The async API might try to disconnect cleanly and flush the output
62
- * buffer and read all subsequent replies before disconnecting.
63
- * This flag means no new commands can come in and the connection
64
- * should be terminated once all replies have been read. */
65
- #define REDIS_DISCONNECTING 0x4
66
-
67
- /* Flag specific to the async API which means that the context should be clean
68
- * up as soon as possible. */
69
- #define REDIS_FREEING 0x8
70
-
71
- /* Flag that is set when an async callback is executed. */
72
- #define REDIS_IN_CALLBACK 0x10
73
-
74
- /* Flag that is set when the async context has one or more subscriptions. */
75
- #define REDIS_SUBSCRIBED 0x20
76
-
77
- /* Flag that is set when monitor mode is active */
78
- #define REDIS_MONITORING 0x40
79
-
80
- /* Flag that is set when we should set SO_REUSEADDR before calling bind() */
81
- #define REDIS_REUSEADDR 0x80
82
-
83
- /**
84
- * Flag that indicates the user does not want the context to
85
- * be automatically freed upon error
86
- */
87
- #define REDIS_NO_AUTO_FREE 0x200
88
-
89
- #define REDIS_KEEPALIVE_INTERVAL 15 /* seconds */
90
-
91
- /* number of times we retry to connect in the case of EADDRNOTAVAIL and
92
- * SO_REUSEADDR is being used. */
93
- #define REDIS_CONNECT_RETRIES 10
94
-
95
- /* Forward declarations for structs defined elsewhere */
96
- struct redisAsyncContext;
97
- struct redisContext;
98
-
99
- /* RESP3 push helpers and callback prototypes */
100
- #define redisIsPushReply(r) (((redisReply*)(r))->type == REDIS_REPLY_PUSH)
101
- typedef void (redisPushFn)(void *, void *);
102
- typedef void (redisAsyncPushFn)(struct redisAsyncContext *, void *);
103
-
104
- #ifdef __cplusplus
105
- extern "C" {
106
- #endif
107
-
108
- /* This is the reply object returned by redisCommand() */
109
- typedef struct redisReply {
110
- int type; /* REDIS_REPLY_* */
111
- long long integer; /* The integer when type is REDIS_REPLY_INTEGER */
112
- double dval; /* The double when type is REDIS_REPLY_DOUBLE */
113
- size_t len; /* Length of string */
114
- char *str; /* Used for REDIS_REPLY_ERROR, REDIS_REPLY_STRING
115
- REDIS_REPLY_VERB, and REDIS_REPLY_DOUBLE (in additional to dval). */
116
- char vtype[4]; /* Used for REDIS_REPLY_VERB, contains the null
117
- terminated 3 character content type, such as "txt". */
118
- size_t elements; /* number of elements, for REDIS_REPLY_ARRAY */
119
- struct redisReply **element; /* elements vector for REDIS_REPLY_ARRAY */
120
- } redisReply;
121
-
122
- redisReader *redisReaderCreate(void);
123
-
124
- /* Function to free the reply objects hiredis returns by default. */
125
- void freeReplyObject(void *reply);
126
-
127
- /* Functions to format a command according to the protocol. */
128
- int redisvFormatCommand(char **target, const char *format, va_list ap);
129
- int redisFormatCommand(char **target, const char *format, ...);
130
- int redisFormatCommandArgv(char **target, int argc, const char **argv, const size_t *argvlen);
131
- int redisFormatSdsCommandArgv(sds *target, int argc, const char ** argv, const size_t *argvlen);
132
- void redisFreeCommand(char *cmd);
133
- void redisFreeSdsCommand(sds cmd);
134
-
135
- enum redisConnectionType {
136
- REDIS_CONN_TCP,
137
- REDIS_CONN_UNIX,
138
- REDIS_CONN_USERFD
139
- };
140
-
141
- struct redisSsl;
142
-
143
- #define REDIS_OPT_NONBLOCK 0x01
144
- #define REDIS_OPT_REUSEADDR 0x02
145
-
146
- /**
147
- * Don't automatically free the async object on a connection failure,
148
- * or other implicit conditions. Only free on an explicit call to disconnect() or free()
149
- */
150
- #define REDIS_OPT_NOAUTOFREE 0x04
151
-
152
- /* Don't automatically intercept and free RESP3 PUSH replies. */
153
- #define REDIS_OPT_NO_PUSH_AUTOFREE 0x08
154
-
155
- /* In Unix systems a file descriptor is a regular signed int, with -1
156
- * representing an invalid descriptor. In Windows it is a SOCKET
157
- * (32- or 64-bit unsigned integer depending on the architecture), where
158
- * all bits set (~0) is INVALID_SOCKET. */
159
- #ifndef _WIN32
160
- typedef int redisFD;
161
- #define REDIS_INVALID_FD -1
162
- #else
163
- #ifdef _WIN64
164
- typedef unsigned long long redisFD; /* SOCKET = 64-bit UINT_PTR */
165
- #else
166
- typedef unsigned long redisFD; /* SOCKET = 32-bit UINT_PTR */
167
- #endif
168
- #define REDIS_INVALID_FD ((redisFD)(~0)) /* INVALID_SOCKET */
169
- #endif
170
-
171
- typedef struct {
172
- /*
173
- * the type of connection to use. This also indicates which
174
- * `endpoint` member field to use
175
- */
176
- int type;
177
- /* bit field of REDIS_OPT_xxx */
178
- int options;
179
- /* timeout value for connect operation. If NULL, no timeout is used */
180
- const struct timeval *connect_timeout;
181
- /* timeout value for commands. If NULL, no timeout is used. This can be
182
- * updated at runtime with redisSetTimeout/redisAsyncSetTimeout. */
183
- const struct timeval *command_timeout;
184
- union {
185
- /** use this field for tcp/ip connections */
186
- struct {
187
- const char *source_addr;
188
- const char *ip;
189
- int port;
190
- } tcp;
191
- /** use this field for unix domain sockets */
192
- const char *unix_socket;
193
- /**
194
- * use this field to have hiredis operate an already-open
195
- * file descriptor */
196
- redisFD fd;
197
- } endpoint;
198
-
199
- /* Optional user defined data/destructor */
200
- void *privdata;
201
- void (*free_privdata)(void *);
202
-
203
- /* A user defined PUSH message callback */
204
- redisPushFn *push_cb;
205
- redisAsyncPushFn *async_push_cb;
206
- } redisOptions;
207
-
208
- /**
209
- * Helper macros to initialize options to their specified fields.
210
- */
211
- #define REDIS_OPTIONS_SET_TCP(opts, ip_, port_) \
212
- (opts)->type = REDIS_CONN_TCP; \
213
- (opts)->endpoint.tcp.ip = ip_; \
214
- (opts)->endpoint.tcp.port = port_;
215
-
216
- #define REDIS_OPTIONS_SET_UNIX(opts, path) \
217
- (opts)->type = REDIS_CONN_UNIX; \
218
- (opts)->endpoint.unix_socket = path;
219
-
220
- #define REDIS_OPTIONS_SET_PRIVDATA(opts, data, dtor) \
221
- (opts)->privdata = data; \
222
- (opts)->free_privdata = dtor; \
223
-
224
- typedef struct redisContextFuncs {
225
- void (*free_privctx)(void *);
226
- void (*async_read)(struct redisAsyncContext *);
227
- void (*async_write)(struct redisAsyncContext *);
228
- ssize_t (*read)(struct redisContext *, char *, size_t);
229
- ssize_t (*write)(struct redisContext *);
230
- } redisContextFuncs;
231
-
232
- /* Context for a connection to Redis */
233
- typedef struct redisContext {
234
- const redisContextFuncs *funcs; /* Function table */
235
-
236
- int err; /* Error flags, 0 when there is no error */
237
- char errstr[128]; /* String representation of error when applicable */
238
- redisFD fd;
239
- int flags;
240
- char *obuf; /* Write buffer */
241
- redisReader *reader; /* Protocol reader */
242
-
243
- enum redisConnectionType connection_type;
244
- struct timeval *connect_timeout;
245
- struct timeval *command_timeout;
246
-
247
- struct {
248
- char *host;
249
- char *source_addr;
250
- int port;
251
- } tcp;
252
-
253
- struct {
254
- char *path;
255
- } unix_sock;
256
-
257
- /* For non-blocking connect */
258
- struct sockadr *saddr;
259
- size_t addrlen;
260
-
261
- /* Optional data and corresponding destructor users can use to provide
262
- * context to a given redisContext. Not used by hiredis. */
263
- void *privdata;
264
- void (*free_privdata)(void *);
265
-
266
- /* Internal context pointer presently used by hiredis to manage
267
- * SSL connections. */
268
- void *privctx;
269
-
270
- /* An optional RESP3 PUSH handler */
271
- redisPushFn *push_cb;
272
- } redisContext;
273
-
274
- redisContext *redisConnectWithOptions(const redisOptions *options);
275
- redisContext *redisConnect(const char *ip, int port);
276
- redisContext *redisConnectWithTimeout(const char *ip, int port, const struct timeval tv);
277
- redisContext *redisConnectNonBlock(const char *ip, int port);
278
- redisContext *redisConnectBindNonBlock(const char *ip, int port,
279
- const char *source_addr);
280
- redisContext *redisConnectBindNonBlockWithReuse(const char *ip, int port,
281
- const char *source_addr);
282
- redisContext *redisConnectUnix(const char *path);
283
- redisContext *redisConnectUnixWithTimeout(const char *path, const struct timeval tv);
284
- redisContext *redisConnectUnixNonBlock(const char *path);
285
- redisContext *redisConnectFd(redisFD fd);
286
-
287
- /**
288
- * Reconnect the given context using the saved information.
289
- *
290
- * This re-uses the exact same connect options as in the initial connection.
291
- * host, ip (or path), timeout and bind address are reused,
292
- * flags are used unmodified from the existing context.
293
- *
294
- * Returns REDIS_OK on successful connect or REDIS_ERR otherwise.
295
- */
296
- int redisReconnect(redisContext *c);
297
-
298
- redisPushFn *redisSetPushCallback(redisContext *c, redisPushFn *fn);
299
- int redisSetTimeout(redisContext *c, const struct timeval tv);
300
- int redisEnableKeepAlive(redisContext *c);
301
- void redisFree(redisContext *c);
302
- redisFD redisFreeKeepFd(redisContext *c);
303
- int redisBufferRead(redisContext *c);
304
- int redisBufferWrite(redisContext *c, int *done);
305
-
306
- /* In a blocking context, this function first checks if there are unconsumed
307
- * replies to return and returns one if so. Otherwise, it flushes the output
308
- * buffer to the socket and reads until it has a reply. In a non-blocking
309
- * context, it will return unconsumed replies until there are no more. */
310
- int redisGetReply(redisContext *c, void **reply);
311
- int redisGetReplyFromReader(redisContext *c, void **reply);
312
-
313
- /* Write a formatted command to the output buffer. Use these functions in blocking mode
314
- * to get a pipeline of commands. */
315
- int redisAppendFormattedCommand(redisContext *c, const char *cmd, size_t len);
316
-
317
- /* Write a command to the output buffer. Use these functions in blocking mode
318
- * to get a pipeline of commands. */
319
- int redisvAppendCommand(redisContext *c, const char *format, va_list ap);
320
- int redisAppendCommand(redisContext *c, const char *format, ...);
321
- int redisAppendCommandArgv(redisContext *c, int argc, const char **argv, const size_t *argvlen);
322
-
323
- /* Issue a command to Redis. In a blocking context, it is identical to calling
324
- * redisAppendCommand, followed by redisGetReply. The function will return
325
- * NULL if there was an error in performing the request, otherwise it will
326
- * return the reply. In a non-blocking context, it is identical to calling
327
- * only redisAppendCommand and will always return NULL. */
328
- void *redisvCommand(redisContext *c, const char *format, va_list ap);
329
- void *redisCommand(redisContext *c, const char *format, ...);
330
- void *redisCommandArgv(redisContext *c, int argc, const char **argv, const size_t *argvlen);
331
-
332
- #ifdef __cplusplus
333
- }
334
- #endif
335
-
336
- #endif
@@ -1,12 +0,0 @@
1
- prefix=@CMAKE_INSTALL_PREFIX@
2
- install_libdir=@CMAKE_INSTALL_LIBDIR@
3
- exec_prefix=${prefix}
4
- libdir=${exec_prefix}/${install_libdir}
5
- includedir=${prefix}/include
6
- pkgincludedir=${includedir}/hiredis
7
-
8
- Name: hiredis
9
- Description: Minimalistic C client library for Redis.
10
- Version: @PROJECT_VERSION@
11
- Libs: -L${libdir} -lhiredis
12
- Cflags: -I${pkgincludedir} -D_FILE_OFFSET_BITS=64
@@ -1,13 +0,0 @@
1
- @PACKAGE_INIT@
2
-
3
- set_and_check(hiredis_ssl_INCLUDEDIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
4
-
5
- IF (NOT TARGET hiredis::hiredis_ssl)
6
- INCLUDE(${CMAKE_CURRENT_LIST_DIR}/hiredis_ssl-targets.cmake)
7
- ENDIF()
8
-
9
- SET(hiredis_ssl_LIBRARIES hiredis::hiredis_ssl)
10
- SET(hiredis_ssl_INCLUDE_DIRS ${hiredis_ssl_INCLUDEDIR})
11
-
12
- check_required_components(hiredis_ssl)
13
-
@@ -1,157 +0,0 @@
1
-
2
- /*
3
- * Copyright (c) 2019, Redis Labs
4
- *
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
- * * Redistributions of source code must retain the above copyright notice,
11
- * this list of conditions and the following disclaimer.
12
- * * Redistributions in binary form must reproduce the above copyright
13
- * notice, this list of conditions and the following disclaimer in the
14
- * documentation and/or other materials provided with the distribution.
15
- * * Neither the name of Redis nor the names of its contributors may be used
16
- * to endorse or promote products derived from this software without
17
- * specific prior written permission.
18
- *
19
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
- * POSSIBILITY OF SUCH DAMAGE.
30
- */
31
-
32
- #ifndef __HIREDIS_SSL_H
33
- #define __HIREDIS_SSL_H
34
-
35
- #include <openssl/ssl.h>
36
-
37
- #ifdef __cplusplus
38
- extern "C" {
39
- #endif
40
-
41
- /* This is the underlying struct for SSL in ssl.h, which is not included to
42
- * keep build dependencies short here.
43
- */
44
- struct ssl_st;
45
-
46
- /* A wrapper around OpenSSL SSL_CTX to allow easy SSL use without directly
47
- * calling OpenSSL.
48
- */
49
- typedef struct redisSSLContext redisSSLContext;
50
-
51
- /* The SSL connection context is attached to SSL/TLS connections as a privdata. */
52
- typedef struct redisSSL {
53
- /**
54
- * OpenSSL SSL object.
55
- */
56
- SSL *ssl;
57
-
58
- /**
59
- * SSL_write() requires to be called again with the same arguments it was
60
- * previously called with in the event of an SSL_read/SSL_write situation
61
- */
62
- size_t lastLen;
63
-
64
- /** Whether the SSL layer requires read (possibly before a write) */
65
- int wantRead;
66
-
67
- /**
68
- * Whether a write was requested prior to a read. If set, the write()
69
- * should resume whenever a read takes place, if possible
70
- */
71
- int pendingWrite;
72
- } redisSSL;
73
-
74
- /**
75
- * Initialization errors that redisCreateSSLContext() may return.
76
- */
77
-
78
- typedef enum {
79
- REDIS_SSL_CTX_NONE = 0, /* No Error */
80
- REDIS_SSL_CTX_CREATE_FAILED, /* Failed to create OpenSSL SSL_CTX */
81
- REDIS_SSL_CTX_CERT_KEY_REQUIRED, /* Client cert and key must both be specified or skipped */
82
- REDIS_SSL_CTX_CA_CERT_LOAD_FAILED, /* Failed to load CA Certificate or CA Path */
83
- REDIS_SSL_CTX_CLIENT_CERT_LOAD_FAILED, /* Failed to load client certificate */
84
- REDIS_SSL_CTX_PRIVATE_KEY_LOAD_FAILED /* Failed to load private key */
85
- } redisSSLContextError;
86
-
87
- /**
88
- * Return the error message corresponding with the specified error code.
89
- */
90
-
91
- const char *redisSSLContextGetError(redisSSLContextError error);
92
-
93
- /**
94
- * Helper function to initialize the OpenSSL library.
95
- *
96
- * OpenSSL requires one-time initialization before it can be used. Callers should
97
- * call this function only once, and only if OpenSSL is not directly initialized
98
- * elsewhere.
99
- */
100
- int redisInitOpenSSL(void);
101
-
102
- /**
103
- * Helper function to initialize an OpenSSL context that can be used
104
- * to initiate SSL connections.
105
- *
106
- * cacert_filename is an optional name of a CA certificate/bundle file to load
107
- * and use for validation.
108
- *
109
- * capath is an optional directory path where trusted CA certificate files are
110
- * stored in an OpenSSL-compatible structure.
111
- *
112
- * cert_filename and private_key_filename are optional names of a client side
113
- * certificate and private key files to use for authentication. They need to
114
- * be both specified or omitted.
115
- *
116
- * server_name is an optional and will be used as a server name indication
117
- * (SNI) TLS extension.
118
- *
119
- * If error is non-null, it will be populated in case the context creation fails
120
- * (returning a NULL).
121
- */
122
-
123
- redisSSLContext *redisCreateSSLContext(const char *cacert_filename, const char *capath,
124
- const char *cert_filename, const char *private_key_filename,
125
- const char *server_name, redisSSLContextError *error);
126
-
127
- /**
128
- * Free a previously created OpenSSL context.
129
- */
130
- void redisFreeSSLContext(redisSSLContext *redis_ssl_ctx);
131
-
132
- /**
133
- * Initiate SSL on an existing redisContext.
134
- *
135
- * This is similar to redisInitiateSSL() but does not require the caller
136
- * to directly interact with OpenSSL, and instead uses a redisSSLContext
137
- * previously created using redisCreateSSLContext().
138
- */
139
-
140
- int redisInitiateSSLWithContext(redisContext *c, redisSSLContext *redis_ssl_ctx);
141
-
142
- int redisInitiateSSLContinue(redisContext *c);
143
-
144
- /**
145
- * Initiate SSL/TLS negotiation on a provided OpenSSL SSL object.
146
- */
147
-
148
- int redisInitiateSSL(redisContext *c, struct ssl_st *ssl);
149
-
150
-
151
- redisSSL *redisGetSSLSocket(redisContext *c);
152
-
153
- #ifdef __cplusplus
154
- }
155
- #endif
156
-
157
- #endif /* __HIREDIS_SSL_H */
@@ -1,12 +0,0 @@
1
- prefix=@CMAKE_INSTALL_PREFIX@
2
- exec_prefix=${prefix}
3
- libdir=${exec_prefix}/lib
4
- includedir=${prefix}/include
5
- pkgincludedir=${includedir}/hiredis
6
-
7
- Name: hiredis_ssl
8
- Description: SSL Support for hiredis.
9
- Version: @PROJECT_VERSION@
10
- Requires: hiredis
11
- Libs: -L${libdir} -lhiredis_ssl
12
- Libs.private: -lssl -lcrypto