diff options
author | Andre Guedes <andre.guedes@openbossa.org> | 2012-06-06 21:40:58 -0300 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2012-06-07 04:27:28 +0300 |
commit | e3598c492e91405dacb91a18020b29b543f39995 (patch) | |
tree | 2f4b71e564f564c36875dde14b0f90f27434da5b | |
parent | ea2718060e53386a1b85abe298b20096f067488f (diff) | |
download | bluez-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.c | 14 |
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, |