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