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 | |
| parent | 9a50d4ad1d08801d39846cff52e4c09fb0ccacea (diff) | |
Add service agent object
| -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); | 
