diff options
Diffstat (limited to 'src/monitor/request-handler.c')
-rw-r--r-- | src/monitor/request-handler.c | 232 |
1 files changed, 43 insertions, 189 deletions
diff --git a/src/monitor/request-handler.c b/src/monitor/request-handler.c index d503ab6..e31b2c6 100644 --- a/src/monitor/request-handler.c +++ b/src/monitor/request-handler.c @@ -40,6 +40,7 @@ #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> +#include <sys/stat.h> #include <netinet/in.h> #include <sys/time.h> #include <assert.h> @@ -59,13 +60,10 @@ struct request_client { struct resource_instance { int id; - struct syscommon_resman_resource *res; - int64_t ts_start; int64_t ts_end; }; -static int g_resource_id; static bool g_request_server_run; static struct thread *g_server_thread; @@ -89,23 +87,6 @@ get_resource_instance_by_id(struct request_client *client, int resource_id) return g_hash_table_lookup(client->resource_table, GINT_TO_POINTER(resource_id)); } -static struct syscommon_resman_resource * -get_resource_by_id(struct request_client *client, int resource_id) -{ - struct resource_instance *res_inst = get_resource_instance_by_id(client, resource_id); - - res_inst = get_resource_instance_by_id(client, resource_id); - if (!res_inst) - return NULL; - - return res_inst->res; -} - -static int clear_sign_bit(unsigned int val) -{ - return (int)((val << 1) >> 1); -} - static int handle_request_create_resource(struct request_client *client, char *args) { struct resource_instance *res_inst; @@ -126,16 +107,13 @@ static int handle_request_create_resource(struct request_client *client, char *a */ resource_type = atoi(args); - ret = syscommon_resman_create_resource(&res_inst->res, resource_type); + ret = syscommon_resman_create_resource(&res_inst->id, resource_type); if (ret < 0) { _E("failed to create resource, res:type(%d)\n", resource_type); free(res_inst); return ret; } - res_inst->id = clear_sign_bit( - (unsigned int)__sync_fetch_and_add(&g_resource_id, 1)); - register_resource_to_client(client, res_inst); return res_inst->id; @@ -172,7 +150,6 @@ inline __attribute__((always_inline)) int64_t get_time_now(void) static int handle_request_update_resource(struct request_client *client, char *args) { struct resource_instance *res_inst; - struct syscommon_resman_resource *res; int resource_id; int ret; @@ -193,15 +170,13 @@ static int handle_request_update_resource(struct request_client *client, char *a return -EINVAL; } - res = res_inst->res; - res_inst->ts_start = get_time_now(); - ret = syscommon_resman_update_resource_attrs(res); + ret = syscommon_resman_update_resource_attrs(resource_id); res_inst->ts_end = get_time_now(); if (ret < 0) { res_inst->ts_start = res_inst->ts_end = 0; _E("failed to update resource attributes, res:name(%s)id(%d)\n", - syscommon_resman_get_resource_name(res), resource_id); + syscommon_resman_get_resource_name(resource_id), resource_id); return ret; } @@ -257,13 +232,12 @@ static int handle_request_get_resource_count(struct request_client *client, char static void update_resource(gpointer key, gpointer value, gpointer user_data) { struct resource_instance *res_inst = value; - struct syscommon_resman_resource *res = res_inst->res; int ret; - ret = syscommon_resman_update_resource_attrs(res); + ret = syscommon_resman_update_resource_attrs(res_inst->id); if (ret < 0) _E("failed to update resource attributes (name:%s,id:%d)\n", - syscommon_resman_get_resource_name(res), res_inst->id); + syscommon_resman_get_resource_name(res_inst->id), res_inst->id); } @@ -286,7 +260,6 @@ static int handle_request_update_resource_all(struct request_client *client, cha static int handle_request_set_resource_attr(struct request_client *client, char *args, int request_type) { - struct syscommon_resman_resource *res; int resource_id, ret; u_int64_t interest_masks; @@ -305,30 +278,23 @@ static int handle_request_set_resource_attr(struct request_client *client, char return -EINVAL; } - res = get_resource_by_id(client, resource_id); - if (!res) { - _E("failed to get resource, client(%d) | res:id(%d)\n", - client->socket_fd, resource_id); - return -EINVAL; - } - switch (request_type) { case REQUEST_SET_RESOURCE_ATTR: - ret = syscommon_resman_set_resource_attr_interest(res, interest_masks); + ret = syscommon_resman_set_resource_attr_interest(resource_id, interest_masks); if (ret < 0) _E("failed to set attribute interest, client(%d) | res:name(%s)id(%d)\n", client->socket_fd, - syscommon_resman_get_resource_name(res), resource_id); + syscommon_resman_get_resource_name(resource_id), resource_id); break; case REQUEST_UNSET_RESOURCE_ATTR: - ret = syscommon_resman_unset_resource_attr_interest(res, interest_masks); + ret = syscommon_resman_unset_resource_attr_interest(resource_id, interest_masks); if (ret < 0) _E("failed to unset attribute interest, client(%d) | res:name(%s)id(%d)\n", client->socket_fd, - syscommon_resman_get_resource_name(res), resource_id); + syscommon_resman_get_resource_name(resource_id), resource_id); break; case REQUEST_IS_RESOURCE_ATTR_SET: - ret = (int)syscommon_resman_is_resource_attr_interested(res, interest_masks); + ret = (int)syscommon_resman_is_resource_attr_interested(resource_id, interest_masks); break; default: return -EINVAL; @@ -339,7 +305,6 @@ static int handle_request_set_resource_attr(struct request_client *client, char static int handle_request_set_resource_flag(struct request_client *client, char *args) { - struct syscommon_resman_resource *res; int resource_id, ret; u_int64_t flag_mask; @@ -358,18 +323,11 @@ static int handle_request_set_resource_flag(struct request_client *client, char return -EINVAL; } - res = get_resource_by_id(client, resource_id); - if (!res) { - _E("failed to get resource, client(%d) | res:id(%d)\n", - client->socket_fd, resource_id); - return -EINVAL; - } - - ret = syscommon_resman_set_resource_flag(res, flag_mask); + ret = syscommon_resman_set_resource_flag(resource_id, flag_mask); if (ret < 0) { _E("failed to set flag to %"PRIu64", client(%d) | res:name(%s)id(%d)\n", flag_mask, client->socket_fd, - syscommon_resman_get_resource_name(res), resource_id); + syscommon_resman_get_resource_name(resource_id), resource_id); return ret; } @@ -378,7 +336,6 @@ static int handle_request_set_resource_flag(struct request_client *client, char static int handle_request_is_resource_attr_supported(struct request_client *client, char *args, bool *supported) { - struct resource *res; int resource_id; u_int64_t attr_id; @@ -397,19 +354,11 @@ static int handle_request_is_resource_attr_supported(struct request_client *clie return -EINVAL; } - res = get_resource_by_id(client, resource_id); - if (!res) { - _E("failed to get resource, client(%d) | res:id(%d)\n", - client->socket_fd, resource_id); - return -EINVAL; - } - - return syscommon_resman_is_resource_attr_supported(res, attr_id, supported); + return syscommon_resman_is_resource_attr_supported(resource_id, attr_id, supported); } static int handle_request_set_resource_ctrl(struct request_client *client, char *args) { - struct syscommon_resman_resource *res; int resource_id, value, ret; u_int64_t ctrl_id; @@ -428,19 +377,12 @@ static int handle_request_set_resource_ctrl(struct request_client *client, char return -EINVAL; } - res = get_resource_by_id(client, resource_id); - if (!res) { - _E("failed to get resource, client(%d) | res:id(%d)\n", - client->socket_fd, resource_id); - return -EINVAL; - } - - ret = syscommon_resman_set_resource_control(res, ctrl_id, (void *)(intptr_t)value); + ret = syscommon_resman_set_resource_control(resource_id, ctrl_id, (void *)(intptr_t)value); if (ret < 0) { _E("failed to set resource control, client(%d) | res:name(%s)id(%d) | ctrl:name(%s)id(%"PRId64")val(%d)\n", client->socket_fd, - syscommon_resman_get_resource_name(res), resource_id, - syscommon_resman_get_resource_control_name(res, ctrl_id), ctrl_id, value); + syscommon_resman_get_resource_name(resource_id), resource_id, + syscommon_resman_get_resource_control_name(resource_id, ctrl_id), ctrl_id, value); return ret; } @@ -451,7 +393,6 @@ static int handle_request_get_json(struct request_client *client, char *args, int request_type, char **json_string) { - struct syscommon_resman_resource *res; u_int64_t attr_id; int resource_id; @@ -482,18 +423,12 @@ handle_request_get_json(struct request_client *client, char *args, return -EINVAL; } - res = get_resource_by_id(client, resource_id); - if (!res) { - _E("failed to get resource, res:id(%d)\n", resource_id); - return -EINVAL; - } - skip_res: switch (request_type) { case REQUEST_GET_RESOURCE_JSON: - return syscommon_resman_get_resource_attrs_json(res, json_string); + return syscommon_resman_get_resource_attrs_json(resource_id, json_string); case REQUEST_GET_VALUE_JSON: - return syscommon_resman_get_resource_attr_json(res, attr_id, json_string); + return syscommon_resman_get_resource_attr_json(resource_id, attr_id, json_string); case REQUEST_GET_RESOURCE_LIST_JSON: return syscommon_resman_get_resource_list_json(json_string); default: @@ -503,7 +438,6 @@ skip_res: static int handle_request_get_value_int(struct request_client *client, char *args, int32_t *value) { - struct syscommon_resman_resource *res; int resource_id, ret; u_int64_t attr_id; @@ -522,19 +456,12 @@ static int handle_request_get_value_int(struct request_client *client, char *arg return -EINVAL; } - res = get_resource_by_id(client, resource_id); - if (!res) { - _E("failed to get resource, client(%d) | res:id(%d)\n", - client->socket_fd, resource_id); - return -EINVAL; - } - - ret = syscommon_resman_get_resource_attr_int(res, attr_id, value); + ret = syscommon_resman_get_resource_attr_int(resource_id, attr_id, value); if (ret < 0) { _E("failed to get int value, client(%d) | res:name(%s)id(%d) | attr:name(%s)id(%"PRId64")\n", client->socket_fd, - syscommon_resman_get_resource_name(res), resource_id, - syscommon_resman_get_resource_attr_name(res, attr_id), attr_id); + syscommon_resman_get_resource_name(resource_id), resource_id, + syscommon_resman_get_resource_attr_name(resource_id, attr_id), attr_id); return ret; } @@ -543,7 +470,6 @@ static int handle_request_get_value_int(struct request_client *client, char *arg static int handle_request_get_value_int64(struct request_client *client, char *args, int64_t *value) { - struct syscommon_resman_resource *res; int resource_id, ret; u_int64_t attr_id; @@ -562,19 +488,12 @@ static int handle_request_get_value_int64(struct request_client *client, char *a return -EINVAL; } - res = get_resource_by_id(client, resource_id); - if (!res) { - _E("failed to get resource, client(%d) | res:id(%d)\n", - client->socket_fd, resource_id); - return -EINVAL; - } - - ret = syscommon_resman_get_resource_attr_int64(res, attr_id, value); + ret = syscommon_resman_get_resource_attr_int64(resource_id, attr_id, value); if (ret < 0) { _E("failed to get int64 value, client(%d) | res:name(%s)id(%d) | attr:name(%s)id(%"PRId64")\n", client->socket_fd, - syscommon_resman_get_resource_name(res), resource_id, - syscommon_resman_get_resource_attr_name(res, attr_id), attr_id); + syscommon_resman_get_resource_name(resource_id), resource_id, + syscommon_resman_get_resource_attr_name(resource_id, attr_id), attr_id); return ret; } @@ -584,7 +503,6 @@ static int handle_request_get_value_int64(struct request_client *client, char *a static int handle_request_get_value_uint(struct request_client *client, char *args, u_int32_t *value) { - struct syscommon_resman_resource *res; int resource_id, ret; u_int64_t attr_id; @@ -603,19 +521,12 @@ handle_request_get_value_uint(struct request_client *client, char *args, u_int32 return -EINVAL; } - res = get_resource_by_id(client, resource_id); - if (!res) { - _E("failed to get resource, client(%d) | res:id(%d)\n", - client->socket_fd, resource_id); - return -EINVAL; - } - - ret = syscommon_resman_get_resource_attr_uint(res, attr_id, value); + ret = syscommon_resman_get_resource_attr_uint(resource_id, attr_id, value); if (ret < 0) { _E("failed to get uint value, client(%d) | res:name(%s)id(%d) | attr:name(%s)id(%"PRId64")\n", client->socket_fd, - syscommon_resman_get_resource_name(res), resource_id, - syscommon_resman_get_resource_attr_name(res, attr_id), attr_id); + syscommon_resman_get_resource_name(resource_id), resource_id, + syscommon_resman_get_resource_attr_name(resource_id, attr_id), attr_id); return ret; } @@ -625,7 +536,6 @@ handle_request_get_value_uint(struct request_client *client, char *args, u_int32 static int handle_request_get_value_uint64(struct request_client *client, char *args, u_int64_t *value) { - struct syscommon_resman_resource *res; int resource_id, ret; u_int64_t attr_id; @@ -644,19 +554,12 @@ handle_request_get_value_uint64(struct request_client *client, char *args, u_int return -EINVAL; } - res = get_resource_by_id(client, resource_id); - if (!res) { - _E("failed to get resource, client(%d) | res:id(%d)\n", - client->socket_fd, resource_id); - return -EINVAL; - } - - ret = syscommon_resman_get_resource_attr_uint64(res, attr_id, value); + ret = syscommon_resman_get_resource_attr_uint64(resource_id, attr_id, value); if (ret < 0) { _E("failed to get uint64 value, client(%d) | res:name(%s)id(%d) | attr:name(%s)id(%"PRId64")\n", client->socket_fd, - syscommon_resman_get_resource_name(res), resource_id, - syscommon_resman_get_resource_attr_name(res, attr_id), attr_id); + syscommon_resman_get_resource_name(resource_id), resource_id, + syscommon_resman_get_resource_attr_name(resource_id, attr_id), attr_id); return ret; } @@ -665,7 +568,6 @@ handle_request_get_value_uint64(struct request_client *client, char *args, u_int static int handle_request_get_value_double(struct request_client *client, char *args, double *value) { - struct syscommon_resman_resource *res; int resource_id, ret; u_int64_t attr_id; @@ -684,19 +586,12 @@ static int handle_request_get_value_double(struct request_client *client, char * return -EINVAL; } - res = get_resource_by_id(client, resource_id); - if (!res) { - _E("failed to get resource, client(%d) | res:id(%d)\n", - client->socket_fd, resource_id); - return -EINVAL; - } - - ret = syscommon_resman_get_resource_attr_double(res, attr_id, value); + ret = syscommon_resman_get_resource_attr_double(resource_id, attr_id, value); if (ret < 0) { _E("failed to get double value, client(%d) | res:name(%s)id(%d) | attr:name(%s)id(%"PRId64")\n", client->socket_fd, - syscommon_resman_get_resource_name(res), resource_id, - syscommon_resman_get_resource_attr_name(res, attr_id), attr_id); + syscommon_resman_get_resource_name(resource_id), resource_id, + syscommon_resman_get_resource_attr_name(resource_id, attr_id), attr_id); return ret; } @@ -705,7 +600,6 @@ static int handle_request_get_value_double(struct request_client *client, char * static int handle_request_get_value_string(struct request_client *client, char *args, char *value) { - struct syscommon_resman_resource *res; int resource_id, ret; u_int64_t attr_id; @@ -724,19 +618,12 @@ static int handle_request_get_value_string(struct request_client *client, char * return -EINVAL; } - res = get_resource_by_id(client, resource_id); - if (!res) { - _E("failed to get resource, client(%d) | res:id(%d)\n", - client->socket_fd, resource_id); - return -EINVAL; - } - - ret = syscommon_resman_get_resource_attr_string(res, attr_id, value); + ret = syscommon_resman_get_resource_attr_string(resource_id, attr_id, value); if (ret < 0) { _E("failed to get string value, client(%d) | res:name(%s)id(%d) | attr:name(%s)id(%"PRId64")\n", client->socket_fd, - syscommon_resman_get_resource_name(res), resource_id, - syscommon_resman_get_resource_attr_name(res, attr_id), attr_id); + syscommon_resman_get_resource_name(resource_id), resource_id, + syscommon_resman_get_resource_attr_name(resource_id, attr_id), attr_id); return ret; } @@ -746,7 +633,6 @@ static int handle_request_get_value_string(struct request_client *client, char * static int handle_request_get_value_array(struct request_client *client, char *args, struct syscommon_resman_array_value **arr) { - struct syscommon_resman_resource *res; int resource_id, ret; u_int64_t attr_id; @@ -765,19 +651,12 @@ handle_request_get_value_array(struct request_client *client, char *args, struct return -EINVAL; } - res = get_resource_by_id(client, resource_id); - if (!res) { - _E("failed to get resource, client(%d) | res:id(%d)\n", - client->socket_fd, resource_id); - return -EINVAL; - } - - ret = syscommon_resman_get_resource_attr_array(res, attr_id, arr); + ret = syscommon_resman_get_resource_attr_array(resource_id, attr_id, arr); if (ret < 0) { _E("failed to get array value, client(%d) | (res:name(%s)id(%d) | attr:name(%s)id(%"PRId64")\n", client->socket_fd, - syscommon_resman_get_resource_name(res), resource_id, - syscommon_resman_get_resource_attr_name(res, attr_id), attr_id); + syscommon_resman_get_resource_name(resource_id), resource_id, + syscommon_resman_get_resource_attr_name(resource_id, attr_id), attr_id); return ret; } @@ -813,7 +692,7 @@ handle_request_get_resource_ts(struct request_client *client, char *args, */ resource_id = atoi(args); - res_inst = get_resource_by_id(client, resource_id); + res_inst = get_resource_instance_by_id(client, resource_id); if (!res_inst) { _E("failed to get resource, client(%d) | res:id(%d)\n", client->socket_fd, resource_id); @@ -824,7 +703,7 @@ handle_request_get_resource_ts(struct request_client *client, char *args, if (ret < 0) { _E("failed to get timestamp value, client(%d) | res:name(%s)id(%d)\n", client->socket_fd, - syscommon_resman_get_resource_name(res_inst->res), resource_id); + syscommon_resman_get_resource_name(res_inst->id), resource_id); return ret; } @@ -1148,7 +1027,7 @@ static void delete_resource_instance(struct resource_instance *res_inst) if (!res_inst) return; - syscommon_resman_delete_resource(res_inst->res); + syscommon_resman_delete_resource(res_inst->id); free(res_inst); } @@ -1290,29 +1169,6 @@ error_out: return -EIO; } -static void init_resource_id(void) -{ - int val; - struct timeval tv; - - /* - * Initial g_resource_id is set by a combination of - * tv_sec and tv_usec values of gettimeofday(). - * It ensures that PASS assigns a unique resource id - * for each create_resource request. - * - * Even PASS is restarted, a newly initialized value - * of g_resource_id reflects the current value of - * gettimeofday(). Thus, the uniqueness in resource - * id is kept unless the number of created resources - * crosses the time consumed (in msecs) before - * restarted. - */ - gettimeofday(&tv, NULL); - val = tv.tv_sec * 1000 + tv.tv_usec / 1000; - g_resource_id = clear_sign_bit(val); -} - static int request_server_func(void *ctx, void **result) { struct sockaddr_un unix_address; @@ -1328,8 +1184,6 @@ static int request_server_func(void *ctx, void **result) if (!g_request_server_run) return THREAD_RETURN_DONE; - init_resource_id(); - /* 0. initialize server socket */ ret = init_unix_socket(&server_unix_socket, &unix_address, &unix_addrlen); if (ret < 0) |