Use heap-allocated buffer in ax25dump(8)
This commit is contained in:
parent
5b59b163d2
commit
a672b4e44a
4 changed files with 17 additions and 27 deletions
|
@ -17,6 +17,8 @@
|
||||||
|
|
||||||
#include <patty/bin/kiss.h>
|
#include <patty/bin/kiss.h>
|
||||||
|
|
||||||
|
#define AX25DUMP_BUFSZ 4096
|
||||||
|
|
||||||
static void usage(int argc, char **argv, const char *message, ...) {
|
static void usage(int argc, char **argv, const char *message, ...) {
|
||||||
if (message != NULL) {
|
if (message != NULL) {
|
||||||
va_list args;
|
va_list args;
|
||||||
|
@ -41,7 +43,7 @@ int main(int argc, char **argv) {
|
||||||
{ NULL, 0, NULL, 0 }
|
{ NULL, 0, NULL, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
uint8_t buf[4096];
|
void *buf;
|
||||||
ssize_t readlen;
|
ssize_t readlen;
|
||||||
|
|
||||||
patty_kiss_tnc_info info;
|
patty_kiss_tnc_info info;
|
||||||
|
@ -118,7 +120,11 @@ int main(int argc, char **argv) {
|
||||||
goto error_kiss_tnc_new;
|
goto error_kiss_tnc_new;
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((readlen = patty_kiss_tnc_recv(raw, buf, sizeof(buf))) > 0) {
|
if ((buf = malloc(AX25DUMP_BUFSZ)) == NULL) {
|
||||||
|
goto error_malloc_buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((readlen = patty_kiss_tnc_recv(raw, buf, AX25DUMP_BUFSZ)) > 0) {
|
||||||
ssize_t decoded,
|
ssize_t decoded,
|
||||||
offset = 0;
|
offset = 0;
|
||||||
|
|
||||||
|
@ -176,6 +182,8 @@ error_ax25_frame_decode_address:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(buf);
|
||||||
|
|
||||||
patty_kiss_tnc_destroy(raw);
|
patty_kiss_tnc_destroy(raw);
|
||||||
|
|
||||||
if ((st.st_mode & S_IFMT) == S_IFSOCK) {
|
if ((st.st_mode & S_IFMT) == S_IFSOCK) {
|
||||||
|
@ -187,6 +195,9 @@ error_ax25_frame_decode_address:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error_io:
|
error_io:
|
||||||
|
free(buf);
|
||||||
|
|
||||||
|
error_malloc_buf:
|
||||||
patty_kiss_tnc_destroy(raw);
|
patty_kiss_tnc_destroy(raw);
|
||||||
|
|
||||||
error_kiss_tnc_new:
|
error_kiss_tnc_new:
|
||||||
|
|
|
@ -315,16 +315,7 @@ int patty_ax25_aprs_is_pending(patty_ax25_aprs_is *aprs) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t patty_ax25_aprs_is_flush(patty_ax25_aprs_is *aprs) {
|
ssize_t patty_ax25_aprs_is_flush(patty_ax25_aprs_is *aprs) {
|
||||||
ssize_t ret;
|
ssize_t ret = aprs->encoded;
|
||||||
|
|
||||||
if (patty_ax25_aprs_is_pending(aprs)) {
|
|
||||||
aprs->stats.rx_frames++;
|
|
||||||
aprs->stats.rx_bytes += aprs->encoded;
|
|
||||||
|
|
||||||
ret = aprs->encoded;
|
|
||||||
} else {
|
|
||||||
ret = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
aprs->state = APRS_IS_HEADER;
|
aprs->state = APRS_IS_HEADER;
|
||||||
aprs->offset_i = aprs->readlen;
|
aprs->offset_i = aprs->readlen;
|
||||||
|
@ -445,9 +436,6 @@ ssize_t patty_ax25_aprs_is_send(patty_ax25_aprs_is *aprs,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
aprs->stats.tx_frames++;
|
|
||||||
aprs->stats.tx_bytes += i;
|
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
|
4
src/if.c
4
src/if.c
|
@ -302,14 +302,14 @@ ssize_t patty_ax25_if_flush(patty_ax25_if *iface) {
|
||||||
ssize_t len = iface->driver->flush(iface->phy);
|
ssize_t len = iface->driver->flush(iface->phy);
|
||||||
|
|
||||||
if (len > 0) {
|
if (len > 0) {
|
||||||
|
patty_ax25_if_stats *stats = iface->driver->stats(iface->phy);
|
||||||
|
|
||||||
struct promisc_frame frame = {
|
struct promisc_frame frame = {
|
||||||
.buf = iface->rx_buf,
|
.buf = iface->rx_buf,
|
||||||
.len = len,
|
.len = len,
|
||||||
.iface = iface
|
.iface = iface
|
||||||
};
|
};
|
||||||
|
|
||||||
patty_ax25_if_stats *stats = iface->driver->stats(iface->phy);
|
|
||||||
|
|
||||||
stats->rx_frames++;
|
stats->rx_frames++;
|
||||||
stats->rx_bytes += len;
|
stats->rx_bytes += len;
|
||||||
|
|
||||||
|
|
11
src/tnc.c
11
src/tnc.c
|
@ -332,16 +332,7 @@ int patty_kiss_tnc_pending(patty_kiss_tnc *tnc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t patty_kiss_tnc_flush(patty_kiss_tnc *tnc) {
|
ssize_t patty_kiss_tnc_flush(patty_kiss_tnc *tnc) {
|
||||||
ssize_t ret;
|
ssize_t ret = tnc->offset_o;
|
||||||
|
|
||||||
if (patty_kiss_tnc_pending(tnc)) {
|
|
||||||
tnc->stats.rx_frames++;
|
|
||||||
tnc->stats.rx_bytes += tnc->offset_o;
|
|
||||||
|
|
||||||
ret = tnc->offset_o;
|
|
||||||
} else {
|
|
||||||
ret = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
tnc->state = KISS_NONE;
|
tnc->state = KISS_NONE;
|
||||||
tnc->command = PATTY_KISS_RETURN;
|
tnc->command = PATTY_KISS_RETURN;
|
||||||
|
|
Loading…
Add table
Reference in a new issue