mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 15:23:53 -06:00
-----BEGIN PGP SIGNATURE-----
iQIcBAABAgAGBQJZCxOSAAoJENro4Ql1lpzlGagQAIoff4XMbbh2l5eFobcv00hn JdVT4u/Ie/Y1CTjOr8lhtgkKolA+cxfynlXMJN2pW8RP7W4J8Xo7SBpO84OpEKrc BGUmn4BSJQM6oOM5/YaITUBvfN+ZUFJMWwlBbHNTpF54jYb0y7UqbA8G/pJV8lAm ivo6wDrlwaOQLVs9RZWIZclVQOoCQ4VdTGwra9yKFf9BqtorSOs1BsDGvNprKLkw 0B5aRcTfBVS1qv7C/eGqOwigmCyE8s1h+HN2FTm7FIxYWiztRBezv76Yt+sV721w MvXPn9XSxHqhNnml2hsyEgKMblnutdRooKbdSesgVLKFnlt290WuDCOhj02phNXx qj8wnJ49nt8VzuPLUON5PKDnyhJrNHr+Hw0/YlneBZvjOhBEqX9BxSMvz8t1sTYC eAxQXrd+pFdUzLjv1HRrLBLfh8PUPtCluKkhGDh6MznXXzEbvZEGSeVCnLqy62w7 4gKxwinwfpod/1HFPTgfoFQBZzGzhTN7CjM6kh6PsIluTgsW0ROA2oVJSosVmv1P QfONhnGZJJf/yjkTjea40qHbJftBsVs9UiOHZ4PZ1QYgX4ZOj+FKaj1l5XYi6AG/ FNWWpKtelyf/YlU2ogFiRTYY7Y9BTITfk/K4vpOMRlQ9XFLf45z6DP1PRqCKx2Ub fOuWoPQOHLtyeAx8lrJM =rxGe -----END PGP SIGNATURE----- Merge remote-tracking branch 'elmarco/tags/chr-tests-pull-request' into staging # gpg: Signature made Thu 04 May 2017 12:42:10 PM BST # gpg: using RSA key 0xDAE8E10975969CE5 # gpg: Good signature from "Marc-André Lureau <marcandre.lureau@redhat.com>" # gpg: aka "Marc-André Lureau <marcandre.lureau@gmail.com>" # Primary key fingerprint: 87A9 BD93 3F87 C606 D276 F62D DAE8 E109 7596 9CE5 * elmarco/tags/chr-tests-pull-request: (21 commits) tests: add /char/console test tests: add /char/udp test tests: add /char/socket test tests: add /char/file test tests: add /char/pipe test tests: add alias check in /char/ringbuf char-udp: flush as much buffer as possible char-socket: add 'connected' property char-socket: add 'addr' property char-socket: update local address after listen char-socket: introduce update_disconnected_filename() char: useless NULL check char: remove chardevs list char: remove qemu_chardev_add char: use /chardevs container instead of chardevs list vl: add todo note about root container cleanup char: add a /chardevs container container: don't leak container reference xen: use a better chardev type check mux: simplfy muxes_realize_done ... Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
dd1559bb26
18 changed files with 505 additions and 128 deletions
|
@ -385,6 +385,15 @@ static char *SocketAddress_to_str(const char *prefix, SocketAddress *addr,
|
|||
}
|
||||
}
|
||||
|
||||
static void update_disconnected_filename(SocketChardev *s)
|
||||
{
|
||||
Chardev *chr = CHARDEV(s);
|
||||
|
||||
g_free(chr->filename);
|
||||
chr->filename = SocketAddress_to_str("disconnected:", s->addr,
|
||||
s->is_listen, s->is_telnet);
|
||||
}
|
||||
|
||||
static void tcp_chr_disconnect(Chardev *chr)
|
||||
{
|
||||
SocketChardev *s = SOCKET_CHARDEV(chr);
|
||||
|
@ -399,8 +408,7 @@ static void tcp_chr_disconnect(Chardev *chr)
|
|||
s->listen_tag = qio_channel_add_watch(
|
||||
QIO_CHANNEL(s->listen_ioc), G_IO_IN, tcp_chr_accept, chr, NULL);
|
||||
}
|
||||
chr->filename = SocketAddress_to_str("disconnected:", s->addr,
|
||||
s->is_listen, s->is_telnet);
|
||||
update_disconnected_filename(s);
|
||||
qemu_chr_be_event(chr, CHR_EVENT_CLOSED);
|
||||
if (s->reconnect_time) {
|
||||
qemu_chr_socket_restart_timer(chr);
|
||||
|
@ -508,7 +516,7 @@ static void tcp_chr_connect(void *opaque)
|
|||
tcp_chr_read,
|
||||
chr, NULL);
|
||||
}
|
||||
qemu_chr_be_generic_open(chr);
|
||||
qemu_chr_be_event(chr, CHR_EVENT_OPENED);
|
||||
}
|
||||
|
||||
static void tcp_chr_update_read_handler(Chardev *chr,
|
||||
|
@ -908,8 +916,7 @@ static void qmp_chardev_open_socket(Chardev *chr,
|
|||
/* be isn't opened until we get a connection */
|
||||
*be_opened = false;
|
||||
|
||||
chr->filename = SocketAddress_to_str("disconnected:",
|
||||
addr, is_listen, is_telnet);
|
||||
update_disconnected_filename(s);
|
||||
|
||||
if (is_listen) {
|
||||
if (is_telnet || is_tn3270) {
|
||||
|
@ -937,6 +944,11 @@ static void qmp_chardev_open_socket(Chardev *chr,
|
|||
if (qio_channel_socket_listen_sync(sioc, s->addr, errp) < 0) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
qapi_free_SocketAddress(s->addr);
|
||||
s->addr = socket_local_address(sioc->fd, errp);
|
||||
update_disconnected_filename(s);
|
||||
|
||||
s->listen_ioc = sioc;
|
||||
if (is_waitconnect &&
|
||||
qemu_chr_wait_connected(chr, errp) < 0) {
|
||||
|
@ -1033,6 +1045,23 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend,
|
|||
sock->addr = addr;
|
||||
}
|
||||
|
||||
static void
|
||||
char_socket_get_addr(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
SocketChardev *s = SOCKET_CHARDEV(obj);
|
||||
|
||||
visit_type_SocketAddress(v, name, &s->addr, errp);
|
||||
}
|
||||
|
||||
static bool
|
||||
char_socket_get_connected(Object *obj, Error **errp)
|
||||
{
|
||||
SocketChardev *s = SOCKET_CHARDEV(obj);
|
||||
|
||||
return s->connected;
|
||||
}
|
||||
|
||||
static void char_socket_class_init(ObjectClass *oc, void *data)
|
||||
{
|
||||
ChardevClass *cc = CHARDEV_CLASS(oc);
|
||||
|
@ -1048,6 +1077,13 @@ static void char_socket_class_init(ObjectClass *oc, void *data)
|
|||
cc->chr_add_client = tcp_chr_add_client;
|
||||
cc->chr_add_watch = tcp_chr_add_watch;
|
||||
cc->chr_update_read_handler = tcp_chr_update_read_handler;
|
||||
|
||||
object_class_property_add(oc, "addr", "SocketAddress",
|
||||
char_socket_get_addr, NULL,
|
||||
NULL, NULL, &error_abort);
|
||||
|
||||
object_class_property_add_bool(oc, "connected", char_socket_get_connected,
|
||||
NULL, &error_abort);
|
||||
}
|
||||
|
||||
static const TypeInfo char_socket_type_info = {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue