1 /******************************************************************
3 * Copyright 2014 Samsung Electronics All Rights Reserved.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 ******************************************************************/
23 * This file contains common function for retransmission messages.
26 #ifndef CA_RETRANSMISSION_H_
27 #define CA_RETRANSMISSION_H_
31 #include "cathreadpool.h"
33 #include "uarraylist.h"
37 #define DEFAULT_RETRANSMISSION_TYPE (CA_ADAPTER_IP | \
38 CA_ADAPTER_RFCOMM_BTEDR | \
41 /** default ACK time is 2 sec(CoAP). **/
42 #define DEFAULT_ACK_TIMEOUT_SEC 2
44 /** default max retransmission trying count is 4(CoAP). **/
45 #define DEFAULT_RETRANSMISSION_COUNT 4
47 /** check period is 1 sec. **/
48 #define RETRANSMISSION_CHECK_PERIOD_SEC 1
50 /** retransmission data send method type. **/
51 typedef CAResult_t (*CADataSendMethod_t)(const CAEndpoint_t *endpoint,
54 CADataType_t dataType);
56 /** retransmission timeout callback type. **/
57 typedef void (*CATimeoutCallback_t)(const CAEndpoint_t *endpoint,
63 /** retransmission support transport type. **/
64 CATransportAdapter_t supportType;
66 /** retransmission trying count. **/
69 } CARetransmissionConfig_t;
73 /** Thread pool of the thread started. **/
74 ca_thread_pool_t threadPool;
76 /** mutex for synchronization. **/
79 /** conditional mutex for synchronization. **/
82 /** send method for retransmission data. **/
83 CADataSendMethod_t dataSendMethod;
85 /** callback function for retransmit timeout. **/
86 CATimeoutCallback_t timeoutCallback;
88 /** retransmission configure data. **/
89 CARetransmissionConfig_t config;
91 /** Variable to inform the thread to stop. **/
94 /** array list on which the thread is operating. **/
95 u_arraylist_t *dataList;
105 * Initializes the retransmission context.
106 * @param[in] context context for retransmission.
107 * @param[in] handle thread pool handle.
108 * @param[in] retransmissionSendMethod function to be called for retransmission.
109 * @param[in] timeoutCallback callback for retransmit timeout.
110 * @param[in] config configuration for retransmission.
111 * if NULL is coming, it will set default values.
112 * @return ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
114 CAResult_t CARetransmissionInitialize(CARetransmission_t *context,
115 ca_thread_pool_t handle,
116 CADataSendMethod_t retransmissionSendMethod,
117 CATimeoutCallback_t timeoutCallback,
118 CARetransmissionConfig_t* config);
121 * Starting the retransmission context.
122 * @param[in] context context for retransmission.
123 * @return ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
125 CAResult_t CARetransmissionStart(CARetransmission_t *context);
128 * Pass the sent pdu data. if retransmission process need, internal thread will wake up and
129 * process the retransmission data.
130 * @param[in] context context for retransmission.
131 * @param[in] endpoint endpoint information.
132 * @param[in] dataType Data type which is REQUEST or RESPONSE.
133 * @param[in] pdu sent pdu binary data.
134 * @param[in] size sent pdu binary data size.
135 * @return ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
137 CAResult_t CARetransmissionSentData(CARetransmission_t *context,
138 const CAEndpoint_t *endpoint,
139 CADataType_t dataType,
140 const void *pdu, uint32_t size);
143 * Pass the received pdu data. if received pdu is ACK data for the retransmission CON data,
144 * the specified CON data will remove on retransmission list.
145 * @param[in] context context for retransmission.
146 * @param[in] endpoint endpoint information.
147 * @param[in] pdu received pdu binary data.
148 * @param[in] size received pdu binary data size.
149 * @param[out] retransmissionPdu pdu data of the request for reset and ack.
150 * @return ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
152 CAResult_t CARetransmissionReceivedData(CARetransmission_t *context,
153 const CAEndpoint_t *endpoint, const void *pdu,
154 uint32_t size, void **retransmissionPdu);
157 * Stopping the retransmission context.
158 * @param[in] context context for retransmission.
159 * @return ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
161 CAResult_t CARetransmissionStop(CARetransmission_t *context);
164 * Terminating the retransmission context.
165 * @param[in] context context for retransmission.
166 * @return ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
168 CAResult_t CARetransmissionDestroy(CARetransmission_t *context);
171 * Invoke Retransmission according to TimedAction Response.
172 * @param[in] threadValue context for retransmission.
174 void CARetransmissionBaseRoutine(void *threadValue);
180 #endif /* CA_RETRANSMISSION_H_ */