123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <signal.h>
- #include <hiredis.h>
- #include <hiredis_ssl.h>
- #include <async.h>
- #include <adapters/libevent.h>
- void getCallback(redisAsyncContext *c, void *r, void *privdata) {
- redisReply *reply = r;
- if (reply == NULL) return;
- printf("argv[%s]: %s\n", (char*)privdata, reply->str);
- /* Disconnect after receiving the reply to GET */
- redisAsyncDisconnect(c);
- }
- void connectCallback(const redisAsyncContext *c, int status) {
- if (status != REDIS_OK) {
- printf("Error: %s\n", c->errstr);
- return;
- }
- printf("Connected...\n");
- }
- void disconnectCallback(const redisAsyncContext *c, int status) {
- if (status != REDIS_OK) {
- printf("Error: %s\n", c->errstr);
- return;
- }
- printf("Disconnected...\n");
- }
- int main (int argc, char **argv) {
- #ifndef _WIN32
- signal(SIGPIPE, SIG_IGN);
- #endif
- struct event_base *base = event_base_new();
- if (argc < 5) {
- fprintf(stderr,
- "Usage: %s <key> <host> <port> <cert> <certKey> [ca]\n", argv[0]);
- exit(1);
- }
- const char *value = argv[1];
- size_t nvalue = strlen(value);
- const char *hostname = argv[2];
- int port = atoi(argv[3]);
- const char *cert = argv[4];
- const char *certKey = argv[5];
- const char *caCert = argc > 5 ? argv[6] : NULL;
- redisSSLContext *ssl;
- redisSSLContextError ssl_error;
- redisInitOpenSSL();
- ssl = redisCreateSSLContext(caCert, NULL,
- cert, certKey, NULL, &ssl_error);
- if (!ssl) {
- printf("Error: %s\n", redisSSLContextGetError(ssl_error));
- return 1;
- }
- redisAsyncContext *c = redisAsyncConnect(hostname, port);
- if (c->err) {
- /* Let *c leak for now... */
- printf("Error: %s\n", c->errstr);
- return 1;
- }
- if (redisInitiateSSLWithContext(&c->c, ssl) != REDIS_OK) {
- printf("SSL Error!\n");
- exit(1);
- }
- redisLibeventAttach(c,base);
- redisAsyncSetConnectCallback(c,connectCallback);
- redisAsyncSetDisconnectCallback(c,disconnectCallback);
- redisAsyncCommand(c, NULL, NULL, "SET key %b", value, nvalue);
- redisAsyncCommand(c, getCallback, (char*)"end-1", "GET key");
- event_base_dispatch(base);
- redisFreeSSLContext(ssl);
- return 0;
- }
|