struct discover_primary *dp = user_data;
GSList *ranges, *last;
struct att_range *range;
- uint8_t opdu[ATT_DEFAULT_MTU];
+ uint8_t opdu[ATT_DEFAULT_LE_MTU];
guint16 oplen;
int err = 0;
err = 0;
if (end != 0xffff) {
- uint8_t opdu[ATT_DEFAULT_MTU];
+ uint8_t opdu[ATT_DEFAULT_LE_MTU];
guint16 oplen = encode_discover_primary(end + 1, 0xffff, NULL,
opdu, sizeof(opdu));
gpointer user_data)
{
struct discover_primary *dp;
- uint8_t pdu[ATT_DEFAULT_MTU];
+ uint8_t pdu[ATT_DEFAULT_LE_MTU];
GAttribResultFunc cb;
guint16 plen;
struct discover_char *dc = user_data;
struct att_data_list *list;
unsigned int i, err;
- uint8_t opdu[ATT_DEFAULT_MTU];
+ uint8_t opdu[ATT_DEFAULT_LE_MTU];
guint16 oplen;
uuid_t uuid;
uint16_t last = 0;
guint gatt_discover_char(GAttrib *attrib, uint16_t start, uint16_t end,
gatt_cb_t func, gpointer user_data)
{
- uint8_t pdu[ATT_DEFAULT_MTU];
+ uint8_t pdu[ATT_DEFAULT_LE_MTU];
struct discover_char *dc;
guint16 plen;
uuid_t uuid;
uuid_t *uuid, GAttribResultFunc func,
gpointer user_data)
{
- uint8_t pdu[ATT_DEFAULT_MTU];
+ uint8_t pdu[ATT_DEFAULT_LE_MTU];
guint16 plen;
plen = enc_read_by_type_req(start, end, uuid, pdu, sizeof(pdu));
gpointer user_data)
{
struct read_long_data *long_read = user_data;
- uint8_t pdu[ATT_DEFAULT_MTU];
+ uint8_t pdu[ATT_DEFAULT_LE_MTU];
guint8 *tmp;
guint16 plen;
guint id;
long_read->buffer = tmp;
long_read->size += rlen - 1;
- if (rlen < ATT_DEFAULT_MTU)
+ if (rlen < ATT_DEFAULT_LE_MTU)
goto done;
plen = enc_read_blob_req(long_read->handle, long_read->size - 1,
guint16 rlen, gpointer user_data)
{
struct read_long_data *long_read = user_data;
- uint8_t pdu[ATT_DEFAULT_MTU];
+ uint8_t pdu[ATT_DEFAULT_LE_MTU];
guint16 plen;
guint id;
- if (status != 0 || rlen < ATT_DEFAULT_MTU)
+ if (status != 0 || rlen < ATT_DEFAULT_LE_MTU)
goto done;
long_read->buffer = g_malloc(rlen);
guint gatt_read_char(GAttrib *attrib, uint16_t handle, GAttribResultFunc func,
gpointer user_data)
{
- uint8_t pdu[ATT_DEFAULT_MTU];
+ uint8_t pdu[ATT_DEFAULT_LE_MTU];
guint16 plen;
guint id;
struct read_long_data *long_read;
guint gatt_write_char(GAttrib *attrib, uint16_t handle, uint8_t *value,
int vlen, GAttribResultFunc func, gpointer user_data)
{
- uint8_t pdu[ATT_DEFAULT_MTU];
+ uint8_t pdu[ATT_DEFAULT_LE_MTU];
guint16 plen;
plen = enc_write_req(handle, value, vlen, pdu, sizeof(pdu));
guint gatt_find_info(GAttrib *attrib, uint16_t start, uint16_t end,
GAttribResultFunc func, gpointer user_data)
{
- uint8_t pdu[ATT_DEFAULT_MTU];
+ uint8_t pdu[ATT_DEFAULT_LE_MTU];
guint16 plen;
plen = enc_find_info_req(start, end, pdu, sizeof(pdu));
guint gatt_write_cmd(GAttrib *attrib, uint16_t handle, uint8_t *value, int vlen,
GDestroyNotify notify, gpointer user_data)
{
- uint8_t pdu[ATT_DEFAULT_MTU];
+ uint8_t pdu[ATT_DEFAULT_LE_MTU];
guint16 plen;
plen = enc_write_cmd(handle, value, vlen, pdu, sizeof(pdu));
static void connect_event(GIOChannel *io, GError *err, void *user_data)
{
struct gatt_channel *channel;
+ GIOChannel **server_io = user_data;
GError *gerr = NULL;
if (err) {
return;
}
+ if (server_io == &l2cap_io)
+ channel->mtu = ATT_DEFAULT_L2CAP_MTU;
+ else
+ channel->mtu = ATT_DEFAULT_LE_MTU;
+
channel->attrib = g_attrib_new(io);
- channel->mtu = ATT_DEFAULT_MTU;
g_io_channel_unref(io);
channel->id = g_attrib_register(channel->attrib, GATTRIB_ALL_EVENTS,
{
GError *gerr = NULL;
- if (bt_io_accept(io, connect_event, NULL, NULL, &gerr) == FALSE) {
+ if (bt_io_accept(io, connect_event, user_data, NULL, &gerr) == FALSE) {
error("bt_io_accept: %s", gerr->message);
g_error_free(gerr);
g_io_channel_unref(io);
/* BR/EDR socket */
l2cap_io = bt_io_listen(BT_IO_L2CAP, NULL, confirm_event,
- NULL, NULL, &gerr,
+ &l2cap_io, NULL, &gerr,
BT_IO_OPT_SOURCE_BDADDR, BDADDR_ANY,
BT_IO_OPT_PSM, GATT_PSM,
BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_LOW,
/* LE socket */
le_io = bt_io_listen(BT_IO_L2CAP, NULL, confirm_event,
- NULL, NULL, &gerr,
+ &le_io, NULL, &gerr,
BT_IO_OPT_SOURCE_BDADDR, BDADDR_ANY,
BT_IO_OPT_CID, GATT_CID,
BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_LOW,