From 636181352788f7ba570e9055ec9352ba2badb751 Mon Sep 17 00:00:00 2001 From: Marc-André Lureau Date: Wed, 14 Dec 2016 14:23:02 +0300 Subject: char: remove qemu_chr_be_generic_open The function simply alias and hides the real event function. Signed-off-by: Marc-André Lureau Reviewed-by: Eric Blake Reviewed-by: Philippe Mathieu-Daudé --- chardev/char-socket.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'chardev/char-socket.c') diff --git a/chardev/char-socket.c b/chardev/char-socket.c index 36ab0d633a..2789eb1f40 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -489,7 +489,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, -- cgit v1.2.3-55-g7522 From bbcde969b242fc4b3ab84097f7783cfe0920e69f Mon Sep 17 00:00:00 2001 From: Marc-André Lureau Date: Tue, 20 Dec 2016 15:32:31 +0100 Subject: char-socket: introduce update_disconnected_filename() This helper will be used in yet another place in the following patch. Signed-off-by: Marc-André Lureau Reviewed-by: Philippe Mathieu-Daudé --- chardev/char-socket.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'chardev/char-socket.c') diff --git a/chardev/char-socket.c b/chardev/char-socket.c index 2789eb1f40..511a82960d 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -366,6 +366,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); @@ -380,8 +389,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); @@ -875,8 +883,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) { -- cgit v1.2.3-55-g7522 From bc763d71440552b677bc372e8261b9d127330657 Mon Sep 17 00:00:00 2001 From: Marc-André Lureau Date: Tue, 20 Dec 2016 15:36:57 +0100 Subject: char-socket: update local address after listen This is mainly useful to know the actual bound port when using port 0. For example, when starting qemu with socket on port 0, before: QEMU waiting for connection on: disconnected:tcp:localhost:0,server After: QEMU waiting for connection on: disconnected:tcp:localhost:32454,server Signed-off-by: Marc-André Lureau --- chardev/char-socket.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'chardev/char-socket.c') diff --git a/chardev/char-socket.c b/chardev/char-socket.c index 511a82960d..f24961ad16 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -911,6 +911,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) { -- cgit v1.2.3-55-g7522 From 123676e9894fa221943eafda97e6954c2819b215 Mon Sep 17 00:00:00 2001 From: Marc-André Lureau Date: Wed, 21 Dec 2016 12:26:38 +0100 Subject: char-socket: add 'addr' property Add a property to lookup the connection details. Signed-off-by: Marc-André Lureau Reviewed-by: Philippe Mathieu-Daudé --- chardev/char-socket.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'chardev/char-socket.c') diff --git a/chardev/char-socket.c b/chardev/char-socket.c index f24961ad16..5a5840edb1 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -1009,6 +1009,15 @@ 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 void char_socket_class_init(ObjectClass *oc, void *data) { ChardevClass *cc = CHARDEV_CLASS(oc); @@ -1024,6 +1033,10 @@ 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); } static const TypeInfo char_socket_type_info = { -- cgit v1.2.3-55-g7522 From da2d19b080f6214b646a9f250760f5f41adcd21b Mon Sep 17 00:00:00 2001 From: Marc-André Lureau Date: Wed, 21 Dec 2016 15:43:46 +0100 Subject: char-socket: add 'connected' property Signed-off-by: Marc-André Lureau Reviewed-by: Philippe Mathieu-Daudé --- chardev/char-socket.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'chardev/char-socket.c') diff --git a/chardev/char-socket.c b/chardev/char-socket.c index 5a5840edb1..0118252002 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -1018,6 +1018,14 @@ char_socket_get_addr(Object *obj, Visitor *v, const char *name, 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); @@ -1037,6 +1045,9 @@ static void char_socket_class_init(ObjectClass *oc, void *data) 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 = { -- cgit v1.2.3-55-g7522