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()
This commit is contained in:
parent
50eaef806d
commit
e053d6cdbc
1 changed files with 26 additions and 16 deletions
40
src/server.c
40
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 {
|
||||
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 {
|
||||
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_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:
|
||||
|
|
Loading…
Add table
Reference in a new issue