linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support
@ 2012-12-12 11:52 Luiz Augusto von Dentz
  2012-12-12 11:52 ` [PATCH BlueZ 02/11] core: Add MAS record Luiz Augusto von Dentz
                   ` (10 more replies)
  0 siblings, 11 replies; 14+ messages in thread
From: Luiz Augusto von Dentz @ 2012-12-12 11:52 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This changes obexd to use ProfileManager.RegisterProfile
---
 obexd/plugins/bluetooth.c | 696 ++++++++++++++--------------------------------
 1 file changed, 212 insertions(+), 484 deletions(-)

diff --git a/obexd/plugins/bluetooth.c b/obexd/plugins/bluetooth.c
index 1448d0e..fc88a1e 100644
--- a/obexd/plugins/bluetooth.c
+++ b/obexd/plugins/bluetooth.c
@@ -43,270 +43,33 @@
 #include "transport.h"
 #include "service.h"
 #include "log.h"
+#include "uuid.h"
 
 #define BT_RX_MTU 32767
 #define BT_TX_MTU 32767
 
-#define TIMEOUT 60*1000 /* Timeout for user response (miliseconds) */
-
-struct pending_request {
-	DBusPendingCall *call;
-	struct bluetooth_service *service;
-	char *adapter_path;
-	char address[18];
-	unsigned int watch;
-	GIOChannel *io;
-};
-
-struct bluetooth_service {
+struct bluetooth_profile {
 	struct obex_server *server;
 	struct obex_service_driver *driver;
-	uint32_t handle;
+	char *uuid;
+	char *path;
 };
 
-struct adapter_any {
-	char *path;		/* Adapter ANY path */
-	GSList *services;	/* List of services to register records */
-};
+static GSList *profiles = NULL;
 
 static DBusConnection *connection = NULL;
-static struct adapter_any *any = NULL;
-
-static void add_record_reply(DBusPendingCall *call, void *user_data)
-{
-	struct bluetooth_service *service = user_data;
-	DBusMessage *reply = dbus_pending_call_steal_reply(call);
-	DBusError derr;
-	uint32_t handle;
-
-	dbus_error_init(&derr);
-	if (dbus_set_error_from_message(&derr, reply)) {
-		error("bluetooth: Replied with an error: %s, %s",
-				derr.name, derr.message);
-		dbus_error_free(&derr);
-		handle = 0;
-	} else {
-		dbus_message_get_args(reply, NULL,
-				DBUS_TYPE_UINT32, &handle,
-				DBUS_TYPE_INVALID);
-
-		service->handle = handle;
-
-		DBG("Registered: %s, handle: 0x%x",
-				service->driver->name, service->handle);
-	}
-
-	dbus_message_unref(reply);
-}
-
-static int add_record(const char *path, const char *xml,
-			struct bluetooth_service *service)
-{
-	DBusMessage *msg;
-	DBusPendingCall *call;
-	int ret = 0;
-
-	msg = dbus_message_new_method_call("org.bluez", path,
-					"org.bluez.Service", "AddRecord");
-
-	dbus_message_append_args(msg, DBUS_TYPE_STRING, &xml,
-			DBUS_TYPE_INVALID);
-
-	if (dbus_connection_send_with_reply(connection,
-				msg, &call, -1) == FALSE) {
-		ret = -1;
-		goto failed;
-	}
-
-	dbus_pending_call_set_notify(call, add_record_reply, service, NULL);
-	dbus_pending_call_unref(call);
-
-failed:
-	dbus_message_unref(msg);
-	return ret;
-}
-
-static struct bluetooth_service *find_service(
-					struct obex_service_driver *driver)
-{
-	GSList *l;
-
-	for (l = any->services; l; l = l->next) {
-		struct bluetooth_service *service = l->data;
-
-		if (service->driver == driver)
-			return service;
-	}
-
-	return NULL;
-}
-
-static void register_record(struct obex_server *server)
-{
-	const GSList *l;
-
-	if (connection == NULL)
-		return;
-
-	for (l = server->drivers; l; l = l->next) {
-		struct obex_service_driver *driver = l->data;
-		struct bluetooth_service *service;
-		char *xml;
-
-		service = find_service(driver);
-		if (service == NULL) {
-			service = g_new0(struct bluetooth_service, 1);
-			service->driver = driver;
-			service->server = server;
-			any->services = g_slist_append(any->services, service);
-		}
-
-		/* Service already has a record registered */
-		if (service->handle != 0)
-			continue;
-
-		/* Adapter ANY is not available yet: Add record later */
-		if (any->path == NULL)
-			continue;
-
-		if (driver->port != 0)
-			xml = g_markup_printf_escaped(driver->record,
-							driver->channel,
-							driver->name,
-							driver->port);
-		else
-			xml = g_markup_printf_escaped(driver->record,
-							driver->channel,
-							driver->name);
-
-		add_record(any->path, xml, service);
-		g_free(xml);
-	}
-}
-
-static void find_adapter_any_reply(DBusPendingCall *call, void *user_data)
-{
-	DBusMessage *reply = dbus_pending_call_steal_reply(call);
-	const char *path;
-	GSList *l;
-	DBusError derr;
-
-	dbus_error_init(&derr);
-	if (dbus_set_error_from_message(&derr, reply)) {
-		error("bluetooth: Replied with an error: %s, %s",
-				derr.name, derr.message);
-		dbus_error_free(&derr);
-		goto done;
-	}
-
-	dbus_message_get_args(reply, NULL,
-			DBUS_TYPE_OBJECT_PATH, &path,
-			DBUS_TYPE_INVALID);
-	any->path = g_strdup(path);
-
-	for (l = any->services; l; l = l->next) {
-		struct bluetooth_service *service = l->data;
-		struct obex_service_driver *driver = service->driver;
-		char *xml;
-
-		if (driver->port != 0)
-			xml = g_markup_printf_escaped(driver->record,
-							driver->channel,
-							driver->name,
-							driver->port);
-		else
-			xml = g_markup_printf_escaped(driver->record,
-							driver->channel,
-							driver->name);
-
-		add_record(any->path, xml, service);
-		g_free(xml);
-	}
-
-done:
-	dbus_message_unref(reply);
-}
-
-static DBusPendingCall *find_adapter(const char *pattern,
-				DBusPendingCallNotifyFunction function,
-				void *user_data)
-{
-	DBusMessage *msg;
-	DBusPendingCall *call;
-
-	DBG("FindAdapter(%s)", pattern);
-
-	msg = dbus_message_new_method_call("org.bluez", "/",
-					"org.bluez.Manager", "FindAdapter");
-	if (!msg)
-		return NULL;
-
-	dbus_message_append_args(msg, DBUS_TYPE_STRING, &pattern,
-			DBUS_TYPE_INVALID);
-
-	if (!dbus_connection_send_with_reply(connection, msg, &call, -1)) {
-		dbus_message_unref(msg);
-		return NULL;
-	}
-
-	dbus_pending_call_set_notify(call, function, user_data, NULL);
-
-	dbus_message_unref(msg);
-
-	return call;
-}
-
-static void name_acquired(DBusConnection *conn, void *user_data)
-{
-	DBusPendingCall *call;
-
-	call = find_adapter("any", find_adapter_any_reply, NULL);
-	if (call)
-		dbus_pending_call_unref(call);
-}
-
-static void name_released(DBusConnection *conn, void *user_data)
-{
-	GSList *l;
-
-	/* reset handles so the services got register next time */
-	for (l = any->services; l; l = l->next) {
-		struct bluetooth_service *service = l->data;
-
-		service->handle = 0;
-	}
-
-	g_free(any->path);
-	any->path = NULL;
-
-}
-
-static void service_cancel(struct pending_request *pending)
-{
-	DBusMessage *msg;
-
-	msg = dbus_message_new_method_call("org.bluez",
-					pending->adapter_path,
-					"org.bluez.Service",
-					"CancelAuthorization");
-
-	g_dbus_send_message(connection, msg);
-}
 
-static void pending_request_free(struct pending_request *pending)
+static DBusMessage *profile_release(DBusConnection *conn, DBusMessage *msg,
+								void *data)
 {
-	if (pending->call)
-		dbus_pending_call_unref(pending->call);
-	g_io_channel_unref(pending->io);
-	g_free(pending->adapter_path);
-	g_free(pending);
+	return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
 }
 
 static void connect_event(GIOChannel *io, GError *err, void *user_data)
 {
 	int sk = g_io_channel_unix_get_fd(io);
-	struct bluetooth_service *service = user_data;
-	struct obex_server *server = service->server;
+	struct bluetooth_profile *profile = user_data;
+	struct obex_server *server = profile->server;
 	int type;
 	int omtu = BT_TX_MTU;
 	int imtu = BT_RX_MTU;
@@ -340,281 +103,257 @@ drop:
 	return;
 }
 
-static void service_reply(DBusPendingCall *call, void *user_data)
+static DBusMessage *profile_new_connection(DBusConnection *conn,
+						DBusMessage *msg, void *data)
 {
-	struct pending_request *pending = user_data;
-	GIOChannel *io = pending->io;
-	struct bluetooth_service *service = pending->service;
-	DBusMessage *reply = dbus_pending_call_steal_reply(call);
-	DBusError derr;
-	GError *err = NULL;
+	DBusMessageIter args;
+	const char *device;
+	int fd;
+	GIOChannel *io;
 
-	dbus_error_init(&derr);
-	if (dbus_set_error_from_message(&derr, reply)) {
-		error("bluetooth: RequestAuthorization error: %s, %s",
-				derr.name, derr.message);
+	dbus_message_iter_init(msg, &args);
 
-		if (dbus_error_has_name(&derr, DBUS_ERROR_NO_REPLY))
-			service_cancel(pending);
+	if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_OBJECT_PATH)
+		return g_dbus_create_error(msg,
+					"org.bluez.Error.InvalidArguments",
+					"Invalid arguments in method call");
 
-		dbus_error_free(&derr);
-		g_io_channel_shutdown(io, TRUE, NULL);
-		goto done;
-	}
+	dbus_message_iter_get_basic(&args, &device);
 
-	DBG("RequestAuthorization succeeded");
+	dbus_message_iter_next(&args);
 
-	if (!bt_io_accept(io, connect_event, service, NULL, &err)) {
-		error("%s", err->message);
-		g_error_free(err);
-		g_io_channel_shutdown(io, TRUE, NULL);
-	}
+	if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_UNIX_FD)
+		return g_dbus_create_error(msg,
+					"org.bluez.Error.InvalidArguments",
+					"Invalid arguments in method call");
 
-done:
-	g_source_remove(pending->watch);
-	pending_request_free(pending);
-	dbus_message_unref(reply);
-}
+	dbus_message_iter_get_basic(&args, &fd);
 
-static gboolean service_error(GIOChannel *io, GIOCondition cond,
-			void *user_data)
-{
-	struct pending_request *pending = user_data;
+	io = g_io_channel_unix_new(fd);
+	if (io == NULL)
+		return g_dbus_create_error(msg,
+					"org.bluez.Error.InvalidArguments",
+					"Invalid arguments in method call");
 
-	service_cancel(pending);
+	DBG("device %s", device);
 
-	dbus_pending_call_cancel(pending->call);
+	connect_event(io, NULL, data);
 
-	pending_request_free(pending);
+	return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
 
-	return FALSE;
+static DBusMessage *profile_request_disconnection(DBusConnection *conn,
+						DBusMessage *msg, void *data)
+{
+	return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
 }
 
-static void find_adapter_reply(DBusPendingCall *call, void *user_data)
+static DBusMessage *profile_cancel(DBusConnection *conn,
+						DBusMessage *msg, void *data)
 {
-	struct pending_request *pending = user_data;
+	return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static const GDBusMethodTable profile_methods[] = {
+	{ GDBUS_METHOD("Release",
+			NULL, NULL,
+			profile_release) },
+	{ GDBUS_METHOD("NewConnection",
+			GDBUS_ARGS({ "device", "o" }, { "fd", "h" },
+			{ "options", "a{sv}" }), NULL,
+			profile_new_connection) },
+	{ GDBUS_METHOD("RequestDisconnection",
+			GDBUS_ARGS({ "device", "o" }), NULL,
+			profile_request_disconnection) },
+	{ GDBUS_METHOD("Cancel",
+			NULL, NULL,
+			profile_cancel) },
+	{ }
+};
+
+static void register_profile_reply(DBusPendingCall *call, void *user_data)
+{
+	struct bluetooth_profile *profile = user_data;
 	DBusMessage *reply = dbus_pending_call_steal_reply(call);
-	DBusMessage *msg;
-	DBusPendingCall *pcall;
-	const char *path, *paddr = pending->address;
 	DBusError derr;
+	GError *err = NULL;
 
 	dbus_error_init(&derr);
-	if (dbus_set_error_from_message(&derr, reply)) {
-		error("Replied with an error: %s, %s",
-				derr.name, derr.message);
-		dbus_error_free(&derr);
-		goto failed;
+	if (!dbus_set_error_from_message(&derr, reply)) {
+		DBG("Profile %s registered", profile->path);
+		goto done;
 	}
 
-	dbus_message_get_args(reply, NULL,
-			DBUS_TYPE_OBJECT_PATH, &path,
-			DBUS_TYPE_INVALID);
+	g_free(profile->path);
+	profile->path = NULL;
 
-	DBG("FindAdapter -> %s", path);
-	pending->adapter_path = g_strdup(path);
+	error("bluetooth: RequestProfile error: %s, %s", derr.name,
+								derr.message);
+	dbus_error_free(&derr);
+done:
 	dbus_message_unref(reply);
+}
 
-	msg = dbus_message_new_method_call("org.bluez", path,
-			"org.bluez.Service", "RequestAuthorization");
-
-	dbus_message_append_args(msg, DBUS_TYPE_STRING, &paddr,
-			DBUS_TYPE_UINT32, &pending->service->handle,
-			DBUS_TYPE_INVALID);
-
-	if (!dbus_connection_send_with_reply(connection,
-					msg, &pcall, TIMEOUT)) {
-		dbus_message_unref(msg);
-		goto failed;
-	}
+static void unregister_profile(struct bluetooth_profile *profile)
+{
+	g_dbus_unregister_interface(connection, profile->path,
+						"org.bluez.Profile1");
+	g_free(profile->path);
+	profile->path = NULL;
+}
 
-	dbus_message_unref(msg);
+static void profile_free(void *data)
+{
+	struct bluetooth_profile *profile = data;
 
-	DBG("RequestAuthorization(%s, %x)", paddr,
-			pending->service->handle);
+	if (profile->path != NULL)
+		unregister_profile(profile);
 
-	if (!dbus_pending_call_set_notify(pcall, service_reply, pending,
-								NULL)) {
-		dbus_pending_call_unref(pcall);
-		goto failed;
-	}
+	g_free(profile->uuid);
+	g_free(profile);
+}
 
-	dbus_pending_call_unref(pending->call);
-	pending->call = pcall;
+static void append_variant(DBusMessageIter *iter, int type, void *val)
+{
+	DBusMessageIter value;
+	char sig[2] = { type, '\0' };
 
-	/* Catches errors before authorization response comes */
-	pending->watch = g_io_add_watch(pending->io,
-					G_IO_HUP | G_IO_ERR | G_IO_NVAL,
-					service_error, pending);
+	dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, sig, &value);
 
-	return;
+	dbus_message_iter_append_basic(&value, type, val);
 
-failed:
-	g_io_channel_shutdown(pending->io, TRUE, NULL);
-	pending_request_free(pending);
+	dbus_message_iter_close_container(iter, &value);
 }
 
-static int request_service_authorization(struct bluetooth_service *service,
-							GIOChannel *io,
-							const char *source,
-							const char *address)
-{
-	struct pending_request *pending;
 
-	if (connection == NULL || any->path == NULL)
-		return -1;
+void dict_append_entry(DBusMessageIter *dict,
+			const char *key, int type, void *val)
+{
+	DBusMessageIter entry;
 
-	pending = g_new0(struct pending_request, 1);
-	pending->call = find_adapter(source, find_adapter_reply, pending);
-	if (!pending->call) {
-		g_free(pending);
-		return -ENOMEM;
+	if (type == DBUS_TYPE_STRING) {
+		const char *str = *((const char **) val);
+		if (str == NULL)
+			return;
 	}
 
-	pending->service = service;
-	pending->io = g_io_channel_ref(io);
-	memcpy(pending->address, address, sizeof(pending->address));
+	dbus_message_iter_open_container(dict, DBUS_TYPE_DICT_ENTRY,
+							NULL, &entry);
 
-	return 0;
+	dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key);
+
+	append_variant(&entry, type, val);
+
+	dbus_message_iter_close_container(dict, &entry);
 }
 
-static void confirm_connection(GIOChannel *io, const char *source,
-					const char *address, void *user_data)
+static int register_profile(struct bluetooth_profile *profile)
 {
+	DBusMessage *msg;
+	DBusMessageIter iter, opt;
+	DBusPendingCall *call;
+	dbus_bool_t auto_connect = FALSE;
+	int ret = 0;
 
-	struct obex_service_driver *driver = user_data;
-	struct bluetooth_service *service;
-	GError *err = NULL;
+	profile->path = g_strconcat("/org/bluez/obex/", profile->uuid, NULL);
+	g_strdelimit(profile->path, "-", '_');
 
-	service = find_service(driver);
-	if (service == NULL) {
-		error("bluetooth: Unable to find service");
-		goto drop;
+	if (!g_dbus_register_interface(connection, profile->path,
+					"org.bluez.Profile1", profile_methods,
+					NULL, NULL,
+					profile, NULL)) {
+		error("D-Bus failed to register %s", profile->path);
+		g_free(profile->path);
+		profile->path = NULL;
+		return -1;
 	}
 
-	if (driver->secure) {
-		if (request_service_authorization(service, io, source,
-								address) < 0)
-			goto drop;
+	msg = dbus_message_new_method_call("org.bluez", "/org/bluez",
+						"org.bluez.ProfileManager1",
+						"RegisterProfile");
+
+	dbus_message_iter_init_append(msg, &iter);
+
+	dbus_message_iter_append_basic(&iter, DBUS_TYPE_OBJECT_PATH,
+							&profile->path);
+	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING,
+							&profile->uuid);
+	dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
+					DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
+					DBUS_TYPE_STRING_AS_STRING
+					DBUS_TYPE_VARIANT_AS_STRING
+					DBUS_DICT_ENTRY_END_CHAR_AS_STRING,
+					&opt);
+	dict_append_entry(&opt, "AutoConnect", DBUS_TYPE_BOOLEAN,
+								&auto_connect);
+	dbus_message_iter_close_container(&iter, &opt);
 
-		return;
-	}
-
-	if (!bt_io_accept(io, connect_event, service, NULL, &err)) {
-		error("%s", err->message);
-		g_error_free(err);
-		goto drop;
+	if (!dbus_connection_send_with_reply(connection, msg, &call, -1)) {
+		ret = -1;
+		unregister_profile(profile);
+		goto failed;
 	}
 
-	return;
+	dbus_pending_call_set_notify(call, register_profile_reply, profile,
+									NULL);
+	dbus_pending_call_unref(call);
 
-drop:
-	g_io_channel_shutdown(io, TRUE, NULL);
+failed:
+	dbus_message_unref(msg);
+	return ret;
 }
 
-static void confirm_rfcomm(GIOChannel *io, void *user_data)
+static const char *service2uuid(uint16_t service)
 {
-	GError *err = NULL;
-	char source[18];
-	char address[18];
-	uint8_t channel;
-
-	bt_io_get(io, &err,
-			BT_IO_OPT_SOURCE, source,
-			BT_IO_OPT_DEST, address,
-			BT_IO_OPT_CHANNEL, &channel,
-			BT_IO_OPT_INVALID);
-	if (err) {
-		error("%s", err->message);
-		g_error_free(err);
-		g_io_channel_shutdown(io, TRUE, NULL);
-		return;
+	switch (service) {
+	case OBEX_OPP:
+		return OBEX_OPP_UUID;
+	case OBEX_FTP:
+		return OBEX_FTP_UUID;
+	case OBEX_PBAP:
+		return OBEX_PSE_UUID;
 	}
 
-	info("bluetooth: New connection from: %s, channel %u", address,
-								channel);
-
-	confirm_connection(io, source, address, user_data);
+	return NULL;
 }
 
-static void confirm_l2cap(GIOChannel *io, void *user_data)
+static void name_acquired(DBusConnection *conn, void *user_data)
 {
-	GError *err = NULL;
-	char source[18];
-	char address[18];
-	uint16_t psm;
-
-	bt_io_get(io, &err,
-			BT_IO_OPT_SOURCE, source,
-			BT_IO_OPT_DEST, address,
-			BT_IO_OPT_PSM, &psm,
-			BT_IO_OPT_INVALID);
-	if (err) {
-		error("%s", err->message);
-		g_error_free(err);
-		g_io_channel_shutdown(io, TRUE, NULL);
-		return;
-	}
+	GSList *l;
 
-	info("bluetooth: New connection from: %s, psm %u", address, psm);
+	DBG("org.bluez appeared");
 
-	confirm_connection(io, source, address, user_data);
+	for (l = profiles; l; l = l->next) {
+		struct bluetooth_profile *profile = l->data;
+		const char *uuid;
+
+		if (profile->path != NULL)
+			continue;
+
+		if (register_profile(profile) < 0) {
+			error("bluetooth: Failed to register profile %s",
+							profile->path);
+			g_free(profile->path);
+			profile->path = NULL;
+		}
+	}
 }
 
-static GSList *start(struct obex_server *server,
-				struct obex_service_driver *service)
+static void name_released(DBusConnection *conn, void *user_data)
 {
-	BtIOSecLevel sec_level;
-	GSList *l = NULL;
-	GIOChannel *io;
-	GError *err = NULL;
-	uint16_t psm;
-
-	if (service->secure == TRUE)
-		sec_level = BT_IO_SEC_MEDIUM;
-	else
-		sec_level = BT_IO_SEC_LOW;
-
-	io = bt_io_listen(NULL, confirm_rfcomm,
-				service, NULL, &err,
-				BT_IO_OPT_CHANNEL, service->channel,
-				BT_IO_OPT_SEC_LEVEL, sec_level,
-				BT_IO_OPT_INVALID);
-	if (io == NULL) {
-		error("bluetooth: unable to listen in channel %d: %s",
-				service->channel, err->message);
-		g_error_free(err);
-	} else {
-		l = g_slist_prepend(l, io);
-		DBG("listening on channel %d", service->channel);
-	}
+	GSList *l;
 
-	if (service->port == 0)
-		return l;
-
-	psm = service->port == OBEX_PORT_RANDOM ? 0 : service->port;
-
-	io = bt_io_listen(NULL, confirm_l2cap,
-			service, NULL, &err,
-			BT_IO_OPT_PSM, psm,
-			BT_IO_OPT_MODE, BT_IO_MODE_ERTM,
-			BT_IO_OPT_OMTU, BT_TX_MTU,
-			BT_IO_OPT_IMTU, BT_RX_MTU,
-			BT_IO_OPT_SEC_LEVEL, sec_level,
-			BT_IO_OPT_INVALID);
-	if (io == NULL) {
-		error("bluetooth: unable to listen in psm %d: %s",
-				service->port, err->message);
-		g_error_free(err);
-		service->port = 0;
-	} else {
-		l = g_slist_prepend(l, io);
-		bt_io_get(io, &err, BT_IO_OPT_PSM, &service->port,
-							BT_IO_OPT_INVALID);
-		DBG("listening on psm %d", service->port);
-	}
+	DBG("org.bluez disappered");
+
+	for (l = profiles; l; l = l->next) {
+		struct bluetooth_profile *profile = l->data;
+		const char *uuid;
 
-	return l;
+		if (profile->path == NULL)
+			continue;
+
+		unregister_profile(profile);
+	}
 }
 
 static void *bluetooth_start(struct obex_server *server, int *err)
@@ -623,34 +362,29 @@ static void *bluetooth_start(struct obex_server *server, int *err)
 	const GSList *l;
 
 	for (l = server->drivers; l; l = l->next) {
-		struct obex_service_driver *service = l->data;
-		GSList *l;
+		struct obex_service_driver *driver = l->data;
+		struct bluetooth_profile *profile;
+		const char *uuid;
 
-		l = start(server, service);
-		if (l == NULL)
+		uuid = service2uuid(driver->service);
+		if (uuid == NULL)
 			continue;
 
-		ios = g_slist_concat(ios, l);
-	}
-
-	register_record(server);
-
-	return ios;
-}
+		profile = g_new0(struct bluetooth_profile, 1);
+		profile->driver = driver;
+		profile->server = server;
+		profile->uuid = g_strdup(uuid);
 
-static void stop(gpointer data)
-{
-	GIOChannel *io = data;
+		profiles = g_slist_prepend(profiles, profile);
+	}
 
-	g_io_channel_shutdown(io, TRUE, NULL);
-	g_io_channel_unref(io);
+	return profiles;
 }
 
 static void bluetooth_stop(void *data)
 {
-	GSList *ios = data;
-
-	g_slist_free_full(ios, stop);
+	g_slist_free_full(profiles, profile_free);
+	profiles = NULL;
 }
 
 static int bluetooth_getpeername(GIOChannel *io, char **name)
@@ -682,8 +416,6 @@ static unsigned int listener_id = 0;
 
 static int bluetooth_init(void)
 {
-	any = g_new0(struct adapter_any, 1);
-
 	connection = g_dbus_setup_private(DBUS_BUS_SYSTEM, NULL, NULL);
 	if (connection == NULL)
 		return -EPERM;
@@ -698,11 +430,7 @@ static void bluetooth_exit(void)
 {
 	g_dbus_remove_watch(connection, listener_id);
 
-	if (any) {
-		g_slist_free_full(any->services, g_free);
-		g_free(any->path);
-		g_free(any);
-	}
+	g_slist_free_full(profiles, profile_free);
 
 	if (connection)
 		dbus_connection_unref(connection);
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH BlueZ 02/11] core: Add MAS record
  2012-12-12 11:52 [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Luiz Augusto von Dentz
@ 2012-12-12 11:52 ` Luiz Augusto von Dentz
  2012-12-12 11:52 ` [PATCH BlueZ 03/11] core: Add SYNC record Luiz Augusto von Dentz
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Luiz Augusto von Dentz @ 2012-12-12 11:52 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This adds MAS record to detault settings
---
 src/profile.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/src/profile.c b/src/profile.c
index fba894c..a3dd372 100644
--- a/src/profile.c
+++ b/src/profile.c
@@ -395,6 +395,47 @@
 		</attribute>						\
 	</record>"
 
+#define MAS_RECORD							\
+	"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>			\
+	<record>							\
+		<attribute id=\"0x0001\">				\
+			<sequence>					\
+				<uuid value=\"0x1132\"/>		\
+			</sequence>					\
+		</attribute>						\
+		<attribute id=\"0x0004\">				\
+			<sequence>					\
+				<sequence>				\
+					<uuid value=\"0x0100\"/>	\
+				</sequence>				\
+				<sequence>				\
+					<uuid value=\"0x0003\"/>	\
+					<uint8 value=\"0x%02x\"/>	\
+				</sequence>				\
+				<sequence>				\
+					<uuid value=\"0x0008\"/>	\
+				</sequence>				\
+			</sequence>					\
+		</attribute>						\
+		<attribute id=\"0x0009\">				\
+			<sequence>					\
+				<sequence>				\
+					<uuid value=\"0x1134\"/>	\
+					<uint16 value=\"0x%04x\" />	\
+				</sequence>				\
+			</sequence>					\
+		</attribute>						\
+		<attribute id=\"0x0100\">				\
+			<text value=\"%s\"/>				\
+		</attribute>						\
+		<attribute id=\"0x0315\">				\
+			<uint8 value=\"0x00\"/>				\
+		</attribute>						\
+		<attribute id=\"0x0316\">				\
+			<uint8 value=\"0x0F\"/>				\
+		</attribute>						\
+	</record>"
+
 #define GENERIC_RECORD							\
 	"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>			\
 	<record>							\
@@ -1570,6 +1611,13 @@ static char *get_pse_record(struct ext_profile *ext, struct ext_io *l2cap,
 								ext->name);
 }
 
+static char *get_mas_record(struct ext_profile *ext, struct ext_io *l2cap,
+							struct ext_io *rfcomm)
+{
+	return g_strdup_printf(MAS_RECORD, rfcomm->chan, ext->version,
+								ext->name);
+}
+
 static char *get_opp_record(struct ext_profile *ext, struct ext_io *l2cap,
 							struct ext_io *rfcomm)
 {
@@ -1745,6 +1793,8 @@ static struct default_settings {
 		.uuid		= OBEX_MAS_UUID,
 		.name		= "Message Access",
 		.channel	= MAS_DEFAULT_CHANNEL,
+		.get_record	= get_mas_record,
+		.version	= 0x0100
 	}, {
 		.uuid		= OBEX_MNS_UUID,
 		.name		= "Message Notification",
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH BlueZ 03/11] core: Add SYNC record
  2012-12-12 11:52 [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Luiz Augusto von Dentz
  2012-12-12 11:52 ` [PATCH BlueZ 02/11] core: Add MAS record Luiz Augusto von Dentz
@ 2012-12-12 11:52 ` Luiz Augusto von Dentz
  2012-12-12 11:52 ` [PATCH BlueZ 04/11] obexd: Enable support for MAS profile Luiz Augusto von Dentz
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Luiz Augusto von Dentz @ 2012-12-12 11:52 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This adds SYNC record to detault settings
---
 src/profile.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/src/profile.c b/src/profile.c
index a3dd372..53d32b6 100644
--- a/src/profile.c
+++ b/src/profile.c
@@ -436,6 +436,46 @@
 		</attribute>						\
 	</record>"
 
+#define SYNC_RECORD							\
+	"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>			\
+	<record>							\
+		<attribute id=\"0x0001\">				\
+			<sequence>					\
+				<uuid value=\"0x1104\"/>		\
+			</sequence>					\
+		</attribute>						\
+		<attribute id=\"0x0004\">				\
+			<sequence>					\
+				<sequence>				\
+					<uuid value=\"0x0100\"/>	\
+				</sequence>				\
+				<sequence>				\
+					<uuid value=\"0x0003\"/>	\
+					<uint8 value=\"0x%02x\"/>	\
+				</sequence>				\
+				<sequence>				\
+					<uuid value=\"0x0008\"/>	\
+				</sequence>				\
+			</sequence>					\
+		</attribute>						\
+		<attribute id=\"0x0009\">				\
+			<sequence>					\
+				<sequence>				\
+					<uuid value=\"0x1104\"/>	\
+					<uint16 value=\"0x%04x\" />	\
+				 </sequence>				\
+			</sequence>					\
+		</attribute>						\
+		<attribute id=\"0x0100\">				\
+			<text value=\"%s\"/>				\
+		</attribute>						\
+		<attribute id=\"0x0301\">				\
+			<sequence>					\
+				<uint8 value=\"0x01\"/>			\
+			</sequence>					\
+		</attribute>						\
+	</record>"
+
 #define GENERIC_RECORD							\
 	"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>			\
 	<record>							\
@@ -1618,6 +1658,13 @@ static char *get_mas_record(struct ext_profile *ext, struct ext_io *l2cap,
 								ext->name);
 }
 
+static char *get_sync_record(struct ext_profile *ext, struct ext_io *l2cap,
+							struct ext_io *rfcomm)
+{
+	return g_strdup_printf(SYNC_RECORD, rfcomm->chan, ext->version,
+								ext->name);
+}
+
 static char *get_opp_record(struct ext_profile *ext, struct ext_io *l2cap,
 							struct ext_io *rfcomm)
 {
@@ -1777,6 +1824,8 @@ static struct default_settings {
 		.uuid		= OBEX_SYNC_UUID,
 		.name		= "Synchronization",
 		.channel	= SYNC_DEFAULT_CHANNEL,
+		.get_record	= get_sync_record,
+		.version	= 0x0100,
 	}, {
 		.uuid		= OBEX_PSE_UUID,
 		.name		= "Phone Book Access",
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH BlueZ 04/11] obexd: Enable support for MAS profile
  2012-12-12 11:52 [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Luiz Augusto von Dentz
  2012-12-12 11:52 ` [PATCH BlueZ 02/11] core: Add MAS record Luiz Augusto von Dentz
  2012-12-12 11:52 ` [PATCH BlueZ 03/11] core: Add SYNC record Luiz Augusto von Dentz
@ 2012-12-12 11:52 ` Luiz Augusto von Dentz
  2012-12-12 11:52 ` [PATCH BlueZ 05/11] obexd: Enable support SYNC profile Luiz Augusto von Dentz
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Luiz Augusto von Dentz @ 2012-12-12 11:52 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

---
 obexd/plugins/bluetooth.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/obexd/plugins/bluetooth.c b/obexd/plugins/bluetooth.c
index fc88a1e..65bcad1 100644
--- a/obexd/plugins/bluetooth.c
+++ b/obexd/plugins/bluetooth.c
@@ -312,6 +312,8 @@ static const char *service2uuid(uint16_t service)
 		return OBEX_FTP_UUID;
 	case OBEX_PBAP:
 		return OBEX_PSE_UUID;
+	case OBEX_MAS:
+		return OBEX_MAS_UUID;
 	}
 
 	return NULL;
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH BlueZ 05/11] obexd: Enable support SYNC profile
  2012-12-12 11:52 [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Luiz Augusto von Dentz
                   ` (2 preceding siblings ...)
  2012-12-12 11:52 ` [PATCH BlueZ 04/11] obexd: Enable support for MAS profile Luiz Augusto von Dentz
@ 2012-12-12 11:52 ` Luiz Augusto von Dentz
  2012-12-12 11:52 ` [PATCH BlueZ 06/11] obexd: Add support for custom records Luiz Augusto von Dentz
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Luiz Augusto von Dentz @ 2012-12-12 11:52 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

---
 obexd/plugins/bluetooth.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/obexd/plugins/bluetooth.c b/obexd/plugins/bluetooth.c
index 65bcad1..8a9e190 100644
--- a/obexd/plugins/bluetooth.c
+++ b/obexd/plugins/bluetooth.c
@@ -312,6 +312,8 @@ static const char *service2uuid(uint16_t service)
 		return OBEX_FTP_UUID;
 	case OBEX_PBAP:
 		return OBEX_PSE_UUID;
+	case OBEX_IRMC:
+		return OBEX_SYNC_UUID;
 	case OBEX_MAS:
 		return OBEX_MAS_UUID;
 	}
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH BlueZ 06/11] obexd: Add support for custom records
  2012-12-12 11:52 [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Luiz Augusto von Dentz
                   ` (3 preceding siblings ...)
  2012-12-12 11:52 ` [PATCH BlueZ 05/11] obexd: Enable support SYNC profile Luiz Augusto von Dentz
@ 2012-12-12 11:52 ` Luiz Augusto von Dentz
  2012-12-12 11:52 ` [PATCH BlueZ 07/11] opp: Remove record details Luiz Augusto von Dentz
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Luiz Augusto von Dentz @ 2012-12-12 11:52 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

Services such as pcsuite and syncml use custom records not defined by
Bluetooth SIG so they have to be registered using ServiceRecord entry.
---
 obexd/plugins/bluetooth.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/obexd/plugins/bluetooth.c b/obexd/plugins/bluetooth.c
index 8a9e190..cbc42f3 100644
--- a/obexd/plugins/bluetooth.c
+++ b/obexd/plugins/bluetooth.c
@@ -253,6 +253,7 @@ static int register_profile(struct bluetooth_profile *profile)
 	DBusMessageIter iter, opt;
 	DBusPendingCall *call;
 	dbus_bool_t auto_connect = FALSE;
+	char *xml;
 	int ret = 0;
 
 	profile->path = g_strconcat("/org/bluez/obex/", profile->uuid, NULL);
@@ -286,6 +287,20 @@ static int register_profile(struct bluetooth_profile *profile)
 					&opt);
 	dict_append_entry(&opt, "AutoConnect", DBUS_TYPE_BOOLEAN,
 								&auto_connect);
+	if (profile->driver->record) {
+		if (profile->driver->port != 0)
+			xml = g_markup_printf_escaped(profile->driver->record,
+						profile->driver->channel,
+						profile->driver->name,
+						profile->driver->port);
+		else
+			xml = g_markup_printf_escaped(profile->driver->record,
+						profile->driver->channel,
+						profile->driver->name);
+		dict_append_entry(&opt, "ServiceRecord", DBUS_TYPE_STRING,
+								&xml);
+		g_free(xml);
+	}
 	dbus_message_iter_close_container(&iter, &opt);
 
 	if (!dbus_connection_send_with_reply(connection, msg, &call, -1)) {
@@ -314,6 +329,10 @@ static const char *service2uuid(uint16_t service)
 		return OBEX_PSE_UUID;
 	case OBEX_IRMC:
 		return OBEX_SYNC_UUID;
+	case OBEX_PCSUITE:
+		return "00005005-0000-1000-8000-0002ee000001";
+	case OBEX_SYNCEVOLUTION:
+		return "00000002-0000-1000-8000-0002ee000002";
 	case OBEX_MAS:
 		return OBEX_MAS_UUID;
 	}
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH BlueZ 07/11] opp: Remove record details
  2012-12-12 11:52 [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Luiz Augusto von Dentz
                   ` (4 preceding siblings ...)
  2012-12-12 11:52 ` [PATCH BlueZ 06/11] obexd: Add support for custom records Luiz Augusto von Dentz
@ 2012-12-12 11:52 ` Luiz Augusto von Dentz
  2012-12-12 11:52 ` [PATCH BlueZ 08/11] ftp: " Luiz Augusto von Dentz
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Luiz Augusto von Dentz @ 2012-12-12 11:52 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

Standart service records are already supported by bluetoothd
---
 obexd/plugins/opp.c | 56 -----------------------------------------------------
 1 file changed, 56 deletions(-)

diff --git a/obexd/plugins/opp.c b/obexd/plugins/opp.c
index c7ddc63..faa4437 100644
--- a/obexd/plugins/opp.c
+++ b/obexd/plugins/opp.c
@@ -44,59 +44,6 @@
 #define VCARD_TYPE "text/x-vcard"
 #define VCARD_FILE CONFIGDIR "/vcard.vcf"
 
-#define OPP_CHANNEL	9
-#define OPP_RECORD "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>	\
-<record>							\
-  <attribute id=\"0x0001\">					\
-    <sequence>							\
-      <uuid value=\"0x1105\"/>					\
-    </sequence>							\
-  </attribute>							\
-								\
-  <attribute id=\"0x0004\">					\
-    <sequence>							\
-      <sequence>						\
-        <uuid value=\"0x0100\"/>				\
-      </sequence>						\
-      <sequence>						\
-        <uuid value=\"0x0003\"/>				\
-        <uint8 value=\"%u\" name=\"channel\"/>			\
-      </sequence>						\
-      <sequence>						\
-        <uuid value=\"0x0008\"/>				\
-      </sequence>						\
-    </sequence>							\
-  </attribute>							\
-								\
-  <attribute id=\"0x0009\">					\
-    <sequence>							\
-      <sequence>						\
-        <uuid value=\"0x1105\"/>				\
-        <uint16 value=\"0x0102\" name=\"version\"/>		\
-      </sequence>						\
-    </sequence>							\
-  </attribute>							\
-								\
-  <attribute id=\"0x0100\">					\
-    <text value=\"%s\" name=\"name\"/>				\
-  </attribute>							\
-								\
-  <attribute id=\"0x0303\">					\
-    <sequence>							\
-      <uint8 value=\"0x01\"/>					\
-      <uint8 value=\"0x02\"/>					\
-      <uint8 value=\"0x03\"/>					\
-      <uint8 value=\"0x04\"/>					\
-      <uint8 value=\"0x05\"/>					\
-      <uint8 value=\"0x06\"/>					\
-      <uint8 value=\"0xff\"/>					\
-    </sequence>							\
-  </attribute>							\
-  <attribute id=\"0x0200\">					\
-    <uint16 value=\"%u\" name=\"psm\"/>				\
-  </attribute>							\
-</record>"
-
 static void *opp_connect(struct obex_session *os, int *err)
 {
 	manager_register_transfer(os);
@@ -219,9 +166,6 @@ static void opp_reset(struct obex_session *os, void *user_data)
 static struct obex_service_driver driver = {
 	.name = "Object Push server",
 	.service = OBEX_OPP,
-	.channel = OPP_CHANNEL,
-	.port = OBEX_PORT_RANDOM,
-	.record = OPP_RECORD,
 	.connect = opp_connect,
 	.progress = opp_progress,
 	.disconnect = opp_disconnect,
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH BlueZ 08/11] ftp: Remove record details
  2012-12-12 11:52 [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Luiz Augusto von Dentz
                   ` (5 preceding siblings ...)
  2012-12-12 11:52 ` [PATCH BlueZ 07/11] opp: Remove record details Luiz Augusto von Dentz
@ 2012-12-12 11:52 ` Luiz Augusto von Dentz
  2012-12-12 11:52 ` [PATCH BlueZ 09/11] pbap: " Luiz Augusto von Dentz
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Luiz Augusto von Dentz @ 2012-12-12 11:52 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

Standart service records are already supported by bluetoothd
---
 obexd/plugins/ftp.c | 45 ---------------------------------------------
 1 file changed, 45 deletions(-)

diff --git a/obexd/plugins/ftp.c b/obexd/plugins/ftp.c
index ff4b761..d53774d 100644
--- a/obexd/plugins/ftp.c
+++ b/obexd/plugins/ftp.c
@@ -53,47 +53,6 @@
 #define LST_TYPE "x-obex/folder-listing"
 #define CAP_TYPE "x-obex/capability"
 
-#define FTP_CHANNEL 10
-#define FTP_RECORD "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>		\
-<record>								\
-  <attribute id=\"0x0001\">						\
-    <sequence>								\
-      <uuid value=\"0x1106\"/>						\
-    </sequence>								\
-  </attribute>								\
-									\
-  <attribute id=\"0x0004\">						\
-    <sequence>								\
-      <sequence>							\
-        <uuid value=\"0x0100\"/>					\
-      </sequence>							\
-      <sequence>							\
-        <uuid value=\"0x0003\"/>					\
-        <uint8 value=\"%u\" name=\"channel\"/>				\
-      </sequence>							\
-      <sequence>							\
-        <uuid value=\"0x0008\"/>					\
-      </sequence>							\
-    </sequence>								\
-  </attribute>								\
-									\
-  <attribute id=\"0x0009\">						\
-    <sequence>								\
-      <sequence>							\
-        <uuid value=\"0x1106\"/>					\
-        <uint16 value=\"0x0102\" name=\"version\"/>			\
-      </sequence>							\
-    </sequence>								\
-  </attribute>								\
-									\
-  <attribute id=\"0x0100\">						\
-    <text value=\"%s\" name=\"name\"/>					\
-  </attribute>								\
-  <attribute id=\"0x0200\">						\
-    <uint16 value=\"%u\" name=\"psm\"/>					\
-  </attribute>								\
-</record>"
-
 static const uint8_t FTP_TARGET[TARGET_SIZE] = {
 			0xF9, 0xEC, 0x7B, 0xC4, 0x95, 0x3C, 0x11, 0xD2,
 			0x98, 0x4E, 0x52, 0x54, 0x00, 0xDC, 0x9E, 0x09 };
@@ -519,10 +478,6 @@ void ftp_disconnect(struct obex_session *os, void *user_data)
 static struct obex_service_driver ftp = {
 	.name = "File Transfer server",
 	.service = OBEX_FTP,
-	.channel = FTP_CHANNEL,
-	.port = OBEX_PORT_RANDOM,
-	.secure = TRUE,
-	.record = FTP_RECORD,
 	.target = FTP_TARGET,
 	.target_size = TARGET_SIZE,
 	.connect = ftp_connect,
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH BlueZ 09/11] pbap: Remove record details
  2012-12-12 11:52 [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Luiz Augusto von Dentz
                   ` (6 preceding siblings ...)
  2012-12-12 11:52 ` [PATCH BlueZ 08/11] ftp: " Luiz Augusto von Dentz
@ 2012-12-12 11:52 ` Luiz Augusto von Dentz
  2012-12-12 11:52 ` [PATCH BlueZ 10/11] mas: " Luiz Augusto von Dentz
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Luiz Augusto von Dentz @ 2012-12-12 11:52 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

Standart service records are already supported by bluetoothd
---
 obexd/plugins/pbap.c | 46 ----------------------------------------------
 1 file changed, 46 deletions(-)

diff --git a/obexd/plugins/pbap.c b/obexd/plugins/pbap.c
index 4d4f0b8..4740188 100644
--- a/obexd/plugins/pbap.c
+++ b/obexd/plugins/pbap.c
@@ -65,49 +65,6 @@
 #define PHONEBOOKSIZE_TAG	0X08
 #define NEWMISSEDCALLS_TAG	0X09
 
-#define PBAP_CHANNEL	15
-
-#define PBAP_RECORD "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>	\
-<record>								\
-  <attribute id=\"0x0001\">						\
-    <sequence>								\
-      <uuid value=\"0x112f\"/>						\
-    </sequence>								\
-  </attribute>								\
-									\
-  <attribute id=\"0x0004\">						\
-    <sequence>								\
-      <sequence>							\
-        <uuid value=\"0x0100\"/>					\
-      </sequence>							\
-      <sequence>							\
-        <uuid value=\"0x0003\"/>					\
-        <uint8 value=\"%u\" name=\"channel\"/>				\
-      </sequence>							\
-      <sequence>							\
-        <uuid value=\"0x0008\"/>					\
-      </sequence>							\
-    </sequence>								\
-  </attribute>								\
-									\
-  <attribute id=\"0x0009\">						\
-    <sequence>								\
-      <sequence>							\
-        <uuid value=\"0x1130\"/>					\
-        <uint16 value=\"0x0100\" name=\"version\"/>			\
-      </sequence>							\
-    </sequence>								\
-  </attribute>								\
-									\
-  <attribute id=\"0x0100\">						\
-    <text value=\"%s\" name=\"name\"/>					\
-  </attribute>								\
-									\
-  <attribute id=\"0x0314\">						\
-    <uint8 value=\"0x01\"/>						\
-  </attribute>								\
-</record>"
-
 struct cache {
 	gboolean valid;
 	uint32_t index;
@@ -664,9 +621,6 @@ static int pbap_chkput(struct obex_session *os, void *user_data)
 static struct obex_service_driver pbap = {
 	.name = "Phonebook Access server",
 	.service = OBEX_PBAP,
-	.channel = PBAP_CHANNEL,
-	.secure = TRUE,
-	.record = PBAP_RECORD,
 	.target = PBAP_TARGET,
 	.target_size = TARGET_SIZE,
 	.connect = pbap_connect,
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH BlueZ 10/11] mas: Remove record details
  2012-12-12 11:52 [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Luiz Augusto von Dentz
                   ` (7 preceding siblings ...)
  2012-12-12 11:52 ` [PATCH BlueZ 09/11] pbap: " Luiz Augusto von Dentz
@ 2012-12-12 11:52 ` Luiz Augusto von Dentz
  2012-12-12 11:52 ` [PATCH BlueZ 11/11] irmc: " Luiz Augusto von Dentz
  2012-12-12 12:02 ` [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Johan Hedberg
  10 siblings, 0 replies; 14+ messages in thread
From: Luiz Augusto von Dentz @ 2012-12-12 11:52 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

Standart service records are already supported by bluetoothd
---
 obexd/plugins/mas.c | 51 ---------------------------------------------------
 1 file changed, 51 deletions(-)

diff --git a/obexd/plugins/mas.c b/obexd/plugins/mas.c
index 1b18059..3270edd 100644
--- a/obexd/plugins/mas.c
+++ b/obexd/plugins/mas.c
@@ -49,54 +49,6 @@
 #define READ_STATUS_REQ 0
 #define DELETE_STATUS_REQ 1
 
-/* Channel number according to bluez doc/assigned-numbers.txt */
-#define MAS_CHANNEL	16
-
-#define MAS_RECORD "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>		\
-<record>								\
-  <attribute id=\"0x0001\">						\
-    <sequence>								\
-      <uuid value=\"0x1132\"/>						\
-    </sequence>								\
-  </attribute>								\
-									\
-  <attribute id=\"0x0004\">						\
-    <sequence>								\
-      <sequence>							\
-        <uuid value=\"0x0100\"/>					\
-      </sequence>							\
-      <sequence>							\
-        <uuid value=\"0x0003\"/>					\
-        <uint8 value=\"%u\" name=\"channel\"/>				\
-      </sequence>							\
-      <sequence>							\
-        <uuid value=\"0x0008\"/>					\
-      </sequence>							\
-    </sequence>								\
-  </attribute>								\
-									\
-  <attribute id=\"0x0009\">						\
-    <sequence>								\
-      <sequence>							\
-        <uuid value=\"0x1134\"/>					\
-        <uint16 value=\"0x0100\" name=\"version\"/>			\
-      </sequence>							\
-    </sequence>								\
-  </attribute>								\
-									\
-  <attribute id=\"0x0100\">						\
-    <text value=\"%s\" name=\"name\"/>					\
-  </attribute>								\
-									\
-  <attribute id=\"0x0315\">						\
-    <uint8 value=\"0x00\"/>						\
-  </attribute>								\
-									\
-  <attribute id=\"0x0316\">						\
-    <uint8 value=\"0x0F\"/>						\
-  </attribute>								\
-</record>"
-
 #define XML_DECL "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
 
 /* Building blocks for x-obex/folder-listing */
@@ -764,9 +716,6 @@ static int any_close(void *obj)
 static struct obex_service_driver mas = {
 	.name = "Message Access server",
 	.service = OBEX_MAS,
-	.channel = MAS_CHANNEL,
-	.secure = TRUE,
-	.record = MAS_RECORD,
 	.target = MAS_TARGET,
 	.target_size = TARGET_SIZE,
 	.connect = mas_connect,
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH BlueZ 11/11] irmc: Remove record details
  2012-12-12 11:52 [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Luiz Augusto von Dentz
                   ` (8 preceding siblings ...)
  2012-12-12 11:52 ` [PATCH BlueZ 10/11] mas: " Luiz Augusto von Dentz
@ 2012-12-12 11:52 ` Luiz Augusto von Dentz
  2012-12-12 12:02 ` [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Johan Hedberg
  10 siblings, 0 replies; 14+ messages in thread
From: Luiz Augusto von Dentz @ 2012-12-12 11:52 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

Standart service records are already supported by bluetoothd
---
 obexd/plugins/irmc.c | 49 -------------------------------------------------
 1 file changed, 49 deletions(-)

diff --git a/obexd/plugins/irmc.c b/obexd/plugins/irmc.c
index c9c3521..d343977 100644
--- a/obexd/plugins/irmc.c
+++ b/obexd/plugins/irmc.c
@@ -46,52 +46,6 @@
 #include "filesystem.h"
 #include "manager.h"
 
-#define IRMC_CHANNEL	14
-
-#define IRMC_RECORD "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>	\
-<record>								\
-  <attribute id=\"0x0001\">						\
-    <sequence>								\
-      <uuid value=\"0x1104\"/>						\
-    </sequence>								\
-  </attribute>								\
-									\
-  <attribute id=\"0x0004\">						\
-    <sequence>								\
-      <sequence>							\
-        <uuid value=\"0x0100\"/>					\
-      </sequence>							\
-      <sequence>							\
-        <uuid value=\"0x0003\"/>					\
-        <uint8 value=\"%u\" name=\"channel\"/>				\
-      </sequence>							\
-      <sequence>							\
-        <uuid value=\"0x0008\"/>					\
-      </sequence>							\
-    </sequence>								\
-  </attribute>								\
-									\
-  <attribute id=\"0x0009\">						\
-    <sequence>								\
-      <sequence>							\
-        <uuid value=\"0x1104\"/>					\
-        <uint16 value=\"0x0100\" name=\"version\"/>			\
-      </sequence>							\
-    </sequence>								\
-  </attribute>								\
-									\
-  <attribute id=\"0x0100\">						\
-    <text value=\"%s\" name=\"name\"/>					\
-  </attribute>								\
-									\
-  <attribute id=\"0x0301\">						\
-    <sequence>								\
-      <uint8 value=\"0x01\"/>						\
-    </sequence>								\
-  </attribute>								\
-</record>"
-
-
 struct aparam_header {
 	uint8_t tag;
 	uint8_t len;
@@ -488,9 +442,6 @@ static struct obex_mime_type_driver irmc_driver = {
 static struct obex_service_driver irmc = {
 	.name = "IRMC Sync server",
 	.service = OBEX_IRMC,
-	.channel = IRMC_CHANNEL,
-	.secure = TRUE,
-	.record = IRMC_RECORD,
 	.target = IRMC_TARGET,
 	.target_size = IRMC_TARGET_SIZE,
 	.connect = irmc_connect,
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support
  2012-12-12 11:52 [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Luiz Augusto von Dentz
                   ` (9 preceding siblings ...)
  2012-12-12 11:52 ` [PATCH BlueZ 11/11] irmc: " Luiz Augusto von Dentz
@ 2012-12-12 12:02 ` Johan Hedberg
  2012-12-12 16:38   ` Mikel Astiz
  10 siblings, 1 reply; 14+ messages in thread
From: Johan Hedberg @ 2012-12-12 12:02 UTC (permalink / raw)
  To: Luiz Augusto von Dentz; +Cc: linux-bluetooth

Hi Luiz,

On Wed, Dec 12, 2012, Luiz Augusto von Dentz wrote:
> This changes obexd to use ProfileManager.RegisterProfile
> ---
>  obexd/plugins/bluetooth.c | 696 ++++++++++++++--------------------------------
>  1 file changed, 212 insertions(+), 484 deletions(-)

All patches in this set have been applied. I also removed the service
plugin in the same go as now all known users of it are gone.

Johan

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support
  2012-12-12 12:02 ` [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Johan Hedberg
@ 2012-12-12 16:38   ` Mikel Astiz
  2012-12-12 18:55     ` Johan Hedberg
  0 siblings, 1 reply; 14+ messages in thread
From: Mikel Astiz @ 2012-12-12 16:38 UTC (permalink / raw)
  To: Luiz Augusto von Dentz, linux-bluetooth

Hi Johan, Luiz,

On Wed, Dec 12, 2012 at 1:02 PM, Johan Hedberg <johan.hedberg@gmail.com> wrote:
> Hi Luiz,
>
> On Wed, Dec 12, 2012, Luiz Augusto von Dentz wrote:
>> This changes obexd to use ProfileManager.RegisterProfile
>> ---
>>  obexd/plugins/bluetooth.c | 696 ++++++++++++++--------------------------------
>>  1 file changed, 212 insertions(+), 484 deletions(-)
>
> All patches in this set have been applied. I also removed the service
> plugin in the same go as now all known users of it are gone.

I'm a bit confused with these recent changes. I haven't been following
this closely so I guess I'm missing the Big Plan but let me start with
the basics: both bluetoothd and obexd repositories were merged but I
believe both daemons are still going to be separate daemons, is this
correct?

If yes, it makes sense that obexd makes use of the "external profile"
infrastructure.

But in that case, why would we add any obex-specific code into
bluetoothd? My understanding was that, if a profile is implemented as
an external profile, the bluetoothd core would not be aware of it.

Cheers,
Mikel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support
  2012-12-12 16:38   ` Mikel Astiz
@ 2012-12-12 18:55     ` Johan Hedberg
  0 siblings, 0 replies; 14+ messages in thread
From: Johan Hedberg @ 2012-12-12 18:55 UTC (permalink / raw)
  To: Mikel Astiz; +Cc: Luiz Augusto von Dentz, linux-bluetooth

Hi Mikel,

On Wed, Dec 12, 2012, Mikel Astiz wrote:
> I'm a bit confused with these recent changes. I haven't been following
> this closely so I guess I'm missing the Big Plan but let me start with
> the basics: both bluetoothd and obexd repositories were merged but I
> believe both daemons are still going to be separate daemons, is this
> correct?
> 
> If yes, it makes sense that obexd makes use of the "external profile"
> infrastructure.
> 
> But in that case, why would we add any obex-specific code into
> bluetoothd? My understanding was that, if a profile is implemented as
> an external profile, the bluetoothd core would not be aware of it.

No, bluetoothd still takes care of SDP record registration,
server/client socket handling, authorization, etc. Some external
profiles (like HFP implemented through oFono) also take part in the
Device.Connect connection procedure (this is particularly important for
HFP since it needs to be the first of the audio profiles to be
connected).

>From the L2CAP/RFCOMM connection establishment onwards the external
profile takes over though through the NewConnection method.

Johan

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2012-12-12 18:55 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-12 11:52 [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Luiz Augusto von Dentz
2012-12-12 11:52 ` [PATCH BlueZ 02/11] core: Add MAS record Luiz Augusto von Dentz
2012-12-12 11:52 ` [PATCH BlueZ 03/11] core: Add SYNC record Luiz Augusto von Dentz
2012-12-12 11:52 ` [PATCH BlueZ 04/11] obexd: Enable support for MAS profile Luiz Augusto von Dentz
2012-12-12 11:52 ` [PATCH BlueZ 05/11] obexd: Enable support SYNC profile Luiz Augusto von Dentz
2012-12-12 11:52 ` [PATCH BlueZ 06/11] obexd: Add support for custom records Luiz Augusto von Dentz
2012-12-12 11:52 ` [PATCH BlueZ 07/11] opp: Remove record details Luiz Augusto von Dentz
2012-12-12 11:52 ` [PATCH BlueZ 08/11] ftp: " Luiz Augusto von Dentz
2012-12-12 11:52 ` [PATCH BlueZ 09/11] pbap: " Luiz Augusto von Dentz
2012-12-12 11:52 ` [PATCH BlueZ 10/11] mas: " Luiz Augusto von Dentz
2012-12-12 11:52 ` [PATCH BlueZ 11/11] irmc: " Luiz Augusto von Dentz
2012-12-12 12:02 ` [PATCH BlueZ 01/11] obexd: Port bluetooth plugin to use external profile support Johan Hedberg
2012-12-12 16:38   ` Mikel Astiz
2012-12-12 18:55     ` Johan Hedberg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).