aboutsummaryrefslogtreecommitdiffstats
path: root/ipc.c
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2006-03-01 22:08:03 +0100
committerJelmer Vernooij <jelmer@samba.org>2006-03-01 22:08:03 +0100
commit6dff9d4ac2cbd279e25db60ae26086c830764682 (patch)
treeca6c7a8919b7084141ccd4ec5732cc34b374cb37 /ipc.c
parent7cf85e77cf36c2d582fad168996825aae82c9b85 (diff)
Also listen for admin connections on a unix domain socket at /var/run/bitlbee
Diffstat (limited to 'ipc.c')
-rw-r--r--ipc.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/ipc.c b/ipc.c
index 778f74c8..b05958ae 100644
--- a/ipc.c
+++ b/ipc.c
@@ -27,6 +27,9 @@
#include "bitlbee.h"
#include "ipc.h"
#include "commands.h"
+#ifndef _WIN32
+#include <sys/un.h>
+#endif
GSList *child_list = NULL;
static char *statefile = NULL;
@@ -456,6 +459,51 @@ void ipc_master_set_statefile( char *fn )
statefile = g_strdup( fn );
}
+
+static gboolean new_ipc_client (GIOChannel *gio, GIOCondition cond, gpointer data)
+{
+ struct bitlbee_child *child = g_new0( struct bitlbee_child, 1 );
+ int serversock;
+
+ serversock = g_io_channel_unix_get_fd(gio);
+
+ child->ipc_fd = accept(serversock, NULL, 0);
+
+ child->ipc_inpa = gaim_input_add( child->ipc_fd, GAIM_INPUT_READ, ipc_master_read, child );
+
+ child_list = g_slist_append( child_list, child );
+
+ return TRUE;
+}
+
+#ifndef _WIN32
+int ipc_master_listen_socket()
+{
+ struct sockaddr_un un_addr;
+ int serversock;
+ GIOChannel *gio;
+
+ /* Clean up old socket files that were hanging around.. */
+ unlink(IPCSOCKET);
+
+ un_addr.sun_family = AF_UNIX;
+ strcpy(un_addr.sun_path, IPCSOCKET);
+
+ serversock = socket(AF_UNIX, SOCK_STREAM, PF_UNIX);
+
+ bind(serversock, &un_addr, sizeof(un_addr));
+
+ listen(serversock, 5);
+
+ gio = g_io_channel_unix_new(serversock);
+
+ g_io_add_watch(gio, G_IO_IN, new_ipc_client, NULL);
+ return 1;
+}
+#else
+ /* FIXME: Open named pipe \\.\BITLBEE */
+#endif
+
int ipc_master_load_state()
{
struct bitlbee_child *child;