X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bt-oal%2Fbluez_hal%2Fsrc%2Fbt-hal-gatt-server.c;h=26d15c865bf1b28cd562cab1b68224f3f683aa48;hb=cd9e35acccf53453cf686a5b82e7ceac7707bea9;hp=b46082c3ab92c32472f25e0bad76a81e9b251883;hpb=ec0038efc9a11ee37112db9d92eb2297cbc4899d;p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git diff --git a/bt-oal/bluez_hal/src/bt-hal-gatt-server.c b/bt-oal/bluez_hal/src/bt-hal-gatt-server.c index b46082c..26d15c8 100644 --- a/bt-oal/bluez_hal/src/bt-hal-gatt-server.c +++ b/bt-oal/bluez_hal/src/bt-hal-gatt-server.c @@ -40,6 +40,7 @@ #include "bt-hal-utils.h" #include "bt-hal-dbus-common-utils.h" +#include "bt-hal-gatt.h" #include "bt-hal-adapter-le.h" #include "bt-hal-event-receiver.h" @@ -58,11 +59,10 @@ static GDBusProxy *manager_gproxy = NULL; ** Static variables ************************************************************************************/ extern const btgatt_callbacks_t *bt_gatt_callbacks; -guint owner_id; -GDBusConnection *g_conn = NULL; -//GDBusConnection *conn = NULL; -GDBusNodeInfo *manager_node_info = NULL; -guint manager_id; +static guint owner_id; +static GDBusConnection *g_conn = NULL; +static GDBusNodeInfo *manager_node_info = NULL; +static guint manager_id; /* Global handles which needs to be incremented during each addition */ static int gatt_service_handle = 10; @@ -204,7 +204,7 @@ static int assigned_id = 0; static gboolean instance_id_used[BT_GATTS_MAX]; -#define CHECK_BTGATT_INIT() if (bt_gatt_callbacks == NULL)\ +#define CHECK_BTGATT_INIT() if (_bt_hal_gatt_interface_ready() == false)\ {\ ERR("%s: BTGATT not initialized", __FUNCTION__);\ return BT_STATUS_NOT_READY;\ @@ -342,10 +342,35 @@ static const gchar manager_introspection_xml[] = " " ""; +static void __bt_free_gatt_server_app(struct gatt_server_app *app) +{ + g_free(app->app_path); + g_free(app); +} + +static void __bt_hal_gatt_free_service_info(struct gatt_service_info *svc_info) +{ + if (!svc_info) + return; + + g_free(svc_info->serv_path); + g_free(svc_info->service_uuid); + g_free(svc_info); +} + void _bt_hal_gatt_server_init(void) { assigned_id = 0; memset(instance_id_used, 0x00, sizeof(instance_id_used)); + + g_slist_free_full(gatt_server_apps, (GDestroyNotify)__bt_free_gatt_server_app); + gatt_server_apps = NULL; + + g_slist_free_full(gatt_services, (GDestroyNotify)__bt_hal_gatt_free_service_info); + gatt_services = NULL; + + g_slist_free_full(hal_gatts_server_register_list, g_free); + hal_gatts_server_register_list = NULL; } static int __bt_hal_gatt_assign_id(void) @@ -1408,14 +1433,14 @@ static void __bt_gatt_char_method_call(GDBusConnection *connection, GVariant *value = NULL; while (g_variant_iter_loop(iter, "{sv}", &key, &value)) { if (g_strcmp0(key, "MTU") == 0) - g_variant_get(value, "i", &mtu); + g_variant_get(value, "q", &mtu); else if (g_strcmp0(key, "link") == 0) g_variant_get(value, "s", &link); else if (g_strcmp0(key, "device") == 0) g_variant_get(value, "o", &dev_path); } - DBG(" path %s LINK = %s, MTU = %u", addr, link, mtu); + DBG(" path %s LINK = %s, MTU = %u", dev_path, link, mtu); svc_info = __bt_gatt_find_gatt_service_from_char(object_path, &char_hdl); @@ -1589,17 +1614,6 @@ static void __bt_hal_gatt_free_characteristic_info(struct gatt_char_info *char_i g_free(char_info); } - -static void __bt_hal_gatt_free_service_info(struct gatt_service_info *svc_info) -{ - if (!svc_info) - return; - - g_free(svc_info->serv_path); - g_free(svc_info->service_uuid); - g_free(svc_info); -} - static const GDBusInterfaceVTable desc_interface_vtable = { __bt_gatt_desc_method_call, NULL, @@ -2313,6 +2327,8 @@ static int __bt_hal_gatt_init(void) owner_id = g_bus_own_name_on_connection(g_conn, name, G_BUS_NAME_OWNER_FLAGS_NONE, NULL, NULL, NULL, NULL); + + g_free(name); } INFO("Owner ID [%d]", owner_id); @@ -2650,14 +2666,8 @@ static bt_status_t gatt_server_add_descriptor(int slot, int service_handle, bt_u char *desc_flags[NUMBER_OF_FLAGS]; int flag_count = 0; int *app_id; - hal_gatt_desc_added *user_data = NULL; -#if 0 - if (new_char) { - desc_id = 1; - new_char = FALSE; - } -#endif + /* Fetch service data for the GATT server */ serv_info = __bt_gatt_find_gatt_service_info(slot, service_handle); if (serv_info == NULL) @@ -3368,6 +3378,8 @@ static bt_status_t gatt_server_update_att_value(int server_if, int attribute_han } g_free(serv_path); + g_strfreev(line_argv); + line_argv = g_strsplit_set(char_path, "/", 0); serv_path = g_strdup_printf("/%s/%s/%s", line_argv[1], line_argv[2], line_argv[3]);