#include "bt-internal-types.h"
#include "bluetooth-ipsp-api.h"
+#ifndef GATT_DIRECT
+#include "bluetooth-gatt-server-api.h"
+#endif
+
#include "bt-common.h"
#include "bt-request-sender.h"
#include "bt-event-handler.h"
user_data);
}
+#ifndef GATT_DIRECT
+void _bt_gatt_server_event_cb(int event, int result, void *param,
+ void *callback, void *user_data)
+{
+ BT_INFO("__bt_gatt_server_event_cb");
+ gatt_server_event_param_t bt_event = { 0, 0, NULL, NULL };
+ bt_event.event = event;
+ bt_event.result = result;
+ bt_event.param_data = param;
+ if (callback) {
+ BT_INFO("GATT Server event callback is registered");
+ ((gatt_server_cb_func_ptr)callback)(bt_event.event, &bt_event,
+ user_data);
+ } else {
+ BT_ERR("GATT Server event callback is not registered!!!");
+ }
+}
+#endif
+
void _bt_divide_device_class(bluetooth_device_class_t *device_class,
unsigned int cod)
{
ret_if(len != BT_ADDRESS_STRING_SIZE - 1);
strncpy(addr, address, len);
+ addr[len] = '\0';
addr[len-1] = 'X';
addr[len-2] = 'X';
{BT_UPDATE_LE_CONNECTION_MODE, "BT_UPDATE_LE_CONNECTION_MODE"},
{BT_SET_PROFILE_TRUSTED, "BT_SET_PROFILE_TRUSTED"},
{BT_GET_PROFILE_TRUSTED, "BT_GET_PROFILE_TRUSTED"},
- {BT_SET_PROFILE_RESTRICTED, "BT_SET_PROFILE_RESTRICTED"},
- {BT_GET_PROFILE_RESTRICTED, "BT_GET_PROFILE_RESTRICTED"},
{BT_HID_CONNECT, "BT_HID_CONNECT"},
{BT_HID_DISCONNECT, "BT_HID_DISCONNECT"},
{BT_HID_DEVICE_ACTIVATE, "BT_HID_DEVICE_ACTIVATE"},
"</node>";
static void __new_connection_method(GDBusConnection *connection,
- const gchar *sender,
- const gchar *object_path,
- const gchar *interface_name,
- const gchar *method_name,
- GVariant *parameters,
- GDBusMethodInvocation *invocation,
- gpointer user_data)
+ const gchar *sender,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
{
BT_DBG("method %s", method_name);
if (g_strcmp0(method_name, "NewConnection") == 0) {
BT_DEVICE_INTERFACE,
NULL, &err);
- if (err) {
+ if (device_gproxy == NULL && err) {
BT_ERR("Unable to create proxy: %s", err->message);
g_clear_error(&err);
return NULL;
BT_ERR("DBus Error: [%s]", err->message);
g_clear_error(&err);
}
- ret = g_dbus_proxy_call_sync(proxy, "GetAll",
- g_variant_new("(s)", BT_DEVICE_INTERFACE),
- G_DBUS_CALL_FLAGS_NONE,
- DBUS_TIMEOUT, NULL,
- &err);
+ ret = g_dbus_proxy_call_sync(proxy, "Get",
+ g_variant_new("(ss)", BT_DEVICE_INTERFACE, "UUIDs"),
+ G_DBUS_CALL_FLAGS_NONE, DBUS_TIMEOUT, NULL, &err);
if (err) {
result = BLUETOOTH_ERROR_INTERNAL;
BT_ERR("DBus Error : %s", err->message);
g_clear_error(&err);
goto done;
- }
- if (ret == NULL) {
- BT_ERR("g_dbus_proxy_call_sync function return NULL");
- result = BLUETOOTH_ERROR_INTERNAL;
- goto done;
- }
-
- g_variant_get(ret, "(@a{sv})", &value);
- g_variant_unref(ret);
- if (value) {
- GVariant *temp_value = g_variant_lookup_value(value, "UUIDs",
- G_VARIANT_TYPE_STRING_ARRAY);
-
- if (temp_value) {
- size = g_variant_get_size(temp_value);
- if (size > 0) {
- uuid_value = (char **)g_variant_get_strv(temp_value, &size);
- BT_DBG("Size items %d", size);
-
- if (uuid_value) {
- for (i = 0; uuid_value[i] != NULL; i++) {
- BT_DBG("Remote uuids %s", uuid_value[i]);
- if (strcasecmp(uuid_value[i], remote_uuid) == 0) {
- result = BLUETOOTH_ERROR_NONE;
- g_variant_unref(temp_value);
- goto done;
- }
- }
- }
+ } else {
+ g_variant_get(ret, "(v)", &value);
+ uuid_value = (char **)g_variant_get_strv(value, &size);
+ BT_DBG("Size items %d", size);
+ }
+
+ if (uuid_value) {
+ for (i = 0; uuid_value[i] != NULL; i++) {
+ BT_DBG("Remote uuids %s", uuid_value[i]);
+ if (uuid_value[i] == NULL) {
+ BT_ERR("_bt_discover_service_uuids Error Parameter are NULL..\n");
+ continue;
+ } else if (g_ascii_strcasecmp(uuid_value[i], remote_uuid) == 0) {
+ result = BLUETOOTH_ERROR_NONE;
+ goto done;
}
- g_variant_unref(temp_value);
}
}
+
done:
if (proxy)
g_object_unref(proxy);
- if (value)
- g_variant_unref(value);
if (uuid_value)
g_free(uuid_value);
+ if (value)
+ g_variant_unref(value);
+
+ if (ret)
+ g_variant_unref(ret);
+
BT_DBG("-");
return result;
}
g_clear_error(&err);
}
- result = g_dbus_proxy_call_sync(proxy, "GetAll",
- g_variant_new("(s)", BT_DEVICE_INTERFACE),
- G_DBUS_CALL_FLAGS_NONE,
- DBUS_TIMEOUT, NULL,
- &err);
+ result = g_dbus_proxy_call_sync(proxy, "Get",
+ g_variant_new("(ss)", BT_DEVICE_INTERFACE, "Class"),
+ G_DBUS_CALL_FLAGS_NONE, DBUS_TIMEOUT, NULL, &err);
if (err) {
ret = BLUETOOTH_ERROR_INTERNAL;
BT_ERR("DBus Error : %s", err->message);
g_clear_error(&err);
goto done;
- }
- if (result == NULL) {
- BT_ERR("g_dbus_proxy_call_sync function return NULL");
- ret = BLUETOOTH_ERROR_INTERNAL;
- goto done;
- }
- g_variant_get(result, "(@a{sv})", &value);
- g_variant_unref(result);
- if (value) {
- GVariant *temp_value = g_variant_lookup_value(value, "Class",
- G_VARIANT_TYPE_UINT32);
- class = g_variant_get_uint32(temp_value);
+ } else {
+ g_variant_get(result, "(v)", &value);
+ class = g_variant_get_uint32(value);
_bt_divide_device_class(dev_class, class);
- if (temp_value)
- g_variant_unref(temp_value);
+ g_variant_unref(value);
+ g_variant_unref(result);
}
done:
if (proxy)
g_object_unref(proxy);
- if (value)
- g_variant_unref(value);
BT_DBG("-");
return ret;
if (error) {
BT_ERR("Unable to create proxy: %s", error->message);
g_clear_error(&error);
+ if (manager_proxy)
+ g_object_unref(manager_proxy);
return NULL;
}
+ if (!manager_proxy)
+ return NULL;
+
result = g_dbus_proxy_call_sync(manager_proxy,
"GetManagedObjects", NULL,
G_DBUS_CALL_FLAGS_NONE, -1,
ret = _bt_register_event(BT_RFCOMM_SERVER_EVENT, (void *)callback_ptr, user_data);
if (ret != BLUETOOTH_ERROR_NONE)
goto fail;
+
+#ifdef GATT_NO_RELAY
ret = _bt_register_event(BT_GATT_BLUEZ_EVENT, (void *)callback_ptr, user_data);
if (ret != BLUETOOTH_ERROR_NONE)
goto fail;
+#endif
ret = _bt_register_event(BT_TDS_EVENT, (void *)callback_ptr, user_data);
if (ret != BLUETOOTH_ERROR_NONE)
goto fail;
ret = _bt_register_event(BT_OTP_EVENT, (void *)callback_ptr, user_data);
if (ret != BLUETOOTH_ERROR_NONE)
goto fail;
+ ret = _bt_register_event(BT_HDP_EVENT, (void *)callback_ptr, user_data);
+ if (ret != BLUETOOTH_ERROR_NONE)
+ goto fail;
}
_bt_register_name_owner_changed();