API change , Retransmission Callback on expiry , remove glib source for dynamic linking
[platform/upstream/iotivity.git] / resource / csdk / connectivity / api / cainterface.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 cainterface.h
23  * @brief This file contains the APIs for Resource Model to use
24  */
25
26 #ifndef __CA_INTERFACE_H_
27 #define __CA_INTERFACE_H_
28
29 /**
30  * Connectivity Abstraction Interface Description APIs.
31  */
32 #include "cacommon.h"
33
34 #ifdef __cplusplus
35 extern "C"
36 {
37 #endif
38
39 /**
40  * @brief   Callback function type for request delivery.
41  *          requestInfo contains different parameters for resource model to understand about the request.
42  * @param   object      [OUT]   Endpoint object from which the request is received. It contains endpoint
43  *                              address based on the connectivity type.
44  * @param   requestInfo [OUT]   Identifier which needs to be sent with request.
45  */
46 typedef void (*CARequestCallback)(const CARemoteEndpoint_t *object,
47                                   const CARequestInfo_t *requestInfo);
48
49 /**
50  * @brief   Callback function type for response delivery.
51  *          responseInfor contains different parameters for resource model to understand about the request.
52  * @param   object          [OUT]   Endpoint object from which the response is received.
53  * @param   responseInfo    [OUT]   Identifier which needs to be mapped with response.
54  */
55 typedef void (*CAResponseCallback)(const CARemoteEndpoint_t *object,
56                                    const CAResponseInfo_t *responseInfo);
57
58 /**
59  * @brief   Initialize the connectivity abstraction module.
60  *          It will initialize adapters, thread pool and other modules based on the platform compilation options.
61  *
62  * @return  CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
63  */
64 CAResult_t CAInitialize();
65
66 /**
67  * @brief   Terminate the connectivity abstraction module.
68  *          All threads, data structures are destroyed for next initializations.
69  */
70 void CATerminate();
71
72 /**
73  * @brief   Starts listening servers.
74  *          This API is used by resource hosting server for listening multicast requests.
75  *          based on the adapters configurations , different kinds of servers are started.
76  * @return  CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
77  */
78 CAResult_t CAStartListeningServer();
79
80 /**
81  * @brief   Starts discovery servers.
82  *          This API is used by resource required clients for listening multicast requests.
83  *          based on the adapters configurations , different kinds of servers are started.
84  * @return  CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
85  */
86 CAResult_t CAStartDiscoveryServer();
87
88 /**
89  * @brief   Register request callbacks and response callbacks.
90  *          requests and responses are delivered these callbacks .
91  * @see     CARequestCallback CAResponseCallback
92  * @param   ReqHandler   [IN]    Request callback ( for GET,PUT ..etc)
93  * @param   RespHandler  [IN]    Response Handler Callback
94  * @return  CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
95  */
96 CAResult_t CARegisterHandler(CARequestCallback ReqHandler, CAResponseCallback RespHandler);
97
98 /**
99  * @brief   Create a Remote endpoint if the URI is available already.
100  *          for FindResource-> unicast requests , this API is used.
101  *          FindResource(URI)-> CACreateRemoteEndpoint , CASendRequest(GET)
102  * @param   uri     [IN]    Absolute URI of the resource to be used to generate the
103  *                          Remote endpoint
104  *                          for ex : coap://10.11.12.13:4545/resource_uri ( for IP)
105  *                          coap://10:11:12:13:45:45/resource_uri ( for BT)
106  * @param   type    [IN]    connectivity type of the endpoint
107  * @param   object  [OUT ]  Endpoint object which contains the above parsed data
108  * @return  CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
109  */
110 CAResult_t CACreateRemoteEndpoint(const CAURI_t uri,
111         const CAConnectivityType_t connectivityType, CARemoteEndpoint_t **object);
112
113 /**
114  * @brief   API Destroy the remote endpoint created
115  * @param   object  [IN]    endpoint object created with CACreateRemoteEndpoint
116  */
117 void CADestroyRemoteEndpoint(CARemoteEndpoint_t *object);
118
119 /**
120  * @brief   Generating the token for the requests/response.
121  *          Token memory is created and destroyed by the calle.
122  * @param   token   [OUT]   token for the request
123  * @return  CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
124  */
125 CAResult_t CAGenerateToken(CAToken_t *token);
126
127 /**
128  * @brief   Destroy the token generated by CAGenerateToken
129  * @param   token   [IN]    token for the request
130  */
131 void CADestroyToken(CAToken_t token);
132
133 /**
134  * @brief   Find the resource in the network. This API internally sends multicast messages on the
135  *          all connectivity adapters. Responses are delivered via response callbacks.
136  *
137  * @param   resourceUri [IN]    Uri to send multicast search request
138  * @return  CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
139  */
140 CAResult_t CAFindResource(const CAURI_t resourceUri, const CAToken_t token);
141
142 /**
143  * @brief   Send control Request on a resource
144  * @param   object      [IN]    Remote Endpoint where the payload need to be sent.
145  *                              This Remote endpoint is delivered with Request or response callback.
146  * @param   requestInfo [IN ]   information for the request.
147  * @return  CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
148  */
149 CAResult_t CASendRequest(const CARemoteEndpoint_t *object, CARequestInfo_t *requestInfo);
150
151 /**
152  * @brief   Send control Request on a resource to multicast group
153  * @param   object      [IN]    Group Endpoint where the payload need to be sent.
154  *                              This Remote endpoint is delivered with Request or response callback.
155  * @param   requestInfo [IN ]   information for the request.
156  * @return  CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
157  */
158 CAResult_t CASendRequestToAll(const CAGroupEndpoint_t *object,
159                               const CARequestInfo_t *requestInfo);
160
161 /**
162  * @brief   Send the response
163  * @param   object          [IN]    Remote Endpoint where the payload need to be sent.
164  *                                  This Remote endpoint is delivered with Request or response callback
165  * @param   responseInfo    [IN ]   information for the response
166  * @return  CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
167  */
168 CAResult_t CASendResponse(const CARemoteEndpoint_t *object, CAResponseInfo_t *responseInfo);
169
170 /**
171  * @brief   Send notification to the remote object
172  * @param   object          [IN]    Remote Endpoint where the payload need to be sent.
173  *                                  This Remote endpoint is delivered with Request or response callback.
174  * @param   responseInfo    [IN ]   information for the response.
175  * @return  CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
176  */
177 CAResult_t CASendNotification(const CARemoteEndpoint_t *object,
178                               CAResponseInfo_t *responseInfo);
179
180 /**
181  * @brief   for advertise the resource
182  * @param   resourceUri [IN]    URI to be advertised
183  * @param   options     [IN]    header options information
184  * @param   numOptions  [IN]    number of options
185  * @return  CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
186  */
187 CAResult_t CAAdvertiseResource(const CAURI_t resourceUri, CAToken_t token,
188                                CAHeaderOption_t *options, uint8_t numOptions);
189
190 /**
191  * @brief   Select network to use
192  * @param   interestedNetwork   [IN]    Connectivity Type enum
193  * @return  CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
194  */
195 CAResult_t CASelectNetwork(const uint32_t interestedNetwork);
196
197 /**
198  * @brief   Select network to unuse
199  * @param   nonInterestedNetwork    [IN]    Connectivity Type enum
200  * @return  CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
201  */
202 CAResult_t CAUnSelectNetwork(const uint32_t nonInterestedNetwork);
203
204 /**
205  * @brief   Get network information
206  *          It should be destroyed by the caller as its Get Information.
207  * @param   info    [OUT]   LocalConnectivity objects
208  * @param   size    [OUT]   No Of Array objects
209  * @return  CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
210  */
211 CAResult_t CAGetNetworkInformation(CALocalConnectivity_t **info, uint32_t *size);
212
213 /**
214  * @brief   for usage of singled threaded application.
215  * @return   CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
216  */
217 CAResult_t CAHandleRequestResponse();
218
219 #ifdef __cplusplus
220 } /* extern "C" */
221 #endif
222
223 #endif