1 /******************************************************************
3 * Copyright 2014 Samsung Electronics All Rights Reserved.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 ******************************************************************/
23 #include "canetworkconfigurator.h"
24 #include "cainterfacecontroller.h"
25 #include "cainterface.h"
26 #include "uarraylist.h"
29 #define TAG "OIC_CA_NW_CONFIG"
31 static u_arraylist_t *g_selectedNetworkList = NULL;
32 static CATransportAdapter_t CASelectedNetwork = CA_DEFAULT_ADAPTER;
35 static uint32_t NETWORK_RFCOMM = CA_ADAPTER_RFCOMM_BTEDR;
39 static uint32_t NETWORK_GATT = CA_ADAPTER_GATT_BTLE;
43 static uint32_t NETWORK_IP = CA_ADAPTER_IP;
47 static uint32_t NETWORK_NFC = CA_ADAPTER_NFC;
51 static uint32_t NETWORK_RA = CA_ADAPTER_REMOTE_ACCESS;
55 static uint32_t NETWORK_TCP = CA_ADAPTER_TCP;
58 CAResult_t CAAddNetworkType(CATransportAdapter_t transportType)
60 if (NULL == g_selectedNetworkList)
62 OIC_LOG(DEBUG, TAG, "Create network list");
64 g_selectedNetworkList = u_arraylist_create();
66 if (NULL == g_selectedNetworkList)
68 return CA_MEMORY_ALLOC_FAILED;
72 switch (transportType)
76 return CA_NOT_SUPPORTED;
79 if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_IP))
83 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_IP);
84 CASelectedNetwork |= CA_ADAPTER_IP;
89 case CA_ADAPTER_RFCOMM_BTEDR:
91 return CA_NOT_SUPPORTED;
94 if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_RFCOMM))
98 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_RFCOMM);
99 CASelectedNetwork |= CA_ADAPTER_RFCOMM_BTEDR;
102 #endif // EDR_ADAPTER
104 case CA_ADAPTER_GATT_BTLE:
106 return CA_NOT_SUPPORTED;
109 if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_GATT))
113 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_GATT);
114 CASelectedNetwork |= CA_ADAPTER_GATT_BTLE;
120 case CA_ADAPTER_REMOTE_ACCESS:
122 if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_RA))
126 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_RA);
127 CASelectedNetwork |= CA_ADAPTER_REMOTE_ACCESS;
134 if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_TCP))
138 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_TCP);
139 CASelectedNetwork |= CA_ADAPTER_TCP;
141 #endif // TCP_ADAPTER
146 return CA_NOT_SUPPORTED;
149 if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_NFC))
153 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_NFC);
154 CASelectedNetwork |= CA_ADAPTER_NFC;
157 #endif // CA_ADAPTER_NFC
165 OIC_LOG_V(ERROR, TAG, "Add arraylist failed[Err code: %d]", res);
166 return CA_STATUS_FAILED;
168 // start selected interface adapter
169 CAResult_t result = CAStartAdapter(transportType);
173 OIC_LOG(DEBUG, TAG, "This adapter is already enabled");
177 CAResult_t CARemoveNetworkType(CATransportAdapter_t transportType)
179 if (NULL == g_selectedNetworkList)
181 OIC_LOG(ERROR, TAG, "SelectedNetwork list is NULL");
183 return CA_STATUS_FAILED;
186 uint32_t selectedNetworkLength = u_arraylist_length(g_selectedNetworkList);
187 for (uint32_t index = 0; index < selectedNetworkLength; index++)
189 void* ptrType = u_arraylist_get(g_selectedNetworkList, index);
195 CATransportAdapter_t connType = *(CATransportAdapter_t *)ptrType;
197 if (transportType == connType)
199 switch (transportType)
203 OIC_LOG(DEBUG, TAG, "Remove network type(IP) - Not Supported");
204 return CA_NOT_SUPPORTED;
207 OIC_LOG(DEBUG, TAG, "Remove network type(IP)");
208 u_arraylist_remove(g_selectedNetworkList, index);
209 CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_IP);
214 case CA_ADAPTER_RFCOMM_BTEDR:
216 OIC_LOG(DEBUG, TAG, "Remove network type(EDR) - Not Supported");
217 return CA_NOT_SUPPORTED;
219 OIC_LOG(DEBUG, TAG, "Remove network type(EDR)");
220 u_arraylist_remove(g_selectedNetworkList, index);
221 CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_RFCOMM_BTEDR);
224 #endif // EDR_ADAPTER
226 case CA_ADAPTER_GATT_BTLE:
228 OIC_LOG(DEBUG, TAG, "Remove network type(LE) - Not Supported");
229 return CA_NOT_SUPPORTED;
231 OIC_LOG(DEBUG, TAG, "Remove network type(LE)");
232 u_arraylist_remove(g_selectedNetworkList, index);
233 CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_GATT_BTLE);
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);
247 OIC_LOG(DEBUG, TAG, "Remove network type(TCP)");
248 u_arraylist_remove(g_selectedNetworkList, index);
249 CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_TCP);
251 #endif // TCP_ADAPTER
255 OIC_LOG(DEBUG, TAG, "Add network type(NFC) - Not Supported");
256 return CA_NOT_SUPPORTED;
258 OIC_LOG(DEBUG, TAG, "Add network type(NFC)");
259 u_arraylist_remove(g_selectedNetworkList, index);
260 CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_NFC);
262 #endif // CA_ADAPTER_NFC
267 // stop selected interface adapter
268 CAStopAdapter(connType);
273 return CA_STATUS_FAILED;
276 u_arraylist_t *CAGetSelectedNetworkList()
278 return g_selectedNetworkList;
281 CATransportAdapter_t CAGetSelectedNetwork()
283 return CASelectedNetwork;
286 CAResult_t CAGetNetworkInformationInternal(CAEndpoint_t **info, uint32_t *size)
288 OIC_LOG(DEBUG, TAG, "get network information.");
290 if (NULL == info || NULL == size)
292 OIC_LOG(ERROR, TAG, "Input parameter is invalid value");
294 return CA_STATUS_INVALID_PARAM;
297 return CAGetNetworkInfo(info, size);
300 CAResult_t CATerminateNetworkType()
302 OIC_LOG(DEBUG, TAG, "CATerminateNetworkType()");
303 if (NULL != g_selectedNetworkList)
305 u_arraylist_free(&g_selectedNetworkList);