[Adapt] Add support for rfcomm conn auth req/reply 41/87741/1
authorAtul Rai <a.rai@samsung.com>
Wed, 31 Aug 2016 07:29:55 +0000 (12:59 +0530)
committerAtul Rai <a.rai@samsung.com>
Thu, 1 Sep 2016 05:13:04 +0000 (10:43 +0530)
This patch added support for sending rfcomm connection authorization
request to app and send authorization reply from app to bluetooth stack.

Change-Id: I1ffda79848d8e82826228758fe9c4684cafba03a
Signed-off-by: Atul Rai <a.rai@samsung.com>
bt-service-adaptation/services/bt-request-handler.c
bt-service-adaptation/services/bt-service-event-receiver.c
bt-service-adaptation/services/device/bt-service-core-device.c
bt-service-adaptation/services/include/bt-service-core-device.h
bt-service-adaptation/services/socket/bt-service-socket.c

index 70ddce8..1bb79b1 100644 (file)
@@ -1059,6 +1059,20 @@ int __bt_bluez_request(int function_name,
                }
                break;
        }
+       case BT_RFCOMM_ACCEPT_CONNECTION: {
+               char *address;
+
+               address = (char *)g_variant_get_data(in_param1);
+               result = _bt_rfcomm_reply_conn_authorization(address, TRUE);
+               break;
+       }
+       case BT_RFCOMM_REJECT_CONNECTION: {
+               char *address;
+
+               address = (char *)g_variant_get_data(in_param1);
+               result = _bt_rfcomm_reply_conn_authorization(address, FALSE);
+               break;
+       }
        case BT_RFCOMM_REMOVE_SOCKET: {
                /*
                 * This call to bt-service is only used for privilege check, so return
index f11c9d3..09d9009 100644 (file)
@@ -142,6 +142,7 @@ void _bt_service_oal_event_receiver(int event_type, gpointer event_data, gsize l
                break;
        case OAL_EVENT_SOCKET_OUTGOING_CONNECTED:
        case OAL_EVENT_SOCKET_DISCONNECTED:
+       case OAL_EVENT_SOCKET_AUTHORIZE_REQUEST:
                if (socket_cb)
                        socket_cb(event_type, event_data);
                break;
index 3fa979a..fbbfb6c 100644 (file)
@@ -1614,3 +1614,22 @@ gboolean _bt_is_device_connected(bluetooth_device_address_t *device_address, int
 
        return is_connected;
 }
+
+int _bt_rfcomm_reply_conn_authorization(char *address, gboolean reply)
+{
+       bt_address_t bd_addr;
+       int res;
+
+       BT_DBG("+");
+
+       retv_if (NULL == address, BLUETOOTH_ERROR_INVALID_PARAM);
+       _bt_convert_addr_string_to_type(bd_addr.addr, address);
+       res = device_reply_auth_request(&bd_addr, 0, reply, FALSE);
+       if (res != OAL_STATUS_SUCCESS) {
+               BT_ERR("authorize_response: %d", res);
+               return BLUETOOTH_ERROR_INTERNAL;
+       }
+
+       BT_DBG("-");
+       return BLUETOOTH_ERROR_NONE;
+}
\ No newline at end of file
index 6eac2d5..c48e11e 100755 (executable)
@@ -63,6 +63,8 @@ int _bt_set_authorization(bluetooth_device_address_t *device_address,
 
 gboolean _bt_is_device_connected(bluetooth_device_address_t *device_address, int svc_type);
 
+int _bt_rfcomm_reply_conn_authorization(char *address, gboolean reply);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index 27c2309..8110ada 100644 (file)
@@ -34,6 +34,7 @@
 #include "bt-service-util.h"
 #include "bt-service-event-receiver.h"
 #include "bt-service-socket.h"
+#include "bt-service-event.h"
 
 typedef struct {
        int sock_fd;
@@ -119,6 +120,23 @@ static void __handle_outgoing_client_socket_connected(event_socket_client_conn_t
        BT_DBG("-");
 }
 
+static void __handle_socket_authorization_request(event_socket_authorize_req_t *auth_event)
+{
+       char address[BT_ADDRESS_STRING_SIZE];
+       char uuid_str[BT_UUID_STRING_SIZE];
+       int result = BLUETOOTH_ERROR_NONE;
+
+       BT_DBG("+");
+
+       _bt_convert_addr_type_to_string(address, auth_event->address.addr);
+       _bt_service_convert_uuid_type_to_string(uuid_str, auth_event->uuid.uuid);
+       BT_INFO("Address: %s, UUID: %s", address, uuid_str);
+       _bt_send_event(BT_RFCOMM_SERVER_EVENT,
+                       BLUETOOTH_EVENT_RFCOMM_AUTHORIZE,
+                       g_variant_new("(iss)", result, address, uuid_str));
+       BT_DBG("-");
+}
+
 static void __bt_socket_event_handler(int event_type, gpointer event_data)
 {
        BT_INFO("OAL event = 0x%x, \n", event_type);
@@ -136,6 +154,11 @@ static void __bt_socket_event_handler(int event_type, gpointer event_data)
                __handle_socket_disconnected(client_info);
                break;
        }
+       case OAL_EVENT_SOCKET_AUTHORIZE_REQUEST: {
+                BT_INFO("Socket Authorization Request");
+                __handle_socket_authorization_request((event_socket_authorize_req_t *)event_data);
+               break;
+       }
        default:
                BT_ERR("Invalid event:%d\n", event_type);
                break;