10 #include <gio/gunixfdlist.h>
12 /* see gdbus-example-server.c for the server implementation */
14 get_server_stdout (GDBusConnection
*connection
,
15 const gchar
*name_owner
,
18 GDBusMessage
*method_call_message
;
19 GDBusMessage
*method_reply_message
;
24 method_call_message
= NULL
;
25 method_reply_message
= NULL
;
27 method_call_message
= g_dbus_message_new_method_call (name_owner
,
28 "/org/gtk/GDBus/TestObject",
29 "org.gtk.GDBus.TestInterface",
31 method_reply_message
= g_dbus_connection_send_message_with_reply_sync (connection
,
33 G_DBUS_SEND_MESSAGE_FLAGS_NONE
,
35 NULL
, /* out_serial */
36 NULL
, /* cancellable */
38 if (method_reply_message
== NULL
)
41 if (g_dbus_message_get_message_type (method_reply_message
) == G_DBUS_MESSAGE_TYPE_ERROR
)
43 g_dbus_message_to_gerror (method_reply_message
, error
);
47 fd_list
= g_dbus_message_get_unix_fd_list (method_reply_message
);
48 fd
= g_unix_fd_list_get (fd_list
, 0, error
);
51 g_object_unref (method_call_message
);
52 g_object_unref (method_reply_message
);
58 on_name_appeared (GDBusConnection
*connection
,
60 const gchar
*name_owner
,
67 fd
= get_server_stdout (connection
, name_owner
, &error
);
70 g_printerr ("Error invoking GimmeStdout(): %s\n",
88 str
= g_strdup_printf ("On %s, gdbus-example-unix-fd-client with pid %d was here!\n",
92 g_warn_if_fail (write (fd
, str
, len
) == len
);
95 g_print ("Wrote the following on server's stdout:\n%s", str
);
103 on_name_vanished (GDBusConnection
*connection
,
107 g_printerr ("Failed to get name owner for %s\n"
108 "Is ./gdbus-example-server running?\n",
114 main (int argc
, char *argv
[])
119 watcher_id
= g_bus_watch_name (G_BUS_TYPE_SESSION
,
120 "org.gtk.GDBus.TestServer",
121 G_BUS_NAME_WATCHER_FLAGS_NONE
,
127 loop
= g_main_loop_new (NULL
, FALSE
);
128 g_main_loop_run (loop
);
130 g_bus_unwatch_name (watcher_id
);