Linux bluetooth development
 help / color / mirror / Atom feed
* [PATCH 1/2] Change security level on demand when reading characteristic value
@ 2010-12-30 21:22 Claudio Takahasi
  2010-12-30 21:22 ` [PATCH 2/2] Change security level on demand when reading characteristic descriptor Claudio Takahasi
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Claudio Takahasi @ 2010-12-30 21:22 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Claudio Takahasi

If a characteristic requires a higher security level, change it on
demand and re-send the GATT Charateristic Value Read. Request will not
be sent until the SMP negotiation finishes. This change doesn't affect
GATT over BR/EDR, since encryption is mandatory for BR/EDR.
---
 attrib/client.c  |   11 +++++++++++
 attrib/gattrib.c |    8 ++++++++
 attrib/gattrib.h |    2 ++
 3 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/attrib/client.c b/attrib/client.c
index 10bbf7d..3297a0c 100644
--- a/attrib/client.c
+++ b/attrib/client.c
@@ -744,6 +744,17 @@ static void update_char_value(guint8 status, const guint8 *pdu,
 
 	if (status == 0)
 		characteristic_set_value(chr, pdu + 1, len - 1);
+	else if (status == ATT_ECODE_INSUFF_ENC) {
+		GIOChannel *io = g_attrib_get_channel(gatt->attrib);
+
+		if (bt_io_set(io, BT_IO_L2CAP, NULL,
+				BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_HIGH,
+				BT_IO_OPT_INVALID)) {
+			gatt_read_char(gatt->attrib, chr->handle,
+					update_char_value, current);
+			return;
+		}
+	}
 
 	g_attrib_unref(gatt->attrib);
 	g_free(current);
diff --git a/attrib/gattrib.c b/attrib/gattrib.c
index 9268001..dd7b1d7 100644
--- a/attrib/gattrib.c
+++ b/attrib/gattrib.c
@@ -202,6 +202,14 @@ void g_attrib_unref(GAttrib *attrib)
 	g_free(attrib);
 }
 
+GIOChannel *g_attrib_get_channel(GAttrib *attrib)
+{
+	if (!attrib)
+		return NULL;
+
+	return attrib->io;
+}
+
 gboolean g_attrib_set_disconnect_function(GAttrib *attrib,
 		GAttribDisconnectFunc disconnect, gpointer user_data)
 {
diff --git a/attrib/gattrib.h b/attrib/gattrib.h
index 0940289..5c50bc9 100644
--- a/attrib/gattrib.h
+++ b/attrib/gattrib.h
@@ -44,6 +44,8 @@ GAttrib *g_attrib_new(GIOChannel *io);
 GAttrib *g_attrib_ref(GAttrib *attrib);
 void g_attrib_unref(GAttrib *attrib);
 
+GIOChannel *g_attrib_get_channel(GAttrib *attrib);
+
 gboolean g_attrib_set_disconnect_function(GAttrib *attrib,
 		GAttribDisconnectFunc disconnect, gpointer user_data);
 
-- 
1.7.3.4


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

end of thread, other threads:[~2011-01-05 12:10 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-30 21:22 [PATCH 1/2] Change security level on demand when reading characteristic value Claudio Takahasi
2010-12-30 21:22 ` [PATCH 2/2] Change security level on demand when reading characteristic descriptor Claudio Takahasi
2010-12-31  8:31 ` [PATCH 1/2] Change security level on demand when reading characteristic value Johan Hedberg
2010-12-31 16:10   ` Claudio Takahasi
2011-01-05 12:10 ` Johan Hedberg

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