Hi On Fri, Oct 19, 2018 at 2:35 AM Julia Suvorova <jus...@mail.ru> wrote: > > Upcoming websocket support requires additional parameters in function > headers that are already overloaded. This patch replaces the bunch of > parameters with a single structure pointer. > > Signed-off-by: Julia Suvorova <jus...@mail.ru>
Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com> > --- > chardev/char-socket.c | 55 +++++++++++++++++++++++-------------------- > 1 file changed, 30 insertions(+), 25 deletions(-) > > diff --git a/chardev/char-socket.c b/chardev/char-socket.c > index a75b46d9fe..effde65a89 100644 > --- a/chardev/char-socket.c > +++ b/chardev/char-socket.c > @@ -389,30 +389,37 @@ static void tcp_chr_free_connection(Chardev *chr) > s->connected = 0; > } > > -static char *SocketAddress_to_str(const char *prefix, SocketAddress *addr, > - bool is_listen, bool is_telnet) > +static const char *qemu_chr_socket_protocol(SocketChardev *s) > { > - switch (addr->type) { > + if (s->is_telnet) { > + return "telnet"; > + } > + return "tcp"; > +} > + > +static char *qemu_chr_socket_address(SocketChardev *s, const char *prefix) > +{ > + switch (s->addr->type) { > case SOCKET_ADDRESS_TYPE_INET: > return g_strdup_printf("%s%s:%s:%s%s", prefix, > - is_telnet ? "telnet" : "tcp", > - addr->u.inet.host, > - addr->u.inet.port, > - is_listen ? ",server" : ""); > + qemu_chr_socket_protocol(s), > + s->addr->u.inet.host, > + s->addr->u.inet.port, > + s->is_listen ? ",server" : ""); > break; > case SOCKET_ADDRESS_TYPE_UNIX: > return g_strdup_printf("%sunix:%s%s", prefix, > - addr->u.q_unix.path, > - is_listen ? ",server" : ""); > + s->addr->u.q_unix.path, > + s->is_listen ? ",server" : ""); > break; > case SOCKET_ADDRESS_TYPE_FD: > - return g_strdup_printf("%sfd:%s%s", prefix, addr->u.fd.str, > - is_listen ? ",server" : ""); > + return g_strdup_printf("%sfd:%s%s", prefix, s->addr->u.fd.str, > + s->is_listen ? ",server" : ""); > break; > case SOCKET_ADDRESS_TYPE_VSOCK: > return g_strdup_printf("%svsock:%s:%s", prefix, > - addr->u.vsock.cid, > - addr->u.vsock.port); > + s->addr->u.vsock.cid, > + s->addr->u.vsock.port); > default: > abort(); > } > @@ -424,8 +431,7 @@ static void update_disconnected_filename(SocketChardev *s) > > g_free(chr->filename); > if (s->addr) { > - chr->filename = SocketAddress_to_str("disconnected:", s->addr, > - s->is_listen, s->is_telnet); > + chr->filename = qemu_chr_socket_address(s, "disconnected:"); > } else { > chr->filename = g_strdup("disconnected:socket"); > } > @@ -514,10 +520,12 @@ static int tcp_chr_sync_read(Chardev *chr, const > uint8_t *buf, int len) > return size; > } > > -static char *sockaddr_to_str(struct sockaddr_storage *ss, socklen_t ss_len, > - struct sockaddr_storage *ps, socklen_t ps_len, > - bool is_listen, bool is_telnet) > +static char *qemu_chr_compute_filename(SocketChardev *s) > { > + struct sockaddr_storage *ss = &s->sioc->localAddr; > + struct sockaddr_storage *ps = &s->sioc->remoteAddr; > + socklen_t ss_len = s->sioc->localAddrLen; > + socklen_t ps_len = s->sioc->remoteAddrLen; > char shost[NI_MAXHOST], sserv[NI_MAXSERV]; > char phost[NI_MAXHOST], pserv[NI_MAXSERV]; > const char *left = "", *right = ""; > @@ -527,7 +535,7 @@ static char *sockaddr_to_str(struct sockaddr_storage *ss, > socklen_t ss_len, > case AF_UNIX: > return g_strdup_printf("unix:%s%s", > ((struct sockaddr_un *)(ss))->sun_path, > - is_listen ? ",server" : ""); > + s->is_listen ? ",server" : ""); > #endif > case AF_INET6: > left = "["; > @@ -539,9 +547,9 @@ static char *sockaddr_to_str(struct sockaddr_storage *ss, > socklen_t ss_len, > getnameinfo((struct sockaddr *) ps, ps_len, phost, sizeof(phost), > pserv, sizeof(pserv), NI_NUMERICHOST | NI_NUMERICSERV); > return g_strdup_printf("%s:%s%s%s:%s%s <-> %s%s%s:%s", > - is_telnet ? "telnet" : "tcp", > + qemu_chr_socket_protocol(s), > left, shost, right, sserv, > - is_listen ? ",server" : "", > + s->is_listen ? ",server" : "", > left, phost, right, pserv); > > default: > @@ -576,10 +584,7 @@ static void tcp_chr_connect(void *opaque) > SocketChardev *s = SOCKET_CHARDEV(opaque); > > g_free(chr->filename); > - chr->filename = sockaddr_to_str( > - &s->sioc->localAddr, s->sioc->localAddrLen, > - &s->sioc->remoteAddr, s->sioc->remoteAddrLen, > - s->is_listen, s->is_telnet); > + chr->filename = qemu_chr_compute_filename(s); > > s->connected = 1; > update_ioc_handlers(s); > -- > 2.17.1 >