summaryrefslogtreecommitdiff
path: root/frameworks/middleware/examples/dbus/ping-server.c
diff options
context:
space:
mode:
authorManuel Traut <manut@linutronix.de>2009-06-23 21:31:19 +0100
committerManuel Traut <manut@linutronix.de>2009-06-23 21:31:19 +0100
commit46f636afe5ad22567351391155da76f8a2e00bc6 (patch)
treeeeb2d13b9e09bfeee4b85616d71838ad27c857af /frameworks/middleware/examples/dbus/ping-server.c
parentcb5dfc68d3fb4c35295271814715d08820eb2f0a (diff)
middleware: added dbus example
Signed-off-by: Manuel Traut <manut@linutronix.de>
Diffstat (limited to 'frameworks/middleware/examples/dbus/ping-server.c')
-rw-r--r--frameworks/middleware/examples/dbus/ping-server.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/frameworks/middleware/examples/dbus/ping-server.c b/frameworks/middleware/examples/dbus/ping-server.c
new file mode 100644
index 0000000..36dd122
--- /dev/null
+++ b/frameworks/middleware/examples/dbus/ping-server.c
@@ -0,0 +1,72 @@
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib.h>
+#include <time.h>
+
+static DBusHandlerResult signal_filter
+ (DBusConnection *connection, DBusMessage *message, void *user_data);
+
+int main(int argc, char **argv)
+{
+ GMainLoop *loop;
+ DBusConnection *bus;
+ DBusError error;
+
+ loop = g_main_loop_new (NULL, FALSE);
+ dbus_error_init (&error);
+ bus = dbus_bus_get (DBUS_BUS_SESSION, &error);
+
+ if (!bus) {
+ g_warning ("Failed to connect to the D-BUS daemon: %s", error.message);
+ dbus_error_free (&error);
+ return 1;
+ }
+
+ dbus_connection_setup_with_g_main (bus, NULL);
+ /* listening to messages from all objects as no path is specified */
+ dbus_bus_add_match (bus, "type='signal',interface='de.linutronix.Ping'",
+ &error);
+ dbus_connection_add_filter (bus, signal_filter, loop, NULL);
+ g_main_loop_run (loop);
+
+ return 0;
+}
+
+static DBusHandlerResult signal_filter
+ (DBusConnection *connection, DBusMessage *message, void *user_data)
+{
+ /* User data is the event loop we are running in */
+ GMainLoop *loop = user_data;
+
+ /* A signal from the bus saying we are about to be disconnected */
+ if (dbus_message_is_signal(message, "org.freedesktop.Local",
+ "Disconnected"))
+ {
+ /* Tell the main loop to quit */
+ g_main_loop_quit (loop);
+ /* We have handled this message, don't pass it on */
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+ else if (dbus_message_is_signal (message, "de.linutronix.Ping", "Ping"))
+ {
+ DBusError error;
+ char *s;
+
+ dbus_error_init (&error);
+
+ if (dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &s,
+ DBUS_TYPE_INVALID))
+ {
+ struct timespec rx_time;
+ clock_gettime(CLOCK_MONOTONIC, &rx_time);
+ g_print("ping received: %s - %d:%d\n", s, rx_time.tv_sec,
+ rx_time.tv_nsec/1000);
+ // dbus_free (s);
+ } else {
+ g_print("ping received, but error getting message: %s\n", error.message);
+ dbus_error_free (&error);
+ }
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+