Tizen 2.0 Release
[framework/system/sync-agent.git] / src / framework / engine-controller / task_cancel_info.h
1 /*
2  * sync-agent
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Apache License, Version 2.0 (the License);
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 #ifndef EC_TASK_CANCEL_INFO_H_
19 #define EC_TASK_CANCEL_INFO_H_
20
21 #include <sys/time.h>
22 #include <glib.h>
23 #include "utility/fw_ref.h"
24 #include "engine-controller/define.h"
25
26 /**
27  * @file task_cancel_info.h
28  * @brief Provides enum definition for task status
29  */
30
31 /** @addtogroup engine_controller
32  *      @{
33  */
34
35 /**
36  * @brief Cancel callback
37  */
38 typedef void (*ec_cancel_callback_cb) (void *user_data);
39
40 /**
41  * @brief Structure for cancel callback information
42  */
43 typedef struct ec_cancel_callback_info_s ec_cancel_callback_info_t;
44
45 /**
46  * @brief Structure for cancel callback information
47  */
48 struct ec_cancel_callback_info_s {
49         GThread *who_registered;                        /**< Register thread */
50         ec_cancel_callback_cb how_to_do;        /**< Cancel callback */
51         sync_agent_ec_pointer user_data;        /**< User data */
52 };
53
54 /**
55  * @brief Initialize ec_cancel_callback_info_t
56  * @param[in] who_registered GThread
57  * @param[in] how_to_do ec_cancel_callback_cb
58  * @param[in] user_data user data
59  * @return ec_cancel_callback_info_t on Success, NULL on fail
60  * @retval ec_cancel_callback_info_t Successful
61  * @retval NULL Fail
62  */
63 ec_cancel_callback_info_t *ec_cancel_callback_info_init(GThread * who_registered, ec_cancel_callback_cb how_to_do, sync_agent_ec_pointer user_data);
64
65 /**
66  * @brief Compare ec_cancel_callback_info_t
67  * @param[in] cancel_callback_info ec_cancel_callback_info_t
68  * @param[in] who_registered GThread
69  * @param[in] how_to_do ec_cancel_callback_cb
70  * @param[in] user_data user data
71  * @return true is same callback information , false is note same callback information
72  * @retval true is same callback information
73  * @retval false is not same callback information
74  */
75 sync_agent_ec_boolean ec_cancel_callback_info_compare(ec_cancel_callback_info_t * cancel_callback_info, GThread * who_registered, ec_cancel_callback_cb how_to_do, sync_agent_ec_pointer user_data);
76
77 /**
78  * @brief Call registered callback
79  * @param[in] cancel_callback_info ec_cancel_callback_info_t
80  */
81 void ec_cancel_callback_info_call_callback(ec_cancel_callback_info_t * cancel_callback_info);
82
83 /**
84  * @brief Destroy ec_cancel_callback_info_t
85  * @param[in] cancel_callback_info ec_cancel_callback_info_t
86  */
87 void ec_cancel_callback_info_destroy(ec_cancel_callback_info_t * cancel_callback_info);
88
89 /**
90  * @brief Structure for cancel information
91  */
92 typedef struct ec_task_cancel_info_s ec_task_cancel_info_t;
93
94 /**
95  * @brief Structure for cancel information
96  */
97 struct ec_task_cancel_info_s {
98         sync_agent_ec_int ref_count;            /**< Reference count */
99
100         sync_agent_ec_boolean cancel_flag;      /**< Cancel flag */
101         sync_agent_util_ref_object_s *request_msg;      /**< Request message(containing ec_request_msg_t*) */
102
103 #if !GLIB_CHECK_VERSION (2, 32, 0)
104         GMutex *cancel_info_mutex;              /**< Cancel information mutex */
105 #else
106         GMutex cancel_info_mutex;               /**< Cancel information mutex */
107 #endif
108         struct timeval cancel_time;             /**< Cancel time */
109         GSList *cancel_callback_infos;  /**< Cancel callback informations(containing ec_cancel_callback_info_t*) */
110 };
111
112 /**
113  * @brief Initialize ec_task_cancel_info_t
114  * @param[in] request_msg sync_agent_util_ref_object_s
115  * @return ec_task_cancel_info_t on success , NULL on fail
116  * @retval ec_task_cancel_info_t Successful
117  * @retval NULL Fail
118  */
119 ec_task_cancel_info_t *ec_task_cancel_info_init(sync_agent_util_ref_object_s * request_msg);
120
121 /**
122  * @brief Increase cancel information reference
123  * @param[in] info ec_task_cancel_info_t
124  * @return ec_task_cancel_info_t on success
125  * @retval ec_task_cancel_info_t Successful
126  */
127 ec_task_cancel_info_t *ec_task_cancel_info_ref(ec_task_cancel_info_t * info);
128
129 /**
130  * @brief Decrease cancel information reference
131  * @param[in] info ec_task_cancel_info_t
132  */
133 void ec_task_cancel_info_unref(ec_task_cancel_info_t * info);
134
135 /**
136  * @brief Get cancel flag
137  * @param[in] cancel_info ec_task_cancel_info_t
138  * @return sync_agent_ec_boolean
139  * @retval true on cancel flag is on
140  * @retval false on cancel flag is off
141  */
142 sync_agent_ec_boolean ec_task_cancel_info_get_cancel_flag_atomic(ec_task_cancel_info_t * cancel_info);
143
144 /**
145  * @brief Set cancel flag
146  * @param[in] cancel_info ec_task_cancel_info_t
147  */
148 void ec_task_cancel_info_set_cancel_flag_atomic(ec_task_cancel_info_t * cancel_info);
149
150 /**
151  * @brief Get request message id
152  * @param[in] cancel_info ec_task_cancel_info_t
153  * @return sync_agent_ec_int
154  * @retval request message id
155  */
156 sync_agent_ec_int ec_task_cancel_info_get_request_msg_id(ec_task_cancel_info_t * cancel_info);
157
158 /**
159  * @brief Call all registered callback
160  * @param[in] cancel_info ec_task_cancel_info_t
161  */
162 void ec_task_cancel_info_call_cancel_callbacks_unlocked(ec_task_cancel_info_t * cancel_info);
163
164 /**
165  * @brief Register cancel callback
166  * @param[in] cancel_info ec_task_cancel_info_t
167  * @param[in] callback_func ec_cancel_callback_cb callback_func
168  * @param[in] user_data user data
169  * @return SYNC_AGENT_EC_OK on success, otherwise error value
170  * @retval SYNC_AGENT_EC_INVALID_PARAMETER when invalid parameter is inputted
171  * @retval SYNC_AGENT_EC_OUT_OF_MEMORY when memory allocation is failed
172  */
173 sync_agent_ec_error_e ec_task_cancel_info_register_cancel_callback_unlocked(ec_task_cancel_info_t * cancel_info, ec_cancel_callback_cb callback_func, sync_agent_ec_pointer user_data);
174
175 /**
176  * @brief Unregister cancel callback
177  * @param[in] cancel_info ec_task_cancel_info_t
178  * @param[in] callback_func ec_cancel_callback_cb callback_func
179  * @param[in] user_data user data
180  * @return SYNC_AGENT_EC_OK on success, otherwise error value
181  * @retval SYNC_AGENT_EC_INVALID_PARAMETER when invalid parameter is inputted
182  */
183 sync_agent_ec_error_e ec_task_cancel_info_unregister_cancel_callback_unlocked(ec_task_cancel_info_t * cancel_info, ec_cancel_callback_cb callback_func, sync_agent_ec_pointer user_data);
184
185 /**
186  *      @}
187  */
188
189 #endif                          /* EC_TASK_CANCEL_INFO_H_ */