[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] libxl: Query VNC listening port through QMP
On Mon, 2012-04-16 at 19:15 +0100, Anthony PERARD wrote: > 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. libxl_vncviewer_exec also potentially reads vnc-pass, although frankly having such a thing in xenstore strikes me as something of a misfeature... Otherwise: Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> > > --- > tools/libxl/libxl_qmp.c | 59 > +++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 59 insertions(+), 0 deletions(-) > > diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c > index f5a3edc..72ff4a4 100644 > --- a/tools/libxl/libxl_qmp.c > +++ b/tools/libxl/libxl_qmp.c > @@ -154,6 +154,55 @@ static int > register_serials_chardev_callback(libxl__qmp_handler *qmp, > 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_handler *qmp) > 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 *gc, uint32_t > domid, > 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-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |