[CA] [All] Klockwork , Prevent , Memory leaks fixed
[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
46     switch (ConnectivityType)
47     {
48         case CA_ETHERNET:
49
50 #ifndef ETHERNET_ADAPTER
51             OIC_LOG_V(DEBUG, TAG, "Add network type(ETHERNET) - Not Supported");
52             return CA_NOT_SUPPORTED;
53 #endif /* ETHERNET_ADAPTER */
54
55             OIC_LOG_V(DEBUG, TAG, "Add network type(ETHERNET)");
56             if (!u_arraylist_contains(gSelectedNetworkList, &NETWORK_ETHERNET))
57             {
58                 u_arraylist_add(gSelectedNetworkList, &NETWORK_ETHERNET);
59             }
60             break;
61
62         case CA_WIFI:
63
64 #ifndef WIFI_ADAPTER
65             OIC_LOG_V(DEBUG, TAG, "Add network type(WIFI) - Not Supported");
66             return CA_NOT_SUPPORTED;
67 #endif /* WIFI_ADAPTER */
68
69             OIC_LOG_V(DEBUG, TAG, "Add network type(WIFI)");
70             if (!u_arraylist_contains(gSelectedNetworkList, &NETWORK_WIFI))
71             {
72                 u_arraylist_add(gSelectedNetworkList, &NETWORK_WIFI);
73             }
74             break;
75
76         case CA_EDR:
77
78 #ifndef EDR_ADAPTER
79             OIC_LOG_V(DEBUG, TAG, "Add network type(EDR) - Not Supported");
80             return CA_NOT_SUPPORTED;
81 #endif /* EDR_ADAPTER */
82
83             OIC_LOG_V(DEBUG, TAG, "Add network type(EDR)");
84             if (!u_arraylist_contains(gSelectedNetworkList, &NETWORK_EDR))
85             {
86                 u_arraylist_add(gSelectedNetworkList, &NETWORK_EDR);
87             }
88             break;
89
90         case CA_LE:
91
92 #ifndef LE_ADAPTER
93             OIC_LOG_V(DEBUG, TAG, "Add network type(LE) - Not Supported");
94             return CA_NOT_SUPPORTED;
95 #endif /* LE_ADAPTER */
96
97             OIC_LOG_V(DEBUG, TAG, "Add network type(LE)");
98             if (!u_arraylist_contains(gSelectedNetworkList, &NETWORK_LE))
99             {
100                 u_arraylist_add(gSelectedNetworkList, &NETWORK_LE);
101             }
102             break;
103
104     }
105
106     // start selected interface adapter
107     CAStartAdapter(ConnectivityType);
108
109     return CA_STATUS_OK;
110 }
111
112 CAResult_t CARemoveNetworkType(uint32_t ConnectivityType)
113 {
114     uint8_t index;
115     uint32_t type;
116
117     if (gSelectedNetworkList == NULL)
118     {
119         OIC_LOG_V(DEBUG, TAG, "Selected network not found");
120
121         return CA_STATUS_FAILED;
122     }
123
124     for (index = 0; index < u_arraylist_length(gSelectedNetworkList); index++)
125     {
126         void* cType = u_arraylist_get(gSelectedNetworkList, index);
127
128         if(cType == NULL)
129         {
130             continue;
131         }
132
133         type = *(uint32_t *) cType;
134
135         if (ConnectivityType == type)
136         {
137             switch (ConnectivityType)
138             {
139                 case CA_ETHERNET:
140
141 #ifndef ETHERNET_ADAPTER
142                     OIC_LOG_V(DEBUG, TAG, "Remove network type(ETHERNET) - Not Supported");
143                     return CA_NOT_SUPPORTED;
144 #else
145
146                     OIC_LOG_V(DEBUG, TAG, "Remove network type(ETHERNET)");
147                     u_arraylist_remove(gSelectedNetworkList, index);
148 #endif /* ETHERNET_ADAPTER */
149                     break;
150
151                 case CA_WIFI:
152
153 #ifndef WIFI_ADAPTER
154                     OIC_LOG_V(DEBUG, TAG, "Remove network type(WIFI) - Not Supported");
155                     return CA_NOT_SUPPORTED;
156 #else
157                     OIC_LOG_V(DEBUG, TAG, "Remove network type(WIFI)");
158                     u_arraylist_remove(gSelectedNetworkList, index);
159 #endif /* WIFI_ADAPTER */
160
161                     break;
162
163                 case CA_EDR:
164
165 #ifndef EDR_ADAPTER
166                     OIC_LOG_V(DEBUG, TAG, "Remove network type(EDR) - Not Supported");
167                     return CA_NOT_SUPPORTED;
168 #else
169                     OIC_LOG_V(DEBUG, TAG, "Remove network type(EDR)");
170                     u_arraylist_remove(gSelectedNetworkList, index);
171 #endif /* EDR_ADAPTER */
172
173                     break;
174
175                 case CA_LE:
176
177 #ifdef LE_ADAPTER
178                     OIC_LOG_V(DEBUG, TAG, "Remove network type(LE) - Not Supported");
179                     return CA_NOT_SUPPORTED;
180 #else
181                     OIC_LOG_V(DEBUG, TAG, "Remove network type(LE)");
182                     u_arraylist_remove(gSelectedNetworkList, index);
183 #endif /* LE_ADAPTER */
184
185                     break;
186             }
187
188             // stop selected interface adapter
189             CAStopAdapter(ConnectivityType);
190         }
191     }
192
193     return CA_STATUS_OK;
194 }
195
196 u_arraylist_t *CAGetSelectedNetworkList()
197 {
198     OIC_LOG(DEBUG, TAG, "CAGetSelectedNetworkList IN");
199     if (gSelectedNetworkList == NULL)
200     {
201         OIC_LOG_V(DEBUG, TAG, "Selected network not found");
202
203         return NULL;
204     }
205     OIC_LOG(DEBUG, TAG, "CAGetSelectedNetworkList OUT");
206     return gSelectedNetworkList;
207 }
208
209 CAResult_t CAGetNetworkInformationInternal(CALocalConnectivity_t **info, uint32_t *size)
210 {
211     OIC_LOG_V(DEBUG, TAG, "get network information.");
212
213     return CAGetNetworkInfo(info, size);
214 }
215
216 CAResult_t CATerminateNetworkType()
217 {
218     OIC_LOG_V(DEBUG, TAG, "CATerminateNetworkType()");
219
220     if(gSelectedNetworkList != NULL) {
221         u_arraylist_free(gSelectedNetworkList);
222     }
223
224     return CA_STATUS_OK;
225 }
226