DPM: Modify/Remove the DPM APIs and Expose DPM BT-APIs
[platform/core/connectivity/bluetooth-frwk.git] / bt-api / bt-rfcomm-client.c
index 6a8a5d1..d6d7c34 100644 (file)
@@ -1,11 +1,5 @@
 /*
- * Bluetooth-frwk
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:  Hocheol Seo <hocheol.seo@samsung.com>
- *              Girishashok Joshi <girish.joshi@samsung.com>
- *              Chanyeol Park <chanyeol.park@samsung.com>
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 #include "bt-request-sender.h"
 #include "bt-event-handler.h"
 
+#ifdef TIZEN_DPM_ENABLE
+#include "bt-dpm.h"
+#endif
+
 #ifdef RFCOMM_DIRECT
 
 #define BT_TIMEOUT_MESSAGE "Did not receive a reply. Possible causes include: " \
@@ -118,9 +116,10 @@ gint compare(gpointer *a, gpointer *b)
 gint compare_fd(gpointer *a, gpointer *b)
 {
        rfcomm_conn_info_t *node = (rfcomm_conn_info_t *)a;
-       int fd = (int )*b;
-       if (node->fd == fd)
+       int *fd = (int *)b;
+       if (node->fd == *fd)
                return 0;
+
        return 1;
 }
 static void __bt_free_conn(rfcomm_conn_info_t *conn)
@@ -459,7 +458,7 @@ static void __bt_connect_response_cb(GDBusProxy *proxy, GAsyncResult *res,
 
        if (!g_dbus_proxy_call_finish(proxy, res, &error)) {
                int result;
-
+               g_dbus_error_strip_remote_error(error);
                BT_ERR("Error : %s \n", error->message);
 
                if (g_strcmp0(error->message, "In Progress") == 0)
@@ -504,6 +503,7 @@ static void __bt_discover_service_response_cb(GDBusProxy *proxy,
                g_object_unref(proxy);
 
        if (err != NULL) {
+               g_dbus_error_strip_remote_error(err);
                BT_ERR("Error occured in Proxy call [%s]\n", err->message);
                if (!strcmp("Operation canceled", err->message)) {
                        result = BLUETOOTH_ERROR_CANCEL_BY_USER;
@@ -571,6 +571,32 @@ BT_EXPORT_API int bluetooth_rfcomm_connect(
        BT_CHECK_PARAMETER(remote_uuid, return);
        BT_CHECK_ENABLED(return);
 
+#ifdef TIZEN_DPM_ENABLE
+       if (_bt_check_dpm(BT_DPM_ADDRESS, (void *)remote_bt_address) == BT_DPM_RESTRICTED) {
+               BT_ERR("Blacklist device");
+               return BLUETOOTH_ERROR_ACCESS_DENIED;
+       }
+
+       if (_bt_check_dpm(BT_DPM_SPP, NULL) == BT_DPM_RESTRICTED ||
+               _bt_check_dpm(BT_DPM_HF_ONLY, NULL) == BT_DPM_RESTRICTED) {
+               BT_ERR("Not allow to connect the RFCOMM service");
+               return BLUETOOTH_ERROR_ACCESS_DENIED;
+       }
+
+       if (_bt_check_dpm(BT_DPM_DESKTOP, NULL) == BT_DPM_RESTRICTED) {
+               char address[BT_ADDRESS_STRING_SIZE] = { 0 };
+               bluetooth_device_class_t dev_class;
+
+               _bt_convert_addr_type_to_string(address, (unsigned char *)remote_bt_address->addr);
+               _bt_get_cod_by_address(address, &dev_class);
+
+               if (dev_class.major_class == BLUETOOTH_DEVICE_MAJOR_CLASS_COMPUTER) {
+                       BT_ERR("Reject a authorization due to MDM Policy");
+                       return BLUETOOTH_ERROR_ACCESS_DENIED;
+               }
+       }
+#endif
+
 #ifdef RFCOMM_DIRECT
        BT_INFO_C("<<<<<<<<< RFCOMM Connect request from app >>>>>>>>>>>");
        int ret;
@@ -809,11 +835,26 @@ BT_EXPORT_API int bluetooth_rfcomm_write(int fd, const char *buf, int length)
        int result;
 
        BT_CHECK_PARAMETER(buf, return);
+       if (fd < 0) {
+               BT_ERR("Invalid FD");
+               return BLUETOOTH_ERROR_INVALID_PARAM;
+       }
+
+       BT_DBG("FD : %d", fd);
+
 #ifndef RFCOMM_DIRECT
        BT_CHECK_ENABLED(return);
 #endif
        retv_if(length <= 0, BLUETOOTH_ERROR_INVALID_PARAM);
 
+#ifdef TIZEN_DPM_ENABLE
+       if (_bt_check_dpm(BT_DPM_SPP, NULL) == BT_DPM_RESTRICTED ||
+               _bt_check_dpm(BT_DPM_HF_ONLY, NULL) == BT_DPM_RESTRICTED) {
+               BT_ERR("Not allow to write RFCOMM data");
+               return BLUETOOTH_ERROR_ACCESS_DENIED;
+       }
+#endif
+
 #ifdef RFCOMM_DIRECT
        switch (privilege_token) {
        case 0: