Imported Upstream version 1.0.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  * Stop IP server.
98  */
99 void CAIPStopServer();
100
101 /**
102  * Starts receiving the multicast traffic.
103  *
104  * This will be used in case sleepy device wants to start back receiving the multicast
105  * traffic.
106  */
107 CAResult_t CAIPStartListenServer();
108
109 /**
110  * Stops the multicast traffic.
111  *
112  * This is to be used by the sleeping device to stop receiving multicast traffic.
113  * Once this is set no multicast traffic will be received. Device can still receive
114  * the unicast traffic.
115  */
116 CAResult_t CAIPStopListenServer();
117
118 /**
119  * Set this callback for receiving data packets from peer devices.
120  *
121  * @param[in]  callback    Callback to be notified on reception of unicast/multicast data packets.
122  */
123 void CAIPSetPacketReceiveCallback(CAIPPacketReceivedCallback callback);
124
125 /**
126  * Set this callback for receiving exception notifications.
127  *
128  * @param[in]  callback  Callback to be notified on exception on running servers.
129  */
130 void CAIPSetExceptionCallback(CAIPExceptionCallback callback);
131
132 /**
133  * Set socket description for sending unicast UDP data.
134  * Once the Unicast server is started,
135  * the same socket descriptor is used for sending the Unicast UDP data.
136  *
137  * @param[in]  socketFD   Socket descriptor used for sending UDP data.
138  */
139 void CAIPSetUnicastSocket(int socketFD);
140
141 /**
142  * Set the port number for sending unicast UDP data.
143  * @param[in]  port  Port number used for sending UDP data.
144  */
145 void CAIPSetUnicastPort(uint16_t port);
146
147 /**
148  * API to send unicast UDP data.
149  *
150  * @param[in]  endpoint          complete network address to send to.
151  * @param[in]  data              Data to be send.
152  * @param[in]  dataLength        Length of data in bytes.
153  * @param[in]  isMulticast       Whether data needs to be sent to multicast ip.
154  */
155 void CAIPSendData(CAEndpoint_t *endpoint,
156                   const void *data,
157                   uint32_t dataLength,
158                   bool isMulticast);
159
160 /**
161  * Get IP adapter connection state.
162  *
163  * @return  True if IP adapter is connected, otherwise false.
164  */
165 bool CAIPIsConnected();
166
167 /**
168  * Pull the Received Data.
169  */
170 void CAIPPullData();
171
172 #define CA_COAP        5683
173 #define CA_SECURE_COAP 5684
174 #define INTERFACE_NAME_MAX 16
175
176 typedef struct
177 {
178     char name[INTERFACE_NAME_MAX];
179     uint32_t index;
180     uint32_t flags;
181     uint16_t family;
182     uint32_t ipv4addr;        /**< used for IPv4 only. */
183 } CAInterface_t;
184
185 /**
186  * Get a list of CAInterface_t items.
187  *
188  * @return  List of CAInterface_t items.
189  */
190 u_arraylist_t *CAIPGetInterfaceInformation(int desiredIndex);
191
192 /**
193  * @brief   Find a new network interface.
194  *
195  * @return  Description of interface (or NULL if no change)
196  */
197 CAInterface_t *CAFindInterfaceChange();
198
199 /**
200  * @brief   Let the network monitor update the polling interval.
201  * @param   [in] current polling interval
202  *
203  * @return  desired polling interval
204  */
205 int CAGetPollingInterval(int interval);
206
207 /**
208  * @brief   Tell the IP server an interface has been added.
209  */
210 void CAWakeUpForChange();
211
212 /**
213  * Start network monitor.
214  *
215  * @return ::CA_STATUS_OK or Appropriate error code.
216  */
217 CAResult_t CAIPStartNetworkMonitor();
218
219 /**
220  * Stops network monitor.
221  *
222  * @return ::CA_STATUS_OK or Appropriate error code.
223  */
224 CAResult_t CAIPStopNetworkMonitor();
225
226 /**
227  * @brief  Set callback for error handling.
228  *
229  * @param[in]  ipErrorCallback  callback to notify error to the ipadapter.
230  */
231 void CAIPSetErrorHandleCallback(CAIPErrorHandleCallback ipErrorCallback);
232
233 #ifdef __cplusplus
234 }
235 #endif
236
237 #endif /* CA_IP_INTERFACE_H_ */