Index variable has modified to define inside of for loop
[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_singlethread.h"
25 #include "uarraylist.h"
26 #include "logger.h"
27
28 #define TAG "CANW"
29
30 static u_arraylist_t *g_selectedNetworkList = NULL;
31 static uint32_t NETWORK_ETHERNET = CA_ETHERNET;
32 static uint32_t NETWORK_WIFI = CA_WIFI;
33 static uint32_t NETWORK_EDR = CA_EDR;
34 static uint32_t NETWORK_LE = CA_LE;
35
36 CAResult_t CAAddNetworkType(CAConnectivityType_t connectivityType)
37 {
38     OIC_LOG(DEBUG, TAG, "IN");
39     if (NULL == g_selectedNetworkList)
40     {
41         OIC_LOG(DEBUG, TAG, "Create network list");
42
43         g_selectedNetworkList = u_arraylist_create();
44
45         if (NULL == g_selectedNetworkList)
46         {
47             return CA_MEMORY_ALLOC_FAILED;
48         }
49     }
50     CAResult_t res = CA_STATUS_OK;
51     switch (connectivityType)
52     {
53         case CA_ETHERNET:
54         {
55
56 #ifndef ETHERNET_ADAPTER
57             OIC_LOG(DEBUG, TAG, "Add network type(ETHERNET) - Not Supported");
58             return CA_NOT_SUPPORTED;
59 #endif /* ETHERNET_ADAPTER */
60
61             OIC_LOG(DEBUG, TAG, "Add network type(ETHERNET)");
62             if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_ETHERNET))
63             {
64                 goto exit;
65             }
66             res = u_arraylist_add(g_selectedNetworkList, &NETWORK_ETHERNET);
67         }
68         break;
69
70         case CA_WIFI:
71         {
72
73 #ifndef WIFI_ADAPTER
74             OIC_LOG(DEBUG, TAG, "Add network type(WIFI) - Not Supported");
75             return CA_NOT_SUPPORTED;
76 #endif /* WIFI_ADAPTER */
77
78             OIC_LOG(DEBUG, TAG, "Add network type(WIFI)");
79             if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_WIFI))
80             {
81                 goto exit;
82             }
83             res = u_arraylist_add(g_selectedNetworkList, &NETWORK_WIFI);
84         }
85         break;
86
87         case CA_EDR:
88         {
89
90 #ifndef EDR_ADAPTER
91             OIC_LOG(DEBUG, TAG, "Add network type(EDR) - Not Supported");
92             return CA_NOT_SUPPORTED;
93 #endif /* EDR_ADAPTER */
94
95             OIC_LOG(DEBUG, TAG, "Add network type(EDR)");
96             if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_EDR))
97             {
98                 goto exit;
99             }
100             res = u_arraylist_add(g_selectedNetworkList, &NETWORK_EDR);
101         }
102         break;
103
104         case CA_LE:
105         {
106
107 #ifndef LE_ADAPTER
108             OIC_LOG(DEBUG, TAG, "Add network type(LE) - Not Supported");
109             return CA_NOT_SUPPORTED;
110 #endif /* LE_ADAPTER */
111
112             OIC_LOG(DEBUG, TAG, "Add network type(LE)");
113             if (u_arraylist_contains(g_selectedNetworkList, &NETWORK_LE))
114             {
115                 goto exit;
116             }
117             res = u_arraylist_add(g_selectedNetworkList, &NETWORK_LE);
118         }
119         break;
120
121     }
122
123     if (CA_STATUS_OK != res)
124     {
125         OIC_LOG_V(ERROR, TAG, "Add arraylist failed[Err code: %d]", res);
126         return res;
127     }
128
129     // start selected interface adapter
130     res = CAStartAdapter((CAConnectivityType_t)connectivityType);
131     OIC_LOG(DEBUG, TAG, "OUT");
132     return res;
133
134 exit:
135     OIC_LOG(DEBUG, TAG, "This adapter is already enabled");
136     return CA_STATUS_OK;
137 }
138
139 CAResult_t CARemoveNetworkType(CAConnectivityType_t connectivityType)
140 {
141     OIC_LOG(DEBUG, TAG, "IN");
142
143     if (NULL == g_selectedNetworkList)
144     {
145         OIC_LOG(ERROR, TAG, "SelectedNetwork list is NULL");
146
147         return CA_STATUS_FAILED;
148     }
149
150     uint32_t selectedNetworkLength = u_arraylist_length(g_selectedNetworkList);
151     for (uint32_t index = 0; index < selectedNetworkLength; index++)
152     {
153         void* ptrType = u_arraylist_get(g_selectedNetworkList, index);
154         if (NULL == ptrType)
155         {
156             continue;
157         }
158
159         CAConnectivityType_t connType = *(CAConnectivityType_t *) ptrType;
160
161         if (connectivityType == connType)
162         {
163             switch (connectivityType)
164             {
165                 case CA_ETHERNET:
166
167 #ifndef ETHERNET_ADAPTER
168                     OIC_LOG(DEBUG, TAG, "Remove network type(ETHERNET) - Not Supported");
169                     return CA_NOT_SUPPORTED;
170 #else
171
172                     OIC_LOG(DEBUG, TAG, "Remove network type(ETHERNET)");
173                     u_arraylist_remove(g_selectedNetworkList, index);
174 #endif /* ETHERNET_ADAPTER */
175                     break;
176
177                 case CA_WIFI:
178
179 #ifndef WIFI_ADAPTER
180                     OIC_LOG(DEBUG, TAG, "Remove network type(WIFI) - Not Supported");
181                     return CA_NOT_SUPPORTED;
182 #else
183                     OIC_LOG(DEBUG, TAG, "Remove network type(WIFI)");
184                     u_arraylist_remove(g_selectedNetworkList, index);
185 #endif /* WIFI_ADAPTER */
186
187                     break;
188
189                 case CA_EDR:
190
191 #ifndef EDR_ADAPTER
192                     OIC_LOG(DEBUG, TAG, "Remove network type(EDR) - Not Supported");
193                     return CA_NOT_SUPPORTED;
194 #else
195                     OIC_LOG(DEBUG, TAG, "Remove network type(EDR)");
196                     u_arraylist_remove(g_selectedNetworkList, index);
197 #endif /* EDR_ADAPTER */
198
199                     break;
200
201                 case CA_LE:
202
203 #ifndef LE_ADAPTER
204                     OIC_LOG(DEBUG, TAG, "Remove network type(LE) - Not Supported");
205                     return CA_NOT_SUPPORTED;
206 #else
207                     OIC_LOG(DEBUG, TAG, "Remove network type(LE)");
208                     u_arraylist_remove(g_selectedNetworkList, index);
209 #endif /* LE_ADAPTER */
210
211                     break;
212             }
213
214             // stop selected interface adapter
215             CAStopAdapter(connType);
216             return CA_STATUS_OK;
217         }
218     }
219
220     return CA_STATUS_FAILED;
221 }
222
223 u_arraylist_t *CAGetSelectedNetworkList()
224 {
225     return g_selectedNetworkList;
226 }
227
228 CAResult_t CAGetNetworkInformationInternal(CALocalConnectivity_t **info, uint32_t *size)
229 {
230     OIC_LOG(DEBUG, TAG, "get network information.");
231
232     if (NULL == info || NULL == size)
233     {
234         OIC_LOG(ERROR, TAG, "Input parameter is invalid value");
235
236         return CA_STATUS_INVALID_PARAM;
237     }
238
239     return CAGetNetworkInfo(info, size);
240 }
241
242 CAResult_t CATerminateNetworkType()
243 {
244     OIC_LOG(DEBUG, TAG, "CATerminateNetworkType()");
245     if (NULL != g_selectedNetworkList)
246     {
247         u_arraylist_free(&g_selectedNetworkList);
248     }
249     return CA_STATUS_OK;
250 }