Clean up log messages in CA Layer.
[platform/upstream/iotivity.git] / resource / csdk / connectivity / src / canetworkconfigurator.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 #include <stdlib.h>
22
23 #include "canetworkconfigurator.h"
24 #include "cainterfacecontroller.h"
25 #include "cainterface.h"
26 #include "uarraylist.h"
27 #include "logger.h"
28
29 #define TAG "OIC_CA_NW_CONFIG"
30
31 static u_arraylist_t *g_selectedNetworkList = NULL;
32 static CATransportAdapter_t CASelectedNetwork = CA_DEFAULT_ADAPTER;
33
34 #ifdef EDR_ADAPTER
35 static uint32_t NETWORK_RFCOMM = CA_ADAPTER_RFCOMM_BTEDR;
36 #endif
37
38 #ifdef LE_ADAPTER
39 static uint32_t NETWORK_GATT = CA_ADAPTER_GATT_BTLE;
40 #endif
41
42 #ifdef IP_ADAPTER
43 static uint32_t NETWORK_IP = CA_ADAPTER_IP;
44 #endif
45
46 #ifdef NFC_ADAPTER
47 static uint32_t NETWORK_NFC = CA_ADAPTER_NFC;
48 #endif
49
50 #ifdef RA_ADAPTER
51 static uint32_t NETWORK_RA = CA_ADAPTER_REMOTE_ACCESS;
52 #endif
53
54 #ifdef TCP_ADAPTER
55 static uint32_t NETWORK_TCP = CA_ADAPTER_TCP;
56 #endif
57
58 CAResult_t CAAddNetworkType(CATransportAdapter_t transportType)
59 {
60     if (NULL == g_selectedNetworkList)
61     {
62         OIC_LOG(DEBUG, TAG, "Create network list");
63
64         g_selectedNetworkList = u_arraylist_create();
65
66         if (NULL == g_selectedNetworkList)
67         {
68             return CA_MEMORY_ALLOC_FAILED;
69         }
70     }
71     bool res = true;
72     switch (transportType)
73     {
74         case CA_ADAPTER_IP:
75 #ifndef IP_ADAPTER
76             return CA_NOT_SUPPORTED;
77 #else
78
79             if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_IP))
80             {
81                 goto exit;
82             }
83             res = u_arraylist_add(g_selectedNetworkList, &NETWORK_IP);
84             CASelectedNetwork |= CA_ADAPTER_IP;
85
86             break;
87 #endif // IP_ADAPTER
88
89         case CA_ADAPTER_RFCOMM_BTEDR:
90 #ifndef EDR_ADAPTER
91             return CA_NOT_SUPPORTED;
92 #else
93
94             if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_RFCOMM))
95             {
96                 goto exit;
97             }
98             res = u_arraylist_add(g_selectedNetworkList, &NETWORK_RFCOMM);
99             CASelectedNetwork |= CA_ADAPTER_RFCOMM_BTEDR;
100
101             break;
102 #endif // EDR_ADAPTER
103
104         case CA_ADAPTER_GATT_BTLE:
105 #ifndef LE_ADAPTER
106             return CA_NOT_SUPPORTED;
107 #else
108
109             if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_GATT))
110             {
111                 goto exit;
112             }
113             res = u_arraylist_add(g_selectedNetworkList, &NETWORK_GATT);
114             CASelectedNetwork |= CA_ADAPTER_GATT_BTLE;
115
116             break;
117 #endif // LE_ADAPTER
118
119 #ifdef RA_ADAPTER
120         case CA_ADAPTER_REMOTE_ACCESS:
121
122            if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_RA))
123            {
124                goto exit;
125            }
126            res = u_arraylist_add(g_selectedNetworkList, &NETWORK_RA);
127            CASelectedNetwork |= CA_ADAPTER_REMOTE_ACCESS;
128            break;
129 #endif // RA_ADAPTER
130
131 #ifdef TCP_ADAPTER
132         case CA_ADAPTER_TCP:
133
134            if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_TCP))
135            {
136                goto exit;
137            }
138            res = u_arraylist_add(g_selectedNetworkList, &NETWORK_TCP);
139            CASelectedNetwork |= CA_ADAPTER_TCP;
140            break;
141 #endif // TCP_ADAPTER
142
143
144         case CA_ADAPTER_NFC:
145  #ifndef NFC_ADAPTER
146             return CA_NOT_SUPPORTED;
147
148 #else
149            if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_NFC))
150            {
151                goto exit;
152            }
153            res = u_arraylist_add(g_selectedNetworkList, &NETWORK_NFC);
154            CASelectedNetwork |= CA_ADAPTER_NFC;
155
156            break;
157 #endif // CA_ADAPTER_NFC
158
159         default:
160             break;
161     }
162
163     if (!res)
164     {
165         OIC_LOG_V(ERROR, TAG, "Add arraylist failed[Err code: %d]", res);
166         return CA_STATUS_FAILED;
167     }
168     // start selected interface adapter
169     CAResult_t result = CAStartAdapter(transportType);
170     return result;
171
172 exit:
173     OIC_LOG(DEBUG, TAG, "This adapter is already enabled");
174     return CA_STATUS_OK;
175 }
176
177 CAResult_t CARemoveNetworkType(CATransportAdapter_t transportType)
178 {
179     if (NULL == g_selectedNetworkList)
180     {
181         OIC_LOG(ERROR, TAG, "SelectedNetwork list is NULL");
182
183         return CA_STATUS_FAILED;
184     }
185
186     uint32_t selectedNetworkLength = u_arraylist_length(g_selectedNetworkList);
187     for (uint32_t index = 0; index < selectedNetworkLength; index++)
188     {
189         void* ptrType = u_arraylist_get(g_selectedNetworkList, index);
190         if (NULL == ptrType)
191         {
192             continue;
193         }
194
195         CATransportAdapter_t connType = *(CATransportAdapter_t *)ptrType;
196
197         if (transportType == connType)
198         {
199             switch (transportType)
200             {
201                 case CA_ADAPTER_IP:
202 #ifndef IP_ADAPTER
203                     OIC_LOG(DEBUG, TAG, "Remove network type(IP) - Not Supported");
204                     return CA_NOT_SUPPORTED;
205 #else
206
207                     OIC_LOG(DEBUG, TAG, "Remove network type(IP)");
208                     u_arraylist_remove(g_selectedNetworkList, index);
209                     CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_IP);
210
211                     break;
212 #endif //IP_ADAPTER
213
214                 case CA_ADAPTER_RFCOMM_BTEDR:
215 #ifndef EDR_ADAPTER
216                     OIC_LOG(DEBUG, TAG, "Remove network type(EDR) - Not Supported");
217                     return CA_NOT_SUPPORTED;
218 #else
219                     OIC_LOG(DEBUG, TAG, "Remove network type(EDR)");
220                     u_arraylist_remove(g_selectedNetworkList, index);
221                     CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_RFCOMM_BTEDR);
222
223                     break;
224 #endif // EDR_ADAPTER
225
226                 case CA_ADAPTER_GATT_BTLE:
227 #ifndef LE_ADAPTER
228                     OIC_LOG(DEBUG, TAG, "Remove network type(LE) - Not Supported");
229                     return CA_NOT_SUPPORTED;
230 #else
231                     OIC_LOG(DEBUG, TAG, "Remove network type(LE)");
232                     u_arraylist_remove(g_selectedNetworkList, index);
233                     CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_GATT_BTLE);
234                     break;
235 #endif // LE_ADAPTER
236
237 #ifdef RA_ADAPTER
238                 case CA_ADAPTER_REMOTE_ACCESS:
239                     OIC_LOG(DEBUG, TAG, "Remove network type(RA)");
240                     u_arraylist_remove(g_selectedNetworkList, index);
241                     CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_REMOTE_ACCESS);
242                     break;
243 #endif // RA_ADAPTER
244
245 #ifdef TCP_ADAPTER
246                 case CA_ADAPTER_TCP:
247                     OIC_LOG(DEBUG, TAG, "Remove network type(TCP)");
248                     u_arraylist_remove(g_selectedNetworkList, index);
249                     CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_TCP);
250                     break;
251 #endif // TCP_ADAPTER
252
253 #ifndef NFC_ADAPTER
254                 case CA_ADAPTER_NFC:
255                     OIC_LOG(DEBUG, TAG, "Add network type(NFC) - Not Supported");
256                     return CA_NOT_SUPPORTED;
257 #else
258                    OIC_LOG(DEBUG, TAG, "Add network type(NFC)");
259                    u_arraylist_remove(g_selectedNetworkList, index);
260                    CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_NFC);
261                    break;
262 #endif // CA_ADAPTER_NFC
263                 default:
264                     break;
265             }
266
267             // stop selected interface adapter
268             CAStopAdapter(connType);
269             return CA_STATUS_OK;
270         }
271     }
272
273     return CA_STATUS_FAILED;
274 }
275
276 u_arraylist_t *CAGetSelectedNetworkList()
277 {
278     return g_selectedNetworkList;
279 }
280
281 CATransportAdapter_t CAGetSelectedNetwork()
282 {
283     return CASelectedNetwork;
284 }
285
286 CAResult_t CAGetNetworkInformationInternal(CAEndpoint_t **info, uint32_t *size)
287 {
288     OIC_LOG(DEBUG, TAG, "get network information.");
289
290     if (NULL == info || NULL == size)
291     {
292         OIC_LOG(ERROR, TAG, "Input parameter is invalid value");
293
294         return CA_STATUS_INVALID_PARAM;
295     }
296
297     return CAGetNetworkInfo(info, size);
298 }
299
300 CAResult_t CATerminateNetworkType()
301 {
302     OIC_LOG(DEBUG, TAG, "CATerminateNetworkType()");
303     if (NULL != g_selectedNetworkList)
304     {
305         u_arraylist_free(&g_selectedNetworkList);
306     }
307     return CA_STATUS_OK;
308 }