Linux bluetooth development
 help / color / mirror / Atom feed
* [PATCHv8 14/15] android/socket: Refactor socket send_fd function
From: Andrei Emeltchenko @ 2013-11-25  9:44 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385372698-16212-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

Make code cleaner and initialize local cmsg buffer to zeroes.
---
 android/socket.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/android/socket.c b/android/socket.c
index 5f89f2c..22472b9 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -394,7 +394,7 @@ static int bt_sock_send_fd(int sock_fd, const void *buf, int len, int send_fd)
 	struct msghdr msg;
 	struct cmsghdr *cmsg;
 	struct iovec iv;
-	char msgbuf[CMSG_SPACE(1)];
+	char cmsgbuf[CMSG_SPACE(sizeof(int))];
 
 	DBG("len %d sock_fd %d send_fd %d", len, sock_fd, send_fd);
 
@@ -402,13 +402,16 @@ static int bt_sock_send_fd(int sock_fd, const void *buf, int len, int send_fd)
 		return -1;
 
 	memset(&msg, 0, sizeof(msg));
+	memset(cmsgbuf, 0, sizeof(cmsgbuf));
+
+	msg.msg_control = cmsgbuf;
+	msg.msg_controllen = sizeof(cmsgbuf);
 
-	msg.msg_control = msgbuf;
-	msg.msg_controllen = sizeof(msgbuf);
 	cmsg = CMSG_FIRSTHDR(&msg);
 	cmsg->cmsg_level = SOL_SOCKET;
 	cmsg->cmsg_type = SCM_RIGHTS;
 	cmsg->cmsg_len = CMSG_LEN(sizeof(send_fd));
+
 	memcpy(CMSG_DATA(cmsg), &send_fd, sizeof(send_fd));
 
 	iv.iov_base = (unsigned char *) buf;
-- 
1.8.3.2


^ permalink raw reply related

* [PATCHv8 13/15] android/hal-sock: Print bdaddr on connect
From: Andrei Emeltchenko @ 2013-11-25  9:44 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385372698-16212-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

---
 android/hal-sock.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/android/hal-sock.c b/android/hal-sock.c
index bd88ad8..e02a49a 100644
--- a/android/hal-sock.c
+++ b/android/hal-sock.c
@@ -82,8 +82,8 @@ static bt_status_t sock_connect(const bt_bdaddr_t *bdaddr, btsock_type_t type,
 		return BT_STATUS_PARM_INVALID;
 	}
 
-	DBG("uuid %s chan %d sock %p type %d flags 0x%02x",
-		btuuid2str(uuid), chan, sock, type, flags);
+	DBG("bdaddr %s uuid %s chan %d sock %p type %d flags 0x%02x",
+		bdaddr2str(bdaddr), btuuid2str(uuid), chan, sock, type, flags);
 
 	if (type != BTSOCK_RFCOMM) {
 		error("Socket type %u not supported", type);
-- 
1.8.3.2


^ permalink raw reply related

* [PATCHv8 12/15] android/socket: Support listen() with supplied chan number
From: Andrei Emeltchenko @ 2013-11-25  9:44 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385372698-16212-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

No profile is assigned in this case. There is a possibility to use
Serial Port Profile.
---
 android/socket.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/android/socket.c b/android/socket.c
index ca5ea2f..5f89f2c 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -644,10 +644,13 @@ static int handle_listen(void *buf)
 	DBG("");
 
 	profile = get_profile_by_uuid(cmd->uuid);
-	if (!profile)
-		return -1;
-
-	chan = profile->channel;
+	if (!profile) {
+		if (!cmd->channel)
+			return -1;
+		else
+			chan = cmd->channel;
+	} else
+		chan = profile->channel;
 
 	DBG("rfcomm channel %d svc_name %s", chan, cmd->name);
 
@@ -682,7 +685,9 @@ static int handle_listen(void *buf)
 		return -1;
 	}
 
-	rfsock->service_handle = sdp_service_register(profile, cmd->name);
+	if (profile)
+		rfsock->service_handle = sdp_service_register(profile,
+								cmd->name);
 
 	return hal_fd;
 }
-- 
1.8.3.2


^ permalink raw reply related

* [PATCHv8 11/15] android/socket: Add SPP SDP record
From: Andrei Emeltchenko @ 2013-11-25  9:44 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385372698-16212-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

---
 android/socket.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 72 insertions(+), 1 deletion(-)

diff --git a/android/socket.c b/android/socket.c
index 619d5e9..ca5ea2f 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -261,6 +261,75 @@ static sdp_record_t *create_pbap_record(uint8_t chan, const char *svc_name)
 	return record;
 }
 
+static sdp_record_t *create_spp_record(uint8_t chan, const char *svc_name)
+{
+	const char *service_name = "Serial Port";
+	sdp_list_t *svclass_id, *apseq, *profiles, *root;
+	uuid_t root_uuid, sp_uuid, l2cap, rfcomm;
+	sdp_profile_desc_t profile;
+	sdp_list_t *aproto, *proto[2];
+	sdp_data_t *channel;
+	sdp_record_t *record;
+
+	record = sdp_record_alloc();
+	if (!record)
+		return NULL;
+
+	record->handle =  sdp_next_handle();
+
+	sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);
+	root = sdp_list_append(NULL, &root_uuid);
+	sdp_set_browse_groups(record, root);
+
+	sdp_uuid16_create(&sp_uuid, SERIAL_PORT_SVCLASS_ID);
+	svclass_id = sdp_list_append(NULL, &sp_uuid);
+	sdp_set_service_classes(record, svclass_id);
+
+	sdp_uuid16_create(&profile.uuid, SERIAL_PORT_PROFILE_ID);
+	profile.version = 0x0100;
+	profiles = sdp_list_append(NULL, &profile);
+	sdp_set_profile_descs(record, profiles);
+
+	sdp_uuid16_create(&l2cap, L2CAP_UUID);
+	proto[0] = sdp_list_append(NULL, &l2cap);
+	apseq = sdp_list_append(NULL, proto[0]);
+
+	sdp_uuid16_create(&rfcomm, RFCOMM_UUID);
+	proto[1] = sdp_list_append(NULL, &rfcomm);
+	channel = sdp_data_alloc(SDP_UINT8, &chan);
+	proto[1] = sdp_list_append(proto[1], channel);
+	apseq = sdp_list_append(apseq, proto[1]);
+
+	aproto = sdp_list_append(NULL, apseq);
+	sdp_set_access_protos(record, aproto);
+
+	sdp_add_lang_attr(record);
+
+	if (svc_name)
+		service_name = svc_name;
+
+	sdp_set_info_attr(record, service_name, "BlueZ", "COM Port");
+
+	sdp_set_url_attr(record, "http://www.bluez.org/",
+			"http://www.bluez.org/", "http://www.bluez.org/");
+
+	sdp_set_service_id(record, sp_uuid);
+	sdp_set_service_ttl(record, 0xffff);
+	sdp_set_service_avail(record, 0xff);
+	sdp_set_record_state(record, 0x00001234);
+
+	sdp_data_free(channel);
+	sdp_list_free(proto[0], NULL);
+	sdp_list_free(proto[1], NULL);
+	sdp_list_free(apseq, NULL);
+	sdp_list_free(aproto, NULL);
+	sdp_list_free(root, NULL);
+	sdp_list_free(svclass_id, NULL);
+	sdp_list_free(profiles, NULL);
+
+	return record;
+}
+
 static struct profile_info {
 	uint8_t		uuid[16];
 	uint8_t		channel;
@@ -295,7 +364,9 @@ static struct profile_info {
 			0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x10, 0x00,
 			0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB
 		},
-		.channel = SPP_DEFAULT_CHANNEL
+		.channel = SPP_DEFAULT_CHANNEL,
+		.svc_hint = 0,
+		.create_record = create_spp_record
 	},
 };
 
-- 
1.8.3.2


^ permalink raw reply related

* [PATCHv8 10/15] android/socket: Add PBAP SDP record
From: Andrei Emeltchenko @ 2013-11-25  9:44 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385372698-16212-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

This adds SDP service record like shown below:

Service Name: OBEX Phonebook Access Server
Service RecHandle: 0x10002
Service Class ID List:
  "Phonebook Access - PSE" (0x112f)
Protocol Descriptor List:
  "RFCOMM" (0x0003)
    Channel: 15
  "OBEX" (0x0008)
Profile Descriptor List:
  "Phonebook Access" (0x1130)
    Version: 0x0100
---
 android/socket.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 73 insertions(+), 1 deletion(-)

diff --git a/android/socket.c b/android/socket.c
index 94add6f..619d5e9 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -191,6 +191,76 @@ static sdp_record_t *create_opp_record(uint8_t chan, const char *svc_name)
 	return record;
 }
 
+static sdp_record_t *create_pbap_record(uint8_t chan, const char *svc_name)
+{
+	const char *service_name = "OBEX Phonebook Access Server";
+	sdp_list_t *svclass_id, *pfseq, *apseq, *root;
+	uuid_t root_uuid, pbap_uuid, l2cap_uuid, rfcomm_uuid, obex_uuid;
+	sdp_profile_desc_t profile[1];
+	sdp_list_t *aproto, *proto[3];
+	sdp_data_t *channel;
+	uint8_t formats[] = { 0x01 };
+	uint8_t dtd = SDP_UINT8;
+	sdp_data_t *sflist;
+	sdp_record_t *record;
+
+	record = sdp_record_alloc();
+	if (!record)
+		return NULL;
+
+	record->handle =  sdp_next_handle();
+
+	sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);
+	root = sdp_list_append(NULL, &root_uuid);
+	sdp_set_browse_groups(record, root);
+
+	sdp_uuid16_create(&pbap_uuid, PBAP_PSE_SVCLASS_ID);
+	svclass_id = sdp_list_append(NULL, &pbap_uuid);
+	sdp_set_service_classes(record, svclass_id);
+
+	sdp_uuid16_create(&profile[0].uuid, PBAP_PROFILE_ID);
+	profile[0].version = 0x0100;
+	pfseq = sdp_list_append(NULL, profile);
+	sdp_set_profile_descs(record, pfseq);
+
+	sdp_uuid16_create(&l2cap_uuid, L2CAP_UUID);
+	proto[0] = sdp_list_append(NULL, &l2cap_uuid);
+	apseq = sdp_list_append(NULL, proto[0]);
+
+	sdp_uuid16_create(&rfcomm_uuid, RFCOMM_UUID);
+	proto[1] = sdp_list_append(NULL, &rfcomm_uuid);
+	channel = sdp_data_alloc(SDP_UINT8, &chan);
+	proto[1] = sdp_list_append(proto[1], channel);
+	apseq = sdp_list_append(apseq, proto[1]);
+
+	sdp_uuid16_create(&obex_uuid, OBEX_UUID);
+	proto[2] = sdp_list_append(NULL, &obex_uuid);
+	apseq = sdp_list_append(apseq, proto[2]);
+
+	aproto = sdp_list_append(NULL, apseq);
+	sdp_set_access_protos(record, aproto);
+
+	sflist = sdp_data_alloc(dtd, formats);
+	sdp_attr_add(record, SDP_ATTR_SUPPORTED_REPOSITORIES, sflist);
+
+	if (svc_name)
+		service_name = svc_name;
+
+	sdp_set_info_attr(record, service_name, NULL, NULL);
+
+	sdp_data_free(channel);
+	sdp_list_free(proto[0], NULL);
+	sdp_list_free(proto[1], NULL);
+	sdp_list_free(proto[2], NULL);
+	sdp_list_free(apseq, NULL);
+	sdp_list_free(pfseq, NULL);
+	sdp_list_free(aproto, NULL);
+	sdp_list_free(root, NULL);
+	sdp_list_free(svclass_id, NULL);
+
+	return record;
+}
+
 static struct profile_info {
 	uint8_t		uuid[16];
 	uint8_t		channel;
@@ -203,7 +273,9 @@ static struct profile_info {
 			0x00, 0x00, 0x11, 0x2F, 0x00, 0x00, 0x10, 0x00,
 			0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB
 		},
-		.channel = PBAP_DEFAULT_CHANNEL
+		.channel = PBAP_DEFAULT_CHANNEL,
+		.svc_hint = SVC_HINT_OBEX,
+		.create_record = create_pbap_record
 	}, {
 		.uuid = {
 			0x00, 0x00, 0x11, 0x05, 0x00, 0x00, 0x10, 0x00,
-- 
1.8.3.2


^ permalink raw reply related

* [PATCHv8 09/15] android/socket: Add SPP uuid to profile table
From: Andrei Emeltchenko @ 2013-11-25  9:44 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385372698-16212-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

---
 android/socket.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/android/socket.c b/android/socket.c
index 5f2af48..94add6f 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -45,6 +45,7 @@
 #include "utils.h"
 #include "socket.h"
 
+#define SPP_DEFAULT_CHANNEL	3
 #define OPP_DEFAULT_CHANNEL	9
 #define PBAP_DEFAULT_CHANNEL	15
 #define MAS_DEFAULT_CHANNEL	16
@@ -217,7 +218,13 @@ static struct profile_info {
 			0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB
 		},
 		.channel = MAS_DEFAULT_CHANNEL
-	}
+	}, {
+		.uuid = {
+			0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x10, 0x00,
+			0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB
+		},
+		.channel = SPP_DEFAULT_CHANNEL
+	},
 };
 
 static uint32_t sdp_service_register(struct profile_info *profile,
-- 
1.8.3.2


^ permalink raw reply related

* [PATCHv8 08/15] android/socket: Add MAS uuid to profile table
From: Andrei Emeltchenko @ 2013-11-25  9:44 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385372698-16212-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

---
 android/socket.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/android/socket.c b/android/socket.c
index a15268d..5f2af48 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -47,6 +47,7 @@
 
 #define OPP_DEFAULT_CHANNEL	9
 #define PBAP_DEFAULT_CHANNEL	15
+#define MAS_DEFAULT_CHANNEL	16
 
 #define SVC_HINT_OBEX 0x10
 
@@ -210,6 +211,12 @@ static struct profile_info {
 		.channel = OPP_DEFAULT_CHANNEL,
 		.svc_hint = SVC_HINT_OBEX,
 		.create_record = create_opp_record
+	}, {
+		.uuid = {
+			0x00, 0x00, 0x11, 0x32, 0x00, 0x00, 0x10, 0x00,
+			0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB
+		},
+		.channel = MAS_DEFAULT_CHANNEL
 	}
 };
 
-- 
1.8.3.2


^ permalink raw reply related

* [PATCHv8 07/15] android/socket: Add OPP SDP record
From: Andrei Emeltchenko @ 2013-11-25  9:44 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385372698-16212-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

This adds SDP record for OPP shown below:

Service Name: OBEX Object Push
Service RecHandle: 0x10002
Service Class ID List:
  "OBEX Object Push" (0x1105)
Protocol Descriptor List:
  "RFCOMM" (0x0003)
    Channel: 9
  "OBEX" (0x0008)
Profile Descriptor List:
  "OBEX Object Push" (0x1105)
    Version: 0x0100
---
 android/socket.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 81 insertions(+), 1 deletion(-)

diff --git a/android/socket.c b/android/socket.c
index 71dcf4a..a15268d 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -48,6 +48,8 @@
 #define OPP_DEFAULT_CHANNEL	9
 #define PBAP_DEFAULT_CHANNEL	15
 
+#define SVC_HINT_OBEX 0x10
+
 static bdaddr_t adapter_addr;
 
 /* Simple list of RFCOMM server sockets */
@@ -111,6 +113,82 @@ static void cleanup_rfsock(struct rfcomm_sock *rfsock)
 	g_free(rfsock);
 }
 
+static sdp_record_t *create_opp_record(uint8_t chan, const char *svc_name)
+{
+	const char *service_name = "OBEX Object Push";
+	sdp_list_t *svclass_id, *pfseq, *apseq, *root;
+	uuid_t root_uuid, opush_uuid, l2cap_uuid, rfcomm_uuid, obex_uuid;
+	sdp_profile_desc_t profile[1];
+	sdp_list_t *aproto, *proto[3];
+	uint8_t formats[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
+	void *dtds[sizeof(formats)], *values[sizeof(formats)];
+	unsigned int i;
+	uint8_t dtd = SDP_UINT8;
+	sdp_data_t *sflist;
+	sdp_data_t *channel;
+	sdp_record_t *record;
+
+	record = sdp_record_alloc();
+	if (!record)
+		return NULL;
+
+	record->handle =  sdp_next_handle();
+
+	sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);
+	root = sdp_list_append(NULL, &root_uuid);
+	sdp_set_browse_groups(record, root);
+
+	sdp_uuid16_create(&opush_uuid, OBEX_OBJPUSH_SVCLASS_ID);
+	svclass_id = sdp_list_append(NULL, &opush_uuid);
+	sdp_set_service_classes(record, svclass_id);
+
+	sdp_uuid16_create(&profile[0].uuid, OBEX_OBJPUSH_PROFILE_ID);
+	profile[0].version = 0x0100;
+	pfseq = sdp_list_append(NULL, profile);
+	sdp_set_profile_descs(record, pfseq);
+
+	sdp_uuid16_create(&l2cap_uuid, L2CAP_UUID);
+	proto[0] = sdp_list_append(NULL, &l2cap_uuid);
+	apseq = sdp_list_append(NULL, proto[0]);
+
+	sdp_uuid16_create(&rfcomm_uuid, RFCOMM_UUID);
+	proto[1] = sdp_list_append(NULL, &rfcomm_uuid);
+	channel = sdp_data_alloc(SDP_UINT8, &chan);
+	proto[1] = sdp_list_append(proto[1], channel);
+	apseq = sdp_list_append(apseq, proto[1]);
+
+	sdp_uuid16_create(&obex_uuid, OBEX_UUID);
+	proto[2] = sdp_list_append(NULL, &obex_uuid);
+	apseq = sdp_list_append(apseq, proto[2]);
+
+	aproto = sdp_list_append(NULL, apseq);
+	sdp_set_access_protos(record, aproto);
+
+	for (i = 0; i < sizeof(formats); i++) {
+		dtds[i] = &dtd;
+		values[i] = &formats[i];
+	}
+	sflist = sdp_seq_alloc(dtds, values, sizeof(formats));
+	sdp_attr_add(record, SDP_ATTR_SUPPORTED_FORMATS_LIST, sflist);
+
+	if (svc_name)
+		service_name = svc_name;
+
+	sdp_set_info_attr(record, service_name, NULL, NULL);
+
+	sdp_data_free(channel);
+	sdp_list_free(proto[0], NULL);
+	sdp_list_free(proto[1], NULL);
+	sdp_list_free(proto[2], NULL);
+	sdp_list_free(apseq, NULL);
+	sdp_list_free(pfseq, NULL);
+	sdp_list_free(aproto, NULL);
+	sdp_list_free(root, NULL);
+	sdp_list_free(svclass_id, NULL);
+
+	return record;
+}
+
 static struct profile_info {
 	uint8_t		uuid[16];
 	uint8_t		channel;
@@ -129,7 +207,9 @@ static struct profile_info {
 			0x00, 0x00, 0x11, 0x05, 0x00, 0x00, 0x10, 0x00,
 			0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB
 		  },
-		.channel = OPP_DEFAULT_CHANNEL
+		.channel = OPP_DEFAULT_CHANNEL,
+		.svc_hint = SVC_HINT_OBEX,
+		.create_record = create_opp_record
 	}
 };
 
-- 
1.8.3.2


^ permalink raw reply related

* [PATCHv8 06/15] android/socket: Add general service create/remove function
From: Andrei Emeltchenko @ 2013-11-25  9:44 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385372698-16212-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

create_record function from profile is used to create SDP service record.
The record is removed from rfsock cleanup function.
---
 android/socket.c | 30 ++++++++++++++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/android/socket.c b/android/socket.c
index 9f8c535..71dcf4a 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -35,7 +35,9 @@
 #include "lib/sdp.h"
 #include "lib/sdp_lib.h"
 #include "src/sdp-client.h"
+#include "src/sdpd.h"
 
+#include "bluetooth.h"
 #include "log.h"
 #include "hal-msg.h"
 #include "hal-ipc.h"
@@ -63,6 +65,7 @@ struct rfcomm_sock {
 	guint stack_watch;
 
 	bdaddr_t dst;
+	uint32_t service_handle;
 };
 
 static struct rfcomm_sock *create_rfsock(int sock, int *hal_fd)
@@ -102,6 +105,9 @@ static void cleanup_rfsock(struct rfcomm_sock *rfsock)
 		if (!g_source_remove(rfsock->stack_watch))
 			error("stack_watch source was not found");
 
+	if (rfsock->service_handle)
+		bt_adapter_remove_record(rfsock->service_handle);
+
 	g_free(rfsock);
 }
 
@@ -110,7 +116,7 @@ static struct profile_info {
 	uint8_t		channel;
 	uint8_t		svc_hint;
 	BtIOSecLevel	sec_level;
-	sdp_record_t *	(*create_record)(uint8_t chan);
+	sdp_record_t *	(*create_record)(uint8_t chan, const char *svc_name);
 } profiles[] = {
 	{
 		.uuid = {
@@ -127,6 +133,24 @@ static struct profile_info {
 	}
 };
 
+static uint32_t sdp_service_register(struct profile_info *profile,
+							const void *svc_name)
+{
+	sdp_record_t *record;
+
+	record = profile->create_record(profile->channel, svc_name);
+	if (!record)
+		return 0;
+
+	if (bt_adapter_add_record(record, profile->svc_hint) < 0) {
+		error("Failed to register on SDP record");
+		sdp_record_free(record);
+		return 0;
+	}
+
+	return record->handle;
+}
+
 static int bt_sock_send_fd(int sock_fd, const void *buf, int len, int send_fd)
 {
 	ssize_t ret;
@@ -388,7 +412,7 @@ static int handle_listen(void *buf)
 
 	chan = profile->channel;
 
-	DBG("rfcomm channel %d", chan);
+	DBG("rfcomm channel %d svc_name %s", chan, cmd->name);
 
 	rfsock = create_rfsock(-1, &hal_fd);
 	if (!rfsock)
@@ -421,6 +445,8 @@ static int handle_listen(void *buf)
 		return -1;
 	}
 
+	rfsock->service_handle = sdp_service_register(profile, cmd->name);
+
 	return hal_fd;
 }
 
-- 
1.8.3.2


^ permalink raw reply related

* [PATCHv8 05/15] android/socket: Close file descriptor after sending
From: Andrei Emeltchenko @ 2013-11-25  9:44 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385372698-16212-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

---
 android/socket.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/android/socket.c b/android/socket.c
index f9a6587..9f8c535 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -607,6 +607,7 @@ void bt_sock_handle_cmd(int sk, uint8_t opcode, void *buf, uint16_t len)
 			break;
 
 		ipc_send(sk, HAL_SERVICE_ID_SOCK, opcode, 0, NULL, fd);
+		close(fd);
 		return;
 	case HAL_OP_SOCK_CONNECT:
 		fd = handle_connect(buf);
@@ -614,6 +615,7 @@ void bt_sock_handle_cmd(int sk, uint8_t opcode, void *buf, uint16_t len)
 			break;
 
 		ipc_send(sk, HAL_SERVICE_ID_SOCK, opcode, 0, NULL, fd);
+		close(fd);
 		return;
 	default:
 		DBG("Unhandled command, opcode 0x%x", opcode);
-- 
1.8.3.2


^ permalink raw reply related

* [PATCHv8 04/15] android/socket: Send connect signal to Android framework
From: Andrei Emeltchenko @ 2013-11-25  9:44 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385372698-16212-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

Android framework expects connect signal to be sent when
remote device is connected.
---
 android/socket.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/android/socket.c b/android/socket.c
index 4722cf8..f9a6587 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -424,6 +424,33 @@ static int handle_listen(void *buf)
 	return hal_fd;
 }
 
+static bool sock_send_connect(struct rfcomm_sock *rfsock, bdaddr_t *bdaddr)
+{
+	struct hal_sock_connect_signal cmd;
+	int len;
+
+	DBG("");
+
+	memset(&cmd, 0, sizeof(cmd));
+	cmd.size = sizeof(cmd);
+	bdaddr2android(bdaddr, cmd.bdaddr);
+	cmd.channel = rfsock->channel;
+	cmd.status = 0;
+
+	len = write(rfsock->fd, &cmd, sizeof(cmd));
+	if (len < 0) {
+		error("%s", strerror(errno));
+		return false;
+	}
+
+	if (len != sizeof(cmd)) {
+		error("Error sending connect signal");
+		return false;
+	}
+
+	return true;
+}
+
 static void connect_cb(GIOChannel *io, GError *err, gpointer user_data)
 {
 	struct rfcomm_sock *rfsock = user_data;
@@ -445,6 +472,9 @@ static void connect_cb(GIOChannel *io, GError *err, gpointer user_data)
 		rfsock->fd, rfsock->real_sock, rfsock->channel,
 		g_io_channel_unix_get_fd(io));
 
+	if (!sock_send_connect(rfsock, dst))
+		goto fail;
+
 	/* Handle events from Android */
 	cond = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL;
 	io_stack = g_io_channel_unix_new(rfsock->fd);
-- 
1.8.3.2


^ permalink raw reply related

* [PATCHv8 03/15] android/socket: Send RFCOMM channel to framework
From: Andrei Emeltchenko @ 2013-11-25  9:44 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385372698-16212-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

Framework expects channel to be send.
---
 android/socket.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/android/socket.c b/android/socket.c
index 00231a3..4722cf8 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -522,6 +522,11 @@ static void sdp_search_cb(sdp_list_t *recs, int err, gpointer data)
 		goto fail;
 	}
 
+	if (write(rfsock->fd, &chan, sizeof(chan)) != sizeof(chan)) {
+		error("Error sending RFCOMM channel");
+		goto fail;
+	}
+
 	rfsock->real_sock = g_io_channel_unix_get_fd(io);
 	rfsock->channel = chan;
 	connections = g_list_append(connections, rfsock);
-- 
1.8.3.2


^ permalink raw reply related

* [PATCHv8 02/15] android/socket: Implement HAL connect call
From: Andrei Emeltchenko @ 2013-11-25  9:44 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385372698-16212-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

HAL connect uses similar event handlers like listen call.
---
 android/socket.c | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/android/socket.c b/android/socket.c
index cd958d9..00231a3 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -426,6 +426,42 @@ static int handle_listen(void *buf)
 
 static void connect_cb(GIOChannel *io, GError *err, gpointer user_data)
 {
+	struct rfcomm_sock *rfsock = user_data;
+	bdaddr_t *dst = &rfsock->dst;
+	GIOChannel *io_stack;
+	char address[18];
+	guint id;
+	GIOCondition cond;
+
+	if (err) {
+		error("%s", err->message);
+		goto fail;
+	}
+
+	ba2str(dst, address);
+	DBG("Connected to %s", address);
+
+	DBG("rfsock: fd %d real_sock %d chan %u sock %d",
+		rfsock->fd, rfsock->real_sock, rfsock->channel,
+		g_io_channel_unix_get_fd(io));
+
+	/* Handle events from Android */
+	cond = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL;
+	io_stack = g_io_channel_unix_new(rfsock->fd);
+	id = g_io_add_watch(io_stack, cond, sock_stack_event_cb, rfsock);
+	g_io_channel_unref(io_stack);
+
+	rfsock->stack_watch = id;
+
+	/* Handle rfcomm events */
+	cond = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL;
+	id = g_io_add_watch(io, cond, sock_rfcomm_event_cb, rfsock);
+
+	rfsock->rfcomm_watch = id;
+
+	return;
+fail:
+	cleanup_rfsock(rfsock);
 }
 
 static void sdp_search_cb(sdp_list_t *recs, int err, gpointer data)
-- 
1.8.3.2


^ permalink raw reply related

* [PATCHv8 01/15] android/socket: Parse SDP response and connect
From: Andrei Emeltchenko @ 2013-11-25  9:44 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385372698-16212-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

Parse SDP response, find RFCOMM channel and connect.
---
 android/socket.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)

diff --git a/android/socket.c b/android/socket.c
index 1815367..cd958d9 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -424,9 +424,77 @@ static int handle_listen(void *buf)
 	return hal_fd;
 }
 
+static void connect_cb(GIOChannel *io, GError *err, gpointer user_data)
+{
+}
+
 static void sdp_search_cb(sdp_list_t *recs, int err, gpointer data)
 {
+	struct rfcomm_sock *rfsock = data;
+	GError *gerr = NULL;
+	sdp_list_t *list;
+	GIOChannel *io;
+	int chan;
+
 	DBG("");
+
+	if (err < 0) {
+		error("Unable to get SDP record: %s", strerror(-err));
+		goto fail;
+	}
+
+	if (!recs || !recs->data) {
+		error("No SDP records found");
+		goto fail;
+	}
+
+	for (list = recs; list != NULL; list = list->next) {
+		sdp_record_t *rec = list->data;
+		sdp_list_t *protos;
+
+		if (sdp_get_access_protos(rec, &protos) < 0) {
+			error("Unable to get proto list");
+			goto fail;
+		}
+
+		chan = sdp_get_proto_port(protos, RFCOMM_UUID);
+
+		sdp_list_foreach(protos, (sdp_list_func_t) sdp_list_free,
+									NULL);
+		sdp_list_free(protos, NULL);
+
+		if (chan)
+			break;
+	}
+
+	if (chan <= 0) {
+		error("Could not get RFCOMM channel %d", chan);
+		goto fail;
+	}
+
+	DBG("Got RFCOMM channel %d", chan);
+
+	io = bt_io_connect(connect_cb, rfsock, NULL, &gerr,
+				BT_IO_OPT_SOURCE_BDADDR, &adapter_addr,
+				BT_IO_OPT_DEST_BDADDR, &rfsock->dst,
+				BT_IO_OPT_CHANNEL, chan,
+				BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_LOW,
+				BT_IO_OPT_INVALID);
+	if (!io) {
+		error("Failed connect: %s", gerr->message);
+		g_error_free(gerr);
+		goto fail;
+	}
+
+	rfsock->real_sock = g_io_channel_unix_get_fd(io);
+	rfsock->channel = chan;
+	connections = g_list_append(connections, rfsock);
+
+	g_io_channel_unref(io);
+
+	return;
+fail:
+	cleanup_rfsock(rfsock);
 }
 
 static int handle_connect(void *buf)
-- 
1.8.3.2


^ permalink raw reply related

* [PATCHv8 00/15] Socket HAL
From: Andrei Emeltchenko @ 2013-11-25  9:44 UTC (permalink / raw)
  To: linux-bluetooth

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

This is initial code implementing socket HAL. OPP currently works with send/receive files. Probaly
other profiles works as well, not tested yet.

Changes:
	* v8: Fixes Szymon's comment: added missing L2CAP Protocol ID in SDP Protocol Descriptor
	List, fixes getting channel number.
	* v7: Rebase and fixing missing unref. All needed SDP records for supported profiles are created.
	Support listen() with specified channel like in bluedroid.
	* v6: Use watch_id to remove source and general cleanup
	* v5: Changed uuid_to_chan table to profile table keeping information about profile like: channel, create_record,
	svc_hint and sec_level.
	* v4: Changed name rfslot -> rfsock following Johan's comment and other cosmetic changes, fixed one bug in SDP
	record, use NULL instead of 0 for sdp functions.
	* v3: Fixed coding style with write/send between file descriptors.
	* v2: Following Marcel comments changed way copying between file descriptors works, added SDP record
	for OPP and now it is possible to send files through GUI. Merged one patch with structures with actual user.
	* v1: Rebased and use static src address, hal_fd removed from structure and closed after sent to framework,
	added connect calls and SDP parsing, added cleanup_rfcomm function, minor fixes.
	* RFC Initial

TODO:
	* Use sec_level / check what to do with Android supplied security flags.
	* Use splice() (requires bionic change first)

For tracking rfcomm sockets I use structure rfslot which has following
fields:
 - real_sock - real RFCOMM socket
 - fd - fd to communicate with Android framework

create_rfslot sets hal_fd which is fd passed to Android framework with CMSG

Andrei Emeltchenko (15):
  android/socket: Parse SDP response and connect
  android/socket: Implement HAL connect call
  android/socket: Send RFCOMM channel to framework
  android/socket: Send connect signal to Android framework
  android/socket: Close file descriptor after sending
  android/socket: Add general service create/remove function
  android/socket: Add OPP SDP record
  android/socket: Add MAS uuid to profile table
  android/socket: Add SPP uuid to profile table
  android/socket: Add PBAP SDP record
  android/socket: Add SPP SDP record
  android/socket: Support listen() with supplied chan number
  android/hal-sock: Print bdaddr on connect
  android/socket: Refactor socket send_fd function
  android/hal-utils: Fix possible NULL pointer dereference

 android/hal-sock.c  |   4 +-
 android/hal-utils.c |   6 +
 android/socket.c    | 436 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 432 insertions(+), 14 deletions(-)

-- 
1.8.3.2


^ permalink raw reply

* openSUSE 13.1:  bt headsets lose connection
From: Colin Beckingham @ 2013-11-23 19:47 UTC (permalink / raw)
  To: linux-bluetooth@vger.kernel.org

[-- Attachment #1: Type: text/plain, Size: 846 bytes --]

In openSUSE 12.3 bluetooth operations were mostly ok. In the last few
days I have upgraded from 12.3 to 13.1 and now none of my bt headsets
can remain connected. Pairing is not a problem, but then they
immediately disconnect.

I have posted a bug at gnome-bluetooth, but it seems that a previous
similar bug has been tested and found that gnome-bluetooth may be
excluded. Here is the bug report:

https://bugzilla.gnome.org/show_bug.cgi?id=712379

I have run a test connection using bluetoothd (5.11) in debug mode, and
have attached the output in file bluedump.txt.

Also I have tried running bluetoothd with the -E option and no change.

I understand that it is possible this may already be known, and that
pulseaudio may be involved. But since I have the debug output I thought
I would check with the linux-bluetooth community first.

Thanks.

[-- Attachment #2: bluedump.txt --]
[-- Type: text/plain, Size: 30331 bytes --]

2013-11-21T09:54:48.362515-05:00 linux-3kti bluetoothd[21678]: Bluetooth daemon 5.11
2013-11-21T09:54:48.365917-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_init() sending read version command
2013-11-21T09:54:48.366414-05:00 linux-3kti bluetoothd[21678]: Starting SDP server
2013-11-21T09:54:48.366858-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:register_device_id() Adding device id record for 0002:1d6b:0246:050b
2013-11-21T09:54:48.367205-05:00 linux-3kti bluetoothd[21678]: src/plugin.c:plugin_init() Loading builtin plugins
2013-11-21T09:54:48.367547-05:00 linux-3kti bluetoothd[21678]: src/plugin.c:add_plugin() Loading hostname plugin
2013-11-21T09:54:48.367940-05:00 linux-3kti bluetoothd[21678]: src/plugin.c:add_plugin() Loading wiimote plugin
2013-11-21T09:54:48.368371-05:00 linux-3kti bluetoothd[21678]: src/plugin.c:add_plugin() Loading autopair plugin
2013-11-21T09:54:48.368701-05:00 linux-3kti bluetoothd[21678]: src/plugin.c:add_plugin() Loading policy plugin
2013-11-21T09:54:48.369043-05:00 linux-3kti bluetoothd[21678]: src/plugin.c:add_plugin() Loading a2dp plugin
2013-11-21T09:54:48.369401-05:00 linux-3kti bluetoothd[21678]: src/plugin.c:add_plugin() Loading avrcp plugin
2013-11-21T09:54:48.369701-05:00 linux-3kti bluetoothd[21678]: src/plugin.c:add_plugin() Loading network plugin
2013-11-21T09:54:48.370009-05:00 linux-3kti bluetoothd[21678]: src/plugin.c:add_plugin() Loading input plugin
2013-11-21T09:54:48.370271-05:00 linux-3kti bluetoothd[21678]: src/plugin.c:add_plugin() Loading hog plugin
2013-11-21T09:54:48.370529-05:00 linux-3kti bluetoothd[21678]: src/plugin.c:add_plugin() Loading gatt plugin
2013-11-21T09:54:48.370892-05:00 linux-3kti bluetoothd[21678]: src/plugin.c:add_plugin() Loading scanparam plugin
2013-11-21T09:54:48.371202-05:00 linux-3kti bluetoothd[21678]: src/plugin.c:add_plugin() Loading deviceinfo plugin
2013-11-21T09:54:48.371465-05:00 linux-3kti bluetoothd[21678]: src/plugin.c:plugin_init() Loading plugins /usr/lib64/bluetooth/plugins
2013-11-21T09:54:48.371731-05:00 linux-3kti bluetoothd[21678]: profiles/input/suspend-dummy.c:suspend_init()
2013-11-21T09:54:48.372070-05:00 linux-3kti bluetoothd[21678]: profiles/input/suspend-dummy.c:suspend_init() Created suspend-dummy FIFO on /tmp/hogsuspend
2013-11-21T09:54:48.372475-05:00 linux-3kti bluetoothd[21678]: profiles/network/manager.c:read_config() Config options: Security=true
2013-11-21T09:54:48.372802-05:00 linux-3kti bluetoothd[21678]: plugins/hostname.c:read_dmi_fallback() chassis: desktop
2013-11-21T09:54:48.373166-05:00 linux-3kti bluetoothd[21678]: plugins/hostname.c:read_dmi_fallback() major: 0x01 minor: 0x01
2013-11-21T09:54:48.373793-05:00 linux-3kti bluetoothd[21678]: src/main.c:main() Entering main loop
2013-11-21T09:54:48.374195-05:00 linux-3kti bluetoothd[21678]: Bluetooth management interface 1.3 initialized
2013-11-21T09:54:48.374563-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:read_version_complete() sending read supported commands command
2013-11-21T09:54:48.374923-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:read_version_complete() sending read index list command
2013-11-21T09:54:48.375245-05:00 linux-3kti bluetoothd[21678]: src/rfkill.c:rfkill_event() RFKILL event idx 1 type 2 op 0 soft 0 hard 0
2013-11-21T09:54:48.375540-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:read_commands_complete() Number of commands: 38
2013-11-21T09:54:48.375819-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:read_commands_complete() Number of events: 21
2013-11-21T09:54:48.376653-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:read_index_list_complete() Number of controllers: 1
2013-11-21T09:54:48.377138-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:read_index_list_complete() Found index 0
2013-11-21T09:54:48.377519-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:index_added() index 0
2013-11-21T09:54:48.377860-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:btd_adapter_new() System name: BlueZ 5.11
2013-11-21T09:54:48.378253-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:btd_adapter_new() Major class: 0
2013-11-21T09:54:48.378580-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:btd_adapter_new() Minor class: 0
2013-11-21T09:54:48.378962-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:btd_adapter_new() Modalias: usb:v1D6Bp0246d050B
2013-11-21T09:54:48.379391-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:btd_adapter_new() Discoverable timeout: 180 seconds
2013-11-21T09:54:48.379979-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:btd_adapter_new() Pairable timeout: 0 seconds
2013-11-21T09:54:48.380348-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:index_added() sending read info command for index 0
2013-11-21T09:54:48.380712-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:read_info_complete() index 0 status 0x00
2013-11-21T09:54:48.381113-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:clear_uuids() sending clear uuids command for index 0
2013-11-21T09:54:48.381403-05:00 linux-3kti bluetoothd[21678]: src/attrib-server.c:btd_adapter_gatt_server_start() Start GATT server in hci0
2013-11-21T09:54:48.381692-05:00 linux-3kti bluetoothd[21678]: src/attrib-server.c:attrib_db_add_new() handle=0x0001
2013-11-21T09:54:48.382337-05:00 linux-3kti bluetoothd[21678]: src/attrib-server.c:attrib_db_add_new() handle=0x0004
2013-11-21T09:54:48.382645-05:00 linux-3kti bluetoothd[21678]: src/attrib-server.c:attrib_db_add_new() handle=0x0006
2013-11-21T09:54:48.382932-05:00 linux-3kti bluetoothd[21678]: src/attrib-server.c:attrib_db_add_new() handle=0x0007
2013-11-21T09:54:48.383216-05:00 linux-3kti bluetoothd[21678]: src/attrib-server.c:attrib_db_add_new() handle=0x0008
2013-11-21T09:54:48.383498-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_add() /org/bluez/hci0
2013-11-21T09:54:48.383779-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Adding record with handle 0x10001
2013-11-21T09:54:48.384104-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00000007-0000-1000-8000-00805f9
2013-11-21T09:54:48.384393-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00000100-0000-1000-8000-00805f9
2013-11-21T09:54:48.384673-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00001002-0000-1000-8000-00805f9
2013-11-21T09:54:48.384961-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00001800-0000-1000-8000-00805f9
2013-11-21T09:54:48.385254-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_insert() /org/bluez/hci0
2013-11-21T09:54:48.385596-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:add_uuid() sending add uuid command for index 0
2013-11-21T09:54:48.385908-05:00 linux-3kti bluetoothd[21678]: src/attrib-server.c:attrib_db_add_new() handle=0x0010
2013-11-21T09:54:48.386196-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_add() /org/bluez/hci0
2013-11-21T09:54:48.386483-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Adding record with handle 0x10002
2013-11-21T09:54:48.386914-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00000007-0000-1000-8000-00805f9
2013-11-21T09:54:48.387208-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00000100-0000-1000-8000-00805f9
2013-11-21T09:54:48.387518-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00001002-0000-1000-8000-00805f9
2013-11-21T09:54:48.387914-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00001801-0000-1000-8000-00805f9
2013-11-21T09:54:48.388203-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_insert() /org/bluez/hci0
2013-11-21T09:54:48.388493-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:add_uuid() sending add uuid command for index 0
2013-11-21T09:54:48.388779-05:00 linux-3kti bluetoothd[21678]: profiles/audio/a2dp.c:media_server_probe() path /org/bluez/hci0
2013-11-21T09:54:48.389070-05:00 linux-3kti bluetoothd[21678]: plugins/hostname.c:hostname_probe()
2013-11-21T09:54:48.389350-05:00 linux-3kti bluetoothd[21678]: plugins/hostname.c:update_class() major: 0x01 minor: 0x01
2013-11-21T09:54:48.389669-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:btd_adapter_set_class() class: major 1 minor 1
2013-11-21T09:54:48.389963-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:set_dev_class() sending set device class command for index 0
2013-11-21T09:54:48.390245-05:00 linux-3kti bluetoothd[21678]: profiles/network/manager.c:panu_server_probe() path /org/bluez/hci0
2013-11-21T09:54:48.390527-05:00 linux-3kti bluetoothd[21678]: profiles/network/server.c:server_register() Registered interface org.bluez.NetworkServer1 on path /org/bluez/hci0
2013-11-21T09:54:48.390810-05:00 linux-3kti bluetoothd[21678]: profiles/network/manager.c:gn_server_probe() path /org/bluez/hci0
2013-11-21T09:54:48.391113-05:00 linux-3kti bluetoothd[21678]: profiles/network/manager.c:nap_server_probe() path /org/bluez/hci0
2013-11-21T09:54:48.391410-05:00 linux-3kti bluetoothd[21678]: profiles/audio/avrcp.c:avrcp_controller_server_probe() path /org/bluez/hci0
2013-11-21T09:54:48.391690-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_add() /org/bluez/hci0
2013-11-21T09:54:48.391976-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Adding record with handle 0x10003
2013-11-21T09:54:48.392255-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00000017-0000-1000-8000-00805f9
2013-11-21T09:54:48.392535-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00000100-0000-1000-8000-00805f9
2013-11-21T09:54:48.392857-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00001002-0000-1000-8000-00805f9
2013-11-21T09:54:48.393154-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 0000110e-0000-1000-8000-00805f9
2013-11-21T09:54:48.393434-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 0000110f-0000-1000-8000-00805f9
2013-11-21T09:54:48.393714-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_insert() /org/bluez/hci0
2013-11-21T09:54:48.394031-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:add_uuid() sending add uuid command for index 0
2013-11-21T09:54:48.394315-05:00 linux-3kti bluetoothd[21678]: profiles/audio/avrcp.c:avrcp_target_server_probe() path /org/bluez/hci0
2013-11-21T09:54:48.394618-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_add() /org/bluez/hci0
2013-11-21T09:54:48.394928-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Adding record with handle 0x10004
2013-11-21T09:54:48.395211-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00000017-0000-1000-8000-00805f9
2013-11-21T09:54:48.395490-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00000100-0000-1000-8000-00805f9
2013-11-21T09:54:48.395851-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00001002-0000-1000-8000-00805f9
2013-11-21T09:54:48.396131-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 0000110c-0000-1000-8000-00805f9
2013-11-21T09:54:48.396411-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 0000110e-0000-1000-8000-00805f9
2013-11-21T09:54:48.396711-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_insert() /org/bluez/hci0
2013-11-21T09:54:48.397112-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:add_uuid() sending add uuid command for index 0
2013-11-21T09:54:48.397446-05:00 linux-3kti bluetoothd[21678]: profiles/audio/a2dp.c:a2dp_sink_server_probe() path /org/bluez/hci0
2013-11-21T09:54:48.397737-05:00 linux-3kti bluetoothd[21678]: profiles/audio/a2dp.c:a2dp_source_server_probe() path /org/bluez/hci0
2013-11-21T09:54:48.398041-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:btd_adapter_unblock_address() hci0 00:00:00:00:00:00
2013-11-21T09:54:48.398372-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:load_link_keys() hci0 keys 0 debug_keys 0
2013-11-21T09:54:48.398709-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_insert() /org/bluez/hci0
2013-11-21T09:54:48.399000-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:add_uuid() sending add uuid command for index 0
2013-11-21T09:54:48.399281-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:set_did() hci0 source 2 vendor 1d6b product 246 version 50b
2013-11-21T09:54:48.399559-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_register() Adapter /org/bluez/hci0 registered
2013-11-21T09:54:48.399890-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:set_dev_class() sending set device class command for index 0
2013-11-21T09:54:48.400191-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:set_name() sending set local name command for index 0
2013-11-21T09:54:48.400547-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:set_mode() sending set mode command for index 0
2013-11-21T09:54:48.400859-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:set_mode() sending set mode command for index 0
2013-11-21T09:54:48.401142-05:00 linux-3kti bluetoothd[21678]: plugins/hostname.c:property_changed() static hostname: linux-3kti.site
2013-11-21T09:54:48.401423-05:00 linux-3kti bluetoothd[21678]: plugins/hostname.c:property_changed() pretty hostname:
2013-11-21T09:54:48.401761-05:00 linux-3kti bluetoothd[21678]: plugins/hostname.c:update_name() name: linux-3kti.site
2013-11-21T09:54:48.402053-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_set_name() name: linux-3kti.site
2013-11-21T09:54:48.402335-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_set_name() alias: linux-3kti.site
2013-11-21T09:54:48.402614-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:set_name() sending set local name command for index 0
2013-11-21T09:54:48.402915-05:00 linux-3kti bluetoothd[21678]: plugins/hostname.c:property_changed() chassis: desktop
2013-11-21T09:54:48.403300-05:00 linux-3kti bluetoothd[21678]: plugins/hostname.c:update_class() major: 0x01 minor: 0x01
2013-11-21T09:54:48.403676-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:load_link_keys_complete() link keys loaded for hci0
2013-11-21T09:54:48.404119-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:local_name_changed_callback() Name: BlueZ 5.11
2013-11-21T09:54:48.404396-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:local_name_changed_callback() Short name:
2013-11-21T09:54:48.404664-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:local_name_changed_callback() Current alias: BlueZ 5.11
2013-11-21T09:54:48.405003-05:00 linux-3kti bluetoothd[21678]: src/attrib-server.c:attrib_db_update() handle=0x0006
2013-11-21T09:54:48.405356-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:local_name_changed_callback() Name: linux-3kti.site
2013-11-21T09:54:48.405619-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:local_name_changed_callback() Short name:
2013-11-21T09:54:48.405975-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:local_name_changed_callback() Current alias: linux-3kti.site
2013-11-21T09:54:48.406284-05:00 linux-3kti bluetoothd[21678]: src/attrib-server.c:attrib_db_update() handle=0x0006
2013-11-21T09:54:48.406553-05:00 linux-3kti bluetoothd[21678]: profiles/audio/avdtp.c:avdtp_register_sep() SEP 0x1bdd370 registered: type:0 codec:0 seid:1
2013-11-21T09:54:48.406815-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_add() /org/bluez/hci0
2013-11-21T09:54:48.407087-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Adding record with handle 0x10005
2013-11-21T09:54:48.407348-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00000019-0000-1000-8000-00805f9
2013-11-21T09:54:48.407649-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00000100-0000-1000-8000-00805f9
2013-11-21T09:54:48.407948-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00001002-0000-1000-8000-00805f9
2013-11-21T09:54:48.408209-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 0000110a-0000-1000-8000-00805f9
2013-11-21T09:54:48.408471-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 0000110d-0000-1000-8000-00805f9
2013-11-21T09:54:48.408733-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_insert() /org/bluez/hci0
2013-11-21T09:54:48.409007-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:add_uuid() sending add uuid command for index 0
2013-11-21T09:54:48.409365-05:00 linux-3kti bluetoothd[21678]: Endpoint registered: sender=:1.36 path=/MediaEndpoint/A2DPSource
2013-11-21T09:54:48.409725-05:00 linux-3kti bluetoothd[21678]: profiles/audio/avdtp.c:avdtp_register_sep() SEP 0x1be2e60 registered: type:1 codec:0 seid:2
2013-11-21T09:54:48.410006-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_add() /org/bluez/hci0
2013-11-21T09:54:48.410268-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Adding record with handle 0x10006
2013-11-21T09:54:48.410527-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00000019-0000-1000-8000-00805f9
2013-11-21T09:54:48.410789-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00000100-0000-1000-8000-00805f9
2013-11-21T09:54:48.411089-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 00001002-0000-1000-8000-00805f9
2013-11-21T09:54:48.411436-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 0000110b-0000-1000-8000-00805f9
2013-11-21T09:54:48.411698-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:add_record_to_server() Record pattern UUID 0000110d-0000-1000-8000-00805f9
2013-11-21T09:54:48.411967-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_insert() /org/bluez/hci0
2013-11-21T09:54:48.412229-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:add_uuid() sending add uuid command for index 0
2013-11-21T09:54:48.412489-05:00 linux-3kti bluetoothd[21678]: Endpoint registered: sender=:1.36 path=/MediaEndpoint/A2DPSink
2013-11-21T09:54:48.420103-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:property_set_mode() sending Set Powered command for index 0
2013-11-21T09:54:48.542912-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:dev_class_changed_callback() Class: 0x0c0104
2013-11-21T09:54:48.543386-05:00 linux-3kti bluetoothd[21678]: src/attrib-server.c:attrib_db_update() handle=0x0008
2013-11-21T09:54:48.546877-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:property_set_mode_complete() Success (0x00)
2013-11-21T09:54:48.547351-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:new_settings_callback() Settings: 0x000000d3
2013-11-21T09:54:48.547783-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:settings_changed() Changed settings: 0x00000001
2013-11-21T09:54:48.548147-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_start() adapter /org/bluez/hci0 has been enabled
2013-11-21T09:54:48.549240-05:00 linux-3kti bluetoothd[21678]: src/agent.c:agent_ref() 0x1be3a50: ref=1
2013-11-21T09:54:48.549579-05:00 linux-3kti bluetoothd[21678]: src/agent.c:register_agent() agent :1.44
2013-11-21T09:54:48.549916-05:00 linux-3kti bluetoothd[21678]: src/agent.c:set_default_agent() Default agent set to :1.44 /org/bluez/agent/gnome
2013-11-21T09:55:01.679919-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:connected_callback() hci0 device 00:0D:E6:6E:51:47 connected eir_len 5
2013-11-21T09:55:01.680477-05:00 linux-3kti bluetoothd[21678]: src/device.c:device_create() dst 00:0D:E6:6E:51:47
2013-11-21T09:55:01.680801-05:00 linux-3kti bluetoothd[21678]: src/device.c:device_new() address 00:0D:E6:6E:51:47
2013-11-21T09:55:01.681135-05:00 linux-3kti bluetoothd[21678]: src/device.c:device_new() Creating device /org/bluez/hci0/dev_00_0D_E6_6E_51_47
2013-11-21T09:55:01.681521-05:00 linux-3kti bluetoothd[21678]: src/device.c:device_set_temporary() temporary 1
2013-11-21T09:55:01.681905-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_connect_list_remove() device /org/bluez/hci0/dev_00_0D_E6_6E_51_47 is not on the list, ignoring
2013-11-21T09:55:01.682255-05:00 linux-3kti bluetoothd[21678]: src/device.c:device_set_class() /org/bluez/hci0/dev_00_0D_E6_6E_51_47 0x200404
2013-11-21T09:55:03.865941-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:dev_disconnected() Device 00:0D:E6:6E:51:47 disconnected, reason 3
2013-11-21T09:55:03.866408-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_remove_connection()
2013-11-21T09:55:03.866745-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_remove_connection() Removing temporary device /org/bluez/hci0/dev_00_0D_E6_6E_51_47
2013-11-21T09:55:03.867174-05:00 linux-3kti bluetoothd[21678]: src/device.c:device_remove() Removing device /org/bluez/hci0/dev_00_0D_E6_6E_51_47
2013-11-21T09:55:03.867545-05:00 linux-3kti bluetoothd[21678]: src/device.c:btd_device_unref() Freeing device /org/bluez/hci0/dev_00_0D_E6_6E_51_47
2013-11-21T09:55:03.867891-05:00 linux-3kti bluetoothd[21678]: src/device.c:device_free() 0x1be4100
2013-11-21T09:55:03.868210-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:bonding_attempt_complete() hci0 bdaddr 00:0D:E6:6E:51:47 type 0 status 0xe
2013-11-21T09:55:03.868478-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:resume_discovery()
2013-11-21T09:55:34.759419-05:00 linux-3kti bluetoothd[21678]: Terminating
2013-11-21T09:55:34.760060-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_shutdown()
2013-11-21T09:55:34.760394-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:set_mode() sending set mode command for index 0
2013-11-21T09:55:34.761394-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:new_settings_callback() Settings: 0x000000d2
2013-11-21T09:55:34.761794-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:settings_changed() Changed settings: 0x00000001
2013-11-21T09:55:34.762218-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_stop() adapter /org/bluez/hci0 has been disabled
2013-11-21T09:55:34.762669-05:00 linux-3kti bluetoothd[21678]: src/plugin.c:plugin_cleanup() Cleanup plugins
2013-11-21T09:55:34.763012-05:00 linux-3kti bluetoothd[21678]: profiles/audio/a2dp.c:media_server_remove() path /org/bluez/hci0
2013-11-21T09:55:34.763362-05:00 linux-3kti bluetoothd[21678]: profiles/audio/media.c:release_endpoint() sender=:1.36 path=/MediaEndpoint/A2DPSource
2013-11-21T09:55:34.763692-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_remove() /org/bluez/hci0
2013-11-21T09:55:34.764034-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:remove_uuid() sending remove uuid command for index 0
2013-11-21T09:55:34.764387-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:remove_record_from_server() Removing record with handle 0x10005
2013-11-21T09:55:34.764736-05:00 linux-3kti bluetoothd[21678]: profiles/audio/media.c:release_endpoint() sender=:1.36 path=/MediaEndpoint/A2DPSource
2013-11-21T09:55:34.765088-05:00 linux-3kti bluetoothd[21678]: Endpoint unregistered: sender=:1.36 path=/MediaEndpoint/A2DPSource
2013-11-21T09:55:34.765570-05:00 linux-3kti bluetoothd[21678]: profiles/audio/media.c:media_endpoint_destroy() sender=:1.36 path=/MediaEndpoint/A2DPSource
2013-11-21T09:55:34.765944-05:00 linux-3kti dbus[587]: [system] Rejected send message, 3 matched rules; type="error", sender=":1.36" (uid=1000 pid=1335 comm="/usr/bin/pulseaudio --start ") interface="(unset)" member="(unset)" error name="org.bluez.MediaEndpoint1.Error.NotImplemented" requested_reply="0" destination=":1.192" (uid=0 pid=21678 comm="/usr/lib/bluetooth/bluetoothd -d ")
2013-11-21T09:55:34.766800-05:00 linux-3kti bluetoothd[21678]: profiles/audio/avdtp.c:avdtp_unregister_sep() SEP 0x1bdd370 unregistered: type:0 codec:0 seid:1
2013-11-21T09:55:34.767263-05:00 linux-3kti bluetoothd[21678]: profiles/audio/media.c:release_endpoint() sender=:1.36 path=/MediaEndpoint/A2DPSink
2013-11-21T09:55:34.767665-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_remove() /org/bluez/hci0
2013-11-21T09:55:34.768503-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:remove_uuid() sending remove uuid command for index 0
2013-11-21T09:55:34.768926-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:remove_record_from_server() Removing record with handle 0x10006
2013-11-21T09:55:34.769253-05:00 linux-3kti bluetoothd[21678]: profiles/audio/media.c:release_endpoint() sender=:1.36 path=/MediaEndpoint/A2DPSink
2013-11-21T09:55:34.769865-05:00 linux-3kti bluetoothd[21678]: Endpoint unregistered: sender=:1.36 path=/MediaEndpoint/A2DPSink
2013-11-21T09:55:34.770175-05:00 linux-3kti bluetoothd[21678]: profiles/audio/media.c:media_endpoint_destroy() sender=:1.36 path=/MediaEndpoint/A2DPSink
2013-11-21T09:55:34.770498-05:00 linux-3kti bluetoothd[21678]: profiles/audio/avdtp.c:avdtp_unregister_sep() SEP 0x1be2e60 unregistered: type:1 codec:0 seid:2
2013-11-21T09:55:34.770792-05:00 linux-3kti bluetoothd[21678]: plugins/hostname.c:hostname_remove()
2013-11-21T09:55:34.771094-05:00 linux-3kti bluetoothd[21678]: src/agent.c:set_default_agent() Default agent cleared
2013-11-21T09:55:34.771381-05:00 linux-3kti bluetoothd[21678]: src/agent.c:agent_destroy() agent :1.44
2013-11-21T09:55:34.771662-05:00 linux-3kti bluetoothd[21678]: src/agent.c:agent_release() Releasing agent :1.44, /org/bluez/agent/gnome
2013-11-21T09:55:34.771950-05:00 linux-3kti bluetoothd[21678]: src/agent.c:agent_unref() 0x1be3a50: ref=0
2013-11-21T09:55:34.772278-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_remove() Removing adapter /org/bluez/hci0
2013-11-21T09:55:34.772564-05:00 linux-3kti bluetoothd[21678]: profiles/audio/a2dp.c:a2dp_source_server_remove() path /org/bluez/hci0
2013-11-21T09:55:34.772853-05:00 linux-3kti bluetoothd[21678]: profiles/audio/a2dp.c:a2dp_sink_server_remove() path /org/bluez/hci0
2013-11-21T09:55:34.769559-05:00 linux-3kti dbus[587]: message repeated 3 times: [ [system] Rejected send message, 3 matched rules; type="error", sender=":1.36" (uid=1000 pid=1335 comm="/usr/bin/pulseaudio --start ") interface="(unset)" member="(unset)" error name="org.bluez.MediaEndpoint1.Error.NotImplemented" requested_reply="0" destination=":1.192" (uid=0 pid=21678 comm="/usr/lib/bluetooth/bluetoothd -d ")]
2013-11-21T09:55:34.773135-05:00 linux-3kti dbus[587]: [system] Rejected send message, 3 matched rules; type="method_return", sender=":1.44" (uid=1000 pid=1383 comm="/usr/bin/gnome-shell ") interface="(unset)" member="(unset)" error name="(unset)" requested_reply="0" destination=":1.192" (uid=0 pid=21678 comm="/usr/lib/bluetooth/bluetoothd -d ")
2013-11-21T09:55:34.773432-05:00 linux-3kti bluetoothd[21678]: profiles/audio/avrcp.c:avrcp_target_server_remove() path /org/bluez/hci0
2013-11-21T09:55:34.773755-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_remove() /org/bluez/hci0
2013-11-21T09:55:34.774064-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:remove_uuid() sending remove uuid command for index 0
2013-11-21T09:55:34.774348-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:remove_record_from_server() Removing record with handle 0x10004
2013-11-21T09:55:34.774629-05:00 linux-3kti bluetoothd[21678]: profiles/audio/avrcp.c:avrcp_controller_server_remove() path /org/bluez/hci0
2013-11-21T09:55:34.774919-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_remove() /org/bluez/hci0
2013-11-21T09:55:34.775200-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:remove_uuid() sending remove uuid command for index 0
2013-11-21T09:55:34.775478-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:remove_record_from_server() Removing record with handle 0x10003
2013-11-21T09:55:34.775814-05:00 linux-3kti bluetoothd[21678]: profiles/network/manager.c:nap_server_remove() path /org/bluez/hci0
2013-11-21T09:55:34.776147-05:00 linux-3kti bluetoothd[21678]: profiles/network/manager.c:gn_server_remove() path /org/bluez/hci0
2013-11-21T09:55:34.776495-05:00 linux-3kti bluetoothd[21678]: profiles/network/manager.c:panu_server_remove() path /org/bluez/hci0
2013-11-21T09:55:34.776857-05:00 linux-3kti bluetoothd[21678]: profiles/network/server.c:path_unregister() Unregistered interface org.bluez.NetworkServer1 on path /org/bluez/hci0
2013-11-21T09:55:34.777199-05:00 linux-3kti bluetoothd[21678]: src/attrib-server.c:btd_adapter_gatt_server_stop() Stop GATT server in hci0
2013-11-21T09:55:34.777613-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_remove() /org/bluez/hci0
2013-11-21T09:55:34.777977-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:remove_uuid() sending remove uuid command for index 0
2013-11-21T09:55:34.778404-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:remove_record_from_server() Removing record with handle 0x10002
2013-11-21T09:55:34.778716-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_service_remove() /org/bluez/hci0
2013-11-21T09:55:34.779032-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:remove_uuid() sending remove uuid command for index 0
2013-11-21T09:55:34.779381-05:00 linux-3kti bluetoothd[21678]: src/sdpd-service.c:remove_record_from_server() Removing record with handle 0x10001
2013-11-21T09:55:34.779526-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:btd_adapter_unref() Freeing adapter /org/bluez/hci0
2013-11-21T09:55:34.779722-05:00 linux-3kti bluetoothd[21678]: src/adapter.c:adapter_free() 0x1bd9d30
2013-11-21T09:55:34.779897-05:00 linux-3kti bluetoothd[21678]: Stopping SDP server
2013-11-21T09:55:34.780060-05:00 linux-3kti bluetoothd[21678]: Exit


^ permalink raw reply

* spam on this list
From: Pierre Frenkiel @ 2013-11-23 14:41 UTC (permalink / raw)
  To: linux-bluetooth

I'm surprised to recieve  spams rather often from this list. I'm
subscribed to a big number of lists, and it's the only for which
this occurs. Would it be possible to refuse posts from non-members ?

best regards,
-- 
Pierre Frenkiel

^ permalink raw reply

* [RFC 6/6] android/socket: Handle Android events for server socket
From: Andrei Emeltchenko @ 2013-11-22 15:49 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385135376-21057-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

Add watch for tracking events from Android framework for server socket.
---
 android/socket.c | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/android/socket.c b/android/socket.c
index a2996c2..890d91b 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -578,6 +578,24 @@ static bool sock_send_accept(struct rfcomm_sock *rfsock, bdaddr_t *bdaddr,
 	return true;
 }
 
+static gboolean sock_server_stack_event_cb(GIOChannel *io, GIOCondition cond,
+								gpointer data)
+{
+	struct rfcomm_sock *rfsock = data;
+
+	DBG("");
+
+	if (cond & (G_IO_ERR | G_IO_HUP | G_IO_NVAL)) {
+		error("Socket error: sock %d cond %d",
+					g_io_channel_unix_get_fd(io), cond);
+		cleanup_rfsock(rfsock);
+
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
 static void accept_cb(GIOChannel *io, GError *err, gpointer user_data)
 {
 	struct rfcomm_sock *rfsock = user_data;
@@ -647,7 +665,8 @@ static int handle_listen(void *buf)
 	struct profile_info *profile;
 	struct rfcomm_sock *rfsock;
 	BtIOSecLevel sec_level;
-	GIOChannel *io;
+	GIOChannel *io, *io_stack;
+	GIOCondition cond;
 	GError *err = NULL;
 	int hal_fd;
 	int chan;
@@ -690,6 +709,12 @@ static int handle_listen(void *buf)
 
 	rfsock->srv_io = io;
 
+	/* Handle events from Android */
+	cond = G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL;
+	io_stack = g_io_channel_unix_new(rfsock->fd);
+	g_io_add_watch(io_stack, cond, sock_server_stack_event_cb, rfsock);
+	g_io_channel_unref(io_stack);
+
 	DBG("real_sock %d fd %d hal_fd %d", rfsock->real_sock, rfsock->fd,
 								hal_fd);
 
-- 
1.8.3.2


^ permalink raw reply related

* [RFC 5/6] android/socket: Keep server iochannel reference
From: Andrei Emeltchenko @ 2013-11-22 15:49 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385135376-21057-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

server io channel reference will be stored in rfsock structure
and might be deleted when Android end closes connection or when
HAL makes cleanup() call.
---
 android/socket.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/android/socket.c b/android/socket.c
index e864c4e..a2996c2 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -70,6 +70,8 @@ struct rfcomm_sock {
 	guint rfcomm_watch;
 	guint stack_watch;
 
+	GIOChannel *srv_io;
+
 	bdaddr_t dst;
 	uint32_t service_handle;
 
@@ -121,6 +123,11 @@ static void cleanup_rfsock(struct rfcomm_sock *rfsock)
 	if (rfsock->service_handle)
 		bt_adapter_remove_record(rfsock->service_handle);
 
+	if (rfsock->srv_io) {
+		g_io_channel_shutdown(rfsock->srv_io, TRUE, NULL);
+		g_io_channel_unref(rfsock->srv_io);
+	}
+
 	g_free(rfsock);
 }
 
@@ -681,9 +688,7 @@ static int handle_listen(void *buf)
 	rfsock->real_sock = g_io_channel_unix_get_fd(io);
 	servers = g_list_append(servers, rfsock);
 
-	/* TODO: Add server watch */
-	g_io_channel_set_close_on_unref(io, TRUE);
-	g_io_channel_unref(io);
+	rfsock->srv_io = io;
 
 	DBG("real_sock %d fd %d hal_fd %d", rfsock->real_sock, rfsock->fd,
 								hal_fd);
-- 
1.8.3.2


^ permalink raw reply related

* [RFC 4/6] android/socket: Use security level for connect
From: Andrei Emeltchenko @ 2013-11-22 15:49 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385135376-21057-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

Use low security level for connections without profile and default
sec_level for others. rfsock now has pointer to profile info for
outcoming connections.
---
 android/socket.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/android/socket.c b/android/socket.c
index 07b205d..e864c4e 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -60,6 +60,8 @@ GList *servers = NULL;
 /* Simple list of RFCOMM connected sockets */
 GList *connections = NULL;
 
+struct profile_info;
+
 struct rfcomm_sock {
 	int fd;		/* descriptor for communication with Java framework */
 	int real_sock;	/* real RFCOMM socket */
@@ -70,6 +72,8 @@ struct rfcomm_sock {
 
 	bdaddr_t dst;
 	uint32_t service_handle;
+
+	struct profile_info *profile;
 };
 
 static struct rfcomm_sock *create_rfsock(int sock, int *hal_fd)
@@ -770,6 +774,7 @@ fail:
 static void sdp_search_cb(sdp_list_t *recs, int err, gpointer data)
 {
 	struct rfcomm_sock *rfsock = data;
+	BtIOSecLevel sec_level = BT_IO_SEC_LOW;
 	GError *gerr = NULL;
 	sdp_list_t *list;
 	GIOChannel *io;
@@ -810,11 +815,14 @@ static void sdp_search_cb(sdp_list_t *recs, int err, gpointer data)
 
 	DBG("Got RFCOMM channel %d", chan);
 
+	if (rfsock->profile)
+		sec_level = rfsock->profile->sec_level;
+
 	io = bt_io_connect(connect_cb, rfsock, NULL, &gerr,
 				BT_IO_OPT_SOURCE_BDADDR, &adapter_addr,
 				BT_IO_OPT_DEST_BDADDR, &rfsock->dst,
 				BT_IO_OPT_CHANNEL, chan,
-				BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_LOW,
+				BT_IO_OPT_SEC_LEVEL, sec_level,
 				BT_IO_OPT_INVALID);
 	if (!io) {
 		error("Failed connect: %s", gerr->message);
@@ -856,6 +864,8 @@ static int handle_connect(void *buf)
 	uuid.type = SDP_UUID128;
 	memcpy(&uuid.value.uuid128, cmd->uuid, sizeof(uint128_t));
 
+	rfsock->profile = get_profile_by_uuid(cmd->uuid);
+
 	if (bt_search_service(&adapter_addr, &dst, &uuid, sdp_search_cb, rfsock,
 								NULL) < 0) {
 		error("Failed to search SDP records");
-- 
1.8.3.2


^ permalink raw reply related

* [RFC 3/6] android/socket: Add error printing possible close() failure
From: Andrei Emeltchenko @ 2013-11-22 15:49 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385135376-21057-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

---
 android/socket.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/android/socket.c b/android/socket.c
index fcba1e8..07b205d 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -97,9 +97,14 @@ static void cleanup_rfsock(struct rfcomm_sock *rfsock)
 		rfsock, rfsock->fd, rfsock->real_sock, rfsock->channel);
 
 	if (rfsock->fd > 0)
-		close(rfsock->fd);
+		if (close(rfsock->fd) < 0)
+			error("close() fd %d failed: %s", rfsock->fd,
+							strerror(errno));
+
 	if (rfsock->real_sock > 0)
-		close(rfsock->real_sock);
+		if (close(rfsock->real_sock) < 0)
+			error("close() fd %d: failed: %s", rfsock->real_sock,
+							strerror(errno));
 
 	if (rfsock->rfcomm_watch > 0)
 		if (!g_source_remove(rfsock->rfcomm_watch))
-- 
1.8.3.2


^ permalink raw reply related

* [RFC 2/6] android/socket: Use dafault sec_level for listen
From: Andrei Emeltchenko @ 2013-11-22 15:49 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385135376-21057-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

Set default security level low for OPP and SPP and medium for PBAP and MAS.
Default security level would be low for listening without profile.
---
 android/socket.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/android/socket.c b/android/socket.c
index 4f6f02b..fcba1e8 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -329,6 +329,7 @@ static struct profile_info {
 		},
 		.channel = PBAP_DEFAULT_CHANNEL,
 		.svc_hint = SVC_HINT_OBEX,
+		.sec_level = BT_IO_SEC_MEDIUM,
 		.create_record = create_pbap_record
 	}, {
 		.uuid = {
@@ -337,13 +338,17 @@ static struct profile_info {
 		  },
 		.channel = OPP_DEFAULT_CHANNEL,
 		.svc_hint = SVC_HINT_OBEX,
+		.sec_level = BT_IO_SEC_LOW,
 		.create_record = create_opp_record
 	}, {
 		.uuid = {
 			0x00, 0x00, 0x11, 0x32, 0x00, 0x00, 0x10, 0x00,
 			0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB
 		},
-		.channel = MAS_DEFAULT_CHANNEL
+		.channel = MAS_DEFAULT_CHANNEL,
+		.svc_hint = 0,
+		.sec_level = BT_IO_SEC_MEDIUM,
+		.create_record = NULL
 	}, {
 		.uuid = {
 			0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x10, 0x00,
@@ -351,6 +356,7 @@ static struct profile_info {
 		},
 		.channel = SPP_DEFAULT_CHANNEL,
 		.svc_hint = 0,
+		.sec_level = BT_IO_SEC_LOW,
 		.create_record = create_spp_record
 	},
 };
@@ -624,6 +630,7 @@ static int handle_listen(void *buf)
 	struct hal_cmd_sock_listen *cmd = buf;
 	struct profile_info *profile;
 	struct rfcomm_sock *rfsock;
+	BtIOSecLevel sec_level;
 	GIOChannel *io;
 	GError *err = NULL;
 	int hal_fd;
@@ -635,10 +642,14 @@ static int handle_listen(void *buf)
 	if (!profile) {
 		if (!cmd->channel)
 			return -1;
-		else
+		else {
 			chan = cmd->channel;
-	} else
+			sec_level = BT_IO_SEC_LOW;
+		}
+	} else {
 		chan = profile->channel;
+		sec_level = profile->sec_level;
+	}
 
 	DBG("rfcomm channel %d svc_name %s", chan, cmd->name);
 
@@ -649,6 +660,7 @@ static int handle_listen(void *buf)
 	io = bt_io_listen(accept_cb, NULL, rfsock, NULL, &err,
 				BT_IO_OPT_SOURCE_BDADDR, &adapter_addr,
 				BT_IO_OPT_CHANNEL, chan,
+				BT_IO_OPT_SEC_LEVEL, sec_level,
 				BT_IO_OPT_INVALID);
 	if (!io) {
 		error("Failed listen: %s", err->message);
-- 
1.8.3.2


^ permalink raw reply related

* [RFC 1/6] android/socket: Check that create_record function exist
From: Andrei Emeltchenko @ 2013-11-22 15:49 UTC (permalink / raw)
  To: linux-bluetooth

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

---
 android/socket.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/android/socket.c b/android/socket.c
index daf4370..4f6f02b 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -673,7 +673,7 @@ static int handle_listen(void *buf)
 		return -1;
 	}
 
-	if (profile)
+	if (profile && profile->create_record)
 		rfsock->service_handle = sdp_service_register(profile,
 								cmd->name);
 
-- 
1.8.3.2


^ permalink raw reply related

* [PATCH] fixup add missing break (sjanc review)
From: Andrei Emeltchenko @ 2013-11-22 15:02 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1385109295-11445-1-git-send-email-Andrei.Emeltchenko.news@gmail.com>

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

---
 android/socket.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/android/socket.c b/android/socket.c
index 70e2307..7b9e41b 100644
--- a/android/socket.c
+++ b/android/socket.c
@@ -852,6 +852,9 @@ static void sdp_search_cb(sdp_list_t *recs, int err, gpointer data)
 		sdp_list_foreach(protos, (sdp_list_func_t) sdp_list_free,
 									NULL);
 		sdp_list_free(protos, NULL);
+
+		if (chan)
+			break;
 	}
 
 	if (chan <= 0) {
-- 
1.8.3.2


^ permalink raw reply related

* [PATCH] android/bluetooth: Fix memory leak
From: Andrei Emeltchenko @ 2013-11-22 14:21 UTC (permalink / raw)
  To: linux-bluetooth

From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>

---
 android/bluetooth.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/android/bluetooth.c b/android/bluetooth.c
index 11b9d76..aa684bd 100644
--- a/android/bluetooth.c
+++ b/android/bluetooth.c
@@ -450,6 +450,7 @@ static void update_records(struct browse_req *req, sdp_list_t *recs)
 			memcpy(&uuid128, tmp, sizeof(uuid_t));
 			break;
 		default:
+			sdp_list_free(svcclass, free);
 			continue;
 		}
 
-- 
1.8.3.2


^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox