[Bluetooth][OTP] Add object browsing support
[platform/core/connectivity/bluetooth-frwk.git] / bt-service / bt-request-handler.c
index 08cb882..cf35d49 100644 (file)
@@ -46,6 +46,7 @@
 #include "bt-service-agent.h"
 #include "bt-service-proximity.h"
 #include "bt-service-tds.h"
+#include "bt-service-otp.h"
 
 static GDBusConnection *bt_service_conn;
 static guint owner_id = 0;
@@ -1297,14 +1298,17 @@ int __bt_bluez_request(int function_name,
        }
        case BT_OOB_ADD_REMOTE_DATA: {
                bluetooth_device_address_t address = { {0} };
+               unsigned short address_type;
                bt_oob_data_t remote_oob_data;
 
                __bt_service_get_parameters(in_param1,
                                &address, sizeof(bluetooth_device_address_t));
                __bt_service_get_parameters(in_param2,
+                               &address_type, sizeof(unsigned short));
+               __bt_service_get_parameters(in_param3,
                                &remote_oob_data, sizeof(bt_oob_data_t));
 
-               result = _bt_oob_add_remote_data(&address, &remote_oob_data);
+               result = _bt_oob_add_remote_data(&address, address_type, &remote_oob_data);
 
                break;
        }
@@ -2345,6 +2349,96 @@ int __bt_bluez_request(int function_name,
                        g_free(handle);
                break;
        }
+       case BT_OTP_SERVER_INIT: {
+               const char *directory;
+               directory = (const char *)g_variant_get_data(in_param1);
+               result = bt_otp_server_init(request_id, directory);
+               break;
+       }
+       case BT_OTP_SERVER_DEINIT: {
+               result = bt_otp_server_deinit(request_id);
+               break;
+       }
+       case BT_OTP_READ_VALUE: {
+               char *handle;
+               char *data = NULL;
+               guint data_len = 0;
+
+               char *sender = NULL;
+               sender = (char *)g_dbus_method_invocation_get_sender(context);
+
+               data_len = g_variant_get_size(in_param1);
+               data = (char *)g_variant_get_data(in_param1);
+
+               handle = g_strndup(data, data_len);
+               BT_DBG("Read OTP Characteristic Value [%s]", handle);
+
+               result = _bt_otp_read_characteristic_value(request_id, sender, handle);
+
+               if (result != BLUETOOTH_ERROR_NONE) {
+                       BT_ERR("Reading OTP Characteristic Value failed result [%d]", result);
+                       g_array_append_vals(*out_param1, handle, data_len);
+               }
+               if (handle)
+                       g_free(handle);
+               break;
+       }
+       case BT_OTP_ENABLE_NOTIFICATION: {
+               char *handle;
+               char *data = NULL;
+               guint data_len = 0;
+
+               char *sender = NULL;
+               sender = (char *)g_dbus_method_invocation_get_sender(context);
+
+               data_len = g_variant_get_size(in_param1);
+               data = (char *)g_variant_get_data(in_param1);
+
+               handle = g_strndup(data, data_len);
+               BT_DBG("OTP Control point CCCD handle [%s]", handle);
+
+               result = _bt_otp_enable_notification(request_id, sender, handle);
+
+               if (result != BLUETOOTH_ERROR_NONE) {
+                       BT_ERR("Enabling OTP CCCD failed result [%d]", result);
+                       g_array_append_vals(*out_param1, handle, data_len);
+               }
+               if (handle)
+                       g_free(handle);
+               break;
+       }
+       case BT_OTP_WRITE_VALUE: {
+               char *handle;
+               char *data = NULL;
+               guint data_len = 0;
+               char *sender = NULL;
+               bluetooth_otp_charc_data_t otp_charc_data;
+               sender = (char *)g_dbus_method_invocation_get_sender(context);
+
+               data_len = g_variant_get_size(in_param1);
+               data = (char *)g_variant_get_data(in_param1);
+
+               handle = g_strndup(data, data_len);
+               BT_DBG("OTP Write Characteristic value [%s]", handle);
+
+               __bt_service_get_parameters(in_param2,
+                       &otp_charc_data, sizeof(bluetooth_otp_charc_data_t));
+
+               int i;
+               for (i = 0; i < otp_charc_data.length; i++)
+                       BT_DBG("Value[%d] = %u", i, otp_charc_data.data[i]);
+
+               result = _bt_otp_write_characteristic_value(request_id, sender, handle,
+                                                               otp_charc_data.data, otp_charc_data.length);
+
+               if (result != BLUETOOTH_ERROR_NONE) {
+                       BT_ERR("OTP Write Characteristic failed result [%d]", result);
+                       g_array_append_vals(*out_param1, handle, data_len);
+               }
+               if (handle)
+                       g_free(handle);
+               break;
+       }
        default:
                result = BLUETOOTH_ERROR_INTERNAL;
                break;
@@ -3188,6 +3282,13 @@ gboolean __bt_service_check_privilege(int function_name,
        case BT_TDS_ENABLE_CONTROL_POINT:
        case BT_TDS_ACTIVATE_CONTROL_POINT:
 
+       /* OTP Server */
+       case BT_OTP_SERVER_INIT:
+       case BT_OTP_SERVER_DEINIT:
+       case BT_OTP_READ_VALUE:
+       case BT_OTP_ENABLE_NOTIFICATION:
+       case BT_OTP_WRITE_VALUE:
+
        case BT_MAP_CREATE_SESSION:
        case BT_MAP_DESTROY_SESSION:
        case BT_MAP_SET_FOLDER: