Implement patty_ax25_if_recv()
Implement patty_ax25_if_recv() as a utility function to allow one to use when instantiating a network interface without a full network stack
This commit is contained in:
parent
c8c00c994c
commit
b2789a4d56
2 changed files with 26 additions and 0 deletions
|
@ -122,6 +122,8 @@ int patty_ax25_if_ready(patty_ax25_if *iface);
|
||||||
|
|
||||||
ssize_t patty_ax25_if_flush(patty_ax25_if *iface);
|
ssize_t patty_ax25_if_flush(patty_ax25_if *iface);
|
||||||
|
|
||||||
|
ssize_t patty_ax25_if_recv(patty_ax25_if *iface, void *buf, size_t len);
|
||||||
|
|
||||||
ssize_t patty_ax25_if_send(patty_ax25_if *iface,
|
ssize_t patty_ax25_if_send(patty_ax25_if *iface,
|
||||||
const void *buf,
|
const void *buf,
|
||||||
size_t len);
|
size_t len);
|
||||||
|
|
24
src/if.c
24
src/if.c
|
@ -323,6 +323,30 @@ error_handle_promisc_frame:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ssize_t patty_ax25_if_recv(patty_ax25_if *iface, void *buf, size_t len) {
|
||||||
|
while (!patty_ax25_if_ready(iface)) {
|
||||||
|
ssize_t drained;
|
||||||
|
|
||||||
|
if ((drained = patty_ax25_if_drain(iface, buf, len)) < 0) {
|
||||||
|
goto error_drain;
|
||||||
|
} else if (drained == 0) {
|
||||||
|
ssize_t filled;
|
||||||
|
|
||||||
|
if ((filled = patty_ax25_if_fill(iface)) < 0) {
|
||||||
|
goto error_fill;
|
||||||
|
} else if (filled == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return patty_ax25_if_flush(iface);
|
||||||
|
|
||||||
|
error_drain:
|
||||||
|
error_fill:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
ssize_t patty_ax25_if_send(patty_ax25_if *iface,
|
ssize_t patty_ax25_if_send(patty_ax25_if *iface,
|
||||||
const void *buf,
|
const void *buf,
|
||||||
size_t len) {
|
size_t len) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue