#define REQUEST_SERVER_IP "127.0.0.1"
#define REQUEST_SERVER_PORT 10001
-extern char *program_invocation_name;
-
#ifndef EXPORT
#define EXPORT __attribute__ ((visibility("default")))
#endif
return NULL;
}
-static int handle_resource_attr(int request, int id, int resource_id, u_int64_t attr_mask)
+struct request_data {
+ int request;
+ int client_id;
+ int resource_id;
+ int resource_type;
+ u_int64_t ctrl_id;
+ int ctrl_value;
+ u_int64_t attr_mask;
+ u_int64_t attr_id;
+
+ int32_t value_int32;
+ u_int32_t value_uint32;
+ int64_t value_int64;
+ u_int64_t value_uint64;
+ double value_double;
+ char value_string[BUFF_MAX];
+ int64_t ts_start;
+ int64_t ts_end;
+};
+
+static inline int handle_request(struct request_data *data)
{
char buffer[GENERIC_BUFF_MAX + 1];
int buffer_len;
int response_req;
+ int response_ret;
int ret;
- buffer_len = sprintf(buffer, "%d$%d$%"PRIu64,
- request, resource_id, attr_mask);
- if (send(id, buffer, buffer_len, 0) < 0) {
- _E("[libpass] error occurred while sending buffer");
+ if (!data)
+ return -EINVAL;
+
+ /* Make buffer with struct request_data according to request */
+ switch (data->request) {
+ case REQUEST_UPDATE_RESOURCE_ALL:
+ buffer_len = sprintf(buffer, "%d", data->request);
+ break;
+ case REQUEST_GET_VALUE_INT:
+ case REQUEST_GET_VALUE_INT64:
+ case REQUEST_GET_VALUE_UINT:
+ case REQUEST_GET_VALUE_UINT64:
+ case REQUEST_GET_VALUE_DOUBLE:
+ case REQUEST_GET_VALUE_STRING:
+ case REQUEST_IS_RESOURCE_ATTR_SUPPORTED:
+ buffer_len = sprintf(buffer, "%d$%d$%"PRIu64,
+ data->request, data->resource_id, data->attr_id);
+ break;
+ case REQUEST_UPDATE_RESOURCE:
+ case REQUEST_DELETE_RESOURCE:
+ buffer_len = sprintf(buffer, "%d$%d",
+ data->request, data->resource_id);
+ break;
+ case REQUEST_CREATE_RESOURCE:
+ case REQUEST_GET_RESOURCE_COUNT:
+ buffer_len = sprintf(buffer, "%d$%d",
+ data->request, data->resource_type);
+ break;
+ case REQUEST_SET_RESOURCE_CTRL:
+ buffer_len = sprintf(buffer, "%d$%d$%"PRIu64"$%d",
+ data->request, data->resource_id,
+ data->ctrl_id, data->ctrl_value);
+ break;
+ case REQUEST_SET_RESOURCE_ATTR:
+ case REQUEST_UNSET_RESOURCE_ATTR:
+ buffer_len = sprintf(buffer, "%d$%d$%"PRIu64,
+ data->request, data->resource_id, data->attr_mask);
+ break;
+ case REQUEST_GET_RESOURCE_TS:
+ buffer_len = sprintf(buffer, "%d$%d",
+ data->request, data->resource_id);
+ break;
+ default:
+ _E("[libpass] Unknown request type, client(%d) | request(%d)",
+ data->client_id, data->request);
+ return -EINVAL;
+ }
+
+ /* Send request to resource-moniotor */
+ if (send(data->client_id, buffer, buffer_len, 0) < 0) {
+ _E("[libpass] failed to send request, client(%d) | request(%35s) | res,id(%d)type(%d) | ctrl,id(%"PRId64")val(%d) ",
+ data->client_id, request_name[data->request],
+ data->resource_id, data->resource_type,
+ data->ctrl_id, data->ctrl_value);
return -EIO;
}
- /* wait for response */
- buffer_len = recv(id, buffer, GENERIC_BUFF_MAX, 0);
+ /* Receive response from resource-moniotor */
+ buffer_len = recv(data->client_id, buffer, GENERIC_BUFF_MAX, 0);
if (buffer_len <= 0) {
- _E("[libpass] socket disconnected");
+ _E("[libpass] failed to receive response, client(%d) | request(%35s) | res,id(%d)type(%d) | ctrl,id(%"PRId64")val(%d) ",
+ data->client_id, request_name[data->request],
+ data->resource_id, data->resource_type,
+ data->ctrl_id, data->ctrl_value);
return -EIO;
}
-
buffer[buffer_len] = '\0';
- if (sscanf(buffer, "%d$%d", &response_req, &ret) < 2)
- return -EINVAL;
- if (response_req != request) {
- _E("[libpass] wrong response");
+ /* Parse received response from resource-monitor */
+ ret = 0;
+ switch (data->request) {
+ case REQUEST_GET_VALUE_INT:
+ if (sscanf(buffer, "%d$%d$%d", &response_req,
+ &data->value_int32, &response_ret) < 3)
+ ret = EINVAL;
+ break;
+ case REQUEST_GET_VALUE_UINT:
+ if (sscanf(buffer, "%d$%u$%d", &response_req,
+ &data->value_uint32, &response_ret) < 3)
+ ret = -EINVAL;
+ break;
+ case REQUEST_GET_VALUE_INT64:
+ if (sscanf(buffer, "%d$%"PRId64"$%d", &response_req,
+ &data->value_int64, &response_ret) < 3)
+ return -EINVAL;
+ break;
+ case REQUEST_GET_VALUE_UINT64:
+ if (sscanf(buffer, "%d$%"PRIu64"$%d", &response_req,
+ &data->value_uint64, &response_ret) < 3)
+ ret = -EINVAL;
+ break;
+ case REQUEST_GET_VALUE_DOUBLE:
+ if (sscanf(buffer, "%d$%lf$%d", &response_req,
+ &data->value_double, &response_ret) < 3)
+ ret = -EINVAL;
+ break;
+ case REQUEST_GET_VALUE_STRING:
+ if (sscanf(buffer, "%d$%[^$]$%d", &response_req,
+ data->value_string, &response_ret) < 3)
+ ret = -EINVAL;
+ break;
+ case REQUEST_GET_RESOURCE_TS:
+ if (sscanf(buffer, "%d$%"PRId64"$%"PRId64"$%d", &response_req,
+ &data->ts_start, &data->ts_end, &response_ret) < 4)
+ ret =-EINVAL;
+ break;
+ default:
+ if (sscanf(buffer, "%d$%d", &response_req, &response_ret) < 2)
+ ret = -EINVAL;
+ break;
+ }
+
+ if (ret < 0) {
+ _E("[libpass] failed to receive response, client(%d) | request(%35s) | res,id(%d)type(%d) | ctrl,id(%"PRId64")val(%d) ",
+ data->client_id, request_name[data->request],
+ data->resource_id, data->resource_type,
+ data->ctrl_id, data->ctrl_value);
+ return ret;
+ }
+
+ if (response_ret < 0) {
+ _E("[libpass] failed to receive response, client(%d) | request(%35s) | res,id(%d)type(%d) | ctrl,id(%"PRId64")val(%d) ",
+ data->client_id, request_name[data->request],
+ data->resource_id, data->resource_type,
+ data->ctrl_id, data->ctrl_value);
+ return response_ret;
+ }
+
+ /* Validate response request from resource-monitor */
+ if (response_req != data->request) {
+ _E("[libpass] failed to receive response, client(%d) | request(%35s) | res,id(%d)type(%d) | ctrl,id(%"PRId64")val(%d) ",
+ data->client_id, request_name[data->request],
+ data->resource_id, data->resource_type,
+ data->ctrl_id, data->ctrl_value);
return -EINVAL;
}
- return ret;
+ return response_ret;
}
EXPORT
EXPORT
int pass_resource_monitor_get_resource_count(int id, int resource_type)
{
- char buffer[GENERIC_BUFF_MAX + 1];
- int buffer_len;
- int response_req;
- int ret;
+ struct request_data request = {
+ .request = REQUEST_GET_RESOURCE_COUNT,
+ .client_id = id,
+ .resource_type = resource_type,
+ };
- buffer_len = sprintf(buffer, "%d$%d",
- REQUEST_GET_RESOURCE_COUNT, resource_type);
- if (send(id, buffer, buffer_len, 0) < 0) {
- _E("[libpass] error occurred while sending buffer");
- return -EIO;
- }
-
- /* wait for response */
- buffer_len = recv(id, buffer, GENERIC_BUFF_MAX, 0);
- if (buffer_len <= 0) {
- _E("[libpass] socket disconnected");
- return -EIO;
- }
-
- buffer[buffer_len] = '\0';
- if (sscanf(buffer, "%d$%d", &response_req, &ret) < 2)
- return -EINVAL;
-
- if (response_req != REQUEST_GET_RESOURCE_COUNT) {
- _E("[libpass] wrong response");
- return -EINVAL;
- }
-
- return ret;
+ return handle_request(&request);
}
EXPORT
int pass_resource_monitor_create_resource(int id, int resource_type)
{
- char buffer[GENERIC_BUFF_MAX + 1];
- int buffer_len;
- int response_req;
- int ret;
+ struct request_data request = {
+ .request = REQUEST_CREATE_RESOURCE,
+ .client_id = id,
+ .resource_type = resource_type,
+ };
- buffer_len = sprintf(buffer, "%d$%d", REQUEST_CREATE_RESOURCE, resource_type);
- if (send(id, buffer, buffer_len, 0) < 0) {
- _E("[libpass] error occurred while sending buffer for create resource");
- return -EIO;
- }
-
- /* wait for response */
- buffer_len = recv(id, buffer, GENERIC_BUFF_MAX, 0);
- if (buffer_len <= 0) {
- _E("[libpass] socket disconnected");
- return -EIO;
- }
-
- buffer[buffer_len] = '\0';
- if (sscanf(buffer, "%d$%d", &response_req, &ret) < 2)
- return -EINVAL;
-
- if (response_req != REQUEST_CREATE_RESOURCE) {
- _E("wrong response");
- return -EINVAL;
- }
-
- return ret;
+ return handle_request(&request);
}
EXPORT
int pass_resource_monitor_delete_resource(int id, int resource_id)
{
- char buffer[GENERIC_BUFF_MAX + 1];
- int buffer_len;
- int response_req;
- int ret;
-
- buffer_len = sprintf(buffer, "%d$%d", REQUEST_DELETE_RESOURCE, resource_id);
- if (send(id, buffer, buffer_len, 0) < 0) {
- _E("[libpass] error occurred while sending buffer for create resource");
- return -EIO;
- }
-
- /* wait for response */
- buffer_len = recv(id, buffer, GENERIC_BUFF_MAX, 0);
- if (buffer_len <= 0) {
- _E("[libpass] socket disconnected");
- return -EIO;
- }
-
- buffer[buffer_len] = '\0';
- if (sscanf(buffer, "%d$%d", &response_req, &ret) < 2)
- return -EINVAL;
+ struct request_data request = {
+ .request = REQUEST_DELETE_RESOURCE,
+ .client_id = id,
+ .resource_id = resource_id,
+ };
- if (response_req != REQUEST_DELETE_RESOURCE) {
- _E("wrong response");
- return -EINVAL;
- }
-
- return ret;
+ return handle_request(&request);
}
EXPORT
int pass_resource_monitor_set_resource_ctrl(int id, int resource_id, u_int64_t ctrl_id, int value)
{
- char buffer[GENERIC_BUFF_MAX + 1];
- int buffer_len;
- int response_req;
- int ret;
-
- buffer_len = sprintf(buffer, "%d$%d$%"PRIu64"$%d",
- REQUEST_SET_RESOURCE_CTRL, resource_id, ctrl_id, value);
- if (send(id, buffer, buffer_len, 0) < 0) {
- _E("[libpass] error occurred while sending buffer");
- return -EIO;
- }
-
- /* wait for response */
- buffer_len = recv(id, buffer, GENERIC_BUFF_MAX, 0);
- if (buffer_len <= 0) {
- _E("[libpass] socket disconnected");
- return -EIO;
- }
-
- buffer[buffer_len] = '\0';
- if (sscanf(buffer, "%d$%d", &response_req, &ret) < 2)
- return -EINVAL;
+ struct request_data request = {
+ .request = REQUEST_SET_RESOURCE_CTRL,
+ .client_id = id,
+ .resource_id = resource_id,
+ .ctrl_id = ctrl_id,
+ .ctrl_value = value,
+ };
- if (response_req != REQUEST_SET_RESOURCE_CTRL) {
- _E("[libpass] wrong response");
- return -EINVAL;
- }
-
- return ret;
+ return handle_request(&request);
}
EXPORT
int pass_resource_monitor_set_resource_attr(int id, int resource_id, u_int64_t attr_mask)
{
- return handle_resource_attr(REQUEST_SET_RESOURCE_ATTR, id, resource_id, attr_mask);
+ struct request_data request = {
+ .request = REQUEST_SET_RESOURCE_ATTR,
+ .client_id = id,
+ .resource_id = resource_id,
+ .attr_mask = attr_mask,
+ };
+
+ return handle_request(&request);
}
EXPORT
int pass_resource_monitor_unset_resource_attr(int id, int resource_id, u_int64_t attr_mask)
{
- return handle_resource_attr(REQUEST_UNSET_RESOURCE_ATTR, id, resource_id, attr_mask);
+ struct request_data request = {
+ .request = REQUEST_UNSET_RESOURCE_ATTR,
+ .client_id = id,
+ .resource_id = resource_id,
+ .attr_mask = attr_mask,
+ };
+
+ return handle_request(&request);
}
EXPORT
bool pass_resource_monitor_is_resource_attr_supported(int id, int resource_id, u_int64_t attr_id)
{
- char buffer[GENERIC_BUFF_MAX + 1];
- int buffer_len;
- int response_req;
+ struct request_data request = {
+ .request = REQUEST_IS_RESOURCE_ATTR_SUPPORTED,
+ .client_id = id,
+ .resource_id = resource_id,
+ .attr_id = attr_id,
+ };
int ret;
- buffer_len = sprintf(buffer, "%d$%d$%"PRIu64"",
- REQUEST_IS_RESOURCE_ATTR_SUPPORTED, resource_id, attr_id);
- if (send(id, buffer, buffer_len, 0) < 0) {
- _E("[libpass] error occurred while sending buffer");
- return false;
- }
-
- /* wait for response */
- buffer_len = recv(id, buffer, GENERIC_BUFF_MAX, 0);
- if (buffer_len <= 0) {
- _E("[libpass] socket disconnected");
- return false;
- }
-
- buffer[buffer_len] = '\0';
- if (sscanf(buffer, "%d$%d", &response_req, &ret) < 2)
- return false;
-
- if (ret < 0)
- return false;
-
- if (response_req != REQUEST_IS_RESOURCE_ATTR_SUPPORTED) {
- _E("[libpass] wrong response");
- return false;
- }
-
- return (bool)ret;
+ ret = handle_request(&request);
+ return (ret < 0) ? false : (bool)ret;
}
EXPORT
int pass_resource_monitor_update(int id)
{
- char buffer[GENERIC_BUFF_MAX + 1];
- int buffer_len;
- int response_req;
- int ret;
-
- buffer_len = sprintf(buffer, "%d", REQUEST_UPDATE_RESOURCE_ALL);
- if (send(id, buffer, buffer_len, 0) < 0) {
- _E("[libpass] error occurred while sending buffer");
- return -EIO;
- }
+ struct request_data request = {
+ .request = REQUEST_UPDATE_RESOURCE_ALL,
+ .client_id = id,
+ };
- /* wait for response */
- buffer_len = recv(id, buffer, GENERIC_BUFF_MAX, 0);
- if (buffer_len <= 0) {
- _E("[libpass] socket disconnected");
- return -EIO;
- }
-
- buffer[buffer_len] = '\0';
- if (sscanf(buffer, "%d$%d", &response_req, &ret) < 2)
- return -EINVAL;
-
- if (response_req != REQUEST_UPDATE_RESOURCE_ALL) {
- _E("[libpass] wrong response");
- return -EINVAL;
- }
-
- return ret;
+ return handle_request(&request);
}
EXPORT
int pass_resource_monitor_update_resource(int id, int resource_id)
{
- char buffer[GENERIC_BUFF_MAX + 1];
- int buffer_len;
- int response_req;
- int ret;
+ struct request_data request = {
+ .request = REQUEST_UPDATE_RESOURCE,
+ .client_id = id,
+ .resource_id = resource_id,
+ };
- buffer_len = sprintf(buffer, "%d$%d", REQUEST_UPDATE_RESOURCE, resource_id);
- if (send(id, buffer, buffer_len, 0) < 0) {
- _E("[libpass] error occurred while sending buffer");
- return -EIO;
- }
-
- /* wait for response */
- buffer_len = recv(id, buffer, GENERIC_BUFF_MAX, 0);
- if (buffer_len <= 0) {
- _E("[libpass] socket disconnected");
- return -EIO;
- }
-
- buffer[buffer_len] = '\0';
- if (sscanf(buffer, "%d$%d", &response_req, &ret) < 2)
- return -EINVAL;
-
- if (response_req != REQUEST_UPDATE_RESOURCE) {
- _E("[libpass] wrong response");
- return -EINVAL;
- }
-
- return ret;
+ return handle_request(&request);
}
-
static int pass_resource_monitor_get_json(int id, char *json_string, int request_type, ...)
{
int buffer_len, response_req, ret, resource_id;
EXPORT
int pass_resource_monitor_get_value_int(int id, int resource_id, u_int64_t attr_id, int32_t *value)
{
- char buffer[GENERIC_BUFF_MAX + 1];
- int buffer_len;
- int response_req;
+ struct request_data request = {
+ .request = REQUEST_GET_VALUE_INT,
+ .client_id = id,
+ .resource_id = resource_id,
+ .attr_id = attr_id,
+ };
int ret;
- buffer_len = sprintf(buffer, "%d$%d$%"PRIu64,
- REQUEST_GET_VALUE_INT, resource_id, attr_id);
- if (send(id, buffer, buffer_len, 0) < 0) {
- _E("[libpass] error occurred while sending buffer");
- return -EIO;
- }
-
- /* wait for response */
- buffer_len = recv(id, buffer, GENERIC_BUFF_MAX, 0);
- if (buffer_len <= 0) {
- _E("[libpass] socket disconnected");
- return -EIO;
- }
-
- buffer[buffer_len] = '\0';
- if (sscanf(buffer, "%d$%d$%d", &response_req, value, &ret) < 3)
- return -EINVAL;
-
- if (response_req != REQUEST_GET_VALUE_INT) {
- _E("[libpass] wrong response");
- return -EINVAL;
- }
+ ret = handle_request(&request);
+ if (ret < 0)
+ return ret;
- return ret;
+ *value = request.value_int32;
+ return 0;
}
EXPORT
int pass_resource_monitor_get_value_int64(int id, int resource_id, u_int64_t attr_id, int64_t *value)
{
- char buffer[GENERIC_BUFF_MAX + 1];
- int buffer_len;
- int response_req;
+ struct request_data request = {
+ .request = REQUEST_GET_VALUE_INT64,
+ .client_id = id,
+ .resource_id = resource_id,
+ .attr_id = attr_id,
+ };
int ret;
- buffer_len = sprintf(buffer, "%d$%d$%"PRIu64,
- REQUEST_GET_VALUE_INT64, resource_id, attr_id);
- if (send(id, buffer, buffer_len, 0) < 0) {
- _E("[libpass] error occurred while sending buffer");
- return -EIO;
- }
-
- /* wait for response */
- buffer_len = recv(id, buffer, GENERIC_BUFF_MAX, 0);
- if (buffer_len <= 0) {
- _E("[libpass] socket disconnected");
- return -EIO;
- }
-
- buffer[buffer_len] = '\0';
- if (sscanf(buffer, "%d$%"PRId64"$%d", &response_req, value, &ret) < 3)
- return -EINVAL;
-
- if (response_req != REQUEST_GET_VALUE_INT64) {
- _E("[libpass] wrong response");
- return -EINVAL;
- }
+ ret = handle_request(&request);
+ if (ret < 0)
+ return ret;
- return ret;
+ *value = request.value_int64;
+ return 0;
}
EXPORT
int pass_resource_monitor_get_value_uint(int id, int resource_id, u_int64_t attr_id, u_int32_t *value)
{
- char buffer[GENERIC_BUFF_MAX + 1];
- int buffer_len;
- int response_req;
+ struct request_data request = {
+ .request = REQUEST_GET_VALUE_UINT,
+ .client_id = id,
+ .resource_id = resource_id,
+ .attr_id = attr_id,
+ };
int ret;
- buffer_len = sprintf(buffer, "%d$%d$%"PRIu64,
- REQUEST_GET_VALUE_UINT, resource_id, attr_id);
- if (send(id, buffer, buffer_len, 0) < 0) {
- _E("[libpass] error occurred while sending buffer");
- return -EIO;
- }
-
- /* wait for response */
- buffer_len = recv(id, buffer, GENERIC_BUFF_MAX, 0);
- if (buffer_len <= 0) {
- _E("[libpass] socket disconnected");
- return -EIO;
- }
-
- buffer[buffer_len] = '\0';
- if (sscanf(buffer, "%d$%u$%d", &response_req, value, &ret) < 3)
- return -EINVAL;
-
- if (response_req != REQUEST_GET_VALUE_UINT) {
- _E("[libpass] wrong response");
- return -EINVAL;
- }
+ ret = handle_request(&request);
+ if (ret < 0)
+ return ret;
- return ret;
+ *value = request.value_uint32;
+ return 0;
}
EXPORT
int pass_resource_monitor_get_value_uint64(int id, int resource_id, u_int64_t attr_id, u_int64_t *value)
{
- char buffer[GENERIC_BUFF_MAX + 1];
- int buffer_len;
- int response_req;
+ struct request_data request = {
+ .request = REQUEST_GET_VALUE_UINT64,
+ .client_id = id,
+ .resource_id = resource_id,
+ .attr_id = attr_id,
+ };
int ret;
- buffer_len = sprintf(buffer, "%d$%d$%"PRIu64,
- REQUEST_GET_VALUE_UINT64, resource_id, attr_id);
- if (send(id, buffer, buffer_len, 0) < 0) {
- _E("[libpass] error occurred while sending buffer");
- return -EIO;
- }
-
- /* wait for response */
- buffer_len = recv(id, buffer, GENERIC_BUFF_MAX, 0);
- if (buffer_len <= 0) {
- _E("[libpass] socket disconnected");
- return -EIO;
- }
-
- buffer[buffer_len] = '\0';
- if (sscanf(buffer, "%d$%"PRIu64"$%d", &response_req, value, &ret) < 3)
- return -EINVAL;
-
- if (response_req != REQUEST_GET_VALUE_UINT64) {
- _E("[libpass] wrong response");
- return -EINVAL;
- }
+ ret = handle_request(&request);
+ if (ret < 0)
+ return ret;
- return ret;
+ *value = request.value_uint64;
+ return 0;
}
EXPORT
int pass_resource_monitor_get_value_double(int id, int resource_id, u_int64_t attr_id, double *value)
{
- char buffer[GENERIC_BUFF_MAX + 1];
- int buffer_len;
- int response_req;
+ struct request_data request = {
+ .request = REQUEST_GET_VALUE_DOUBLE,
+ .client_id = id,
+ .resource_id = resource_id,
+ .attr_id = attr_id,
+ };
int ret;
- buffer_len = sprintf(buffer, "%d$%d$%"PRIu64,
- REQUEST_GET_VALUE_DOUBLE, resource_id, attr_id);
- if (send(id, buffer, buffer_len, 0) < 0) {
- _E("[libpass] error occurred while sending buffer");
- return -EIO;
- }
-
- /* wait for response */
- buffer_len = recv(id, buffer, GENERIC_BUFF_MAX, 0);
- if (buffer_len <= 0) {
- _E("[libpass] socket disconnected");
- return -EIO;
- }
-
- buffer[buffer_len] = '\0';
- if (sscanf(buffer, "%d$%lf$%d", &response_req, value, &ret) < 3)
- return -EINVAL;
-
- if (response_req != REQUEST_GET_VALUE_DOUBLE) {
- _E("[libpass] wrong response");
- return -EINVAL;
- }
+ ret = handle_request(&request);
+ if (ret < 0)
+ return ret;
- return ret;
+ *value = request.value_double;
+ return 0;
}
EXPORT
int pass_resource_monitor_get_value_string(int id, int resource_id, u_int64_t attr_id, char **value)
{
- char buffer[GENERIC_BUFF_MAX + 1];
- char value_string[BUFF_MAX];
- int buffer_len;
- int response_req;
+ struct request_data request = {
+ .request = REQUEST_GET_VALUE_STRING,
+ .client_id = id,
+ .resource_id = resource_id,
+ .attr_id = attr_id,
+ };
int ret;
- if (!value)
- return -EINVAL;
-
- buffer_len = sprintf(buffer, "%d$%d$%"PRIu64,
- REQUEST_GET_VALUE_STRING, resource_id, attr_id);
- if (send(id, buffer, buffer_len, 0) < 0) {
- _E("[libpass] error occurred while sending buffer");
- return -EIO;
- }
-
- /* wait for response */
- buffer_len = recv(id, buffer, GENERIC_BUFF_MAX, 0);
- if (buffer_len <= 0) {
- _E("[libpass] socket disconnected");
- return -EIO;
- }
-
- buffer[buffer_len] = '\0';
- if (sscanf(buffer, "%d$%[^$]$%d", &response_req, value_string, &ret) < 3)
- return -EINVAL;
-
- if (response_req != REQUEST_GET_VALUE_STRING) {
- _E("[libpass] wrong response");
- return -EINVAL;
- }
-
- *value = g_strdup(value_string);
+ ret = handle_request(&request);
+ if (ret < 0)
+ return ret;
- return ret;
+ *value = g_strdup(request.value_string);
+ return 0;
}
static int
int pass_resource_monitor_get_resource_timestamp(int id, int res_id, int64_t *start, int64_t *end)
{
- char buffer[GENERIC_BUFF_MAX + 1];
- int buffer_len;
- int response_req;
+ struct request_data request = {
+ .request = REQUEST_GET_RESOURCE_TS,
+ .client_id = id,
+ .resource_id = res_id,
+ };
int ret;
- buffer_len = sprintf(buffer, "%d$%d", REQUEST_GET_RESOURCE_TS, res_id);
- if (send(id, buffer, buffer_len, 0) < 0) {
- _E("[libpass] error occurred while sending buffer");
- return -EIO;
- }
-
- /* wait for response */
- buffer_len = recv(id, buffer, GENERIC_BUFF_MAX, 0);
- if (buffer_len <= 0) {
- _E("[libpass] socket disconnected");
- return -EIO;
- }
- buffer[buffer_len] = '\0';
-
- if (sscanf(buffer, "%d$%"PRId64"$%"PRId64"$%d", &response_req, start, end, &ret) < 4)
- return -EINVAL;
-
- if (response_req != REQUEST_GET_RESOURCE_TS) {
- _E("[libpass] wrong response");
- return -EINVAL;
- }
+ ret = handle_request(&request);
+ if (ret < 0)
+ return ret;
- return ret;
+ *start = request.ts_start;
+ *end = request.ts_end;
+ return 0;
}