Apply tizen 3.0 based product patchsets
[platform/core/connectivity/bluetooth-frwk.git] / bt-api / bt-common.c
index 3e61585..a846c80 100644 (file)
@@ -217,8 +217,7 @@ void _bt_divide_device_class(bluetooth_device_class_t *device_class,
        }
 }
 
-void _bt_convert_addr_string_to_type(unsigned char *addr,
-                                       const char *address)
+void _bt_convert_addr_string_to_type(unsigned char *addr, const char *address)
 {
        int i;
        char *ptr = NULL;
@@ -237,8 +236,7 @@ void _bt_convert_addr_string_to_type(unsigned char *addr,
        }
 }
 
-void _bt_convert_addr_string_to_secure_string(char *addr,
-                                       const char *address)
+void _bt_convert_addr_string_to_secure_string(char *addr, const char *address)
 {
        int len;
 
@@ -256,8 +254,7 @@ void _bt_convert_addr_string_to_secure_string(char *addr,
        return;
 }
 
-void _bt_convert_addr_type_to_string(char *address,
-                               unsigned char *addr)
+void _bt_convert_addr_type_to_string(char *address, unsigned char *addr)
 {
        ret_if(address == NULL);
        ret_if(addr == NULL);
@@ -268,6 +265,16 @@ void _bt_convert_addr_type_to_string(char *address,
                        addr[3], addr[4], addr[5]);
 }
 
+void _bt_convert_addr_type_to_secure_string(char *address, unsigned char *addr)
+{
+       ret_if(address == NULL);
+       ret_if(addr == NULL);
+
+       g_snprintf(address, BT_ADDRESS_STRING_SIZE,
+                       "%2.2X:%2.2X:%2.2X:%2.2X:XX:XX",
+                       addr[0], addr[1], addr[2], addr[3]);
+}
+
 const char *_bt_convert_error_to_string(int error)
 {
        switch (error) {
@@ -671,7 +678,6 @@ static GDBusConnection *gconn;
 static int latest_id = -1;
 #define BT_RFCOMM_ID_MAX 245
 static gboolean id_used[BT_RFCOMM_ID_MAX];
-GDBusNodeInfo *new_conn_node;
 
 static const gchar rfcomm_agent_xml[] =
 "<node name='/'>"
@@ -882,6 +888,7 @@ void _bt_unregister_gdbus(int object_id)
 int _bt_register_new_conn(const char *path, bt_new_connection_cb cb)
 {
        GDBusConnection *gconn;
+       GDBusNodeInfo *node_info;
        int id;
        GError *error = NULL;
 
@@ -889,16 +896,15 @@ int _bt_register_new_conn(const char *path, bt_new_connection_cb cb)
        if (gconn == NULL)
                return -1;
 
-       if (new_conn_node == NULL)
-               new_conn_node = _bt_get_gdbus_node(rfcomm_agent_xml);
-
-       if (new_conn_node == NULL)
+       node_info = _bt_get_gdbus_node(rfcomm_agent_xml);
+       if (node_info == NULL)
                return -1;
 
        id = g_dbus_connection_register_object(gconn, path,
-                                               new_conn_node->interfaces[0],
+                                               node_info->interfaces[0],
                                                &method_table,
                                                cb, NULL, &error);
+       g_dbus_node_info_unref(node_info);
        if (id == 0) {
                BT_ERR("Failed to register: %s", error->message);
                g_error_free(error);
@@ -982,6 +988,7 @@ fail:
 int _bt_register_new_conn_ex(const char *path, const char *bus_name, bt_new_connection_cb cb)
 {
        GDBusConnection *gconn;
+       GDBusNodeInfo *node_info;
        int id;
        GError *error = NULL;
 
@@ -989,16 +996,16 @@ int _bt_register_new_conn_ex(const char *path, const char *bus_name, bt_new_conn
        if (gconn == NULL)
                return -1;
 
-       if (new_conn_node == NULL)
-               new_conn_node = _bt_get_gdbus_node_ex(rfcomm_agent_xml, bus_name);
+       node_info = _bt_get_gdbus_node_ex(rfcomm_agent_xml, bus_name);
 
-       if (new_conn_node == NULL)
+       if (node_info == NULL)
                return -1;
 
        id = g_dbus_connection_register_object(gconn, path,
-                                               new_conn_node->interfaces[0],
+                                               node_info->interfaces[0],
                                                &method_table,
                                                cb, NULL, &error);
+       g_dbus_node_info_unref(node_info);
        if (id == 0) {
                BT_ERR("Failed to register: %s", error->message);
                g_error_free(error);
@@ -1453,6 +1460,9 @@ int _bt_discover_service_uuids(char *address, char *remote_uuid)
        proxy = g_dbus_proxy_new_sync(gconn, G_DBUS_PROXY_FLAGS_NONE, NULL,
                                BT_BLUEZ_NAME, object_path, BT_PROPERTIES_INTERFACE, NULL,
                                &err);
+
+       g_free(object_path);
+
        retv_if(proxy == NULL, BLUETOOTH_ERROR_INTERNAL);
        if (err) {
                BT_ERR("DBus Error: [%s]", err->message);
@@ -1533,6 +1543,9 @@ int _bt_get_cod_by_address(char *address, bluetooth_device_class_t *dev_class)
        proxy = g_dbus_proxy_new_sync(gconn, G_DBUS_PROXY_FLAGS_NONE, NULL,
                                BT_BLUEZ_NAME, object_path, BT_PROPERTIES_INTERFACE, NULL,
                                &err);
+
+       g_free(object_path);
+
        retv_if(proxy == NULL, BLUETOOTH_ERROR_INTERNAL);
        if (err) {
                BT_ERR("DBus Error: [%s]", err->message);
@@ -1621,6 +1634,30 @@ int _bt_disconnect_profile(char *address, char *uuid, void *cb,
        return BLUETOOTH_ERROR_NONE;
 }
 
+int _bt_disconnect_ext_profile(char *address, char *path)
+{
+       GDBusProxy *proxy;
+       char *object_path;
+
+       object_path = _bt_get_device_object_path(address);
+       if (object_path == NULL)
+               return BLUETOOTH_ERROR_INTERNAL;
+
+       proxy = __bt_gdbus_get_device_proxy(object_path);
+       g_free(object_path);
+       if (proxy == NULL) {
+               BT_ERR("Error while getting proxy");
+               return BLUETOOTH_ERROR_INTERNAL;
+       }
+
+       g_dbus_proxy_call(proxy, "DisconnectExtProfile",
+                       g_variant_new("(o)", path),
+                       G_DBUS_CALL_FLAGS_NONE,
+                       DBUS_TIMEOUT, NULL, NULL, NULL);
+       BT_DBG("-");
+       return BLUETOOTH_ERROR_NONE;
+}
+
 int _bt_get_adapter_path(GDBusConnection *conn, char *path)
 {
        GError *err = NULL;
@@ -1689,6 +1726,35 @@ fail:
 
 }
 
+void _bt_convert_device_path_to_addr_type(const char *device_path,
+                                         unsigned char *addr)
+{
+       char *dev_addr;
+       char address[BT_ADDRESS_STRING_SIZE] = { 0 };
+       int i;
+       char *addr_ptr = address;
+       char *ptr = NULL;
+
+       ret_if(device_path == NULL);
+       ret_if(addr == NULL);
+
+       dev_addr = strstr(device_path, "dev_");
+       if (dev_addr != NULL) {
+               dev_addr += 4;
+               g_strlcpy(addr_ptr, dev_addr, BT_ADDRESS_STRING_SIZE);
+
+               for (i = 0; i < BT_ADDRESS_LENGTH_MAX; i++) {
+                       addr[i] = strtol(addr_ptr, &ptr, 16);
+                       if (ptr[0] != '\0') {
+                               if (ptr[0] != '_')
+                                       return;
+
+                               addr_ptr = ptr + 1;
+                       }
+               }
+       }
+}
+
 void _bt_convert_device_path_to_address(const char *device_path,
                                                char *device_address)
 {