diff --git a/src/profile.c b/src/profile.c
index ecbb1c5..4fdf940 100644
--- a/src/profile.c
+++ b/src/profile.c
uint8_t chan;
guint auth_id;
- unsigned int svc_id;
DBusPendingCall *pending;
};
if (ext_io->auth_id != 0)
btd_cancel_authorization(ext_io->auth_id);
- if (ext_io->svc_id != 0)
- device_remove_svc_complete_callback(ext_io->device,
- ext_io->svc_id);
-
if (ext_io->pending) {
dbus_pending_call_cancel(ext_io->pending);
dbus_pending_call_unref(ext_io->pending);
goto drop;
}
- if (conn->svc_id > 0) {
- DBG("Connection from %s authorized but still waiting for SDP",
- addr);
- return;
- }
-
if (!bt_io_accept(conn->io, ext_connect, conn, NULL, &gerr)) {
error("bt_io_accept: %s", gerr->message);
g_error_free(gerr);
return conn;
}
-static void ext_svc_complete(struct btd_device *dev, int err, void *user_data)
-{
- struct ext_io *conn = user_data;
- struct ext_profile *ext = conn->ext;
- const bdaddr_t *bdaddr;
- GError *gerr = NULL;
- char addr[18];
-
- conn->svc_id = 0;
-
- bdaddr = device_get_address(dev);
- ba2str(bdaddr, addr);
-
- if (err < 0) {
- error("Service resolving failed for %s: %s (%d)",
- addr, strerror(-err), -err);
- goto drop;
- }
-
- DBG("Services resolved for %s", addr);
-
- if (conn->auth_id > 0) {
- DBG("Services resolved but still waiting for authorization");
- return;
- }
-
- if (!bt_io_accept(conn->io, ext_connect, conn, NULL, &gerr)) {
- error("bt_io_accept: %s", gerr->message);
- g_error_free(gerr);
- goto drop;
- }
-
- DBG("%s authorized to connect to %s", addr, ext->name);
-
- return;
-
-drop:
- ext->conns = g_slist_remove(ext->conns, conn);
- ext_io_destroy(conn);
-}
-
static void ext_confirm(GIOChannel *io, gpointer user_data)
{
struct ext_io *server = user_data;
ext->conns = g_slist_append(ext->conns, conn);
- conn->svc_id = device_wait_for_svc_complete(conn->device,
- ext_svc_complete,
- conn);
-
DBG("%s authorizing connection from %s", ext->name, addr);
}