Merge branch 'connectivity-abstraction' to master
[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 *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
37 CAResult_t CAAddNetworkType(CAConnectivityType_t connectivityType)
38 {
39     if (g_selectedNetworkList == NULL)
40     {
41         OIC_LOG(DEBUG, TAG, "Create network list");
42
43         g_selectedNetworkList = u_arraylist_create();
44
45         if( g_selectedNetworkList == NULL )
46         {
47             return CA_MEMORY_ALLOC_FAILED;
48         }
49     }
50
51     CAResult_t res = CA_STATUS_OK;
52     switch (connectivityType)
53     {
54         case CA_ETHERNET:
55         {
56
57 #ifndef ETHERNET_ADAPTER
58             OIC_LOG(DEBUG, TAG, "Add network type(ETHERNET) - Not Supported");
59             return CA_NOT_SUPPORTED;
60 #endif /* ETHERNET_ADAPTER */
61
62             OIC_LOG(DEBUG, TAG, "Add network type(ETHERNET)");
63             if (!u_arraylist_contains(g_selectedNetworkList, &NETWORK_ETHERNET))
64             {
65                 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_ETHERNET);
66             }
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                 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_WIFI);
82             }
83         }
84         break;
85
86         case CA_EDR:
87         {
88
89 #ifndef EDR_ADAPTER
90             OIC_LOG(DEBUG, TAG, "Add network type(EDR) - Not Supported");
91             return CA_NOT_SUPPORTED;
92 #endif /* EDR_ADAPTER */
93
94             OIC_LOG(DEBUG, TAG, "Add network type(EDR)");
95             if (!u_arraylist_contains(g_selectedNetworkList, &NETWORK_EDR))
96             {
97                 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_EDR);
98             }
99         }
100         break;
101
102         case CA_LE:
103         {
104
105 #ifndef LE_ADAPTER
106             OIC_LOG(DEBUG, TAG, "Add network type(LE) - Not Supported");
107             return CA_NOT_SUPPORTED;
108 #endif /* LE_ADAPTER */
109
110             OIC_LOG(DEBUG, TAG, "Add network type(LE)");
111             if (!u_arraylist_contains(g_selectedNetworkList, &NETWORK_LE))
112             {
113                 res = u_arraylist_add(g_selectedNetworkList, &NETWORK_LE);
114             }
115         }
116         break;
117
118     }
119
120     if (CA_STATUS_OK != res)
121     {
122         OIC_LOG_V(ERROR, TAG, "Add arraylist failed[Err code: %d]", res);
123         return res;
124     }
125     // start selected interface adapter
126     res = CAStartAdapter((CAConnectivityType_t)connectivityType);
127
128     return res;
129 }
130
131 CAResult_t CARemoveNetworkType(CAConnectivityType_t connectivityType)
132 {
133     uint8_t index;
134     CAConnectivityType_t connType;
135
136     if (g_selectedNetworkList == NULL)
137     {
138         OIC_LOG(DEBUG, TAG, "SelectedNetwork list is NULL");
139
140         return CA_STATUS_FAILED;
141     }
142
143     for (index = 0; index < u_arraylist_length(g_selectedNetworkList); index++)
144     {
145         void* ptrType = u_arraylist_get(g_selectedNetworkList, index);
146
147         if(ptrType == NULL)
148         {
149             continue;
150         }
151
152         connType = *(CAConnectivityType_t *) ptrType;
153
154         if (connectivityType == connType)
155         {
156             switch (connectivityType)
157             {
158                 case CA_ETHERNET:
159
160 #ifndef ETHERNET_ADAPTER
161                     OIC_LOG(DEBUG, TAG, "Remove network type(ETHERNET) - Not Supported");
162                     return CA_NOT_SUPPORTED;
163 #else
164
165                     OIC_LOG(DEBUG, TAG, "Remove network type(ETHERNET)");
166                     u_arraylist_remove(g_selectedNetworkList, index);
167 #endif /* ETHERNET_ADAPTER */
168                     break;
169
170                 case CA_WIFI:
171
172 #ifndef WIFI_ADAPTER
173                     OIC_LOG(DEBUG, TAG, "Remove network type(WIFI) - Not Supported");
174                     return CA_NOT_SUPPORTED;
175 #else
176                     OIC_LOG(DEBUG, TAG, "Remove network type(WIFI)");
177                     u_arraylist_remove(g_selectedNetworkList, index);
178 #endif /* WIFI_ADAPTER */
179
180                     break;
181
182                 case CA_EDR:
183
184 #ifndef EDR_ADAPTER
185                     OIC_LOG(DEBUG, TAG, "Remove network type(EDR) - Not Supported");
186                     return CA_NOT_SUPPORTED;
187 #else
188                     OIC_LOG(DEBUG, TAG, "Remove network type(EDR)");
189                     u_arraylist_remove(g_selectedNetworkList, index);
190 #endif /* EDR_ADAPTER */
191
192                     break;
193
194                 case CA_LE:
195
196 #ifndef LE_ADAPTER
197                     OIC_LOG(DEBUG, TAG, "Remove network type(LE) - Not Supported");
198                     return CA_NOT_SUPPORTED;
199 #else
200                     OIC_LOG(DEBUG, TAG, "Remove network type(LE)");
201                     u_arraylist_remove(g_selectedNetworkList, index);
202 #endif /* LE_ADAPTER */
203
204                     break;
205             }
206
207             // stop selected interface adapter
208             CAStopAdapter(connType);
209             return CA_STATUS_OK;
210         }
211     }
212
213     return CA_STATUS_FAILED;
214 }
215
216 u_arraylist_t *CAGetSelectedNetworkList()
217 {
218     OIC_LOG(DEBUG, TAG, "CAGetSelectedNetworkList IN");
219     if (g_selectedNetworkList == NULL)
220     {
221         OIC_LOG(DEBUG, TAG, "SelectedNetwork list is NULL");
222         return NULL;
223     }
224     OIC_LOG(DEBUG, TAG, "CAGetSelectedNetworkList OUT");
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 (info == NULL || size == NULL)
233     {
234         OIC_LOG(DEBUG, 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
246     if(g_selectedNetworkList != NULL)
247     {
248         u_arraylist_free(&g_selectedNetworkList);
249     }
250
251     return CA_STATUS_OK;
252 }
253