# define EXPORT __attribute__((visibility("default")))
#endif
+#define SET_SECURITY_MODE "set_security_mode"
+#define UPDATE_CLIENT_LABEL "update_client_label"
+
struct bxt_req {
guint32 msgid;
struct buxton_layer *layer;
free(req);
}
-static int send_req(struct buxton_client *client, const struct request *rqst)
+static int get_response(struct buxton_client *client, guint32 msgid,
+ struct response *resp)
+{
+ int ret;
+
+ ret = wait_msg(client, msgid);
+ if (ret != BUXTON_ERROR_NONE)
+ return ret;
+
+ return resp->res;
+}
+static int send_req(struct buxton_client *client, const struct request *rqst,
+ struct bxt_req *req, struct bxt_req **new_req)
{
int r;
uint8_t *data;
int len;
+ pthread_mutex_lock(&client->lock);
+ g_hash_table_insert(client->req_cbs, GUINT_TO_POINTER(req->msgid), req);
+
if (client->fd < 0) {
bxt_err("Invalid parameter(%d)", client->fd);
- return BUXTON_ERROR_INVALID_PARAMETER;
+ r = BUXTON_ERROR_INVALID_PARAMETER;
+ goto out;
}
r = serialz_request(rqst, &data, &len);
if (r != BUXTON_ERROR_NONE) {
bxt_err("send req: serialize errno %d", r);
- return r;
+ goto out;
}
r = proto_send(client->fd, rqst->type, data, len);
free(data);
+out:
+ if (r == BUXTON_ERROR_NONE)
+ *new_req = req;
+ else
+ g_hash_table_remove(client->req_cbs, GUINT_TO_POINTER(req->msgid));
+
+ pthread_mutex_unlock(&client->lock);
+
return r;
}
+static inline void set_rqst(enum message_type type, struct bxt_req *req,
+ char *key, struct buxton_value *val,
+ char *rpriv, char *wpriv,
+ struct request *rqst)
+{
+ rqst->type = type;
+ rqst->msgid = req->msgid;
+ rqst->layer = req->layer;
+ rqst->key = key;
+ rqst->val = val;
+ rqst->rpriv = rpriv;
+ rqst->wpriv = wpriv;
+}
+
static int set_value(struct buxton_client *client,
const struct buxton_layer *layer, const char *key,
const struct buxton_value *val,
if (r != BUXTON_ERROR_NONE)
return r;
- memset(&rqst, 0, sizeof(rqst));
- rqst.type = MSG_SET;
- rqst.msgid = req->msgid;
- rqst.layer = req->layer;
- rqst.key = (char *)key;
- rqst.val = (struct buxton_value *)val;
-
- pthread_mutex_lock(&client->lock);
- g_hash_table_insert(client->req_cbs, GUINT_TO_POINTER(req->msgid), req);
-
- r = send_req(client, &rqst);
- if (r != BUXTON_ERROR_NONE) {
- g_hash_table_remove(client->req_cbs,
- GUINT_TO_POINTER(req->msgid));
- pthread_mutex_unlock(&client->lock);
- return r;
- }
+ set_rqst(MSG_SET, req, (char *)key, (struct buxton_value *)val,
+ NULL, NULL, &rqst);
+ r = send_req(client, &rqst, req, new_req);
- *new_req = req;
- pthread_mutex_unlock(&client->lock);
- return BUXTON_ERROR_NONE;
+ return r;
}
EXPORT int buxton_set_value(struct buxton_client *client,
pthread_mutex_lock(&clients_lock);
ret = set_value(client, layer, key, val, callback, user_data, &req);
- if (ret != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(ret);
- return -1;
- }
+ if (ret != BUXTON_ERROR_NONE)
+ ret = -1;
+
+ buxton_err_set_errno(ret);
pthread_mutex_unlock(&clients_lock);
- return 0;
+ return ret;
}
static void set_value_sync_cb(int status, const struct buxton_layer *layer,
pthread_mutex_lock(&clients_lock);
r = set_value(client, layer, key, val, set_value_sync_cb, &resp, &req);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ if (r != BUXTON_ERROR_NONE)
+ goto out;
- r = wait_msg(client, req->msgid);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ r = get_response(client, req->msgid, &resp);
- if (resp.res != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(resp.res);
- return -1;
- }
+out:
+ buxton_err_set_errno(r);
+ if (r != BUXTON_ERROR_NONE)
+ r = -1;
pthread_mutex_unlock(&clients_lock);
- return 0;
+ return r;
}
static int get_value(struct buxton_client *client,
if (r != BUXTON_ERROR_NONE)
return r;
- memset(&rqst, 0, sizeof(rqst));
- rqst.type = MSG_GET;
- rqst.msgid = req->msgid;
- rqst.layer = req->layer;
- rqst.key = (char *)key;
+ set_rqst(MSG_GET, req, (char *)key, NULL,
+ NULL, NULL, &rqst);
+ r = send_req(client, &rqst, req, new_req);
- pthread_mutex_lock(&client->lock);
- g_hash_table_insert(client->req_cbs, GUINT_TO_POINTER(req->msgid), req);
-
- r = send_req(client, &rqst);
- if (r != BUXTON_ERROR_NONE) {
- g_hash_table_remove(client->req_cbs,
- GUINT_TO_POINTER(req->msgid));
- pthread_mutex_unlock(&client->lock);
- return r;
- }
-
- *new_req = req;
- pthread_mutex_unlock(&client->lock);
- return BUXTON_ERROR_NONE;
+ return r;
}
EXPORT int buxton_get_value(struct buxton_client *client,
pthread_mutex_lock(&clients_lock);
r = get_value(client, layer, key, get_value_sync_cb, &resp, &req);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
-
- r = wait_msg(client, req->msgid);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ if (r != BUXTON_ERROR_NONE)
+ goto out;
- if (resp.res != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(resp.res);
- return -1;
- }
+ r = get_response(client, req->msgid, &resp);
- *val = resp.val;
+out:
+ buxton_err_set_errno(r);
+ if (r != BUXTON_ERROR_NONE)
+ r = -1;
+ else
+ *val = resp.val;
pthread_mutex_unlock(&clients_lock);
- return 0;
+ return r;
}
static int list_keys(struct buxton_client *client,
if (r != BUXTON_ERROR_NONE)
return r;
- memset(&rqst, 0, sizeof(rqst));
- rqst.type = MSG_LIST;
- rqst.msgid = req->msgid;
- rqst.layer = req->layer;
+ set_rqst(MSG_LIST, req, NULL, NULL,
+ NULL, NULL, &rqst);
+ r = send_req(client, &rqst, req, new_req);
- pthread_mutex_lock(&client->lock);
- g_hash_table_insert(client->req_cbs, GUINT_TO_POINTER(req->msgid), req);
-
- r = send_req(client, &rqst);
- if (r != BUXTON_ERROR_NONE) {
- g_hash_table_remove(client->req_cbs,
- GUINT_TO_POINTER(req->msgid));
- pthread_mutex_unlock(&client->lock);
- return r;
- }
-
- *new_req = req;
- pthread_mutex_unlock(&client->lock);
-
- return BUXTON_ERROR_NONE;
+ return r;
}
EXPORT int buxton_list_keys(struct buxton_client *client,
pthread_mutex_lock(&clients_lock);
r = list_keys(client, layer, list_keys_sync_cb, &resp, &req);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ if (r != BUXTON_ERROR_NONE)
+ goto out;
+
+ r = get_response(client, req->msgid, &resp);
- r = wait_msg(client, req->msgid);
+out:
+ buxton_err_set_errno(r);
if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ r = -1;
+ } else {
+ *names = resp.names;
- if (resp.res != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(resp.res);
- return -1;
+ if (len)
+ *len = resp.nmlen;
}
- *names = resp.names;
-
- if (len)
- *len = resp.nmlen;
-
pthread_mutex_unlock(&clients_lock);
- return 0;
+ return r;
}
static gboolean call_resp_cb(gpointer data)
req->notify = notify;
req->notify_data = notify_data;
- memset(&rqst, 0, sizeof(rqst));
- rqst.type = MSG_NOTIFY;
- rqst.msgid = req->msgid;
- rqst.layer = req->layer;
- rqst.key = (char *)key;
-
- pthread_mutex_lock(&client->lock);
- g_hash_table_insert(client->req_cbs, GUINT_TO_POINTER(req->msgid), req);
-
- r = send_req(client, &rqst);
- if (r != BUXTON_ERROR_NONE) {
- g_hash_table_remove(client->req_cbs,
- GUINT_TO_POINTER(req->msgid));
- pthread_mutex_unlock(&client->lock);
- return r;
- }
-
- *new_req = req;
- pthread_mutex_unlock(&client->lock);
+ set_rqst(MSG_NOTIFY, req, (char *)key, NULL,
+ NULL, NULL, &rqst);
+ r = send_req(client, &rqst, req, new_req);
- return BUXTON_ERROR_NONE;
+ return r;
}
EXPORT int buxton_register_notification(struct buxton_client *client,
r = register_noti(client, layer, key, notify, notify_data,
reg_noti_sync_cb, &resp, &req);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ if (r != BUXTON_ERROR_NONE)
+ goto out;
- r = wait_msg(client, req->msgid);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ r = get_response(client, req->msgid, &resp);
- if (resp.res != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(resp.res);
- return -1;
- }
+out:
+ buxton_err_set_errno(r);
+ if (r != BUXTON_ERROR_NONE)
+ r = -1;
pthread_mutex_unlock(&clients_lock);
- return 0;
+ return r;
+
}
static int del_noticb(struct bxt_noti *noti, buxton_notify_callback notify,
if (r != BUXTON_ERROR_NONE)
return r;
- memset(&rqst, 0, sizeof(rqst));
- rqst.type = MSG_UNNOTIFY;
- rqst.msgid = req->msgid;
- rqst.layer = req->layer;
- rqst.key = (char *)key;
-
- pthread_mutex_lock(&client->lock);
- g_hash_table_insert(client->req_cbs, GUINT_TO_POINTER(req->msgid), req);
+ set_rqst(MSG_UNNOTIFY, req, (char *)key, NULL,
+ NULL, NULL, &rqst);
+ r = send_req(client, &rqst, req, new_req);
- r = send_req(client, &rqst);
- if (r != BUXTON_ERROR_NONE) {
- g_hash_table_remove(client->req_cbs,
- GUINT_TO_POINTER(req->msgid));
- pthread_mutex_unlock(&client->lock);
- return r;
- }
-
- *new_req = req;
- pthread_mutex_unlock(&client->lock);
- return BUXTON_ERROR_NONE;
+ return r;
}
EXPORT int buxton_unregister_notification(struct buxton_client *client,
memset(&resp, 0, sizeof(resp));
r = unregister_noti(client, layer, key, unreg_noti_sync_cb, &resp, &req);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ if (r != BUXTON_ERROR_NONE)
+ goto out;
- r = wait_msg(client, req->msgid);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ r = get_response(client, req->msgid, &resp);
- if (resp.res != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(resp.res);
- return -1;
- }
+out:
+ buxton_err_set_errno(r);
+ if (r != BUXTON_ERROR_NONE)
+ r = -1;
pthread_mutex_unlock(&clients_lock);
- return 0;
+ return r;
}
static int create_value(struct buxton_client *client,
if (r != BUXTON_ERROR_NONE)
return r;
- memset(&rqst, 0, sizeof(rqst));
- rqst.type = MSG_CREAT;
- rqst.msgid = req->msgid;
- rqst.layer = req->layer;
- rqst.key = (char *)key;
- rqst.rpriv = (char *)read_privilege;
- rqst.wpriv = (char *)write_privilege;
- rqst.val = (struct buxton_value *)val;
-
- pthread_mutex_lock(&client->lock);
- g_hash_table_insert(client->req_cbs, GUINT_TO_POINTER(req->msgid), req);
-
- r = send_req(client, &rqst);
- if (r != BUXTON_ERROR_NONE) {
- g_hash_table_remove(client->req_cbs,
- GUINT_TO_POINTER(req->msgid));
- pthread_mutex_unlock(&client->lock);
- return r;
- }
+ set_rqst(MSG_CREAT, req, (char *)key, (struct buxton_value *)val,
+ (char *)read_privilege, (char *)write_privilege, &rqst);
+ r = send_req(client, &rqst, req, new_req);
- *new_req = req;
- pthread_mutex_unlock(&client->lock);
- return BUXTON_ERROR_NONE;
+ return r;
}
EXPORT int buxton_create_value(struct buxton_client *client,
pthread_mutex_lock(&clients_lock);
r = create_value(client, layer, key, read_privilege, write_privilege,
val, create_value_sync_cb, &resp, &req);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ if (r != BUXTON_ERROR_NONE)
+ goto out;
- r = wait_msg(client, req->msgid);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ r = get_response(client, req->msgid, &resp);
- if (resp.res != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(resp.res);
- return -1;
- }
+out:
+ buxton_err_set_errno(r);
+ if (r != BUXTON_ERROR_NONE)
+ r = -1;
pthread_mutex_unlock(&clients_lock);
- return 0;
+ return r;
+
}
static int unset_value(struct buxton_client *client,
if (r != BUXTON_ERROR_NONE)
return r;
- memset(&rqst, 0, sizeof(rqst));
- rqst.type = MSG_UNSET;
- rqst.msgid = req->msgid;
- rqst.layer = req->layer;
- rqst.key = (char *)key;
+ set_rqst(MSG_UNSET, req, (char *)key, NULL,
+ NULL, NULL, &rqst);
+ r = send_req(client, &rqst, req, new_req);
- pthread_mutex_lock(&client->lock);
- g_hash_table_insert(client->req_cbs, GUINT_TO_POINTER(req->msgid), req);
-
- r = send_req(client, &rqst);
- if (r != BUXTON_ERROR_NONE) {
- g_hash_table_remove(client->req_cbs,
- GUINT_TO_POINTER(req->msgid));
- pthread_mutex_unlock(&client->lock);
- return r;
- }
-
- *new_req = req;
- pthread_mutex_unlock(&client->lock);
- return BUXTON_ERROR_NONE;
+ return r;
}
EXPORT int buxton_unset_value(struct buxton_client *client,
pthread_mutex_lock(&clients_lock);
r = unset_value(client, layer, key, unset_value_sync_cb, &resp, &req);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ if (r != BUXTON_ERROR_NONE)
+ goto out;
- r = wait_msg(client, req->msgid);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ r = get_response(client, req->msgid, &resp);
- if (resp.res != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(resp.res);
- return -1;
- }
+out:
+ buxton_err_set_errno(r);
+ if (r != BUXTON_ERROR_NONE)
+ r = -1;
pthread_mutex_unlock(&clients_lock);
- return 0;
+ return r;
+
}
static int set_priv(struct buxton_client *client,
if (r != BUXTON_ERROR_NONE)
return r;
- memset(&rqst, 0, sizeof(rqst));
- rqst.type = type == BUXTON_PRIV_READ ? MSG_SET_RP : MSG_SET_WP;
- rqst.msgid = req->msgid;
- rqst.layer = req->layer;
- rqst.key = (char *)key;
- rqst.val = &val;
-
val.type = BUXTON_TYPE_PRIVILEGE;
val.value.s = (char *)privilege;
- pthread_mutex_lock(&client->lock);
- g_hash_table_insert(client->req_cbs, GUINT_TO_POINTER(req->msgid), req);
+ set_rqst(type == BUXTON_PRIV_READ ? MSG_SET_RP : MSG_SET_WP,
+ req, (char *)key, &val,
+ NULL, NULL, &rqst);
+ r = send_req(client, &rqst, req, new_req);
- r = send_req(client, &rqst);
- if (r != BUXTON_ERROR_NONE) {
- g_hash_table_remove(client->req_cbs,
- GUINT_TO_POINTER(req->msgid));
- pthread_mutex_unlock(&client->lock);
- return r;
- }
-
- *new_req = req;
- pthread_mutex_unlock(&client->lock);
- return BUXTON_ERROR_NONE;
+ return r;
}
EXPORT int buxton_set_privilege(struct buxton_client *client,
pthread_mutex_lock(&clients_lock);
r = set_priv(client, layer, key, type, privilege,
set_priv_sync_cb, &resp, &req);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ if (r != BUXTON_ERROR_NONE)
+ goto out;
- r = wait_msg(client, req->msgid);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ r = get_response(client, req->msgid, &resp);
- if (resp.res != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(resp.res);
- return -1;
- }
+out:
+ buxton_err_set_errno(r);
+ if (r != BUXTON_ERROR_NONE)
+ r = -1;
pthread_mutex_unlock(&clients_lock);
- return 0;
+ return r;
}
static int get_priv(struct buxton_client *client,
if (r != BUXTON_ERROR_NONE)
return r;
- memset(&rqst, 0, sizeof(rqst));
- rqst.type = type == BUXTON_PRIV_READ ? MSG_GET_RP : MSG_GET_WP;
- rqst.msgid = req->msgid;
- rqst.layer = req->layer;
- rqst.key = (char *)key;
-
- pthread_mutex_lock(&client->lock);
- g_hash_table_insert(client->req_cbs, GUINT_TO_POINTER(req->msgid), req);
-
- r = send_req(client, &rqst);
- if (r != BUXTON_ERROR_NONE) {
- g_hash_table_remove(client->req_cbs,
- GUINT_TO_POINTER(req->msgid));
- pthread_mutex_unlock(&client->lock);
- return r;
- }
+ set_rqst(type == BUXTON_PRIV_READ ? MSG_GET_RP : MSG_GET_WP,
+ req, (char *)key, NULL,
+ NULL, NULL, &rqst);
+ r = send_req(client, &rqst, req, new_req);
- *new_req = req;
- pthread_mutex_unlock(&client->lock);
- return BUXTON_ERROR_NONE;
+ return r;
}
EXPORT int buxton_get_privilege(struct buxton_client *client,
pthread_mutex_lock(&clients_lock);
r = get_priv(client, layer, key, type, get_priv_sync_cb, &resp, &req);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ if (r != BUXTON_ERROR_NONE)
+ goto out;
- r = wait_msg(client, req->msgid);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ r = get_response(client, req->msgid, &resp);
- if (resp.res != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(resp.res);
- return -1;
+out:
+ buxton_err_set_errno(r);
+ if (r != BUXTON_ERROR_NONE) {
+ r = -1;
+ } else {
+ *privilege = resp.val->value.s;
+ resp.val->value.s = NULL;
+ buxton_value_free(resp.val);
}
- *privilege = resp.val->value.s;
- resp.val->value.s = NULL;
- buxton_value_free(resp.val);
-
pthread_mutex_unlock(&clients_lock);
- return 0;
+ return r;
}
static void security_sync_cb(int status, const struct buxton_layer *layer,
if (r != BUXTON_ERROR_NONE)
return r;
- memset(&rqst, 0, sizeof(rqst));
- rqst.type = MSG_CTRL;
- rqst.msgid = req->msgid;
- rqst.layer = req->layer;
- rqst.key = strdup("set_security_mode");
- rqst.val = &val;
-
val.type = BUXTON_TYPE_BOOLEAN;
val.value.b = enable;
- pthread_mutex_lock(&client->lock);
- g_hash_table_insert(client->req_cbs, GUINT_TO_POINTER(req->msgid), req);
+ set_rqst(MSG_CTRL, req, SET_SECURITY_MODE, &val,
+ NULL, NULL, &rqst);
+ r = send_req(client, &rqst, req, new_req);
- r = send_req(client, &rqst);
-
- free(rqst.key);
- if (r != BUXTON_ERROR_NONE) {
- g_hash_table_remove(client->req_cbs,
- GUINT_TO_POINTER(req->msgid));
- pthread_mutex_unlock(&client->lock);
- return r;
- }
-
- *new_req = req;
- pthread_mutex_unlock(&client->lock);
- return BUXTON_ERROR_NONE;
+ return r;
}
EXPORT int buxton_enable_security(struct buxton_client *client,
pthread_mutex_lock(&clients_lock);
r = security_control(client, TRUE, security_sync_cb, &resp, &req);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ if (r != BUXTON_ERROR_NONE)
+ goto out;
- r = wait_msg(client, req->msgid);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ r = get_response(client, req->msgid, &resp);
- if (resp.res != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(resp.res);
- return -1;
- }
+out:
+ buxton_err_set_errno(r);
+ if (r != BUXTON_ERROR_NONE)
+ r = -1;
pthread_mutex_unlock(&clients_lock);
- return 0;
+ return r;
}
EXPORT int buxton_disable_security(struct buxton_client *client,
pthread_mutex_lock(&clients_lock);
r = security_control(client, FALSE, security_sync_cb, &resp, &req);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ if (r != BUXTON_ERROR_NONE)
+ goto out;
- r = wait_msg(client, req->msgid);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ r = get_response(client, req->msgid, &resp);
- if (resp.res != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(resp.res);
- return -1;
- }
+out:
+ buxton_err_set_errno(r);
+ if (r != BUXTON_ERROR_NONE)
+ r = -1;
pthread_mutex_unlock(&clients_lock);
- return 0;
+ return r;
}
static void update_label_sync_cb(int status, const struct buxton_layer *layer,
if (r != BUXTON_ERROR_NONE)
return r;
- memset(&rqst, 0, sizeof(rqst));
- rqst.type = MSG_CTRL;
- rqst.msgid = req->msgid;
- rqst.layer = req->layer;
- rqst.key = strdup("update_client_label");
+ set_rqst(MSG_CTRL, req, UPDATE_CLIENT_LABEL, NULL,
+ NULL, NULL, &rqst);
+ r = send_req(client, &rqst, req, new_req);
- pthread_mutex_lock(&client->lock);
- g_hash_table_insert(client->req_cbs, GUINT_TO_POINTER(req->msgid), req);
-
- r = send_req(client, &rqst);
-
- free(rqst.key);
- if (r != BUXTON_ERROR_NONE) {
- g_hash_table_remove(client->req_cbs,
- GUINT_TO_POINTER(req->msgid));
- pthread_mutex_unlock(&client->lock);
- return r;
- }
-
- *new_req = req;
- pthread_mutex_unlock(&client->lock);
- return BUXTON_ERROR_NONE;
+ return r;
}
EXPORT int buxton_update_client_label(struct buxton_client *client,
pthread_mutex_lock(&clients_lock);
r = update_client_label(client, update_label_sync_cb, &resp, &req);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ if (r != BUXTON_ERROR_NONE)
+ goto out;
- r = wait_msg(client, req->msgid);
- if (r != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(r);
- return -1;
- }
+ r = get_response(client, req->msgid, &resp);
- if (resp.res != BUXTON_ERROR_NONE) {
- pthread_mutex_unlock(&clients_lock);
- buxton_err_set_errno(resp.res);
- return -1;
- }
+out:
+ buxton_err_set_errno(r);
+ if (r != BUXTON_ERROR_NONE)
+ r = -1;
pthread_mutex_unlock(&clients_lock);
- return 0;
+ return r;
}
static void free_noti(struct bxt_noti *noti)