6 #include <gio/gunixsocketaddress.h>
11 static GSocket *status_socket = NULL;
12 static StatusRequestFunc request_func = NULL;
15 status_request_cb (GSocket *socket, GIOCondition condition, gpointer data)
22 n_read = g_socket_receive (socket, (gchar *)&length, sizeof (length), NULL, &error);
24 n_read = g_socket_receive (socket, buffer, length, NULL, &error);
32 g_warning ("Error reading from socket: %s", error->message);
33 g_clear_error (&error);
35 if (n_read > 0 && request_func)
37 buffer[n_read] = '\0';
38 request_func (buffer);
45 status_connect (StatusRequestFunc request_cb)
48 GSocketAddress *address;
53 request_func = request_cb;
55 status_socket = g_socket_new (G_SOCKET_FAMILY_UNIX, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, &error);
57 g_printerr ("Unable to open socket for status: %s\n", error->message);
58 g_clear_error (&error);
62 path = g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), ".status-socket", NULL);
63 address = g_unix_socket_address_new (path);
64 result = g_socket_connect (status_socket, address, NULL, &error);
65 g_object_unref (address);
67 g_printerr ("Failed to connect to status socket %s: %s\n", path, error->message);
68 g_clear_error (&error);
73 source = g_socket_create_source (status_socket, G_IO_IN, NULL);
74 g_source_set_callback (source, (GSourceFunc) status_request_cb, NULL, NULL);
75 g_source_attach (source, NULL);
79 status_notify (const gchar *format, ...)
84 va_start (ap, format);
85 vsnprintf (status, 1024, format, ap);
93 length = strlen (status);
94 g_socket_send (status_socket, (gchar *) &length, sizeof (length), NULL, &error);
95 g_socket_send (status_socket, status, strlen (status), NULL, &error);
97 g_printerr ("Failed to write to status socket: %s\n", error->message);
98 g_clear_error (&error);
101 g_printerr ("%s\n", status);