From 8c9edf12800bc6d68894dc457e7ebaf994429da8 Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Sun, 16 Jun 2013 00:20:00 +0000 Subject: Have the seek-read routines take a Buffer rather than a guint8 pointer as the "where to put the packet data" argument. This lets more of the libwiretap code be common between the read and seek-read code paths, and also allows for more flexibility in the "fill in the data" path - we can expand the buffer as needed in both cases. svn path=/trunk/; revision=49949 --- tshark.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'tshark.c') diff --git a/tshark.c b/tshark.c index 6d61bb9cad..c2f376fc0d 100644 --- a/tshark.c +++ b/tshark.c @@ -2741,7 +2741,7 @@ process_packet_first_pass(capture_file *cf, static gboolean process_packet_second_pass(capture_file *cf, frame_data *fdata, - struct wtap_pkthdr *phdr, const guchar *pd, + struct wtap_pkthdr *phdr, Buffer *buf, gboolean filtering_tap_listeners, guint tap_flags) { gboolean create_proto_tree; @@ -2793,7 +2793,7 @@ process_packet_second_pass(capture_file *cf, frame_data *fdata, else cinfo = NULL; - epan_dissect_run_with_taps(&edt, phdr, pd, fdata, cinfo); + epan_dissect_run_with_taps(&edt, phdr, buffer_start_ptr(buf), fdata, cinfo); /* Run the read/display filter if we have one. */ if (cf->dfcode) @@ -2863,6 +2863,7 @@ load_cap_file(capture_file *cf, char *save_file, int out_file_type, wtapng_section_t *shb_hdr; wtapng_iface_descriptions_t *idb_inf; char appname[100]; + Buffer buf; shb_hdr = wtap_file_get_shb_info(cf->wth); idb_inf = wtap_file_get_idb_info(cf->wth); @@ -2987,18 +2988,18 @@ load_cap_file(capture_file *cf, char *save_file, int out_file_type, max_packet_count = old_max_packet_count; + buffer_init(&buf, 1500); for (framenum = 1; err == 0 && framenum <= cf->count; framenum++) { fdata = frame_data_sequence_find(cf->frames, framenum); if (wtap_seek_read(cf->wth, fdata->file_off, &cf->phdr, - cf->pd, fdata->cap_len, &err, &err_info)) { - if (process_packet_second_pass(cf, fdata, - &cf->phdr, cf->pd, - filtering_tap_listeners, tap_flags)) { + &buf, fdata->cap_len, &err, &err_info)) { + if (process_packet_second_pass(cf, fdata, &cf->phdr, &buf, + filtering_tap_listeners, tap_flags)) { /* Either there's no read filtering or this packet passed the filter, so, if we're writing to a capture file, write this packet out. */ if (pdh != NULL) { - if (!wtap_dump(pdh, &cf->phdr, cf->pd, &err)) { + if (!wtap_dump(pdh, &cf->phdr, buffer_start_ptr(&cf->buf), &err)) { /* Error writing to a capture file */ switch (err) { @@ -3037,6 +3038,7 @@ load_cap_file(capture_file *cf, char *save_file, int out_file_type, } } } + buffer_free(&buf); } else { framenum = 0; -- cgit v1.2.3