2 #include "gestured_client_manager.h"
7 #define LOG_TAG "GESTURED_CLIENT_MANAGER"
9 static GList* g_client_list = NULL;
11 gesture_manager_client_s* GestureManagerClientCreate(const char* pkg_name)
13 LOGD("Create client");
15 if (NULL == pkg_name) {
16 LOGE("Invalid parameter");
20 gesture_manager_client_s* client;
21 client = (gesture_manager_client_s*)calloc(1, sizeof(gesture_manager_client_s));
23 LOGE("Fail to allocate memory");
27 client->pkg_name = strdup(pkg_name);
28 if (NULL == client->pkg_name) {
29 LOGE("Fail to strdup");
35 client->gestureType = -1;
36 client->requestTypeCount = -1;
37 client->clientLib = GESTURE_CLIENT_LIB_NONE;
38 client->request_uid = -1;
39 client->gdbus_bus_name = NULL;
40 client->gdbus_watch_id = -1;
41 client->gdbus_connection = NULL;
42 client->state = CLIENT_STATE_NONE;
43 client->response_cb = NULL;
44 client->is_permitted = false;
49 void GestureManagerClientDestroy(gpointer data)
51 LOGD("Destroy client");
56 gesture_manager_client_s* client_h = (gesture_manager_client_s*)data;
58 if (NULL != client_h->pkg_name) {
59 free(client_h->pkg_name);
60 client_h->pkg_name = NULL;
63 if (NULL != client_h->gdbus_bus_name) {
64 free(client_h->gdbus_bus_name);
65 client_h->gdbus_bus_name = NULL;
68 if (NULL != client_h->gdbus_connection) {
69 free(client_h->gdbus_connection);
70 client_h->gdbus_connection = NULL;
73 if (NULL != client_h->response_cb) {
74 free(client_h->response_cb);
75 client_h->response_cb = NULL;
84 int GestureManagerClientAdd(gesture_manager_client_s* client_h)
86 LOGD("Add a client to client list");
88 if (NULL == client_h) {
89 LOGE("Invalid parameter");
90 return GESTURED_ERROR_INVALID_PARAMETER;
93 g_client_list = g_list_append(g_client_list, client_h);
95 return GESTURED_ERROR_NONE;
98 int GestureManagerClientRemove(gesture_manager_client_s* client_h)
100 LOGD("Remove a client from client list");
102 if (NULL == client_h) {
103 LOGE("Invalid parameter");
104 return GESTURED_ERROR_INVALID_PARAMETER;
107 g_client_list = g_list_remove(g_client_list, client_h);
108 GestureManagerClientDestroy(client_h);
110 return GESTURED_ERROR_NONE;
113 int GestureManagerClientNums()
115 LOGD("Length of client list");
118 count = g_list_length(g_client_list);
123 gesture_manager_client_s* GestureManagerClientGet(const char* pkg_name)
125 LOGD("Get client. pkg_name(%s)", pkg_name);
127 if (NULL == pkg_name) {
128 LOGE("Invalid parameter");
133 gesture_manager_client_s* data = NULL;
135 if (g_list_length(g_client_list) > 0) {
136 iter = g_list_first(g_client_list);
138 while (NULL != iter) {
139 data = (gesture_manager_client_s *)iter->data;
141 if (0 == strncmp(pkg_name, data->pkg_name, strlen(pkg_name))) {
142 LOGD("pkg_name(%s)", data->pkg_name);
148 iter = g_list_next(iter);
151 LOGD("client doesn't exist");
156 gesture_manager_client_s* GestureManagerClientGetWithBusName(const char* bus_name)
158 LOGD("Get client. bus_name(%s)", bus_name);
160 if (NULL == bus_name) {
161 LOGE("Invalid parameter");
166 gesture_manager_client_s* data = NULL;
168 if (g_list_length(g_client_list) > 0) {
169 iter = g_list_first(g_client_list);
171 while (NULL != iter) {
172 data = (gesture_manager_client_s *)iter->data;
174 if (0 == strncmp(bus_name, data->gdbus_bus_name, strlen(bus_name))) {
175 LOGD("gdbus_bus_name(%s)", data->gdbus_bus_name);
181 iter = g_list_next(iter);
184 LOGD("client doesn't exist");
189 char* GestureManagerClientGetBusName(int num)
191 LOGD("Get client bus name. num(%d)", num);
193 gpointer element_data = g_list_nth_data(g_client_list, num);
194 gesture_manager_client_s* client = (gesture_manager_client_s*)element_data;
195 if (client == NULL) {
196 LOGE("Error : Can not found %d th bus info", num);
199 return client->gdbus_bus_name;
202 int GestureManagerClientClear()
204 LOGD("Clear all clients from client list");
207 g_list_free_full(g_client_list, GestureManagerClientDestroy);
208 g_client_list = NULL;
211 return GESTURED_ERROR_NONE;
214 bool GestureManagerClientAlreadyRegisterd(const char *bus_name)
216 LOGD("Check already registered client. bus_name(%s)", bus_name);
218 if (NULL == bus_name) {
219 LOGE("Invalid parameter");
224 gesture_manager_client_s* data = NULL;
226 if (g_list_length(g_client_list) > 0) {
227 iter = g_list_first(g_client_list);
229 while (NULL != iter) {
230 data = (gesture_manager_client_s *)iter->data;
232 if (0 == strncmp(bus_name, data->gdbus_bus_name, strlen(bus_name))) {
233 LOGD("gdbus_bus_name(%s)", data->gdbus_bus_name);
239 iter = g_list_next(iter);
242 LOGD("client is not yet registered. Need to register to server");
247 int GestureManagerClientGetStatus(const char* pkg_name, gesture_manager_client_state_e* state)
249 LOGD("get state. pkg_name(%s)", pkg_name);
251 if (NULL == pkg_name) {
252 LOGE("Invalid parameter");
253 return GESTURED_ERROR_INVALID_PARAMETER;
256 gesture_manager_client_s* client;
257 client = GestureManagerClientGet(pkg_name);
258 if (NULL == client) {
260 return GESTURED_ERROR_INVALID_PARAMETER;
263 *state = client->state;
268 int GestureManagerClientSetStatus(const char* pkg_name, gesture_manager_client_state_e state)
270 LOGD("set state. pkg_name(%s), state(%d)", pkg_name, state);
272 if (NULL == pkg_name) {
273 LOGE("Invalid parameter");
274 return GESTURED_ERROR_INVALID_PARAMETER;
277 gesture_manager_client_s* client;
278 client = GestureManagerClientGet(pkg_name);
279 if (NULL == client) {
280 LOGE("Invalid pkg_name");
281 return GESTURED_ERROR_INVALID_PARAMETER;
284 client->state = state;