From e053d6cdbc0197aeb6bd9865bbb946114a989036 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Tue, 22 Sep 2020 21:27:23 -0500 Subject: [PATCH] Drop patty_kiss_tnc_recv() from handle_sock_raw() Refactor handle_sock_raw() in src/server.c to remove usage of patty_kiss_tnc_recv() in favor of its component methods: * patty_kiss_tnc_fill() * patty_kiss_tnc_drain() * patty_kiss_tnc_ready() * patty_kiss_tnc_flush() --- src/server.c | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/src/server.c b/src/server.c index 6aeb489..c7c974d 100644 --- a/src/server.c +++ b/src/server.c @@ -2097,34 +2097,44 @@ error_unknown: static int handle_sock_raw(patty_ax25_server *server, patty_ax25_sock *sock) { - if (!FD_ISSET(sock->fd, &server->fds_r) || sock->iface == NULL) { + patty_kiss_tnc *raw = sock->raw; + patty_ax25_if *iface = sock->iface; + + ssize_t len; + + if (!FD_ISSET(sock->fd, &server->fds_r) || raw == NULL || iface == NULL) { return 0; } - do { + if ((len = patty_kiss_tnc_fill(raw)) < 0) { + goto error_io; + } else if (len == 0) { + (void)sock_close(server, sock); + + goto done; + } + + while (1) { ssize_t len; - if ((len = patty_ax25_sock_recv(sock, - sock->iface->tx_buf, - sock->iface->mtu)) < 0) { - if (errno == EIO) { - (void)sock_close(server, sock); - - break; - } else { - goto error_io; - } - } else if (len == 0) { - (void)sock_close(server, sock); + if ((len = patty_kiss_tnc_drain(raw, iface->tx_buf, iface->mtu)) < 0) { + goto error_io; + } + if (!patty_kiss_tnc_ready(raw)) { break; } - if (patty_ax25_if_send(sock->iface, sock->iface->tx_buf, len) < 0) { + if ((len = patty_kiss_tnc_flush(raw)) < 0) { goto error_io; } - } while (patty_ax25_sock_recv_pending(sock)); + if (patty_ax25_if_send(iface, iface->tx_buf, len) < 0) { + goto error_io; + } + } + +done: return 0; error_io: