Imported Upstream version 1.0.0
[platform/upstream/iotivity.git] / resource / csdk / connectivity / src / bt_edr_adapter / tizen / caedrserver.c
1 /******************************************************************
2  *
3  * Copyright 2014 Samsung Electronics All Rights Reserved.
4  *
5  *
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  ******************************************************************/
20
21 /**
22  * @file
23  *
24  * This file provides the APIs to start and stop RFCOMM server.
25  */
26
27 #include <string.h>
28 #include <bluetooth.h>
29
30 #include "caedrinterface.h"
31 #include "caadapterutils.h"
32 #include "caedrutils.h"
33 #include "logger.h"
34 #include "camutex.h"
35 #include "cacommon.h"
36 #include "caedrdevicelist.h"
37
38 static int32_t g_maxPendingConnections = 10;
39
40 /**
41  * Storing RfcommserverUUID
42  */
43 static int g_serverFD = -1;
44
45 CAResult_t CAEDRServerStart(ca_thread_pool_t handle)
46 {
47     OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
48
49     bool isRunning = false;
50     bt_error_e err = bt_adapter_is_service_used(OIC_EDR_SERVICE_ID, &isRunning);
51     if (BT_ERROR_NONE != err)
52     {
53         OIC_LOG_V(ERROR, EDR_ADAPTER_TAG,
54                   "Unable to find whether service is already running or not! error num[%x]", err);
55         return CA_STATUS_FAILED;
56     }
57
58     if (isRunning)
59     {
60         OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "Service is already running with this UUID!");
61         return CA_SERVER_STARTED_ALREADY;
62     }
63
64     int socketFD = 0;
65     // Registers a rfcomm socket with a specific service_uuid.
66     err = bt_socket_create_rfcomm(OIC_EDR_SERVICE_ID, &socketFD);
67     if (BT_ERROR_NONE != err)
68     {
69         OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Failed to create rfcomm socket!, error num [%x]", err);
70         return CA_STATUS_FAILED;
71     }
72
73     // Start listening and accepting
74     err = bt_socket_listen_and_accept_rfcomm(socketFD, g_maxPendingConnections);
75     if (BT_ERROR_NONE != err)
76     {
77         OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Failed in listen rfcomm socket!, error num [%x]", err);
78
79         bt_socket_destroy_rfcomm(socketFD);
80         return CA_STATUS_FAILED;
81     }
82
83     g_serverFD = socketFD;
84
85     OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
86     return CA_STATUS_OK;
87 }
88
89 CAResult_t CAEDRServerStop()
90 {
91     OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
92
93     if (-1 < g_serverFD)
94     {
95         bt_error_e err = bt_socket_destroy_rfcomm(g_serverFD);
96
97         if (BT_ERROR_NONE != err)
98         {
99             OIC_LOG_V(ERROR, EDR_ADAPTER_TAG, "Failed close server socket!, error num [%x]", err);
100             return CA_STATUS_FAILED;
101         }
102         g_serverFD = -1;
103     }
104
105     OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
106     return CA_STATUS_OK;
107 }
108
109 void CAEDRServerTerminate()
110 {
111     // This is just a dummy
112     OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "CAEDRServerTerminate");
113 }
114
115 CAResult_t CAEDRManagerReadData(void)
116 {
117     OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN");
118     OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT");
119     return CA_NOT_SUPPORTED;
120 }