6d24968110c3e19d09123ca59cf939e66fc481f7
[iotivity.git] / resource / csdk / connectivity / inc / cainterfacecontroller.h
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 /**
22  * @file
23  *
24  * This file contains common utility function for CA transport adaptors.
25  */
26
27 #ifndef CA_INTERFACE_CONTROLLER_H_
28 #define CA_INTERFACE_CONTROLLER_H_
29
30 #include "caadapterinterface.h"
31 #include "cainterface.h"
32 #include "cautilinterface.h"
33
34 #ifndef SINGLE_THREAD
35 #include "cathreadpool.h" /* for thread pool */
36 #endif
37
38 #ifdef __cplusplus
39 extern "C"
40 {
41 #endif
42
43 #ifdef SINGLE_THREAD
44 /**
45  * Initializes different adapters based on the compilation flags.
46  *
47  * @return  ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
48  */
49 CAResult_t CAInitializeAdapters();
50 #else
51 /**
52  * Initializes different adapters based on the compilation flags.
53  * @param[in]   handle           thread pool handle created by message handler
54  *                               for different adapters.
55  * @param[in]   transportType    transport type to initialize.
56  *
57  * @return  ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
58  */
59
60 CAResult_t CAInitializeAdapters(ca_thread_pool_t handle, CATransportAdapter_t transportType);
61 #endif
62
63 /**
64  * Set the received packets callback for message handler.
65  * @param[in]   callback         message handler callback to receive packets
66  *                               from different adapters.
67  */
68 void CASetPacketReceivedCallback(CANetworkPacketReceivedCallback callback);
69
70 /**
71  * Set the error handler callback for message handler.
72  * @param[in]   errorCallback    error handler callback from adapters
73  */
74 void CASetErrorHandleCallback(CAErrorHandleCallback errorCallback);
75
76 /**
77  * Set the network status changed callback for CAUtil.
78  * @param[in]   adapterCB       CAUtil callback to receive adapter status changes.
79  * @param[in]   connCB          CAUtil callback to receive connection status changes.
80  *
81  * @return  ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
82  */
83 CAResult_t CASetNetworkMonitorCallbacks(CAAdapterStateChangedCB adapterCB,
84                                         CAConnectionStateChangedCB connCB);
85
86 /**
87  * Unset the network status changed callback for CAUtil.
88  * @param[in]   adapterCB       CAUtil callback to receive adapter status changes.
89  * @param[in]   connCB          CAUtil callback to receive connection status changes.
90  *
91  * @return  ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
92  */
93 CAResult_t CAUnsetNetworkMonitorCallbacks(CAAdapterStateChangedCB adapterCB,
94                                           CAConnectionStateChangedCB connCB);
95
96 /**
97  * Starting different connectivity adapters based on the network selection.
98  * @param[in]   transportType    interested network for starting.
99  * @return  ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
100  */
101 CAResult_t CAStartAdapter(CATransportAdapter_t transportType);
102
103 /**
104  * Stopping different connectivity adapters based on the network un-selection.
105  * @param[in]   transportType    network type that want to stop.
106  */
107 void CAStopAdapter(CATransportAdapter_t transportType);
108
109 #ifndef SINGLE_THREAD
110 /**
111  * Stop connectivity adapters all.
112  */
113 void CAStopAdapters();
114 #endif //SINGLE_THREAD
115
116 #ifdef RA_ADAPTER
117 /**
118  * Set Remote Access information for XMPP Client.
119  * @param[in]   caraInfo         remote access info..
120  *
121  * @return  CA_STATUS_OK
122  */
123 CAResult_t CASetAdapterRAInfo(const CARAInfo_t *caraInfo);
124 #endif
125
126 /**
127  * Get network information such as ipaddress and mac information.
128  * @param[out]   info           connectivity information
129  *                                  such as ipaddress and mac information.
130  * @param[out]   size           number of connectivity information structures.
131  * @return  ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
132  */
133 CAResult_t CAGetNetworkInfo(CAEndpoint_t **info, size_t *size);
134
135 /**
136  * Sends unicast data to the remote endpoint.
137  * @param[in]   endpoint       endpoint information where the data has to be sent.
138  * @param[in]   data           data that needs to be sent.
139  * @param[in]   length         length of the data that needs to be sent.
140  * @param[in]   dataType       Data type which is REQUEST or RESPONSE.
141  * @return  ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
142  */
143 CAResult_t CASendUnicastData(const CAEndpoint_t *endpoint, const void *data,
144                              uint32_t length, CADataType_t dataType);
145
146 /**
147  * Sends multicast data to all endpoints in the network.
148  * @param[in]   endpoint       endpoint information where the data has to be sent.
149  * @param[in]   data           data that needs to be sent.
150  * @param[in]   length         length of the data that needs to be sent.
151  * @param[in]   dataType       Data type which is REQUEST or RESPONSE.
152  * @return  ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
153  */
154
155 CAResult_t CASendMulticastData(const CAEndpoint_t *endpoint, const void *data,
156                                uint32_t length, CADataType_t dataType);
157
158 /**
159  * Start listening servers to receive search requests from clients.
160  * @return  ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
161  */
162 CAResult_t CAStartListeningServerAdapters();
163
164 /**
165  * Stop listening servers to receive search requests from clients.
166  * @return  ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
167  */
168 CAResult_t CAStopListeningServerAdapters();
169
170 /**
171  * Start discovery servers to receive advertisements from server.
172  * @return  ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
173  */
174 CAResult_t CAStartDiscoveryServerAdapters();
175
176 /**
177  * Check whether the endpoint is my own or not.
178  * @return  true or false.
179  */
180 bool CAIsLocalEndpoint(const CAEndpoint_t *ep);
181
182 /**
183  * Terminates the adapters which are initialized during the initialization.
184  */
185 void CATerminateAdapters();
186
187 #ifdef SINGLE_THREAD
188 /**
189  * Checks for available data and reads it.
190  * @return   ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
191  */
192 CAResult_t CAReadData();
193 #endif
194
195 #ifdef __cplusplus
196 } /* extern "C" */
197 #endif
198
199 #endif /* CA_INTERFACE_CONTROLLER_H_ */
200