summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Guedes <andre.guedes@openbossa.org>2012-06-06 21:40:58 -0300
committerJohan Hedberg <johan.hedberg@intel.com>2012-06-07 04:27:28 +0300
commite3598c492e91405dacb91a18020b29b543f39995 (patch)
tree2f4b71e564f564c36875dde14b0f90f27434da5b
parentea2718060e53386a1b85abe298b20096f067488f (diff)
downloadbluez-e3598c492e91405dacb91a18020b29b543f39995.tar.gz
attrib-server: Fix gatt_channel MTU value
In attrib_channel_attach, channel->mtu should be initialized according to ATT_MTU value. Over BR/EDR, ATT_MTU should be set to the L2CAP imtu negotiated during L2CAP configuration phase. Over LE, ATT_MTU should be 23 octets.
-rw-r--r--src/attrib-server.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/attrib-server.c b/src/attrib-server.c
index d2a252099..4dc3ff9d2 100644
--- a/src/attrib-server.c
+++ b/src/attrib-server.c
@@ -1033,6 +1033,7 @@ guint attrib_channel_attach(GAttrib *attrib)
GError *gerr = NULL;
char addr[18];
uint16_t cid;
+ guint mtu = 0;
io = g_attrib_get_channel(attrib);
@@ -1042,7 +1043,7 @@ guint attrib_channel_attach(GAttrib *attrib)
BT_IO_OPT_SOURCE_BDADDR, &channel->src,
BT_IO_OPT_DEST_BDADDR, &channel->dst,
BT_IO_OPT_CID, &cid,
- BT_IO_OPT_OMTU, &channel->mtu,
+ BT_IO_OPT_IMTU, &mtu,
BT_IO_OPT_INVALID);
if (gerr) {
error("bt_io_get: %s", gerr->message);
@@ -1069,14 +1070,13 @@ guint attrib_channel_attach(GAttrib *attrib)
if (device == NULL || device_is_bonded(device) == FALSE)
delete_device_ccc(&channel->src, &channel->dst);
- if (channel->mtu > ATT_MAX_MTU)
- channel->mtu = ATT_MAX_MTU;
-
- if (cid != ATT_CID)
+ if (cid != ATT_CID) {
channel->le = FALSE;
- else
+ channel->mtu = mtu;
+ } else {
channel->le = TRUE;
-
+ channel->mtu = ATT_DEFAULT_LE_MTU;
+ }
channel->attrib = g_attrib_ref(attrib);
channel->id = g_attrib_register(channel->attrib, GATTRIB_ALL_REQS,