From a0a6635da8c409feb4fcdf30432242799760a92c Mon Sep 17 00:00:00 2001 From: Siddharth Chandrasekaran Date: Sat, 17 Feb 2024 14:28:01 +0100 Subject: [PATCH] pcap: Change method names and fix some issues Signed-off-by: Siddharth Chandrasekaran --- include/utils/pcap_gen.h | 6 +++--- src/pcap_gen.c | 29 +++++++++++++++-------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/include/utils/pcap_gen.h b/include/utils/pcap_gen.h index 7ae481d..7a6778d 100644 --- a/include/utils/pcap_gen.h +++ b/include/utils/pcap_gen.h @@ -20,9 +20,9 @@ typedef struct { void *cache; } pcap_t; -pcap_t *pcap_create(char *path, uint32_t max_packet_size, uint32_t link_type); -int pcap_add_record(pcap_t *cap, uint8_t *capture_data, uint32_t length); -void pcap_dump(pcap_t *cap); +pcap_t *pcap_start(char *path, uint32_t max_packet_size, uint32_t link_type); +int pcap_add(pcap_t *cap, uint8_t *capture_data, uint32_t length); +int pcap_stop(pcap_t *cap); #ifdef __cplusplus } diff --git a/src/pcap_gen.c b/src/pcap_gen.c index bd0abaa..2637c69 100644 --- a/src/pcap_gen.c +++ b/src/pcap_gen.c @@ -31,7 +31,7 @@ struct pcap_record_header { uint32_t orig_len; } __packed; -pcap_t *pcap_create(char *path, uint32_t max_packet_size, uint32_t link_type) +pcap_t *pcap_start(char *path, uint32_t max_packet_size, uint32_t link_type) { pcap_t *cap; struct pcap_header header; @@ -73,22 +73,19 @@ pcap_t *pcap_create(char *path, uint32_t max_packet_size, uint32_t link_type) static int pcap_flush(pcap_t *cap) { - int ret; - - ret = fwrite(cap->cache, cap->offset, 1, cap->file); - if (!ret) - return -1; - fflush(cap->file); - cap->offset = 0; - return 0; + if (fwrite(cap->cache, cap->offset, 1, cap->file)) { + cap->offset = 0; + return fflush(cap->file); + } + return -1; } -int pcap_add_record(pcap_t *cap, uint8_t *capture_data, uint32_t length) +int pcap_add(pcap_t *cap, uint8_t *capture_data, uint32_t length) { struct pcap_record_header header; uint32_t sec, usec; - if (sizeof(header) + length > PCAP_CACHE_SIZE) { + if (cap->offset + sizeof(header) + length > PCAP_CACHE_SIZE) { if (pcap_flush(cap)) return -1; } @@ -107,10 +104,14 @@ int pcap_add_record(pcap_t *cap, uint8_t *capture_data, uint32_t length) return 0; } -void pcap_dump(pcap_t *cap) +int pcap_stop(pcap_t *cap) { - pcap_flush(cap); - fclose(cap->file); + int ret = 0; + + ret = pcap_flush(cap); + if (ret == 0) + ret = fclose(cap->file); free(cap->cache); free(cap); + return ret; }