Imported Upstream version 1.1.0
[platform/upstream/iotivity.git] / resource / csdk / connectivity / inc / caipinterface.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 caipinterface.h
23  * This file provides APIs IP client/server/network monitor modules.
24  */
25
26 #ifndef CA_IP_INTERFACE_H_
27 #define CA_IP_INTERFACE_H_
28
29 #include <stdbool.h>
30
31 #include "cacommon.h"
32 #include "cathreadpool.h"
33 #include "uarraylist.h"
34
35 #ifdef __cplusplus
36 extern "C"
37 {
38 #endif
39
40 /**
41  * Enum for defining different server types.
42  */
43 typedef enum
44 {
45     CA_UNICAST_SERVER = 0,      /**< Unicast Server */
46     CA_MULTICAST_SERVER,        /**< Multicast Server */
47     CA_SECURED_UNICAST_SERVER   /**< Secured Unicast Server */
48 } CAAdapterServerType_t;
49
50 /**
51  * Callback to be notified on reception of any data from remote OIC devices.
52  *
53  * @param[in]  sep         network endpoint description.
54  * @param[in]  data          Data received from remote OIC device.
55  * @param[in]  dataLength    Length of data in bytes.
56  * @pre  Callback must be registered using CAIPSetPacketReceiveCallback().
57  */
58 typedef void (*CAIPPacketReceivedCallback)(const CASecureEndpoint_t *sep,
59                                            const void *data,
60                                            uint32_t dataLength);
61
62 /**
63   * Callback to notify error in the IP adapter.
64   *
65   * @param[in]  endpoint       network endpoint description.
66   * @param[in]  data          Data sent/received.
67   * @param[in]  dataLength    Length of data in bytes.
68   * @param[in]  result        result of request from R.I.
69   * @pre  Callback must be registered using CAIPSetPacketReceiveCallback().
70  */
71 typedef void (*CAIPErrorHandleCallback)(const CAEndpoint_t *endpoint, const void *data,
72                                         uint32_t dataLength, CAResult_t result);
73
74 /**
75  * Callback to be notified when exception occures on multicast/unicast server.
76  * @param  type   Type of server(#CAAdapterServerType_t).
77  * @pre  Callback must be registered using CAIPSetExceptionCallback().
78  */
79 typedef void (*CAIPExceptionCallback)(CAAdapterServerType_t type);
80
81 /**
82  * Start IP server.
83  *
84  * @param   threadPool   Thread pool for managing Unicast/Multicast server threads.
85  * @return ::CA_STATUS_OK or Appropriate error code.
86  * @retval ::CA_STATUS_OK  Successful.
87  * @retval ::CA_STATUS_INVALID_PARAM Invalid input data.
88  * @retval ::CA_STATUS_FAILED Initialization failed.
89  */
90 #ifdef SINGLE_THREAD
91 CAResult_t CAIPStartServer();
92 #else
93 CAResult_t CAIPStartServer(const ca_thread_pool_t threadPool);
94 #endif
95
96 /**
97  * Close IP socket.
98  */
99 void CADeInitializeIPGlobals();
100
101 /**
102  * Stop IP server.
103  */
104 void CAIPStopServer();
105
106 /**
107  * Starts receiving the multicast traffic.
108  *
109  * This will be used in case sleepy device wants to start back receiving the multicast
110  * traffic.
111  */
112 CAResult_t CAIPStartListenServer();
113
114 /**
115  * Stops the multicast traffic.
116  *
117  * This is to be used by the sleeping device to stop receiving multicast traffic.
118  * Once this is set no multicast traffic will be received. Device can still receive
119  * the unicast traffic.
120  */
121 CAResult_t CAIPStopListenServer();
122
123 /**
124  * Set this callback for receiving data packets from peer devices.
125  *
126  * @param[in]  callback    Callback to be notified on reception of unicast/multicast data packets.
127  */
128 void CAIPSetPacketReceiveCallback(CAIPPacketReceivedCallback callback);
129
130 /**
131  * Set this callback for receiving exception notifications.
132  *
133  * @param[in]  callback  Callback to be notified on exception on running servers.
134  */
135 void CAIPSetExceptionCallback(CAIPExceptionCallback callback);
136
137 /**
138  * Set socket description for sending unicast UDP data.
139  * Once the Unicast server is started,
140  * the same socket descriptor is used for sending the Unicast UDP data.
141  *
142  * @param[in]  socketFD   Socket descriptor used for sending UDP data.
143  */
144 void CAIPSetUnicastSocket(int socketFD);
145
146 /**
147  * Set the port number for sending unicast UDP data.
148  * @param[in]  port  Port number used for sending UDP data.
149  */
150 void CAIPSetUnicastPort(uint16_t port);
151
152 /**
153  * API to send unicast UDP data.
154  *
155  * @param[in]  endpoint          complete network address to send to.
156  * @param[in]  data              Data to be send.
157  * @param[in]  dataLength        Length of data in bytes.
158  * @param[in]  isMulticast       Whether data needs to be sent to multicast ip.
159  */
160 void CAIPSendData(CAEndpoint_t *endpoint,
161                   const void *data,
162                   uint32_t dataLength,
163                   bool isMulticast);
164
165 /**
166  * Get IP adapter connection state.
167  *
168  * @return  True if IP adapter is connected, otherwise false.
169  */
170 bool CAIPIsConnected();
171
172 /**
173  * Pull the Received Data.
174  */
175 void CAIPPullData();
176
177 #define CA_COAP        5683
178 #define CA_SECURE_COAP 5684
179 #define INTERFACE_NAME_MAX 16
180
181 typedef struct
182 {
183     char name[INTERFACE_NAME_MAX];
184     uint32_t index;
185     uint32_t flags;
186     uint16_t family;
187     uint32_t ipv4addr;        /**< used for IPv4 only. */
188 } CAInterface_t;
189
190 /**
191  * Get a list of CAInterface_t items.
192  *
193  * @return  List of CAInterface_t items.
194  */
195 u_arraylist_t *CAIPGetInterfaceInformation(int desiredIndex);
196
197 /**
198  * @brief   Find a new network interface.
199  *
200  * @return  Description of interface (or NULL if no change)
201  */
202 CAInterface_t *CAFindInterfaceChange();
203
204 /**
205  * @brief   Let the network monitor update the polling interval.
206  * @param   [in] current polling interval
207  *
208  * @return  desired polling interval
209  */
210 int CAGetPollingInterval(int interval);
211
212 /**
213  * @brief   Tell the IP server an interface has been added.
214  */
215 void CAWakeUpForChange();
216
217 /**
218  * Start network monitor.
219  *
220  * @return ::CA_STATUS_OK or Appropriate error code.
221  */
222 CAResult_t CAIPStartNetworkMonitor();
223
224 /**
225  * Stops network monitor.
226  *
227  * @return ::CA_STATUS_OK or Appropriate error code.
228  */
229 CAResult_t CAIPStopNetworkMonitor();
230
231 /**
232  * @brief  Set callback for error handling.
233  *
234  * @param[in]  ipErrorCallback  callback to notify error to the ipadapter.
235  */
236 void CAIPSetErrorHandleCallback(CAIPErrorHandleCallback ipErrorCallback);
237
238 #ifdef __cplusplus
239 }
240 #endif
241
242 #endif /* CA_IP_INTERFACE_H_ */