diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2006-10-26 16:57:18 +0000 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2006-10-26 16:57:18 +0000 |
commit | 4fa1dd27fcf1f78d95d2a83ead557e41eead012e (patch) | |
tree | a96d47c40c7b1050672251e2d037c6e4b7be0d94 /daemon/echo.c | |
parent | 9a50d4ad1d08801d39846cff52e4c09fb0ccacea (diff) |
Add service agent object
Diffstat (limited to 'daemon/echo.c')
-rw-r--r-- | daemon/echo.c | 116 |
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); |