10203b9a4eb3c4221242cb34f91ab4905c01421c
[platform/upstream/iotivity.git] / resource / csdk / connectivity / inc / camessagehandler.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  * This file contains message functionality.
24  */
25
26 #ifndef CA_MESSAGE_HANDLER_H_
27 #define CA_MESSAGE_HANDLER_H_
28
29 #include "cacommon.h"
30 #include <coap/coap.h>
31
32 #define CA_MEMORY_ALLOC_CHECK(arg) { if (NULL == arg) {OIC_LOG(ERROR, TAG, "Out of memory"); \
33 goto memory_error_exit;} }
34
35 typedef enum
36 {
37     SEND_TYPE_MULTICAST = 0,
38     SEND_TYPE_UNICAST
39 } CASendDataType_t;
40
41 typedef struct
42 {
43     CASendDataType_t type;
44     CAEndpoint_t *remoteEndpoint;
45     CARequestInfo_t *requestInfo;
46     CAResponseInfo_t *responseInfo;
47     CAErrorInfo_t *errorInfo;
48     CAConnectEvent_t eventInfo;
49     CADataType_t dataType;
50 } CAData_t;
51
52 #ifdef __cplusplus
53 extern "C"
54 {
55 #endif
56
57 /**
58  * Detaches control from the caller for sending message.
59  * @param[in] endpoint    endpoint information where the data has to be sent.
60  * @param[in] sendMsg     message that needs to be sent.
61  * @param[in] dataType    type of the message(request/response).
62  * @return  ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
63  */
64 CAResult_t CADetachSendMessage(const CAEndpoint_t *endpoint,
65                                const void *sendMsg,
66                                CADataType_t dataType);
67
68 /**
69  * Detaches control from the caller for sending message to adapter.
70  * @param[in] endpoint    endpoint information where the data has to be sent.
71  * @param[in] event       command to request disconect or connect.
72  * @param[in] dataType    type of the message(request/response).
73  * @return  ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
74  */
75 CAResult_t CADetachSendNetworkReqMessage(const CAEndpoint_t *endpoint,
76                                          CAConnectEvent_t event,
77                                          CADataType_t dataType);
78
79 /**
80  * Setting the request and response callbacks for network packets.
81  * @param[in] ReqHandler      callback for receiving the requests.
82  * @param[in] RespHandler     callback for receiving the response.
83  * @param[in] ErrorHandler    callback for receiving error response.
84  */
85 void CASetInterfaceCallbacks(CARequestCallback ReqHandler, CAResponseCallback RespHandler,
86                              CAErrorCallback ErrorHandler);
87
88 /**
89  * Initialize the message handler by starting thread pool and initializing the
90  * send and receive queue.
91  * @param[in]   transportType  transport type to initialize.
92  * @return  ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
93  */
94 CAResult_t CAInitializeMessageHandler(CATransportAdapter_t transportType);
95
96 /**
97  * Clears the message handler queue data.
98  * @param[in]   transportType  transport type to initialize.
99  */
100 void CAClearMessageHandler(CATransportAdapter_t transportType);
101
102 /**
103  * Terminate the message handler by stopping  the thread pool and destroying the queues.
104  */
105 void CATerminateMessageHandler();
106
107 /**
108  * Handler for receiving request and response callback in single thread model.
109  */
110 void CAHandleRequestResponseCallbacks();
111
112 /**
113  * Setting the Callback funtion for network state change callback.
114  * @param[in] nwMonitorHandler    callback for network state change.
115  */
116 void CASetNetworkMonitorCallback(CANetworkMonitorCallback nwMonitorHandler);
117
118 #ifdef WITH_BWT
119 /**
120  * Add the data to the send queue thread.
121  * @param[in] data    send data.
122  */
123 void CAAddDataToSendThread(CAData_t *data);
124
125 /**
126  * Add the data to the receive queue thread to notify received data.
127  * @param[in] data    received data.
128  */
129 void CAAddDataToReceiveThread(CAData_t *data);
130 #endif
131
132 #ifdef __cplusplus
133 } /* extern "C" */
134 #endif
135
136 #endif /* CA_MESSAGE_HANDLER_H_ */