summaryrefslogtreecommitdiffstats
path: root/daemon/echo.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2006-10-26 16:57:18 +0000
committerMarcel Holtmann <marcel@holtmann.org>2006-10-26 16:57:18 +0000
commit4fa1dd27fcf1f78d95d2a83ead557e41eead012e (patch)
treea96d47c40c7b1050672251e2d037c6e4b7be0d94 /daemon/echo.c
parent9a50d4ad1d08801d39846cff52e4c09fb0ccacea (diff)
Add service agent object
Diffstat (limited to 'daemon/echo.c')
-rw-r--r--daemon/echo.c116
1 files changed, 115 insertions, 1 deletions
diff --git a/daemon/echo.c b/daemon/echo.c
index fab835ce..71ed7658 100644
--- a/daemon/echo.c
+++ b/daemon/echo.c
@@ -31,10 +31,122 @@
#include <dbus/dbus-glib.h>
+#define AGENT_PATH "/org/bluez/echo"
+
+static DBusGConnection *conn;
+
+typedef struct {
+ GObject parent;
+} ServiceAgent;
+
+typedef struct {
+ GObjectClass parent;
+} ServiceAgentClass;
+
+static GObjectClass *parent_class;
+
+G_DEFINE_TYPE(ServiceAgent, service_agent, G_TYPE_OBJECT)
+
+#define SERVICE_AGENT_OBJECT_TYPE (service_agent_get_type())
+
+#define SERVICE_AGENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \
+ SERVICE_AGENT_OBJECT_TYPE, ServiceAgent))
+
+static void service_agent_finalize(GObject *obj)
+{
+ parent_class->finalize(obj);
+}
+
+static void service_agent_init(ServiceAgent *obj)
+{
+}
+
+static void service_agent_class_init(ServiceAgentClass *klass)
+{
+ GObjectClass *gobject_class;
+
+ parent_class = g_type_class_peek_parent(klass);
+
+ gobject_class = G_OBJECT_CLASS(klass);
+ gobject_class->finalize = service_agent_finalize;
+}
+
+static ServiceAgent *service_agent_new(const char *path)
+{
+ ServiceAgent *agent;
+
+ agent = g_object_new(SERVICE_AGENT_OBJECT_TYPE, NULL);
+
+ dbus_g_connection_register_g_object(conn, path, G_OBJECT(agent));
+
+ return agent;
+}
+
+static gboolean service_agent_interfaces(ServiceAgent *agent, GError **error)
+{
+ return FALSE;
+}
+
+static gboolean service_agent_start(ServiceAgent *agent,
+ DBusGMethodInvocation *context)
+{
+ dbus_g_method_return(context, NULL);
+
+ return TRUE;
+}
+
+static gboolean service_agent_stop(ServiceAgent *agent,
+ DBusGMethodInvocation *context)
+{
+ dbus_g_method_return(context, NULL);
+
+ return TRUE;
+}
+
+static gboolean service_agent_record(ServiceAgent *agent, GError **error)
+{
+ return FALSE;
+}
+
+static gboolean service_agent_release(ServiceAgent *agent, GError **error)
+{
+ return TRUE;
+}
+
+#include "service-agent-glue.h"
+
+static int register_service_agent(void)
+{
+ DBusGProxy *object;
+ GError *error = NULL;
+ const char *name = "Echo service";
+ const char *desc = "Simple serial port profile based echo service";
+ void *agent;
+
+ agent = service_agent_new(AGENT_PATH);
+ if (!agent)
+ return -1;
+
+ object = dbus_g_proxy_new_for_name(conn, "org.bluez",
+ "/org/bluez", "org.bluez.Manager");
+
+ dbus_g_proxy_call(object, "RegisterService", &error,
+ G_TYPE_STRING, AGENT_PATH,
+ G_TYPE_STRING, name,
+ G_TYPE_STRING, desc,
+ G_TYPE_INVALID, G_TYPE_INVALID);
+
+ if (error != NULL) {
+ g_error_free(error);
+ return -1;
+ }
+
+ return 0;
+}
+
int main(int argc, char *argv[])
{
GMainLoop *mainloop;
- DBusGConnection *conn;
GError *error = NULL;
g_type_init();
@@ -49,6 +161,8 @@ int main(int argc, char *argv[])
exit(EXIT_FAILURE);
}
+ register_service_agent();
+
g_main_loop_run(mainloop);
dbus_g_connection_unref(conn);