Diff between ef3648a694c63142a8025227659303c36f95d000 and bd58c41ecf9c0e80048215cea1dd7ba760b0edab

Changed Files

File Additions Deletions Status
obexd/client/main.c +76 -0 modified

Full Patch

diff --git a/obexd/client/main.c b/obexd/client/main.c
index b3b9c1d..5c5bae1 100644
--- a/obexd/client/main.c
+++ b/obexd/client/main.c
@@ -25,7 +25,83 @@
 #include <config.h>
 #endif
 
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+
+#include <glib.h>
+#include <gdbus.h>
+
+#define CLIENT_SERVICE  "org.openobex.client"
+
+#define CLIENT_INTERFACE  "org.openobex.Client"
+#define CLIENT_PATH       "/"
+
+static DBusMessage *push_file(DBusConnection *connection,
+					DBusMessage *message, void *user_data)
+{
+	DBusMessage *reply;
+
+	reply = dbus_message_new_method_return(message);
+	if (!reply)
+		return NULL;
+
+	return reply;
+}
+
+static GDBusMethodTable client_methods[] = {
+	{ "PushFile", "s", "", push_file },
+	{ }
+};
+
+static GMainLoop *event_loop = NULL;
+
+static void sig_term(int sig)
+{
+	g_main_loop_quit(event_loop);
+}
+
 int main(int argc, char *argv[])
 {
+	struct sigaction sa;
+	DBusConnection *conn;
+	DBusError err;
+
+	dbus_error_init(&err);
+
+	conn = g_dbus_setup_bus(DBUS_BUS_SESSION, CLIENT_SERVICE, &err);
+	if (conn == NULL) {
+		if (dbus_error_is_set(&err) == TRUE) {
+			fprintf(stderr, "%s\n", err.message);
+			dbus_error_free(&err);
+		} else
+			fprintf(stderr, "Can't register with session bus\n");
+		exit(EXIT_FAILURE);
+	}
+
+	if (g_dbus_register_interface(conn, CLIENT_PATH, CLIENT_INTERFACE,
+						client_methods, NULL, NULL,
+							NULL, NULL) == FALSE) {
+		fprintf(stderr, "Can't register client interface\n");
+		dbus_connection_unref(conn);
+		exit(EXIT_FAILURE);
+	}
+
+	event_loop = g_main_loop_new(NULL, FALSE);
+
+	memset(&sa, 0, sizeof(sa));
+	sa.sa_handler = sig_term;
+	sigaction(SIGINT, &sa, NULL);
+	sigaction(SIGTERM, &sa, NULL);
+
+	g_main_loop_run(event_loop);
+
+	g_dbus_unregister_interface(conn, CLIENT_PATH, CLIENT_INTERFACE);
+
+	dbus_connection_unref(conn);
+
+	g_main_loop_unref(event_loop);
+
 	return 0;
 }