const struct mgmt_rp_le_read_maximum_data_length *rp = param;
uint16_t max_tx_octects, max_tx_time;
uint16_t max_rx_octects, max_rx_time;
+ int err = 0;
if (!rp) {
error("Error ocurred in Reading maximum data length, rp is NULL");
- g_free(adapter->read_handler);
- return;
+ err = -EIO;
+ goto done;
}
if (status != MGMT_STATUS_SUCCESS) {
max_rx_octects = 0;
max_rx_time = 0;
- g_free(adapter->read_handler);
- return;
+ err = -EIO;
+ goto done;
}
if (length < sizeof(*rp)) {
error("Too small le read maximum data length response");
- g_free(adapter->read_handler);
- return;
+ err = -EIO;
+ goto done;
} else {
max_tx_octects = rp->max_tx_octets;
max_tx_time =rp->max_tx_time;
max_rx_time = rp->max_rx_time;
}
+done:
if (!adapter->read_handler ||
!adapter->read_handler->read_callback) {
g_free(adapter->read_handler);
return;
}
- adapter->read_handler->read_callback(adapter,
+ adapter->read_handler->read_callback(adapter, err,
max_tx_octects, max_tx_time,
max_rx_octects, max_rx_time,
adapter->read_handler->user_data);
static void le_read_data_length_complete(
struct btd_adapter *adapter,
+ int err,
uint16_t max_tx_octects, uint16_t max_tx_time,
uint16_t max_rx_octects, uint16_t max_rx_time,
void *user_data)
struct le_data_length_read_request *read_request;
read_request = find_read_le_data_length_request(adapter);
+
if (!read_request)
return;
- reply = g_dbus_create_reply(read_request->msg,
- DBUS_TYPE_UINT16, &max_tx_octects,
- DBUS_TYPE_UINT16, &max_tx_time,
- DBUS_TYPE_UINT16, &max_rx_octects,
- DBUS_TYPE_UINT16, &max_rx_time,
- DBUS_TYPE_INVALID);
-
- if (!reply) {
- btd_error_failed(read_request->msg,
- "Failed to read max data length.");
- return;
+ if (err) {
+ DBG("Failed to read max data length. errno[%d]", err);
+ reply = btd_error_failed(read_request->msg,
+ "Failed to read max data length");
+ } else {
+ reply = g_dbus_create_reply(read_request->msg,
+ DBUS_TYPE_UINT16, &max_tx_octects,
+ DBUS_TYPE_UINT16, &max_tx_time,
+ DBUS_TYPE_UINT16, &max_rx_octects,
+ DBUS_TYPE_UINT16, &max_rx_time,
+ DBUS_TYPE_INVALID);
+
+ if (!reply) {
+ reply = btd_error_failed(read_request->msg,
+ "Failed to create reply.");
+ }
}
read_requests = g_slist_remove(read_requests, read_request);