Merge branch 'master' into connectivity-abstraction
[platform/upstream/iotivity.git] / resource / csdk / connectivity / src / canetworkconfigurator_singlethread.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 "cainterfacecontroller_singlethread.h"
22
23 #include <stdlib.h>
24
25 #include "canetworkconfigurator.h"
26 #include "uarraylist.h"
27 #include "logger.h"
28
29 #define TAG "CANW_ST"
30
31 static u_arraylist_t *gSelectedNetworkList = NULL;
32 static uint32_t NETWORK_ETHERNET = CA_ETHERNET;
33 static uint32_t NETWORK_WIFI = CA_WIFI;
34 static uint32_t NETWORK_EDR = CA_EDR;
35 static uint32_t NETWORK_LE = CA_LE;
36
37 CAResult_t CAAddNetworkType(uint32_t ConnectivityType)
38 {
39     OIC_LOG(DEBUG, TAG, "IN");
40     if (gSelectedNetworkList == NULL)
41     {
42         gSelectedNetworkList = u_arraylist_create();
43     }
44
45     switch (ConnectivityType)
46     {
47         case CA_ETHERNET:
48
49 #ifndef ETHERNET_ADAPTER
50             OIC_LOG_V(DEBUG, TAG, "Add network type(ETHERNET) - Not Supported");
51             return CA_NOT_SUPPORTED;
52 #endif /* ETHERNET_ADAPTER */
53
54             OIC_LOG_V(DEBUG, TAG, "Add network type(ETHERNET)");
55             u_arraylist_add(gSelectedNetworkList, &NETWORK_ETHERNET);
56
57             break;
58
59         case CA_WIFI:
60
61 #ifndef WIFI_ADAPTER
62             OIC_LOG_V(DEBUG, TAG, "Add network type(WIFI) - Not Supported");
63             return CA_NOT_SUPPORTED;
64 #endif /* WIFI_ADAPTER */
65
66             OIC_LOG_V(DEBUG, TAG, "Add network type(WIFI)");
67             u_arraylist_add(gSelectedNetworkList, &NETWORK_WIFI);
68
69             break;
70
71         case CA_EDR:
72
73 #ifndef EDR_ADAPTER
74             OIC_LOG_V(DEBUG, TAG, "Add network type(EDR) - Not Supported");
75             return CA_NOT_SUPPORTED;
76 #endif /* EDR_ADAPTER */
77
78             OIC_LOG_V(DEBUG, TAG, "Add network type(EDR)");
79             u_arraylist_add(gSelectedNetworkList, &NETWORK_EDR);
80             break;
81
82         case CA_LE:
83
84 #ifndef LE_ADAPTER
85             OIC_LOG_V(DEBUG, TAG, "Add network type(LE) - Not Supported");
86             return CA_NOT_SUPPORTED;
87 #endif /* LE_ADAPTER */
88
89             OIC_LOG_V(DEBUG, TAG, "Add network type(LE)");
90             u_arraylist_add(gSelectedNetworkList, &NETWORK_LE);
91             break;
92
93     }
94
95     // start selected interface adapter
96     CAStartAdapter(ConnectivityType);
97     OIC_LOG(DEBUG, TAG, "OUT");
98     return CA_STATUS_OK;
99 }
100
101 CAResult_t CARemoveNetworkType(uint32_t ConnectivityType)
102 {
103     OIC_LOG(DEBUG, TAG, "IN");
104     uint8_t index;
105     uint32_t type;
106     if (gSelectedNetworkList == NULL)
107     {
108         OIC_LOG_V(DEBUG, TAG, "Selected network not found");
109
110         return CA_STATUS_FAILED;
111     }
112
113     for (index = 0; index < u_arraylist_length(gSelectedNetworkList); index++)
114     {
115         type = *(uint32_t*) u_arraylist_get(gSelectedNetworkList, index);
116
117         if(ConnectivityType == type)
118         {
119             switch (ConnectivityType)
120             {
121                 case CA_ETHERNET:
122
123 #ifndef ETHERNET_ADAPTER
124                     OIC_LOG_V(DEBUG, TAG, "Remove network type(ETHERNET) - Not Supported");
125                     return CA_NOT_SUPPORTED;
126 #else
127
128                     OIC_LOG_V(DEBUG, TAG, "Remove network type(ETHERNET)");
129                     u_arraylist_remove(gSelectedNetworkList, index);
130 #endif /* ETHERNET_ADAPTER */
131                     break;
132
133                 case CA_WIFI:
134
135 #ifndef WIFI_ADAPTER
136                     OIC_LOG_V(DEBUG, TAG, "Remove network type(WIFI) - Not Supported");
137                     return CA_NOT_SUPPORTED;
138 #else
139                     OIC_LOG_V(DEBUG, TAG, "Remove network type(WIFI)");
140                     u_arraylist_remove(gSelectedNetworkList, index);
141 #endif /* WIFI_ADAPTER */
142
143                     break;
144
145                 case CA_EDR:
146
147 #ifndef EDR_ADAPTER
148                     OIC_LOG_V(DEBUG, TAG, "Remove network type(EDR) - Not Supported");
149                     return CA_NOT_SUPPORTED;
150 #else
151                     OIC_LOG_V(DEBUG, TAG, "Remove network type(EDR)");
152                     u_arraylist_remove(gSelectedNetworkList, index);
153 #endif /* EDR_ADAPTER */
154
155                     break;
156
157                 case CA_LE:
158
159 #ifdef LE_ADAPTER
160                     OIC_LOG_V(DEBUG, TAG, "Remove network type(LE) - Not Supported");
161                     return CA_NOT_SUPPORTED;
162 #else
163                     OIC_LOG_V(DEBUG, TAG, "Remove network type(LE)");
164                     u_arraylist_remove(gSelectedNetworkList, index);
165 #endif /* LE_ADAPTER */
166
167                     break;
168             }
169
170             // stop selected interface adapter
171             CAStopAdapter(ConnectivityType);
172         }
173     }
174
175     return CA_STATUS_OK;
176 }
177
178 u_arraylist_t *CAGetSelectedNetworkList()
179 {
180     //OIC_LOG(DEBUG, TAG, "IN");
181     if (gSelectedNetworkList == NULL)
182     {
183         OIC_LOG_V(DEBUG, TAG, "Selected network not found");
184
185         return NULL;
186     }
187     //OIC_LOG(DEBUG, TAG, "OUT");
188     return gSelectedNetworkList;
189 }
190
191 CAResult_t CAGetNetworkInformationInternal(CALocalConnectivity_t **info, uint32_t *size)
192 {
193     return CAGetNetworkInfo(info, size);
194 }