5 #include <gio/gunixsocketaddress.h>
9 static GSocket *status_socket = NULL;
10 static StatusRequestFunc request_func = NULL;
13 status_request_cb (GSocket *socket, GIOCondition condition, gpointer data)
20 n_read = g_socket_receive (socket, (gchar *)&length, sizeof (length), NULL, &error);
22 n_read = g_socket_receive (socket, buffer, length, NULL, &error);
26 g_warning ("Error reading from socket: %s", error->message);
27 g_clear_error (&error);
29 if (n_read > 0 && request_func)
31 buffer[n_read] = '\0';
32 request_func (buffer);
39 status_connect (StatusRequestFunc request_cb)
42 GSocketAddress *address;
47 request_func = request_cb;
49 path = g_getenv ("LIGHTDM_TEST_STATUS_SOCKET");
52 g_printerr ("LIGHTDM_TEST_STATUS_SOCKET not defined\n");
56 status_socket = g_socket_new (G_SOCKET_FAMILY_UNIX, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, &error);
58 g_printerr ("Unable to open socket for status: %s\n", error->message);
59 g_clear_error (&error);
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);
72 source = g_socket_create_source (status_socket, G_IO_IN, NULL);
73 g_source_set_callback (source, (GSourceFunc) status_request_cb, NULL, NULL);
74 g_source_attach (source, NULL);
78 status_notify (const gchar *format, ...)
83 va_start (ap, format);
84 vsnprintf (status, 1024, format, ap);
92 length = strlen (status);
93 g_socket_send (status_socket, (gchar *) &length, sizeof (length), NULL, &error);
94 g_socket_send (status_socket, status, strlen (status), NULL, &error);
96 g_printerr ("Failed to write to status socket: %s\n", error->message);
97 g_clear_error (&error);
100 g_printerr ("%s\n", status);