[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] libxl: Query VNC listening port through QMP
# HG changeset patch # User Anthony PERARD <anthony.perard@xxxxxxxxxx> # Date 1334683369 -3600 # Node ID 2a4db44e22284b9e03c46cf6a8ecfa295d818262 # Parent 214ca44b931682bc4b588b690e9b494dd956dc22 libxl: Query VNC listening port through QMP Currently `xl vncviewer $dom` does not work because the VNC port is not registered in xenstore when using qemu-upstream. This patch attempted to fix this. Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Committed-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- diff -r 214ca44b9316 -r 2a4db44e2228 tools/libxl/libxl_qmp.c --- a/tools/libxl/libxl_qmp.c Tue Apr 17 18:19:12 2012 +0100 +++ b/tools/libxl/libxl_qmp.c Tue Apr 17 18:22:49 2012 +0100 @@ -154,6 +154,55 @@ static int register_serials_chardev_call return ret; } +static int qmp_write_domain_console_item(libxl__gc *gc, int domid, + const char *item, const char *value) +{ + char *path; + + path = libxl__xs_get_dompath(gc, domid); + path = libxl__sprintf(gc, "%s/console/%s", path, item); + + return libxl__xs_write(gc, XBT_NULL, path, "%s", value); +} + +static int qmp_register_vnc_callback(libxl__qmp_handler *qmp, + const libxl__json_object *o, + void *unused) +{ + GC_INIT(qmp->ctx); + const libxl__json_object *obj; + const char *listen, *port; + int rc = -1; + + if (!libxl__json_object_is_map(o)) { + goto out; + } + + if (libxl__json_map_get("enabled", o, JSON_FALSE)) { + rc = 0; + goto out; + } + + obj = libxl__json_map_get("host", o, JSON_STRING); + listen = libxl__json_object_get_string(obj); + obj = libxl__json_map_get("service", o, JSON_STRING); + port = libxl__json_object_get_string(obj); + + if (!listen || !port) { + LIBXL__LOG(qmp->ctx, LIBXL__LOG_ERROR, + "Failed to retreive VNC connect information."); + goto out; + } + + rc = qmp_write_domain_console_item(gc, qmp->domid, "vnc-listen", listen); + if (!rc) + rc = qmp_write_domain_console_item(gc, qmp->domid, "vnc-port", port); + +out: + GC_FREE; + return rc; +} + static int qmp_capabilities_callback(libxl__qmp_handler *qmp, const libxl__json_object *o, void *unused) { @@ -688,6 +737,13 @@ int libxl__qmp_query_serial(libxl__qmp_h NULL, qmp->timeout); } +static int qmp_query_vnc(libxl__qmp_handler *qmp) +{ + return qmp_synchronous_send(qmp, "query-vnc", NULL, + qmp_register_vnc_callback, + NULL, qmp->timeout); +} + static int pci_add_callback(libxl__qmp_handler *qmp, const libxl__json_object *response, void *opaque) { @@ -917,6 +973,9 @@ int libxl__qmp_initializations(libxl__gc if (!ret && vnc && vnc->passwd) { ret = qmp_change(gc, qmp, "vnc", "password", vnc->passwd); } + if (!ret) { + ret = qmp_query_vnc(qmp); + } libxl__qmp_close(qmp); return ret; } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |