[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v2 12/25] chardev: split up qmp_chardev_open_socket c
From: |
Marc-André Lureau |
Subject: |
[Qemu-devel] [PULL v2 12/25] chardev: split up qmp_chardev_open_socket connection code |
Date: |
Wed, 13 Feb 2019 17:19:00 +0100 |
From: Daniel P. Berrangé <address@hidden>
In qmp_chardev_open_socket the code for connecting client chardevs is
split across two conditionals far apart with some server chardev code in
the middle. Split up the method so that code for client connection setup
is separate from code for server connection setup.
Reviewed-by: Marc-André Lureau <address@hidden>
Signed-off-by: Daniel P. Berrangé <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Marc-André Lureau <address@hidden>
---
chardev/char-socket.c | 96 +++++++++++++++++++++++++++----------------
1 file changed, 60 insertions(+), 36 deletions(-)
diff --git a/chardev/char-socket.c b/chardev/char-socket.c
index 222adbbad3..90dafef7d4 100644
--- a/chardev/char-socket.c
+++ b/chardev/char-socket.c
@@ -1005,6 +1005,61 @@ static gboolean socket_reconnect_timeout(gpointer opaque)
}
+static int qmp_chardev_open_socket_server(Chardev *chr,
+ bool is_telnet,
+ bool is_waitconnect,
+ Error **errp)
+{
+ SocketChardev *s = SOCKET_CHARDEV(chr);
+ char *name;
+ if (is_telnet) {
+ s->do_telnetopt = 1;
+ }
+ s->listener = qio_net_listener_new();
+
+ name = g_strdup_printf("chardev-tcp-listener-%s", chr->label);
+ qio_net_listener_set_name(s->listener, name);
+ g_free(name);
+
+ if (qio_net_listener_open_sync(s->listener, s->addr, errp) < 0) {
+ object_unref(OBJECT(s->listener));
+ s->listener = NULL;
+ return -1;
+ }
+
+ qapi_free_SocketAddress(s->addr);
+ s->addr = socket_local_address(s->listener->sioc[0]->fd, errp);
+ update_disconnected_filename(s);
+
+ if (is_waitconnect) {
+ tcp_chr_accept_server_sync(chr);
+ } else {
+ qio_net_listener_set_client_func_full(s->listener,
+ tcp_chr_accept,
+ chr, NULL,
+ chr->gcontext);
+ }
+
+ return 0;
+}
+
+
+static int qmp_chardev_open_socket_client(Chardev *chr,
+ int64_t reconnect,
+ Error **errp)
+{
+ SocketChardev *s = SOCKET_CHARDEV(chr);
+
+ if (reconnect > 0) {
+ s->reconnect_time = reconnect;
+ tcp_chr_connect_client_async(chr);
+ return 0;
+ } else {
+ return tcp_chr_connect_client_sync(chr, errp);
+ }
+}
+
+
static bool qmp_chardev_validate_socket(ChardevSocket *sock,
SocketAddress *addr,
Error **errp)
@@ -1147,44 +1202,13 @@ static void qmp_chardev_open_socket(Chardev *chr,
update_disconnected_filename(s);
- if (is_listen) {
- if (is_telnet || is_tn3270) {
- s->do_telnetopt = 1;
+ if (s->is_listen) {
+ if (qmp_chardev_open_socket_server(chr, is_telnet || is_tn3270,
+ is_waitconnect, errp) < 0) {
+ return;
}
- } else if (reconnect > 0) {
- s->reconnect_time = reconnect;
- }
-
- if (s->reconnect_time) {
- tcp_chr_connect_client_async(chr);
} else {
- if (s->is_listen) {
- char *name;
- s->listener = qio_net_listener_new();
-
- name = g_strdup_printf("chardev-tcp-listener-%s", chr->label);
- qio_net_listener_set_name(s->listener, name);
- g_free(name);
-
- if (qio_net_listener_open_sync(s->listener, s->addr, errp) < 0) {
- object_unref(OBJECT(s->listener));
- s->listener = NULL;
- return;
- }
-
- qapi_free_SocketAddress(s->addr);
- s->addr = socket_local_address(s->listener->sioc[0]->fd, errp);
- update_disconnected_filename(s);
-
- if (is_waitconnect) {
- tcp_chr_accept_server_sync(chr);
- } else {
- qio_net_listener_set_client_func_full(s->listener,
- tcp_chr_accept,
- chr, NULL,
- chr->gcontext);
- }
- } else if (tcp_chr_connect_client_sync(chr, errp) < 0) {
+ if (qmp_chardev_open_socket_client(chr, reconnect, errp) < 0) {
return;
}
}
--
2.21.0.rc0.1.g036caf7885
- [Qemu-devel] [PULL v2 04/25] io: add qio_task_wait_thread to join with a background thread, (continued)
- [Qemu-devel] [PULL v2 04/25] io: add qio_task_wait_thread to join with a background thread, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 10/25] chardev: remove unused 'sioc' variable & cleanup paths, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 07/25] chardev: forbid 'wait' option with client sockets, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 08/25] chardev: remove many local variables in qemu_chr_parse_socket, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 02/25] tests/test-char: add muxed chardev testing for open/close, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 09/25] chardev: ensure qemu_chr_parse_compat reports missing driver error, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 05/25] chardev: fix validation of options for QMP created chardevs, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 03/25] io: store reference to thread information in the QIOTask struct, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 01/25] chardev: fix mess in OPENED/CLOSED events when muxed, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 06/25] chardev: forbid 'reconnect' option with server sockets, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 12/25] chardev: split up qmp_chardev_open_socket connection code,
Marc-André Lureau <=
- [Qemu-devel] [PULL v2 11/25] chardev: split tcp_chr_wait_connected into two methods, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 14/25] chardev: honour the reconnect setting in tcp_chr_wait_connected, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 13/25] chardev: use a state machine for socket connection state, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 15/25] chardev: disallow TLS/telnet/websocket with tcp_chr_wait_connected, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 18/25] chardev: ensure termios is fully initialized, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 16/25] chardev: fix race with client connections in tcp_chr_wait_connected, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 17/25] tests: expand coverage of socket chardev test, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 20/25] chardev/wctablet: Fix a typo, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 22/25] terminal3270: do not use backend timer sources, Marc-André Lureau, 2019/02/13
- [Qemu-devel] [PULL v2 21/25] char: update the mux handlers in class callback, Marc-André Lureau, 2019/02/13