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