diff options
author | Guy Harris <guy@alum.mit.edu> | 2017-04-20 19:08:00 -0700 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2017-04-21 06:50:21 +0000 |
commit | 67a5d9bebebe1bbe668d8da11601c1833bc7bf4d (patch) | |
tree | cf3ecb29c91935052baa8a667aae7fe7e0f2a5c6 /extcap | |
parent | 9e4c018e08d5a657f85f0cde0607db0a6d25ddf4 (diff) |
Use the cfile_ failure_message routines in androiddump.
Change-Id: Ic310eaafac054db7736c503252062c3dd3e00a99
Reviewed-on: https://code.wireshark.org/review/21265
Petri-Dish: Guy Harris <guy@alum.mit.edu>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Guy Harris <guy@alum.mit.edu>
Diffstat (limited to 'extcap')
-rw-r--r-- | extcap/Makefile.am | 1 | ||||
-rw-r--r-- | extcap/androiddump.c | 50 |
2 files changed, 39 insertions, 12 deletions
diff --git a/extcap/Makefile.am b/extcap/Makefile.am index 491522ad07..89f5399853 100644 --- a/extcap/Makefile.am +++ b/extcap/Makefile.am @@ -50,6 +50,7 @@ endif # Libraries and plugin flags with which to link androiddump. androiddump_LDADD = \ + ../ui/libui.a \ ../wiretap/libwiretap.la \ ../wsutil/libwsutil.la \ @GLIB_LIBS@ diff --git a/extcap/androiddump.c b/extcap/androiddump.c index 7b57b5a63a..d5a267e954 100644 --- a/extcap/androiddump.c +++ b/extcap/androiddump.c @@ -32,6 +32,9 @@ #include <time.h> #include <wsutil/strtoi.h> #include <wsutil/filesystem.h> +#include <wsutil/cmdarg_err.h> + +#include "ui/failure_message.h" #ifdef HAVE_NETINET_IN_H # include <netinet/in.h> @@ -260,6 +263,19 @@ static inline int is_specified_interface(char *interface, const char *interface_ return !strncmp(interface, interface_prefix, strlen(interface_prefix)); } +/* + * General errors and warnings are reported through g_warning() in + * androiddump. + * + * Unfortunately, g_warning() may be a macro, so we do it by calling + * g_logv() with the appropriate arguments. + */ +static void +failure_warning_message(const char *msg_format, va_list ap) +{ + g_logv(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, msg_format, ap); +} + static void useSndTimeout(socket_handle_t sock) { int res; #ifdef _WIN32 @@ -347,11 +363,14 @@ static struct extcap_dumper extcap_dumper_open(char *fifo, int encap) { pcap = pcap_open_dead_with_tstamp_precision(encap_ext, PACKET_LENGTH, PCAP_TSTAMP_PRECISION_NANO); extcap_dumper.dumper.pcap = pcap_dump_open(pcap, fifo); if (!extcap_dumper.dumper.pcap) { - g_warning("Cannot save lipcap dump file"); + g_warning("Can't open %s for saving packets: %s", pcap_geterr(pcap)); + pcap_close(pcap); exit(EXIT_CODE_CANNOT_SAVE_LIBPCAP_DUMP); } extcap_dumper.encap = encap; - pcap_dump_flush(extcap_dumper.dumper.pcap); + if (pcap_dump_flush(extcap_dumper.dumper.pcap) == -1) { + g_warning("Write to %s failed: %s", g_strerror(errno)); + } #else int err = 0; @@ -373,7 +392,7 @@ static struct extcap_dumper extcap_dumper_open(char *fifo, int encap) { extcap_dumper.dumper.wtap = wtap_dump_open(fifo, WTAP_FILE_TYPE_SUBTYPE_PCAP_NSEC, encap_ext, PACKET_LENGTH, FALSE, &err); if (!extcap_dumper.dumper.wtap) { - g_warning("Cannot save dump file"); + cfile_dump_open_failure_message("androiddump", fifo, err, WTAP_FILE_TYPE_SUBTYPE_PCAP_NSEC); exit(EXIT_CODE_CANNOT_SAVE_WIRETAP_DUMP); } extcap_dumper.encap = encap; @@ -383,7 +402,8 @@ static struct extcap_dumper extcap_dumper_open(char *fifo, int encap) { return extcap_dumper; } -static gboolean extcap_dumper_dump(struct extcap_dumper extcap_dumper, char *buffer, +static gboolean extcap_dumper_dump(struct extcap_dumper extcap_dumper, + char *fifo, char *buffer, gssize captured_length, gssize reported_length, time_t seconds, int nanoseconds) { #ifdef ANDROIDDUMP_USE_LIBPCAP @@ -395,7 +415,9 @@ static gboolean extcap_dumper_dump(struct extcap_dumper extcap_dumper, char *buf pcap_header.ts.tv_usec = nanoseconds / 1000; pcap_dump((u_char *) extcap_dumper.dumper.pcap, &pcap_header, buffer); - pcap_dump_flush(extcap_dumper.dumper.pcap); + if (pcap_dump_flush(extcap_dumper.dumper.pcap) == -1) { + g_warning("Write to %s failed: %s", g_strerror(errno)); + } #else int err = 0; char *err_info; @@ -436,7 +458,8 @@ static gboolean extcap_dumper_dump(struct extcap_dumper extcap_dumper, char *buf } if (!wtap_dump(extcap_dumper.dumper.wtap, &hdr, (const guint8 *) buffer, &err, &err_info)) { - g_warning("Cannot dump: %s", err_info); + cfile_write_failure_message("androiddump", NULL, fifo, err, err_info, + 0, WTAP_FILE_TYPE_SUBTYPE_PCAP_NSEC); return FALSE; } @@ -1523,7 +1546,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, h4_header->direction = GINT32_TO_BE(direction_character == '>'); - endless_loop = extcap_dumper_dump(extcap_dumper, packet, + endless_loop = extcap_dumper_dump(extcap_dumper, fifo, packet, captured_length + sizeof(own_pcap_bluetooth_h4_header), captured_length + sizeof(own_pcap_bluetooth_h4_header), ts, @@ -1822,7 +1845,7 @@ static int capture_android_bluetooth_external_parser(char *interface, ts -= BLUEDROID_TIMESTAMP_BASE; - endless_loop = extcap_dumper_dump(extcap_dumper, packet, + endless_loop = extcap_dumper_dump(extcap_dumper, fifo, packet, captured_length, captured_length, (uint32_t)(ts / 1000000), @@ -1970,7 +1993,8 @@ static int capture_android_bluetooth_btsnoop_net(char *interface, char *fifo, direction = GINT32_FROM_BE(*flags) & 0x01; h4_header->direction = GINT32_TO_BE(direction); - endless_loop = extcap_dumper_dump(extcap_dumper, payload - sizeof(own_pcap_bluetooth_h4_header), + endless_loop = extcap_dumper_dump(extcap_dumper, fifo, + payload - sizeof(own_pcap_bluetooth_h4_header), GINT32_FROM_BE(*captured_length) + sizeof(own_pcap_bluetooth_h4_header), GINT32_FROM_BE(*reported_length) + sizeof(own_pcap_bluetooth_h4_header), (uint32_t)(ts / 1000000), @@ -2178,7 +2202,7 @@ static int capture_android_logcat_text(char *interface, char *fifo, nsecs = (int) (ms * 1e6); } - endless_loop = extcap_dumper_dump(extcap_dumper, packet, + endless_loop = extcap_dumper_dump(extcap_dumper, fifo, packet, length, length, secs, nsecs); @@ -2405,7 +2429,7 @@ static int capture_android_logcat(char *interface, char *fifo, length = (*payload_length) + header_size + (gssize)exported_pdu_headers_size; while (used_buffer_length >= exported_pdu_headers_size + header_size && (size_t)length <= used_buffer_length) { - endless_loop = extcap_dumper_dump(extcap_dumper, packet, + endless_loop = extcap_dumper_dump(extcap_dumper, fifo, packet, length, length, *timestamp_secs, *timestamp_nsecs); @@ -2602,7 +2626,7 @@ static int capture_android_wifi_tcpdump(char *interface, char *fifo, * So to avoid this error we are checking for length of packet before passing it to dumper. */ if (p_header.incl_len > 0) { - endless_loop = extcap_dumper_dump(extcap_dumper , filter_buffer + read_offset+ PCAP_RECORD_HEADER_LENGTH, + endless_loop = extcap_dumper_dump(extcap_dumper, fifo, filter_buffer + read_offset+ PCAP_RECORD_HEADER_LENGTH, p_header.incl_len , p_header.orig_len , p_header.ts_sec , p_header.ts_usec); } frame_length = p_header.incl_len + PCAP_RECORD_HEADER_LENGTH; @@ -2685,6 +2709,8 @@ int main(int argc, char **argv) { attach_parent_console(); #endif /* _WIN32 */ + cmdarg_err_init(failure_warning_message, failure_warning_message); + extcap_conf = g_new0(extcap_parameters, 1); help_url = data_file_url("androiddump.html"); |