Implementation of connectivity abstraction feature Release v0.3
[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             u_arraylist_add(gSelectedNetworkList, &NETWORK_ETHERNET);
57
58             break;
59
60         case CA_WIFI:
61
62 #ifndef WIFI_ADAPTER
63             OIC_LOG_V(DEBUG, TAG, "Add network type(WIFI) - Not Supported");
64             return CA_NOT_SUPPORTED;
65 #endif /* WIFI_ADAPTER */
66
67             OIC_LOG_V(DEBUG, TAG, "Add network type(WIFI)");
68             u_arraylist_add(gSelectedNetworkList, &NETWORK_WIFI);
69
70             break;
71
72         case CA_EDR:
73
74 #ifndef EDR_ADAPTER
75             OIC_LOG_V(DEBUG, TAG, "Add network type(EDR) - Not Supported");
76             return CA_NOT_SUPPORTED;
77 #endif /* EDR_ADAPTER */
78
79             OIC_LOG_V(DEBUG, TAG, "Add network type(EDR)");
80             u_arraylist_add(gSelectedNetworkList, &NETWORK_EDR);
81             break;
82
83         case CA_LE:
84
85 #ifndef LE_ADAPTER
86             OIC_LOG_V(DEBUG, TAG, "Add network type(LE) - Not Supported");
87             return CA_NOT_SUPPORTED;
88 #endif /* LE_ADAPTER */
89
90             OIC_LOG_V(DEBUG, TAG, "Add network type(LE)");
91             u_arraylist_add(gSelectedNetworkList, &NETWORK_LE);
92             break;
93
94     }
95
96     // start selected interface adapter
97     CAStartAdapter(ConnectivityType);
98
99     return CA_STATUS_OK;
100 }
101
102 CAResult_t CARemoveNetworkType(uint32_t ConnectivityType)
103 {
104     uint8_t index;
105     uint32_t type;
106
107     if (gSelectedNetworkList == NULL)
108     {
109         OIC_LOG_V(DEBUG, TAG, "Selected network not found");
110
111         return CA_STATUS_FAILED;
112     }
113
114     for (index = 0; index < u_arraylist_length(gSelectedNetworkList); index++)
115     {
116         type = *(uint32_t*) u_arraylist_get(gSelectedNetworkList, index);
117
118         if(ConnectivityType == type)
119         {
120             switch (ConnectivityType)
121             {
122                 case CA_ETHERNET:
123
124 #ifndef ETHERNET_ADAPTER
125                     OIC_LOG_V(DEBUG, TAG, "Remove network type(ETHERNET) - Not Supported");
126                     return CA_NOT_SUPPORTED;
127 #else
128
129                     OIC_LOG_V(DEBUG, TAG, "Remove network type(ETHERNET)");
130                     u_arraylist_remove(gSelectedNetworkList, index);
131 #endif /* ETHERNET_ADAPTER */
132                     break;
133
134                 case CA_WIFI:
135
136 #ifndef WIFI_ADAPTER
137                     OIC_LOG_V(DEBUG, TAG, "Remove network type(WIFI) - Not Supported");
138                     return CA_NOT_SUPPORTED;
139 #else
140                     OIC_LOG_V(DEBUG, TAG, "Remove network type(WIFI)");
141                     u_arraylist_remove(gSelectedNetworkList, index);
142 #endif /* WIFI_ADAPTER */
143
144                     break;
145
146                 case CA_EDR:
147
148 #ifndef EDR_ADAPTER
149                     OIC_LOG_V(DEBUG, TAG, "Remove network type(EDR) - Not Supported");
150                     return CA_NOT_SUPPORTED;
151 #else
152                     OIC_LOG_V(DEBUG, TAG, "Remove network type(EDR)");
153                     u_arraylist_remove(gSelectedNetworkList, index);
154 #endif /* EDR_ADAPTER */
155
156                     break;
157
158                 case CA_LE:
159
160 #ifdef LE_ADAPTER
161                     OIC_LOG_V(DEBUG, TAG, "Remove network type(LE) - Not Supported");
162                     return CA_NOT_SUPPORTED;
163 #else
164                     OIC_LOG_V(DEBUG, TAG, "Remove network type(LE)");
165                     u_arraylist_remove(gSelectedNetworkList, index);
166 #endif /* LE_ADAPTER */
167
168                     break;
169             }
170
171             // stop selected interface adapter
172             CAStopAdapter(ConnectivityType);
173         }
174     }
175
176     return CA_STATUS_OK;
177 }
178
179 u_arraylist_t *CAGetSelectedNetworkList()
180 {
181     OIC_LOG(DEBUG, TAG, "CAGetSelectedNetworkList IN");
182     if (gSelectedNetworkList == NULL)
183     {
184         OIC_LOG_V(DEBUG, TAG, "Selected network not found");
185
186         return NULL;
187     }
188     OIC_LOG(DEBUG, TAG, "CAGetSelectedNetworkList OUT");
189     return gSelectedNetworkList;
190 }
191
192 CAResult_t CAGetNetworkInformationInternal(CALocalConnectivity_t **info, uint32_t *size)
193 {
194     OIC_LOG_V(DEBUG, TAG, "get network information.");
195
196     return CAGetNetworkInfo(info, size);
197 }