aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxl/libxl_qmp.c
diff options
context:
space:
mode:
authorAnthony PERARD <anthony.perard@citrix.com>2011-11-04 12:38:23 +0000
committerAnthony PERARD <anthony.perard@citrix.com>2011-11-04 12:38:23 +0000
commit1bc91b8ea798246633114d03f678805591c61695 (patch)
tree700ad305f16c37fa3c6b023b75d4c4a70dfbc4d8 /tools/libxl/libxl_qmp.c
parent6291ab8bf8317537953e1fee900100fd72f8cb63 (diff)
downloadxen-1bc91b8ea798246633114d03f678805591c61695.tar.gz
xen-1bc91b8ea798246633114d03f678805591c61695.tar.bz2
xen-1bc91b8ea798246633114d03f678805591c61695.zip
libxl: libxl_qmp: Introduce an opaque argument to the callbacks.
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> Committed-by: Ian Jackson <ian.jackson.citrix.com> Acked-by: Ian Campbell <ian.campbell@citrix.com>
Diffstat (limited to 'tools/libxl/libxl_qmp.c')
-rw-r--r--tools/libxl/libxl_qmp.c30
1 files changed, 19 insertions, 11 deletions
diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c
index f61a87a89f..ddc0a4d554 100644
--- a/tools/libxl/libxl_qmp.c
+++ b/tools/libxl/libxl_qmp.c
@@ -43,11 +43,13 @@
#define QMP_RECEIVE_BUFFER_SIZE 4096
typedef int (*qmp_callback_t)(libxl__qmp_handler *qmp,
- const libxl__json_object *tree);
+ const libxl__json_object *tree,
+ void *opaque);
typedef struct callback_id_pair {
int id;
qmp_callback_t callback;
+ void *opaque;
SIMPLEQ_ENTRY(callback_id_pair) next;
} callback_id_pair;
@@ -70,7 +72,8 @@ struct libxl__qmp_handler {
};
static int qmp_send(libxl__qmp_handler *qmp,
- const char *cmd, qmp_callback_t callback);
+ const char *cmd,
+ qmp_callback_t callback, void *opaque);
static const int QMP_SOCKET_CONNECT_TIMEOUT = 5;
@@ -100,7 +103,8 @@ static int store_serial_port_info(libxl__qmp_handler *qmp,
}
static int register_serials_chardev_callback(libxl__qmp_handler *qmp,
- const libxl__json_object *o)
+ const libxl__json_object *o,
+ void *unused)
{
const libxl__json_object *obj = NULL;
const libxl__json_object *label = NULL;
@@ -144,7 +148,7 @@ static int register_serials_chardev_callback(libxl__qmp_handler *qmp,
}
static int qmp_capabilities_callback(libxl__qmp_handler *qmp,
- const libxl__json_object *o)
+ const libxl__json_object *o, void *unused)
{
qmp->connected = true;
@@ -157,7 +161,7 @@ static int qmp_capabilities_callback(libxl__qmp_handler *qmp,
static int enable_qmp_capabilities(libxl__qmp_handler *qmp)
{
- return qmp_send(qmp, "qmp_capabilities", qmp_capabilities_callback);
+ return qmp_send(qmp, "qmp_capabilities", qmp_capabilities_callback, NULL);
}
/*
@@ -208,7 +212,7 @@ static void qmp_handle_error_response(libxl__qmp_handler *qmp,
resp = libxl__json_map_get("desc", resp, JSON_STRING);
if (pp) {
- pp->callback(qmp, NULL);
+ pp->callback(qmp, NULL, pp->opaque);
if (pp->id == qmp->wait_for_id) {
/* tell that the id have been processed */
qmp->wait_for_id = 0;
@@ -241,7 +245,8 @@ static int qmp_handle_response(libxl__qmp_handler *qmp,
if (pp) {
pp->callback(qmp,
- libxl__json_map_get("return", resp, JSON_ANY));
+ libxl__json_map_get("return", resp, JSON_ANY),
+ pp->opaque);
if (pp->id == qmp->wait_for_id) {
/* tell that the id have been processed */
qmp->wait_for_id = 0;
@@ -424,7 +429,8 @@ static int qmp_next(libxl__gc *gc, libxl__qmp_handler *qmp)
}
static int qmp_send(libxl__qmp_handler *qmp,
- const char *cmd, qmp_callback_t callback)
+ const char *cmd,
+ qmp_callback_t callback, void *opaque)
{
yajl_gen_config conf = { 0, NULL };
const unsigned char *buf;
@@ -462,6 +468,7 @@ static int qmp_send(libxl__qmp_handler *qmp,
}
elm->id = qmp->last_id_used;
elm->callback = callback;
+ elm->opaque = opaque;
SIMPLEQ_INSERT_TAIL(&qmp->callback_list, elm, next);
}
@@ -484,13 +491,14 @@ error:
}
static int qmp_synchronous_send(libxl__qmp_handler *qmp, const char *cmd,
- qmp_callback_t callback, int ask_timeout)
+ qmp_callback_t callback, void *opaque,
+ int ask_timeout)
{
int id = 0;
int ret = 0;
libxl__gc gc = LIBXL_INIT_GC(qmp->ctx);
- id = qmp_send(qmp, cmd, callback);
+ id = qmp_send(qmp, cmd, callback, opaque);
if (id <= 0) {
return -1;
}
@@ -580,7 +588,7 @@ int libxl__qmp_query_serial(libxl__qmp_handler *qmp)
{
return qmp_synchronous_send(qmp, "query-chardev",
register_serials_chardev_callback,
- qmp->timeout);
+ NULL, qmp->timeout);
}
int libxl__qmp_initializations(libxl_ctx *ctx, uint32_t domid)