view files/patch-src_apps_common_hiredis__libevent2.c @ 4:9a1ee735f28f

Patch to allow redis connections by a Unix socket. Also document the new "socket" keyword for redis connections in the example configuration file.
author Franz Glasner <fzglas.hg@dom66.de>
date Fri, 27 Mar 2020 15:07:57 +0100
parents
children 4a6383e57d12
line wrap: on
line source

--- src/apps/common/hiredis_libevent2.c.orig	2019-03-02 21:06:19 UTC
+++ src/apps/common/hiredis_libevent2.c
@@ -55,6 +55,7 @@ struct redisLibeventEvents
 	char *ip;
 	int port;
 	char *pwd;
+	char *usocket;
 	int db;
 };
 
@@ -223,12 +224,13 @@ void send_message_to_redis(redis_context_handle rch, c
 
 ///////////////////////// Attach /////////////////////////////////
 
-redis_context_handle redisLibeventAttach(struct event_base *base, char *ip0, int port0, char *pwd, int db)
+redis_context_handle redisLibeventAttach(struct event_base *base, char *ip0, int port0, char *pwd, char *usocket, int db)
 {
 
   struct redisLibeventEvents *e = NULL;
   redisAsyncContext *ac = NULL;
 
+  char sockpath[256] = "\0";
   char ip[256];
   if(ip0 && ip0[0])
 	  STRCPY(ip,ip0);
@@ -239,7 +241,14 @@ redis_context_handle redisLibeventAttach(struct event_
   if(port0>0)
 	  port=port0;
 
-  ac = redisAsyncConnect(ip, port);
+  if(usocket)
+	  STRCPY(sockpath, usocket);
+
+  if(usocket) {
+	ac = redisAsyncConnectUnix(sockpath);
+  } else {
+	ac = redisAsyncConnect(ip, port);
+  }
   if (!ac) {
   	fprintf(stderr,"Error: %s:%s\n", ac->errstr, ac->c.errstr);
   	return NULL;
@@ -256,6 +265,11 @@ redis_context_handle redisLibeventAttach(struct event_
   e->port = port;
   if(pwd)
 	  e->pwd = turn_strdup(pwd);
+  if (usocket) {
+	  e->usocket = turn_strdup(usocket);
+  } else {
+	  e->usocket = NULL;
+  }
   e->db = db;
 
   /* Register functions to start/stop listening for events */
@@ -277,6 +291,7 @@ redis_context_handle redisLibeventAttach(struct event_
   		     e);
 
   if (e->rev == NULL || e->wev == NULL) {
+	  /* XXX FIXME TBD: free e->ip, e->pwd, e->usocket */
 	  turn_free(e, sizeof(struct redisLibeventEvents));
 	  return NULL;
   }
@@ -327,7 +342,11 @@ static void redis_reconnect(struct redisLibeventEvents
 	  e->context = NULL;
   }
 
-  ac = redisAsyncConnect(e->ip, e->port);
+  if(e->usocket) {
+	ac = redisAsyncConnectUnix(e->usocket);
+  } else {
+	ac = redisAsyncConnect(e->ip, e->port);
+  }
   if(!ac) {
 	  return;
   }