Implement patty_ax25_if_ready()
Implement patty_ax25_if_ready() to provide a means of testing an interface's readiness for performing I/O; this may also be used in the future for some interface drivers which may require occasional keepalive timers to maintain a link
This commit is contained in:
parent
4604cccdb4
commit
2b931ec357
7 changed files with 24 additions and 1 deletions
|
@ -37,6 +37,8 @@ void patty_ax25_aprs_is_destroy(patty_ax25_aprs_is *aprs);
|
|||
|
||||
int patty_ax25_aprs_is_fd(patty_ax25_aprs_is *aprs);
|
||||
|
||||
int patty_ax25_aprs_is_ready(patty_ax25_aprs_is *aprs, fd_set *fds);
|
||||
|
||||
ssize_t patty_ax25_aprs_is_fill(patty_ax25_aprs_is *aprs);
|
||||
|
||||
ssize_t patty_ax25_aprs_is_drain(patty_ax25_aprs_is *, void *buf, size_t len);
|
||||
|
|
|
@ -35,6 +35,8 @@ typedef patty_ax25_if_stats *(patty_ax25_if_driver_stats)(void *);
|
|||
|
||||
typedef int (patty_ax25_if_driver_fd)(void *);
|
||||
|
||||
typedef int (patty_ax25_if_driver_ready)(void *, fd_set *);
|
||||
|
||||
typedef ssize_t (patty_ax25_if_driver_fill)(void *);
|
||||
|
||||
typedef ssize_t (patty_ax25_if_driver_drain)(void *, void *, size_t);
|
||||
|
@ -50,6 +52,7 @@ typedef struct _patty_ax25_if_driver {
|
|||
patty_ax25_if_driver_destroy *destroy;
|
||||
patty_ax25_if_driver_stats *stats;
|
||||
patty_ax25_if_driver_fd *fd;
|
||||
patty_ax25_if_driver_ready *ready;
|
||||
patty_ax25_if_driver_fill *fill;
|
||||
patty_ax25_if_driver_drain *drain;
|
||||
patty_ax25_if_driver_pending *pending;
|
||||
|
@ -104,6 +107,8 @@ void patty_ax25_if_drop(patty_ax25_if *iface);
|
|||
|
||||
int patty_ax25_if_fd(patty_ax25_if *iface);
|
||||
|
||||
int patty_ax25_if_ready(patty_ax25_if *iface, fd_set *fds);
|
||||
|
||||
ssize_t patty_ax25_if_fill(patty_ax25_if *iface);
|
||||
|
||||
ssize_t patty_ax25_if_drain(patty_ax25_if *iface, void *buf, size_t len);
|
||||
|
|
|
@ -35,6 +35,8 @@ patty_kiss_tnc *patty_kiss_tnc_new(patty_kiss_tnc_info *info);
|
|||
|
||||
int patty_kiss_tnc_fd(patty_kiss_tnc *tnc);
|
||||
|
||||
int patty_kiss_tnc_ready(patty_kiss_tnc *tnc, fd_set *fds);
|
||||
|
||||
void patty_kiss_tnc_destroy(patty_kiss_tnc *tnc);
|
||||
|
||||
ssize_t patty_kiss_tnc_fill(patty_kiss_tnc *tnc);
|
||||
|
|
|
@ -173,6 +173,10 @@ int patty_ax25_aprs_is_fd(patty_ax25_aprs_is *aprs) {
|
|||
return aprs->fd;
|
||||
}
|
||||
|
||||
int patty_ax25_aprs_is_ready(patty_ax25_aprs_is *aprs, fd_set *fds) {
|
||||
return FD_ISSET(aprs->fd, fds);
|
||||
}
|
||||
|
||||
ssize_t patty_ax25_aprs_is_fill(patty_ax25_aprs_is *aprs) {
|
||||
int attempt = 0;
|
||||
|
||||
|
@ -442,6 +446,7 @@ patty_ax25_if_driver *patty_ax25_aprs_is_driver() {
|
|||
.destroy = (patty_ax25_if_driver_destroy *)patty_ax25_aprs_is_destroy,
|
||||
.stats = (patty_ax25_if_driver_stats *)patty_ax25_aprs_is_stats,
|
||||
.fd = (patty_ax25_if_driver_fd *)patty_ax25_aprs_is_fd,
|
||||
.ready = (patty_ax25_if_driver_ready *)patty_ax25_aprs_is_ready,
|
||||
.fill = (patty_ax25_if_driver_fill *)patty_ax25_aprs_is_fill,
|
||||
.drain = (patty_ax25_if_driver_drain *)patty_ax25_aprs_is_drain,
|
||||
.pending = (patty_ax25_if_driver_pending *)patty_ax25_aprs_is_pending,
|
||||
|
|
4
src/if.c
4
src/if.c
|
@ -272,6 +272,10 @@ int patty_ax25_if_fd(patty_ax25_if *iface) {
|
|||
return iface->driver->fd(iface->phy);
|
||||
}
|
||||
|
||||
int patty_ax25_if_ready(patty_ax25_if *iface, fd_set *fds) {
|
||||
return iface->driver->ready(iface->phy, fds);
|
||||
}
|
||||
|
||||
ssize_t patty_ax25_if_fill(patty_ax25_if *iface) {
|
||||
return iface->driver->fill(iface->phy);
|
||||
}
|
||||
|
|
|
@ -2038,7 +2038,7 @@ static int handle_iface(patty_ax25_server *server, struct if_entry *entry) {
|
|||
|
||||
ssize_t len;
|
||||
|
||||
if (!FD_ISSET(entry->fd, &server->fds_r)) {
|
||||
if (!patty_ax25_if_ready(entry->iface, &server->fds_r)) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
|
|
@ -201,6 +201,10 @@ int patty_kiss_tnc_fd(patty_kiss_tnc *tnc) {
|
|||
return tnc->fd;
|
||||
}
|
||||
|
||||
int patty_kiss_tnc_ready(patty_kiss_tnc *tnc, fd_set *fds) {
|
||||
return FD_ISSET(tnc->fd, fds);
|
||||
}
|
||||
|
||||
static void tnc_drop(patty_kiss_tnc *tnc) {
|
||||
tnc->state = KISS_NONE;
|
||||
tnc->offset_i = 0;
|
||||
|
@ -366,6 +370,7 @@ patty_ax25_if_driver *patty_kiss_tnc_driver() {
|
|||
.destroy = (patty_ax25_if_driver_destroy *)patty_kiss_tnc_destroy,
|
||||
.stats = (patty_ax25_if_driver_stats *)patty_kiss_tnc_stats,
|
||||
.fd = (patty_ax25_if_driver_fd *)patty_kiss_tnc_fd,
|
||||
.ready = (patty_ax25_if_driver_ready *)patty_kiss_tnc_ready,
|
||||
.fill = (patty_ax25_if_driver_fill *)patty_kiss_tnc_fill,
|
||||
.drain = (patty_ax25_if_driver_drain *)patty_kiss_tnc_drain,
|
||||
.pending = (patty_ax25_if_driver_pending *)patty_kiss_tnc_pending,
|
||||
|
|
Loading…
Add table
Reference in a new issue