mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
qapi: convert add_client
Also fixes a few issues while there: 1. The fd returned by monitor_get_fd() leaks in most error conditions 2. monitor_get_fd() return value is not checked. Best case we get an error that is not correctly reported, worse case one of the functions using the fd (with value of -1) will explode 3. A few error conditions aren't reported 4. We now "use up" @fdname always. Before, it was left alone for invalid @protocol Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
a9940fc4cb
commit
b224e5e216
4 changed files with 69 additions and 43 deletions
39
monitor.c
39
monitor.c
|
@ -944,45 +944,6 @@ static void do_trace_print_events(Monitor *mon)
|
|||
trace_print_events((FILE *)mon, &monitor_fprintf);
|
||||
}
|
||||
|
||||
static int add_graphics_client(Monitor *mon, const QDict *qdict, QObject **ret_data)
|
||||
{
|
||||
const char *protocol = qdict_get_str(qdict, "protocol");
|
||||
const char *fdname = qdict_get_str(qdict, "fdname");
|
||||
CharDriverState *s;
|
||||
|
||||
if (strcmp(protocol, "spice") == 0) {
|
||||
int fd = monitor_get_fd(mon, fdname, NULL);
|
||||
int skipauth = qdict_get_try_bool(qdict, "skipauth", 0);
|
||||
int tls = qdict_get_try_bool(qdict, "tls", 0);
|
||||
if (!using_spice) {
|
||||
/* correct one? spice isn't a device ,,, */
|
||||
qerror_report(QERR_DEVICE_NOT_ACTIVE, "spice");
|
||||
return -1;
|
||||
}
|
||||
if (qemu_spice_display_add_client(fd, skipauth, tls) < 0) {
|
||||
close(fd);
|
||||
}
|
||||
return 0;
|
||||
#ifdef CONFIG_VNC
|
||||
} else if (strcmp(protocol, "vnc") == 0) {
|
||||
int fd = monitor_get_fd(mon, fdname, NULL);
|
||||
int skipauth = qdict_get_try_bool(qdict, "skipauth", 0);
|
||||
vnc_display_add_client(NULL, fd, skipauth);
|
||||
return 0;
|
||||
#endif
|
||||
} else if ((s = qemu_chr_find(protocol)) != NULL) {
|
||||
int fd = monitor_get_fd(mon, fdname, NULL);
|
||||
if (qemu_chr_add_client(s, fd) < 0) {
|
||||
qerror_report(QERR_ADD_CLIENT_FAILED);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
qerror_report(QERR_INVALID_PARAMETER, "protocol");
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int client_migrate_info(Monitor *mon, const QDict *qdict,
|
||||
MonitorCompletion cb, void *opaque)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue