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 OIC_LOG(DEBUG, TAG, "Add network type(IP) - Not Supported");
77 return CA_NOT_SUPPORTED;
80 OIC_LOG(DEBUG, TAG, "Add network type(IP)");
81 if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_IP))
85 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_IP);
86 CASelectedNetwork |= CA_ADAPTER_IP;
91 case CA_ADAPTER_RFCOMM_BTEDR:
93 OIC_LOG(DEBUG, TAG, "Add network type(EDR) - Not Supported");
94 return CA_NOT_SUPPORTED;
97 OIC_LOG(DEBUG, TAG, "Add network type(EDR)");
98 if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_RFCOMM))
102 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_RFCOMM);
103 CASelectedNetwork |= CA_ADAPTER_RFCOMM_BTEDR;
106 #endif // EDR_ADAPTER
108 case CA_ADAPTER_GATT_BTLE:
110 OIC_LOG(DEBUG, TAG, "Add network type(LE) - Not Supported");
111 return CA_NOT_SUPPORTED;
114 OIC_LOG(DEBUG, TAG, "Add network type(LE)");
115 if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_GATT))
119 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_GATT);
120 CASelectedNetwork |= CA_ADAPTER_GATT_BTLE;
126 case CA_ADAPTER_REMOTE_ACCESS:
128 OIC_LOG(DEBUG, TAG, "Add network type(RA)");
129 if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_RA))
133 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_RA);
134 CASelectedNetwork |= CA_ADAPTER_REMOTE_ACCESS;
141 OIC_LOG(DEBUG, TAG, "Add network type(TCP)");
142 if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_TCP))
146 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_TCP);
147 CASelectedNetwork |= CA_ADAPTER_TCP;
149 #endif // TCP_ADAPTER
154 OIC_LOG(DEBUG, TAG, "Add network type(NFC) - Not Supported");
155 return CA_NOT_SUPPORTED;
158 OIC_LOG(DEBUG, TAG, "Add network type(NFC)");
159 if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_NFC))
163 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_NFC);
164 CASelectedNetwork |= CA_ADAPTER_NFC;
167 #endif // CA_ADAPTER_NFC
175 OIC_LOG_V(ERROR, TAG, "Add arraylist failed[Err code: %d]", res);
176 return CA_STATUS_FAILED;
178 // start selected interface adapter
179 CAResult_t result = CAStartAdapter(transportType);
183 OIC_LOG(DEBUG, TAG, "This adapter is already enabled");
187 CAResult_t CARemoveNetworkType(CATransportAdapter_t transportType)
189 if (NULL == g_selectedNetworkList)
191 OIC_LOG(ERROR, TAG, "SelectedNetwork list is NULL");
193 return CA_STATUS_FAILED;
196 uint32_t selectedNetworkLength = u_arraylist_length(g_selectedNetworkList);
197 for (uint32_t index = 0; index < selectedNetworkLength; index++)
199 void* ptrType = u_arraylist_get(g_selectedNetworkList, index);
205 CATransportAdapter_t connType = *(CATransportAdapter_t *)ptrType;
207 if (transportType == connType)
209 switch (transportType)
213 OIC_LOG(DEBUG, TAG, "Remove network type(IP) - Not Supported");
214 return CA_NOT_SUPPORTED;
217 OIC_LOG(DEBUG, TAG, "Remove network type(IP)");
218 u_arraylist_remove(g_selectedNetworkList, index);
219 CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_IP);
224 case CA_ADAPTER_RFCOMM_BTEDR:
226 OIC_LOG(DEBUG, TAG, "Remove network type(EDR) - Not Supported");
227 return CA_NOT_SUPPORTED;
229 OIC_LOG(DEBUG, TAG, "Remove network type(EDR)");
230 u_arraylist_remove(g_selectedNetworkList, index);
231 CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_RFCOMM_BTEDR);
234 #endif // EDR_ADAPTER
236 case CA_ADAPTER_GATT_BTLE:
238 OIC_LOG(DEBUG, TAG, "Remove network type(LE) - Not Supported");
239 return CA_NOT_SUPPORTED;
241 OIC_LOG(DEBUG, TAG, "Remove network type(LE)");
242 u_arraylist_remove(g_selectedNetworkList, index);
243 CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_GATT_BTLE);
248 case CA_ADAPTER_REMOTE_ACCESS:
249 OIC_LOG(DEBUG, TAG, "Remove network type(RA)");
250 u_arraylist_remove(g_selectedNetworkList, index);
251 CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_REMOTE_ACCESS);
257 OIC_LOG(DEBUG, TAG, "Remove network type(TCP)");
258 u_arraylist_remove(g_selectedNetworkList, index);
259 CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_TCP);
261 #endif // TCP_ADAPTER
265 OIC_LOG(DEBUG, TAG, "Add network type(NFC) - Not Supported");
266 return CA_NOT_SUPPORTED;
268 OIC_LOG(DEBUG, TAG, "Add network type(NFC)");
269 u_arraylist_remove(g_selectedNetworkList, index);
270 CASelectedNetwork = CASelectedNetwork & (~CA_ADAPTER_NFC);
272 #endif // CA_ADAPTER_NFC
277 // stop selected interface adapter
278 CAStopAdapter(connType);
283 return CA_STATUS_FAILED;
286 u_arraylist_t *CAGetSelectedNetworkList()
288 return g_selectedNetworkList;
291 CATransportAdapter_t CAGetSelectedNetwork()
293 return CASelectedNetwork;
296 CAResult_t CAGetNetworkInformationInternal(CAEndpoint_t **info, uint32_t *size)
298 OIC_LOG(DEBUG, TAG, "get network information.");
300 if (NULL == info || NULL == size)
302 OIC_LOG(ERROR, TAG, "Input parameter is invalid value");
304 return CA_STATUS_INVALID_PARAM;
307 return CAGetNetworkInfo(info, size);
310 CAResult_t CATerminateNetworkType()
312 OIC_LOG(DEBUG, TAG, "CATerminateNetworkType()");
313 if (NULL != g_selectedNetworkList)
315 u_arraylist_free(&g_selectedNetworkList);