From: Anuj Jain Date: Fri, 7 Oct 2022 06:51:45 +0000 (+0530) Subject: GATT : Fix Server disconnection state change callback X-Git-Tag: accepted/tizen/unified/20221103.165735~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8a29f5f902ba495c0ded3d8fee91dd93dc731fa9;p=platform%2Fcore%2Fapi%2Fbluetooth.git GATT : Fix Server disconnection state change callback This patch fixes the issue of GATT server disconnection callback not received when server connection state change callback is set using bt_gatt_server_set_connection_state_changed_cb. This patch also adds some INVALID_INPUT_PARAMETER checks to new GATT APIs. Change-Id: Ie651f9822702a7a15c327361cff8ebd34c156613 Signed-off-by: Anuj Jain --- diff --git a/src/bluetooth-common.c b/src/bluetooth-common.c index 60af564..04cae16 100644 --- a/src/bluetooth-common.c +++ b/src/bluetooth-common.c @@ -2649,6 +2649,14 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us case BLUETOOTH_EVENT_GATT_CLIENT_DISCONNECTED: { bt_gatt_client_s *client_s; bt_gatt_connection_state_changed_cb cb = NULL; + + const GSList *server_list = NULL; + bt_gatt_server_s *server = NULL; + + server_list = _bt_gatt_get_server_list(); + if (server_list) + server = (bt_gatt_server_s *)server_list->data; + BT_INFO("BLUETOOTH_EVENT_GATT_CLIENT_DISCONNECTED"); _bt_convert_address_to_string(&device_addr, (bluetooth_device_address_t *)(param->param_data)); @@ -2670,9 +2678,17 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us /* TDS Seeker */ _bt_tds_update_seeker_connection_state_changed(param->result, device_addr, FALSE); - if (client_s && client_s->client_connection_change_cb) + /* Handle Client disconnection event in case of Server */ + if (server && server->server_connection_change_cb) + server->server_connection_change_cb(_bt_get_error_code(param->result), FALSE, device_addr, + server->connection_change_user_data); + + if (client_s && client_s->client_connection_change_cb) { client_s->client_connection_change_cb(_bt_get_error_code(param->result), FALSE, device_addr, client_s->connection_change_user_data); + client_s->client_connection_change_cb = NULL; + client_s->connection_change_user_data = NULL; + } else { if (event_index >= 0) cb = bt_event_slot_container[event_index].callback; diff --git a/src/bluetooth-gatt.c b/src/bluetooth-gatt.c index 4323a4d..fb72744 100644 --- a/src/bluetooth-gatt.c +++ b/src/bluetooth-gatt.c @@ -827,14 +827,17 @@ int bt_gatt_client_connect(bt_gatt_client_h client, bt_gatt_client_s *client_h = (bt_gatt_client_s *)client; + BT_CHECK_GATT_CLIENT_SUPPORT(); + BT_CHECK_INIT_STATUS(); + BT_CHECK_INPUT_PARAMETER(client); + BT_CHECK_INPUT_PARAMETER(callback); + BT_CHECK_INPUT_PARAMETER(client_h->remote_address); + bt_gatt_client_s *client_s; BT_INFO("Address [%s] Auto Connect [%d]", client_h->remote_address, auto_connect); - BT_CHECK_GATT_CLIENT_SUPPORT(); - BT_CHECK_INIT_STATUS(); - BT_CHECK_INPUT_PARAMETER(client_h->remote_address); _bt_convert_address_to_hex(&bd_addr, client_h->remote_address); client_h->client_connection_change_cb = callback; @@ -928,6 +931,7 @@ int bt_gatt_client_disconnect(bt_gatt_client_h client) BT_CHECK_GATT_CLIENT_SUPPORT(); BT_CHECK_INIT_STATUS(); + BT_CHECK_INPUT_PARAMETER(client); BT_CHECK_INPUT_PARAMETER(client_h->remote_address); _bt_convert_address_to_hex(&bd_addr, client_h->remote_address); @@ -997,6 +1001,7 @@ int bt_gatt_server_set_connection_state_changed_cb(bt_gatt_server_h server, BT_CHECK_GATT_SUPPORT(); BT_CHECK_INIT_STATUS(); BT_CHECK_INPUT_PARAMETER(callback); + BT_CHECK_INPUT_PARAMETER(server); BT_INFO("Connection Change callback registered"); server_s->server_connection_change_cb = callback; @@ -1011,6 +1016,7 @@ int bt_gatt_server_unset_connection_state_changed_cb(bt_gatt_server_h server) BT_CHECK_GATT_SUPPORT(); BT_CHECK_INIT_STATUS(); + BT_CHECK_INPUT_PARAMETER(server); BT_INFO("Connection Changed callback unregistered"); server_s->server_connection_change_cb = NULL;